From 87799897e191482854362944599dc3cec87bc926 Mon Sep 17 00:00:00 2001 From: 397740 <397740@win.lanl.gov> Date: Tue, 9 Jul 2024 11:18:51 -0600 Subject: [PATCH 001/233] ENH: Added yaml workflow files for testing installation of Fierro via anaconda and some example inputs --- .etc/conda_build_environment.yaml | 1 + .github/workflows/fierro-test-no-implicit.yml | 83 +++++++++++++++++ .github/workflows/fierro-test.yml | 91 +++++++++++++++++++ 3 files changed, 175 insertions(+) create mode 100644 .github/workflows/fierro-test-no-implicit.yml create mode 100644 .github/workflows/fierro-test.yml diff --git a/.etc/conda_build_environment.yaml b/.etc/conda_build_environment.yaml index a4bf88c4c..3db6dbf36 100644 --- a/.etc/conda_build_environment.yaml +++ b/.etc/conda_build_environment.yaml @@ -7,3 +7,4 @@ dependencies: - boa # For building - conda-build - anaconda-client # For uploading + - python=3.8 diff --git a/.github/workflows/fierro-test-no-implicit.yml b/.github/workflows/fierro-test-no-implicit.yml new file mode 100644 index 000000000..2751db443 --- /dev/null +++ b/.github/workflows/fierro-test-no-implicit.yml @@ -0,0 +1,83 @@ +name: fierro-test-no-implicit + +# Workflow runs on new push to main +on: + push: + branches: + - main + +jobs: + build: + + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + with: + submodules: recursive + - name: update the package list + run: + sudo apt-get update + shell: bash + - name: Install build tools + run: + sudo apt-get install build-essential + shell: bash + - name: Install LaPack + run: + sudo apt-get install libblas-dev liblapack-dev + shell: bash + - name: Install MPI + run: | + sudo apt-get install libopenmpi-dev openmpi-bin + echo "MPI_OPTS=--oversubscribe" >> $GITHUB_ENV + - name: Install cmake + run: + sudo apt-get -y install cmake + shell: bash + - name: Install python + run: + sudo apt-get install python3.6 + shell: bash + + - name: Set up Miniconda + uses: conda-incubator/setup-miniconda@v2 + with: + auto-update-conda: true + python-version: 3.8 + + - name: Create conda environment + run: conda env create -f ./.etc/conda_build_environment.yaml + + - name: Initialize conda + run: conda init bash + + - name: Activate conda environment, install Fierro anaconda packages + run: | + source ~/.bashrc + conda activate build-env + conda install --solver=classic conda-forge::conda-libmamba-solver conda-forge::libmamba conda-forge::libmambapy conda-forge::libarchive + conda install -c conda-forge -c fierromechanics fierro-cpu + conda install -c conda-forge -c fierromechanics evpfft + conda install -c conda-forge -c fierromechanics fierro_gui + + - name: Verify package dependencies + run: | + conda info --envs + conda list + + - name: Test fierro-parallel-explicit + run: | + source ~/.bashrc + conda activate build-env + fierro-parallel-explicit ./src/Parallel-Solvers/Parallel-Explicit/Example_Yaml_Scripts/example_simple.yaml + shell: bash + + - name: Test fierro-mesh-builder + run: | + source ~/.bashrc + conda activate build-env + fierro-mesh-builder ./src/Mesh-Builder/examples/mesh_Box_16_p3.yaml + shell: bash + + diff --git a/.github/workflows/fierro-test.yml b/.github/workflows/fierro-test.yml new file mode 100644 index 000000000..cd08820f3 --- /dev/null +++ b/.github/workflows/fierro-test.yml @@ -0,0 +1,91 @@ +name: fierro-test + +# Workflow runs on new push to main +on: + push: + branches: + - main + +jobs: + build: + + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + with: + submodules: recursive + - name: update the package list + run: + sudo apt-get update + shell: bash + - name: Install build tools + run: + sudo apt-get install build-essential + shell: bash + - name: Install LaPack + run: + sudo apt-get install libblas-dev liblapack-dev + shell: bash + - name: Install MPI + run: | + sudo apt-get install libopenmpi-dev openmpi-bin + echo "MPI_OPTS=--oversubscribe" >> $GITHUB_ENV + - name: Install cmake + run: + sudo apt-get -y install cmake + shell: bash + - name: Install python + run: + sudo apt-get install python3.6 + shell: bash + + - name: Set up Miniconda + uses: conda-incubator/setup-miniconda@v2 + with: + auto-update-conda: true + python-version: 3.8 + + - name: Create conda environment + run: conda env create -f ./.etc/conda_build_environment.yaml + + - name: Initialize conda + run: conda init bash + + - name: Activate conda environment, install Fierro anaconda packages + run: | + source ~/.bashrc + conda activate build-env + conda install --solver=classic conda-forge::conda-libmamba-solver conda-forge::libmamba conda-forge::libmambapy conda-forge::libarchive + conda install -c conda-forge -c fierromechanics fierro-cpu + conda install -c conda-forge -c fierromechanics evpfft + conda install -c conda-forge -c fierromechanics fierro_gui + + - name: Verify package dependencies + run: | + conda info --envs + conda list + + - name: Test fierro-parallel-explicit + run: | + source ~/.bashrc + conda activate build-env + fierro-parallel-explicit ./src/Parallel-Solvers/Parallel-Explicit/Example_Yaml_Scripts/example_simple.yaml + shell: bash + + - name: Test fierro-parallel-implicit + run: | + source ~/.bashrc + conda activate build-env + fierro-parallel-implicit ./Example_Yaml_Scripts/example_simple.yaml + working-directory: ./src/Parallel-Solvers/Implicit-Lagrange + shell: bash + + - name: Test fierro-mesh-builder + run: | + source ~/.bashrc + conda activate build-env + fierro-mesh-builder ./src/Mesh-Builder/examples/mesh_Box_16_p3.yaml + shell: bash + + From d82620bc2c4287b4267d0f707de552d58c760a80 Mon Sep 17 00:00:00 2001 From: 397740 <397740@win.lanl.gov> Date: Tue, 9 Jul 2024 11:43:03 -0600 Subject: [PATCH 002/233] ENH: Added yaml workflow files for testing installation of Fierro via anaconda and some example input --- .github/workflows/fierro-test.yml | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/.github/workflows/fierro-test.yml b/.github/workflows/fierro-test.yml index cd08820f3..0f3619f8b 100644 --- a/.github/workflows/fierro-test.yml +++ b/.github/workflows/fierro-test.yml @@ -73,19 +73,21 @@ jobs: fierro-parallel-explicit ./src/Parallel-Solvers/Parallel-Explicit/Example_Yaml_Scripts/example_simple.yaml shell: bash - - name: Test fierro-parallel-implicit + - name: Test fierro-mesh-builder run: | source ~/.bashrc conda activate build-env - fierro-parallel-implicit ./Example_Yaml_Scripts/example_simple.yaml - working-directory: ./src/Parallel-Solvers/Implicit-Lagrange + fierro-mesh-builder ./src/Mesh-Builder/examples/mesh_Box_16_p3.yaml shell: bash - - - name: Test fierro-mesh-builder + + - name: Test fierro-parallel-implicit run: | source ~/.bashrc conda activate build-env - fierro-mesh-builder ./src/Mesh-Builder/examples/mesh_Box_16_p3.yaml + fierro-parallel-implicit ./Example_Yaml_Scripts/example_simple.yaml + working-directory: ./src/Parallel-Solvers/Implicit-Lagrange shell: bash + + From ac36aa84fa4e4e1c5ff582bc86f00a0bac5f4007 Mon Sep 17 00:00:00 2001 From: Zachary Baker Date: Wed, 10 Jul 2024 10:08:34 -0600 Subject: [PATCH 003/233] Create notification.yml --- .github/workflows/notification.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 .github/workflows/notification.yml diff --git a/.github/workflows/notification.yml b/.github/workflows/notification.yml new file mode 100644 index 000000000..9de22002a --- /dev/null +++ b/.github/workflows/notification.yml @@ -0,0 +1,4 @@ +name: test notification workflow +on: workflow_dispatch + + From e19528b2e281a15dde1f29590dd560414b7d2ccc Mon Sep 17 00:00:00 2001 From: Zachary Baker Date: Wed, 10 Jul 2024 10:09:50 -0600 Subject: [PATCH 004/233] Update notification.yml --- .github/workflows/notification.yml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/.github/workflows/notification.yml b/.github/workflows/notification.yml index 9de22002a..6599cf924 100644 --- a/.github/workflows/notification.yml +++ b/.github/workflows/notification.yml @@ -1,4 +1,18 @@ name: test notification workflow on: workflow_dispatch +jobs: + build: + + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + with: + submodules: recursive + - name: update the package list + run: + sudo apt-get update + shell: bash + From 21711264ef58030635f2d2db39ee8360d99e5863 Mon Sep 17 00:00:00 2001 From: Zachary Baker Date: Wed, 10 Jul 2024 10:11:09 -0600 Subject: [PATCH 005/233] Update fierro-test.yml --- .github/workflows/fierro-test.yml | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/.github/workflows/fierro-test.yml b/.github/workflows/fierro-test.yml index 0f3619f8b..407962e1c 100644 --- a/.github/workflows/fierro-test.yml +++ b/.github/workflows/fierro-test.yml @@ -1,10 +1,11 @@ name: fierro-test -# Workflow runs on new push to main -on: - push: - branches: - - main +# Workflow runs following successful anaconda distribution +on: + workflow_run: + workflows: ["test notification workflow"] + types: + - completed jobs: build: From 4598a317692501695d5895b31d76cb15c23d129b Mon Sep 17 00:00:00 2001 From: Zachary Baker Date: Wed, 10 Jul 2024 10:12:24 -0600 Subject: [PATCH 006/233] Update fierro-test-no-implicit.yml --- .github/workflows/fierro-test-no-implicit.yml | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/.github/workflows/fierro-test-no-implicit.yml b/.github/workflows/fierro-test-no-implicit.yml index 2751db443..a8e16f1d4 100644 --- a/.github/workflows/fierro-test-no-implicit.yml +++ b/.github/workflows/fierro-test-no-implicit.yml @@ -1,10 +1,11 @@ name: fierro-test-no-implicit -# Workflow runs on new push to main -on: - push: - branches: - - main +# Workflow runs on following successful conda distribution +on: + workflow_run: + workflows: ["test notification workflow"] + types: + - completed jobs: build: From 5b3043575892832255b4dc713656636086a222ca Mon Sep 17 00:00:00 2001 From: Zachary Baker Date: Wed, 10 Jul 2024 10:19:10 -0600 Subject: [PATCH 007/233] Create test2.yml --- .github/workflows/test2.yml | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 .github/workflows/test2.yml diff --git a/.github/workflows/test2.yml b/.github/workflows/test2.yml new file mode 100644 index 000000000..7e30b113d --- /dev/null +++ b/.github/workflows/test2.yml @@ -0,0 +1,16 @@ +name: test notification workflow2 +on: workflow_dispatch + +jobs: + build: + + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + with: + submodules: recursive + - name: update the package list + run: + sudo apt-get update + shell: bash From 0ebe7cd60594bcf6f3eac8fd3e15cb711b8aa9c2 Mon Sep 17 00:00:00 2001 From: Zachary Baker Date: Wed, 10 Jul 2024 10:19:35 -0600 Subject: [PATCH 008/233] Update fierro-test-no-implicit.yml --- .github/workflows/fierro-test-no-implicit.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/fierro-test-no-implicit.yml b/.github/workflows/fierro-test-no-implicit.yml index a8e16f1d4..ee7255dc1 100644 --- a/.github/workflows/fierro-test-no-implicit.yml +++ b/.github/workflows/fierro-test-no-implicit.yml @@ -3,7 +3,7 @@ name: fierro-test-no-implicit # Workflow runs on following successful conda distribution on: workflow_run: - workflows: ["test notification workflow"] + workflows: ["test notification workflow, test notification workflow2"] types: - completed From 8f3f5e4d9b5768ddfdec01e4f55f27b7902341c7 Mon Sep 17 00:00:00 2001 From: Zachary Baker Date: Wed, 10 Jul 2024 10:21:20 -0600 Subject: [PATCH 009/233] Update fierro-test-no-implicit.yml --- .github/workflows/fierro-test-no-implicit.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/fierro-test-no-implicit.yml b/.github/workflows/fierro-test-no-implicit.yml index ee7255dc1..a8e16f1d4 100644 --- a/.github/workflows/fierro-test-no-implicit.yml +++ b/.github/workflows/fierro-test-no-implicit.yml @@ -3,7 +3,7 @@ name: fierro-test-no-implicit # Workflow runs on following successful conda distribution on: workflow_run: - workflows: ["test notification workflow, test notification workflow2"] + workflows: ["test notification workflow"] types: - completed From c00e0f21e0a13ec0aa94a3eb0fe95bba8393f7b8 Mon Sep 17 00:00:00 2001 From: Zachary Baker Date: Wed, 10 Jul 2024 10:26:52 -0600 Subject: [PATCH 010/233] Update fierro-test-no-implicit.yml --- .github/workflows/fierro-test-no-implicit.yml | 21 ++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/.github/workflows/fierro-test-no-implicit.yml b/.github/workflows/fierro-test-no-implicit.yml index a8e16f1d4..2f5b572f2 100644 --- a/.github/workflows/fierro-test-no-implicit.yml +++ b/.github/workflows/fierro-test-no-implicit.yml @@ -1,17 +1,24 @@ name: fierro-test-no-implicit # Workflow runs on following successful conda distribution -on: - workflow_run: - workflows: ["test notification workflow"] - types: - - completed +#on: + #workflow_run: + #workflows: ["test notification workflow"] + #types: + #- completed + +on: workflow_dispatch jobs: - build: + test1: + uses: Fierro/.github/workflows/notification.yml@main + test2: + uses: Fierro/.github/workflows/test.yml@main + + build: runs-on: ubuntu-latest - + needs: [test1, test2] steps: - uses: actions/checkout@v4 with: From 148bb1c8086daf73c2e054e8edbd16167ae6569f Mon Sep 17 00:00:00 2001 From: Zachary Baker Date: Wed, 10 Jul 2024 10:28:51 -0600 Subject: [PATCH 011/233] Update fierro-test-no-implicit.yml --- .github/workflows/fierro-test-no-implicit.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/fierro-test-no-implicit.yml b/.github/workflows/fierro-test-no-implicit.yml index 2f5b572f2..7c5058d39 100644 --- a/.github/workflows/fierro-test-no-implicit.yml +++ b/.github/workflows/fierro-test-no-implicit.yml @@ -11,10 +11,10 @@ on: workflow_dispatch jobs: test1: - uses: Fierro/.github/workflows/notification.yml@main + uses: ./.github/workflows/notification.yml test2: - uses: Fierro/.github/workflows/test.yml@main + uses: ./.github/workflows/test.yml build: runs-on: ubuntu-latest From bc1c25bb82380d29f1e9de77e2fdf0eb7b40a3f2 Mon Sep 17 00:00:00 2001 From: Zachary Baker Date: Wed, 10 Jul 2024 10:32:42 -0600 Subject: [PATCH 012/233] Update notification.yml --- .github/workflows/notification.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/notification.yml b/.github/workflows/notification.yml index 6599cf924..9f2841168 100644 --- a/.github/workflows/notification.yml +++ b/.github/workflows/notification.yml @@ -1,5 +1,6 @@ name: test notification workflow -on: workflow_dispatch +on: + workflow_call jobs: build: From 04bade51e783228d6760a9e386c598bbaa7dc459 Mon Sep 17 00:00:00 2001 From: Zachary Baker Date: Wed, 10 Jul 2024 10:33:39 -0600 Subject: [PATCH 013/233] Update and rename test2.yml to notification2.yml --- .github/workflows/{test2.yml => notification2.yml} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename .github/workflows/{test2.yml => notification2.yml} (92%) diff --git a/.github/workflows/test2.yml b/.github/workflows/notification2.yml similarity index 92% rename from .github/workflows/test2.yml rename to .github/workflows/notification2.yml index 7e30b113d..04454af51 100644 --- a/.github/workflows/test2.yml +++ b/.github/workflows/notification2.yml @@ -1,5 +1,5 @@ name: test notification workflow2 -on: workflow_dispatch +on: workflow_call jobs: build: From 212b7530a314caddb64fb93c77ba5150f2954ed2 Mon Sep 17 00:00:00 2001 From: Zachary Baker Date: Wed, 10 Jul 2024 10:34:05 -0600 Subject: [PATCH 014/233] Update fierro-test-no-implicit.yml --- .github/workflows/fierro-test-no-implicit.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/fierro-test-no-implicit.yml b/.github/workflows/fierro-test-no-implicit.yml index 7c5058d39..68ff4d7dd 100644 --- a/.github/workflows/fierro-test-no-implicit.yml +++ b/.github/workflows/fierro-test-no-implicit.yml @@ -14,7 +14,7 @@ jobs: uses: ./.github/workflows/notification.yml test2: - uses: ./.github/workflows/test.yml + uses: ./.github/workflows/notification2.yml build: runs-on: ubuntu-latest From 5b12fcf26db136459aacc70ae8555fc7abeaf92e Mon Sep 17 00:00:00 2001 From: Zachary Baker Date: Wed, 10 Jul 2024 11:28:01 -0600 Subject: [PATCH 015/233] Create publish-all.yml --- .github/workflows/publish-all.yml | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 .github/workflows/publish-all.yml diff --git a/.github/workflows/publish-all.yml b/.github/workflows/publish-all.yml new file mode 100644 index 000000000..00c654b3c --- /dev/null +++ b/.github/workflows/publish-all.yml @@ -0,0 +1,10 @@ +name: Publish All + +on: workflow_dispatch + +jobs: + test1: + uses: ./.github/workflows/notification.yml + + test2: + uses: ./.github/workflows/notification2.yml From 874c45f9b5e166e7dd8b4e74423ca6a3411eb838 Mon Sep 17 00:00:00 2001 From: Zachary Baker Date: Wed, 10 Jul 2024 11:30:45 -0600 Subject: [PATCH 016/233] Update fierro-test-no-implicit.yml --- .github/workflows/fierro-test-no-implicit.yml | 21 ++++++------------- 1 file changed, 6 insertions(+), 15 deletions(-) diff --git a/.github/workflows/fierro-test-no-implicit.yml b/.github/workflows/fierro-test-no-implicit.yml index 68ff4d7dd..88dbad84a 100644 --- a/.github/workflows/fierro-test-no-implicit.yml +++ b/.github/workflows/fierro-test-no-implicit.yml @@ -1,24 +1,15 @@ name: fierro-test-no-implicit # Workflow runs on following successful conda distribution -#on: - #workflow_run: - #workflows: ["test notification workflow"] - #types: - #- completed - -on: workflow_dispatch - +on: + workflow_run: + workflows: ["test notification workflow, test notification workflow2"] + types: + - completed + jobs: - test1: - uses: ./.github/workflows/notification.yml - - test2: - uses: ./.github/workflows/notification2.yml - build: runs-on: ubuntu-latest - needs: [test1, test2] steps: - uses: actions/checkout@v4 with: From 792d20bf8fce9c5c9b6c0b7ce948176e0eaf7376 Mon Sep 17 00:00:00 2001 From: Zachary Baker Date: Wed, 10 Jul 2024 11:43:00 -0600 Subject: [PATCH 017/233] Update publish-all.yml --- .github/workflows/publish-all.yml | 35 +++++++++++++++++++++++++++---- 1 file changed, 31 insertions(+), 4 deletions(-) diff --git a/.github/workflows/publish-all.yml b/.github/workflows/publish-all.yml index 00c654b3c..dc98e0e29 100644 --- a/.github/workflows/publish-all.yml +++ b/.github/workflows/publish-all.yml @@ -3,8 +3,35 @@ name: Publish All on: workflow_dispatch jobs: - test1: - uses: ./.github/workflows/notification.yml + elements: + uses: ./.github/workflows/publish-elements.yml - test2: - uses: ./.github/workflows/notification2.yml + evpfft-cpu: + uses: ./.github/workflows/publish-evpfft-cpu.yml + + evpfft-dev: + uses: ./.github/workflows/publish-evpfft-dev.yml + + evpfft-gui: + uses: ./.github/workflows/publish-evpfft-gui.yml + + fierro-cpu: + uses: ./.github/workflows/publish-fierro-cpu.yml + + fierro-dev: + uses: ./.github/workflows/publish-fierro-dev.yml + + fierro-gui: + uses: ./.github/workflows/publish-fierro-gui.yml + + heffte-cpu: + uses: ./.github/workflows/publish-heffte-cpu.yml + + heffte-cuda: + uses: ./.github/workflows/publish-heffte-cuda.yml + + trilinos: + uses: ./.github/workflows/publish-trillinos.yml + + voxelizer: + uses: ./.github/workflows/publish-voxelizer.yml From 511bfe647614d5ac530f9acaf8972a8dd91be292 Mon Sep 17 00:00:00 2001 From: Zachary Baker Date: Wed, 10 Jul 2024 11:44:13 -0600 Subject: [PATCH 018/233] Update fierro-test-no-implicit.yml --- .github/workflows/fierro-test-no-implicit.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/fierro-test-no-implicit.yml b/.github/workflows/fierro-test-no-implicit.yml index 88dbad84a..9012d922c 100644 --- a/.github/workflows/fierro-test-no-implicit.yml +++ b/.github/workflows/fierro-test-no-implicit.yml @@ -1,4 +1,4 @@ -name: fierro-test-no-implicit +name: Fierro Test (No Implicit) # Workflow runs on following successful conda distribution on: From e8b7fee5b22143ab71da5e5d6b2de86c1819efe3 Mon Sep 17 00:00:00 2001 From: Zachary Baker Date: Wed, 10 Jul 2024 11:44:38 -0600 Subject: [PATCH 019/233] Update notification.yml --- .github/workflows/notification.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/notification.yml b/.github/workflows/notification.yml index 9f2841168..e60c04e2e 100644 --- a/.github/workflows/notification.yml +++ b/.github/workflows/notification.yml @@ -1,6 +1,6 @@ name: test notification workflow on: - workflow_call + workflow_dispatch jobs: build: From 5d16b8489a457a4539ab840aa2106a5f0e2a59b7 Mon Sep 17 00:00:00 2001 From: Zachary Baker Date: Wed, 10 Jul 2024 11:48:44 -0600 Subject: [PATCH 020/233] Update fierro-test-no-implicit.yml --- .github/workflows/fierro-test-no-implicit.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/fierro-test-no-implicit.yml b/.github/workflows/fierro-test-no-implicit.yml index 9012d922c..414dbb51a 100644 --- a/.github/workflows/fierro-test-no-implicit.yml +++ b/.github/workflows/fierro-test-no-implicit.yml @@ -3,7 +3,7 @@ name: Fierro Test (No Implicit) # Workflow runs on following successful conda distribution on: workflow_run: - workflows: ["test notification workflow, test notification workflow2"] + workflows: [test notification workflow, test notification workflow2] types: - completed From bb043651c9deb717c1947a57434693f34aa8765a Mon Sep 17 00:00:00 2001 From: Zachary Baker Date: Wed, 10 Jul 2024 11:49:40 -0600 Subject: [PATCH 021/233] Update notification2.yml --- .github/workflows/notification2.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/notification2.yml b/.github/workflows/notification2.yml index 04454af51..7e30b113d 100644 --- a/.github/workflows/notification2.yml +++ b/.github/workflows/notification2.yml @@ -1,5 +1,5 @@ name: test notification workflow2 -on: workflow_call +on: workflow_dispatch jobs: build: From 5081d50e0a5b0def61f7b1223fe5b0e407086731 Mon Sep 17 00:00:00 2001 From: Zachary Baker Date: Wed, 10 Jul 2024 11:54:01 -0600 Subject: [PATCH 022/233] Update fierro-test-no-implicit.yml --- .github/workflows/fierro-test-no-implicit.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/fierro-test-no-implicit.yml b/.github/workflows/fierro-test-no-implicit.yml index 414dbb51a..da0aece2d 100644 --- a/.github/workflows/fierro-test-no-implicit.yml +++ b/.github/workflows/fierro-test-no-implicit.yml @@ -3,7 +3,7 @@ name: Fierro Test (No Implicit) # Workflow runs on following successful conda distribution on: workflow_run: - workflows: [test notification workflow, test notification workflow2] + workflows: [Publish Test, Publish All, Publish Elements, Publish EVPFFT-CPU, Publish EVPFFT-dev, Publish EVPFFT-GPU, Publish FIERRO GUI, Publish Fierro-CPU, Publish Fierro-dev, Publish Heffte, Publish Heffte CUDA, Publish Trilinos-CPU] types: - completed From 92f5e8b59adcbe3da7921e600aaf1e2e2c44bf84 Mon Sep 17 00:00:00 2001 From: Zachary Baker Date: Wed, 10 Jul 2024 11:54:46 -0600 Subject: [PATCH 023/233] Update and rename notification.yml to publish-test.yml --- .github/workflows/{notification.yml => publish-test.yml} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename .github/workflows/{notification.yml => publish-test.yml} (88%) diff --git a/.github/workflows/notification.yml b/.github/workflows/publish-test.yml similarity index 88% rename from .github/workflows/notification.yml rename to .github/workflows/publish-test.yml index e60c04e2e..8b5561645 100644 --- a/.github/workflows/notification.yml +++ b/.github/workflows/publish-test.yml @@ -1,4 +1,4 @@ -name: test notification workflow +name: Publish Test on: workflow_dispatch From 1282bfcfc6be59a9e0c0e4f1fcb88cefd925e271 Mon Sep 17 00:00:00 2001 From: Zachary Baker Date: Wed, 10 Jul 2024 12:00:42 -0600 Subject: [PATCH 024/233] Update fierro-test.yml --- .github/workflows/fierro-test.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/fierro-test.yml b/.github/workflows/fierro-test.yml index 407962e1c..39c8fd373 100644 --- a/.github/workflows/fierro-test.yml +++ b/.github/workflows/fierro-test.yml @@ -1,9 +1,9 @@ -name: fierro-test +name: Fierro Test -# Workflow runs following successful anaconda distribution +# Workflow runs on following successful conda distribution on: workflow_run: - workflows: ["test notification workflow"] + workflows: [Publish Test, Publish All, Publish Elements, Publish EVPFFT-CPU, Publish EVPFFT-dev, Publish EVPFFT-GPU, Publish FIERRO GUI, Publish Fierro-CPU, Publish Fierro-dev, Publish Heffte, Publish Heffte CUDA, Publish Trilinos-CPU] types: - completed From 550fcd3acf1c691289a9b4c956ecaed21222c9b1 Mon Sep 17 00:00:00 2001 From: Zachary Baker Date: Wed, 10 Jul 2024 12:01:36 -0600 Subject: [PATCH 025/233] Delete .github/workflows/notification2.yml --- .github/workflows/notification2.yml | 16 ---------------- 1 file changed, 16 deletions(-) delete mode 100644 .github/workflows/notification2.yml diff --git a/.github/workflows/notification2.yml b/.github/workflows/notification2.yml deleted file mode 100644 index 7e30b113d..000000000 --- a/.github/workflows/notification2.yml +++ /dev/null @@ -1,16 +0,0 @@ -name: test notification workflow2 -on: workflow_dispatch - -jobs: - build: - - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v4 - with: - submodules: recursive - - name: update the package list - run: - sudo apt-get update - shell: bash From 7db141c280e2cc8413e0ac9cbab95c19ab4f409c Mon Sep 17 00:00:00 2001 From: Zachary Baker Date: Wed, 10 Jul 2024 12:08:38 -0600 Subject: [PATCH 026/233] Update fierro-test-no-implicit.yml --- .github/workflows/fierro-test-no-implicit.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/fierro-test-no-implicit.yml b/.github/workflows/fierro-test-no-implicit.yml index da0aece2d..12d2bec12 100644 --- a/.github/workflows/fierro-test-no-implicit.yml +++ b/.github/workflows/fierro-test-no-implicit.yml @@ -14,6 +14,9 @@ jobs: - uses: actions/checkout@v4 with: submodules: recursive + - name: print trigger event + run: | + echo "::notice:: inputs ${{ github.event_name }}" - name: update the package list run: sudo apt-get update From f1ec00de31ca98a978ddd32afa7d890d8feedb55 Mon Sep 17 00:00:00 2001 From: Zachary Baker Date: Wed, 10 Jul 2024 12:20:06 -0600 Subject: [PATCH 027/233] Update fierro-test-no-implicit.yml --- .github/workflows/fierro-test-no-implicit.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/fierro-test-no-implicit.yml b/.github/workflows/fierro-test-no-implicit.yml index 12d2bec12..b8faa517d 100644 --- a/.github/workflows/fierro-test-no-implicit.yml +++ b/.github/workflows/fierro-test-no-implicit.yml @@ -16,7 +16,9 @@ jobs: submodules: recursive - name: print trigger event run: | - echo "::notice:: inputs ${{ github.event_name }}" + - run: echo "workflow triggering event name is:" ${{ github.event_name }} + - run: echo "workflow triggering event type is:" ${{ github.event.action }} + - run: echo "workflow triggering event user is:" ${{ github.event.actor }} - name: update the package list run: sudo apt-get update From a9695a202d17f61100580972b57bd4ac0ae00a0b Mon Sep 17 00:00:00 2001 From: Zachary Baker Date: Wed, 10 Jul 2024 12:25:40 -0600 Subject: [PATCH 028/233] Update fierro-test-no-implicit.yml --- .github/workflows/fierro-test-no-implicit.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/fierro-test-no-implicit.yml b/.github/workflows/fierro-test-no-implicit.yml index b8faa517d..e7a02a40d 100644 --- a/.github/workflows/fierro-test-no-implicit.yml +++ b/.github/workflows/fierro-test-no-implicit.yml @@ -17,8 +17,8 @@ jobs: - name: print trigger event run: | - run: echo "workflow triggering event name is:" ${{ github.event_name }} - - run: echo "workflow triggering event type is:" ${{ github.event.action }} - - run: echo "workflow triggering event user is:" ${{ github.event.actor }} + - run: echo "workflow triggering event type is:" ${{ github.event_action }} + - run: echo "workflow triggering event user is:" ${{ github.event_actor }} - name: update the package list run: sudo apt-get update From a46b2a4527d9838f6b72261c09a66939ce49b809 Mon Sep 17 00:00:00 2001 From: Zachary Baker Date: Wed, 10 Jul 2024 12:29:24 -0600 Subject: [PATCH 029/233] Update fierro-test-no-implicit.yml --- .github/workflows/fierro-test-no-implicit.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/fierro-test-no-implicit.yml b/.github/workflows/fierro-test-no-implicit.yml index e7a02a40d..c361f5ec3 100644 --- a/.github/workflows/fierro-test-no-implicit.yml +++ b/.github/workflows/fierro-test-no-implicit.yml @@ -17,8 +17,6 @@ jobs: - name: print trigger event run: | - run: echo "workflow triggering event name is:" ${{ github.event_name }} - - run: echo "workflow triggering event type is:" ${{ github.event_action }} - - run: echo "workflow triggering event user is:" ${{ github.event_actor }} - name: update the package list run: sudo apt-get update From 25ac4eab12ebed8d5de42bcfba956cde84eed84a Mon Sep 17 00:00:00 2001 From: Zachary Baker Date: Wed, 10 Jul 2024 12:41:55 -0600 Subject: [PATCH 030/233] Update fierro-test-no-implicit.yml --- .github/workflows/fierro-test-no-implicit.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/fierro-test-no-implicit.yml b/.github/workflows/fierro-test-no-implicit.yml index c361f5ec3..4eb958f53 100644 --- a/.github/workflows/fierro-test-no-implicit.yml +++ b/.github/workflows/fierro-test-no-implicit.yml @@ -16,7 +16,7 @@ jobs: submodules: recursive - name: print trigger event run: | - - run: echo "workflow triggering event name is:" ${{ github.event_name }} + echo "::workflow triggering event name is::" ${{ github.event_name }} - name: update the package list run: sudo apt-get update From 7f6a395ba9b270cb29b48dceb2f2e1ad3584a86d Mon Sep 17 00:00:00 2001 From: Zachary Baker Date: Wed, 10 Jul 2024 15:49:48 -0600 Subject: [PATCH 031/233] Add files via upload --- .../example_implicit_basic.yaml | 99 +++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100644 src/Parallel-Solvers/Implicit-Lagrange/Example_Yaml_Scripts/example_implicit_basic.yaml diff --git a/src/Parallel-Solvers/Implicit-Lagrange/Example_Yaml_Scripts/example_implicit_basic.yaml b/src/Parallel-Solvers/Implicit-Lagrange/Example_Yaml_Scripts/example_implicit_basic.yaml new file mode 100644 index 000000000..6093d542f --- /dev/null +++ b/src/Parallel-Solvers/Implicit-Lagrange/Example_Yaml_Scripts/example_implicit_basic.yaml @@ -0,0 +1,99 @@ +# input file +num_dims: 3 + +mesh_generation_options: + type: Box + origin: [0, 0, 0] + length: [10, 10, 100] + num_elems: [5, 5, 50] + +materials: + - id: 0 + elastic_modulus: 200000000000 + poisson_ratio: 0.3 + density: 7850 + thermal_conductivity: 10 + specific_internal_energy_rate: 1.0 + initial_temperature: 293 + +fea_module_parameters: + - type: Inertial + material_id: 0 + inertia_center_x: 0 + inertia_center_y: 0 + inertia_center_z: 0 + + - type: Elasticity + material_id: 0 + # Dirichlet conditions + boundary_conditions: + - surface: + type: z_plane + plane_position: 0.0 + type: displacement + value: 0.0 + + # Loading/Neumann Conditions + loading_conditions: + - surface: + type: z_plane + plane_position: 100.0 + type: surface_traction + component_x: 500 + component_y: 0 + component_z: 0 + + - type: Heat_Conduction + material_id: 0 + # Dirichlet conditions + boundary_conditions: + - surface: + type: z_plane + plane_position: 0.0 + type: temperature + value: 293.0 + + # Loading/Neumann Conditions + loading_conditions: + - surface: + type: z_plane + plane_position: 100.0 + type: surface_heat_flux + #can be normal (q dot n) or coordinated (vector q) for curved surfaces + specification: normal + flux_value: -0.1 + +optimization_options: + optimization_process: topology_optimization + method_of_moving_asymptotes: false + density_epsilon: 0.001 + simp_penalty_power: 3 + rol_params: + subproblem_algorithm: trust_region + initial_constraint_penalty: 1.e1 + step_tolerance: 1.e-5 + gradient_tolerance: 1.e-5 + constraint_tolerance: 1.e-5 + iteration_limit: 5 + optimization_objective: multi_objective + #Weight coefficients should add up to 1 + multi_objective_structure: linear + multi_objective_modules: + - type: minimize_thermal_resistance + weight_coefficient: 0.25 + - type: minimize_compliance + weight_coefficient: 0.75 + + constraints: + - type: mass + relation: equality + value: 0.25 + - type: moment_of_inertia + relation: equality + component: yy + value: 0.35 + - type: moment_of_inertia + relation: equality + component: xy + value: 0.0 + From 014da3c48a5991d1622910c545173c673d0e728b Mon Sep 17 00:00:00 2001 From: Zachary Baker Date: Wed, 10 Jul 2024 15:50:52 -0600 Subject: [PATCH 032/233] Update fierro-test.yml --- .github/workflows/fierro-test.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/workflows/fierro-test.yml b/.github/workflows/fierro-test.yml index 39c8fd373..b6351e978 100644 --- a/.github/workflows/fierro-test.yml +++ b/.github/workflows/fierro-test.yml @@ -85,7 +85,11 @@ jobs: run: | source ~/.bashrc conda activate build-env - fierro-parallel-implicit ./Example_Yaml_Scripts/example_simple.yaml + export OMP_PROC_BIND=spread + export OMP_NUM_THREADS=1 + export OMP_PLACES=threads + mpirun -np 8 --bind-to core fierro-parallel-explicit example_simple.yaml + fierro-parallel-implicit ./Example_Yaml_Scripts/example_implicit_basic.yaml working-directory: ./src/Parallel-Solvers/Implicit-Lagrange shell: bash From c2709a5984209419c839a6b3210e93897da5fefc Mon Sep 17 00:00:00 2001 From: Zachary Baker Date: Wed, 10 Jul 2024 15:51:08 -0600 Subject: [PATCH 033/233] Update fierro-test.yml --- .github/workflows/fierro-test.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/fierro-test.yml b/.github/workflows/fierro-test.yml index b6351e978..9cf4edb4a 100644 --- a/.github/workflows/fierro-test.yml +++ b/.github/workflows/fierro-test.yml @@ -6,6 +6,7 @@ on: workflows: [Publish Test, Publish All, Publish Elements, Publish EVPFFT-CPU, Publish EVPFFT-dev, Publish EVPFFT-GPU, Publish FIERRO GUI, Publish Fierro-CPU, Publish Fierro-dev, Publish Heffte, Publish Heffte CUDA, Publish Trilinos-CPU] types: - completed + workflow_dispatch: jobs: build: From 853bd9a10667509b740d8e753854cdf406fd5dd3 Mon Sep 17 00:00:00 2001 From: Zachary Baker Date: Wed, 10 Jul 2024 15:51:48 -0600 Subject: [PATCH 034/233] Update fierro-test-no-implicit.yml --- .github/workflows/fierro-test-no-implicit.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/fierro-test-no-implicit.yml b/.github/workflows/fierro-test-no-implicit.yml index 4eb958f53..b829b5e06 100644 --- a/.github/workflows/fierro-test-no-implicit.yml +++ b/.github/workflows/fierro-test-no-implicit.yml @@ -6,6 +6,7 @@ on: workflows: [Publish Test, Publish All, Publish Elements, Publish EVPFFT-CPU, Publish EVPFFT-dev, Publish EVPFFT-GPU, Publish FIERRO GUI, Publish Fierro-CPU, Publish Fierro-dev, Publish Heffte, Publish Heffte CUDA, Publish Trilinos-CPU] types: - completed + workflow_dispatch: jobs: build: From ffed4c76ed3e709ef8d7a18d88669b9828837eb2 Mon Sep 17 00:00:00 2001 From: Zachary Baker Date: Wed, 10 Jul 2024 15:58:49 -0600 Subject: [PATCH 035/233] Update fierro-test.yml --- .github/workflows/fierro-test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/fierro-test.yml b/.github/workflows/fierro-test.yml index 9cf4edb4a..8837a5c18 100644 --- a/.github/workflows/fierro-test.yml +++ b/.github/workflows/fierro-test.yml @@ -89,7 +89,7 @@ jobs: export OMP_PROC_BIND=spread export OMP_NUM_THREADS=1 export OMP_PLACES=threads - mpirun -np 8 --bind-to core fierro-parallel-explicit example_simple.yaml + mpirun --oversubscribe -np 8 --bind-to core fierro-parallel-explicit example_simple.yaml fierro-parallel-implicit ./Example_Yaml_Scripts/example_implicit_basic.yaml working-directory: ./src/Parallel-Solvers/Implicit-Lagrange shell: bash From 4f9b9c3b2ea576ba5213542f89b32576f4cb66ce Mon Sep 17 00:00:00 2001 From: Zachary Baker Date: Wed, 10 Jul 2024 16:05:50 -0600 Subject: [PATCH 036/233] Update fierro-test.yml --- .github/workflows/fierro-test.yml | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/.github/workflows/fierro-test.yml b/.github/workflows/fierro-test.yml index 8837a5c18..a12a8d141 100644 --- a/.github/workflows/fierro-test.yml +++ b/.github/workflows/fierro-test.yml @@ -68,6 +68,12 @@ jobs: conda info --envs conda list + - name: Set OMP env variables + run: | + export OMP_PROC_BIND=spread + export OMP_NUM_THREADS=1 + export OMP_PLACES=threads + - name: Test fierro-parallel-explicit run: | source ~/.bashrc @@ -86,10 +92,6 @@ jobs: run: | source ~/.bashrc conda activate build-env - export OMP_PROC_BIND=spread - export OMP_NUM_THREADS=1 - export OMP_PLACES=threads - mpirun --oversubscribe -np 8 --bind-to core fierro-parallel-explicit example_simple.yaml fierro-parallel-implicit ./Example_Yaml_Scripts/example_implicit_basic.yaml working-directory: ./src/Parallel-Solvers/Implicit-Lagrange shell: bash From ce56057a4256c72fb0b25289d1bdea016479eafa Mon Sep 17 00:00:00 2001 From: Zachary Baker Date: Wed, 10 Jul 2024 16:11:15 -0600 Subject: [PATCH 037/233] Update fierro-test.yml --- .github/workflows/fierro-test.yml | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/.github/workflows/fierro-test.yml b/.github/workflows/fierro-test.yml index a12a8d141..51c4004e5 100644 --- a/.github/workflows/fierro-test.yml +++ b/.github/workflows/fierro-test.yml @@ -67,13 +67,7 @@ jobs: run: | conda info --envs conda list - - - name: Set OMP env variables - run: | - export OMP_PROC_BIND=spread - export OMP_NUM_THREADS=1 - export OMP_PLACES=threads - + - name: Test fierro-parallel-explicit run: | source ~/.bashrc @@ -92,6 +86,9 @@ jobs: run: | source ~/.bashrc conda activate build-env + export OMP_PROC_BIND=spread + export OMP_NUM_THREADS=1 + export OMP_PLACES=threads fierro-parallel-implicit ./Example_Yaml_Scripts/example_implicit_basic.yaml working-directory: ./src/Parallel-Solvers/Implicit-Lagrange shell: bash From 9ff0ba0adb815e7545e80c247a4053a77d28e179 Mon Sep 17 00:00:00 2001 From: Zachary Baker Date: Wed, 10 Jul 2024 16:20:59 -0600 Subject: [PATCH 038/233] Update fierro-test.yml --- .github/workflows/fierro-test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/fierro-test.yml b/.github/workflows/fierro-test.yml index 51c4004e5..4140392ee 100644 --- a/.github/workflows/fierro-test.yml +++ b/.github/workflows/fierro-test.yml @@ -89,7 +89,7 @@ jobs: export OMP_PROC_BIND=spread export OMP_NUM_THREADS=1 export OMP_PLACES=threads - fierro-parallel-implicit ./Example_Yaml_Scripts/example_implicit_basic.yaml + mpirun -np 8 --bind-to core fierro-parallel-implicit ./Example_Yaml_Scripts/example_implicit_basic.yaml working-directory: ./src/Parallel-Solvers/Implicit-Lagrange shell: bash From 6fa90bc67cc17acaacd8104fa913d2172e265db6 Mon Sep 17 00:00:00 2001 From: Zachary Baker Date: Wed, 10 Jul 2024 16:26:50 -0600 Subject: [PATCH 039/233] Update fierro-test.yml --- .github/workflows/fierro-test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/fierro-test.yml b/.github/workflows/fierro-test.yml index 4140392ee..dc7839ed0 100644 --- a/.github/workflows/fierro-test.yml +++ b/.github/workflows/fierro-test.yml @@ -89,7 +89,7 @@ jobs: export OMP_PROC_BIND=spread export OMP_NUM_THREADS=1 export OMP_PLACES=threads - mpirun -np 8 --bind-to core fierro-parallel-implicit ./Example_Yaml_Scripts/example_implicit_basic.yaml + mpirun -np 4 --bind-to core fierro-parallel-implicit ./Example_Yaml_Scripts/example_implicit_basic.yaml working-directory: ./src/Parallel-Solvers/Implicit-Lagrange shell: bash From 18bb632f3f69fa8964909a2f2203949ecad311c4 Mon Sep 17 00:00:00 2001 From: Zachary Baker Date: Wed, 10 Jul 2024 16:31:51 -0600 Subject: [PATCH 040/233] Update fierro-test.yml --- .github/workflows/fierro-test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/fierro-test.yml b/.github/workflows/fierro-test.yml index dc7839ed0..8937ae6a5 100644 --- a/.github/workflows/fierro-test.yml +++ b/.github/workflows/fierro-test.yml @@ -89,7 +89,7 @@ jobs: export OMP_PROC_BIND=spread export OMP_NUM_THREADS=1 export OMP_PLACES=threads - mpirun -np 4 --bind-to core fierro-parallel-implicit ./Example_Yaml_Scripts/example_implicit_basic.yaml + mpirun -np 2 --bind-to core fierro-parallel-implicit ./Example_Yaml_Scripts/example_implicit_basic.yaml working-directory: ./src/Parallel-Solvers/Implicit-Lagrange shell: bash From c31717f754524b5f9c145b6c68644ceaf127f1c3 Mon Sep 17 00:00:00 2001 From: Zachary Baker Date: Thu, 11 Jul 2024 09:37:08 -0600 Subject: [PATCH 041/233] Update fierro-test.yml --- .github/workflows/fierro-test.yml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/.github/workflows/fierro-test.yml b/.github/workflows/fierro-test.yml index 8937ae6a5..0c9428fb3 100644 --- a/.github/workflows/fierro-test.yml +++ b/.github/workflows/fierro-test.yml @@ -86,10 +86,7 @@ jobs: run: | source ~/.bashrc conda activate build-env - export OMP_PROC_BIND=spread - export OMP_NUM_THREADS=1 - export OMP_PLACES=threads - mpirun -np 2 --bind-to core fierro-parallel-implicit ./Example_Yaml_Scripts/example_implicit_basic.yaml + fierro-parallel-implicit ./Example_Yaml_Scripts/example_implicit_basic.yaml working-directory: ./src/Parallel-Solvers/Implicit-Lagrange shell: bash From b8f93900c51b8b414f0f87232984ca622fa89e18 Mon Sep 17 00:00:00 2001 From: Zachary Baker Date: Thu, 11 Jul 2024 09:46:17 -0600 Subject: [PATCH 042/233] Update fierro-test.yml --- .github/workflows/fierro-test.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/fierro-test.yml b/.github/workflows/fierro-test.yml index 0c9428fb3..51c4004e5 100644 --- a/.github/workflows/fierro-test.yml +++ b/.github/workflows/fierro-test.yml @@ -86,6 +86,9 @@ jobs: run: | source ~/.bashrc conda activate build-env + export OMP_PROC_BIND=spread + export OMP_NUM_THREADS=1 + export OMP_PLACES=threads fierro-parallel-implicit ./Example_Yaml_Scripts/example_implicit_basic.yaml working-directory: ./src/Parallel-Solvers/Implicit-Lagrange shell: bash From 465c14042dcf9acadd058a20eab2b51f6f2f4e42 Mon Sep 17 00:00:00 2001 From: Zachary Baker Date: Thu, 11 Jul 2024 09:51:50 -0600 Subject: [PATCH 043/233] Update fierro-test.yml --- .github/workflows/fierro-test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/fierro-test.yml b/.github/workflows/fierro-test.yml index 51c4004e5..4140392ee 100644 --- a/.github/workflows/fierro-test.yml +++ b/.github/workflows/fierro-test.yml @@ -89,7 +89,7 @@ jobs: export OMP_PROC_BIND=spread export OMP_NUM_THREADS=1 export OMP_PLACES=threads - fierro-parallel-implicit ./Example_Yaml_Scripts/example_implicit_basic.yaml + mpirun -np 8 --bind-to core fierro-parallel-implicit ./Example_Yaml_Scripts/example_implicit_basic.yaml working-directory: ./src/Parallel-Solvers/Implicit-Lagrange shell: bash From 3e6e190e68ef894b8c6ba872822fe195e0711f74 Mon Sep 17 00:00:00 2001 From: Zachary Baker Date: Thu, 11 Jul 2024 10:10:50 -0600 Subject: [PATCH 044/233] Update fierro-test.yml --- .github/workflows/fierro-test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/fierro-test.yml b/.github/workflows/fierro-test.yml index 4140392ee..91ae94eda 100644 --- a/.github/workflows/fierro-test.yml +++ b/.github/workflows/fierro-test.yml @@ -89,7 +89,7 @@ jobs: export OMP_PROC_BIND=spread export OMP_NUM_THREADS=1 export OMP_PLACES=threads - mpirun -np 8 --bind-to core fierro-parallel-implicit ./Example_Yaml_Scripts/example_implicit_basic.yaml + mpirun -np 3 --bind-to core fierro-parallel-implicit ./Example_Yaml_Scripts/example_implicit_basic.yaml working-directory: ./src/Parallel-Solvers/Implicit-Lagrange shell: bash From e688e61c695d82b3e9f4ac82cc375facccc59aea Mon Sep 17 00:00:00 2001 From: Zachary Baker Date: Thu, 11 Jul 2024 10:11:01 -0600 Subject: [PATCH 045/233] Update fierro-test.yml --- .github/workflows/fierro-test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/fierro-test.yml b/.github/workflows/fierro-test.yml index 91ae94eda..dc7839ed0 100644 --- a/.github/workflows/fierro-test.yml +++ b/.github/workflows/fierro-test.yml @@ -89,7 +89,7 @@ jobs: export OMP_PROC_BIND=spread export OMP_NUM_THREADS=1 export OMP_PLACES=threads - mpirun -np 3 --bind-to core fierro-parallel-implicit ./Example_Yaml_Scripts/example_implicit_basic.yaml + mpirun -np 4 --bind-to core fierro-parallel-implicit ./Example_Yaml_Scripts/example_implicit_basic.yaml working-directory: ./src/Parallel-Solvers/Implicit-Lagrange shell: bash From b21a417621d86a161a21fd56561acfd266894347 Mon Sep 17 00:00:00 2001 From: Zachary Baker Date: Thu, 11 Jul 2024 10:43:33 -0600 Subject: [PATCH 046/233] Update fierro-test.yml --- .github/workflows/fierro-test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/fierro-test.yml b/.github/workflows/fierro-test.yml index dc7839ed0..8937ae6a5 100644 --- a/.github/workflows/fierro-test.yml +++ b/.github/workflows/fierro-test.yml @@ -89,7 +89,7 @@ jobs: export OMP_PROC_BIND=spread export OMP_NUM_THREADS=1 export OMP_PLACES=threads - mpirun -np 4 --bind-to core fierro-parallel-implicit ./Example_Yaml_Scripts/example_implicit_basic.yaml + mpirun -np 2 --bind-to core fierro-parallel-implicit ./Example_Yaml_Scripts/example_implicit_basic.yaml working-directory: ./src/Parallel-Solvers/Implicit-Lagrange shell: bash From 34447fc94192716a49be53294f0c270e84d503ef Mon Sep 17 00:00:00 2001 From: Zachary Baker Date: Thu, 11 Jul 2024 11:12:07 -0600 Subject: [PATCH 047/233] Update fierro-test.yml --- .github/workflows/fierro-test.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/fierro-test.yml b/.github/workflows/fierro-test.yml index 8937ae6a5..897ca4b9a 100644 --- a/.github/workflows/fierro-test.yml +++ b/.github/workflows/fierro-test.yml @@ -72,7 +72,10 @@ jobs: run: | source ~/.bashrc conda activate build-env - fierro-parallel-explicit ./src/Parallel-Solvers/Parallel-Explicit/Example_Yaml_Scripts/example_simple.yaml + export OMP_PROC_BIND=spread + export OMP_NUM_THREADS=1 + export OMP_PLACES=threads + mpirun -np 8 --bind-to core fierro-parallel-explicit ./src/Parallel-Solvers/Parallel-Explicit/Example_Yaml_Scripts/example_simple.yaml shell: bash - name: Test fierro-mesh-builder From 7419f20a831ed01e1b4f1317b0fc256900701c65 Mon Sep 17 00:00:00 2001 From: Zachary Baker Date: Thu, 11 Jul 2024 11:15:43 -0600 Subject: [PATCH 048/233] Update fierro-test.yml --- .github/workflows/fierro-test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/fierro-test.yml b/.github/workflows/fierro-test.yml index 897ca4b9a..edab0c94a 100644 --- a/.github/workflows/fierro-test.yml +++ b/.github/workflows/fierro-test.yml @@ -75,7 +75,7 @@ jobs: export OMP_PROC_BIND=spread export OMP_NUM_THREADS=1 export OMP_PLACES=threads - mpirun -np 8 --bind-to core fierro-parallel-explicit ./src/Parallel-Solvers/Parallel-Explicit/Example_Yaml_Scripts/example_simple.yaml + mpirun -np 2 --bind-to core fierro-parallel-explicit ./src/Parallel-Solvers/Parallel-Explicit/Example_Yaml_Scripts/example_simple.yaml shell: bash - name: Test fierro-mesh-builder From 91cd3a5ffa3d26bc45db0df6f229eb3839878bd3 Mon Sep 17 00:00:00 2001 From: Zachary Baker Date: Thu, 11 Jul 2024 11:34:15 -0600 Subject: [PATCH 049/233] Update fierro-test.yml --- .github/workflows/fierro-test.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/fierro-test.yml b/.github/workflows/fierro-test.yml index edab0c94a..abb4f3047 100644 --- a/.github/workflows/fierro-test.yml +++ b/.github/workflows/fierro-test.yml @@ -75,7 +75,7 @@ jobs: export OMP_PROC_BIND=spread export OMP_NUM_THREADS=1 export OMP_PLACES=threads - mpirun -np 2 --bind-to core fierro-parallel-explicit ./src/Parallel-Solvers/Parallel-Explicit/Example_Yaml_Scripts/example_simple.yaml + mpirun -np 1 --bind-to core fierro-parallel-explicit ./src/Parallel-Solvers/Parallel-Explicit/Example_Yaml_Scripts/example_simple.yaml shell: bash - name: Test fierro-mesh-builder @@ -92,7 +92,7 @@ jobs: export OMP_PROC_BIND=spread export OMP_NUM_THREADS=1 export OMP_PLACES=threads - mpirun -np 2 --bind-to core fierro-parallel-implicit ./Example_Yaml_Scripts/example_implicit_basic.yaml + mpirun -np 1 --bind-to core fierro-parallel-implicit ./Example_Yaml_Scripts/example_simple.yaml working-directory: ./src/Parallel-Solvers/Implicit-Lagrange shell: bash From 6025e390e392c57f628a4e72e86ee138fd738482 Mon Sep 17 00:00:00 2001 From: Zachary Baker Date: Thu, 11 Jul 2024 11:39:09 -0600 Subject: [PATCH 050/233] Update fierro-test.yml --- .github/workflows/fierro-test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/fierro-test.yml b/.github/workflows/fierro-test.yml index abb4f3047..337d9836f 100644 --- a/.github/workflows/fierro-test.yml +++ b/.github/workflows/fierro-test.yml @@ -92,7 +92,7 @@ jobs: export OMP_PROC_BIND=spread export OMP_NUM_THREADS=1 export OMP_PLACES=threads - mpirun -np 1 --bind-to core fierro-parallel-implicit ./Example_Yaml_Scripts/example_simple.yaml + mpirun -np 1 --bind-to core fierro-parallel-implicit ./Example_Yaml_Scripts/example_implict_basic.yaml working-directory: ./src/Parallel-Solvers/Implicit-Lagrange shell: bash From 60b34e14e8f182f5a67350d62bec09419b7c2e0a Mon Sep 17 00:00:00 2001 From: Zachary Baker Date: Thu, 11 Jul 2024 11:40:19 -0600 Subject: [PATCH 051/233] Update fierro-test.yml --- .github/workflows/fierro-test.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/fierro-test.yml b/.github/workflows/fierro-test.yml index 337d9836f..84e0713a8 100644 --- a/.github/workflows/fierro-test.yml +++ b/.github/workflows/fierro-test.yml @@ -92,8 +92,7 @@ jobs: export OMP_PROC_BIND=spread export OMP_NUM_THREADS=1 export OMP_PLACES=threads - mpirun -np 1 --bind-to core fierro-parallel-implicit ./Example_Yaml_Scripts/example_implict_basic.yaml - working-directory: ./src/Parallel-Solvers/Implicit-Lagrange + mpirun -np 1 --bind-to core fierro-parallel-implicit ./src/Parallel-Solvers/Implicit-Lagrange./Example_Yaml_Scripts/example_implict_basic.yaml shell: bash From 515e4c65503c70e51c2889197b61674f21291956 Mon Sep 17 00:00:00 2001 From: Zachary Baker Date: Thu, 11 Jul 2024 11:45:22 -0600 Subject: [PATCH 052/233] Update fierro-test.yml --- .github/workflows/fierro-test.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/fierro-test.yml b/.github/workflows/fierro-test.yml index 84e0713a8..54ee20629 100644 --- a/.github/workflows/fierro-test.yml +++ b/.github/workflows/fierro-test.yml @@ -92,7 +92,8 @@ jobs: export OMP_PROC_BIND=spread export OMP_NUM_THREADS=1 export OMP_PLACES=threads - mpirun -np 1 --bind-to core fierro-parallel-implicit ./src/Parallel-Solvers/Implicit-Lagrange./Example_Yaml_Scripts/example_implict_basic.yaml + mpirun -np 1 --bind-to core fierro-parallel-implicit ./Example_Yaml_Scripts/example_implicit_basic.yaml + working-directory: ./src/Parallel-Solvers/Implicit-Lagrange shell: bash From 936ddeb7baf36fcfd27c2362c1191d626ed5efb4 Mon Sep 17 00:00:00 2001 From: Zachary Baker Date: Thu, 11 Jul 2024 11:51:09 -0600 Subject: [PATCH 053/233] Update fierro-test.yml --- .github/workflows/fierro-test.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/fierro-test.yml b/.github/workflows/fierro-test.yml index 54ee20629..425234bc3 100644 --- a/.github/workflows/fierro-test.yml +++ b/.github/workflows/fierro-test.yml @@ -89,6 +89,7 @@ jobs: run: | source ~/.bashrc conda activate build-env + dos2unix ./Example_Yaml_Scripts/example_implicit_basic.yaml export OMP_PROC_BIND=spread export OMP_NUM_THREADS=1 export OMP_PLACES=threads From 7a067ceb502f884005e9bb5dfaec184f08f1b484 Mon Sep 17 00:00:00 2001 From: Zachary Baker Date: Thu, 11 Jul 2024 11:56:44 -0600 Subject: [PATCH 054/233] Update fierro-test.yml --- .github/workflows/fierro-test.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/fierro-test.yml b/.github/workflows/fierro-test.yml index 425234bc3..55da1845e 100644 --- a/.github/workflows/fierro-test.yml +++ b/.github/workflows/fierro-test.yml @@ -41,6 +41,10 @@ jobs: run: sudo apt-get install python3.6 shell: bash + - name: Install dos2unix + run: + sudo apt-get install dos2unix + shell: bash - name: Set up Miniconda uses: conda-incubator/setup-miniconda@v2 From f81658e588739c47fef63c8d4b718a38135ab7ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CAdrian-Diaz=E2=80=9D?= <“adriandiaz1117@gmail.com”> Date: Thu, 11 Jul 2024 15:54:41 -0600 Subject: [PATCH 055/233] PERF: speed up adjoint loops --- .../SGH_Solver/src/force_gradients_sgh.cpp | 56 +++++++++---------- .../SGH_Solver/src/power_gradients_sgh.cpp | 38 ++++++------- 2 files changed, 46 insertions(+), 48 deletions(-) diff --git a/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/force_gradients_sgh.cpp b/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/force_gradients_sgh.cpp index 567789239..830c062ec 100644 --- a/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/force_gradients_sgh.cpp +++ b/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/force_gradients_sgh.cpp @@ -509,26 +509,32 @@ void FEA_Module_SGH::get_force_vgradient_sgh(const DCArrayKokkos& ma // loop over dimension for (int dim = 0; dim < num_dims; dim++) { + const double current_node_vel = node_vel(rk_level, node_gid, dim); // assign gradient of corner contribution of force to relevant matrix entries with non-zero node velocity gradient for (int igradient = 0; igradient < num_nodes_in_elem; igradient++) { size_t gradient_node_gid = nodes_in_elem(elem_gid, igradient); column_index = num_dims * Global_Gradient_Matrix_Assembly_Map(elem_gid, igradient, node_lid); - for (int jdim = 0; jdim < num_dims; jdim++) { - if (node_lid == igradient && jdim == dim) { - if (map->isNodeLocalElement(gradient_node_gid)) { + + if (map->isNodeLocalElement(gradient_node_gid)) { + for (int jdim = 0; jdim < num_dims; jdim++) { + if (node_lid == igradient && jdim == dim) { Force_Gradient_Velocities(gradient_node_gid * num_dims + jdim, column_index + dim) += phi * (muc(node_lid) * (vel_star_gradient(dim, igradient, jdim) - 1) + - muc_gradient(node_lid, igradient, jdim) * (vel_star(dim) - node_vel(rk_level, node_gid, dim))); + muc_gradient(node_lid, igradient, jdim) * (vel_star(dim) - current_node_vel)); } + else { + Force_Gradient_Velocities(gradient_node_gid * num_dims + jdim, column_index + dim) += phi * (muc(node_lid) * (vel_star_gradient(dim, igradient, jdim)) + + muc_gradient(node_lid, igradient, jdim) * (vel_star(dim) - current_node_vel)); + } + } + } + for (int jdim = 0; jdim < num_dims; jdim++) { + if (node_lid == igradient && jdim == dim) { corner_gradient_storage(corner_gid, dim, igradient, jdim) = phi * (muc(node_lid) * (vel_star_gradient(dim, igradient, jdim) - 1) + - muc_gradient(node_lid, igradient, jdim) * (vel_star(dim) - node_vel(rk_level, node_gid, dim))); + muc_gradient(node_lid, igradient, jdim) * (vel_star(dim) - current_node_vel)); } else { - if (map->isNodeLocalElement(gradient_node_gid)) { - Force_Gradient_Velocities(gradient_node_gid * num_dims + jdim, column_index + dim) += phi * (muc(node_lid) * (vel_star_gradient(dim, igradient, jdim)) + - muc_gradient(node_lid, igradient, jdim) * (vel_star(dim) - node_vel(rk_level, node_gid, dim))); - } corner_gradient_storage(corner_gid, dim, igradient, jdim) = phi * (muc(node_lid) * (vel_star_gradient(dim, igradient, jdim)) + - muc_gradient(node_lid, igradient, jdim) * (vel_star(dim) - node_vel(rk_level, node_gid, dim))); + muc_gradient(node_lid, igradient, jdim) * (vel_star(dim) - current_node_vel)); } } } @@ -1093,8 +1099,6 @@ void FEA_Module_SGH::get_force_ugradient_sgh(const DCArrayKokkos& ma ViewCArrayKokkos vel_star_gradient(vel_star_gradient_array, num_dims, num_nodes_in_elem, num_dims); ViewCArrayKokkos vel_grad(vel_grad_array, num_dims, num_dims); - // --- abviatations of variables --- - // element volume double vol = elem_vol(elem_gid); @@ -1470,40 +1474,34 @@ void FEA_Module_SGH::get_force_ugradient_sgh(const DCArrayKokkos& ma // loop over dimension for (int dim = 0; dim < num_dims; dim++) { + const double current_node_vel = node_vel(rk_level, node_gid, dim); // assign gradient of corner contribution of force to relevant matrix entries with non-zero node velocity gradient for (int igradient = 0; igradient < num_nodes_in_elem; igradient++) { - for (int jdim = 0; jdim < num_dims; jdim++) { - size_t gradient_node_gid = nodes_in_elem(elem_gid, igradient); - // if(!map->isNodeLocalElement(gradient_node_gid)) continue; - column_index = num_dims * Global_Gradient_Matrix_Assembly_Map(elem_gid, igradient, node_lid); - if (map->isNodeLocalElement(gradient_node_gid)) { + size_t gradient_node_gid = nodes_in_elem(elem_gid, igradient); + // if(!map->isNodeLocalElement(gradient_node_gid)) continue; + column_index = num_dims * Global_Gradient_Matrix_Assembly_Map(elem_gid, igradient, node_lid); + + if (map->isNodeLocalElement(gradient_node_gid)) { + for (int jdim = 0; jdim < num_dims; jdim++) { Force_Gradient_Positions(gradient_node_gid * num_dims + jdim, column_index + dim) += area_normal(node_lid, 0) * tau_gradient(0, dim, igradient, jdim) + area_normal(node_lid, 1) * tau_gradient(1, dim, igradient, jdim) + area_normal(node_lid, 2) * tau_gradient(2, dim, igradient, jdim) + area_normal_gradients(node_lid, 0, igradient, jdim) * tau(0, dim) + area_normal_gradients(node_lid, 1, igradient, jdim) * tau(1, dim) + area_normal_gradients(node_lid, 2, igradient, jdim) * tau(2, dim) - + phi * muc_gradient(node_lid, igradient, jdim) * (vel_star(dim) - node_vel(rk_level, node_gid, dim)) + + phi * muc_gradient(node_lid, igradient, jdim) * (vel_star(dim) - current_node_vel) + phi * muc(node_lid) * (vel_star_gradient(dim, igradient, jdim)); } + } + for (int jdim = 0; jdim < num_dims; jdim++) { corner_gradient_storage(corner_gid, dim, igradient, jdim) = area_normal(node_lid, 0) * tau_gradient(0, dim, igradient, jdim) + area_normal(node_lid, 1) * tau_gradient(1, dim, igradient, jdim) + area_normal(node_lid, 2) * tau_gradient(2, dim, igradient, jdim) + area_normal_gradients(node_lid, 0, igradient, jdim) * tau(0, dim) + area_normal_gradients(node_lid, 1, igradient, jdim) * tau(1, dim) + area_normal_gradients(node_lid, 2, igradient, jdim) * tau(2, dim) - + phi * muc_gradient(node_lid, igradient, jdim) * (vel_star(dim) - node_vel(rk_level, node_gid, dim)) + + phi * muc_gradient(node_lid, igradient, jdim) * (vel_star(dim) - current_node_vel) + phi * muc(node_lid) * (vel_star_gradient(dim, igradient, jdim)); - // if(map->isNodeLocalElement(gradient_node_gid)){ - // Force_Gradient_Positions(gradient_node_gid*num_dims+jdim, column_index+dim) += - // + area_normal_gradients(node_lid, 0, igradient, jdim)*tau(0, dim) - // + area_normal_gradients(node_lid, 1, igradient, jdim)*tau(1, dim) - // + area_normal_gradients(node_lid, 2, igradient, jdim)*tau(2, dim); - // } - // corner_gradient_storage(corner_gid,dim,igradient,jdim) = - // + area_normal_gradients(node_lid, 0, igradient, jdim)*tau(0, dim) - // + area_normal_gradients(node_lid, 1, igradient, jdim)*tau(1, dim) - // + area_normal_gradients(node_lid, 2, igradient, jdim)*tau(2, dim); } } } // end loop over dimension diff --git a/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/power_gradients_sgh.cpp b/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/power_gradients_sgh.cpp index f9068c2a8..1a2d76f9c 100644 --- a/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/power_gradients_sgh.cpp +++ b/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/power_gradients_sgh.cpp @@ -372,15 +372,15 @@ void FEA_Module_SGH::get_power_ugradient_sgh(double rk_alpha, // calculate the Power=F dot V for this corner for (size_t dim = 0; dim < num_dims; dim++) { + const double current_node_vel = node_vel(rk_level, node_gid, dim); for (int igradient = 0; igradient < num_nodes_in_elem; igradient++) { - for (size_t jdim = 0; jdim < num_dims; jdim++) { - column_id = Element_Gradient_Matrix_Assembly_Map(elem_gid, igradient); - gradient_node_id = nodes_in_elem(elem_gid, igradient); - if (!map->isNodeLocalElement(gradient_node_id)) { - continue; + column_id = Element_Gradient_Matrix_Assembly_Map(elem_gid, igradient); + gradient_node_id = nodes_in_elem(elem_gid, igradient); + if (map->isNodeLocalElement(gradient_node_id)) { + for (size_t jdim = 0; jdim < num_dims; jdim++) { + Power_Gradient_Positions(gradient_node_id * num_dims + jdim, column_id) -= + corner_gradient_storage(corner_gid, dim, igradient, jdim) * current_node_vel * node_radius; } - Power_Gradient_Positions(gradient_node_id * num_dims + jdim, column_id) -= - corner_gradient_storage(corner_gid, dim, igradient, jdim) * node_vel(rk_level, node_gid, dim) * node_radius; } } } // end for dim @@ -446,21 +446,21 @@ void FEA_Module_SGH::get_power_vgradient_sgh(double rk_alpha, // calculate the Power=F dot V for this corner for (size_t dim = 0; dim < num_dims; dim++) { + const double current_node_vel = node_vel(rk_level, node_gid, dim); for (int igradient = 0; igradient < num_nodes_in_elem; igradient++) { column_id = Element_Gradient_Matrix_Assembly_Map(elem_gid, igradient); gradient_node_id = nodes_in_elem(elem_gid, igradient); - if (!map->isNodeLocalElement(gradient_node_id)) { - continue; - } - for (size_t jdim = 0; jdim < num_dims; jdim++) { - if (node_lid == igradient && jdim == dim) { - Power_Gradient_Velocities(gradient_node_id * num_dims + jdim, column_id) -= - corner_gradient_storage(corner_gid, dim, igradient, jdim) * node_vel(rk_level, node_gid, dim) - * node_radius + corner_force(corner_gid, dim) * node_radius; - } - else { - Power_Gradient_Velocities(gradient_node_id * num_dims + jdim, column_id) -= - corner_gradient_storage(corner_gid, dim, igradient, jdim) * node_vel(rk_level, node_gid, dim) * node_radius; + if (map->isNodeLocalElement(gradient_node_id)) { + for (size_t jdim = 0; jdim < num_dims; jdim++) { + if (node_lid == igradient && jdim == dim) { + Power_Gradient_Velocities(gradient_node_id * num_dims + jdim, column_id) -= + corner_gradient_storage(corner_gid, dim, igradient, jdim) * current_node_vel + * node_radius + corner_force(corner_gid, dim) * node_radius; + } + else { + Power_Gradient_Velocities(gradient_node_id * num_dims + jdim, column_id) -= + corner_gradient_storage(corner_gid, dim, igradient, jdim) * current_node_vel * node_radius; + } } } } From 87bbe71a50a5d1c34988af865ac81db67a408041 Mon Sep 17 00:00:00 2001 From: Zachary Baker Date: Fri, 12 Jul 2024 09:38:58 -0600 Subject: [PATCH 056/233] Update publish-fierro-cpu.yaml --- .github/workflows/publish-fierro-cpu.yaml | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/.github/workflows/publish-fierro-cpu.yaml b/.github/workflows/publish-fierro-cpu.yaml index 561447e42..c23c0faff 100644 --- a/.github/workflows/publish-fierro-cpu.yaml +++ b/.github/workflows/publish-fierro-cpu.yaml @@ -9,7 +9,16 @@ on: jobs: publish: - uses: ./.github/workflows/build-conda-package.yaml - with: - recipe_dir: .conda/fierro/cpu - secrets: inherit + runs-on: ubuntu-latest + + steps: + - uses: ./.github/workflows/build-conda-package.yaml + with: + recipe_dir: .conda/fierro/cpu + - name: Install MPI + run: | + sudo apt-get install libopenmpi-dev openmpi-bin + echo "MPI_OPTS=--oversubscribe" >> $GITHUB_ENV + + + From d99d4040f23979318a158671a0ec20de4fc1e5f4 Mon Sep 17 00:00:00 2001 From: Zachary Baker Date: Fri, 12 Jul 2024 09:40:00 -0600 Subject: [PATCH 057/233] Update publish-fierro-cpu.yaml --- .github/workflows/publish-fierro-cpu.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/publish-fierro-cpu.yaml b/.github/workflows/publish-fierro-cpu.yaml index c23c0faff..01c8afcaa 100644 --- a/.github/workflows/publish-fierro-cpu.yaml +++ b/.github/workflows/publish-fierro-cpu.yaml @@ -12,6 +12,9 @@ jobs: runs-on: ubuntu-latest steps: + - uses: actions/checkout@v4 + with: + submodules: recursive - uses: ./.github/workflows/build-conda-package.yaml with: recipe_dir: .conda/fierro/cpu From a66baf76cd997a116bb8a3eb916da1e0535a42d6 Mon Sep 17 00:00:00 2001 From: Zachary Baker Date: Fri, 12 Jul 2024 09:41:24 -0600 Subject: [PATCH 058/233] Update build-conda-package.yaml --- .github/workflows/build-conda-package.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-conda-package.yaml b/.github/workflows/build-conda-package.yaml index 84f6b2174..161f8c7bd 100644 --- a/.github/workflows/build-conda-package.yaml +++ b/.github/workflows/build-conda-package.yaml @@ -53,7 +53,7 @@ jobs: # conda-${{ runner.os }}--${{ runner.arch }}--${{ steps.get-date.outputs.today }}-${{ hashFiles('.etc/conda_build_environment.yaml') }}-${{ env.CACHE_NUMBER }} # env: # CACHE_NUMBER: 1 - # id: cache + # id: cached - name: Update environment run: From 6c500d77cd137daf06b56e010ae22157fb6955d3 Mon Sep 17 00:00:00 2001 From: Zachary Baker Date: Fri, 12 Jul 2024 09:44:55 -0600 Subject: [PATCH 059/233] Update publish-fierro-cpu.yaml --- .github/workflows/publish-fierro-cpu.yaml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/.github/workflows/publish-fierro-cpu.yaml b/.github/workflows/publish-fierro-cpu.yaml index 01c8afcaa..019746b16 100644 --- a/.github/workflows/publish-fierro-cpu.yaml +++ b/.github/workflows/publish-fierro-cpu.yaml @@ -15,13 +15,14 @@ jobs: - uses: actions/checkout@v4 with: submodules: recursive - - uses: ./.github/workflows/build-conda-package.yaml - with: - recipe_dir: .conda/fierro/cpu - name: Install MPI run: | sudo apt-get install libopenmpi-dev openmpi-bin echo "MPI_OPTS=--oversubscribe" >> $GITHUB_ENV + - uses: ./.github/workflows/build-conda-package.yaml + with: + recipe_dir: .conda/fierro/cpu + From b9ff7b4dbcbfd902c3315374c7923cde554282ff Mon Sep 17 00:00:00 2001 From: Zachary Baker Date: Fri, 12 Jul 2024 09:46:17 -0600 Subject: [PATCH 060/233] Update publish-fierro-cpu.yaml --- .github/workflows/publish-fierro-cpu.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/publish-fierro-cpu.yaml b/.github/workflows/publish-fierro-cpu.yaml index 019746b16..a125f5364 100644 --- a/.github/workflows/publish-fierro-cpu.yaml +++ b/.github/workflows/publish-fierro-cpu.yaml @@ -22,6 +22,7 @@ jobs: - uses: ./.github/workflows/build-conda-package.yaml with: recipe_dir: .conda/fierro/cpu + secrets: inherit From 7f09ddb69ac8de363d2808989aad85039c43351b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CAdrian-Diaz=E2=80=9D?= <“adriandiaz1117@gmail.com”> Date: Fri, 12 Jul 2024 14:14:33 -0600 Subject: [PATCH 061/233] WIP: cleanup adjoint loops --- .../SGH_Solver/src/sgh_optimization.cpp | 47 ++++++++++++------- 1 file changed, 31 insertions(+), 16 deletions(-) diff --git a/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/sgh_optimization.cpp b/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/sgh_optimization.cpp index 40d7c1169..669f0421f 100644 --- a/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/sgh_optimization.cpp +++ b/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/sgh_optimization.cpp @@ -566,7 +566,11 @@ void FEA_Module_SGH::compute_topology_optimization_adjoint_full(Teuchos::RCPdynamic_options.print_cycle; - + + double total_adjoint_time = Explicit_Solver_Pointer_->CPU_Time(); + double state_adjoint_time = 0; + double state_adjoint_time_start, state_adjoint_time_end; + auto optimization_objective_regions = simparam->optimization_options.optimization_objective_regions; //initialize tally storage of gradient vector cached_design_gradients_distributed->putScalar(0); // initialize first adjoint vector at last_time_step to 0 as the terminal value @@ -682,7 +686,6 @@ void FEA_Module_SGH::compute_topology_optimization_adjoint_full(Teuchos::RCPCPU_Time(); // force_gradient_velocity->describe(*fos,Teuchos::VERB_EXTREME); const_vec_array previous_force_gradient_position = force_gradient_position->getLocalView(Tpetra::Access::ReadOnly); // const_vec_array current_force_gradient_position = force_gradient_position->getLocalView (Tpetra::Access::ReadOnly); @@ -862,10 +866,9 @@ void FEA_Module_SGH::compute_topology_optimization_adjoint_full(Teuchos::RCPgetLocalView(Tpetra::Access::ReadWrite); vec_array phi_midpoint_adjoint_vector = phi_adjoint_vector_distributed->getLocalView(Tpetra::Access::ReadWrite); vec_array psi_midpoint_adjoint_vector = psi_adjoint_vector_distributed->getLocalView(Tpetra::Access::ReadWrite); - // half step update for RK2 scheme; EQUATION 1 - if(simparam->optimization_options.optimization_objective_regions.size()){ - int nobj_volumes = simparam->optimization_options.optimization_objective_regions.size(); + if(optimization_objective_regions.size()){ + int nobj_volumes = optimization_objective_regions.size(); const_vec_array all_initial_node_coords = all_initial_node_coords_distributed->getLocalView(Tpetra::Access::ReadOnly); FOR_ALL_CLASS(node_gid, 0, nlocal_nodes, { real_t rate_of_change; @@ -878,7 +881,7 @@ void FEA_Module_SGH::compute_topology_optimization_adjoint_full(Teuchos::RCPoptimization_options.optimization_objective_regions(ivolume).contains(current_node_coords)){ + if(optimization_objective_regions(ivolume).contains(current_node_coords)){ contained = 1; } } @@ -1027,9 +1030,10 @@ void FEA_Module_SGH::compute_topology_optimization_adjoint_full(Teuchos::RCPCPU_Time(); + // state_adjoint_time += state_adjoint_time_end-state_adjoint_time_start; // set state according to phase data at this timestep - get_vol(); // ---- Calculate velocity diveregence for the element ---- @@ -1184,10 +1188,11 @@ void FEA_Module_SGH::compute_topology_optimization_adjoint_full(Teuchos::RCPCPU_Time(); // full step update with midpoint gradient for RK2 scheme; EQUATION 1 - if(simparam->optimization_options.optimization_objective_regions.size()){ - int nobj_volumes = simparam->optimization_options.optimization_objective_regions.size(); + if(optimization_objective_regions.size()){ + int nobj_volumes = optimization_objective_regions.size(); const_vec_array all_initial_node_coords = all_initial_node_coords_distributed->getLocalView(Tpetra::Access::ReadOnly); FOR_ALL_CLASS(node_gid, 0, nlocal_nodes, { real_t rate_of_change; @@ -1199,8 +1204,9 @@ void FEA_Module_SGH::compute_topology_optimization_adjoint_full(Teuchos::RCPoptimization_options.optimization_objective_regions(ivolume).contains(current_node_coords)){ + if(optimization_objective_regions(ivolume).contains(current_node_coords)){ contained = 1; } } @@ -1316,6 +1322,9 @@ void FEA_Module_SGH::compute_topology_optimization_adjoint_full(Teuchos::RCPassign(*all_adjoint_vector_distributed); (*psi_adjoint_vector_data)[cycle]->assign(*psi_adjoint_vector_distributed); } + + // state_adjoint_time_end = Explicit_Solver_Pointer_->CPU_Time(); + // state_adjoint_time += state_adjoint_time_end-state_adjoint_time_start; } // end view scope //tally contribution to the gradient vector @@ -1367,7 +1376,6 @@ void FEA_Module_SGH::compute_topology_optimization_adjoint_full(Teuchos::RCPCPU_Time(); get_force_dgradient_sgh(material, *mesh, node_coords, @@ -1476,7 +1485,9 @@ void FEA_Module_SGH::compute_topology_optimization_adjoint_full(Teuchos::RCPCPU_Time(); + //state_adjoint_time += state_adjoint_time_end-state_adjoint_time_start; compute_topology_optimization_gradient_tally(design_densities_distributed, cached_design_gradients_distributed, cycle, global_dt); } @@ -1489,6 +1500,10 @@ void FEA_Module_SGH::compute_topology_optimization_adjoint_full(Teuchos::RCPdescribe(*fos,Teuchos::VERB_EXTREME); } + + double total_adjoint_time_end = Explicit_Solver_Pointer_->CPU_Time(); + std::cout << "ADJOINT CALCULATION TIME ON RANK " << myrank << " IS " << total_adjoint_time_end-total_adjoint_time << std::endl; + // std::cout << "ADJOINT STATE CALCULATION TIME ON RANK " << myrank << " IS " << state_adjoint_time << std::endl; } ///////////////////////////////////////////////////////////////////////////// From 8525b50a8fdbdaec1b4104b699174f6e91a15be3 Mon Sep 17 00:00:00 2001 From: Zachary Baker Date: Fri, 12 Jul 2024 14:29:34 -0600 Subject: [PATCH 062/233] Update build.sh --- .conda/fierro/cpu/build.sh | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/.conda/fierro/cpu/build.sh b/.conda/fierro/cpu/build.sh index 58a902ee3..f2113fd60 100755 --- a/.conda/fierro/cpu/build.sh +++ b/.conda/fierro/cpu/build.sh @@ -1,5 +1,15 @@ # These flag variables are set by anaconda. source "$RECIPE_DIR/../../cross-compile-setup.sh" +BUILD_PREFIX=${BUILD_PREFIX:-$CONDA_PREFIX} + +# Set the MPI compiler variables +export MPI_C_COMPILER="${BUILD_PREFIX}/bin/mpicc" +export MPI_CXX_COMPILER="${BUILD_PREFIX}/bin/mpicxx" + +export PATH="${BUILD_PREFIX}/bin:$PATH" +export LD_LIBRARY_PATH="${BUILD_PREFIX}/lib:$LD_LIBRARY_PATH" +export INCLUDE_PATH="${BUILD_PREFIX}/include:$INCLUDE_PATH" + mkdir build cd build @@ -17,8 +27,8 @@ cmake .. \ -D DISTRIBUTION=On \ $CMAKE_ARGS \ -D CMAKE_CXX_FLAGS="$PATCHED_CXXFLAGS -fopenmp -D_LIBCPP_DISABLE_AVAILABILITY" \ - -D MPI_C_COMPILER="$BUILD_PREFIX/bin/mpicc" \ - -D MPI_CXX_COMPILER="$BUILD_PREFIX/bin/mpicxx" \ + -D MPI_C_COMPILER="${MPI_C_COMPILER}" \ + -D MPI_CXX_COMPILER="${MPI_CXX_COMPILER}" \ -D VECTOR_ARCH_FLAGS="$VECTOR_ARCH_FLAGS" \ -make -j 10 install \ No newline at end of file +make -j 10 install From 0f580474eae3e20db54e8a7f689081b67c8c9d77 Mon Sep 17 00:00:00 2001 From: Zachary Baker Date: Fri, 12 Jul 2024 14:30:11 -0600 Subject: [PATCH 063/233] Update publish-fierro-cpu.yaml --- .github/workflows/publish-fierro-cpu.yaml | 19 ++++--------------- 1 file changed, 4 insertions(+), 15 deletions(-) diff --git a/.github/workflows/publish-fierro-cpu.yaml b/.github/workflows/publish-fierro-cpu.yaml index a125f5364..a3aeff01b 100644 --- a/.github/workflows/publish-fierro-cpu.yaml +++ b/.github/workflows/publish-fierro-cpu.yaml @@ -9,21 +9,10 @@ on: jobs: publish: - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v4 - with: - submodules: recursive - - name: Install MPI - run: | - sudo apt-get install libopenmpi-dev openmpi-bin - echo "MPI_OPTS=--oversubscribe" >> $GITHUB_ENV - - uses: ./.github/workflows/build-conda-package.yaml - with: - recipe_dir: .conda/fierro/cpu - secrets: inherit - + uses: ./.github/workflows/build-conda-package.yaml + with: + recipe_dir: .conda/fierro/cpu + secrets: inherit From 970e8e9cd3fd627464d4700ab8b071a09e283125 Mon Sep 17 00:00:00 2001 From: Zachary Baker Date: Fri, 12 Jul 2024 14:58:47 -0600 Subject: [PATCH 064/233] Update build.sh --- .conda/fierro/cpu/build.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.conda/fierro/cpu/build.sh b/.conda/fierro/cpu/build.sh index f2113fd60..ee349aa07 100755 --- a/.conda/fierro/cpu/build.sh +++ b/.conda/fierro/cpu/build.sh @@ -29,6 +29,8 @@ cmake .. \ -D CMAKE_CXX_FLAGS="$PATCHED_CXXFLAGS -fopenmp -D_LIBCPP_DISABLE_AVAILABILITY" \ -D MPI_C_COMPILER="${MPI_C_COMPILER}" \ -D MPI_CXX_COMPILER="${MPI_CXX_COMPILER}" \ + -D MPI_C_INCLUDE_PATH="${BUILD_PREFIX}/include" \ + -D MPI_C_LIBRARIES="${BUILD_PREFIX}/lib" \ -D VECTOR_ARCH_FLAGS="$VECTOR_ARCH_FLAGS" \ make -j 10 install From efc895e5dee7bdc15ff829a5b4edb45891133792 Mon Sep 17 00:00:00 2001 From: Zachary Baker Date: Fri, 12 Jul 2024 15:33:54 -0600 Subject: [PATCH 065/233] Update build.sh --- .conda/fierro/cpu/build.sh | 16 ++-------------- 1 file changed, 2 insertions(+), 14 deletions(-) diff --git a/.conda/fierro/cpu/build.sh b/.conda/fierro/cpu/build.sh index ee349aa07..1203ff367 100755 --- a/.conda/fierro/cpu/build.sh +++ b/.conda/fierro/cpu/build.sh @@ -1,15 +1,5 @@ # These flag variables are set by anaconda. source "$RECIPE_DIR/../../cross-compile-setup.sh" -BUILD_PREFIX=${BUILD_PREFIX:-$CONDA_PREFIX} - -# Set the MPI compiler variables -export MPI_C_COMPILER="${BUILD_PREFIX}/bin/mpicc" -export MPI_CXX_COMPILER="${BUILD_PREFIX}/bin/mpicxx" - -export PATH="${BUILD_PREFIX}/bin:$PATH" -export LD_LIBRARY_PATH="${BUILD_PREFIX}/lib:$LD_LIBRARY_PATH" -export INCLUDE_PATH="${BUILD_PREFIX}/include:$INCLUDE_PATH" - mkdir build cd build @@ -18,6 +8,8 @@ cd build # see https://conda-forge.org/docs/maintainer/knowledge_base.html#newer-c-features-with-old-sdk cmake .. \ + -D CMAKE_C_COMPILER="$BUILD_PREFIX/bin/mpicc" \ + -D CMAKE_CXX_COMPILER="$BUILD_PREFIX/bin/mpicxx" \ -D CMAKE_BUILD_TYPE:STRING=RELEASE \ -D CMAKE_INSTALL_PREFIX:PATH=$PREFIX \ -D CMAKE_CXX_STANDARD:STRING=17 \ @@ -27,10 +19,6 @@ cmake .. \ -D DISTRIBUTION=On \ $CMAKE_ARGS \ -D CMAKE_CXX_FLAGS="$PATCHED_CXXFLAGS -fopenmp -D_LIBCPP_DISABLE_AVAILABILITY" \ - -D MPI_C_COMPILER="${MPI_C_COMPILER}" \ - -D MPI_CXX_COMPILER="${MPI_CXX_COMPILER}" \ - -D MPI_C_INCLUDE_PATH="${BUILD_PREFIX}/include" \ - -D MPI_C_LIBRARIES="${BUILD_PREFIX}/lib" \ -D VECTOR_ARCH_FLAGS="$VECTOR_ARCH_FLAGS" \ make -j 10 install From d20473d42f503790f77cc49525e22eb3df40ad0d Mon Sep 17 00:00:00 2001 From: Zachary Baker Date: Fri, 12 Jul 2024 15:52:17 -0600 Subject: [PATCH 066/233] Update build.sh --- .conda/fierro/cpu/build.sh | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.conda/fierro/cpu/build.sh b/.conda/fierro/cpu/build.sh index 1203ff367..e37b9c280 100755 --- a/.conda/fierro/cpu/build.sh +++ b/.conda/fierro/cpu/build.sh @@ -1,5 +1,10 @@ # These flag variables are set by anaconda. source "$RECIPE_DIR/../../cross-compile-setup.sh" +BUILD_PREFIX=${BUILD_PREFIX:-$CONDA_PREFIX} + +export MPI_C_COMPILER="${BUILD_PREFIX}/bin/mpicc" +export MPI_CXX_COMPILER="${BUILD_PREFIX}/bin/mpicxx" + mkdir build cd build From 3fb36d6260e5245acfba39cdccf42e8f5cf75ac4 Mon Sep 17 00:00:00 2001 From: Zachary Baker Date: Fri, 12 Jul 2024 16:15:54 -0600 Subject: [PATCH 067/233] Update build.sh --- .conda/fierro/cpu/build.sh | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/.conda/fierro/cpu/build.sh b/.conda/fierro/cpu/build.sh index e37b9c280..501ea78ac 100755 --- a/.conda/fierro/cpu/build.sh +++ b/.conda/fierro/cpu/build.sh @@ -1,9 +1,7 @@ # These flag variables are set by anaconda. source "$RECIPE_DIR/../../cross-compile-setup.sh" -BUILD_PREFIX=${BUILD_PREFIX:-$CONDA_PREFIX} - -export MPI_C_COMPILER="${BUILD_PREFIX}/bin/mpicc" -export MPI_CXX_COMPILER="${BUILD_PREFIX}/bin/mpicxx" +export PATH=$PATH:$BUILD_PREFIX/mpi/bin +export OPAL_PREFIX=/opt/hpcx/ompi mkdir build cd build @@ -13,8 +11,6 @@ cd build # see https://conda-forge.org/docs/maintainer/knowledge_base.html#newer-c-features-with-old-sdk cmake .. \ - -D CMAKE_C_COMPILER="$BUILD_PREFIX/bin/mpicc" \ - -D CMAKE_CXX_COMPILER="$BUILD_PREFIX/bin/mpicxx" \ -D CMAKE_BUILD_TYPE:STRING=RELEASE \ -D CMAKE_INSTALL_PREFIX:PATH=$PREFIX \ -D CMAKE_CXX_STANDARD:STRING=17 \ @@ -24,6 +20,8 @@ cmake .. \ -D DISTRIBUTION=On \ $CMAKE_ARGS \ -D CMAKE_CXX_FLAGS="$PATCHED_CXXFLAGS -fopenmp -D_LIBCPP_DISABLE_AVAILABILITY" \ + -D MPI_C_COMPILER="$BUILD_PREFIX/bin/mpicc" \ + -D MPI_CXX_COMPILER="$BUILD_PREFIX/bin/mpicxx" \ -D VECTOR_ARCH_FLAGS="$VECTOR_ARCH_FLAGS" \ make -j 10 install From 6e60a15f66d12b8db856d4934a86776fb080bab4 Mon Sep 17 00:00:00 2001 From: Zachary Baker Date: Fri, 12 Jul 2024 16:43:39 -0600 Subject: [PATCH 068/233] Update build.sh --- .conda/fierro/cpu/build.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.conda/fierro/cpu/build.sh b/.conda/fierro/cpu/build.sh index 501ea78ac..fa1d73ec3 100755 --- a/.conda/fierro/cpu/build.sh +++ b/.conda/fierro/cpu/build.sh @@ -1,7 +1,5 @@ # These flag variables are set by anaconda. source "$RECIPE_DIR/../../cross-compile-setup.sh" -export PATH=$PATH:$BUILD_PREFIX/mpi/bin -export OPAL_PREFIX=/opt/hpcx/ompi mkdir build cd build @@ -11,6 +9,7 @@ cd build # see https://conda-forge.org/docs/maintainer/knowledge_base.html#newer-c-features-with-old-sdk cmake .. \ + -D CMAKE_PREFIX_PATH=$BUILD_PREFIX/bin/mpiexec -D CMAKE_BUILD_TYPE:STRING=RELEASE \ -D CMAKE_INSTALL_PREFIX:PATH=$PREFIX \ -D CMAKE_CXX_STANDARD:STRING=17 \ From 2c08deb4f16eae13ce75c0cc7b8e4b6951bb02d5 Mon Sep 17 00:00:00 2001 From: Zachary Baker Date: Fri, 12 Jul 2024 16:53:14 -0600 Subject: [PATCH 069/233] Update build.sh --- .conda/fierro/cpu/build.sh | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/.conda/fierro/cpu/build.sh b/.conda/fierro/cpu/build.sh index fa1d73ec3..d0ad9a50c 100755 --- a/.conda/fierro/cpu/build.sh +++ b/.conda/fierro/cpu/build.sh @@ -1,7 +1,23 @@ # These flag variables are set by anaconda. source "$RECIPE_DIR/../../cross-compile-setup.sh" -mkdir build +export PATH=$PATH:/usr/local/mpi/bin +export OPAL_PREFIX=/opt/hpcx/ompi + +# Define the MPI root directory +export MPI_ROOT=/path/to/your/mpi + +# Set the MPI compiler variables +export MPI_C_COMPILER=${MPI_ROOT}/bin/mpicc +export MPI_CXX_COMPILER=${MPI_ROOT}/bin/mpicxx + +# Ensure the MPI libraries and includes are accessible +export PATH=${MPI_ROOT}/bin:$PATH +export LD_LIBRARY_PATH=${MPI_ROOT}/lib:$LD_LIBRARY_PATH +export INCLUDE_PATH=${MPI_ROOT}/include:$INCLUDE_PATH + +# Create a build directory +mkdir -p build cd build # -D _LIBCPP_DISABLE_AVAILABILITY @@ -9,7 +25,6 @@ cd build # see https://conda-forge.org/docs/maintainer/knowledge_base.html#newer-c-features-with-old-sdk cmake .. \ - -D CMAKE_PREFIX_PATH=$BUILD_PREFIX/bin/mpiexec -D CMAKE_BUILD_TYPE:STRING=RELEASE \ -D CMAKE_INSTALL_PREFIX:PATH=$PREFIX \ -D CMAKE_CXX_STANDARD:STRING=17 \ @@ -19,8 +34,8 @@ cmake .. \ -D DISTRIBUTION=On \ $CMAKE_ARGS \ -D CMAKE_CXX_FLAGS="$PATCHED_CXXFLAGS -fopenmp -D_LIBCPP_DISABLE_AVAILABILITY" \ - -D MPI_C_COMPILER="$BUILD_PREFIX/bin/mpicc" \ - -D MPI_CXX_COMPILER="$BUILD_PREFIX/bin/mpicxx" \ + -D MPI_C_COMPILER=${MPI_C_COMPILER} \ + -D MPI_CXX_COMPILER=${MPI_CXX_COMPILER} \ -D VECTOR_ARCH_FLAGS="$VECTOR_ARCH_FLAGS" \ make -j 10 install From 1140d7252089efec32f095a8dd05a8b3e82b0142 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CAdrian-Diaz=E2=80=9D?= <“adriandiaz1117@gmail.com”> Date: Sun, 14 Jul 2024 16:51:27 -0600 Subject: [PATCH 070/233] PERF: clean up gradient ops --- .../SGH_Solver/src/force_gradients_sgh.cpp | 31 +- .../SGH_Solver/src/geometry.cpp | 336 ++++++++---------- 2 files changed, 155 insertions(+), 212 deletions(-) diff --git a/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/force_gradients_sgh.cpp b/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/force_gradients_sgh.cpp index 830c062ec..cd32db21e 100644 --- a/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/force_gradients_sgh.cpp +++ b/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/force_gradients_sgh.cpp @@ -361,17 +361,14 @@ void FEA_Module_SGH::get_force_vgradient_sgh(const DCArrayKokkos& ma } else{ // Using a full tensoral Riemann jump relation - mu_term = muc(node_lid) - * sqrt(area_normal(node_lid, 0) * area_normal(node_lid, 0) - + area_normal(node_lid, 1) * area_normal(node_lid, 1) - + area_normal(node_lid, 2) * area_normal(node_lid, 2) ); + real_t area_normal_norm = sqrt(area_normal(node_lid, 0) * area_normal(node_lid, 0) + +area_normal(node_lid, 1) * area_normal(node_lid, 1) + +area_normal(node_lid, 2) * area_normal(node_lid, 2)); + mu_term = muc(node_lid)*area_normal_norm; for (int igradient = 0; igradient < num_nodes_in_elem; igradient++) { for (int jdim = 0; jdim < num_dims; jdim++) { - muc_gradient(node_lid, igradient, jdim) = muc_gradient(node_lid, igradient, jdim) - * sqrt(area_normal(node_lid, 0) * area_normal(node_lid, 0) - + area_normal(node_lid, 1) * area_normal(node_lid, 1) - + area_normal(node_lid, 2) * area_normal(node_lid, 2) ); + muc_gradient(node_lid, igradient, jdim) = muc_gradient(node_lid, igradient, jdim)*area_normal_norm; } } } @@ -1330,22 +1327,20 @@ void FEA_Module_SGH::get_force_ugradient_sgh(const DCArrayKokkos& ma // Using a full tensoral Riemann jump relation mu_term = muc(node_lid) * sqrt(area_normal(node_lid, 0) * area_normal(node_lid, 0) - + area_normal(node_lid, 1) * area_normal(node_lid, 1) - + area_normal(node_lid, 2) * area_normal(node_lid, 2) ); + + area_normal(node_lid, 1) * area_normal(node_lid, 1) + + area_normal(node_lid, 2) * area_normal(node_lid, 2) ); + real_t area_normal_norm = sqrt(area_normal(node_lid, 0) * area_normal(node_lid, 0) + +area_normal(node_lid, 1) * area_normal(node_lid, 1) + +area_normal(node_lid, 2) * area_normal(node_lid, 2)); for (int igradient = 0; igradient < num_nodes_in_elem; igradient++) { for (int jdim = 0; jdim < num_dims; jdim++) { mu_term_gradient = muc_gradient(node_lid, igradient, jdim) - * sqrt(area_normal(node_lid, 0) * area_normal(node_lid, 0) - + area_normal(node_lid, 1) * area_normal(node_lid, 1) - + area_normal(node_lid, 2) * area_normal(node_lid, 2) ); + * area_normal_norm; mu_term_gradient += muc(node_lid) * (area_normal(node_lid, 0) * area_normal_gradients(node_lid, 0, igradient, jdim) + area_normal(node_lid, 1) * area_normal_gradients(node_lid, 1, igradient, jdim) - + area_normal(node_lid, 2) * area_normal_gradients(node_lid, 2, igradient, jdim)) / - sqrt(area_normal(node_lid, 0) * area_normal(node_lid, 0) - + area_normal(node_lid, 1) * area_normal(node_lid, 1) - + area_normal(node_lid, 2) * area_normal(node_lid, 2) ); - + + area_normal(node_lid, 2) * area_normal_gradients(node_lid, 2, igradient, jdim))/ area_normal_norm; + muc_gradient(node_lid, igradient, jdim) = mu_term_gradient; } } diff --git a/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/geometry.cpp b/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/geometry.cpp index 6e2b124ad..0357a1e76 100644 --- a/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/geometry.cpp +++ b/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/geometry.cpp @@ -1,5 +1,5 @@ /********************************************************************************************** - 2020. Triad National Security, LLC. All rights reserved. + � 2020. Triad National Security, LLC. All rights reserved. This program was produced under U.S. Government contract 89233218CNA000001 for Los Alamos National Laboratory (LANL), which is operated by Triad National Security, LLC for the U.S. Department of Energy/National Nuclear Security Administration. All rights in the program are @@ -732,199 +732,147 @@ void FEA_Module_SGH::get_vol_hex_ugradient(const ViewCArrayKokkos& elem_ double twelth = 1. / 12.; // element volume gradient - for (int inode = 0; inode < 8; inode++) { - for (int idim = 0; idim < num_dims; idim++) { - switch (num_dims * inode + idim) { - case 0: - gradient_result = - ((y(2) * (z(1) - z(3)) + y(7) * (z(3) - z(4)) + y(5) * (-z(1) + z(4)) + y(1) * (-z(2) - z(3) + z(4) + z(5)) + y(3) * (z(1) + z(2) - z(4) - z(7)) + y(4) * - (-z(1) + z(3) - z(5) + z(7)))) * twelth; - break; - case 3: - gradient_result = - ((y(3) * (-z(0) + z(2)) + y(4) * (z(0) - z(5)) + y(0) * (z(2) + z(3) - z(4) - z(5)) + y(6) * (-z(2) + z(5)) + y(5) * (z(0) - z(2) + z(4) - z(6)) + y(2) * - (-z(0) - z(3) + z(5) + z(6)))) * twelth; - break; - - case 6: - gradient_result = - ((y(0) * (-z(1) + z(3)) + y(5) * (z(1) - z(6)) + y(1) * (z(0) + z(3) - z(5) - z(6)) + y(7) * (-z(3) + z(6)) + y(6) * (z(1) - z(3) + z(5) - z(7)) + y(3) * - (-z(0) - z(1) + z(6) + z(7)))) * twelth; - break; - case 9: - gradient_result = - ((y(1) * (z(0) - z(2)) + y(7) * (-z(0) + z(2) - z(4) + z(6)) + y(6) * (z(2) - z(7)) + y(2) * (z(0) + z(1) - z(6) - z(7)) + y(4) * (-z(0) + z(7)) + y(0) * - (-z(1) - z(2) + z(4) + z(7)))) * twelth; - break; - case 12: - gradient_result = - ((y(1) * (-z(0) + z(5)) + y(7) * (z(0) + z(3) - z(5) - z(6)) + y(3) * (z(0) - z(7)) + y(0) * (z(1) - z(3) + z(5) - z(7)) + y(6) * (-z(5) + z(7)) + y(5) * - (-z(0) - z(1) + z(6) + z(7)))) * twelth; - break; - case 15: - gradient_result = - ((y(0) * (z(1) - z(4)) + y(7) * (z(4) - z(6)) + y(2) * (-z(1) + z(6)) + y(1) * (-z(0) + z(2) - z(4) + z(6)) + y(4) * (z(0) + z(1) - z(6) - z(7)) + y(6) * - (-z(1) - z(2) + z(4) + z(7)))) * twelth; - break; - case 18: - gradient_result = - ((y(1) * (z(2) - z(5)) + y(7) * (-z(2) - z(3) + z(4) + z(5)) + y(5) * (z(1) + z(2) - z(4) - z(7)) + y(4) * (z(5) - z(7)) + y(3) * (-z(2) + z(7)) + y(2) * - (-z(1) + z(3) - z(5) + z(7)))) * twelth; - break; - case 21: - gradient_result = - ((y(0) * (-z(3) + z(4)) + y(6) * (z(2) + z(3) - z(4) - z(5)) + y(2) * (z(3) - z(6)) + y(3) * (z(0) - z(2) + z(4) - z(6)) + y(5) * (-z(4) + z(6)) + y(4) * - (-z(0) - z(3) + z(5) + z(6)))) * twelth; - break; - case 1: - gradient_result = - (x(1) * ((z(2) + z(3) - z(4) - z(5))) + - x(7) * ((-z(3) + z(4))) + - x(3) * ((-z(1) - z(2) + z(4) + z(7))) + - x(5) * ((z(1) - z(4))) + - x(2) * ((-z(1) + z(3))) + - x(4) * ((z(1) - z(3) + z(5) - z(7)))) * twelth; - break; - case 4: - gradient_result = - (x(3) * ((z(0) - z(2))) + - x(5) * ((-z(0) + z(2) - z(4) + z(6))) + - x(6) * ((z(2) - z(5))) + - x(0) * ((-z(2) - z(3) + z(4) + z(5))) + - x(2) * ((z(0) + z(3) - z(5) - z(6))) + - x(4) * ((-z(0) + z(5)))) * twelth; - break; - case 7: - gradient_result = - (x(1) * ((-z(0) - z(3) + z(5) + z(6))) + - x(7) * ((z(3) - z(6))) + - x(3) * ((z(0) + z(1) - z(6) - z(7))) + - x(5) * ((-z(1) + z(6))) + - x(6) * ((-z(1) + z(3) - z(5) + z(7))) + - x(0) * ((z(1) - z(3)))) * twelth; - break; - case 10: - gradient_result = - (x(1) * ((-z(0) + z(2))) + - x(7) * ((z(0) - z(2) + z(4) - z(6))) + - x(6) * ((-z(2) + z(7))) + - x(0) * ((z(1) + z(2) - z(4) - z(7))) + - x(2) * ((-z(0) - z(1) + z(6) + z(7))) + - x(4) * ((z(0) - z(7)))) * twelth; - break; - case 13: - gradient_result = - (x(1) * ((z(0) - z(5))) + - x(7) * ((-z(0) - z(3) + z(5) + z(6))) + - x(3) * ((-z(0) + z(7))) + - x(5) * ((z(0) + z(1) - z(6) - z(7))) + - x(6) * ((z(5) - z(7))) + - x(0) * ((-z(1) + z(3) - z(5) + z(7)))) * twelth; - break; - case 16: - gradient_result = - (x(1) * ((z(0) - z(2) + z(4) - z(6))) + - x(7) * ((-z(4) + z(6))) + - x(6) * ((z(1) + z(2) - z(4) - z(7))) + - x(0) * ((-z(1) + z(4))) + - x(2) * ((z(1) - z(6))) + - x(4) * ((-z(0) - z(1) + z(6) + z(7)))) * twelth; - break; - case 19: - gradient_result = - (x(1) * ((-z(2) + z(5))) + - x(7) * ((z(2) + z(3) - z(4) - z(5))) + - x(3) * ((z(2) - z(7))) + - x(5) * ((-z(1) - z(2) + z(4) + z(7))) + - x(2) * ((z(1) - z(3) + z(5) - z(7))) + - x(4) * ((-z(5) + z(7)))) * twelth; - break; - case 22: - gradient_result = - (x(3) * ((-z(0) + z(2) - z(4) + z(6))) + - x(5) * ((z(4) - z(6))) + - x(6) * ((-z(2) - z(3) + z(4) + z(5))) + - x(0) * ((z(3) - z(4))) + - x(2) * ((-z(3) + z(6))) + - x(4) * ((z(0) + z(3) - z(5) - z(6)))) * twelth; - break; - case 2: - gradient_result = - (x(1) * (-y(3) + y(4) + y(5) - y(2)) + - x(7) * (y(3) - y(4)) + - x(3) * (y(1) - y(7) + y(2) - y(4)) + - x(5) * (-y(1) + y(4)) + - x(2) * (y(1) - y(3)) + - x(4) * (-y(1) + y(7) + y(3) - y(5))) * twelth; - break; - case 5: - gradient_result = - (x(3) * (y(2) - y(0)) + - x(5) * (y(0) - y(2) + y(4) - y(6)) + - x(6) * (y(5) - y(2)) + - x(0) * (y(2) - y(5) + y(3) - y(4)) + - x(2) * (-y(0) + y(5) + y(6) - y(3)) + - x(4) * (y(0) - y(5))) * twelth; - break; - case 8: - gradient_result = - (x(1) * (y(3) + y(0) - y(6) - y(5)) + - x(7) * (y(6) - y(3)) + - x(3) * (-y(1) + y(7) + y(6) - y(0)) + - x(5) * (y(1) - y(6)) + - x(6) * (y(1) - y(7) + y(5) - y(3)) + - x(0) * (-y(1) + y(3))) * twelth; - break; - case 11: - gradient_result = - (x(1) * (y(0) - y(2)) + - x(7) * (-y(0) + y(6) + y(2) - y(4)) + - x(6) * (-y(7) + y(2)) + - x(0) * (-y(2) + y(7) - y(1) + y(4)) + - x(2) * (y(0) + y(1) - y(7) - y(6)) + - x(4) * (y(7) - y(0))) * twelth; - break; - case 14: - gradient_result = - (x(1) * (-y(0) + y(5)) + - x(7) * (y(0) - y(6) + y(3) - y(5)) + - x(3) * (-y(7) + y(0)) + - x(5) * (-y(0) + y(7) - y(1) + y(6)) + - x(6) * (y(7) - y(5)) + - x(0) * (-y(7) + y(5) + y(1) - y(3))) * twelth; - break; - case 17: - gradient_result = - (x(1) * (-y(4) - y(0) + y(6) + y(2)) + - x(7) * (-y(6) + y(4)) + - x(6) * (-y(1) + y(7) + y(4) - y(2)) + - x(0) * (y(1) - y(4)) + - x(2) * (-y(1) + y(6)) + - x(4) * (y(1) - y(7) + y(0) - y(6))) * twelth; - break; - case 20: - gradient_result = - (x(1) * (-y(5) + y(2)) + - x(7) * (-y(2) - y(3) + y(5) + y(4)) + - x(3) * (y(7) - y(2)) + - x(5) * (-y(7) + y(2) + y(1) - y(4)) + - x(2) * (-y(5) - y(1) + y(7) + y(3)) + - x(4) * (-y(7) + y(5))) * twelth; - break; - case 23: - gradient_result = - (x(3) * (-y(6) - y(2) + y(4) + y(0)) + - x(5) * (-y(4) + y(6)) + - x(6) * (-y(5) - y(4) + y(3) + y(2)) + - x(0) * (-y(3) + y(4)) + - x(2) * (-y(6) + y(3)) + - x(4) * (-y(3) - y(0) + y(6) + y(5))) * twelth; - break; - } - elem_vol_gradients(inode, idim) = gradient_result; - } - } - return; + //x gradients + elem_vol_gradients(0, 0) = + ((y(2) * (z(1) - z(3)) + y(7) * (z(3) - z(4)) + y(5) * (-z(1) + z(4)) + y(1) * (-z(2) - z(3) + z(4) + z(5)) + y(3) * (z(1) + z(2) - z(4) - z(7)) + y(4) * + (-z(1) + z(3) - z(5) + z(7)))) * twelth; + elem_vol_gradients(1, 0) = + ((y(3) * (-z(0) + z(2)) + y(4) * (z(0) - z(5)) + y(0) * (z(2) + z(3) - z(4) - z(5)) + y(6) * (-z(2) + z(5)) + y(5) * (z(0) - z(2) + z(4) - z(6)) + y(2) * + (-z(0) - z(3) + z(5) + z(6)))) * twelth; + elem_vol_gradients(2, 0) = + ((y(0) * (-z(1) + z(3)) + y(5) * (z(1) - z(6)) + y(1) * (z(0) + z(3) - z(5) - z(6)) + y(7) * (-z(3) + z(6)) + y(6) * (z(1) - z(3) + z(5) - z(7)) + y(3) * + (-z(0) - z(1) + z(6) + z(7)))) * twelth; + elem_vol_gradients(3, 0) = + ((y(1) * (z(0) - z(2)) + y(7) * (-z(0) + z(2) - z(4) + z(6)) + y(6) * (z(2) - z(7)) + y(2) * (z(0) + z(1) - z(6) - z(7)) + y(4) * (-z(0) + z(7)) + y(0) * + (-z(1) - z(2) + z(4) + z(7)))) * twelth; + elem_vol_gradients(4, 0) = + ((y(1) * (-z(0) + z(5)) + y(7) * (z(0) + z(3) - z(5) - z(6)) + y(3) * (z(0) - z(7)) + y(0) * (z(1) - z(3) + z(5) - z(7)) + y(6) * (-z(5) + z(7)) + y(5) * + (-z(0) - z(1) + z(6) + z(7)))) * twelth; + elem_vol_gradients(5, 0) = + ((y(0) * (z(1) - z(4)) + y(7) * (z(4) - z(6)) + y(2) * (-z(1) + z(6)) + y(1) * (-z(0) + z(2) - z(4) + z(6)) + y(4) * (z(0) + z(1) - z(6) - z(7)) + y(6) * + (-z(1) - z(2) + z(4) + z(7)))) * twelth; + elem_vol_gradients(6, 0) = + ((y(1) * (z(2) - z(5)) + y(7) * (-z(2) - z(3) + z(4) + z(5)) + y(5) * (z(1) + z(2) - z(4) - z(7)) + y(4) * (z(5) - z(7)) + y(3) * (-z(2) + z(7)) + y(2) * + (-z(1) + z(3) - z(5) + z(7)))) * twelth; + elem_vol_gradients(7, 0) = + ((y(0) * (-z(3) + z(4)) + y(6) * (z(2) + z(3) - z(4) - z(5)) + y(2) * (z(3) - z(6)) + y(3) * (z(0) - z(2) + z(4) - z(6)) + y(5) * (-z(4) + z(6)) + y(4) * + (-z(0) - z(3) + z(5) + z(6)))) * twelth; + + //y gradients + elem_vol_gradients(0, 1) = + (x(1) * ((z(2) + z(3) - z(4) - z(5))) + + x(7) * ((-z(3) + z(4))) + + x(3) * ((-z(1) - z(2) + z(4) + z(7))) + + x(5) * ((z(1) - z(4))) + + x(2) * ((-z(1) + z(3))) + + x(4) * ((z(1) - z(3) + z(5) - z(7)))) * twelth; + elem_vol_gradients(1, 1) = + (x(3) * ((z(0) - z(2))) + + x(5) * ((-z(0) + z(2) - z(4) + z(6))) + + x(6) * ((z(2) - z(5))) + + x(0) * ((-z(2) - z(3) + z(4) + z(5))) + + x(2) * ((z(0) + z(3) - z(5) - z(6))) + + x(4) * ((-z(0) + z(5)))) * twelth; + elem_vol_gradients(2, 1) = + (x(1) * ((-z(0) - z(3) + z(5) + z(6))) + + x(7) * ((z(3) - z(6))) + + x(3) * ((z(0) + z(1) - z(6) - z(7))) + + x(5) * ((-z(1) + z(6))) + + x(6) * ((-z(1) + z(3) - z(5) + z(7))) + + x(0) * ((z(1) - z(3)))) * twelth; + elem_vol_gradients(3, 1) = + (x(1) * ((-z(0) + z(2))) + + x(7) * ((z(0) - z(2) + z(4) - z(6))) + + x(6) * ((-z(2) + z(7))) + + x(0) * ((z(1) + z(2) - z(4) - z(7))) + + x(2) * ((-z(0) - z(1) + z(6) + z(7))) + + x(4) * ((z(0) - z(7)))) * twelth; + elem_vol_gradients(4, 1) = + (x(1) * ((z(0) - z(5))) + + x(7) * ((-z(0) - z(3) + z(5) + z(6))) + + x(3) * ((-z(0) + z(7))) + + x(5) * ((z(0) + z(1) - z(6) - z(7))) + + x(6) * ((z(5) - z(7))) + + x(0) * ((-z(1) + z(3) - z(5) + z(7)))) * twelth; + elem_vol_gradients(5, 1) = + (x(1) * ((z(0) - z(2) + z(4) - z(6))) + + x(7) * ((-z(4) + z(6))) + + x(6) * ((z(1) + z(2) - z(4) - z(7))) + + x(0) * ((-z(1) + z(4))) + + x(2) * ((z(1) - z(6))) + + x(4) * ((-z(0) - z(1) + z(6) + z(7)))) * twelth; + elem_vol_gradients(6, 1) = + (x(1) * ((-z(2) + z(5))) + + x(7) * ((z(2) + z(3) - z(4) - z(5))) + + x(3) * ((z(2) - z(7))) + + x(5) * ((-z(1) - z(2) + z(4) + z(7))) + + x(2) * ((z(1) - z(3) + z(5) - z(7))) + + x(4) * ((-z(5) + z(7)))) * twelth; + elem_vol_gradients(7, 1) = + (x(3) * ((-z(0) + z(2) - z(4) + z(6))) + + x(5) * ((z(4) - z(6))) + + x(6) * ((-z(2) - z(3) + z(4) + z(5))) + + x(0) * ((z(3) - z(4))) + + x(2) * ((-z(3) + z(6))) + + x(4) * ((z(0) + z(3) - z(5) - z(6)))) * twelth; + + //z gradients + elem_vol_gradients(0, 2) = + (x(1) * (-y(3) + y(4) + y(5) - y(2)) + + x(7) * (y(3) - y(4)) + + x(3) * (y(1) - y(7) + y(2) - y(4)) + + x(5) * (-y(1) + y(4)) + + x(2) * (y(1) - y(3)) + + x(4) * (-y(1) + y(7) + y(3) - y(5))) * twelth; + elem_vol_gradients(1, 2) = + (x(3) * (y(2) - y(0)) + + x(5) * (y(0) - y(2) + y(4) - y(6)) + + x(6) * (y(5) - y(2)) + + x(0) * (y(2) - y(5) + y(3) - y(4)) + + x(2) * (-y(0) + y(5) + y(6) - y(3)) + + x(4) * (y(0) - y(5))) * twelth; + elem_vol_gradients(2, 2) = + (x(1) * (y(3) + y(0) - y(6) - y(5)) + + x(7) * (y(6) - y(3)) + + x(3) * (-y(1) + y(7) + y(6) - y(0)) + + x(5) * (y(1) - y(6)) + + x(6) * (y(1) - y(7) + y(5) - y(3)) + + x(0) * (-y(1) + y(3))) * twelth; + elem_vol_gradients(3, 2) = + (x(1) * (y(0) - y(2)) + + x(7) * (-y(0) + y(6) + y(2) - y(4)) + + x(6) * (-y(7) + y(2)) + + x(0) * (-y(2) + y(7) - y(1) + y(4)) + + x(2) * (y(0) + y(1) - y(7) - y(6)) + + x(4) * (y(7) - y(0))) * twelth; + elem_vol_gradients(4, 2) = + (x(1) * (-y(0) + y(5)) + + x(7) * (y(0) - y(6) + y(3) - y(5)) + + x(3) * (-y(7) + y(0)) + + x(5) * (-y(0) + y(7) - y(1) + y(6)) + + x(6) * (y(7) - y(5)) + + x(0) * (-y(7) + y(5) + y(1) - y(3))) * twelth; + elem_vol_gradients(5, 2) = + (x(1) * (-y(4) - y(0) + y(6) + y(2)) + + x(7) * (-y(6) + y(4)) + + x(6) * (-y(1) + y(7) + y(4) - y(2)) + + x(0) * (y(1) - y(4)) + + x(2) * (-y(1) + y(6)) + + x(4) * (y(1) - y(7) + y(0) - y(6))) * twelth; + elem_vol_gradients(6, 2) = + (x(1) * (-y(5) + y(2)) + + x(7) * (-y(2) - y(3) + y(5) + y(4)) + + x(3) * (y(7) - y(2)) + + x(5) * (-y(7) + y(2) + y(1) - y(4)) + + x(2) * (-y(5) - y(1) + y(7) + y(3)) + + x(4) * (-y(7) + y(5))) * twelth; + elem_vol_gradients(7, 2) = + (x(3) * (-y(6) - y(2) + y(4) + y(0)) + + x(5) * (-y(4) + y(6)) + + x(6) * (-y(5) - y(4) + y(3) + y(2)) + + x(0) * (-y(3) + y(4)) + + x(2) * (-y(6) + y(3)) + + x(4) * (-y(3) - y(0) + y(6) + y(5))) * twelth; } // end subroutine ///////////////////////////////////////////////////////////////////////////// From 7fdab4d5f511e46e62fe8b54ce9fb3336b6b8634 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CAdrian-Diaz=E2=80=9D?= <“adriandiaz1117@gmail.com”> Date: Sun, 14 Jul 2024 16:58:32 -0600 Subject: [PATCH 071/233] STYLE: adjoint time printout --- .../Parallel-Explicit/SGH_Solver/src/sgh_optimization.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/sgh_optimization.cpp b/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/sgh_optimization.cpp index 669f0421f..b927054ae 100644 --- a/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/sgh_optimization.cpp +++ b/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/sgh_optimization.cpp @@ -1502,7 +1502,7 @@ void FEA_Module_SGH::compute_topology_optimization_adjoint_full(Teuchos::RCPCPU_Time(); - std::cout << "ADJOINT CALCULATION TIME ON RANK " << myrank << " IS " << total_adjoint_time_end-total_adjoint_time << std::endl; + *fos << "ADJOINT CALCULATION TIME ON RANK " << myrank << " IS " << total_adjoint_time_end-total_adjoint_time << std::endl; // std::cout << "ADJOINT STATE CALCULATION TIME ON RANK " << myrank << " IS " << state_adjoint_time << std::endl; } From c1da2cd3d53187824968d219662d27dbfe1c9306 Mon Sep 17 00:00:00 2001 From: Zachary Baker Date: Mon, 15 Jul 2024 15:12:30 -0600 Subject: [PATCH 072/233] Update build.sh --- .conda/fierro/cpu/build.sh | 18 ++++-------------- 1 file changed, 4 insertions(+), 14 deletions(-) diff --git a/.conda/fierro/cpu/build.sh b/.conda/fierro/cpu/build.sh index d0ad9a50c..97ad998b0 100755 --- a/.conda/fierro/cpu/build.sh +++ b/.conda/fierro/cpu/build.sh @@ -1,20 +1,10 @@ # These flag variables are set by anaconda. source "$RECIPE_DIR/../../cross-compile-setup.sh" -export PATH=$PATH:/usr/local/mpi/bin -export OPAL_PREFIX=/opt/hpcx/ompi - -# Define the MPI root directory -export MPI_ROOT=/path/to/your/mpi - -# Set the MPI compiler variables -export MPI_C_COMPILER=${MPI_ROOT}/bin/mpicc -export MPI_CXX_COMPILER=${MPI_ROOT}/bin/mpicxx - -# Ensure the MPI libraries and includes are accessible -export PATH=${MPI_ROOT}/bin:$PATH -export LD_LIBRARY_PATH=${MPI_ROOT}/lib:$LD_LIBRARY_PATH -export INCLUDE_PATH=${MPI_ROOT}/include:$INCLUDE_PATH +export MPI_C_COMPILER=/usr/local/bin/mpicc +export MPI_CXX_COMPILER=/usr/local/bin/mpicxx +export MPI_C_INCLUDE_PATH=/usr/local/bin/mpi/include +export MPI_CXX_INCLUDE_PATH=/usr/local/bin/mpi/include # Create a build directory mkdir -p build From 7bc3866c92e281db655c03a0728ae1d7b78bd2ed Mon Sep 17 00:00:00 2001 From: Zachary Baker Date: Mon, 15 Jul 2024 15:22:05 -0600 Subject: [PATCH 073/233] Update CMakeLists.txt --- CMakeLists.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index cc39a5050..9649d2837 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,6 +2,8 @@ cmake_minimum_required(VERSION 3.17) project(Fierro NONE) set(CMAKE_CXX_STANDARD 17) +set(MPI_C_COMPILER /usr/local/bin/mpicc) +set(MPI_CXX_COMPILER /usr/local/bin/mpicxx) enable_language(CXX) # Disable Kokkos warning about not supporting C++ extensions set(CMAKE_CXX_EXTENSIONS OFF) From 3ee1b19d10c61530c984f44df3609c5c15af3a6a Mon Sep 17 00:00:00 2001 From: Zachary Baker Date: Mon, 15 Jul 2024 15:22:28 -0600 Subject: [PATCH 074/233] Update build.sh --- .conda/fierro/cpu/build.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.conda/fierro/cpu/build.sh b/.conda/fierro/cpu/build.sh index 97ad998b0..7f9d2a45c 100755 --- a/.conda/fierro/cpu/build.sh +++ b/.conda/fierro/cpu/build.sh @@ -24,8 +24,8 @@ cmake .. \ -D DISTRIBUTION=On \ $CMAKE_ARGS \ -D CMAKE_CXX_FLAGS="$PATCHED_CXXFLAGS -fopenmp -D_LIBCPP_DISABLE_AVAILABILITY" \ - -D MPI_C_COMPILER=${MPI_C_COMPILER} \ - -D MPI_CXX_COMPILER=${MPI_CXX_COMPILER} \ + -D MPI_C_COMPILER="$BUILD_PREFIX/bin/mpicc" \ + -D MPI_CXX_COMPILER="$BUILD_PREFIX/bin/mpicxx" \ -D VECTOR_ARCH_FLAGS="$VECTOR_ARCH_FLAGS" \ make -j 10 install From 64fe65bb77b626d65d06699268bf3643a4401ad1 Mon Sep 17 00:00:00 2001 From: Zachary Baker Date: Mon, 15 Jul 2024 16:08:39 -0600 Subject: [PATCH 075/233] Update build.sh --- .conda/fierro/cpu/build.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.conda/fierro/cpu/build.sh b/.conda/fierro/cpu/build.sh index 7f9d2a45c..53a977b9c 100755 --- a/.conda/fierro/cpu/build.sh +++ b/.conda/fierro/cpu/build.sh @@ -1,10 +1,10 @@ # These flag variables are set by anaconda. source "$RECIPE_DIR/../../cross-compile-setup.sh" -export MPI_C_COMPILER=/usr/local/bin/mpicc -export MPI_CXX_COMPILER=/usr/local/bin/mpicxx -export MPI_C_INCLUDE_PATH=/usr/local/bin/mpi/include -export MPI_CXX_INCLUDE_PATH=/usr/local/bin/mpi/include +export MPI_C_COMPILER=$BUILD_PREFIX/bin/mpicc +export MPI_CXX_COMPILER=$BUILD_PREFIX/bin/mpicxx +export MPI_C_INCLUDE_PATH=$BUILD_PREFIX/bin/mpi/include +export MPI_CXX_INCLUDE_PATH=$BUILD_PREFIX/bin/mpi/include # Create a build directory mkdir -p build From b3e1c968ebd9897f51328cdc8693a7f1223fdaff Mon Sep 17 00:00:00 2001 From: Zachary Baker Date: Mon, 15 Jul 2024 16:17:00 -0600 Subject: [PATCH 076/233] Update CMakeLists.txt --- CMakeLists.txt | 2 -- 1 file changed, 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9649d2837..cc39a5050 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,8 +2,6 @@ cmake_minimum_required(VERSION 3.17) project(Fierro NONE) set(CMAKE_CXX_STANDARD 17) -set(MPI_C_COMPILER /usr/local/bin/mpicc) -set(MPI_CXX_COMPILER /usr/local/bin/mpicxx) enable_language(CXX) # Disable Kokkos warning about not supporting C++ extensions set(CMAKE_CXX_EXTENSIONS OFF) From 2e6774db54fd075d304736e166e49b734edd68ac Mon Sep 17 00:00:00 2001 From: Zachary Baker Date: Tue, 16 Jul 2024 15:36:52 -0600 Subject: [PATCH 077/233] Update build.sh --- .conda/fierro/cpu/build.sh | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/.conda/fierro/cpu/build.sh b/.conda/fierro/cpu/build.sh index 53a977b9c..4e6db1c0b 100755 --- a/.conda/fierro/cpu/build.sh +++ b/.conda/fierro/cpu/build.sh @@ -1,13 +1,6 @@ # These flag variables are set by anaconda. source "$RECIPE_DIR/../../cross-compile-setup.sh" - -export MPI_C_COMPILER=$BUILD_PREFIX/bin/mpicc -export MPI_CXX_COMPILER=$BUILD_PREFIX/bin/mpicxx -export MPI_C_INCLUDE_PATH=$BUILD_PREFIX/bin/mpi/include -export MPI_CXX_INCLUDE_PATH=$BUILD_PREFIX/bin/mpi/include - -# Create a build directory -mkdir -p build +mkdir build cd build # -D _LIBCPP_DISABLE_AVAILABILITY From ac479ae505444f932662e444bb0ab4544fd00970 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CAdrian-Diaz=E2=80=9D?= <“adriandiaz1117@gmail.com”> Date: Thu, 18 Jul 2024 13:37:21 -0600 Subject: [PATCH 078/233] ENH: implosion example work --- .../example_implosion.yaml | 84 +++++++++++++++++++ .../SGH_Solver/src/force_sgh.cpp | 4 +- 2 files changed, 86 insertions(+), 2 deletions(-) create mode 100644 src/Parallel-Solvers/Parallel-Explicit/Example_Yaml_Scripts/example_implosion.yaml diff --git a/src/Parallel-Solvers/Parallel-Explicit/Example_Yaml_Scripts/example_implosion.yaml b/src/Parallel-Solvers/Parallel-Explicit/Example_Yaml_Scripts/example_implosion.yaml new file mode 100644 index 000000000..ea43b3273 --- /dev/null +++ b/src/Parallel-Solvers/Parallel-Explicit/Example_Yaml_Scripts/example_implosion.yaml @@ -0,0 +1,84 @@ +num_dims: 3 +dynamic_options: + time_final: 20.0 + dt_min: 1.e-8 + dt_max: 1.e-2 + dt_start: 1.e-5 + cycle_stop: 2000000 + +mesh_generation_options: + type: Box + origin: [0, 0, 0] + length: [1.2, 1.2, 1.2] + num_elems: [32, 32, 32] + +output_options: + timer_output_level: thorough + output_file_format: vtk + graphics_step: 0.25 + +fea_module_parameters: + - type: SGH + material_id: 0 + boundary_conditions: + # Tag X plane + - surface: + type: x_plane + plane_position: 0.0 + type: reflected + + # Tag Y plane + - surface: + type: y_plane + plane_position: 0.0 + type: reflected + + # Tag Z plane + - surface: + type: z_plane + plane_position: 0.0 + type: reflected + + loading_conditions: + # Load radially around 0 0 0 corner + - volume: + type: sphere + radius1: 1.0 + radius2: 2.5 + type: body_force + component_x: -0.00000005 + component_y: -0.00000005 + component_z: -0.00000005 + +materials: + - id: 0 + eos_model: ideal_gas + strength_model: none + elastic_modulus: 10 + poisson_ratio: 0.3 + maximum_limiter: 1 + q1: 2.0 + q2: 4.0 + q1ex: 2.0 + q2ex: 4.0 + eos_global_vars: + - 1.666666666666667 + - 1.0E-14 + - 1.0 + +regions: + - volume: + type: global + material_id: 0 + den: 1.0 + sie: 1.e-10 + + velocity: cartesian + u: 0.0 + v: 0.0 + w: 0.0 + + velocity: cartesian + u: 0.0 + v: 0.0 + w: 0.0 diff --git a/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/force_sgh.cpp b/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/force_sgh.cpp index c3dee5cf9..1e70547f8 100644 --- a/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/force_sgh.cpp +++ b/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/force_sgh.cpp @@ -1,5 +1,5 @@ /********************************************************************************************** - 2020. Triad National Security, LLC. All rights reserved. + � 2020. Triad National Security, LLC. All rights reserved. This program was produced under U.S. Government contract 89233218CNA000001 for Los Alamos National Laboratory (LANL), which is operated by Triad National Security, LLC for the U.S. Department of Energy/National Nuclear Security Administration. All rights in the program are @@ -933,7 +933,7 @@ void FEA_Module_SGH::applied_forces(const DCArrayKokkos& material, applied_force[2] = loading(ilc).z; // loop over dimension for (size_t dim = 0; dim < num_dim; dim++) { - node_force[dim] += applied_force[dim] * (all_initial_node_coords(node_gid, 0) + all_initial_node_coords(node_gid, 1) + all_initial_node_coords(node_gid, 2)) / radius; + node_force[dim] += applied_force[dim] * current_node_coords[dim] / radius; } // end for dim } // end for corner_lid From dd59ac0331e7ecf4588c78737f2d5158e3a84dfc Mon Sep 17 00:00:00 2001 From: Adrian-Diaz <46537160+Adrian-Diaz@users.noreply.github.com> Date: Thu, 18 Jul 2024 15:22:22 -0600 Subject: [PATCH 079/233] ENH: intel mkl build support --- scripts/build-fierro.sh | 18 ++++++++++++++++-- scripts/trilinos-install.sh | 25 ++++++++++++++++++++++++- 2 files changed, 40 insertions(+), 3 deletions(-) diff --git a/scripts/build-fierro.sh b/scripts/build-fierro.sh index 42b60d177..83a555bf8 100755 --- a/scripts/build-fierro.sh +++ b/scripts/build-fierro.sh @@ -7,6 +7,7 @@ show_help() { echo " --build_action=. Default is 'full-app'" echo " --machine=. Default is 'linux'" echo " --build_cores=. Default is set 1" + echo " --intel_mkl=. Default is 'disabled'" echo " --heffte_build_type=. Default is set 'fftw'" echo " --help: Display this help message" echo " " @@ -63,6 +64,7 @@ machine="linux" kokkos_build_type="serial" heffte_build_type="fftw" build_cores="1" +intel_mkl="disabled" # Define arrays of valid options valid_build_action=("full-app" "set-env" "install-trilinos" "install-hdf5" "install-heffte" "install-uncrustify" "fierro") @@ -70,6 +72,7 @@ valid_solver=("all" "explicit" "explicit-evpfft" "explicit-ls-evpfft" "implicit" valid_kokkos_build_types=("serial" "openmp" "pthreads" "cuda" "hip") valid_heffte_build_types=("fftw" "cufft" "rocfft") valid_machines=("darwin" "chicoma" "linux" "mac" "msu") +valid_intel_mkl=("disabled" "enabled") # Parse command line arguments for arg in "$@"; do @@ -114,6 +117,16 @@ for arg in "$@"; do return 1 fi ;; + --intel_mkl=*) + option="${arg#*=}" + if [[ " ${valid_intel_mkl[*]} " == *" $option "* ]]; then + intel_mkl="$option" + else + echo "Error: Invalid --intel_mkl specified." + show_help + return 1 + fi + ;; --heffte_build_type=*) option="${arg#*=}" if [[ " ${valid_heffte_build_types[*]} " == *" $option "* ]]; then @@ -170,6 +183,7 @@ echo "Building based on these argument options:" echo "Build action - ${build_action}" echo "Solver - ${solver}" echo "Kokkos backend - ${kokkos_build_type}" +echo "Intel MKL library - ${intel_mkl}" echo "Machine - ${machine}" if [ "${solver}" = "explicit-evpfft" ] || [ "${solver}" = "explicit-ls-evpfft" ]; then echo "HEFFTE - ${heffte_build_type}" @@ -184,14 +198,14 @@ source setup-env.sh ${machine} ${kokkos_build_type} ${build_cores} # Next, do action based on args if [ "$build_action" = "full-app" ]; then source uncrustify-install.sh - source trilinos-install.sh ${kokkos_build_type} ${machine} + source trilinos-install.sh ${kokkos_build_type} ${machine} ${intel_mkl} if [ "$solver" = "explicit-evpfft" ] || [ "${solver}" = "explicit-ls-evpfft" ]; then source hdf5-install.sh source heffte-install.sh ${heffte_build_type} ${machine} fi source cmake_build.sh ${solver} ${heffte_build_type} ${kokkos_build_type} elif [ "$build_action" = "install-trilinos" ]; then - source trilinos-install.sh ${kokkos_build_type} ${machine} + source trilinos-install.sh ${kokkos_build_type} ${machine} ${intel_mkl} elif [ "$build_action" = "install-hdf5" ]; then source hdf5-install.sh elif [ "$build_action" = "install-heffte" ]; then diff --git a/scripts/trilinos-install.sh b/scripts/trilinos-install.sh index 9c7aad598..7bc7e6768 100644 --- a/scripts/trilinos-install.sh +++ b/scripts/trilinos-install.sh @@ -2,6 +2,7 @@ kokkos_build_type="${1}" machine="${2}" +intel_mkl="${3}" # If all arguments are valid, you can use them in your script as needed echo "Trilinos Kokkos Build Type: $kokkos_build_type" @@ -28,7 +29,9 @@ fi #check if Trilinos library files were installed, install them otherwise. [ -d "${TRILINOS_BUILD_DIR}/lib" ] && echo "Directory ${TRILINOS_BUILD_DIR}/lib exists, assuming successful installation; delete build folder and run build script again if there was an environment error that has been corrected." -if [ ! -d "${TRILINOS_BUILD_DIR}/lib" ] +[ -d "${TRILINOS_BUILD_DIR}/lib64" ] && echo "Directory ${TRILINOS_BUILD_DIR}/lib64 exists, assuming successful installation; delete build folder and run build script again if there was an environment error that has been corrected." + +if [ ! -d "${TRILINOS_BUILD_DIR}/lib" ] && [ ! -d "${TRILINOS_BUILD_DIR}/lib64" ] then echo "Directory Trilinos/build/lib does not exist, compiling Trilinos (this might take a while)...." @@ -113,6 +116,26 @@ ${ADDITIONS[@]} -D CMAKE_INSTALL_PREFIX=${TRILINOS_INSTALL_DIR} ) +# Flags for building with Intel MKL library +INTEL_MKL_ADDITIONS=( +-D TPL_ENABLE_MKL=ON +-D BLAS_LIBRARY_NAMES="libmkl_rt.so" +-D BLAS_LIBRARY_DIRS="$MKLROOT/lib/intel64" +-D LAPACK_LIBRARY_NAMES="libmkl_rt.so" +-D LAPACK_LIBRARY_DIRS="$MKLROOT/lib/intel64" +-D MKL_LIBRARY_DIRS="$MKLROOT/lib/intel64" +-D MKL_LIBRARY_NAMES="mkl_rt" +-D MKL_INCLUDE_DIRS="$MKLROOT/include" +) + +echo "**** Intel MKL = ${intel_mkl} ****" +if [ "$intel_mkl" = "enabled" ]; then + echo "**** assuming MKL installation at $MKLROOT ****" + cmake_options+=( + ${INTEL_MKL_ADDITIONS[@]} + ) +fi + if [ "$kokkos_build_type" = "openmp" ]; then cmake_options+=( ${OPENMP_ADDITIONS[@]} From 472ac0e23576a6d2710c858a5453512216a34ce2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CAdrian-Diaz=E2=80=9D?= <“adriandiaz1117@gmail.com”> Date: Sun, 21 Jul 2024 01:21:23 -0600 Subject: [PATCH 080/233] ENH: graphics dt reset and reduce debug output --- src/Parallel-Solvers/Parallel-Explicit/Explicit_Solver.cpp | 6 +++--- .../Parallel-Explicit/SGH_Solver/src/FEA_Module_SGH.cpp | 7 +++++++ 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/Parallel-Solvers/Parallel-Explicit/Explicit_Solver.cpp b/src/Parallel-Solvers/Parallel-Explicit/Explicit_Solver.cpp index 91c20bb05..99681e149 100644 --- a/src/Parallel-Solvers/Parallel-Explicit/Explicit_Solver.cpp +++ b/src/Parallel-Solvers/Parallel-Explicit/Explicit_Solver.cpp @@ -359,11 +359,11 @@ void Explicit_Solver::run() { } */ - std::cout << " RUNTIME OF CODE ON TASK " << myrank << " is "<< current_cpu-initial_CPU_time << " comms time " + *fos << " Runtime of code is "<< current_cpu-initial_CPU_time << " comms time " << communication_time << " host to dev time " << host2dev_time << " dev to host time " << dev2host_time << std::endl; if(simparam.output_options.timer_output_level == TIMER_VERBOSITY::thorough){ - std::cout << " OUTPUT TIME OF CODE ON TASK " << myrank << " is "<< output_time << std::endl; + *fos << " Output time of code is "<< output_time << std::endl; } //parallel_vtk_writer(); @@ -3384,7 +3384,7 @@ void Explicit_Solver::init_design(){ //create import object using local node indices map and all indices map Tpetra::Import importer(map, all_node_map); - //design_node_densities_distributed->randomize(0.1,1); + design_node_densities_distributed->randomize(0.1,1); //comms to get ghosts all_node_densities_distributed->doImport(*design_node_densities_distributed, importer, Tpetra::INSERT); diff --git a/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/FEA_Module_SGH.cpp b/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/FEA_Module_SGH.cpp index 0d4ee757e..c0492832a 100644 --- a/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/FEA_Module_SGH.cpp +++ b/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/FEA_Module_SGH.cpp @@ -921,6 +921,8 @@ void FEA_Module_SGH::sgh_solve() tiny = dynamic_options.tiny; small = dynamic_options.small; + double cached_pregraphics_dt = fuzz; + size_t num_bdy_nodes = mesh->num_bdy_nodes; size_t cycle; real_t objective_accumulation, global_objective_accumulation; @@ -1170,6 +1172,10 @@ void FEA_Module_SGH::sgh_solve() // loop over the max number of time integration cycles for (cycle = 0; cycle < cycle_stop; cycle++) { + + //save timestep from before graphics output contraction + cached_pregraphics_dt = dt; + // get the step if (num_dim == 2) { get_timestep2D(*mesh, @@ -1825,6 +1831,7 @@ void FEA_Module_SGH::sgh_solve() Explicit_Solver_Pointer_->output_time += comm_time2 - comm_time1; graphics_time = time_value + graphics_dt_ival; + dt = cached_pregraphics_dt; } // end if // end of calculation From a9932ae4dbff3c9fcc6d5393c08633d7722fb17d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CAdrian-Diaz=E2=80=9D?= <“adriandiaz1117@gmail.com”> Date: Sun, 21 Jul 2024 16:11:50 -0600 Subject: [PATCH 081/233] BUG: remove debug statement --- src/Parallel-Solvers/Parallel-Explicit/Explicit_Solver.cpp | 2 +- .../Parallel-Explicit/SGH_Solver/src/FEA_Module_SGH.cpp | 4 ---- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/src/Parallel-Solvers/Parallel-Explicit/Explicit_Solver.cpp b/src/Parallel-Solvers/Parallel-Explicit/Explicit_Solver.cpp index 99681e149..8074bd3ad 100644 --- a/src/Parallel-Solvers/Parallel-Explicit/Explicit_Solver.cpp +++ b/src/Parallel-Solvers/Parallel-Explicit/Explicit_Solver.cpp @@ -3384,7 +3384,7 @@ void Explicit_Solver::init_design(){ //create import object using local node indices map and all indices map Tpetra::Import importer(map, all_node_map); - design_node_densities_distributed->randomize(0.1,1); + //design_node_densities_distributed->randomize(0.1,1); //comms to get ghosts all_node_densities_distributed->doImport(*design_node_densities_distributed, importer, Tpetra::INSERT); diff --git a/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/FEA_Module_SGH.cpp b/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/FEA_Module_SGH.cpp index c0492832a..ee0c361a2 100644 --- a/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/FEA_Module_SGH.cpp +++ b/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/FEA_Module_SGH.cpp @@ -600,10 +600,6 @@ void FEA_Module_SGH::comm_variables(Teuchos::RCP zp) node_densities_distributed->describe(*fos, Teuchos::VERB_EXTREME); *fos << std::endl; std::fflush(stdout); - - // communicate design densities - // create import object using local node indices map and all indices map - Tpetra::Import importer(map, all_node_map); #endif // comms to get ghosts all_node_densities_distributed->doImport(*test_node_densities_distributed, *importer, Tpetra::INSERT); From 640d2905db4e8357b41b79a27dce3dcdf514f4c8 Mon Sep 17 00:00:00 2001 From: Adrian-Diaz <46537160+Adrian-Diaz@users.noreply.github.com> Date: Wed, 24 Jul 2024 14:00:11 -0600 Subject: [PATCH 082/233] STYLE: update yaml example files and error handling --- .../example_sedov_sgh_opt.yaml | 19 +++++++++++-------- .../example_sgh_opt_region.yaml | 3 +++ .../example_sgh_opt_restart.yaml | 4 ++-- .../Optimization_Options.h | 4 ++++ 4 files changed, 20 insertions(+), 10 deletions(-) diff --git a/src/Parallel-Solvers/Parallel-Explicit/Example_Yaml_Scripts/example_sedov_sgh_opt.yaml b/src/Parallel-Solvers/Parallel-Explicit/Example_Yaml_Scripts/example_sedov_sgh_opt.yaml index 000c0b724..6ffd94127 100644 --- a/src/Parallel-Solvers/Parallel-Explicit/Example_Yaml_Scripts/example_sedov_sgh_opt.yaml +++ b/src/Parallel-Solvers/Parallel-Explicit/Example_Yaml_Scripts/example_sedov_sgh_opt.yaml @@ -105,14 +105,17 @@ regions: optimization_options: optimization_process: topology_optimization optimization_objective: minimize_kinetic_energy - objective_regions: - - type: box - x1: 0.4 - x2: 0.8 - y1: 0.4 - y2: 0.8 - z1: 0.4 - z2: 0.8 + use_solve_checkpoints: true + num_solve_checkpoints : 10 + disable_forward_solve_output: true + optimization_output_freq: 1 + rol_params: + subproblem_algorithm: line_search + initial_constraint_penalty: 1.e-2 + step_tolerance: 1.e-3 + gradient_tolerance: 1.e-3 + constraint_tolerance: 1.e-3 + iteration_limit: 20 density_epsilon: 0.1 variable_outer_shell: true constraints: diff --git a/src/Parallel-Solvers/Parallel-Explicit/Example_Yaml_Scripts/example_sgh_opt_region.yaml b/src/Parallel-Solvers/Parallel-Explicit/Example_Yaml_Scripts/example_sgh_opt_region.yaml index c6c56ce20..1f457dfdb 100644 --- a/src/Parallel-Solvers/Parallel-Explicit/Example_Yaml_Scripts/example_sgh_opt_region.yaml +++ b/src/Parallel-Solvers/Parallel-Explicit/Example_Yaml_Scripts/example_sgh_opt_region.yaml @@ -106,6 +106,9 @@ optimization_options: optimization_process: topology_optimization optimization_objective: minimize_kinetic_energy use_solve_checkpoints: true + num_solve_checkpoints : 10 + disable_forward_solve_output: true + optimization_output_freq: 1 rol_params: subproblem_algorithm: line_search initial_constraint_penalty: 1.e-2 diff --git a/src/Parallel-Solvers/Parallel-Explicit/Example_Yaml_Scripts/example_sgh_opt_restart.yaml b/src/Parallel-Solvers/Parallel-Explicit/Example_Yaml_Scripts/example_sgh_opt_restart.yaml index 7d139f46d..9f5b45796 100644 --- a/src/Parallel-Solvers/Parallel-Explicit/Example_Yaml_Scripts/example_sgh_opt_restart.yaml +++ b/src/Parallel-Solvers/Parallel-Explicit/Example_Yaml_Scripts/example_sgh_opt_restart.yaml @@ -108,10 +108,10 @@ regions: optimization_options: optimization_process: topology_optimization optimization_objective: minimize_kinetic_energy - use_gradient_tally: true use_solve_checkpoints: true + num_solve_checkpoints : 10 disable_forward_solve_output: true - optimization_output_freq: 20 + optimization_output_freq: 1 optimization_parameters_xml_file: false xml_parameters_file_name: "optimization_parameters.xml" rol_params: diff --git a/src/Parallel-Solvers/Simulation_Parameters/Optimization_Options.h b/src/Parallel-Solvers/Simulation_Parameters/Optimization_Options.h index 3d65fbfb5..fa4b259ea 100644 --- a/src/Parallel-Solvers/Simulation_Parameters/Optimization_Options.h +++ b/src/Parallel-Solvers/Simulation_Parameters/Optimization_Options.h @@ -175,6 +175,10 @@ struct Optimization_Options: Yaml::DerivedFields { if(use_solve_checkpoints){ use_gradient_tally = true; } + + if(retain_outer_shell&&variable_outer_shell){ + throw Yaml::ConfigurationException("Cannot specify both retain_outer_shell and variable_outer_shell as true"); + } } }; YAML_ADD_REQUIRED_FIELDS_FOR(Optimization_Options, From 1af7f562fa1390ce1ad98f63f7086cff6d17e186 Mon Sep 17 00:00:00 2001 From: Nathaniel Morgan Date: Thu, 25 Jul 2024 16:37:05 -0600 Subject: [PATCH 083/233] starting material centric implementation --- .../Solvers/SGH_solver/include/sgh_solver.h | 82 +- .../src/Solvers/SGH_solver/src/energy_sgh.cpp | 30 +- .../src/Solvers/SGH_solver/src/force_sgh.cpp | 143 +- .../src/Solvers/SGH_solver/src/properties.cpp | 13 +- .../src/Solvers/SGH_solver/src/sgh_solve.cpp | 540 ++++--- .../SGH_solver/src/time_integration.cpp | 29 +- single-node-refactor/src/common/io_utils.h | 24 +- single-node-refactor/src/common/material.h | 6 - single-node-refactor/src/common/mesh.h | 32 +- single-node-refactor/src/common/state.h | 326 +++- single-node-refactor/src/driver.h | 1436 +++++++++++------ single-node-refactor/src/input/parse_yaml.cpp | 35 +- .../src/material_models/eos/gamma_law_eos.h | 10 +- .../src/material_models/eos/no_eos.h | 4 +- .../material_models/eos/user_defined_eos.h | 12 +- .../src/material_models/eos/void_eos.h | 8 +- .../material_models/strength/no_strength.h | 6 +- .../strength/user_defined_strength.h | 4 +- 18 files changed, 1839 insertions(+), 901 deletions(-) diff --git a/single-node-refactor/src/Solvers/SGH_solver/include/sgh_solver.h b/single-node-refactor/src/Solvers/SGH_solver/include/sgh_solver.h index 4c93c4ff7..bb4618ec5 100644 --- a/single-node-refactor/src/Solvers/SGH_solver/include/sgh_solver.h +++ b/single-node-refactor/src/Solvers/SGH_solver/include/sgh_solver.h @@ -85,10 +85,7 @@ class SGH : public Solver Material_t& Materials, BoundaryCondition_t& Boundary, mesh_t& mesh, - node_t& node, - MaterialPoint_t& MaterialPoints, - GaussPoint_t& GaussPoints, - corner_t& corner) const override + State_t& State) const override { } @@ -104,10 +101,7 @@ class SGH : public Solver Material_t& Materials, BoundaryCondition_t& Boundary, mesh_t& mesh, - node_t& node, - MaterialPoint_t& MaterialPoints, - GaussPoint_t& GaussPoints, - corner_t& corner) override; + STate_t& State) override; ///////////////////////////////////////////////////////////////////////////// /// @@ -147,19 +141,26 @@ class SGH : public Solver // **** Functions defined in energy_sgh.cpp **** // void update_energy( - double rk_alpha, - double dt, + const double rk_alpha, + const double dt, const mesh_t& mesh, const DCArrayKokkos& node_vel, const DCArrayKokkos& node_coords, - DCArrayKokkos& MaterialPoints_sie, + const DCArrayKokkos& MaterialPoints_sie, const DCArrayKokkos& MaterialPoints_mass, - const DCArrayKokkos& corner_force) const; + const DCArrayKokkos& MaterialCorners_force, + const corners_in_mat_t corners_in_mat_elem, + const DCArrayKokkos& MaterialToMeshMaps_elem, + const size_t num_mat_elems) const; // **** Functions defined in force_sgh.cpp **** // void get_force( const Material_t& Materials, const mesh_t& mesh, + const DCArrayKokkos& GaussPoints_vol, + const DCArrayKokkos& GaussPoints_div, + const DCArrayKokkos& GaussPoints_eroded, + const DCArrayKokkos& corner_force, const DCArrayKokkos& node_coords, const DCArrayKokkos& node_vel, const DCArrayKokkos& MaterialPoints_den, @@ -167,20 +168,23 @@ class SGH : public Solver const DCArrayKokkos& MaterialPoints_pres, const DCArrayKokkos& MaterialPoints_stress, const DCArrayKokkos& MaterialPoints_sspd, - const DCArrayKokkos& GaussPoints_vol, - const DCArrayKokkos& GaussPoints_div, - const DCArrayKokkos& GaussPoints_mat_id, - const DCArrayKokkos& MaterialPoints_eroded, - const DCArrayKokkos& corner_force, + const DCArrayKokkos& MaterialPoints_statev, + const DCArrayKokkos& MaterialCorners_force, + const corners_in_mat_t + const DCArrayKokkos& MaterialToMeshMaps_elem, + const size_t num_mat_elems, + const size_t mat_id, const double fuzz, const double small, - const DCArrayKokkos& MaterialPoints_statev, const double dt, const double rk_alpha) const; void get_force_2D( const Material_t& Materials, const mesh_t& mesh, + const DCArrayKokkos& GaussPoints_vol, + const DCArrayKokkos& GaussPoints_div, + const DCArrayKokkos& corner_force, const DCArrayKokkos& node_coords, const DCArrayKokkos& node_vel, const DCArrayKokkos& MaterialPoints_den, @@ -188,13 +192,14 @@ class SGH : public Solver const DCArrayKokkos& MaterialPoints_pres, const DCArrayKokkos& MaterialPoints_stress, const DCArrayKokkos& MaterialPoints_sspd, - const DCArrayKokkos& GaussPoints_vol, - const DCArrayKokkos& GaussPoints_div, - const DCArrayKokkos& GaussPoints_mat_id, - DCArrayKokkos& corner_force, + const DCArrayKokkos& MaterialPoints_statev, + const DCArrayKokkos& MaterialCorners_force, + const corners_in_mat_t + const DCArrayKokkos& MaterialToMeshMaps_elem, + const size_t num_mat_elems, + const size_t mat_id, const double fuzz, const double small, - const DCArrayKokkos& MaterialPoints_statev, const double dt, const double rk_alpha) const; @@ -270,7 +275,7 @@ class SGH : public Solver const DCArrayKokkos& MaterialPoints_mass, const DCArrayKokkos& GaussPoints_mat_id, const DCArrayKokkos& MaterialPoints_statev, - const DCArrayKokkos& MaterialPoints_eroded, + const DCArrayKokkos& GaussPoints_eroded, const double dt, const double rk_alpha) const; @@ -300,7 +305,8 @@ class SGH : public Solver DCArrayKokkos& MaterialPoints_stress, const size_t num_dims, const size_t num_elems, - const size_t num_nodes) const; + const size_t num_nodes, + const size_t num_mat_points) const; void get_timestep( mesh_t& mesh, @@ -308,6 +314,8 @@ class SGH : public Solver DCArrayKokkos& node_vel, DCArrayKokkos& MaterialPoints_sspd, DCArrayKokkos& GaussPoints_vol, + DCArrayKokkos& MaterialToMeshMaps_elem, + size_t num_material_elems, double time_value, const double graphics_time, const double time_final, @@ -323,6 +331,8 @@ class SGH : public Solver DCArrayKokkos& node_vel, DCArrayKokkos& MaterialPoints_sspd, DCArrayKokkos& GaussPoints_vol, + DCArrayKokkos& MaterialToMeshMaps_elem, + size_t num_material_elems, double time_value, const double graphics_time, const double time_final, @@ -364,4 +374,26 @@ class SGH : public Solver const double rk_alpha); }; +calc_extensive_node_mass(CArrayKokkos& node_extensive_mass + CArrayKokkos& node_coords, + CArrayKokkos& node_mass, + double num_dims, + double num_nodes); + +calc_node_areal_mass(const mesh_t& mesh, + const DCArrayKokkos& node_coords, + CArrayKokkos node_extensive_mass, + double tiny); + +double sum_domain_internal_energy(DCArrayKokkos& MaterialPoints_mass, + DCArrayKokkos& MaterialPoints_sie, + size_t num_mat_points, + double &IE_sum); + +double sum_domain_kinetic_energy(DCArrayKokkos& node_vel, + DCArrayKokkos& node_coords, + DCArrayKokkos& node_mass, + mest_t& mesh); + + #endif // end HEADER_H diff --git a/single-node-refactor/src/Solvers/SGH_solver/src/energy_sgh.cpp b/single-node-refactor/src/Solvers/SGH_solver/src/energy_sgh.cpp index bb28f30e6..50422eecb 100644 --- a/single-node-refactor/src/Solvers/SGH_solver/src/energy_sgh.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver/src/energy_sgh.cpp @@ -50,17 +50,25 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /// \param A view into the corner force data /// ///////////////////////////////////////////////////////////////////////////// -void SGH::update_energy(double rk_alpha, - double dt, +void SGH::update_energy(const double rk_alpha, + const double dt, const mesh_t& mesh, const DCArrayKokkos& node_vel, const DCArrayKokkos& node_coords, - DCArrayKokkos& MaterialPoints_sie, + const DCArrayKokkos& MaterialPoints_sie, const DCArrayKokkos& MaterialPoints_mass, - const DCArrayKokkos& corner_force) const + const DCArrayKokkos& MaterialCorners_force, + const corners_in_mat_t corners_in_mat_elem, + const DCArrayKokkos& MaterialToMeshMaps_elem, + const size_t num_mat_elems + ) const { // loop over all the elements in the mesh - FOR_ALL(elem_gid, 0, mesh.num_elems, { +FOR_ALL(mat_elem_lid, 0, num_mat_elems, { + + // get elem gid + size_t elem_gid = State.MaterialToMeshMaps_elem(mat_elem_lid); + double MaterialPoints_power = 0.0; // --- tally the contribution from each corner to the element --- @@ -73,7 +81,11 @@ void SGH::update_energy(double rk_alpha, size_t node_gid = mesh.nodes_in_elem(elem_gid, node_lid); // Get the corner global id for the local corner id - size_t corner_gid = mesh.corners_in_elem(elem_gid, corner_lid); + //size_t corner_gid = mesh.corners_in_elem(elem_gid, corner_lid); + + // Get the material corner lid + size_t mat_corner_lid = corners_in_mat_elem(mat_elem_lid, corner_lid); + double node_radius = 1; if (mesh.num_dims == 2) { @@ -83,13 +95,13 @@ void SGH::update_energy(double rk_alpha, // calculate the Power=F dot V for this corner for (size_t dim = 0; dim < mesh.num_dims; dim++) { double half_vel = (node_vel(1, node_gid, dim) + node_vel(0, node_gid, dim)) * 0.5; - MaterialPoints_power += corner_force(corner_gid, dim) * node_radius * half_vel; + MaterialPoints_power += MaterialCorners_force(mat_corner_lid, dim) * node_radius * half_vel; } // end for dim } // end for node_lid // update the specific energy - MaterialPoints_sie(1, elem_gid) = MaterialPoints_sie(0, elem_gid) - - rk_alpha * dt / MaterialPoints_mass(elem_gid) * MaterialPoints_power; + MaterialPoints_sie(1, mat_elem_lid) = MaterialPoints_sie(0, mat_elem_lid) - + rk_alpha * dt / MaterialPoints_mass(mat_elem_lid) * MaterialPoints_power; }); // end parallel loop over the elements return; diff --git a/single-node-refactor/src/Solvers/SGH_solver/src/force_sgh.cpp b/single-node-refactor/src/Solvers/SGH_solver/src/force_sgh.cpp index 6faed136e..736acb4ea 100644 --- a/single-node-refactor/src/Solvers/SGH_solver/src/force_sgh.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver/src/force_sgh.cpp @@ -60,27 +60,35 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /// ///////////////////////////////////////////////////////////////////////////// void SGH::get_force(const Material_t& Materials, - const mesh_t& mesh, - const DCArrayKokkos& node_coords, - const DCArrayKokkos& node_vel, - const DCArrayKokkos& MaterialPoints_den, - const DCArrayKokkos& MaterialPoints_sie, - const DCArrayKokkos& MaterialPoints_pres, - const DCArrayKokkos& MaterialPoints_stress, - const DCArrayKokkos& MaterialPoints_sspd, - const DCArrayKokkos& GaussPoints_vol, - const DCArrayKokkos& GaussPoints_div, - const DCArrayKokkos& GaussPoints_mat_id, - const DCArrayKokkos& GaussPoints_eroded, - const DCArrayKokkos& corner_force, - const double fuzz, - const double small, - const DCArrayKokkos& MaterialPoints_statev, - const double dt, - const double rk_alpha) const + const mesh_t& mesh, + const DCArrayKokkos& GaussPoints_vol, + const DCArrayKokkos& GaussPoints_div, + const DCArrayKokkos& GaussPoints_eroded, + const DCArrayKokkos& corner_force, + const DCArrayKokkos& node_coords, + const DCArrayKokkos& node_vel, + const DCArrayKokkos& MaterialPoints_den, + const DCArrayKokkos& MaterialPoints_sie, + const DCArrayKokkos& MaterialPoints_pres, + const DCArrayKokkos& MaterialPoints_stress, + const DCArrayKokkos& MaterialPoints_sspd, + const DCArrayKokkos& MaterialPoints_statev, + const DCArrayKokkos& MaterialCorners_force, + const corners_in_mat_t corners_in_mat_elem, + const DCArrayKokkos& MaterialToMeshMaps_elem, + const size_t num_mat_elems, + const size_t mat_id, + const double fuzz, + const double small, + const double dt, + const double rk_alpha) const { // --- calculate the forces acting on the nodes from the element --- - FOR_ALL(elem_gid, 0, mesh.num_elems, { + FOR_ALL(mat_elem_lid, 0, num_mat_elems, { + + // get elem gid + size_t elem_gid = State.MaterialToMeshMaps_elem(mat_elem_lid); + const size_t num_dims = 3; const size_t num_nodes_in_elem = 8; @@ -118,11 +126,9 @@ void SGH::get_force(const Material_t& Materials, // element volume double vol = GaussPoints_vol(elem_gid); - // the id for the material in this element - size_t mat_id = GaussPoints_mat_id(elem_gid); // create a view of the stress_matrix - ViewCArrayKokkos stress(&MaterialPoints_stress(1, elem_gid, 0, 0), 3, 3); + ViewCArrayKokkos stress(&MaterialPoints_stress(1, mat_elem_lid, 0, 0), 3, 3); // cut out the node_gids for this element ViewCArrayKokkos elem_node_gids(&mesh.nodes_in_elem(elem_gid, 0), 8); @@ -172,7 +178,7 @@ void SGH::get_force(const Material_t& Materials, // add the pressure if a decoupled model is used if (Materials.MaterialEnums(mat_id).EOSType == model::decoupledEOSType) { for (int i = 0; i < num_dims; i++) { - tau(i, i) -= MaterialPoints_pres(elem_gid); + tau(i, i) -= MaterialPoints_pres(mat_elem_lid); } // end for } @@ -242,13 +248,13 @@ void SGH::get_force(const Material_t& Materials, // cell divergence indicates compression or expansions if (div < 0) { // element in compression - muc(node_lid) = MaterialPoints_den(elem_gid) * - (Materials.MaterialFunctions(mat_id).q1 * MaterialPoints_sspd(elem_gid) + + muc(node_lid) = MaterialPoints_den(mat_elem_lid) * + (Materials.MaterialFunctions(mat_id).q1 * MaterialPoints_sspd(mat_elem_lid) + Materials.MaterialFunctions(mat_id).q2 * mag_vel); } else{ // element in expansion - muc(node_lid) = MaterialPoints_den(elem_gid) * - (Materials.MaterialFunctions(mat_id).q1ex * MaterialPoints_sspd(elem_gid) + + muc(node_lid) = MaterialPoints_den(mat_elem_lid) * + (Materials.MaterialFunctions(mat_id).q1ex * MaterialPoints_sspd(mat_elem_lid) + Materials.MaterialFunctions(mat_id).q2ex * mag_vel); } // end if on divergence sign @@ -336,7 +342,7 @@ void SGH::get_force(const Material_t& Materials, double omega = 20.0; // 20.0; // weighting factor on Mach number double third = 1.0 / 3.0; double c_length = pow(vol, third); // characteristic length - double alpha = fmin(1.0, omega * (c_length * fabs(div)) / (MaterialPoints_sspd(elem_gid) + fuzz) ); + double alpha = fmin(1.0, omega * (c_length * fabs(div)) / (MaterialPoints_sspd(mat_elem_lid) + fuzz) ); // use Mach based detector with standard shock detector @@ -361,8 +367,10 @@ void SGH::get_force(const Material_t& Materials, // Get node gid size_t node_gid = mesh.nodes_in_elem(elem_gid, node_lid); - // loop over dimension + // Get the material corner lid + size_t mat_corner_lid = corners_in_mat_elem(mat_elem_lid, corner_lid); + // loop over dimensions and calc corner forces if (GaussPoints_eroded(elem_gid) == true) { // material(mat_id).blank_mat_id) for (int dim = 0; dim < num_dims; dim++) { corner_force(corner_gid, dim) = 0.0; @@ -370,13 +378,18 @@ void SGH::get_force(const Material_t& Materials, } else{ for (int dim = 0; dim < num_dims; dim++) { - corner_force(corner_gid, dim) = + + double force_component = area_normal(node_lid, 0) * tau(0, dim) + area_normal(node_lid, 1) * tau(1, dim) + area_normal(node_lid, 2) * tau(2, dim) + phi * muc(node_lid) * (vel_star(dim) - node_vel(1, node_gid, dim)); + + MaterialCorners_force(mat_corner_lid, dim) = force_component; + corner_force(corner_gid, dim) += force_component; // tally all forces to the corner } // end loop over dimension - } + } // end if + } // end for loop over nodes in elem // --- Update Stress --- @@ -389,12 +402,12 @@ void SGH::get_force(const Material_t& Materials, // --- call strength model --- Materials.MaterialFunctions(mat_id).calc_stress(MaterialPoints_pres, MaterialPoints_stress, - elem_gid, + mat_elem_gid, mat_id, MaterialPoints_statev, MaterialPoints_sspd, - MaterialPoints_den(elem_gid), - MaterialPoints_sie(elem_gid), + MaterialPoints_den(mat_elem_lid), + MaterialPoints_sie(mat_elem_lid), vel_grad, elem_node_gids, node_coords, @@ -434,26 +447,37 @@ void SGH::get_force(const Material_t& Materials, /// ///////////////////////////////////////////////////////////////////////////// void SGH::get_force_2D(const Material_t& Materials, - const mesh_t& mesh, - const DCArrayKokkos& node_coords, - const DCArrayKokkos& node_vel, - const DCArrayKokkos& MaterialPoints_den, - const DCArrayKokkos& MaterialPoints_sie, - const DCArrayKokkos& MaterialPoints_pres, - const DCArrayKokkos& MaterialPoints_stress, - const DCArrayKokkos& MaterialPoints_sspd, - const DCArrayKokkos& GaussPoints_vol, - const DCArrayKokkos& GaussPoints_div, - const DCArrayKokkos& GaussPoints_mat_id, - DCArrayKokkos& corner_force, - const double fuzz, - const double small, - const DCArrayKokkos& MaterialPoints_statev, - const double dt, - const double rk_alpha) const + const mesh_t& mesh, + const DCArrayKokkos& GaussPoints_vol, + const DCArrayKokkos& GaussPoints_div, + const DCArrayKokkos& GaussPoints_mat_id, + const DCArrayKokkos& corner_force, + const DCArrayKokkos& node_coords, + const DCArrayKokkos& node_vel, + const DCArrayKokkos& MaterialPoints_den, + const DCArrayKokkos& MaterialPoints_sie, + const DCArrayKokkos& MaterialPoints_pres, + const DCArrayKokkos& MaterialPoints_stress, + const DCArrayKokkos& MaterialPoints_sspd, + const DCArrayKokkos& MaterialPoints_statev, + const DCArrayKokkos& MaterialCorners_force, + const corners_in_mat_t corners_in_mat_elem, + const DCArrayKokkos& MaterialToMeshMaps_elem, + const size_t num_mat_elems, + const size_t mat_id, + const double fuzz, + const double small, + const double dt, + const double rk_alpha) const { // --- calculate the forces acting on the nodes from the element --- - FOR_ALL_CLASS(elem_gid, 0, mesh.num_elems, { + FOR_ALL(mat_elem_lid, 0, num_mat_elems, { + + // get mesh elem gid + size_t elem_gid = State.MaterialToMeshMaps_elem(mat_elem_lid); + + //size_t guass_gid = elem_gid; // 1 gauss point per element + const size_t num_dims = 2; const size_t num_nodes_in_elem = 4; @@ -489,10 +513,10 @@ void SGH::get_force_2D(const Material_t& Materials, ViewCArrayKokkos vel_grad(vel_grad_array, 3, 3); // create a view of the stress_matrix - ViewCArrayKokkos stress(&MaterialPoints_stress(1, elem_gid, 0, 0), 3, 3); + ViewCArrayKokkos stress(&MaterialPoints_stress(1, mat_elem_lid, 0, 0), 3, 3); // cut out the node_gids for this element - ViewCArrayKokkos elem_node_gids(&mesh.nodes_in_elem(elem_gid, 0), 4); + ViewCArrayKokkos elem_node_gids(&mesh.nodes_in_elem(mat_elem_lid, 0), 4); // get the B matrix which are the OUTWARD corner area normals geometry::get_bmatrix2D(area_normal, @@ -546,7 +570,7 @@ void SGH::get_force_2D(const Material_t& Materials, // add the pressure for (int i = 0; i < 3; i++) { - tau(i, i) -= MaterialPoints_pres(elem_gid); + tau(i, i) -= MaterialPoints_pres(mat_elem_lid); } // end for // ---- Multidirectional Approximate Riemann solver (MARS) ---- @@ -611,15 +635,14 @@ void SGH::get_force_2D(const Material_t& Materials, } // end if mag_vel // cell divergence indicates compression or expansions - size_t mat_id = GaussPoints_mat_id(elem_gid); if (div < 0) { // element in compression - muc(node_lid) = MaterialPoints_den(elem_gid) * - (Materials.MaterialFunctions(mat_id).q1 * MaterialPoints_sspd(elem_gid) + + muc(node_lid) = MaterialPoints_den(mat_elem_lid) * + (Materials.MaterialFunctions(mat_id).q1 * MaterialPoints_sspd(mat_elem_lid) + Materials.MaterialFunctions(mat_id).q2 * mag_vel); } else{ // element in expansion - muc(node_lid) = MaterialPoints_den(elem_gid) * - (Materials.MaterialFunctions(mat_id).q1ex * MaterialPoints_sspd(elem_gid) + + muc(node_lid) = MaterialPoints_den(mat_elem_lid) * + (Materials.MaterialFunctions(mat_id).q1ex * MaterialPoints_sspd(mat_elem_lid) + Materials.MaterialFunctions(mat_id).q2ex * mag_vel); } // end if on divergence sign diff --git a/single-node-refactor/src/Solvers/SGH_solver/src/properties.cpp b/single-node-refactor/src/Solvers/SGH_solver/src/properties.cpp index 1a748ab08..8fd15298a 100644 --- a/single-node-refactor/src/Solvers/SGH_solver/src/properties.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver/src/properties.cpp @@ -75,7 +75,12 @@ void SGH::update_state(const Material_t& Materials, const double rk_alpha) const { // loop over all the elements in the mesh - FOR_ALL(elem_gid, 0, mesh.num_elems, { + FOR_ALL(mat_elem_lid, 0, num_mat_elems, { + + // get elem gid + size_t elem_gid = MaterialToMeshMaps_elem(mat_elem_lid); + + const size_t num_dims = mesh.num_dims; const size_t num_nodes_in_elem = mesh.num_nodes_in_elem; @@ -83,7 +88,7 @@ void SGH::update_state(const Material_t& Materials, ViewCArrayKokkos elem_node_gids(&mesh.nodes_in_elem(elem_gid, 0), num_nodes_in_elem); // --- Density --- - MaterialPoints_den(elem_gid) = MaterialPoints_mass(elem_gid) / GaussPoints_vol(elem_gid); + MaterialPoints_den(mat_elem_lid) = MaterialPoints_mass(mat_elem_lid) / GaussPoints_vol(elem_gid); size_t mat_id = GaussPoints_mat_id(elem_gid); @@ -94,7 +99,7 @@ void SGH::update_state(const Material_t& Materials, ViewCArrayKokkos elem_node_gids(&mesh.nodes_in_elem(elem_gid, 0), num_nodes_in_elem); // --- Density --- - MaterialPoints_den(elem_gid) = MaterialPoints_mass(elem_gid) / GaussPoints_vol(elem_gid); + MaterialPoints_den(mat_elem_lid) = MaterialPoints_mass(mat_elem_lid) / GaussPoints_vol(elem_gid); // corner area normals double area_array[24]; @@ -119,7 +124,7 @@ void SGH::update_state(const Material_t& Materials, Materials.MaterialFunctions(mat_id).calc_stress( MaterialPoints_pres, MaterialPoints_stress, - elem_gid, + mat_elem_lid, mat_id, MaterialPoints_statev, MaterialPoints_sspd, diff --git a/single-node-refactor/src/Solvers/SGH_solver/src/sgh_solve.cpp b/single-node-refactor/src/Solvers/SGH_solver/src/sgh_solve.cpp index 79a8d3acf..d76a7879c 100644 --- a/single-node-refactor/src/Solvers/SGH_solver/src/sgh_solve.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver/src/sgh_solve.cpp @@ -1,5 +1,5 @@ /********************************************************************************************** -� 2020. Triad National Security, LLC. All rights reserved. +© 2020. Triad National Security, LLC. All rights reserved. This program was produced under U.S. Government contract 89233218CNA000001 for Los Alamos National Laboratory (LANL), which is operated by Triad National Security, LLC for the U.S. Department of Energy/National Nuclear Security Administration. All rights in the program are @@ -50,10 +50,7 @@ void SGH::execute(SimulationParameters_t& SimulationParamaters, Material_t& Materials, BoundaryCondition_t& BoundaryConditions, mesh_t& mesh, - node_t& node, - MaterialPoint_t& MaterialPoints, - GaussPoint_t& GaussPoints, - corner_t& corner) + State_t& State) { std::cout << "In execute function in sgh solver" << std::endl; @@ -101,47 +98,31 @@ void SGH::execute(SimulationParameters_t& SimulationParamaters, double KE_t0 = 0.0; double TE_t0 = 0.0; - double IE_sum = 0.0; - double KE_sum = 0.0; - - double IE_loc_sum = 0.0; - double KE_loc_sum = 0.0; - double cached_pregraphics_dt = fuzz; - // save the nodal mass - FOR_ALL(node_gid, 0, mesh.num_nodes, { - double radius = 1.0; - if (mesh.num_dims == 2) { - radius = node.coords(1, node_gid, 1); - } - node_extensive_mass(node_gid) = node.mass(node_gid) * radius; - }); // end parallel for + // calculate the extensive node mass, its key to 2D + calc_extensive_node_mass(node_extensive_mass + State.node.coords, + State.node.mass, + mesh.num_dims, + mesh.num_nodes) + // extensive IE - REDUCE_SUM(elem_gid, 0, mesh.num_elems, IE_loc_sum, { - IE_loc_sum += MaterialPoints.mass(elem_gid) * MaterialPoints.sie(1, elem_gid); - }, IE_sum); - IE_t0 = IE_sum; + for(int mat_id=0; mat_id tiny) { - node.mass(node_gid) = node_extensive_mass(node_gid) / node.coords(1, node_gid, 1); - } - }); // end parallel for over node_gid - Kokkos::fence(); - - FOR_ALL(node_bdy_gid, 0, mesh.num_bdy_nodes, { - size_t node_gid = mesh.bdy_nodes(node_bdy_gid); - - if (node.coords(1, node_gid, 1) < tiny) { - // node is on the axis - - for (size_t node_lid = 0; node_lid < mesh.num_nodes_in_node(node_gid); node_lid++) { - size_t node_neighbor_gid = mesh.nodes_in_node(node_gid, node_lid); - - // if the node is off the axis, use it's areal mass on the boundary - if (node.coords(1, node_neighbor_gid, 1) > tiny) { - node.mass(node_gid) = fmax(node.mass(node_gid), node.mass(node_neighbor_gid) / 2.0); - } - } // end for over neighboring nodes - } // end if - }); // end parallel for over elem_gid + calc_nodal_area_mass(mesh, State.node_coords, node_extensive_mass, tiny); + } // end of if 2D-RZ + + } // end of RK loop // increment the time @@ -419,6 +436,7 @@ void SGH::execute(SimulationParameters_t& SimulationParamaters, if (time_value >= time_final) { break; } + } // end for cycle loop auto time_2 = std::chrono::high_resolution_clock::now(); @@ -431,40 +449,28 @@ void SGH::execute(SimulationParameters_t& SimulationParamaters, double KE_tend = 0.0; double TE_tend = 0.0; - IE_loc_sum = 0.0; - KE_loc_sum = 0.0; - IE_sum = 0.0; - KE_sum = 0.0; - // extensive IE - REDUCE_SUM(elem_gid, 0, mesh.num_elems, IE_loc_sum, { - IE_loc_sum += MaterialPoints.mass(elem_gid) * MaterialPoints.sie(1, elem_gid); - }, IE_sum); - IE_tend = IE_sum; + for(int mat_id=0; mat_id tensor) double abs_max_val = fmax(fabs(eig1), fabs(eig2)); return abs_max_val; } // end 2D max eignen value + + +void calc_extensive_node_mass(CArrayKokkos& node_extensive_mass + CArrayKokkos& node_coords, + CArrayKokkos& node_mass, + double num_dims, + double num_nodes){ + // save the nodal mass + FOR_ALL(node_gid, 0, num_nodes, { + + double radius = 1.0; + + if (num_dims == 2) { + radius = node_coords(1, node_gid, 1); + } + + node_extensive_mass(node_gid) = node_mass(node_gid) * radius; + }); // end parallel for + +} // end function + +// a function to tally the internal energy +double sum_domain_internal_energy(DCArrayKokkos& MaterialPoints_mass, + DCArrayKokkos& MaterialPoints_sie, + size_t num_mat_points, + double &IE_sum){ + + double IE_sum = 0; + double IE_loc_sum; + + // loop over the material points and tally IE + REDUCE_SUM(matpt_lid, 0, num_matpts, IE_loc_sum, { + IE_loc_sum += MaterialPoints_mass(matpt_lid) * MaterialPoints_sie(matpt_lid); + }, IE_sum); + + return IE_Sum; + +} // end function + +// a function to tally the kinetic energy +double sum_domain_kinetic_energy(DCArrayKokkos& node_vel, + DCArrayKokkos& node_coords, + DCArrayKokkos& node_mass, + mest_t& mesh){ + // extensive KE + double KE_sum = 0; + double KE_loc_sum; + + REDUCE_SUM(node_gid, 0, mesh.num_nodes, KE_loc_sum, { + double ke = 0; + + for (size_t dim = 0; dim < mesh.num_dims; dim++) { + ke += node_vel(1, node_gid, dim) * node_vel(1, node_gid, dim); // 1/2 at end + } // end for + + if (mesh.num_dims == 2) { + KE_loc_sum += node_mass(node_gid) * node_coords(1, node_gid, 1) * ke; + } + else{ + KE_loc_sum += node_mass(node_gid) * ke; + } + }, KE_sum); + Kokkos::fence(); + + return 0.5*KE_sum; +} // end function + + +// a function to calculate the 2D-RZ areal mass (rho A = m/R) +// for R=0, it is interpolated from off-axis +void calc_node_areal_mass(const mesh_t& mesh, + const DCArrayKokkos& node_coords, + CArrayKokkos node_extensive_mass, + double tiny){ + + // calculate the nodal areal mass + FOR_ALL(node_gid, 0, mesh.num_nodes, { + node.mass(node_gid) = 0.0; + + if (node.coords(1, node_gid, 1) > tiny) { + node.mass(node_gid) = node_extensive_mass(node_gid) / node.coords(1, node_gid, 1); + } + }); // end parallel for over node_gid + Kokkos::fence(); + + // calculate the boundary areal mass + FOR_ALL(node_bdy_gid, 0, mesh.num_bdy_nodes, { + size_t node_gid = mesh.bdy_nodes(node_bdy_gid); + + if (node.coords(1, node_gid, 1) < tiny) { + // node is on the axis + + for (size_t node_lid = 0; node_lid < mesh.num_nodes_in_node(node_gid); node_lid++) { + size_t node_neighbor_gid = mesh.nodes_in_node(node_gid, node_lid); + + // if the node is off the axis, use it's areal mass on the boundary + if (node.coords(1, node_neighbor_gid, 1) > tiny) { + node.mass(node_gid) = fmax(node.mass(node_gid), node.mass(node_neighbor_gid) / 2.0); + } + } // end for over neighboring nodes + } // end if + }); // end parallel for over elem_gid + + return; + +}// end function \ No newline at end of file diff --git a/single-node-refactor/src/Solvers/SGH_solver/src/time_integration.cpp b/single-node-refactor/src/Solvers/SGH_solver/src/time_integration.cpp index 1cfe57695..e54a17e5b 100644 --- a/single-node-refactor/src/Solvers/SGH_solver/src/time_integration.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver/src/time_integration.cpp @@ -55,18 +55,21 @@ void SGH::rk_init(DCArrayKokkos& node_coords, DCArrayKokkos& MaterialPoints_stress, const size_t num_dims, const size_t num_elems, - const size_t num_nodes) const + const size_t num_nodes, + const size_t num_mat_points) const { + // save elem quantities - FOR_ALL(elem_gid, 0, num_elems, { + FOR_ALL(matpt_lid, 0, num_mat_points, { + // stress is always 3D even with 2D-RZ for (size_t i = 0; i < 3; i++) { for (size_t j = 0; j < 3; j++) { - MaterialPoints_stress(0, elem_gid, i, j) = MaterialPoints_stress(1, elem_gid, i, j); + MaterialPoints_stress(0, matpt_lid, i, j) = MaterialPoints_stress(1, matpt_lid, i, j); } } // end for - MaterialPoints_sie(0, elem_gid) = MaterialPoints_sie(1, elem_gid); + MaterialPoints_sie(0, matpt_lid) = MaterialPoints_sie(1, matpt_lid); }); // end parallel for // save nodal quantities @@ -104,6 +107,8 @@ void SGH::get_timestep(mesh_t& mesh, DCArrayKokkos& node_vel, DCArrayKokkos& MaterialPoints_sspd, DCArrayKokkos& GaussPoints_vol, + DCArrayKokkos& MaterialToMeshMaps_elem, + size_t num_material_elems, double time_value, const double graphics_time, const double time_final, @@ -118,7 +123,10 @@ void SGH::get_timestep(mesh_t& mesh, double dt_lcl; double min_dt_calc; - REDUCE_MIN(elem_gid, 0, mesh.num_elems, dt_lcl, { + REDUCE_MIN(mat_elem_lid, 0, num_mat_elems, dt_lcl, { + + size_t elem_gid = MaterialToMeshMaps_elem(mat_elem_lid); + double coords0[24]; // element coords ViewCArrayKokkos coords(coords0, 8, 3); @@ -171,8 +179,8 @@ void SGH::get_timestep(mesh_t& mesh, double dt_lcl_ = dt_cfl * dist_min / (MaterialPoints_sspd(elem_gid) + fuzz); // make dt be in bounds - dt_lcl_ = fmin(dt_lcl_, dt_max); // make dt small than dt_max - dt_lcl_ = fmax(dt_lcl_, dt_min); // make dt larger than dt_min + dt_lcl_ = fmin(dt_lcl_, dt_max); // make dt small than dt_max + dt_lcl_ = fmax(dt_lcl_, dt_min); // make dt larger than dt_min if (dt_lcl_ < dt_lcl) { dt_lcl = dt_lcl_; @@ -214,6 +222,8 @@ void SGH::get_timestep2D(mesh_t& mesh, DCArrayKokkos& node_vel, DCArrayKokkos& MaterialPoints_sspd, DCArrayKokkos& GaussPoints_vol, + DCArrayKokkos& MaterialToMeshMaps_elem, + size_t num_material_elems, double time_value, const double graphics_time, const double time_final, @@ -228,7 +238,10 @@ void SGH::get_timestep2D(mesh_t& mesh, double dt_lcl; double min_dt_calc; - REDUCE_MIN(elem_gid, 0, mesh.num_elems, dt_lcl, { + REDUCE_MIN(mat_elem_lid, 0, num_material_elems, dt_lcl, { + + size_t elem_gid = MaterialToMeshMaps_elem(mat_elem_lid); + double coords0[8]; // element coords ViewCArrayKokkos coords(coords0, 4, 2); diff --git a/single-node-refactor/src/common/io_utils.h b/single-node-refactor/src/common/io_utils.h index c39d4769a..b749d531d 100644 --- a/single-node-refactor/src/common/io_utils.h +++ b/single-node-refactor/src/common/io_utils.h @@ -97,7 +97,6 @@ class MeshReader /// ///////////////////////////////////////////////////////////////////////////// void read_mesh(mesh_t& mesh, - MaterialPoint_t& MaterialPoints, GaussPoint_t& GaussPoints, node_t& node, corner_t& corner, @@ -111,7 +110,7 @@ class MeshReader // Check mesh file extension // and read based on extension - read_ensight_mesh(mesh, MaterialPoints, GaussPoints, node, corner, num_dims, rk_num_bins); + read_ensight_mesh(mesh, GaussPoints, node, corner, num_dims, rk_num_bins); } ///////////////////////////////////////////////////////////////////////////// @@ -129,7 +128,6 @@ class MeshReader /// ///////////////////////////////////////////////////////////////////////////// void read_ensight_mesh(mesh_t& mesh, - MaterialPoint_t& MaterialPoints, GaussPoint_t& GaussPoints, node_t& node, corner_t& corner, @@ -208,7 +206,6 @@ class MeshReader // initialize elem variables mesh.initialize_elems(num_elem, num_dims); - MaterialPoints.initialize(rk_num_bins, num_elem, 3); // always 3D here, even for 2D GaussPoints.initialize(rk_num_bins, num_elem, 3); // always 3D here, even for 2D // for each cell read the list of associated nodes @@ -282,7 +279,6 @@ class MeshBuilder /// ///////////////////////////////////////////////////////////////////////////// void build_mesh(mesh_t& mesh, - MaterialPoint_t& MaterialPoints, GaussPoint_t& GaussPoints, node_t& node, corner_t& corner, @@ -290,10 +286,10 @@ class MeshBuilder { if (SimulationParamaters.mesh_input.num_dims == 2) { if (SimulationParamaters.mesh_input.type == mesh_input::Cylinder) { - build_2d_polar(mesh, MaterialPoints, GaussPoints, node, corner, SimulationParamaters); + build_2d_polar(mesh, GaussPoints, node, corner, SimulationParamaters); } else if (SimulationParamaters.mesh_input.type == mesh_input::Box) { - build_2d_box(mesh, MaterialPoints, GaussPoints, node, corner, SimulationParamaters); + build_2d_box(mesh, GaussPoints, node, corner, SimulationParamaters); } else{ std::cout << "**** 2D MESH TYPE NOT SUPPORTED **** " << std::endl; @@ -306,7 +302,7 @@ class MeshBuilder } } else if (SimulationParamaters.mesh_input.num_dims == 3) { - build_3d_box(mesh, MaterialPoints, GaussPoints, node, corner, SimulationParamaters); + build_3d_box(mesh, GaussPoints, node, corner, SimulationParamaters); } else{ throw std::runtime_error("**** ONLY 2D RZ OR 3D MESHES ARE SUPPORTED ****"); @@ -327,7 +323,6 @@ class MeshBuilder /// ///////////////////////////////////////////////////////////////////////////// void build_2d_box(mesh_t& mesh, - MaterialPoint_t& MaterialPoints, GaussPoint_t& GaussPoints, node_t& node, corner_t& corner, @@ -402,7 +397,6 @@ class MeshBuilder // intialize elem variables mesh.initialize_elems(num_elems, num_dim); - MaterialPoints.initialize(rk_num_bins, num_elems, 3); // always 3D here, even for 2D GaussPoints.initialize(rk_num_bins, num_elems, 3); // always 3D here, even for 2D // populate the elem center data structures @@ -460,7 +454,6 @@ class MeshBuilder /// ///////////////////////////////////////////////////////////////////////////// void build_2d_polar(mesh_t& mesh, - MaterialPoint_t& MaterialPoints, GaussPoint_t& GaussPoints, node_t& node, corner_t& corner, @@ -538,7 +531,6 @@ class MeshBuilder // intialize elem variables mesh.initialize_elems(num_elems, num_dim); - MaterialPoints.initialize(rk_num_bins, num_elems, 3); // always 3D here, even for 2D GaussPoints.initialize(rk_num_bins, num_elems, 3); // always 3D here, even for 2D // populate the elem center data structures @@ -596,7 +588,6 @@ class MeshBuilder /// ///////////////////////////////////////////////////////////////////////////// void build_3d_box(mesh_t& mesh, - MaterialPoint_t& MaterialPoints, GaussPoint_t& GaussPoints, node_t& node, corner_t& corner, @@ -685,7 +676,6 @@ class MeshBuilder // intialize elem variables mesh.initialize_elems(num_elems, num_dim); - MaterialPoints.initialize(rk_num_bins, num_elems, 3); // always 3D here, even for 2D GaussPoints.initialize(rk_num_bins, num_elems, 3); // always 3D here, even for 2D // --- Build elems --- @@ -749,7 +739,6 @@ class MeshBuilder /// ///////////////////////////////////////////////////////////////////////////// void build_3d_HexN_box(mesh_t& mesh, - MaterialPoint_t& MaterialPoints, GaussPoint_t& GaussPoints, node_t& node, corner_t& corner, @@ -886,7 +875,6 @@ class MeshWriter /// ///////////////////////////////////////////////////////////////////////////// void write_mesh(mesh_t& mesh, - MaterialPoint_t& MaterialPoints, GaussPoint_t& GaussPoints, node_t& node, corner_t& corner, @@ -895,10 +883,10 @@ class MeshWriter CArray graphics_times) { if (SimulationParamaters.output_options.format == output_options::vtk) { - write_vtk(mesh, MaterialPoints, GaussPoints, node, corner, SimulationParamaters, time_value, graphics_times); + write_vtk(mesh, GaussPoints, node, corner, SimulationParamaters, time_value, graphics_times); } else if (SimulationParamaters.output_options.format == output_options::ensight) { - write_ensight(mesh, MaterialPoints, GaussPoints, node, corner, SimulationParamaters, time_value, graphics_times); + write_ensight(mesh, GaussPoints, node, corner, SimulationParamaters, time_value, graphics_times); } else{ std::cout << "**** MESH OUTPUT TYPE NOT SUPPORTED **** " << std::endl; diff --git a/single-node-refactor/src/common/material.h b/single-node-refactor/src/common/material.h index 2b82de1c9..8297d35f3 100644 --- a/single-node-refactor/src/common/material.h +++ b/single-node-refactor/src/common/material.h @@ -282,14 +282,8 @@ struct Material_t{ RaggedRightArrayKokkos eos_global_vars; ///< Array of global variables for the EOS CArrayKokkos num_eos_global_vars; - RaggedRightArrayKokkos eos_state_vars; ///< Array of state (in each element) variables for the EOS - CArrayKokkos num_eos_state_vars; - RaggedRightArrayKokkos strength_global_vars; ///< Array of global variables for the strength model CArrayKokkos num_strength_global_vars; - - RaggedRightArrayKokkos strength_state_vars; ///< Array of state (in each element) variables for the strength - CArrayKokkos num_strength_state_vars; RaggedRightArrayKokkos failure_global_vars; ///< Array of global variables for the failure model diff --git a/single-node-refactor/src/common/mesh.h b/single-node-refactor/src/common/mesh.h index 8e1660ea5..6ef4448a4 100644 --- a/single-node-refactor/src/common/mesh.h +++ b/single-node-refactor/src/common/mesh.h @@ -111,15 +111,15 @@ void bubble_sort(size_t arr[], const size_t num) } // end for i } // end function -struct zones_in_MaterialPoint_t +struct zones_in_elem_t { private: size_t num_zones_in_elem_; public: - zones_in_MaterialPoint_t() { + zones_in_elem_t() { }; - zones_in_MaterialPoint_t(const size_t num_zones_in_elem_inp) { + zones_in_elem_t(const size_t num_zones_in_elem_inp) { this->num_zones_in_elem_ = num_zones_in_elem_inp; }; @@ -138,15 +138,15 @@ struct zones_in_MaterialPoint_t }; // if material points are defined strictly internal to the element. -struct legendre_in_MaterialPoint_t +struct legendre_in_elem_t { private: size_t num_leg_gauss_in_elem_; public: - legendre_in_MaterialPoint_t() { + legendre_in_elem_t() { }; - legendre_in_MaterialPoint_t(const size_t num_leg_gauss_in_elem_inp) { + legendre_in_elem_t(const size_t num_leg_gauss_in_elem_inp) { this->num_leg_gauss_in_elem_ = num_leg_gauss_in_elem_inp; }; @@ -165,15 +165,15 @@ struct legendre_in_MaterialPoint_t }; /// if material points are defined at element interfaces -struct lobatto_in_MaterialPoint_t +struct lobatto_in_elem_t { private: size_t num_lob_gauss_in_elem_; public: - lobatto_in_MaterialPoint_t() { + lobatto_in_elem_t() { }; - lobatto_in_MaterialPoint_t(const size_t num_lob_gauss_in_elem_inp) { + lobatto_in_elem_t(const size_t num_lob_gauss_in_elem_inp) { this->num_lob_gauss_in_elem_ = num_lob_gauss_in_elem_inp; }; @@ -240,7 +240,7 @@ struct mesh_t size_t num_lob_gauss_in_elem; ///< Number of Gauss Lobatto points in an element DCArrayKokkos nodes_in_elem; ///< Nodes in an element - CArrayKokkos corners_in_elem; ///< Corners in an element + CArrayKokkos corners_in_elem; ///< Corners in an element -- this can just be a functor RaggedRightArrayKokkos elems_in_elem; ///< Elements connected to an element CArrayKokkos num_elems_in_elem; ///< Number of elements connected to an element @@ -249,9 +249,9 @@ struct mesh_t CArrayKokkos surfs_in_elem; ///< Surfaces on an element // CArrayKokkos zones_in_elem; ///< Zones in an element - zones_in_MaterialPoint_t zones_in_elem; ///< Zones in an element - lobatto_in_MaterialPoint_t lobatto_in_elem; ///< Gauss Lobatto points in an element - legendre_in_MaterialPoint_t legendre_in_elem; ///< Gauss Legendre points in an element + zones_in_elem_t zones_in_elem; ///< Zones in an element + lobatto_in_elem_t lobatto_in_elem; ///< Gauss Lobatto points in an element + legendre_in_elem_t legendre_in_elem; ///< Gauss Legendre points in an element // ---- Node Data Definitions ---- // size_t num_nodes; ///< Number of nodes in the mesh @@ -348,10 +348,10 @@ struct mesh_t nodes_in_elem = DCArrayKokkos(num_elems, num_nodes_in_elem, "mesh.nodes_in_elem"); corners_in_elem = CArrayKokkos(num_elems, num_nodes_in_elem, "mesh.corners_in_elem"); - zones_in_elem = zones_in_MaterialPoint_t(num_zones_in_elem); + zones_in_elem = zones_in_elem_t(num_zones_in_elem); surfs_in_elem = CArrayKokkos(num_elems, num_surfs_in_elem, "mesh.surfs_in_zone"); nodes_in_zone = CArrayKokkos(num_zones, num_nodes_in_zone, "mesh.nodes_in_zone"); - legendre_in_elem = legendre_in_MaterialPoint_t(num_leg_gauss_in_elem); + legendre_in_elem = legendre_in_elem_t(num_leg_gauss_in_elem); return; }; // end method @@ -407,7 +407,7 @@ struct mesh_t size_t j = count_saved_corners_in_node(node_gid); // Save corner index to this node_gid - size_t corner_gid = node_lid + elem_gid * num_nodes_in_elem; + size_t corner_gid = node_lid + elem_gid * num_nodes_in_elem; // this can be a functor corners_in_node(node_gid, j) = corner_gid; elems_in_node(node_gid, j) = elem_gid; // save the elem_gid diff --git a/single-node-refactor/src/common/state.h b/single-node-refactor/src/common/state.h index 39057b8ff..381730337 100644 --- a/single-node-refactor/src/common/state.h +++ b/single-node-refactor/src/common/state.h @@ -38,6 +38,43 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. using namespace mtr; + +///////////////////////////////////////////////////////////////////////////// +/// +/// \struct state_t +/// +/// \brief Stores all state +/// +///////////////////////////////////////////////////////////////////////////// +struct State_t +{ + // --------------------------------------------------------------------- + // state data on mesh declarations + // --------------------------------------------------------------------- + node_t node; + GaussPoint_t GaussPoints; + corner_t corner; + + // --------------------------------------------------------------------- + // material to mesh maps + // --------------------------------------------------------------------- + CArray& MaterialToMeshMaps; ///< access as MaterialToMeshMaps(mat_id).elem(mat_storage_lid) + corners_in_mat_t corners_in_mat_elem; ///< access the corner mat lid using (mat_elem_lid, corn_lid) + points_in_mat_t points_in_mat_elem; ///< for accessing e.g., guass points mat lid with arbitrary-order FE + zones_in_mat_t zones_in_mat_elem; ///< for accessing sub-zones mat lid with arbitrary-order FE + + // --------------------------------------------------------------------- + // material state, compressed, and sequentially accessed + // --------------------------------------------------------------------- + CArray& MaterialPoints; ///< access as MaterialPoints(mat_id).var(mat_pt) + CArray& MaterialCorners; ///< access as MaterialCorners(mat_id).var(mat_corner), not used with MPM + CArray& MaterialZones; ///< access as MaterialZones(mat_id).var(mat_zone), only used with arbitrary-order FE + +}; // end state_t + + + + ///////////////////////////////////////////////////////////////////////////// /// /// \struct node_t @@ -60,53 +97,60 @@ struct node_t }; // end method }; // end node_t + + ///////////////////////////////////////////////////////////////////////////// /// -/// \struct Zone_t +/// \struct GaussPoint_t /// -/// \brief Stores state information associated with zone index space +/// \brief Stores state information associated with the Gauss point /// ///////////////////////////////////////////////////////////////////////////// -struct Zone_t +struct GaussPoint_t { - DCArrayKokkos sie; ///< coefficients for the sie polynomial field + //const size_t num_bins = 3; - // initialization method (num_rk_storage_bins, num_nodes, num_dims) - void initialize(size_t num_rk, size_t num_nodes, size_t num_dims) + DCArrayKokkos vol; ///< GaussPoint volume + DCArrayKokkos div; ///< GaussPoint divergence of velocity + + DCArrayKokkos eroded; ///< GuassPoint eroded or not + + // initialization method (num_rk_storage_bins, num_cells, num_dims) + void initialize(size_t num_rk, size_t num_gauss_pnts, size_t num_dims) { - this->sie = DCArrayKokkos(num_rk, num_nodes, num_dims, "zone_sie"); - }; // end method + this->vol = DCArrayKokkos(num_gauss_pnts, "gauss_point_volume"); + this->div = DCArrayKokkos(num_gauss_pnts, "gauss_point_div"); -}; // end zone_t + this->eroded = DCArrayKokkos(num_gauss_pnts, "gauss_point_eroded"); + }; // end method + +}; // end GuassPoint_t ///////////////////////////////////////////////////////////////////////////// /// -/// \struct GaussPoint_t +/// \struct MaterialtoMeshMap_t /// -/// \brief Stores state information associated with the Gauss point +/// \brief Stores state information associated with maps from material to mesh maps /// ///////////////////////////////////////////////////////////////////////////// -struct GaussPoint_t +struct MaterialToMeshMap_t { - DCArrayKokkos vol; ///< GAussPoint volume - DCArrayKokkos div; ///< GAussPoint divergence of velocity - - DCArrayKokkos mat_id; ///< MaterialPoint material index + size_t num_material_elems; ///< returns the exact number of matpts - DCArrayKokkos eroded; ///< MaterialPoint eroded or not + DCArrayKokkos elem; ///< returns the elem for this material - // initialization method (num_rk_storage_bins, num_cells, num_dims) - void initialize(size_t num_rk, size_t num_elems, size_t num_dims) + // initialization method for FE-SGH and MPM methods (max number of elems needed) + void initialize(size_t num_elem_max) { - this->vol = DCArrayKokkos(num_elems, "gauss_point_volume"); - this->div = DCArrayKokkos(num_elems, "gauss_point_div"); - this->mat_id = DCArrayKokkos(num_elems, "gauss_point_mat_id"); - this->eroded = DCArrayKokkos(num_elems, "gauss_point_eroded"); + this->elem = DCArrayKokkos(num_elem_max, "material_pt_to_elem"); }; // end method -}; // end GuassPoint_t + +}; // end MaterialtoMeshMaps_t + + ///////////////////////////////////////////////////////////////////////////// @@ -118,27 +162,89 @@ struct GaussPoint_t ///////////////////////////////////////////////////////////////////////////// struct MaterialPoint_t { + size_t num_material_points; ///< the actual number of material points, omitting the buffer + DCArrayKokkos den; ///< MaterialPoint density DCArrayKokkos pres; ///< MaterialPoint pressure DCArrayKokkos stress; ///< MaterialPoint stress DCArrayKokkos sspd; ///< MaterialPoint sound speed - DCArrayKokkos sie; ///< MaterialPoint specific internal energy DCArrayKokkos mass; ///< MaterialPoint mass - DCArrayKokkos statev; ///< MaterialPoint state variable - // initialization method (num_rk_storage_bins, num_cells, num_dims) - void initialize(size_t num_rk, size_t num_elems, size_t num_dims) + DCArrayKokkos sie; ///< coefficients for the sie in strong form, only used in some methods e.g., FE-SGH and MPM + + // Material Models are stored on Material points + CArrayKokkos eos_state_vars; ///< Array of state variables for the EOS + CArrayKokkos strength_state_vars; ///< Array of state variables for the strength + + + // initialization method (num_rk_storage_bins, num_pts_max, num_dims) + void initialize(size_t num_rk, size_t num_pts_max, size_t num_dims) { - this->den = DCArrayKokkos(num_elems, "material_point_density"); - this->pres = DCArrayKokkos(num_elems, "material_point_pressure"); - this->stress = DCArrayKokkos(num_rk, num_elems, num_dims, num_dims, "material_point_stress"); - this->sspd = DCArrayKokkos(num_elems, "material_point_sspd"); - this->sie = DCArrayKokkos(num_rk, num_elems, "material_point_sie"); // only used with DG - this->mass = DCArrayKokkos(num_elems, "material_point_mass"); + this->den = DCArrayKokkos(num_pts_max, "material_point_density"); + this->pres = DCArrayKokkos(num_pts_max, "material_point_pressure"); + this->stress = DCArrayKokkos(num_rk, num_pts_max, num_dims, num_dims, "material_point_stress"); + this->sspd = DCArrayKokkos(num_pts_max, "material_point_sspd"); + this->mass = DCArrayKokkos(num_pts_max, "material_point_mass"); + this->sie = DCArrayKokkos(num_rk, num_pts_max, "material_point_sie"); + }; // end method + + // initialization method for arbitrary-order FE (num_rk_storage_bins, num_pts_max, num_dims) + void initialize_Pn(size_t num_rk, size_t num_pts_max, size_t num_dims) + { + this->den = DCArrayKokkos(num_pts_max, "material_point_density"); + this->pres = DCArrayKokkos(num_pts_max, "material_point_pressure"); + this->stress = DCArrayKokkos(num_rk, num_pts_max, num_dims, num_dims, "material_point_stress"); + this->sspd = DCArrayKokkos(num_pts_max, "material_point_sspd"); + this->mass = DCArrayKokkos(num_pts_max, "material_point_mass"); }; // end method }; // end MaterialPoint + +///////////////////////////////////////////////////////////////////////////// +/// +/// \struct MaterialZone_t +/// +/// \brief Stores state information associated with zone index space +/// +///////////////////////////////////////////////////////////////////////////// +struct MaterialZone_t +{ + size_t num_material_zones; ///< the actual number of material zones, omitting the buffer + + DCArrayKokkos sie; ///< coefficients for the sie polynomial field + + // initialization method for arbitrary-order FE (num_rk_storage_bins, num_zones) + void initialize_Pn(size_t num_rk, size_t num_zones_max) + { + this->sie = DCArrayKokkos(num_rk, num_zones_max, "material_zone_sie"); + }; // end method + +}; // end MaterialZone_t + + +///////////////////////////////////////////////////////////////////////////// +/// +/// \struct MaterialCorner_t +/// +/// \brief Stores state information associated with a material in an element corner +/// +///////////////////////////////////////////////////////////////////////////// +struct MaterialCorner_t +{ + size_t num_material_corners; ///< the actual number of material corners, omitting the buffer + + DCArrayKokkos force; ///< Corner force for the material + + // initialization method (num_corners, num_dims) + void initialize(size_t num_corners_max, size_t num_dims) + { + this->force = DCArrayKokkos(num_corners_max, num_dims, "material_corner_force"); + }; // end method +} + + + ///////////////////////////////////////////////////////////////////////////// /// /// \struct corner_t @@ -159,4 +265,156 @@ struct corner_t }; // end method }; // end corner_t + +///////////////////////////////////////////////////////////////////////////// +/// +/// \struct map for getting the corners in the material index +/// +/// \brief Stores state information associated with material corner index space +/// +///////////////////////////////////////////////////////////////////////////// +struct corners_in_mat_t +{ + private: + size_t num_corners_in_elem_; + public: + corners_in_mat_t() { + }; + + corners_in_mat_t(const size_t num_corners_in_elem_inp) { + this->num_corners_in_elem_ = num_corners_in_elem_inp; + }; + + // return global corner index for given local corner index in a material storage + size_t host(const size_t mat_storage_lid, const size_t corner_lid) const + { + return mat_storage_lid * num_corners_in_elem_ + corner_lid; + }; + + // Return the global corner ID given a material storage gloabl ID and a local corner ID + KOKKOS_INLINE_FUNCTION + size_t operator()(const size_t mat_storage_lid, const size_t corner_lid) const + { + return mat_storage_lid * num_corners_in_elem_ + corner_lid; + }; +}; + +///////////////////////////////////////////////////////////////////////////// +/// +/// \struct maps for high-order FE methods +/// +/// \brief Stores state information associated with other mesh index spaces +/// +///////////////////////////////////////////////////////////////////////////// + +struct zones_in_mat_t +{ + private: + size_t num_zones_in_elem_; + public: + zones_in_mat_t() { + }; + + zones_in_mat_t(const size_t num_zones_in_elem_inp) { + this->num_zones_in_elem_ = num_zones_in_elem_inp; + }; + + // return global zone index for given local zone index in a material storage + size_t host(const size_t mat_storage_lid, const size_t zone_lid) const + { + return mat_storage_lid * num_zones_in_elem_ + zone_lid; + }; + + // Return the global zone ID given a material storage gloabl ID and a local zone ID + KOKKOS_INLINE_FUNCTION + size_t operator()(const size_t mat_storage_lid, const size_t zone_lid) const + { + return mat_storage_lid * num_zones_in_elem_ + zone_lid; + }; +}; + +// if material points are defined strictly internal to the element. +struct legendre_in_mat_t +{ + private: + size_t num_leg_gauss_in_elem_; + public: + legendre_in_mat_t() { + }; + + legendre_in_mat_t(const size_t num_leg_gauss_in_elem_inp) { + this->num_leg_gauss_in_elem_ = num_leg_gauss_in_elem_inp; + }; + + // return global gauss index for given local gauss index in a material storage + size_t host(const size_t mat_storage_lid, const size_t leg_gauss_lid) const + { + return mat_storage_lid * num_leg_gauss_in_elem_ + leg_gauss_lid; + }; + + // Return the global gauss ID given a material storage gloabl ID and a local gauss ID + KOKKOS_INLINE_FUNCTION + size_t operator()(const size_t mat_storage_lid, const size_t leg_gauss_lid) const + { + return mat_storage_lid * num_leg_gauss_in_elem_ + leg_gauss_lid; + }; +}; + +/// if material points are defined at element interfaces, e.g., for nodal DG +struct lobatto_in_mat_t +{ + private: + size_t num_lob_gauss_in_elem_; + public: + lobatto_in_mat_t() { + }; + + lobatto_in_mat_t(const size_t num_lob_gauss_in_elem_inp) { + this->num_lob_gauss_in_elem_ = num_lob_gauss_in_elem_inp; + }; + + // return global gauss index for given local gauss index in a material storage + size_t host(const size_t mat_storage_lid, const size_t lob_gauss_lid) const + { + return mat_storage_lid * num_lob_gauss_in_elem_ + lob_gauss_lid; + }; + + // Return the global gauss ID given a material storage ID and a local gauss ID + KOKKOS_INLINE_FUNCTION + size_t operator()(const size_t mat_storage_lid, const size_t lob_gauss_lid) const + { + return mat_storage_lid * num_lob_gauss_in_elem_ + lob_gauss_lid; + }; +}; + + +// the local id for material points in elem +struct points_in_mat_t +{ + private: + size_t num_points_in_elem_; + public: + points_in_mat_t() { + }; + + points_in_mat_t(const size_t num_points_in_elem_inp) { + this->num_points_in_elem_ = num_points_in_elem_inp; + }; + + // return global gauss index for given local gauss index in a material storage + size_t host(const size_t mat_storage_lid, const size_t points_lid) const + { + return mat_storage_lid * num_points_in_elem_ + points_lid; + }; + + // Return the global gauss ID given a material storage gloabl ID and a local gauss ID + KOKKOS_INLINE_FUNCTION + size_t operator()(const size_t mat_storage_lid, const size_t points_lid) const + { + return mat_storage_lid * num_points_in_elem_ + points_lid; + }; +}; + + + #endif diff --git a/single-node-refactor/src/driver.h b/single-node-refactor/src/driver.h index b41431fdf..fa5d8b8a0 100644 --- a/single-node-refactor/src/driver.h +++ b/single-node-refactor/src/driver.h @@ -47,10 +47,8 @@ void fill_regions(DCArrayKokkos&, Material_t&, mesh_t&, - node_t&, - MaterialPoint_t&, - GaussPoint_t&, - corner_t&); + State_t&, + size_t); // ============================================================================== // Functions to read voxel mesh @@ -140,12 +138,9 @@ class Driver mesh_t mesh; // --------------------------------------------------------------------- - // state data type declarations + // state data type declaration // --------------------------------------------------------------------- - node_t node; - GaussPoint_t GaussPoints; - MaterialPoint_t MaterialPoints; - corner_t corner; + State_t State; int num_solvers = 0; @@ -182,19 +177,17 @@ class Driver std::cout << "Mesh file path: " << SimulationParamaters.mesh_input.file_path << std::endl; mesh_reader.set_mesh_file(SimulationParamaters.mesh_input.file_path.data()); mesh_reader.read_mesh(mesh, - MaterialPoints, - GaussPoints, - node, - corner, + State.GaussPoints, + State.node, + State.corner, num_dims, SimulationParamaters.dynamic_options.rk_num_bins); } else if (SimulationParamaters.mesh_input.source == mesh_input::generate) { mesh_builder.build_mesh(mesh, - MaterialPoints, - GaussPoints, - node, - corner, + State.GaussPoints, + State.node, + State.corner, SimulationParamaters); } else{ @@ -208,32 +201,19 @@ class Driver // --- calculate bdy sets ---// mesh.init_bdy_sets(num_bcs); - tag_bdys(BoundaryConditions, mesh, node.coords); + tag_bdys(BoundaryConditions, mesh, State.node.coords); mesh.build_boundry_node_sets(mesh); // Calculate element volume - geometry::get_vol(GaussPoints.vol, node.coords, mesh); + geometry::get_vol(State.GaussPoints.vol, State.node.coords, mesh); - // Create memory for state variables - //size_t max_num_vars = 0; - //size_t num_materials = Materials.num_eos_global_vars.size(); - //for (size_t mat_id=0; mat_id(mesh.num_elems, max_num_vars); // WARNING: HACK - - // --- apply the fill instructions over the Elements---// - Kokkos::fence(); - //fill_regions(); fill_regions(SimulationParamaters.region_fills, Materials, mesh, - node, - MaterialPoints, - GaussPoints, - corner); + State, + SimulationParamaters.dynamic_options.rk_num_bins); // --- Move the following sovler setup to yaml parsing routine @@ -263,10 +243,7 @@ class Driver Materials, BoundaryConditions, mesh, - node, - MaterialPoints, - GaussPoints, - corner); + State); } } @@ -285,10 +262,7 @@ class Driver Materials, BoundaryConditions, mesh, - node, - MaterialPoints, - GaussPoints, - corner); + State); } } @@ -321,419 +295,260 @@ class Driver }; // end driver class - ///////////////////////////////////////////////////////////////////////////// - /// - /// \fn fill_regions - /// - /// \brief Fills mesh regions based on YAML input - /// - ///////////////////////////////////////////////////////////////////////////// - void fill_regions(DCArrayKokkos& region_fills, - Material_t& Materials, - mesh_t& mesh, - node_t& node, - MaterialPoint_t& MaterialPoints, - GaussPoint_t& GaussPoints, - corner_t& corner) - { - int num_fills = region_fills.size(); - printf("Num Fills's = %d\n", num_fills); - - // --------------------------------------------- - // variables from a voxel file - // --------------------------------------------- - DCArrayKokkos voxel_elem_mat_id; // 1 or 0 if material exist, or it is the material_id - double voxel_dx, voxel_dy, voxel_dz; // voxel mesh resolution, set by input file - double orig_x, orig_y, orig_z; // origin of voxel elem center mesh, set by input file - size_t voxel_num_i, voxel_num_j, voxel_num_k; // num voxel elements in each direction, set by input file - - DCArrayKokkos read_voxel_file(num_fills); // check to see if readVoxelFile - FOR_ALL(f_id, 0, num_fills, { - if (region_fills(f_id).volume == region::readVoxelFile) - { - read_voxel_file(f_id) = region::readVoxelFile; // read the voxel file - } - // add other mesh voxel files - else - { - read_voxel_file(f_id) = 0; - } - }); // end parallel for - read_voxel_file.update_host(); // copy to CPU if code is to read a file - Kokkos::fence(); - // --------------------------------------------- +///////////////////////////////////////////////////////////////////////////// +/// +/// \fn fill_regions +/// +/// \brief Fills mesh regions based on YAML input +/// +///////////////////////////////////////////////////////////////////////////// +void fill_regions(DCArrayKokkos& region_fills, + Material_t& Materials, + mesh_t& mesh, + State_t& State, + size_t rk_num_bins) +{ + size_t num_fills = region_fills.size(); + printf("Num Fills's = %d\n", num_fills); - for (int f_id = 0; f_id < num_fills; f_id++) { + // the number of elems and nodes in the mesh + const size_t num_elems = mesh.num_elems; + const size_t num_nodes = mesh.num_nodes; + + + + // create temporary state fields + // Painting routine requires only 1 material per GaussPoint + CArrayKokkos GaussPoint_den(num_elems); + CArrayKokkos GaussPoint_sie(num_elems); + CArrayKokkos elem_mat_id(num_elems); // the mat_id in the elem - // ---- - // voxel mesh setup - if (read_voxel_file.host(f_id) == region::readVoxelFile) - { - // read voxel mesh to get the values in the fcn interface - user_voxel_init(voxel_elem_mat_id, - voxel_dx, voxel_dy, voxel_dz, - orig_x, orig_y, orig_z, - voxel_num_i, voxel_num_j, voxel_num_k, - region_fills(f_id).scale_x, - region_fills(f_id).scale_y, - region_fills(f_id).scale_z, - region_fills(f_id).file_path); - - // copy values read from file to device - voxel_elem_mat_id.update_device(); - } // endif - // add else if for other mesh reads including STL-2-voxel - - - - int num_elems = mesh.num_elems; - // parallel loop over elements in mesh - FOR_ALL(elem_gid, 0, num_elems, { - for (int rk_level = 0; rk_level < 2; rk_level++) { - - // Set erosion flag to false - GaussPoints.eroded(elem_gid) = false; - - // calculate the coordinates and radius of the element - double elem_coords[3]; // note:initialization with a list won't work - elem_coords[0] = 0.0; - elem_coords[1] = 0.0; - elem_coords[2] = 0.0; - - // get the coordinates of the element center - for (int node_lid = 0; node_lid < mesh.num_nodes_in_elem; node_lid++) { - elem_coords[0] += node.coords(rk_level, mesh.nodes_in_elem(elem_gid, node_lid), 0); - elem_coords[1] += node.coords(rk_level, mesh.nodes_in_elem(elem_gid, node_lid), 1); - if (mesh.num_dims == 3) { - elem_coords[2] += node.coords(rk_level, mesh.nodes_in_elem(elem_gid, node_lid), 2); - } - else{ - elem_coords[2] = 0.0; - } - } // end loop over nodes in element - elem_coords[0] = (elem_coords[0] / mesh.num_nodes_in_elem); - elem_coords[1] = (elem_coords[1] / mesh.num_nodes_in_elem); - elem_coords[2] = (elem_coords[2] / mesh.num_nodes_in_elem); - - // for shapes with an origin (e.g., sphere and circle), accounting for the origin - double dist_x = elem_coords[0] - region_fills(f_id).origin[0]; - double dist_y = elem_coords[1] - region_fills(f_id).origin[1]; - double dist_z = elem_coords[2] - region_fills(f_id).origin[2]; - - // spherical radius - double radius = sqrt(dist_x * dist_x + - dist_y * dist_y + - dist_z * dist_z); - - // cylindrical radius - double radius_cyl = sqrt(dist_x * dist_x + - dist_y * dist_y); - - // default is not to fill the element - size_t fill_this = 0; - - // check to see if this element should be filled - switch (region_fills(f_id).volume) { - case region::global: - { - fill_this = 1; - break; - } - case region::box: - { - - double x_lower_bound = region_fills(f_id).x1; - double x_upper_bound = region_fills(f_id).x2; - - double y_lower_bound = region_fills(f_id).y1; - double y_upper_bound = region_fills(f_id).y2; - - double z_lower_bound = region_fills(f_id).z1; - double z_upper_bound = region_fills(f_id).z2; - - - if (elem_coords[0] >= x_lower_bound && elem_coords[0] <= x_upper_bound && - elem_coords[1] >= y_lower_bound && elem_coords[1] <= y_upper_bound && - elem_coords[2] >= z_lower_bound && elem_coords[2] <= z_upper_bound) { - fill_this = 1; - } - break; - } - case region::cylinder: - { - if (radius_cyl >= region_fills(f_id).radius1 - && radius_cyl <= region_fills(f_id).radius2) { - fill_this = 1; - } - break; - } - case region::sphere: - { - if (radius >= region_fills(f_id).radius1 - && radius <= region_fills(f_id).radius2) { - fill_this = 1; - } - break; - } - - case region::readVoxelFile: - { - - fill_this = 0; // default is no, don't fill it - - // find the closest element in the voxel mesh to this element - double i0_real = (elem_coords[0] - orig_x - region_fills(f_id).origin[0]) / (voxel_dx); - double j0_real = (elem_coords[1] - orig_y - region_fills(f_id).origin[1]) / (voxel_dy); - double k0_real = (elem_coords[2] - orig_z - region_fills(f_id).origin[2]) / (voxel_dz); - - int i0 = (int)i0_real; - int j0 = (int)j0_real; - int k0 = (int)k0_real; - - // look for the closest element in the voxel mesh - int elem_id0 = get_id_device(i0, j0, k0, voxel_num_i, voxel_num_j); - - // if voxel mesh overlaps this mesh, then fill it if =1 - if (elem_id0 < voxel_elem_mat_id.size() && elem_id0 >= 0 && - i0 >= 0 && j0 >= 0 && k0 >= 0 && - i0 < voxel_num_i && j0 < voxel_num_j && k0 < voxel_num_k) { - // voxel mesh elem values = 0 or 1 - fill_this = voxel_elem_mat_id(elem_id0); // values from file - - } // end if - - break; - - } // end case - case region::no_volume: - { - fill_this = 0; // default is no, don't fill it - - break; - } - default: - { - fill_this = 0; // default is no, don't fill it - - break; - } - - } // end of switch - - // paint the material state on the element - if (fill_this == 1) { - // density - MaterialPoints.den(elem_gid) = region_fills(f_id).den; - - // mass - MaterialPoints.mass(elem_gid) = MaterialPoints.den(elem_gid) * GaussPoints.vol(elem_gid); - - // specific internal energy - MaterialPoints.sie(rk_level, elem_gid) = region_fills(f_id).sie; - - GaussPoints.mat_id(elem_gid) = region_fills(f_id).material_id; - - size_t mat_id = GaussPoints.mat_id(elem_gid); // short name - - // get state_vars from the input file or read them in - if (false) { // Materials.MaterialEnums(mat_id).strength_setup == model_init::user_init) { - // use the values read from a file to get elem state vars - // for (size_t var = 0; var < Materials.num_eos_state_vars(mat_id); var++) { - // MaterialPoints.statev(elem_gid, var) = file_state_vars(mat_id, elem_gid, var); - // } // end for - } - else{ - // use the values in the input file - // set state vars for the region where mat_id resides - - //int num_eos_global_vars = Materials.eos_global_vars.stride(mat_id); // ragged-right storage - - - //for (size_t var = 0; var < num_eos_global_vars; var++) { - // MaterialPoints.statev(elem_gid, var) = Materials.eos_global_vars(mat_id,var); // state_vars(mat_id, var); // WARNING: HACK - //} // end for - - - } // end logical on type - - // --- stress tensor --- - // always 3D even for 2D-RZ - for (size_t i = 0; i < 3; i++) { - for (size_t j = 0; j < 3; j++) { - MaterialPoints.stress(rk_level, elem_gid, i, j) = 0.0; - } - } // end for - - // --- Calculate Pressure and Stress --- - - // --- Pressure --- - Materials.MaterialFunctions(mat_id).calc_pressure( - MaterialPoints.pres, - MaterialPoints.stress, - elem_gid, - GaussPoints.mat_id(elem_gid), - MaterialPoints.statev, - MaterialPoints.sspd, - MaterialPoints.den(elem_gid), - MaterialPoints.sie(rk_level, elem_gid), - Materials.eos_global_vars); - - // --- Sound Speed --- - Materials.MaterialFunctions(mat_id).calc_sound_speed( - MaterialPoints.pres, - MaterialPoints.stress, - elem_gid, - GaussPoints.mat_id(elem_gid), - MaterialPoints.statev, - MaterialPoints.sspd, - MaterialPoints.den(elem_gid), - MaterialPoints.sie(rk_level, elem_gid), - Materials.eos_global_vars); - - // loop over the nodes of this element and apply velocity - for (size_t node_lid = 0; node_lid < mesh.num_nodes_in_elem; node_lid++) { - // get the mesh node index - size_t node_gid = mesh.nodes_in_elem(elem_gid, node_lid); - - // --- Velocity --- - switch (region_fills(f_id).velocity) { - case init_conds::cartesian: - { - node.vel(rk_level, node_gid, 0) = region_fills(f_id).u; - node.vel(rk_level, node_gid, 1) = region_fills(f_id).v; - if (mesh.num_dims == 3) { - node.vel(rk_level, node_gid, 2) = region_fills(f_id).w; - } - - break; - } - // radial in the (x,y) plane where x=r*cos(theta) and y=r*sin(theta) - case init_conds::radial: - { - // Setting up radial - double dir[2]; - dir[0] = 0.0; - dir[1] = 0.0; - double radius_val = 0.0; - - for (int dim = 0; dim < 2; dim++) { - dir[dim] = node.coords(rk_level, node_gid, dim); - radius_val += node.coords(rk_level, node_gid, dim) * node.coords(rk_level, node_gid, dim); - } // end for - radius_val = sqrt(radius_val); - - for (int dim = 0; dim < 2; dim++) { - if (radius_val > 1.0e-14) { - dir[dim] /= (radius_val); - } - else{ - dir[dim] = 0.0; - } - } // end for - - node.vel(rk_level, node_gid, 0) = region_fills(f_id).speed * dir[0]; - node.vel(rk_level, node_gid, 1) = region_fills(f_id).speed * dir[1]; - if (mesh.num_dims == 3) { - node.vel(rk_level, node_gid, 2) = 0.0; - } - - break; - } - case init_conds::spherical: - { - // Setting up spherical - double dir[3]; - dir[0] = 0.0; - dir[1] = 0.0; - dir[2] = 0.0; - double radius_val = 0.0; - - for (int dim = 0; dim < 3; dim++) { - dir[dim] = node.coords(rk_level, node_gid, dim); - radius_val += node.coords(rk_level, node_gid, dim) * node.coords(rk_level, node_gid, dim); - } // end for - radius_val = sqrt(radius_val); - - for (int dim = 0; dim < 3; dim++) { - if (radius_val > 1.0e-14) { - dir[dim] /= (radius_val); - } - else{ - dir[dim] = 0.0; - } - } // end for - - node.vel(rk_level, node_gid, 0) = region_fills(f_id).speed * dir[0]; - node.vel(rk_level, node_gid, 1) = region_fills(f_id).speed * dir[1]; - if (mesh.num_dims == 3) { - node.vel(rk_level, node_gid, 2) = region_fills(f_id).speed * dir[2]; - } - - break; - } - case init_conds::radial_linear: - { - printf("**** Radial_linear initial conditions not yet supported ****\n"); - break; - } - case init_conds::spherical_linear: - { - printf("**** spherical_linear initial conditions not yet supported ****\n"); - break; - } - case init_conds::tg_vortex: - { - node.vel(rk_level, node_gid, 0) = sin(PI * node.coords(rk_level, node_gid, 0)) * cos(PI * node.coords(rk_level, node_gid, 1)); - node.vel(rk_level, node_gid, 1) = -1.0 * cos(PI * node.coords(rk_level, node_gid, 0)) * sin(PI * node.coords(rk_level, node_gid, 1)); - if (mesh.num_dims == 3) { - node.vel(rk_level, node_gid, 2) = 0.0; - } - - break; - } - - case init_conds::no_ic_vel: - { - // no velocity - node.vel(rk_level, node_gid, 0) = 0.0; - node.vel(rk_level, node_gid, 1) = 0.0; - if (mesh.num_dims == 3) { - node.vel(rk_level, node_gid, 2) = 0.0; - } - - break; - } - default: - { - // no velocity - node.vel(rk_level, node_gid, 0) = 0.0; - node.vel(rk_level, node_gid, 1) = 0.0; - if (mesh.num_dims == 3) { - node.vel(rk_level, node_gid, 2) = 0.0; - } - - break; - } - } // end of switch - } // end loop over nodes of element - - if (region_fills(f_id).velocity == init_conds::tg_vortex) { - MaterialPoints.pres(elem_gid) = 0.25 * (cos(2.0 * PI * elem_coords[0]) + cos(2.0 * PI * elem_coords[1]) ) + 1.0; - - // p = rho*ie*(gamma - 1) - double gamma = Materials.eos_global_vars(mat_id,0); // makes sure it matches the gamma in the gamma law function - MaterialPoints.sie(rk_level, elem_gid) = - MaterialPoints.pres(elem_gid) / (region_fills(f_id).den * (gamma - 1.0)); - } // end if - - } // end if fill - } // end RK loop - }); // end FOR_ALL element loop - Kokkos::fence(); - } // end for loop over fills + // --------------------------------------------- + // variables from a voxel file + // --------------------------------------------- + DCArrayKokkos voxel_elem_mat_id; // 1 or 0 if material exist, or it is the material_id + double voxel_dx, voxel_dy, voxel_dz; // voxel mesh resolution, set by input file + double orig_x, orig_y, orig_z; // origin of voxel elem center mesh, set by input file + size_t voxel_num_i, voxel_num_j, voxel_num_k; // num voxel elements in each direction, set by input file + + DCArrayKokkos read_voxel_file(num_fills); // check to see if readVoxelFile + FOR_ALL(f_id, 0, num_fills, { + if (region_fills(f_id).volume == region::readVoxelFile) + { + read_voxel_file(f_id) = region::readVoxelFile; // read the voxel file + } + // add other mesh voxel files + else + { + read_voxel_file(f_id) = 0; + } + }); // end parallel for + read_voxel_file.update_host(); // copy to CPU if code is to read a file + Kokkos::fence(); + // --------------------------------------------- + + + + // --------------------------------------------- + // fill den, sie, and velocity on the mesh + // --------------------------------------------- + fill_regions_sgh(Materials, + mesh, + State.node_coords, + State.node_vel, + region_fills, + voxel_elem_mat_id, + GaussPoint_den, + GaussPoint_sie, + elem_mat_id, + num_fills, + num_elems, + num_nodes, + rk_num_bins); + // --------------------------------------------- + + + // ---------------------------------------------------------------- + // Walk over the mesh and find dimensions of material arrays + // ---------------------------------------------------------------- + const size_t num_mats = Materials.num_mats; // the number of materials on the mesh + + // a counter for the Material index spaces + DCArrayKokkos num_elems_saved_for_mat(num_mats); + + for(int mat_id=0; mat_id (num_mats); + + State.MaterialPoints = CArray (num_mats); + State.MaterialCorners = CArray (num_mats); + // zones not needed with SGH + + + // for ALE SGH, add a buffer to num_elems_for_mat, like 10% of num_elems up to num_elems. + for(int mat_id=0; mat_id& voxel_elem_mat_id, + const DCArrayKokkos& region_fills, + const ViewCArrayKokkos & mesh_coords) const { + + // default is not to fill the element + size_t fill_this = 0; + + + // for shapes with an origin (e.g., sphere and circle), accounting for the origin + double dist_x = mesh_coords(0) - region_fills(f_id).origin[0]; + double dist_y = mesh_coords(1) - region_fills(f_id).origin[1]; + double dist_z = mesh_coords(2) - region_fills(f_id).origin[2]; + + // spherical radius + double radius = sqrt(dist_x * dist_x + + dist_y * dist_y + + dist_z * dist_z); + + // cylindrical radius + double radius_cyl = sqrt(dist_x * dist_x + + dist_y * dist_y); + + + // check to see if this element should be filled + switch (region_fills(f_id).volume) { + case region::global: + { + fill_this = 1; + break; + } + case region::box: + { + + double x_lower_bound = region_fills(f_id).x1; + double x_upper_bound = region_fills(f_id).x2; + + double y_lower_bound = region_fills(f_id).y1; + double y_upper_bound = region_fills(f_id).y2; + + double z_lower_bound = region_fills(f_id).z1; + double z_upper_bound = region_fills(f_id).z2; + + + if (mesh_coords(0) >= x_lower_bound && mesh_coords(0) <= x_upper_bound && + mesh_coords(1) >= y_lower_bound && mesh_coords(1) <= y_upper_bound && + mesh_coords(2) >= z_lower_bound && mesh_coords(2) <= z_upper_bound) { + fill_this = 1; + } + break; + } + case region::cylinder: + { + if (radius_cyl >= region_fills(f_id).radius1 + && radius_cyl <= region_fills(f_id).radius2) { + fill_this = 1; + } + break; + } + case region::sphere: + { + if (radius >= region_fills(f_id).radius1 + && radius <= region_fills(f_id).radius2) { + fill_this = 1; + } + break; + } + + case region::readVoxelFile: + { + + fill_this = 0; // default is no, don't fill it + + // find the closest element in the voxel mesh to this element + double i0_real = (mesh_coords(0) - orig_x - region_fills(f_id).origin[0]) / (voxel_dx); + double j0_real = (mesh_coords(1) - orig_y - region_fills(f_id).origin[1]) / (voxel_dy); + double k0_real = (mesh_coords(2) - orig_z - region_fills(f_id).origin[2]) / (voxel_dz); + + int i0 = (int)i0_real; + int j0 = (int)j0_real; + int k0 = (int)k0_real; + + // look for the closest element in the voxel mesh + int elem_id0 = get_id_device(i0, j0, k0, voxel_num_i, voxel_num_j); + + // if voxel mesh overlaps this mesh, then fill it if =1 + if (elem_id0 < voxel_elem_mat_id.size() && elem_id0 >= 0 && + i0 >= 0 && j0 >= 0 && k0 >= 0 && + i0 < voxel_num_i && j0 < voxel_num_j && k0 < voxel_num_k) { + // voxel mesh elem values = 0 or 1 + fill_this = voxel_elem_mat_id(elem_id0); // values from file + + } // end if + + break; + + } // end case + case region::no_volume: + { + fill_this = 0; // default is no, don't fill it + + break; + } + default: + { + fill_this = 0; // default is no, don't fill it + + break; + } + + } // end of switch + + + return fill_this; + +} // end function + + + +///////////////////////////////////////////////////////////////////////////// +/// +/// \fn paint_gauss_den_sie +/// +/// \brief a function to paint den and sie on the Gauss points of the mesh +/// +/// \param Materials holds the material models and global parameters +/// \param mesh is the simulation mesh +/// \param GaussPoint_den is density at the GaussPoints on the mesh +/// \param GaussPoint_sie is specific internal energy at the GaussPoints on the mesh +/// \param elem_mat_id is the material id in an element +/// \param region_fills are the instructures to paint state on the mesh +/// \param node_vel is the nodal velocity array +/// \param elem_coords is the geometric center of the element +/// \param elem_gid is the element global mesh index +/// \param f_id is fill instruction +/// +///////////////////////////////////////////////////////////////////////////// +KOKKOS_FUNCTION +void paint_gauss_den_sie(const Material_t& Material, + const mesh_t& mesh, + const CArrayKokkos & GaussPoint_den, + const CArrayKokkos & GaussPoint_sie, + const CArrayKokkos & elem_mat_id, + const DCArrayKokkos& region_fills, + const ViewCArrayKokkos & elem_coords, + const double elem_gid, + const size_t f_id){ + + // the material id + size_t mat_id = region_fills(f_id).material_id; + + // --- material_id in elem --- + elem_mat_id(elem_id) = mat_id; + + // loop over the Gauss points in the element + { + const size_t gauss_gid = elem_gid; // 1 gauss point per element + + // add test problem state setups here + if (region_fills(f_id).velocity == init_conds::tg_vortex) { + + GaussPoint_den(gauss_gid) = 1.0; + + double pres = 0.25 * (cos(2.0 * PI * elem_coords(0)) + + cos(2.0 * PI * elem_coords(1)) ) + 1.0; + + // p = rho*ie*(gamma - 1) + // makes sure index 0 matches the gamma in the gamma law function + double gamma = Materials.eos_global_vars(mat_id,0); + GaussPoint_sie(gauss_gid) = + pres / (GaussPoint_den(gauss_gid) * (gamma - 1.0)); + } // end + // add user initialization here + else{ + + // --- density --- + GaussPoint_den(gauss_gid) = region_fills(f_id).den; + + // --- specific internal energy --- + GaussPoint_sie(gauss_gid) = region_fills(f_id).sie; + + } // end if + + } // end loop over guass points in element' + + // done setting the element state + +} // end function + + +///////////////////////////////////////////////////////////////////////////// +/// +/// \fn paint_node_vel +/// +/// \brief a function to paint a velocity field on the nodes of the mesh +/// +/// \param mesh is the simulation mesh +/// \param node_vel is the nodal velocity array +/// \param node_coords are the coordinates of the nodes +/// \param elem_gid is the element global mesh index +/// \param f_id is fill instruction +/// \param rk_num_bins is time integration storage level +/// +///////////////////////////////////////////////////////////////////////////// +KOKKOS_FUNCTION +void paint_node_vel(const DCArrayKokkos& region_fills, + const DCArrayKokkos& node_vel, + const DCArrayKokkos& node_coords, + const double elem_gid, + const size_t f_id, + const size_t rk_num_bins){ + + // save velocity at all rk_levels + for(size_t rk_level=0; rk_level 1.0e-14) { + dir[dim] /= (radius_val); + } + else{ + dir[dim] = 0.0; + } + } // end for + + node_vel(rk_level, node_gid, 0) = region_fills(f_id).speed * dir[0]; + node_vel(rk_level, node_gid, 1) = region_fills(f_id).speed * dir[1]; + if (mesh.num_dims == 3) { + node_vel(rk_level, node_gid, 2) = 0.0; + } + + break; + } + case init_conds::spherical: + { + // Setting up spherical + double dir[3]; + dir[0] = 0.0; + dir[1] = 0.0; + dir[2] = 0.0; + double radius_val = 0.0; + + for (int dim = 0; dim < 3; dim++) { + dir[dim] = node_coords(rk_level, node_gid, dim); + radius_val += node_coords(rk_level, node_gid, dim) * node_coords(rk_level, node_gid, dim); + } // end for + radius_val = sqrt(radius_val); + + for (int dim = 0; dim < 3; dim++) { + if (radius_val > 1.0e-14) { + dir[dim] /= (radius_val); + } + else{ + dir[dim] = 0.0; + } + } // end for + + node_vel(rk_level, node_gid, 0) = region_fills(f_id).speed * dir[0]; + node_vel(rk_level, node_gid, 1) = region_fills(f_id).speed * dir[1]; + if (mesh.num_dims == 3) { + node_vel(rk_level, node_gid, 2) = region_fills(f_id).speed * dir[2]; + } + + break; + } + case init_conds::radial_linear: + { + printf("**** Radial_linear initial conditions not yet supported ****\n"); + break; + } + case init_conds::spherical_linear: + { + printf("**** spherical_linear initial conditions not yet supported ****\n"); + break; + } + case init_conds::tg_vortex: + { + node_vel(rk_level, node_gid, 0) = sin(PI * node_coords(rk_level, node_gid, 0)) * + cos(PI * node_coords(rk_level, node_gid, 1)); + node_vel(rk_level, node_gid, 1) = -1.0 * cos(PI * node_coords(rk_level, node_gid, 0)) * + sin(PI * node_coords(rk_level, node_gid, 1)); + if (mesh.num_dims == 3) { + node_vel(rk_level, node_gid, 2) = 0.0; + } + + break; + } + + case init_conds::no_ic_vel: + { + // no velocity + node_vel(rk_level, node_gid, 0) = 0.0; + node_vel(rk_level, node_gid, 1) = 0.0; + if (mesh.num_dims == 3) { + node_vel(rk_level, node_gid, 2) = 0.0; + } + + break; + } + default: + { + // no velocity + node_vel(rk_level, node_gid, 0) = 0.0; + node_vel(rk_level, node_gid, 1) = 0.0; + if (mesh.num_dims == 3) { + node_vel(rk_level, node_gid, 2) = 0.0; + } + + break; + } + } // end of switch + + } // end loop over rk_num_bins + + + // done setting the velocity +} + + +///////////////////////////////////////////////////////////////////////////// +/// +/// \fn fill_regions_sgh +/// +/// \brief a function to paint den, sie, vel, and mat_ids on the mesh +/// The arrays populated (on host and device) are: +/// elem_mat_id +/// GaussPoint_den +/// GaussPoint_sie +/// node_vel +/// +/// \param Materials holds the material models and global parameters +/// \param mesh is the simulation mesh +/// \param node_coords are the coordinates of the nodes +/// \param node_vel is the nodal velocity array +/// \param region_fills are the instructures to paint state on the mesh +/// \param voxel_elem_mat_id are the voxel values on a structured i,j,k mesh +/// \param GaussPoint_den is density at the GaussPoints on the mesh +/// \param GaussPoint_sie is specific internal energy at the GaussPoints on the mesh +/// \param elem_mat_id is the material id in an element +/// \param num_fills is number of fill instruction +/// \param num_elems is number of elements on the mesh +/// \param num_nodes is number of nodes on the mesh +/// \param rk_num_bins is number of time integration storage bins +/// +///////////////////////////////////////////////////////////////////////////// +void fill_regions_sgh(const Material_t& Materials, + const mesh_t& mesh, + const DCArrayKokkos& node_coords, + const DCArrayKokkos& node_vel, + const DCArrayKokkos& region_fills, + const DCArrayKokkos& voxel_elem_mat_id, + const CArrayKokkos & GaussPoint_den, + const CArrayKokkos & GaussPoint_sie, + const CArrayKokkos & elem_mat_id, + const size_t num_fills, + const size_t num_elems, + const size_t num_nodes, + const size_t rk_num_bins){ + + + // loop over the fill instructions + for (size_t f_id = 0; f_id < num_fills; f_id++) { + + // ---- + // voxel mesh setup + if (read_voxel_file.host(f_id) == region::readVoxelFile) + { + // read voxel mesh to get the values in the fcn interface + user_voxel_init(voxel_elem_mat_id, + voxel_dx, voxel_dy, voxel_dz, + orig_x, orig_y, orig_z, + voxel_num_i, voxel_num_j, voxel_num_k, + region_fills(f_id).scale_x, + region_fills(f_id).scale_y, + region_fills(f_id).scale_z, + region_fills(f_id).file_path); + + // copy values read from file to device + voxel_elem_mat_id.update_device(); + } // endif + // add else if for other mesh reads including STL-2-voxel + + + // parallel loop over elements in mesh + FOR_ALL(elem_gid, 0, num_elems, { + + // calculate the coordinates and radius of the element + double elem_coords_1D[3]; // note:initialization with a list won't work + ViewCArrayKokkos elem_coords(&elem_coords_1D[0], 3); + elem_coords(0) = 0.0; + elem_coords(1) = 0.0; + elem_coords(2) = 0.0; + + // get the coordinates of the element center (using rk_level=1 or node coords) + for (int node_lid = 0; node_lid < mesh.num_nodes_in_elem; node_lid++) { + elem_coords(0) += node.coords(1, mesh.nodes_in_elem(elem_gid, node_lid), 0); + elem_coords(1) += node.coords(1, mesh.nodes_in_elem(elem_gid, node_lid), 1); + if (mesh.num_dims == 3) { + elem_coords(2) += node.coords(1, mesh.nodes_in_elem(elem_gid, node_lid), 2); + } + else{ + elem_coords(2) = 0.0; + } + } // end loop over nodes in element + elem_coords(0) = (elem_coords(0) / mesh.num_nodes_in_elem); + elem_coords(1) = (elem_coords(1) / mesh.num_nodes_in_elem); + elem_coords(2) = (elem_coords(2) / mesh.num_nodes_in_elem); + + + // calc if we are to fill this element + size_t fill_this = fill_geometric_region(mesh, voxel_elem_mat_id, region_fills, elem_coords); + + + // paint the material state on the element if fill_this=1 + if (fill_this == 1) { + + // default sgh paint + paint_gauss_den_sie(Material, + mesh, + GaussPoint_den, + GaussPoint_sie, + elem_mat_id, + region_fills, + elem_gid, + f_id); + + // add user defined paint here + // user_defined_sgh_state(); + + } // end if fill + + }); // end FOR_ALL element loop + Kokkos::fence(); + + + // parallel loop over nodes in mesh + FOR_ALL(node_gid, 0, num_nodes, { + + // make a view to pass to fill and paint functions (using rk_level 1 for node coords) + ViewCArrayKokkos coords(&node_coords(1,node_gid,0), 3); + + // calc if we are to fill this element + size_t fill_this = fill_geometric_region(mesh, voxel_elem_mat_id, region_fills, coords); + + // paint the material state on the node if fill_this=1 + if (fill_this == 1) { + + // default sgh paint + paint_node_vel(Material, + mesh, + region_fills, + node_vel, + coords, + elem_gid, + f_id, + rk_num_bins); + + // add user defined paint here + // user_defined_vel_state(); + + } // end if fill + + }); // end FOR_ALL node loop + Kokkos::fence(); + + } // end for loop over fills + + + elem_mat_id.update_host(); + GaussPoint_den.update_host(); + GaussPoint_sie.update_host(); + Kokkos::fence(); + +} // end SGH fill regions + + +///////////////////////////////////////////////////////////////////////////// +/// +/// \fn init_press_sspd_stress +/// +/// \brief a function to initialize pressure, sound speed and stress +/// +/// \param Materials holds the material models and global parameters +/// \param mesh is the simulation mesh +/// \param GaussPoint_den is density at the GaussPoints on the mesh +/// \param GaussPoint_pres is pressure at the GaussPoints on the mesh +/// \param GaussPoint_stress is stress at the GaussPoints on the mesh +/// \param GaussPoint_sspd is sound speed at the GaussPoints on the mesh +/// \param GaussPoint_sie is specific internal energy at the GaussPoints on the mesh +/// \param GaussPoint_statev are the state variables at the GaussPoints on the mesh +/// \param num_mat_pts is the number of material points for mat_id +/// \param mat_id is material id +/// \param rk_num_bins is number of time integration storage bins +/// +///////////////////////////////////////////////////////////////////////////// +void init_press_sspd_stress(const Material_t& Materials, + const mesh_t& mesh, + const DCArrayKokkos& MaterialPoints_den, + const DCArrayKokkos& MaterialPoints_pres, + const DCArrayKokkos& MaterialPoints_stress, + const DCArrayKokkos& MaterialPoints_sspd, + const DCArrayKokkos& MaterialPoints_sie, + const DCArrayKokkos& MaterialPoints_statev, + const size_t rk_num_bins, + const size_t num_mat_pts, + const size_t mat_id){ + + + // ------- + // the call to the model initialization goes here + // ------- + + // --- pressure and sound speed --- + // loop over the material points + FOR_ALL(mat_point_lid, 0, num_mat_pts, { + + // --- Pressure --- + Materials.MaterialFunctions(mat_id).calc_pressure( + MaterialPoints_pres, + MaterialPoints_stress, + mat_point_lid, + mat_id, + MaterialPoints_statev, + MaterialPoints_sspd, + MaterialPoints_den(mat_point_lid), + MaterialPoints_sie(0, mat_point_lid), + Materials.eos_global_vars); + + // --- Sound Speed --- + Materials.MaterialFunctions(mat_id).calc_sound_speed( + State.MaterialPoints_pres, + State.MaterialPoints_stress, + mat_point_lid, + mat_id, + State.MaterialPoints_statev, + State.MaterialPoints_sspd, + State.MaterialPoints_den(mat_point_lid), + State.MaterialPoints_sie(0, mat_point_lid), + Materials.eos_global_vars); + }); // end pressure and sound speed + + + // --- stress tensor --- + for(size_t rk_level=0; rk_level& node_mass, + const DCArrayKokkos& corner_mass){ + + // calculate the nodal mass + FOR_ALL(node_gid, 0, mesh.num_nodes, { + node_mass(node_gid) = 0.0; + }); // end parallel over nodes + + FOR_ALL(corner_gid, 0, mesh.num_corners, { + corner_mass(corner_gid) = 0.0; + }); // end parallel over corners + +} // end setting masses equal to zero + + +///////////////////////////////////////////////////////////////////////////// +/// +/// \fn init_press_sspd_stress +/// +/// \brief a function to initialize pressure, sound speed and stress +/// +/// \param Materials holds the material models and global parameters +/// \param mesh is the simulation mesh +/// \param node_coords are the nodal coordinates of the mesh +/// \param node_mass is mass of the node +/// \param corner_mass is corner mass +/// \param MaterialPoints_mass is the mass at the material point for mat_id +/// \param num_mat_elems is the number of material elements for mat_id +/// +///////////////////////////////////////////////////////////////////////////// +void calc_corner_node_masses(const Material_t& Materials, + const mesh_t& mesh, + const DCArrayKokkos& node_coords, + const DCArrayKokkos& node_mass, + const DCArrayKokkos& corner_mass, + const DCArrayKokkos& MaterialPoints_mass, + const size_t num_mat_elems){ + + + FOR_ALL(mat_elem_lid, 0, num_mat_elems, { + + // get elem gid + size_t elem_gid = MaterialToMeshMaps_elem(mat_elem_lid); + + // calculate the fraction of matpt mass to scatter to each corner + double corner_frac = 1.0/((double)mesh.num_nodes_in_elem); // =1/8 + + // partion the mass to the corners + for(corner_lid=0; corner_lid(); @@ -799,6 +791,24 @@ void parse_mesh_input(Yaml::Node& root, mesh_input_t& mesh_input) } throw std::runtime_error("**** Mesh Not Understood ****"); } + + + + // ----------------------------------------------- + // check for consistency in input settings + + if (mesh_input.source == mesh_input::file && mesh_input.file_path.empty()) { + std::cout << "ERROR: When the mesh source is a file, a file_path must be set to point to the mesh file" << std::endl; + std::cout << "A mesh can either be generated or read in from a file, but not both" << std::endl; + } + + if (mesh_input.source == mesh_input::generate) { + std::cout << "ERROR: When the mesh source is set to generate, a mesh file cannot be passed in" << std::endl; + exit(0); + } + // ----------------------------------------------- + + } // end user_mesh_inputs } // end of parse mesh options @@ -1325,7 +1335,8 @@ void parse_regions(Yaml::Node& root, DCArrayKokkos& region_fills) std::cout << "\tfile_path = " << path << std::endl; } - region_fills(reg_id).file_path = path; // saving the absolute file path + // absolute path to file or local to the director where exe is run + region_fills(reg_id).file_path = path; } // end file path // diff --git a/single-node-refactor/src/material_models/eos/gamma_law_eos.h b/single-node-refactor/src/material_models/eos/gamma_law_eos.h index fb6e37080..3ff200b66 100644 --- a/single-node-refactor/src/material_models/eos/gamma_law_eos.h +++ b/single-node-refactor/src/material_models/eos/gamma_law_eos.h @@ -73,7 +73,7 @@ namespace GammaLawGasEOSModel { // host side function static void initialize(const DCArrayKokkos& elem_pres, const DCArrayKokkos& elem_stress, - const size_t elem_gid, + const size_t mat_pt_lid, const size_t mat_id, const DCArrayKokkos& elem_sspd, const double den, @@ -90,7 +90,7 @@ namespace GammaLawGasEOSModel { KOKKOS_FUNCTION static void calc_pressure(const DCArrayKokkos& elem_pres, const DCArrayKokkos& elem_stress, - const size_t elem_gid, + const size_t mat_pt_lid, const size_t mat_id, const DCArrayKokkos& elem_state_vars, const DCArrayKokkos& elem_sspd, @@ -102,7 +102,7 @@ namespace GammaLawGasEOSModel { double gamma = eos_global_vars(mat_id, VarNames::gamma); // pressure - elem_pres(elem_gid) = (gamma - 1.0) * sie * den; + elem_pres(mat_pt_lid) = (gamma - 1.0) * sie * den; return; } // end func @@ -111,7 +111,7 @@ namespace GammaLawGasEOSModel { KOKKOS_FUNCTION static void calc_sound_speed(const DCArrayKokkos& elem_pres, const DCArrayKokkos& elem_stress, - const size_t elem_gid, + const size_t mat_pt_lid, const size_t mat_id, const DCArrayKokkos& elem_state_vars, const DCArrayKokkos& elem_sspd, @@ -125,7 +125,7 @@ namespace GammaLawGasEOSModel { // sound speed - elem_sspd(elem_gid) = fmax(sqrt(gamma * (gamma - 1.0) * sie), csmin); + elem_sspd(mat_pt_lid) = fmax(sqrt(gamma * (gamma - 1.0) * sie), csmin); return; diff --git a/single-node-refactor/src/material_models/eos/no_eos.h b/single-node-refactor/src/material_models/eos/no_eos.h index 9f71f3b19..cfe016d21 100644 --- a/single-node-refactor/src/material_models/eos/no_eos.h +++ b/single-node-refactor/src/material_models/eos/no_eos.h @@ -58,7 +58,7 @@ namespace NoEOSModel { KOKKOS_FUNCTION static void calc_pressure(const DCArrayKokkos& elem_pres, const DCArrayKokkos& elem_stress, - const size_t elem_gid, + const size_t mat_pt_lid, const size_t mat_id, const DCArrayKokkos& elem_state_vars, const DCArrayKokkos& elem_sspd, @@ -72,7 +72,7 @@ namespace NoEOSModel { KOKKOS_FUNCTION static void calc_sound_speed(const DCArrayKokkos& elem_pres, const DCArrayKokkos& elem_stress, - const size_t elem_gid, + const size_t mat_pt_lid, const size_t mat_id, const DCArrayKokkos& elem_state_vars, const DCArrayKokkos& elem_sspd, diff --git a/single-node-refactor/src/material_models/eos/user_defined_eos.h b/single-node-refactor/src/material_models/eos/user_defined_eos.h index 10a7f102b..c1908f903 100644 --- a/single-node-refactor/src/material_models/eos/user_defined_eos.h +++ b/single-node-refactor/src/material_models/eos/user_defined_eos.h @@ -62,7 +62,7 @@ namespace UserDefinedEOSModel KOKKOS_FUNCTION static void calc_pressure(const DCArrayKokkos& elem_pres, const DCArrayKokkos& elem_stress, - const size_t elem_gid, + const size_t mat_pt_lid, const size_t mat_id, const DCArrayKokkos& elem_state_vars, const DCArrayKokkos& elem_sspd, @@ -84,7 +84,7 @@ namespace UserDefinedEOSModel KOKKOS_FUNCTION static void calc_sound_speed(const DCArrayKokkos& elem_pres, const DCArrayKokkos& elem_stress, - const size_t elem_gid, + const size_t mat_pt_lid, const size_t mat_id, const DCArrayKokkos& elem_state_vars, const DCArrayKokkos& elem_sspd, @@ -132,7 +132,7 @@ namespace NotionalEOSModel { KOKKOS_FUNCTION static void calc_pressure(const DCArrayKokkos& elem_pres, const DCArrayKokkos& elem_stress, - const size_t elem_gid, + const size_t mat_pt_lid, const size_t mat_id, const DCArrayKokkos& elem_state_vars, const DCArrayKokkos& elem_sspd, @@ -141,7 +141,7 @@ namespace NotionalEOSModel { const RaggedRightArrayKokkos &eos_global_vars) { // pressure of a void is 0 - elem_pres(elem_gid) = 0.0; + elem_pres(mat_pt_lid) = 0.0; return; } // end func @@ -149,7 +149,7 @@ namespace NotionalEOSModel { KOKKOS_FUNCTION static void calc_sound_speed(const DCArrayKokkos& elem_pres, const DCArrayKokkos& elem_stress, - const size_t elem_gid, + const size_t mat_pt_lid, const size_t mat_id, const DCArrayKokkos& elem_state_vars, const DCArrayKokkos& elem_sspd, @@ -159,7 +159,7 @@ namespace NotionalEOSModel { { // sound speed of a void is 0, machine small must be used for CFL calculation - elem_sspd(elem_gid) = 1.0e-32; + elem_sspd(mat_pt_lid) = 1.0e-32; return; } // end func diff --git a/single-node-refactor/src/material_models/eos/void_eos.h b/single-node-refactor/src/material_models/eos/void_eos.h index 745f59e61..d736d8aba 100644 --- a/single-node-refactor/src/material_models/eos/void_eos.h +++ b/single-node-refactor/src/material_models/eos/void_eos.h @@ -58,7 +58,7 @@ namespace VoidEOSModel { KOKKOS_FUNCTION static void calc_pressure(const DCArrayKokkos& elem_pres, const DCArrayKokkos& elem_stress, - const size_t elem_gid, + const size_t mat_pt_lid, const size_t mat_id, const DCArrayKokkos& elem_state_vars, const DCArrayKokkos& elem_sspd, @@ -67,7 +67,7 @@ namespace VoidEOSModel { const RaggedRightArrayKokkos &eos_global_vars) { // pressure of a void is 0 - elem_pres(elem_gid) = 0.0; + elem_pres(mat_pt_lid) = 0.0; return; } // end func @@ -75,7 +75,7 @@ namespace VoidEOSModel { KOKKOS_FUNCTION static void calc_sound_speed(const DCArrayKokkos& elem_pres, const DCArrayKokkos& elem_stress, - const size_t elem_gid, + const size_t mat_pt_lid, const size_t mat_id, const DCArrayKokkos& elem_state_vars, const DCArrayKokkos& elem_sspd, @@ -85,7 +85,7 @@ namespace VoidEOSModel { { // sound speed of a void is 0, machine small must be used for CFL calculation - elem_sspd(elem_gid) = 1.0e-32; + elem_sspd(mat_pt_lid) = 1.0e-32; return; } // end func diff --git a/single-node-refactor/src/material_models/strength/no_strength.h b/single-node-refactor/src/material_models/strength/no_strength.h index 957c9c37f..35ca884e4 100644 --- a/single-node-refactor/src/material_models/strength/no_strength.h +++ b/single-node-refactor/src/material_models/strength/no_strength.h @@ -67,7 +67,7 @@ namespace UserDefinedStrengthModel { KOKKOS_FUNCTION static void calc_stress(const DCArrayKokkos& elem_pres, const DCArrayKokkos& elem_stress, - const size_t elem_gid, + const size_t mat_pt_lid, const size_t mat_id, const DCArrayKokkos& elem_state_vars, const DCArrayKokkos& elem_sspd, @@ -102,7 +102,7 @@ namespace NoStrengthModel { KOKKOS_FUNCTION static void calc_stress(const DCArrayKokkos& elem_pres, const DCArrayKokkos& elem_stress, - const size_t elem_gid, + const size_t mat_pt_lid, const size_t mat_id, const DCArrayKokkos& elem_state_vars, const DCArrayKokkos& elem_sspd, @@ -146,7 +146,7 @@ namespace NotionalStrengthModel { KOKKOS_FUNCTION static void calc_stress(const DCArrayKokkos& elem_pres, const DCArrayKokkos& elem_stress, - const size_t elem_gid, + const size_t mat_pt_lid, const size_t mat_id, const DCArrayKokkos& elem_state_vars, const DCArrayKokkos& elem_sspd, diff --git a/single-node-refactor/src/material_models/strength/user_defined_strength.h b/single-node-refactor/src/material_models/strength/user_defined_strength.h index 8922cb007..c194c8a1a 100644 --- a/single-node-refactor/src/material_models/strength/user_defined_strength.h +++ b/single-node-refactor/src/material_models/strength/user_defined_strength.h @@ -67,7 +67,7 @@ namespace UserDefinedStrengthModel { KOKKOS_FUNCTION static void calc_stress(const DCArrayKokkos& elem_pres, const DCArrayKokkos& elem_stress, - const size_t elem_gid, + const size_t mat_pt_lid, const size_t mat_id, const DCArrayKokkos& elem_state_vars, const DCArrayKokkos& elem_sspd, @@ -120,7 +120,7 @@ namespace NotionalStrengthModel { KOKKOS_FUNCTION static void calc_stress(const DCArrayKokkos& elem_pres, const DCArrayKokkos& elem_stress, - const size_t elem_gid, + const size_t mat_pt_lid, const size_t mat_id, const DCArrayKokkos& elem_state_vars, const DCArrayKokkos& elem_sspd, From 806f96fc0651ec004e62df0d88a519890a1797e4 Mon Sep 17 00:00:00 2001 From: Nathaniel Morgan Date: Fri, 26 Jul 2024 16:15:16 -0600 Subject: [PATCH 084/233] WIP material centric implementation, ensight outputs --- .../src/Solvers/SGH_solver/src/sgh_solve.cpp | 12 ++- single-node-refactor/src/common/io_utils.h | 77 ++++++++++++------- 2 files changed, 59 insertions(+), 30 deletions(-) diff --git a/single-node-refactor/src/Solvers/SGH_solver/src/sgh_solve.cpp b/single-node-refactor/src/Solvers/SGH_solver/src/sgh_solve.cpp index d76a7879c..d7cf6bc55 100644 --- a/single-node-refactor/src/Solvers/SGH_solver/src/sgh_solve.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver/src/sgh_solve.cpp @@ -344,11 +344,11 @@ void SGH::execute(SimulationParameters_t& SimulationParamaters, dt, mesh.num_dims, mesh.num_nodes, - node.coords, - node.vel); + State.node.coords, + State.node.vel); // ---- Calculate cell volume for next time step ---- - geometry::get_vol(GaussPoints.vol, node.coords, mesh); + geometry::get_vol(State.GaussPoints.vol, State.node.coords, mesh); // ---- Calculate MaterialPoints state (den, pres, sound speed, stress) for next time step ---- if (mesh.num_dims == 2) { @@ -425,7 +425,11 @@ void SGH::execute(SimulationParameters_t& SimulationParamaters, // write outputs if (write == 1) { printf("Writing outputs to file at %f \n", graphics_time); - mesh_writer.write_mesh(mesh, MaterialPoints, GaussPoints, node, corner, SimulationParamaters, time_value, graphics_times); + mesh_writer.write_mesh(mesh, + State, + SimulationParamaters, + time_value, + graphics_times); graphics_time = time_value + graphics_dt_ival; diff --git a/single-node-refactor/src/common/io_utils.h b/single-node-refactor/src/common/io_utils.h index b749d531d..38299ac17 100644 --- a/single-node-refactor/src/common/io_utils.h +++ b/single-node-refactor/src/common/io_utils.h @@ -916,29 +916,34 @@ class MeshWriter /// ///////////////////////////////////////////////////////////////////////////// void write_ensight(mesh_t& mesh, - MaterialPoint_t& MaterialPoints, - GaussPoint_t& GaussPoints, - node_t& node, - corner_t& corner, + state_t& state, SimulationParameters_t& SimulationParamaters, double time_value, CArray graphics_times) { - // Update host data - MaterialPoints.den.update_host(); - MaterialPoints.pres.update_host(); - MaterialPoints.stress.update_host(); - MaterialPoints.sspd.update_host(); - MaterialPoints.sie.update_host(); - GaussPoints.vol.update_host(); - MaterialPoints.mass.update_host(); - GaussPoints.mat_id.update_host(); - - node.coords.update_host(); - node.vel.update_host(); - node.mass.update_host(); + // ---- Update host data ---- + + for(int mat_id=0; mat_id vec_fields(num_nodes, num_vec_vars, 3); @@ -1249,7 +1274,7 @@ class MeshWriter ///////////////////////////////////////////////////////////////////////////// /// - /// \fn write_ensight + /// \fn write_vtk /// /// \brief Writes a vtk output file /// From fa6379a32495ee853e123ae7b534063dc9f54842 Mon Sep 17 00:00:00 2001 From: Nathaniel Morgan Date: Fri, 26 Jul 2024 20:11:22 -0600 Subject: [PATCH 085/233] fixing bugs --- .../Solvers/SGH_solver/include/sgh_solver.h | 78 +++++++++-------- .../src/Solvers/SGH_solver/src/energy_sgh.cpp | 2 +- .../src/Solvers/SGH_solver/src/force_sgh.cpp | 8 +- .../src/Solvers/SGH_solver/src/properties.cpp | 47 ++++++----- .../src/Solvers/SGH_solver/src/sgh_solve.cpp | 83 +++++++++++-------- single-node-refactor/src/common/io_utils.h | 2 +- single-node-refactor/src/common/state.h | 64 +++++++------- single-node-refactor/src/solver.h | 15 ++-- 8 files changed, 159 insertions(+), 140 deletions(-) diff --git a/single-node-refactor/src/Solvers/SGH_solver/include/sgh_solver.h b/single-node-refactor/src/Solvers/SGH_solver/include/sgh_solver.h index bb4618ec5..e0909d5ac 100644 --- a/single-node-refactor/src/Solvers/SGH_solver/include/sgh_solver.h +++ b/single-node-refactor/src/Solvers/SGH_solver/include/sgh_solver.h @@ -70,7 +70,8 @@ class SGH : public Solver // Initialize data specific to the SGH solver void initialize(SimulationParameters_t& SimulationParamaters, Material_t& Materials, - BoundaryCondition_t& Boundary) const override + BoundaryCondition_t& Boundary, + State_t& State) const override { } @@ -101,7 +102,7 @@ class SGH : public Solver Material_t& Materials, BoundaryCondition_t& Boundary, mesh_t& mesh, - STate_t& State) override; + State_t& State) override; ///////////////////////////////////////////////////////////////////////////// /// @@ -170,7 +171,7 @@ class SGH : public Solver const DCArrayKokkos& MaterialPoints_sspd, const DCArrayKokkos& MaterialPoints_statev, const DCArrayKokkos& MaterialCorners_force, - const corners_in_mat_t + const corners_in_mat_t, const DCArrayKokkos& MaterialToMeshMaps_elem, const size_t num_mat_elems, const size_t mat_id, @@ -194,7 +195,7 @@ class SGH : public Solver const DCArrayKokkos& MaterialPoints_sspd, const DCArrayKokkos& MaterialPoints_statev, const DCArrayKokkos& MaterialCorners_force, - const corners_in_mat_t + const corners_in_mat_t, const DCArrayKokkos& MaterialToMeshMaps_elem, const size_t num_mat_elems, const size_t mat_id, @@ -266,35 +267,40 @@ class SGH : public Solver const mesh_t& mesh, const DCArrayKokkos& node_coords, const DCArrayKokkos& node_vel, - DCArrayKokkos& MaterialPoints_den, - DCArrayKokkos& MaterialPoints_pres, - DCArrayKokkos& MaterialPoints_stress, - DCArrayKokkos& MaterialPoints_sspd, + const DCArrayKokkos& MaterialPoints_den, + const DCArrayKokkos& MaterialPoints_pres, + const DCArrayKokkos& MaterialPoints_stress, + const DCArrayKokkos& MaterialPoints_sspd, const DCArrayKokkos& MaterialPoints_sie, const DCArrayKokkos& GaussPoints_vol, const DCArrayKokkos& MaterialPoints_mass, - const DCArrayKokkos& GaussPoints_mat_id, const DCArrayKokkos& MaterialPoints_statev, const DCArrayKokkos& GaussPoints_eroded, + const DCArrayKokkos& MaterialToMeshMaps_elem, const double dt, - const double rk_alpha) const; + const double rk_alpha, + const size_t num_material_elems, + const size_t mat_id) const; void update_state2D( const Material_t& Materials, const mesh_t& mesh, const DCArrayKokkos& node_coords, const DCArrayKokkos& node_vel, - DCArrayKokkos& MaterialPoints_den, - DCArrayKokkos& MaterialPoints_pres, - DCArrayKokkos& MaterialPoints_stress, - DCArrayKokkos& MaterialPoints_sspd, + const DCArrayKokkos& MaterialPoints_den, + const DCArrayKokkos& MaterialPoints_pres, + const DCArrayKokkos& MaterialPoints_stress, + const DCArrayKokkos& MaterialPoints_sspd, const DCArrayKokkos& MaterialPoints_sie, const DCArrayKokkos& GaussPoints_vol, const DCArrayKokkos& MaterialPoints_mass, - const DCArrayKokkos& GaussPoints_mat_id, const DCArrayKokkos& MaterialPoints_statev, + const DCArrayKokkos& GaussPoints_eroded, + const DCArrayKokkos& MaterialToMeshMaps_elem, const double dt, - const double rk_alpha) const; + const double rk_alpha, + const size_t num_material_elems, + const size_t mat_id) const; // **** Functions defined in time_integration.cpp **** // // NOTE: Consider pulling up @@ -374,26 +380,26 @@ class SGH : public Solver const double rk_alpha); }; -calc_extensive_node_mass(CArrayKokkos& node_extensive_mass - CArrayKokkos& node_coords, - CArrayKokkos& node_mass, - double num_dims, - double num_nodes); - -calc_node_areal_mass(const mesh_t& mesh, - const DCArrayKokkos& node_coords, - CArrayKokkos node_extensive_mass, - double tiny); - -double sum_domain_internal_energy(DCArrayKokkos& MaterialPoints_mass, - DCArrayKokkos& MaterialPoints_sie, - size_t num_mat_points, - double &IE_sum); - -double sum_domain_kinetic_energy(DCArrayKokkos& node_vel, - DCArrayKokkos& node_coords, - DCArrayKokkos& node_mass, - mest_t& mesh); +void calc_extensive_node_mass(const CArrayKokkos& node_extensive_mass, + const CArrayKokkos& node_coords, + const CArrayKokkos& node_mass, + const double num_dims, + const double num_nodes); + +void calc_node_areal_mass(const mesh_t& mesh, + const DCArrayKokkos& node_coords, + const CArrayKokkos& node_extensive_mass, + double tiny); + +double sum_domain_internal_energy(const DCArrayKokkos& MaterialPoints_mass, + const DCArrayKokkos& MaterialPoints_sie, + const size_t num_mat_points, + const double &IE_sum); + +double sum_domain_kinetic_energy(const DCArrayKokkos& node_vel, + const DCArrayKokkos& node_coords, + const DCArrayKokkos& node_mass, + const mesh_t& mesh); #endif // end HEADER_H diff --git a/single-node-refactor/src/Solvers/SGH_solver/src/energy_sgh.cpp b/single-node-refactor/src/Solvers/SGH_solver/src/energy_sgh.cpp index 50422eecb..57a80d9ef 100644 --- a/single-node-refactor/src/Solvers/SGH_solver/src/energy_sgh.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver/src/energy_sgh.cpp @@ -67,7 +67,7 @@ void SGH::update_energy(const double rk_alpha, FOR_ALL(mat_elem_lid, 0, num_mat_elems, { // get elem gid - size_t elem_gid = State.MaterialToMeshMaps_elem(mat_elem_lid); + size_t elem_gid = MaterialToMeshMaps_elem(mat_elem_lid); double MaterialPoints_power = 0.0; diff --git a/single-node-refactor/src/Solvers/SGH_solver/src/force_sgh.cpp b/single-node-refactor/src/Solvers/SGH_solver/src/force_sgh.cpp index 736acb4ea..65e07281c 100644 --- a/single-node-refactor/src/Solvers/SGH_solver/src/force_sgh.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver/src/force_sgh.cpp @@ -87,7 +87,7 @@ void SGH::get_force(const Material_t& Materials, FOR_ALL(mat_elem_lid, 0, num_mat_elems, { // get elem gid - size_t elem_gid = State.MaterialToMeshMaps_elem(mat_elem_lid); + size_t elem_gid = MaterialToMeshMaps_elem(mat_elem_lid); const size_t num_dims = 3; const size_t num_nodes_in_elem = 8; @@ -402,7 +402,7 @@ void SGH::get_force(const Material_t& Materials, // --- call strength model --- Materials.MaterialFunctions(mat_id).calc_stress(MaterialPoints_pres, MaterialPoints_stress, - mat_elem_gid, + mat_elem_lid, mat_id, MaterialPoints_statev, MaterialPoints_sspd, @@ -450,7 +450,6 @@ void SGH::get_force_2D(const Material_t& Materials, const mesh_t& mesh, const DCArrayKokkos& GaussPoints_vol, const DCArrayKokkos& GaussPoints_div, - const DCArrayKokkos& GaussPoints_mat_id, const DCArrayKokkos& corner_force, const DCArrayKokkos& node_coords, const DCArrayKokkos& node_vel, @@ -474,7 +473,7 @@ void SGH::get_force_2D(const Material_t& Materials, FOR_ALL(mat_elem_lid, 0, num_mat_elems, { // get mesh elem gid - size_t elem_gid = State.MaterialToMeshMaps_elem(mat_elem_lid); + size_t elem_gid = MaterialToMeshMaps_elem(mat_elem_lid); //size_t guass_gid = elem_gid; // 1 gauss point per element @@ -777,7 +776,6 @@ void SGH::get_force_2D(const Material_t& Materials, // --- Update Stress --- // calculate the new stress at the next rk level, if it is a increment_based model - size_t mat_id = GaussPoints_mat_id(elem_gid); // increment_based elastic plastic model if (Materials.MaterialEnums(mat_id).StrengthType == model::incrementBased) { diff --git a/single-node-refactor/src/Solvers/SGH_solver/src/properties.cpp b/single-node-refactor/src/Solvers/SGH_solver/src/properties.cpp index 8fd15298a..a86442a50 100644 --- a/single-node-refactor/src/Solvers/SGH_solver/src/properties.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver/src/properties.cpp @@ -57,25 +57,28 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /// \param The current Runge Kutta integration alpha value /// ///////////////////////////////////////////////////////////////////////////// -void SGH::update_state(const Material_t& Materials, +void SGH::update_state( + const Material_t& Materials, const mesh_t& mesh, const DCArrayKokkos& node_coords, const DCArrayKokkos& node_vel, - DCArrayKokkos& MaterialPoints_den, - DCArrayKokkos& MaterialPoints_pres, - DCArrayKokkos& MaterialPoints_stress, - DCArrayKokkos& MaterialPoints_sspd, + const DCArrayKokkos& MaterialPoints_den, + const DCArrayKokkos& MaterialPoints_pres, + const DCArrayKokkos& MaterialPoints_stress, + const DCArrayKokkos& MaterialPoints_sspd, const DCArrayKokkos& MaterialPoints_sie, const DCArrayKokkos& GaussPoints_vol, const DCArrayKokkos& MaterialPoints_mass, - const DCArrayKokkos& GaussPoints_mat_id, const DCArrayKokkos& MaterialPoints_statev, const DCArrayKokkos& GaussPoints_eroded, + const DCArrayKokkos& MaterialToMeshMaps_elem, const double dt, - const double rk_alpha) const + const double rk_alpha, + const size_t num_material_elems, + const size_t mat_id) const { - // loop over all the elements in the mesh - FOR_ALL(mat_elem_lid, 0, num_mat_elems, { + // loop over all the elements the material lives in + FOR_ALL(mat_elem_lid, 0, num_material_elems, { // get elem gid size_t elem_gid = MaterialToMeshMaps_elem(mat_elem_lid); @@ -90,7 +93,6 @@ void SGH::update_state(const Material_t& Materials, // --- Density --- MaterialPoints_den(mat_elem_lid) = MaterialPoints_mass(mat_elem_lid) / GaussPoints_vol(elem_gid); - size_t mat_id = GaussPoints_mat_id(elem_gid); // --- Stress --- // state_based elastic plastic model @@ -226,20 +228,28 @@ void SGH::update_state2D(const Material_t& Materials, const mesh_t& mesh, const DCArrayKokkos& node_coords, const DCArrayKokkos& node_vel, - DCArrayKokkos& MaterialPoints_den, - DCArrayKokkos& MaterialPoints_pres, - DCArrayKokkos& MaterialPoints_stress, - DCArrayKokkos& MaterialPoints_sspd, + const DCArrayKokkos& MaterialPoints_den, + const DCArrayKokkos& MaterialPoints_pres, + const DCArrayKokkos& MaterialPoints_stress, + const DCArrayKokkos& MaterialPoints_sspd, const DCArrayKokkos& MaterialPoints_sie, const DCArrayKokkos& GaussPoints_vol, const DCArrayKokkos& MaterialPoints_mass, - const DCArrayKokkos& GaussPoints_mat_id, const DCArrayKokkos& MaterialPoints_statev, + const DCArrayKokkos& GaussPoints_eroded, + const DCArrayKokkos& MaterialToMeshMaps_elem, const double dt, - const double rk_alpha) const + const double rk_alpha, + const size_t num_material_elems, + const size_t mat_id) const { - // loop over all the elements in the mesh - FOR_ALL(elem_gid, 0, mesh.num_elems, { + + // loop over all the elements the material lives in + FOR_ALL(mat_elem_lid, 0, num_material_elems, { + + // get elem gid + size_t elem_gid = MaterialToMeshMaps_elem(mat_elem_lid); + const size_t num_dims = mesh.num_dims; const size_t num_nodes_in_elem = mesh.num_nodes_in_elem; @@ -249,7 +259,6 @@ void SGH::update_state2D(const Material_t& Materials, // --- Density --- MaterialPoints_den(elem_gid) = MaterialPoints_mass(elem_gid) / GaussPoints_vol(elem_gid); - size_t mat_id = GaussPoints_mat_id(elem_gid); // --- Stress --- // state_based elastic plastic model diff --git a/single-node-refactor/src/Solvers/SGH_solver/src/sgh_solve.cpp b/single-node-refactor/src/Solvers/SGH_solver/src/sgh_solve.cpp index d7cf6bc55..e209214c4 100644 --- a/single-node-refactor/src/Solvers/SGH_solver/src/sgh_solve.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver/src/sgh_solve.cpp @@ -324,7 +324,7 @@ void SGH::execute(SimulationParameters_t& SimulationParamaters, // mpi_coms(); for(int mat_id=0; mat_id graphics_times) diff --git a/single-node-refactor/src/common/state.h b/single-node-refactor/src/common/state.h index 381730337..4daa9955d 100644 --- a/single-node-refactor/src/common/state.h +++ b/single-node-refactor/src/common/state.h @@ -39,38 +39,7 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. using namespace mtr; -///////////////////////////////////////////////////////////////////////////// -/// -/// \struct state_t -/// -/// \brief Stores all state -/// -///////////////////////////////////////////////////////////////////////////// -struct State_t -{ - // --------------------------------------------------------------------- - // state data on mesh declarations - // --------------------------------------------------------------------- - node_t node; - GaussPoint_t GaussPoints; - corner_t corner; - // --------------------------------------------------------------------- - // material to mesh maps - // --------------------------------------------------------------------- - CArray& MaterialToMeshMaps; ///< access as MaterialToMeshMaps(mat_id).elem(mat_storage_lid) - corners_in_mat_t corners_in_mat_elem; ///< access the corner mat lid using (mat_elem_lid, corn_lid) - points_in_mat_t points_in_mat_elem; ///< for accessing e.g., guass points mat lid with arbitrary-order FE - zones_in_mat_t zones_in_mat_elem; ///< for accessing sub-zones mat lid with arbitrary-order FE - - // --------------------------------------------------------------------- - // material state, compressed, and sequentially accessed - // --------------------------------------------------------------------- - CArray& MaterialPoints; ///< access as MaterialPoints(mat_id).var(mat_pt) - CArray& MaterialCorners; ///< access as MaterialCorners(mat_id).var(mat_corner), not used with MPM - CArray& MaterialZones; ///< access as MaterialZones(mat_id).var(mat_zone), only used with arbitrary-order FE - -}; // end state_t @@ -241,7 +210,7 @@ struct MaterialCorner_t { this->force = DCArrayKokkos(num_corners_max, num_dims, "material_corner_force"); }; // end method -} +}; // end material corner @@ -415,6 +384,37 @@ struct points_in_mat_t }; }; +///////////////////////////////////////////////////////////////////////////// +/// +/// \struct state_t +/// +/// \brief Stores all state +/// +///////////////////////////////////////////////////////////////////////////// +struct State_t +{ + // --------------------------------------------------------------------- + // state data on mesh declarations + // --------------------------------------------------------------------- + node_t node; + GaussPoint_t GaussPoints; + corner_t corner; + // --------------------------------------------------------------------- + // material to mesh maps + // --------------------------------------------------------------------- + CArray& MaterialToMeshMaps; ///< access as MaterialToMeshMaps(mat_id).elem(mat_storage_lid) + corners_in_mat_t corners_in_mat_elem; ///< access the corner mat lid using (mat_elem_lid, corn_lid) + points_in_mat_t points_in_mat_elem; ///< for accessing e.g., guass points mat lid with arbitrary-order FE + zones_in_mat_t zones_in_mat_elem; ///< for accessing sub-zones mat lid with arbitrary-order FE + + // --------------------------------------------------------------------- + // material state, compressed, and sequentially accessed + // --------------------------------------------------------------------- + CArray& MaterialPoints; ///< access as MaterialPoints(mat_id).var(mat_pt) + CArray& MaterialCorners; ///< access as MaterialCorners(mat_id).var(mat_corner), not used with MPM + CArray& MaterialZones; ///< access as MaterialZones(mat_id).var(mat_zone), only used with arbitrary-order FE + +}; // end state_t #endif diff --git a/single-node-refactor/src/solver.h b/single-node-refactor/src/solver.h index 1c107e64e..cb58f36da 100644 --- a/single-node-refactor/src/solver.h +++ b/single-node-refactor/src/solver.h @@ -56,25 +56,20 @@ class Solver virtual void initialize(SimulationParameters_t& SimulationParamaters, Material_t& Materials, - BoundaryCondition_t& Boundary) const = 0; + BoundaryCondition_t& Boundary, + State_t& State) const = 0; virtual void setup(SimulationParameters_t& SimulationParamaters, Material_t& Materials, BoundaryCondition_t& Boundary, mesh_t& mesh, - node_t& node, - MaterialPoint_t& MaterialPoints, - GaussPoint_t& GaussPoints, - corner_t& corner) const = 0; + State_t& State) const = 0; virtual void execute(SimulationParameters_t& SimulationParamaters, Material_t& Materials, - BoundaryCondition_t& Boundary, + BoundaryCondition_t& BoundaryConditions, mesh_t& mesh, - node_t& node, - MaterialPoint_t& MaterialPoints, - GaussPoint_t& GaussPoints, - corner_t& corner) = 0; + State_t& State) = 0; virtual void finalize(SimulationParameters_t& SimulationParamaters, Material_t& Materials, From 3f32445f0accc8622f8c9f567381e8c2cf27214b Mon Sep 17 00:00:00 2001 From: Nathaniel Morgan Date: Sat, 27 Jul 2024 18:01:21 -0600 Subject: [PATCH 086/233] fixing bugs --- .../Solvers/SGH_solver/include/sgh_solver.h | 10 +- .../src/Solvers/SGH_solver/src/force_sgh.cpp | 34 +- .../src/Solvers/SGH_solver/src/properties.cpp | 532 +++++++++++------- .../src/Solvers/SGH_solver/src/sgh_solve.cpp | 75 +-- .../SGH_solver/src/time_integration.cpp | 2 +- single-node-refactor/src/common/io_utils.h | 62 +- single-node-refactor/src/common/material.h | 27 +- single-node-refactor/src/common/state.h | 12 +- single-node-refactor/src/driver.h | 10 +- single-node-refactor/src/input/parse_yaml.cpp | 13 +- .../material_models/erosion/basic_erosion.h | 22 +- .../src/material_models/erosion/no_erosion.h | 14 +- 12 files changed, 485 insertions(+), 328 deletions(-) diff --git a/single-node-refactor/src/Solvers/SGH_solver/include/sgh_solver.h b/single-node-refactor/src/Solvers/SGH_solver/include/sgh_solver.h index e0909d5ac..1c9ad6d31 100644 --- a/single-node-refactor/src/Solvers/SGH_solver/include/sgh_solver.h +++ b/single-node-refactor/src/Solvers/SGH_solver/include/sgh_solver.h @@ -381,20 +381,20 @@ class SGH : public Solver }; void calc_extensive_node_mass(const CArrayKokkos& node_extensive_mass, - const CArrayKokkos& node_coords, - const CArrayKokkos& node_mass, + const DCArrayKokkos& node_coords, + const DCArrayKokkos& node_mass, const double num_dims, const double num_nodes); void calc_node_areal_mass(const mesh_t& mesh, const DCArrayKokkos& node_coords, - const CArrayKokkos& node_extensive_mass, + const DCArrayKokkos& node_mass, + CArrayKokkos node_extensive_mass, double tiny); double sum_domain_internal_energy(const DCArrayKokkos& MaterialPoints_mass, const DCArrayKokkos& MaterialPoints_sie, - const size_t num_mat_points, - const double &IE_sum); + const size_t num_mat_points); double sum_domain_kinetic_energy(const DCArrayKokkos& node_vel, const DCArrayKokkos& node_coords, diff --git a/single-node-refactor/src/Solvers/SGH_solver/src/force_sgh.cpp b/single-node-refactor/src/Solvers/SGH_solver/src/force_sgh.cpp index 65e07281c..cfd4b95d0 100644 --- a/single-node-refactor/src/Solvers/SGH_solver/src/force_sgh.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver/src/force_sgh.cpp @@ -63,7 +63,7 @@ void SGH::get_force(const Material_t& Materials, const mesh_t& mesh, const DCArrayKokkos& GaussPoints_vol, const DCArrayKokkos& GaussPoints_div, - const DCArrayKokkos& GaussPoints_eroded, + const DCArrayKokkos& MaterialPoints_eroded, const DCArrayKokkos& corner_force, const DCArrayKokkos& node_coords, const DCArrayKokkos& node_vel, @@ -83,14 +83,26 @@ void SGH::get_force(const Material_t& Materials, const double dt, const double rk_alpha) const { + const size_t num_dims = 3; + const size_t num_nodes_in_elem = 8; + + + // set corner force to zero + FOR_ALL(corner_gid, 0, mesh.num_corners, { + for (int dim = 0; dim < num_dims; dim++) { + corner_force(corner_gid, dim) = 0.0; + } + }); // end parallel for corners + + + // --- calculate the forces acting on the nodes from the element --- FOR_ALL(mat_elem_lid, 0, num_mat_elems, { // get elem gid size_t elem_gid = MaterialToMeshMaps_elem(mat_elem_lid); - const size_t num_dims = 3; - const size_t num_nodes_in_elem = 8; + // total Cauchy stress double tau_array[9]; @@ -371,7 +383,7 @@ void SGH::get_force(const Material_t& Materials, size_t mat_corner_lid = corners_in_mat_elem(mat_elem_lid, corner_lid); // loop over dimensions and calc corner forces - if (GaussPoints_eroded(elem_gid) == true) { // material(mat_id).blank_mat_id) + if (MaterialPoints_eroded(mat_elem_lid) == true) { // material(mat_id).blank_mat_id) for (int dim = 0; dim < num_dims; dim++) { corner_force(corner_gid, dim) = 0.0; } @@ -469,6 +481,17 @@ void SGH::get_force_2D(const Material_t& Materials, const double dt, const double rk_alpha) const { + const size_t num_dims = 2; + const size_t num_nodes_in_elem = 4; + + // set corner force to zero + FOR_ALL(corner_gid, 0, mesh.num_corners, { + for (int dim = 0; dim < num_dims; dim++) { + corner_force(corner_gid, dim) = 0.0; + } + }); // end parallel for corners + + // --- calculate the forces acting on the nodes from the element --- FOR_ALL(mat_elem_lid, 0, num_mat_elems, { @@ -477,9 +500,6 @@ void SGH::get_force_2D(const Material_t& Materials, //size_t guass_gid = elem_gid; // 1 gauss point per element - const size_t num_dims = 2; - const size_t num_nodes_in_elem = 4; - // total Cauchy stress double tau_array[9]; diff --git a/single-node-refactor/src/Solvers/SGH_solver/src/properties.cpp b/single-node-refactor/src/Solvers/SGH_solver/src/properties.cpp index a86442a50..e8edf4113 100644 --- a/single-node-refactor/src/Solvers/SGH_solver/src/properties.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver/src/properties.cpp @@ -70,133 +70,198 @@ void SGH::update_state( const DCArrayKokkos& GaussPoints_vol, const DCArrayKokkos& MaterialPoints_mass, const DCArrayKokkos& MaterialPoints_statev, - const DCArrayKokkos& GaussPoints_eroded, + const DCArrayKokkos& MaterialPoints_eroded, const DCArrayKokkos& MaterialToMeshMaps_elem, const double dt, const double rk_alpha, const size_t num_material_elems, const size_t mat_id) const { + + const size_t num_dims = mesh.num_dims; + + // --- Density --- // loop over all the elements the material lives in FOR_ALL(mat_elem_lid, 0, num_material_elems, { // get elem gid - size_t elem_gid = MaterialToMeshMaps_elem(mat_elem_lid); + size_t elem_gid = MaterialToMeshMaps_elem(mat_elem_lid); - const size_t num_dims = mesh.num_dims; - const size_t num_nodes_in_elem = mesh.num_nodes_in_elem; + // get the material points for this material + // Note, with the SGH method, they are equal + size_t mat_point_lid = mat_elem_lid; + + // for this method, gauss point is equal to elem_gid + size_t gauss_gid = elem_gid; - // cut out the node_gids for this element - ViewCArrayKokkos elem_node_gids(&mesh.nodes_in_elem(elem_gid, 0), num_nodes_in_elem); // --- Density --- - MaterialPoints_den(mat_elem_lid) = MaterialPoints_mass(mat_elem_lid) / GaussPoints_vol(elem_gid); + MaterialPoints_den(mat_point_lid) = MaterialPoints_mass(mat_point_lid) / GaussPoints_vol(gauss_gid); + + }); // end parallel for over mat elem lid + Kokkos::fence(); + + + // --- pressure --- + if (Materials.MaterialEnums(mat_id).EOSType == model::decoupledEOSType) { + + // loop over all the elements the material lives in + FOR_ALL(mat_elem_lid, 0, num_material_elems, { + + // get elem gid + size_t elem_gid = MaterialToMeshMaps_elem(mat_elem_lid); + + + // get the material points for this material + // Note, with the SGH method, they are equal + size_t mat_point_lid = mat_elem_lid; + + // for this method, gauss point is equal to elem_gid + size_t gauss_gid = elem_gid; + + // --- Pressure --- + Materials.MaterialFunctions(mat_id).calc_pressure( + MaterialPoints_pres, + MaterialPoints_stress, + mat_point_lid, + mat_id, + MaterialPoints_statev, + MaterialPoints_sspd, + MaterialPoints_den(mat_point_lid), + MaterialPoints_sie(0, mat_point_lid), + Materials.eos_global_vars); + // --- Sound Speed --- + Materials.MaterialFunctions(mat_id).calc_sound_speed( + MaterialPoints_pres, + MaterialPoints_stress, + mat_point_lid, + mat_id, + MaterialPoints_statev, + MaterialPoints_sspd, + MaterialPoints_den(mat_point_lid), + MaterialPoints_sie(0, mat_point_lid), + Materials.eos_global_vars); + + }); // end parallel for over mat elem lid + + } // if decoupled EOS + + + // --- Stress --- + + // state_based elastic plastic model + if (Materials.MaterialEnums.host(mat_id).StrengthType == model::stateBased) { + + const size_t num_nodes_in_elem = mesh.num_nodes_in_elem; + + // loop over all the elements the material lives in + FOR_ALL(mat_elem_lid, 0, num_material_elems, { + + // get elem gid + size_t elem_gid = MaterialToMeshMaps_elem(mat_elem_lid); + + + // get the material points for this material + // Note, with the SGH method, they are equal + size_t mat_point_lid = mat_elem_lid; + + // for this method, gauss point is equal to elem_gid + size_t gauss_gid = elem_gid; - // --- Stress --- - // state_based elastic plastic model - if (Materials.MaterialEnums(mat_id).StrengthType == model::stateBased) { // cut out the node_gids for this element ViewCArrayKokkos elem_node_gids(&mesh.nodes_in_elem(elem_gid, 0), num_nodes_in_elem); + // --- Density --- - MaterialPoints_den(mat_elem_lid) = MaterialPoints_mass(mat_elem_lid) / GaussPoints_vol(elem_gid); - - // corner area normals - double area_array[24]; - ViewCArrayKokkos area(area_array, num_nodes_in_elem, num_dims); - - // velocity gradient - double vel_grad_array[9]; - ViewCArrayKokkos vel_grad(vel_grad_array, num_dims, num_dims); - - // get the B matrix which are the OUTWARD corner area normals - geometry::get_bmatrix(area, elem_gid, node_coords, elem_node_gids); - - // --- Calculate the velocity gradient --- - get_velgrad(vel_grad, - elem_node_gids, - node_vel, - area, - GaussPoints_vol(elem_gid), - elem_gid); - - // --- call strength model --- - Materials.MaterialFunctions(mat_id).calc_stress( - MaterialPoints_pres, - MaterialPoints_stress, - mat_elem_lid, - mat_id, - MaterialPoints_statev, - MaterialPoints_sspd, - MaterialPoints_den(elem_gid), - MaterialPoints_sie(elem_gid), - vel_grad, - elem_node_gids, - node_coords, - node_vel, - GaussPoints_vol(elem_gid), - dt, - rk_alpha); - } // end logical on state_based strength model - - // apply the element erosion model - //if (material(mat_id).erosion_type == model::erosion) { - // // starting simple, but in the future call an erosion model - // if (MaterialPoints_pres(elem_gid) <= material(mat_id).erode_tension_val - // || MaterialPoints_den(elem_gid) <= material(mat_id).erode_density_val) { - // GaussPoints_mat_id(elem_gid) = material(mat_id).void_mat_id; - // - // GaussPoints_eroded(elem_gid) = true; - // } // end if - //} // end if - if (Materials.MaterialFunctions(mat_id).erode != NULL) { - + MaterialPoints_den(mat_point_lid) = MaterialPoints_mass(mat_point_lid) / GaussPoints_vol(gauss_gid); + + + // corner area normals + double area_array[24]; + ViewCArrayKokkos area(area_array, num_nodes_in_elem, num_dims); + + // velocity gradient + double vel_grad_array[9]; + ViewCArrayKokkos vel_grad(vel_grad_array, num_dims, num_dims); + + // get the B matrix which are the OUTWARD corner area normals + geometry::get_bmatrix(area, elem_gid, node_coords, elem_node_gids); + + // --- Calculate the velocity gradient --- + get_velgrad(vel_grad, + elem_node_gids, + node_vel, + area, + GaussPoints_vol(elem_gid), + elem_gid); + + // --- call strength model --- + Materials.MaterialFunctions(mat_id).calc_stress( + MaterialPoints_pres, + MaterialPoints_stress, + mat_point_lid, + mat_id, + MaterialPoints_statev, + MaterialPoints_sspd, + MaterialPoints_den(mat_point_lid), + MaterialPoints_sie(1,mat_point_lid), + vel_grad, + elem_node_gids, + node_coords, + node_vel, + GaussPoints_vol(gauss_gid), + dt, + rk_alpha); + + + }); // end parallel for over mat elem lid + + } // end if state_based strength model + + + // --- mat point erosion --- + if (Materials.MaterialEnums.host(mat_id).ErosionModels != model::noErosion) { + + // loop over all the elements the material lives in + FOR_ALL(mat_elem_lid, 0, num_material_elems, { + + // get elem gid + size_t elem_gid = MaterialToMeshMaps_elem(mat_elem_lid); + + + // get the material points for this material + // Note, with the SGH method, they are equal + size_t mat_point_lid = mat_elem_lid; + + // for this method, gauss point is equal to elem_gid + size_t gauss_gid = elem_gid; // --- Element erosion model --- Materials.MaterialFunctions(mat_id).erode( - MaterialPoints_pres, + MaterialPoints_eroded, MaterialPoints_stress, - GaussPoints_eroded, - GaussPoints_mat_id, - elem_gid, - Materials.MaterialFunctions(mat_id).void_mat_id, + MaterialPoints_pres(mat_point_lid), + MaterialPoints_den(mat_point_lid), Materials.MaterialFunctions(mat_id).erode_tension_val, Materials.MaterialFunctions(mat_id).erode_density_val, - MaterialPoints_sspd, - MaterialPoints_den, - MaterialPoints_sie(1, elem_gid)); - - } // end if - - if (Materials.MaterialEnums(mat_id).EOSType == model::decoupledEOSType) { - - // --- Pressure --- - Materials.MaterialFunctions(mat_id).calc_pressure( - MaterialPoints_pres, - MaterialPoints_stress, - elem_gid, - GaussPoints_mat_id(elem_gid), - MaterialPoints_statev, - MaterialPoints_sspd, - MaterialPoints_den(elem_gid), - MaterialPoints_sie(1, elem_gid), - Materials.eos_global_vars); - // --- Sound Speed --- - Materials.MaterialFunctions(mat_id).calc_sound_speed( - MaterialPoints_pres, - MaterialPoints_stress, - elem_gid, - GaussPoints_mat_id(elem_gid), - MaterialPoints_statev, - MaterialPoints_sspd, - MaterialPoints_den(elem_gid), - MaterialPoints_sie(1, elem_gid), - Materials.eos_global_vars); - } - }); // end parallel for - Kokkos::fence(); + mat_point_lid); + + // apply a void eos if mat_point is eroded + double phi_fail = 1.0 - (double)MaterialPoints_eroded(mat_point_lid); + MaterialPoints_pres(mat_point_lid) *= phi_fail; // phi_fail = 1 or 0 + MaterialPoints_sspd(mat_point_lid) *= phi_fail; + MaterialPoints_sspd(mat_point_lid) = fmax(MaterialPoints_sspd(mat_point_lid), 1e-32); + + for (size_t i = 0; i < 3; i++) { + for (size_t j = 0; j < 3; j++) { + MaterialPoints_stress(1, mat_point_lid, i, j) *= phi_fail; + } + } // end for i,j + + }); // end parallel for + } // end if elem errosion return; } // end method to update state @@ -224,7 +289,8 @@ void SGH::update_state( /// \param The current Runge Kutta integration alpha value /// ///////////////////////////////////////////////////////////////////////////// -void SGH::update_state2D(const Material_t& Materials, +void SGH::update_state2D( + const Material_t& Materials, const mesh_t& mesh, const DCArrayKokkos& node_coords, const DCArrayKokkos& node_vel, @@ -236,122 +302,198 @@ void SGH::update_state2D(const Material_t& Materials, const DCArrayKokkos& GaussPoints_vol, const DCArrayKokkos& MaterialPoints_mass, const DCArrayKokkos& MaterialPoints_statev, - const DCArrayKokkos& GaussPoints_eroded, + const DCArrayKokkos& MaterialPoints_eroded, const DCArrayKokkos& MaterialToMeshMaps_elem, const double dt, const double rk_alpha, const size_t num_material_elems, const size_t mat_id) const { + + const size_t num_dims = mesh.num_dims; + // --- Density --- // loop over all the elements the material lives in FOR_ALL(mat_elem_lid, 0, num_material_elems, { // get elem gid - size_t elem_gid = MaterialToMeshMaps_elem(mat_elem_lid); + size_t elem_gid = MaterialToMeshMaps_elem(mat_elem_lid); - const size_t num_dims = mesh.num_dims; - const size_t num_nodes_in_elem = mesh.num_nodes_in_elem; - // cut out the node_gids for this element - ViewCArrayKokkos elem_node_gids(&mesh.nodes_in_elem(elem_gid, 0), num_nodes_in_elem); + // get the material points for this material + // Note, with the SGH method, they are equal + size_t mat_point_lid = mat_elem_lid; + + // for this method, gauss point is equal to elem_gid + size_t gauss_gid = elem_gid; + // --- Density --- - MaterialPoints_den(elem_gid) = MaterialPoints_mass(elem_gid) / GaussPoints_vol(elem_gid); + MaterialPoints_den(mat_point_lid) = MaterialPoints_mass(mat_point_lid) / GaussPoints_vol(gauss_gid); + }); // end parallel for over mat elem lid + Kokkos::fence(); - // --- Stress --- - // state_based elastic plastic model - if (Materials.MaterialEnums(mat_id).StrengthType == model::stateBased) { - // cut out the node_gids for this element - ViewCArrayKokkos elem_node_gids(&mesh.nodes_in_elem(elem_gid, 0), num_nodes_in_elem); - // --- Density --- - MaterialPoints_den(elem_gid) = MaterialPoints_mass(elem_gid) / GaussPoints_vol(elem_gid); - - // corner area normals - double area_array[8]; - ViewCArrayKokkos area(area_array, num_nodes_in_elem, num_dims); - - // velocity gradient - double vel_grad_array[4]; - ViewCArrayKokkos vel_grad(vel_grad_array, num_dims, num_dims); - - // get the B matrix which are the OUTWARD corner area normals - geometry::get_bmatrix(area, elem_gid, node_coords, elem_node_gids); - - // --- Calculate the velocity gradient --- - get_velgrad(vel_grad, - elem_node_gids, - node_vel, - area, - GaussPoints_vol(elem_gid), - elem_gid); - - // --- call strength model --- - // Material.MaterialFunctions(mat_id).strength_model(MaterialPoints_pres, - // MaterialPoints_stress, - // elem_gid, - // mat_id, - // MaterialPoints_statev, - // MaterialPoints_sspd, - // MaterialPoints_den(elem_gid), - // MaterialPoints_sie(elem_gid), - // vel_grad, - // elem_node_gids, - // node_coords, - // node_vel, - // GaussPoints_vol(elem_gid), - // dt, - // rk_alpha); - } // end logical on state_based strength model - - // --- Erosion --- - // apply the element erosion model - //if (Materials.MaterialFunctions(mat_id).erode != NULL) { - // - // // --- Element erosion model --- - // material.MaterialFunctions(mat_id).erode(MaterialPoints_pres, - // MaterialPoints_stress, - // GaussPoints_eroded, - // GaussPoints_mat_id, - // elem_gid, - // material(mat_id).void_mat_id, - // material(mat_id).erode_tension_val, - // material(mat_id).erode_density_val, - // MaterialPoints_sspd, - // MaterialPoints_den, - // MaterialPoints_sie(1, elem_gid)); - //} // end if - - // --- Pressure --- - if (Materials.MaterialEnums(mat_id).EOSType == model::decoupledEOSType) { + // --- pressure --- + if (Materials.MaterialEnums(mat_id).EOSType == model::decoupledEOSType) { + + // loop over all the elements the material lives in + FOR_ALL(mat_elem_lid, 0, num_material_elems, { + + // get elem gid + size_t elem_gid = MaterialToMeshMaps_elem(mat_elem_lid); + + + // get the material points for this material + // Note, with the SGH method, they are equal + size_t mat_point_lid = mat_elem_lid; + + // for this method, gauss point is equal to elem_gid + size_t gauss_gid = elem_gid; // --- Pressure --- Materials.MaterialFunctions(mat_id).calc_pressure( - MaterialPoints_pres, - MaterialPoints_stress, - elem_gid, - GaussPoints_mat_id(elem_gid), - MaterialPoints_statev, - MaterialPoints_sspd, - MaterialPoints_den(elem_gid), - MaterialPoints_sie(1, elem_gid), - Materials.eos_global_vars); + MaterialPoints_pres, + MaterialPoints_stress, + mat_point_lid, + mat_id, + MaterialPoints_statev, + MaterialPoints_sspd, + MaterialPoints_den(mat_point_lid), + MaterialPoints_sie(0, mat_point_lid), + Materials.eos_global_vars); // --- Sound Speed --- Materials.MaterialFunctions(mat_id).calc_sound_speed( - MaterialPoints_pres, - MaterialPoints_stress, - elem_gid, - GaussPoints_mat_id(elem_gid), - MaterialPoints_statev, - MaterialPoints_sspd, - MaterialPoints_den(elem_gid), - MaterialPoints_sie(1, elem_gid), - Materials.eos_global_vars); - } - }); // end parallel for - Kokkos::fence(); + MaterialPoints_pres, + MaterialPoints_stress, + mat_point_lid, + mat_id, + MaterialPoints_statev, + MaterialPoints_sspd, + MaterialPoints_den(mat_point_lid), + MaterialPoints_sie(0, mat_point_lid), + Materials.eos_global_vars); + + }); // end parallel for over mat elem lid + + } // if decoupled EOS + + + // --- Stress --- + + // state_based elastic plastic model + if (Materials.MaterialEnums.host(mat_id).StrengthType == model::stateBased) { + + const size_t num_nodes_in_elem = mesh.num_nodes_in_elem; + + // loop over all the elements the material lives in + FOR_ALL(mat_elem_lid, 0, num_material_elems, { + + // get elem gid + size_t elem_gid = MaterialToMeshMaps_elem(mat_elem_lid); + + + // get the material points for this material + // Note, with the SGH method, they are equal + size_t mat_point_lid = mat_elem_lid; + + // for this method, gauss point is equal to elem_gid + size_t gauss_gid = elem_gid; + + + // cut out the node_gids for this element + ViewCArrayKokkos elem_node_gids(&mesh.nodes_in_elem(elem_gid, 0), num_nodes_in_elem); + + + // --- Density --- + MaterialPoints_den(mat_point_lid) = MaterialPoints_mass(mat_point_lid) / GaussPoints_vol(gauss_gid); + + + // corner area normals + double area_array[24]; + ViewCArrayKokkos area(area_array, num_nodes_in_elem, num_dims); + + // velocity gradient + double vel_grad_array[9]; + ViewCArrayKokkos vel_grad(vel_grad_array, num_dims, num_dims); + + // get the B matrix which are the OUTWARD corner area normals + geometry::get_bmatrix(area, elem_gid, node_coords, elem_node_gids); + + // --- Calculate the velocity gradient --- + get_velgrad(vel_grad, + elem_node_gids, + node_vel, + area, + GaussPoints_vol(elem_gid), + elem_gid); + + // --- call strength model --- + Materials.MaterialFunctions(mat_id).calc_stress( + MaterialPoints_pres, + MaterialPoints_stress, + mat_point_lid, + mat_id, + MaterialPoints_statev, + MaterialPoints_sspd, + MaterialPoints_den(mat_point_lid), + MaterialPoints_sie(1,mat_point_lid), + vel_grad, + elem_node_gids, + node_coords, + node_vel, + GaussPoints_vol(gauss_gid), + dt, + rk_alpha); + + + }); // end parallel for over mat elem lid + + } // end if state_based strength model + + + // --- mat point erosion --- + if (Materials.MaterialEnums.host(mat_id).ErosionModels != model::noErosion) { + + // loop over all the elements the material lives in + FOR_ALL(mat_elem_lid, 0, num_material_elems, { + + // get elem gid + size_t elem_gid = MaterialToMeshMaps_elem(mat_elem_lid); + + + // get the material points for this material + // Note, with the SGH method, they are equal + size_t mat_point_lid = mat_elem_lid; + + // for this method, gauss point is equal to elem_gid + size_t gauss_gid = elem_gid; + + // --- Element erosion model --- + Materials.MaterialFunctions(mat_id).erode( + MaterialPoints_eroded, + MaterialPoints_stress, + MaterialPoints_pres(mat_point_lid), + MaterialPoints_den(mat_point_lid), + Materials.MaterialFunctions(mat_id).erode_tension_val, + Materials.MaterialFunctions(mat_id).erode_density_val, + mat_point_lid); + + // apply a void eos if mat_point is eroded + double phi_fail = 1.0 - (double)MaterialPoints_eroded(mat_point_lid); + MaterialPoints_pres(mat_point_lid) *= phi_fail; // phi_fail = 1 or 0 + MaterialPoints_sspd(mat_point_lid) *= phi_fail; + MaterialPoints_sspd(mat_point_lid) = fmax(MaterialPoints_sspd(mat_point_lid), 1e-32); + + for (size_t i = 0; i < 3; i++) { + for (size_t j = 0; j < 3; j++) { + MaterialPoints_stress(1, mat_point_lid, i, j) *= phi_fail; + } + } // end for i,j + + }); // end parallel for + } // end if elem errosion return; -} // end method to update state +} // end method to update state2D \ No newline at end of file diff --git a/single-node-refactor/src/Solvers/SGH_solver/src/sgh_solve.cpp b/single-node-refactor/src/Solvers/SGH_solver/src/sgh_solve.cpp index e209214c4..0d4239fdd 100644 --- a/single-node-refactor/src/Solvers/SGH_solver/src/sgh_solve.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver/src/sgh_solve.cpp @@ -101,13 +101,16 @@ void SGH::execute(SimulationParameters_t& SimulationParamaters, double cached_pregraphics_dt = fuzz; // calculate the extensive node mass, its key to 2D - calc_extensive_node_mass(node_extensive_mass + calc_extensive_node_mass(node_extensive_mass, State.node.coords, State.node.mass, mesh.num_dims, - mesh.num_nodes) + mesh.num_nodes); + // the number of materials specified by the user input + const size_t num_mats = Materials.num_mats; + // extensive IE for(int mat_id=0; mat_id tensor) } // end 2D max eignen value -void calc_extensive_node_mass(CArrayKokkos& node_extensive_mass - CArrayKokkos& node_coords, - CArrayKokkos& node_mass, + +void calc_extensive_node_mass(const CArrayKokkos& node_extensive_mass, + const DCArrayKokkos& node_coords, + const DCArrayKokkos& node_mass, double num_dims, double num_nodes){ // save the nodal mass @@ -615,21 +617,21 @@ void calc_extensive_node_mass(CArrayKokkos& node_extensive_mass } // end function + // a function to tally the internal energy -double sum_domain_internal_energy(DCArrayKokkos& MaterialPoints_mass, - DCArrayKokkos& MaterialPoints_sie, - size_t num_mat_points, - double &IE_sum){ +double sum_domain_internal_energy(const DCArrayKokkos& MaterialPoints_mass, + const DCArrayKokkos& MaterialPoints_sie, + size_t num_mat_points){ double IE_sum = 0; double IE_loc_sum; // loop over the material points and tally IE - REDUCE_SUM(matpt_lid, 0, num_matpts, IE_loc_sum, { + REDUCE_SUM(matpt_lid, 0, num_mat_points, IE_loc_sum, { IE_loc_sum += MaterialPoints_mass(matpt_lid) * MaterialPoints_sie(matpt_lid); }, IE_sum); - return IE_Sum; + return IE_sum; } // end function @@ -637,7 +639,7 @@ double sum_domain_internal_energy(DCArrayKokkos& MaterialPoints_mass, double sum_domain_kinetic_energy(DCArrayKokkos& node_vel, DCArrayKokkos& node_coords, DCArrayKokkos& node_mass, - mest_t& mesh){ + mesh_t& mesh){ // extensive KE double KE_sum = 0; double KE_loc_sum; @@ -666,15 +668,16 @@ double sum_domain_kinetic_energy(DCArrayKokkos& node_vel, // for R=0, it is interpolated from off-axis void calc_node_areal_mass(const mesh_t& mesh, const DCArrayKokkos& node_coords, + const DCArrayKokkos& node_mass, CArrayKokkos node_extensive_mass, double tiny){ // calculate the nodal areal mass FOR_ALL(node_gid, 0, mesh.num_nodes, { - node.mass(node_gid) = 0.0; + node_mass(node_gid) = 0.0; - if (node.coords(1, node_gid, 1) > tiny) { - node.mass(node_gid) = node_extensive_mass(node_gid) / node.coords(1, node_gid, 1); + if (node_coords(1, node_gid, 1) > tiny) { + node_mass(node_gid) = node_extensive_mass(node_gid) / node_coords(1, node_gid, 1); } }); // end parallel for over node_gid Kokkos::fence(); @@ -683,15 +686,15 @@ void calc_node_areal_mass(const mesh_t& mesh, FOR_ALL(node_bdy_gid, 0, mesh.num_bdy_nodes, { size_t node_gid = mesh.bdy_nodes(node_bdy_gid); - if (node.coords(1, node_gid, 1) < tiny) { + if (node_coords(1, node_gid, 1) < tiny) { // node is on the axis for (size_t node_lid = 0; node_lid < mesh.num_nodes_in_node(node_gid); node_lid++) { size_t node_neighbor_gid = mesh.nodes_in_node(node_gid, node_lid); // if the node is off the axis, use it's areal mass on the boundary - if (node.coords(1, node_neighbor_gid, 1) > tiny) { - node.mass(node_gid) = fmax(node.mass(node_gid), node.mass(node_neighbor_gid) / 2.0); + if (node_coords(1, node_neighbor_gid, 1) > tiny) { + node_mass(node_gid) = fmax(node_mass(node_gid), node_mass(node_neighbor_gid) / 2.0); } } // end for over neighboring nodes } // end if diff --git a/single-node-refactor/src/Solvers/SGH_solver/src/time_integration.cpp b/single-node-refactor/src/Solvers/SGH_solver/src/time_integration.cpp index e54a17e5b..795566352 100644 --- a/single-node-refactor/src/Solvers/SGH_solver/src/time_integration.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver/src/time_integration.cpp @@ -108,7 +108,7 @@ void SGH::get_timestep(mesh_t& mesh, DCArrayKokkos& MaterialPoints_sspd, DCArrayKokkos& GaussPoints_vol, DCArrayKokkos& MaterialToMeshMaps_elem, - size_t num_material_elems, + size_t num_mat_elems, double time_value, const double graphics_time, const double time_final, diff --git a/single-node-refactor/src/common/io_utils.h b/single-node-refactor/src/common/io_utils.h index dc0b3b8ae..320636a19 100644 --- a/single-node-refactor/src/common/io_utils.h +++ b/single-node-refactor/src/common/io_utils.h @@ -875,18 +875,24 @@ class MeshWriter /// ///////////////////////////////////////////////////////////////////////////// void write_mesh(mesh_t& mesh, - GaussPoint_t& GaussPoints, - node_t& node, - corner_t& corner, + State_t& State, SimulationParameters_t& SimulationParamaters, double time_value, CArray graphics_times) { if (SimulationParamaters.output_options.format == output_options::vtk) { - write_vtk(mesh, GaussPoints, node, corner, SimulationParamaters, time_value, graphics_times); + write_vtk(mesh, + State, + SimulationParamaters, + time_value, + graphics_times); } else if (SimulationParamaters.output_options.format == output_options::ensight) { - write_ensight(mesh, GaussPoints, node, corner, SimulationParamaters, time_value, graphics_times); + write_ensight(mesh, + State, + SimulationParamaters, + time_value, + graphics_times); } else{ std::cout << "**** MESH OUTPUT TYPE NOT SUPPORTED **** " << std::endl; @@ -921,6 +927,9 @@ class MeshWriter double time_value, CArray graphics_times) { + + size_t num_mats = State.MaterialPoints.size(); + // ---- Update host data ---- for(int mat_id=0; mat_id graphics_times) diff --git a/single-node-refactor/src/common/material.h b/single-node-refactor/src/common/material.h index 8297d35f3..4c53688ae 100644 --- a/single-node-refactor/src/common/material.h +++ b/single-node-refactor/src/common/material.h @@ -170,6 +170,9 @@ struct MaterialEnums_t // Strength model type: none, or increment- or state-based model::StrengthType StrengthType = model::noStrengthType; + // Erosion model type: none or basis + model::ErosionModels ErosionModels = model::noErosion; + }; // end boundary condition enums @@ -190,7 +193,7 @@ struct MaterialFunctions_t // Equation of state (EOS) function pointers void (*calc_pressure)(const DCArrayKokkos& MaterialPoints_pres, const DCArrayKokkos& MaterialPoints_stress, - const size_t MaterialPoints_gid, + const size_t MaterialPoints_lid, const size_t mat_id, const DCArrayKokkos& MaterialPoints_state_vars, const DCArrayKokkos& MaterialPoints_sspd, @@ -200,7 +203,7 @@ struct MaterialFunctions_t void (*calc_sound_speed)(const DCArrayKokkos& MaterialPoints_pres, const DCArrayKokkos& MaterialPoints_stress, - const size_t MaterialPoints_gid, + const size_t MaterialPoints_lid, const size_t mat_id, const DCArrayKokkos& MaterialPoints_state_vars, const DCArrayKokkos& MaterialPoints_sspd, @@ -208,19 +211,20 @@ struct MaterialFunctions_t const double sie, const RaggedRightArrayKokkos &eos_global_vars) = NULL; + // -- Strength -- // Material strength model function pointers void (*calc_stress)(const DCArrayKokkos& MaterialPoints_pres, const DCArrayKokkos& MaterialPoints_stress, - const size_t MaterialPoints_gid, + const size_t MaterialPoints_lid, const size_t mat_id, const DCArrayKokkos& MaterialPoints_state_vars, const DCArrayKokkos& MaterialPoints_sspd, const double den, const double sie, const ViewCArrayKokkos& vel_grad, - const ViewCArrayKokkos& MaterialPoints_node_gids, + const ViewCArrayKokkos& elem_node_gids, const DCArrayKokkos& node_coords, const DCArrayKokkos& node_vel, const double vol, @@ -230,21 +234,16 @@ struct MaterialFunctions_t // -- Erosion -- - size_t void_mat_id; ///< eroded elements get this mat_id double erode_tension_val; ///< tension threshold to initiate erosion double erode_density_val; ///< density threshold to initiate erosion // above should be removed, they go in CArrayKokkos erosion_global_vars; - void (*erode)(const DCArrayKokkos& MaterialPoints_pres, - const DCArrayKokkos& MaterialPoints_stress, - const DCArrayKokkos& MaterialPoints_eroded, - const DCArrayKokkos& MaterialPoints_mat_id, - const size_t MaterialPoints_gid, - const size_t void_mat_id, + void (*erode)(const DCArrayKokkos& MaterialPoint_eroded, + const DCArrayKokkos& MaterialPoint_stress, + const double mat_point_pres, + const double mat_point_sie, const double erode_tension_val, const double erode_density_val, - const DCArrayKokkos& MaterialPoints_sspd, - const DCArrayKokkos& MaterialPoints_den, - const double sie) = NULL; + const size_t mat_point_lid) = NULL; double q1 = 1.0; ///< acoustic coefficient in Riemann solver for compression double q1ex = 1.3333; ///< acoustic coefficient in Riemann solver for expansion diff --git a/single-node-refactor/src/common/state.h b/single-node-refactor/src/common/state.h index 4daa9955d..d101a39b1 100644 --- a/single-node-refactor/src/common/state.h +++ b/single-node-refactor/src/common/state.h @@ -82,7 +82,6 @@ struct GaussPoint_t DCArrayKokkos vol; ///< GaussPoint volume DCArrayKokkos div; ///< GaussPoint divergence of velocity - DCArrayKokkos eroded; ///< GuassPoint eroded or not // initialization method (num_rk_storage_bins, num_cells, num_dims) void initialize(size_t num_rk, size_t num_gauss_pnts, size_t num_dims) @@ -90,8 +89,6 @@ struct GaussPoint_t this->vol = DCArrayKokkos(num_gauss_pnts, "gauss_point_volume"); this->div = DCArrayKokkos(num_gauss_pnts, "gauss_point_div"); - this->eroded = DCArrayKokkos(num_gauss_pnts, "gauss_point_eroded"); - }; // end method }; // end GuassPoint_t @@ -138,12 +135,14 @@ struct MaterialPoint_t DCArrayKokkos stress; ///< MaterialPoint stress DCArrayKokkos sspd; ///< MaterialPoint sound speed DCArrayKokkos mass; ///< MaterialPoint mass + DCArrayKokkos eroded; ///< MaterialPoint eroded or not flag DCArrayKokkos sie; ///< coefficients for the sie in strong form, only used in some methods e.g., FE-SGH and MPM // Material Models are stored on Material points - CArrayKokkos eos_state_vars; ///< Array of state variables for the EOS - CArrayKokkos strength_state_vars; ///< Array of state variables for the strength + DCArrayKokkos statev; // a place holder to get things to compile + DCArrayKokkos eos_state_vars; ///< Array of state variables for the EOS + DCArrayKokkos strength_state_vars; ///< Array of state variables for the strength // initialization method (num_rk_storage_bins, num_pts_max, num_dims) @@ -154,7 +153,8 @@ struct MaterialPoint_t this->stress = DCArrayKokkos(num_rk, num_pts_max, num_dims, num_dims, "material_point_stress"); this->sspd = DCArrayKokkos(num_pts_max, "material_point_sspd"); this->mass = DCArrayKokkos(num_pts_max, "material_point_mass"); - this->sie = DCArrayKokkos(num_rk, num_pts_max, "material_point_sie"); + this->sie = DCArrayKokkos(num_rk, num_pts_max, "material_point_sie"); + this->eroded = DCArrayKokkos(num_pts_max, "material_point_eroded"); }; // end method // initialization method for arbitrary-order FE (num_rk_storage_bins, num_pts_max, num_dims) diff --git a/single-node-refactor/src/driver.h b/single-node-refactor/src/driver.h index fa5d8b8a0..62a29cbdb 100644 --- a/single-node-refactor/src/driver.h +++ b/single-node-refactor/src/driver.h @@ -476,13 +476,13 @@ void fill_regions(DCArrayKokkos& region_fills, size_t mat_point_lid = mat_elem_lid; // for more than 1 gauss point, this must increment - // --- element erosion flaf ---- - State.GaussPoint.eroded.host(gauss_gid) = false; - // --- density and mass --- State.MaterialPoints(mat_id).den.host(mat_point_lid) = GaussPoint_den.host(guass_gid); State.MaterialPoints(mat_id).mass.host(mat_point_lid) = GaussPoint_den.host(guass_gid) * GaussPoints.vol.host(gauss_gid); + // --- set eroded flag to false --- + State.MaterialPoints(mat_id).eroded.host(mat_point_lid) = false; + // --- specific internal energy --- // save state, that is integrated in time, at the RK levels for(size_t rk_level=0; rk_level& region_fills, State.MaterialPoints(mat_id).den.update_device(); State.MaterialPoints(mat_id).mass.update_device(); State.MaterialPoints(mat_id).sie.update_device(); - State.GaussPoints.eroded.update_device(); + State.MaterialPoints(mat_id).eroded.update_device(); + + State.MaterialToMeshMaps(mat_id).elem.update_device(); Kokkos::fence(); diff --git a/single-node-refactor/src/input/parse_yaml.cpp b/single-node-refactor/src/input/parse_yaml.cpp index 4ec7ccb1e..0f183a14c 100644 --- a/single-node-refactor/src/input/parse_yaml.cpp +++ b/single-node-refactor/src/input/parse_yaml.cpp @@ -1726,12 +1726,16 @@ void parse_materials(Yaml::Node& root, Material_t& Materials) // erosion_model_map[erosion_model] returns enum value, e.g., model::erosion switch(erosion_model_map[erosion_model]){ case model::basicErosion: + Materials.MaterialEnums.host(mat_id).ErosionModels = model::basicErosion; RUN({ + Materials.MaterialEnums(mat_id).ErosionModels = model::basicErosion; Materials.MaterialFunctions(mat_id).erode = &BasicErosionModel::erode; }); break; case model::noErosion: + Materials.MaterialEnums.host(mat_id).ErosionModels = model::noErosion; RUN({ + Materials.MaterialEnums(mat_id).ErosionModels = model::noErosion; Materials.MaterialFunctions(mat_id).erode = &NoErosionModel::erode; }); break; @@ -1753,15 +1757,6 @@ void parse_materials(Yaml::Node& root, Material_t& Materials) } // end if } // erosion model variables - else if (a_word.compare("void_mat_id") == 0) { - double void_mat_id = root["materials"][mat_id]["material"]["void_mat_id"].As(); - if (VERBOSE) { - std::cout << "\tvoid_mat_id = " << void_mat_id << std::endl; - } - RUN({ - Materials.MaterialFunctions(mat_id).void_mat_id = void_mat_id; - }); - } // blank_mat_id else if (a_word.compare("erode_tension_val") == 0) { double erode_tension_val = root["materials"][mat_id]["material"]["erode_tension_val"].As(); if (VERBOSE) { diff --git a/single-node-refactor/src/material_models/erosion/basic_erosion.h b/single-node-refactor/src/material_models/erosion/basic_erosion.h index e609f16a6..61b9946b9 100644 --- a/single-node-refactor/src/material_models/erosion/basic_erosion.h +++ b/single-node-refactor/src/material_models/erosion/basic_erosion.h @@ -37,31 +37,25 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // ----------------------------------------------------------------------------- -// This is the basic element Erosion model +// This is the basic material pt Erosion model // ------------------------------------------------------------------------------ namespace BasicErosionModel { KOKKOS_FUNCTION - static void erode (const DCArrayKokkos& elem_pres, - const DCArrayKokkos& elem_stress, - const DCArrayKokkos& elem_eroded, - const DCArrayKokkos& elem_mat_id, - const size_t elem_gid, - const size_t void_mat_id, + static void erode (const DCArrayKokkos& MaterialPoint_eroded, + const DCArrayKokkos& MaterialPoint_stress, + const double mat_point_pres, + const double mat_point_den, const double erode_tension_val, const double erode_density_val, - const DCArrayKokkos& elem_sspd, - const DCArrayKokkos& elem_den, - const double sie) + const size_t mat_point_lid) { // simple model based on tension and density - if (elem_pres(elem_gid) <= erode_tension_val - || elem_den(elem_gid) <= erode_density_val) { + if (mat_point_pres <= erode_tension_val || mat_point_den <= erode_density_val) { - elem_mat_id(elem_gid) = void_mat_id; - elem_eroded(elem_gid) = true; + MaterialPoint_eroded(mat_point_lid) = true; } // end if diff --git a/single-node-refactor/src/material_models/erosion/no_erosion.h b/single-node-refactor/src/material_models/erosion/no_erosion.h index 45c6d976a..2e77953b3 100644 --- a/single-node-refactor/src/material_models/erosion/no_erosion.h +++ b/single-node-refactor/src/material_models/erosion/no_erosion.h @@ -42,17 +42,13 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. namespace NoErosionModel { KOKKOS_FUNCTION - static void erode (const DCArrayKokkos& elem_pres, - const DCArrayKokkos& elem_stress, - const DCArrayKokkos& elem_eroded, - const DCArrayKokkos& elem_mat_id, - const size_t elem_gid, - const size_t void_mat_id, + static void erode (const DCArrayKokkos& MaterialPoint_eroded, + const DCArrayKokkos& MaterialPoint_stress, + const double mat_point_pres, + const double mat_point_den, const double erode_tension_val, const double erode_density_val, - const DCArrayKokkos& elem_sspd, - const DCArrayKokkos& elem_den, - const double sie) + const size_t mat_point_lid) { return; From e0c54796e43ca20b0886172748d65f2d87077405 Mon Sep 17 00:00:00 2001 From: Nathaniel Morgan Date: Sat, 27 Jul 2024 18:23:09 -0600 Subject: [PATCH 087/233] fixing more bugs --- single-node-refactor/src/common/state.h | 8 ++--- single-node-refactor/src/driver.h | 45 +++++++++++++------------ 2 files changed, 27 insertions(+), 26 deletions(-) diff --git a/single-node-refactor/src/common/state.h b/single-node-refactor/src/common/state.h index d101a39b1..7f2c68e96 100644 --- a/single-node-refactor/src/common/state.h +++ b/single-node-refactor/src/common/state.h @@ -403,7 +403,7 @@ struct State_t // --------------------------------------------------------------------- // material to mesh maps // --------------------------------------------------------------------- - CArray& MaterialToMeshMaps; ///< access as MaterialToMeshMaps(mat_id).elem(mat_storage_lid) + CArray MaterialToMeshMaps; ///< access as MaterialToMeshMaps(mat_id).elem(mat_storage_lid) corners_in_mat_t corners_in_mat_elem; ///< access the corner mat lid using (mat_elem_lid, corn_lid) points_in_mat_t points_in_mat_elem; ///< for accessing e.g., guass points mat lid with arbitrary-order FE zones_in_mat_t zones_in_mat_elem; ///< for accessing sub-zones mat lid with arbitrary-order FE @@ -411,9 +411,9 @@ struct State_t // --------------------------------------------------------------------- // material state, compressed, and sequentially accessed // --------------------------------------------------------------------- - CArray& MaterialPoints; ///< access as MaterialPoints(mat_id).var(mat_pt) - CArray& MaterialCorners; ///< access as MaterialCorners(mat_id).var(mat_corner), not used with MPM - CArray& MaterialZones; ///< access as MaterialZones(mat_id).var(mat_zone), only used with arbitrary-order FE + CArray MaterialPoints; ///< access as MaterialPoints(mat_id).var(mat_pt) + CArray MaterialCorners; ///< access as MaterialCorners(mat_id).var(mat_corner), not used with MPM + CArray MaterialZones; ///< access as MaterialZones(mat_id).var(mat_zone), only used with arbitrary-order FE }; // end state_t diff --git a/single-node-refactor/src/driver.h b/single-node-refactor/src/driver.h index 62a29cbdb..c62d90c30 100644 --- a/single-node-refactor/src/driver.h +++ b/single-node-refactor/src/driver.h @@ -221,7 +221,7 @@ class Driver for (int solver_id = 0; solver_id < SimulationParamaters.solver_inputs.size(); solver_id++) { if (SimulationParamaters.solver_inputs[solver_id].method == solver_input::SGH) { SGH* sgh_solver = new SGH(); // , mesh, node, MaterialPoints, corner - sgh_solver->initialize(SimulationParamaters, Materials, BoundaryConditions); + sgh_solver->initialize(SimulationParamaters, Materials, BoundaryConditions, State); solvers.push_back(sgh_solver); } } @@ -311,7 +311,7 @@ void fill_regions(DCArrayKokkos& region_fills, size_t num_fills = region_fills.size(); - printf("Num Fills's = %d\n", num_fills); + printf("Num Fills's = %zu\n", num_fills); // the number of elems and nodes in the mesh const size_t num_elems = mesh.num_elems; @@ -321,9 +321,9 @@ void fill_regions(DCArrayKokkos& region_fills, // create temporary state fields // Painting routine requires only 1 material per GaussPoint - CArrayKokkos GaussPoint_den(num_elems); - CArrayKokkos GaussPoint_sie(num_elems); - CArrayKokkos elem_mat_id(num_elems); // the mat_id in the elem + DCArrayKokkos GaussPoint_den(num_elems); + DCArrayKokkos GaussPoint_sie(num_elems); + DCArrayKokkos elem_mat_id(num_elems); // the mat_id in the elem // --------------------------------------------- @@ -357,8 +357,8 @@ void fill_regions(DCArrayKokkos& region_fills, // --------------------------------------------- fill_regions_sgh(Materials, mesh, - State.node_coords, - State.node_vel, + State.node.coords, + State.node.vel, region_fills, voxel_elem_mat_id, GaussPoint_den, @@ -368,6 +368,7 @@ void fill_regions(DCArrayKokkos& region_fills, num_elems, num_nodes, rk_num_bins); + // note device and host are updated in the above function // --------------------------------------------- @@ -404,7 +405,7 @@ void fill_regions(DCArrayKokkos& region_fills, State.MaterialToMeshMaps = CArray (num_mats); State.MaterialPoints = CArray (num_mats); - State.MaterialCorners = CArray (num_mats); + State.MaterialCorners = CArray (num_mats); // zones not needed with SGH @@ -427,7 +428,7 @@ void fill_regions(DCArrayKokkos& region_fills, size_t num_points_for_mat = num_elems_for_mat*num_mat_pts_in_elem; size_t num_corners_for_mat = num_elems_for_mat*mesh.num_nodes_in_elem; - State.MaterialToMeshMaps(mat_id).initialize(num_elems_for_mat, mesh.num_dims); + State.MaterialToMeshMaps(mat_id).initialize(num_elems_for_mat); State.MaterialPoints(mat_id).initialize(rk_num_bins, num_points_for_mat, 3); // aways 3D, even for 2D-RZ calcs State.MaterialCorners(mat_id).initialize(num_corners_for_mat, mesh.num_dims); // zones are not used @@ -451,8 +452,8 @@ void fill_regions(DCArrayKokkos& region_fills, // --------------------------------------- // SGH save data, maps, and state // --------------------------------------- - GaussPoints.vol.update_host(); - kokkos::fence(); + State.GaussPoints.vol.update_host(); + Kokkos::fence(); // the following loop is not thread safe for(size_t elem_gid=0; elem_gid& region_fills, size_t mat_point_lid = mat_elem_lid; // for more than 1 gauss point, this must increment // --- density and mass --- - State.MaterialPoints(mat_id).den.host(mat_point_lid) = GaussPoint_den.host(guass_gid); - State.MaterialPoints(mat_id).mass.host(mat_point_lid) = GaussPoint_den.host(guass_gid) * GaussPoints.vol.host(gauss_gid); + State.MaterialPoints(mat_id).den.host(mat_point_lid) = GaussPoint_den.host(gauss_gid); + State.MaterialPoints(mat_id).mass.host(mat_point_lid) = GaussPoint_den.host(gauss_gid) * GaussPoints.vol.host(gauss_gid); // --- set eroded flag to false --- State.MaterialPoints(mat_id).eroded.host(mat_point_lid) = false; @@ -494,7 +495,7 @@ void fill_regions(DCArrayKokkos& region_fills, // ----------------------- // Save MaterialZones // ----------------------- - // For higher-order FE, least squares fit the sie at guass points to get zone values + // For higher-order FE, least squares fit the sie at gauss points to get zone values // update counter for how many mat_elem_lid values have been saved @@ -1162,7 +1163,7 @@ void paint_gauss_den_sie(const Material_t& Material, } // end if - } // end loop over guass points in element' + } // end loop over gauss points in element' // done setting the element state @@ -1454,13 +1455,13 @@ void fill_regions_sgh(const Material_t& Materials, // default sgh paint paint_node_vel(Material, - mesh, - region_fills, - node_vel, - coords, - elem_gid, - f_id, - rk_num_bins); + mesh, + region_fills, + node_vel, + coords, + elem_gid, + f_id, + rk_num_bins); // add user defined paint here // user_defined_vel_state(); From 34abb4a3eaffba373d73d2ab4ecf7475c268abf3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CAdrian-Diaz=E2=80=9D?= <“adriandiaz1117@gmail.com”> Date: Sat, 27 Jul 2024 22:50:01 -0600 Subject: [PATCH 088/233] ENH: more body force support --- .../SGH_Solver/include/FEA_Module_SGH.h | 8 ++ .../SGH_Solver/src/FEA_Module_SGH.cpp | 39 ++++--- .../SGH_Solver/src/energy_sgh.cpp | 101 +++++++++++++++++- .../SGH_Solver/src/force_sgh.cpp | 67 ++++++------ .../SGH_Solver/src/sgh_optimization.cpp | 46 ++++++++ .../Simulation_Parameters/Geometry.h | 20 ++-- 6 files changed, 221 insertions(+), 60 deletions(-) diff --git a/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/include/FEA_Module_SGH.h b/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/include/FEA_Module_SGH.h index fb294c7f6..941b9927f 100644 --- a/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/include/FEA_Module_SGH.h +++ b/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/include/FEA_Module_SGH.h @@ -348,6 +348,14 @@ class FEA_Module_SGH : public FEA_Module const DViewCArrayKokkos& elem_mass, const DViewCArrayKokkos& corner_force); + void update_external_energy_sgh(double rk_alpha, + const mesh_t& mesh, + const DViewCArrayKokkos& node_vel, + const DViewCArrayKokkos& node_coords, + DViewCArrayKokkos& elem_sie, + const DViewCArrayKokkos& elem_mass, + const DViewCArrayKokkos& corner_force); + void power_design_gradient_term(const_vec_array design_variables, vec_array design_gradients); void get_power_dgradient_sgh(double rk_alpha, diff --git a/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/FEA_Module_SGH.cpp b/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/FEA_Module_SGH.cpp index ee0c361a2..402f56fd4 100644 --- a/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/FEA_Module_SGH.cpp +++ b/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/FEA_Module_SGH.cpp @@ -1280,6 +1280,21 @@ void FEA_Module_SGH::sgh_solve() cycle); } + if (have_loading_conditions) { + applied_forces(material, + *mesh, + node_coords, + node_vel, + node_mass, + elem_den, + elem_vol, + elem_div, + elem_mat_id, + corner_force, + rk_alpha, + cycle); + } + #ifdef DEBUG if (myrank == 1) { std::cout << "rk_alpha = " << rk_alpha << ", dt = " << dt << std::endl; @@ -1319,20 +1334,6 @@ void FEA_Module_SGH::sgh_solve() node_mass, corner_force); - if (have_loading_conditions) { - applied_forces(material, - *mesh, - node_coords, - node_vel, - node_mass, - elem_den, - elem_vol, - elem_div, - elem_mat_id, - corner_force, - rk_alpha, - cycle); - } // ---- apply force boundary conditions to the boundary patches---- boundary_velocity(*mesh, boundary, node_vel); @@ -1395,6 +1396,16 @@ void FEA_Module_SGH::sgh_solve() elem_mass, corner_force); + if (have_loading_conditions) { + update_external_energy_sgh(rk_alpha, + *mesh, + node_vel, + node_coords, + elem_sie, + elem_mass, + corner_force); + } + // ---- Update nodal positions ---- update_position_sgh(rk_alpha, nall_nodes, diff --git a/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/energy_sgh.cpp b/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/energy_sgh.cpp index 936aa4c8e..3adb2accc 100644 --- a/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/energy_sgh.cpp +++ b/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/energy_sgh.cpp @@ -1,5 +1,5 @@ /********************************************************************************************** - 2020. Triad National Security, LLC. All rights reserved. + � 2020. Triad National Security, LLC. All rights reserved. This program was produced under U.S. Government contract 89233218CNA000001 for Los Alamos National Laboratory (LANL), which is operated by Triad National Security, LLC for the U.S. Department of Energy/National Nuclear Security Administration. All rights in the program are @@ -34,6 +34,8 @@ #include "mesh.h" #include "state.h" #include "FEA_Module_SGH.h" +#include "Simulation_Parameters/Simulation_Parameters_Explicit.h" +#include "Simulation_Parameters/FEA_Module/SGH_Parameters.h" ///////////////////////////////////////////////////////////////////////////// /// @@ -96,3 +98,100 @@ void FEA_Module_SGH::update_energy_sgh(double rk_alpha, return; } // end subroutine + +///////////////////////////////////////////////////////////////////////////// +/// +/// \fn update_external_energy_sgh +/// +/// \brief Evolves the specific internal energy +/// +/// \param The current Runge Kutta alpha value +/// \param The simulation mesh +/// \param A view into the nodal velocity data +/// \param A view into the nodal position data +/// \param A view into the element specific internal energy data +/// \param A view into the corner force data +/// +///////////////////////////////////////////////////////////////////////////// +void FEA_Module_SGH::update_external_energy_sgh(double rk_alpha, + const mesh_t& mesh, + const DViewCArrayKokkos& node_vel, + const DViewCArrayKokkos& node_coords, + DViewCArrayKokkos& elem_sie, + const DViewCArrayKokkos& elem_mass, + const DViewCArrayKokkos& corner_force) +{ + + const size_t rk_level = simparam->dynamic_options.rk_num_bins - 1; + const size_t num_dim = mesh.num_dims; + const_vec_array all_initial_node_coords = all_initial_node_coords_distributed->getLocalView(Tpetra::Access::ReadOnly); + const size_t num_lcs = module_params->loading.size(); + + const DCArrayKokkos mat_fill = simparam->mat_fill; + const DCArrayKokkos loading = module_params->loading; + + // debug check + // std::cout << "NUMBER OF LOADING CONDITIONS: " << num_lcs << std::endl; + + for (size_t ilc = 0; ilc < num_lcs; ilc++) { + + const Volume current_volume = loading(ilc).volume; + const double applied_force[] = {loading(ilc).x, loading(ilc).y, loading(ilc).z}; + + FOR_ALL_CLASS(elem_id, 0, rnum_elem, { + double current_node_coords[3]; + size_t dof_id; + double node_force[3]; + double radius; + size_t node_id; + size_t corner_id; + size_t corner_lid; + double node_radius; + double elem_power = 0.0; + double half_vel; + // std::cout << elem_mass(elem_id) <& material, // debug check // std::cout << "NUMBER OF LOADING CONDITIONS: " << num_lcs << std::endl; - // walk over the nodes to update the velocity - FOR_ALL_CLASS(node_gid, 0, nlocal_nodes, { - double current_node_coords[3]; - size_t dof_id; - double node_force[3]; - double applied_force[3]; - double radius; - for (size_t dim = 0; dim < num_dim; dim++) { - node_force[dim] = 0.0; - current_node_coords[dim] = all_initial_node_coords(node_gid, dim); - } // end for dim - radius = sqrt(current_node_coords[0] * current_node_coords[0] + current_node_coords[1] * current_node_coords[1] + current_node_coords[2] * current_node_coords[2]); - for (size_t ilc = 0; ilc < num_lcs; ilc++) { - // debug check - // std::cout << "LOADING CONDITION VOLUME TYPE: " << to_string(loading(ilc).volume) << std::endl; - - bool fill_this = loading(ilc).volume.contains(current_node_coords); - if (fill_this) { - // loop over all corners around the node and calculate the nodal force - for (size_t corner_lid = 0; corner_lid < num_corners_in_node(node_gid); corner_lid++) { - // Get corner gid - size_t corner_gid = corners_in_node(node_gid, corner_lid); - applied_force[0] = loading(ilc).x; - applied_force[1] = loading(ilc).y; - applied_force[2] = loading(ilc).z; + for (size_t ilc = 0; ilc < num_lcs; ilc++) { + + const Volume current_volume = loading(ilc).volume; + const double applied_force[] = {loading(ilc).x, loading(ilc).y, loading(ilc).z}; + + FOR_ALL_CLASS(elem_id, 0, rnum_elem, { + double current_node_coords[3]; + size_t dof_id; + double node_force[3]; + double radius; + size_t node_id; + size_t corner_id; + // std::cout << elem_mass(elem_id) <num_dims; bool use_solve_checkpoints = simparam->optimization_options.use_solve_checkpoints; bool use_gradient_tally = simparam->optimization_options.use_gradient_tally; + const size_t num_lcs = module_params->loading_conditions.size(); real_t global_dt, current_time; size_t current_data_index, next_data_index; int print_cycle = simparam->dynamic_options.print_cycle; @@ -771,6 +772,21 @@ void FEA_Module_SGH::compute_topology_optimization_adjoint_full(Teuchos::RCPCPU_Time(); get_force_dgradient_sgh(material, diff --git a/src/Parallel-Solvers/Simulation_Parameters/Geometry.h b/src/Parallel-Solvers/Simulation_Parameters/Geometry.h index dd36d171e..aa0e593ae 100644 --- a/src/Parallel-Solvers/Simulation_Parameters/Geometry.h +++ b/src/Parallel-Solvers/Simulation_Parameters/Geometry.h @@ -47,14 +47,6 @@ struct Volume : Yaml::ValidatedYaml { double length_x = 0; double length_y = 0; double length_z = 0; - double i0_real; - double j0_real; - double k0_real; - int i0; - int j0; - int k0; - int elem_id0; - bool fill_this; // Run voxelization scheme on stl file KOKKOS_FUNCTION @@ -68,9 +60,17 @@ struct Volume : Yaml::ValidatedYaml { } KOKKOS_FUNCTION - bool contains(const double* elem_coords) { + bool contains(const double* elem_coords) const { double radius; - + bool fill_this; + double i0_real; + double j0_real; + double k0_real; + int i0; + int j0; + int k0; + int elem_id0; + switch(type) { case VOLUME_TYPE::global: return true; From 253a0e577f4b816637f81ec264b250dde2fc2283 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CAdrian-Diaz=E2=80=9D?= <“adriandiaz1117@gmail.com”> Date: Mon, 29 Jul 2024 09:36:54 -0600 Subject: [PATCH 089/233] ENH: refactor external force contribution + change xml default --- .../SGH_Solver/include/FEA_Module_SGH.h | 9 +- .../SGH_Solver/src/FEA_Module_SGH.cpp | 10 -- .../SGH_Solver/src/energy_sgh.cpp | 97 ------------------- .../SGH_Solver/src/force_sgh.cpp | 11 ++- .../SGH_Solver/src/momentum.cpp | 70 +++++++++---- .../SGH_Solver/src/setup_sgh.cpp | 5 + .../optimization_parameters.xml | 2 +- 7 files changed, 66 insertions(+), 138 deletions(-) diff --git a/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/include/FEA_Module_SGH.h b/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/include/FEA_Module_SGH.h index 941b9927f..4d0f4ffac 100644 --- a/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/include/FEA_Module_SGH.h +++ b/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/include/FEA_Module_SGH.h @@ -348,14 +348,6 @@ class FEA_Module_SGH : public FEA_Module const DViewCArrayKokkos& elem_mass, const DViewCArrayKokkos& corner_force); - void update_external_energy_sgh(double rk_alpha, - const mesh_t& mesh, - const DViewCArrayKokkos& node_vel, - const DViewCArrayKokkos& node_coords, - DViewCArrayKokkos& elem_sie, - const DViewCArrayKokkos& elem_mass, - const DViewCArrayKokkos& corner_force); - void power_design_gradient_term(const_vec_array design_variables, vec_array design_gradients); void get_power_dgradient_sgh(double rk_alpha, @@ -686,6 +678,7 @@ class FEA_Module_SGH : public FEA_Module // Dual Views of the corner struct variables DViewCArrayKokkos corner_force; + DCArrayKokkos corner_external_force; DViewCArrayKokkos corner_mass; // Boundary Conditions Data diff --git a/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/FEA_Module_SGH.cpp b/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/FEA_Module_SGH.cpp index 402f56fd4..2036ce050 100644 --- a/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/FEA_Module_SGH.cpp +++ b/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/FEA_Module_SGH.cpp @@ -1396,16 +1396,6 @@ void FEA_Module_SGH::sgh_solve() elem_mass, corner_force); - if (have_loading_conditions) { - update_external_energy_sgh(rk_alpha, - *mesh, - node_vel, - node_coords, - elem_sie, - elem_mass, - corner_force); - } - // ---- Update nodal positions ---- update_position_sgh(rk_alpha, nall_nodes, diff --git a/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/energy_sgh.cpp b/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/energy_sgh.cpp index 3adb2accc..f5b925746 100644 --- a/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/energy_sgh.cpp +++ b/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/energy_sgh.cpp @@ -98,100 +98,3 @@ void FEA_Module_SGH::update_energy_sgh(double rk_alpha, return; } // end subroutine - -///////////////////////////////////////////////////////////////////////////// -/// -/// \fn update_external_energy_sgh -/// -/// \brief Evolves the specific internal energy -/// -/// \param The current Runge Kutta alpha value -/// \param The simulation mesh -/// \param A view into the nodal velocity data -/// \param A view into the nodal position data -/// \param A view into the element specific internal energy data -/// \param A view into the corner force data -/// -///////////////////////////////////////////////////////////////////////////// -void FEA_Module_SGH::update_external_energy_sgh(double rk_alpha, - const mesh_t& mesh, - const DViewCArrayKokkos& node_vel, - const DViewCArrayKokkos& node_coords, - DViewCArrayKokkos& elem_sie, - const DViewCArrayKokkos& elem_mass, - const DViewCArrayKokkos& corner_force) -{ - - const size_t rk_level = simparam->dynamic_options.rk_num_bins - 1; - const size_t num_dim = mesh.num_dims; - const_vec_array all_initial_node_coords = all_initial_node_coords_distributed->getLocalView(Tpetra::Access::ReadOnly); - const size_t num_lcs = module_params->loading.size(); - - const DCArrayKokkos mat_fill = simparam->mat_fill; - const DCArrayKokkos loading = module_params->loading; - - // debug check - // std::cout << "NUMBER OF LOADING CONDITIONS: " << num_lcs << std::endl; - - for (size_t ilc = 0; ilc < num_lcs; ilc++) { - - const Volume current_volume = loading(ilc).volume; - const double applied_force[] = {loading(ilc).x, loading(ilc).y, loading(ilc).z}; - - FOR_ALL_CLASS(elem_id, 0, rnum_elem, { - double current_node_coords[3]; - size_t dof_id; - double node_force[3]; - double radius; - size_t node_id; - size_t corner_id; - size_t corner_lid; - double node_radius; - double elem_power = 0.0; - double half_vel; - // std::cout << elem_mass(elem_id) <& material, const size_t num_dim = mesh.num_dims; const_vec_array all_initial_node_coords = all_initial_node_coords_distributed->getLocalView(Tpetra::Access::ReadOnly); const size_t num_lcs = module_params->loading.size(); + const size_t num_corners = mesh.num_corners; const DCArrayKokkos mat_fill = simparam->mat_fill; const DCArrayKokkos loading = module_params->loading; @@ -906,6 +907,14 @@ void FEA_Module_SGH::applied_forces(const DCArrayKokkos& material, // debug check // std::cout << "NUMBER OF LOADING CONDITIONS: " << num_lcs << std::endl; + //initialize + FOR_ALL_CLASS(corner_id, 0, num_corners, { + for (size_t dim = 0; dim < num_dim; dim++) { + corner_external_force(corner_id,dim) = 0; + } + }); // end parallel for + Kokkos::fence(); + for (size_t ilc = 0; ilc < num_lcs; ilc++) { const Volume current_volume = loading(ilc).volume; @@ -934,7 +943,7 @@ void FEA_Module_SGH::applied_forces(const DCArrayKokkos& material, if (fill_this) { // loop over dimension for (size_t dim = 0; dim < num_dim; dim++) { - corner_force(corner_id,dim) += applied_force[dim] * current_node_coords[dim] / radius / num_nodes_in_elem; + corner_external_force(corner_id,dim) += applied_force[dim] * current_node_coords[dim] / radius / num_nodes_in_elem; } // end for dim } } diff --git a/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/momentum.cpp b/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/momentum.cpp index 9c03ecf85..93b1a1d43 100644 --- a/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/momentum.cpp +++ b/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/momentum.cpp @@ -1,5 +1,5 @@ /********************************************************************************************** - 2020. Triad National Security, LLC. All rights reserved. + � 2020. Triad National Security, LLC. All rights reserved. This program was produced under U.S. Government contract 89233218CNA000001 for Los Alamos National Laboratory (LANL), which is operated by Triad National Security, LLC for the U.S. Department of Energy/National Nuclear Security Administration. All rights in the program are @@ -33,6 +33,7 @@ **********************************************************************************************/ #include "state.h" #include "FEA_Module_SGH.h" +#include "Simulation_Parameters/FEA_Module/SGH_Parameters.h" ///////////////////////////////////////////////////////////////////////////// /// @@ -54,32 +55,59 @@ void FEA_Module_SGH::update_velocity_sgh(double rk_alpha, { const size_t rk_level = rk_num_bins - 1; const size_t num_dims = num_dim; + const size_t num_lcs = module_params->loading.size(); // walk over the nodes to update the velocity - FOR_ALL_CLASS(node_gid, 0, nlocal_nodes, { - double node_force[3]; - for (size_t dim = 0; dim < num_dims; dim++) { - node_force[dim] = 0.0; - } // end for dim - - // loop over all corners around the node and calculate the nodal force - for (size_t corner_lid = 0; corner_lid < num_corners_in_node(node_gid); corner_lid++) { - // Get corner gid - size_t corner_gid = corners_in_node(node_gid, corner_lid); - - // loop over dimension + if(num_lcs){ + FOR_ALL_CLASS(node_gid, 0, nlocal_nodes, { + double node_force[3]; for (size_t dim = 0; dim < num_dims; dim++) { - node_force[dim] += corner_force(corner_gid, dim); + node_force[dim] = 0.0; } // end for dim - } // end for corner_lid - // update the velocity - for (int dim = 0; dim < num_dims; dim++) { - node_vel(rk_level, node_gid, dim) = node_vel(0, node_gid, dim) + - rk_alpha * dt * node_force[dim] / node_mass(node_gid); - } // end for dim - }); // end for parallel for over nodes + // loop over all corners around the node and calculate the nodal force + for (size_t corner_lid = 0; corner_lid < num_corners_in_node(node_gid); corner_lid++) { + // Get corner gid + size_t corner_gid = corners_in_node(node_gid, corner_lid); + + // loop over dimension + for (size_t dim = 0; dim < num_dims; dim++) { + node_force[dim] += corner_force(corner_gid, dim) + corner_external_force(corner_gid, dim); + } // end for dim + } // end for corner_lid + + // update the velocity + for (int dim = 0; dim < num_dims; dim++) { + node_vel(rk_level, node_gid, dim) = node_vel(0, node_gid, dim) + + rk_alpha * dt * node_force[dim] / node_mass(node_gid); + } // end for dim + }); // end for parallel for over nodes + } + else{ + FOR_ALL_CLASS(node_gid, 0, nlocal_nodes, { + double node_force[3]; + for (size_t dim = 0; dim < num_dims; dim++) { + node_force[dim] = 0.0; + } // end for dim + // loop over all corners around the node and calculate the nodal force + for (size_t corner_lid = 0; corner_lid < num_corners_in_node(node_gid); corner_lid++) { + // Get corner gid + size_t corner_gid = corners_in_node(node_gid, corner_lid); + + // loop over dimension + for (size_t dim = 0; dim < num_dims; dim++) { + node_force[dim] += corner_force(corner_gid, dim); + } // end for dim + } // end for corner_lid + + // update the velocity + for (int dim = 0; dim < num_dims; dim++) { + node_vel(rk_level, node_gid, dim) = node_vel(0, node_gid, dim) + + rk_alpha * dt * node_force[dim] / node_mass(node_gid); + } // end for dim + }); // end for parallel for over nodes + } return; } // end subroutine update_velocity diff --git a/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/setup_sgh.cpp b/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/setup_sgh.cpp index b45326d27..f86e6f1b2 100644 --- a/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/setup_sgh.cpp +++ b/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/setup_sgh.cpp @@ -115,6 +115,11 @@ void FEA_Module_SGH::setup() corner_force = DViewCArrayKokkos(&corner_interface.force(0, 0), num_corners, num_dim); corner_mass = DViewCArrayKokkos(&corner_interface.mass(0), num_corners); + //external force storage + if(num_lcs){ + corner_external_force = DCArrayKokkos(num_corners, num_dim); + } + // allocate elem_vel_grad elem_vel_grad = DCArrayKokkos(num_elems, 3, 3); diff --git a/src/Parallel-Solvers/Parallel-Explicit/optimization_parameters.xml b/src/Parallel-Solvers/Parallel-Explicit/optimization_parameters.xml index 7f2862aa5..028470728 100644 --- a/src/Parallel-Solvers/Parallel-Explicit/optimization_parameters.xml +++ b/src/Parallel-Solvers/Parallel-Explicit/optimization_parameters.xml @@ -62,7 +62,7 @@ - + From ee72acd2c2864229f22d1922f19364d78d3f5093 Mon Sep 17 00:00:00 2001 From: Nathaniel Morgan Date: Mon, 29 Jul 2024 11:14:23 -0600 Subject: [PATCH 090/233] fixed more bugs --- .../Solvers/SGH_solver/include/sgh_solver.h | 6 +- .../src/Solvers/SGH_solver/src/sgh_solve.cpp | 12 +- single-node-refactor/src/driver.h | 311 +++++++++++++----- 3 files changed, 242 insertions(+), 87 deletions(-) diff --git a/single-node-refactor/src/Solvers/SGH_solver/include/sgh_solver.h b/single-node-refactor/src/Solvers/SGH_solver/include/sgh_solver.h index 1c9ad6d31..c5245626c 100644 --- a/single-node-refactor/src/Solvers/SGH_solver/include/sgh_solver.h +++ b/single-node-refactor/src/Solvers/SGH_solver/include/sgh_solver.h @@ -396,10 +396,10 @@ double sum_domain_internal_energy(const DCArrayKokkos& MaterialPoints_ma const DCArrayKokkos& MaterialPoints_sie, const size_t num_mat_points); -double sum_domain_kinetic_energy(const DCArrayKokkos& node_vel, +double sum_domain_kinetic_energy(const mesh_t& mesh, + const DCArrayKokkos& node_vel, const DCArrayKokkos& node_coords, - const DCArrayKokkos& node_mass, - const mesh_t& mesh); + const DCArrayKokkos& node_mass); #endif // end HEADER_H diff --git a/single-node-refactor/src/Solvers/SGH_solver/src/sgh_solve.cpp b/single-node-refactor/src/Solvers/SGH_solver/src/sgh_solve.cpp index 0d4239fdd..3126b8664 100644 --- a/single-node-refactor/src/Solvers/SGH_solver/src/sgh_solve.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver/src/sgh_solve.cpp @@ -122,10 +122,10 @@ void SGH::execute(SimulationParameters_t& SimulationParamaters, } // end loop over mat_id // extensive KE - KE_t0 = sum_domain_kinetic_energy(State.node.vel, + KE_t0 = sum_domain_kinetic_energy(mesh, + State.node.vel, State.node.coords, - State.node.mass, - mesh); + State.node.mass); // extensive TE TE_t0 = IE_t0 + KE_t0; @@ -476,10 +476,10 @@ void SGH::execute(SimulationParameters_t& SimulationParamaters, } // end loop over mat_id // extensive KE - KE_tend = sum_domain_kinetic_energy(State.node.vel, + KE_tend = sum_domain_kinetic_energy(mesh, + State.node.vel, State.node.coords, - State.node.mass, - mesh); + State.node.mass); // extensive TE TE_tend = IE_tend + KE_tend; diff --git a/single-node-refactor/src/driver.h b/single-node-refactor/src/driver.h index c62d90c30..f1f2de59c 100644 --- a/single-node-refactor/src/driver.h +++ b/single-node-refactor/src/driver.h @@ -50,6 +50,99 @@ void fill_regions(DCArrayKokkos&, State_t&, size_t); +// ============================================================================== +// Function that returns 1 or 0 if the mesh location is inside an object +// ============================================================================== +size_t fill_geometric_region(const mesh_t& mesh, + const DCArrayKokkos& voxel_elem_mat_id, + const DCArrayKokkos& region_fills, + const ViewCArrayKokkos & mesh_coords, + const double voxel_dx, + const double voxel_dy, + const double voxel_dz, + const double orig_x, + const double orig_y, + const double orig_z, + const size_t voxel_num_i, + const size_t voxel_num_j, + const size_t voxel_num_k, + const size_t f_id); + + +// ============================================================================== +// SGH related fill functions +// ============================================================================== +void fill_regions_sgh(const Material_t& Materials, + const mesh_t& mesh, + const DCArrayKokkos & node_coords, + const DCArrayKokkos & node_vel, + DCArrayKokkos & GaussPoint_den, + DCArrayKokkos & GaussPoint_sie, + DCArrayKokkos & elem_mat_id, + DCArrayKokkos & region_fills, + DCArrayKokkos & voxel_elem_mat_id, + const DCArrayKokkos & read_voxel_file, + const size_t num_fills, + const size_t num_elems, + const size_t num_nodes, + const size_t rk_num_bins); + +void init_press_sspd_stress(const Material_t& Materials, + const mesh_t& mesh, + const DCArrayKokkos& MaterialPoints_den, + const DCArrayKokkos& MaterialPoints_pres, + const DCArrayKokkos& MaterialPoints_stress, + const DCArrayKokkos& MaterialPoints_sspd, + const DCArrayKokkos& MaterialPoints_sie, + const DCArrayKokkos& MaterialPoints_statev, + const size_t rk_num_bins, + const size_t num_mat_pts, + const size_t mat_id); + +void init_corner_node_masses_zero(const mesh_t& mesh, + const DCArrayKokkos& node_mass, + const DCArrayKokkos& corner_mass); + +void calc_corner_node_masses(const Material_t& Materials, + const mesh_t& mesh, + const DCArrayKokkos& node_coords, + const DCArrayKokkos& node_mass, + const DCArrayKokkos& corner_mass, + const DCArrayKokkos& MaterialPoints_mass, + const DCArrayKokkos& MaterialToMeshMaps_elem, + const size_t num_mat_elems); + + +// ============================================================================== +// Functions to paint nodal fields onto the mesh +// ============================================================================== +KOKKOS_FUNCTION +void paint_node_vel(const DCArrayKokkos& region_fills, + const DCArrayKokkos& node_vel, + const DCArrayKokkos& node_coords, + const double node_gid, + const double num_dims, + const size_t f_id, + const size_t rk_num_bins); + + + +// ============================================================================== +// Functions to fields on the gauss points of the mesh +// ============================================================================== +KOKKOS_FUNCTION +void paint_gauss_den_sie(const Material_t& Materials, + const mesh_t& mesh, + const DCArrayKokkos & node_coords, + const DCArrayKokkos & GaussPoint_den, + const DCArrayKokkos & GaussPoint_sie, + const DCArrayKokkos & elem_mat_id, + const DCArrayKokkos& region_fills, + const ViewCArrayKokkos elem_coords, + const double elem_gid, + const size_t f_id); + + // ============================================================================== // Functions to read voxel mesh // ============================================================================== @@ -330,9 +423,6 @@ void fill_regions(DCArrayKokkos& region_fills, // variables from a voxel file // --------------------------------------------- DCArrayKokkos voxel_elem_mat_id; // 1 or 0 if material exist, or it is the material_id - double voxel_dx, voxel_dy, voxel_dz; // voxel mesh resolution, set by input file - double orig_x, orig_y, orig_z; // origin of voxel elem center mesh, set by input file - size_t voxel_num_i, voxel_num_j, voxel_num_k; // num voxel elements in each direction, set by input file DCArrayKokkos read_voxel_file(num_fills); // check to see if readVoxelFile FOR_ALL(f_id, 0, num_fills, { @@ -359,15 +449,18 @@ void fill_regions(DCArrayKokkos& region_fills, mesh, State.node.coords, State.node.vel, - region_fills, - voxel_elem_mat_id, GaussPoint_den, GaussPoint_sie, elem_mat_id, + region_fills, + voxel_elem_mat_id, + read_voxel_file, num_fills, num_elems, num_nodes, rk_num_bins); + + // note device and host are updated in the above function // --------------------------------------------- @@ -385,11 +478,13 @@ void fill_regions(DCArrayKokkos& region_fills, size_t sum_local; size_t sum_total; - REDUCE_SUM(elem_gid, 0, num_elems, sum_local{ - if(elem_mat_id(elem_id) == mat_id;){ + REDUCE_SUM(elem_gid, 0, num_elems, sum_local,{ + + if(elem_mat_id(elem_gid) == mat_id){ // increment the number of elements the materials live in sum_local++; } // end if + }, sum_total); // material index space size @@ -479,7 +574,7 @@ void fill_regions(DCArrayKokkos& region_fills, // --- density and mass --- State.MaterialPoints(mat_id).den.host(mat_point_lid) = GaussPoint_den.host(gauss_gid); - State.MaterialPoints(mat_id).mass.host(mat_point_lid) = GaussPoint_den.host(gauss_gid) * GaussPoints.vol.host(gauss_gid); + State.MaterialPoints(mat_id).mass.host(mat_point_lid) = GaussPoint_den.host(gauss_gid) * State.GaussPoints.vol.host(gauss_gid); // --- set eroded flag to false --- State.MaterialPoints(mat_id).eroded.host(mat_point_lid) = false; @@ -504,18 +599,22 @@ void fill_regions(DCArrayKokkos& region_fills, } // end serial for loop over all elements // copy the state to the device - State.MaterialPoints(mat_id).den.update_device(); - State.MaterialPoints(mat_id).mass.update_device(); - State.MaterialPoints(mat_id).sie.update_device(); - State.MaterialPoints(mat_id).eroded.update_device(); + for(int mat_id=0; mat_id& region_fills, State.MaterialPoints(mat_id).sie, State.MaterialPoints(mat_id).statev, rk_num_bins, - num_mat_pts, + num_mat_points, mat_id); } // for loop over mat_id // set corner and node masses to zero - init_corner_node_masses_zero(mesh, node_mass, corner_mass); + init_corner_node_masses_zero(mesh, State.node.mass, State.corner.mass); // calculate corner and node masses on the mesh @@ -545,8 +644,9 @@ void fill_regions(DCArrayKokkos& region_fills, mesh, State.node.coords, State.node.mass, - State.corner_mass, + State.corner.mass, State.MaterialPoints(mat_id).mass, + State.MaterialToMeshMaps(mat_id).elem, num_mat_elems); } // end for mat_id } @@ -983,7 +1083,17 @@ std::string trim(const std::string& s) size_t fill_geometric_region(const mesh_t& mesh, const DCArrayKokkos& voxel_elem_mat_id, const DCArrayKokkos& region_fills, - const ViewCArrayKokkos & mesh_coords) const { + const ViewCArrayKokkos & mesh_coords, + const double voxel_dx, + const double voxel_dy, + const double voxel_dz, + const double orig_x, + const double orig_y, + const double orig_z, + const size_t voxel_num_i, + const size_t voxel_num_j, + const size_t voxel_num_k, + const size_t f_id){ // default is not to fill the element size_t fill_this = 0; @@ -1107,24 +1217,25 @@ size_t fill_geometric_region(const mesh_t& mesh, /// /// \param Materials holds the material models and global parameters /// \param mesh is the simulation mesh +/// \param node_coords are the node coordinates of the element /// \param GaussPoint_den is density at the GaussPoints on the mesh /// \param GaussPoint_sie is specific internal energy at the GaussPoints on the mesh /// \param elem_mat_id is the material id in an element /// \param region_fills are the instructures to paint state on the mesh -/// \param node_vel is the nodal velocity array /// \param elem_coords is the geometric center of the element /// \param elem_gid is the element global mesh index /// \param f_id is fill instruction /// ///////////////////////////////////////////////////////////////////////////// KOKKOS_FUNCTION -void paint_gauss_den_sie(const Material_t& Material, +void paint_gauss_den_sie(const Material_t& Materials, const mesh_t& mesh, - const CArrayKokkos & GaussPoint_den, - const CArrayKokkos & GaussPoint_sie, - const CArrayKokkos & elem_mat_id, + const DCArrayKokkos & node_coords, + const DCArrayKokkos & GaussPoint_den, + const DCArrayKokkos & GaussPoint_sie, + const DCArrayKokkos & elem_mat_id, const DCArrayKokkos& region_fills, - const ViewCArrayKokkos & elem_coords, + const ViewCArrayKokkos elem_coords, const double elem_gid, const size_t f_id){ @@ -1132,10 +1243,11 @@ void paint_gauss_den_sie(const Material_t& Material, size_t mat_id = region_fills(f_id).material_id; // --- material_id in elem --- - elem_mat_id(elem_id) = mat_id; + elem_mat_id(elem_gid) = mat_id; // loop over the Gauss points in the element { + const size_t gauss_gid = elem_gid; // 1 gauss point per element // add test problem state setups here @@ -1143,8 +1255,9 @@ void paint_gauss_den_sie(const Material_t& Material, GaussPoint_den(gauss_gid) = 1.0; + // note: elem_coords are the gauss_coords, higher quadrature requires ref elem data double pres = 0.25 * (cos(2.0 * PI * elem_coords(0)) + - cos(2.0 * PI * elem_coords(1)) ) + 1.0; + cos(2.0 * PI * elem_coords(1)) ) + 1.0; // p = rho*ie*(gamma - 1) // makes sure index 0 matches the gamma in the gamma law function @@ -1188,7 +1301,8 @@ KOKKOS_FUNCTION void paint_node_vel(const DCArrayKokkos& region_fills, const DCArrayKokkos& node_vel, const DCArrayKokkos& node_coords, - const double elem_gid, + const double node_gid, + const double num_dims, const size_t f_id, const size_t rk_num_bins){ @@ -1201,7 +1315,7 @@ void paint_node_vel(const DCArrayKokkos& region_fills, { node_vel(rk_level, node_gid, 0) = region_fills(f_id).u; node_vel(rk_level, node_gid, 1) = region_fills(f_id).v; - if (mesh.num_dims == 3) { + if (num_dims == 3) { node_vel(rk_level, node_gid, 2) = region_fills(f_id).w; } @@ -1233,7 +1347,7 @@ void paint_node_vel(const DCArrayKokkos& region_fills, node_vel(rk_level, node_gid, 0) = region_fills(f_id).speed * dir[0]; node_vel(rk_level, node_gid, 1) = region_fills(f_id).speed * dir[1]; - if (mesh.num_dims == 3) { + if (num_dims == 3) { node_vel(rk_level, node_gid, 2) = 0.0; } @@ -1265,7 +1379,7 @@ void paint_node_vel(const DCArrayKokkos& region_fills, node_vel(rk_level, node_gid, 0) = region_fills(f_id).speed * dir[0]; node_vel(rk_level, node_gid, 1) = region_fills(f_id).speed * dir[1]; - if (mesh.num_dims == 3) { + if (num_dims == 3) { node_vel(rk_level, node_gid, 2) = region_fills(f_id).speed * dir[2]; } @@ -1287,7 +1401,7 @@ void paint_node_vel(const DCArrayKokkos& region_fills, cos(PI * node_coords(rk_level, node_gid, 1)); node_vel(rk_level, node_gid, 1) = -1.0 * cos(PI * node_coords(rk_level, node_gid, 0)) * sin(PI * node_coords(rk_level, node_gid, 1)); - if (mesh.num_dims == 3) { + if (num_dims == 3) { node_vel(rk_level, node_gid, 2) = 0.0; } @@ -1299,7 +1413,7 @@ void paint_node_vel(const DCArrayKokkos& region_fills, // no velocity node_vel(rk_level, node_gid, 0) = 0.0; node_vel(rk_level, node_gid, 1) = 0.0; - if (mesh.num_dims == 3) { + if (num_dims == 3) { node_vel(rk_level, node_gid, 2) = 0.0; } @@ -1310,7 +1424,7 @@ void paint_node_vel(const DCArrayKokkos& region_fills, // no velocity node_vel(rk_level, node_gid, 0) = 0.0; node_vel(rk_level, node_gid, 1) = 0.0; - if (mesh.num_dims == 3) { + if (num_dims == 3) { node_vel(rk_level, node_gid, 2) = 0.0; } @@ -1353,19 +1467,25 @@ void paint_node_vel(const DCArrayKokkos& region_fills, ///////////////////////////////////////////////////////////////////////////// void fill_regions_sgh(const Material_t& Materials, const mesh_t& mesh, - const DCArrayKokkos& node_coords, - const DCArrayKokkos& node_vel, - const DCArrayKokkos& region_fills, - const DCArrayKokkos& voxel_elem_mat_id, - const CArrayKokkos & GaussPoint_den, - const CArrayKokkos & GaussPoint_sie, - const CArrayKokkos & elem_mat_id, + const DCArrayKokkos & node_coords, + const DCArrayKokkos & node_vel, + DCArrayKokkos & GaussPoint_den, + DCArrayKokkos & GaussPoint_sie, + DCArrayKokkos & elem_mat_id, + DCArrayKokkos & region_fills, + DCArrayKokkos & voxel_elem_mat_id, + const DCArrayKokkos & read_voxel_file, const size_t num_fills, const size_t num_elems, const size_t num_nodes, const size_t rk_num_bins){ + double voxel_dx, voxel_dy, voxel_dz; // voxel mesh resolution, set by input file + double orig_x, orig_y, orig_z; // origin of voxel elem center mesh, set by input file + size_t voxel_num_i, voxel_num_j, voxel_num_k; // num voxel elements in each direction, set by input file + + // loop over the fill instructions for (size_t f_id = 0; f_id < num_fills; f_id++) { @@ -1375,9 +1495,15 @@ void fill_regions_sgh(const Material_t& Materials, { // read voxel mesh to get the values in the fcn interface user_voxel_init(voxel_elem_mat_id, - voxel_dx, voxel_dy, voxel_dz, - orig_x, orig_y, orig_z, - voxel_num_i, voxel_num_j, voxel_num_k, + voxel_dx, + voxel_dy, + voxel_dz, + orig_x, + orig_y, + orig_z, + voxel_num_i, + voxel_num_j, + voxel_num_k, region_fills(f_id).scale_x, region_fills(f_id).scale_y, region_fills(f_id).scale_z, @@ -1401,10 +1527,10 @@ void fill_regions_sgh(const Material_t& Materials, // get the coordinates of the element center (using rk_level=1 or node coords) for (int node_lid = 0; node_lid < mesh.num_nodes_in_elem; node_lid++) { - elem_coords(0) += node.coords(1, mesh.nodes_in_elem(elem_gid, node_lid), 0); - elem_coords(1) += node.coords(1, mesh.nodes_in_elem(elem_gid, node_lid), 1); + elem_coords(0) += node_coords(1, mesh.nodes_in_elem(elem_gid, node_lid), 0); + elem_coords(1) += node_coords(1, mesh.nodes_in_elem(elem_gid, node_lid), 1); if (mesh.num_dims == 3) { - elem_coords(2) += node.coords(1, mesh.nodes_in_elem(elem_gid, node_lid), 2); + elem_coords(2) += node_coords(1, mesh.nodes_in_elem(elem_gid, node_lid), 2); } else{ elem_coords(2) = 0.0; @@ -1416,21 +1542,36 @@ void fill_regions_sgh(const Material_t& Materials, // calc if we are to fill this element - size_t fill_this = fill_geometric_region(mesh, voxel_elem_mat_id, region_fills, elem_coords); + size_t fill_this = fill_geometric_region(mesh, + voxel_elem_mat_id, + region_fills, + elem_coords, + voxel_dx, + voxel_dy, + voxel_dz, + orig_x, + orig_y, + orig_z, + voxel_num_i, + voxel_num_j, + voxel_num_k, + f_id); // paint the material state on the element if fill_this=1 if (fill_this == 1) { // default sgh paint - paint_gauss_den_sie(Material, - mesh, - GaussPoint_den, - GaussPoint_sie, - elem_mat_id, - region_fills, - elem_gid, - f_id); + paint_gauss_den_sie(Materials, + mesh, + node_coords, + GaussPoint_den, + GaussPoint_sie, + elem_mat_id, + region_fills, + elem_coords, + elem_gid, + f_id); // add user defined paint here // user_defined_sgh_state(); @@ -1445,21 +1586,34 @@ void fill_regions_sgh(const Material_t& Materials, FOR_ALL(node_gid, 0, num_nodes, { // make a view to pass to fill and paint functions (using rk_level 1 for node coords) - ViewCArrayKokkos coords(&node_coords(1,node_gid,0), 3); + ViewCArrayKokkos these_coords(&node_coords(1,node_gid,0), 3); + // calc if we are to fill this element - size_t fill_this = fill_geometric_region(mesh, voxel_elem_mat_id, region_fills, coords); + size_t fill_this = fill_geometric_region(mesh, + voxel_elem_mat_id, + region_fills, + these_coords, + voxel_dx, + voxel_dy, + voxel_dz, + orig_x, + orig_y, + orig_z, + voxel_num_i, + voxel_num_j, + voxel_num_k, + f_id); // paint the material state on the node if fill_this=1 if (fill_this == 1) { // default sgh paint - paint_node_vel(Material, - mesh, - region_fills, + paint_node_vel(region_fills, node_vel, - coords, - elem_gid, + node_coords, + node_gid, + mesh.num_dims, f_id, rk_num_bins); @@ -1536,14 +1690,14 @@ void init_press_sspd_stress(const Material_t& Materials, // --- Sound Speed --- Materials.MaterialFunctions(mat_id).calc_sound_speed( - State.MaterialPoints_pres, - State.MaterialPoints_stress, + MaterialPoints_pres, + MaterialPoints_stress, mat_point_lid, mat_id, - State.MaterialPoints_statev, - State.MaterialPoints_sspd, - State.MaterialPoints_den(mat_point_lid), - State.MaterialPoints_sie(0, mat_point_lid), + MaterialPoints_statev, + MaterialPoints_sspd, + MaterialPoints_den(mat_point_lid), + MaterialPoints_sie(0, mat_point_lid), Materials.eos_global_vars); }); // end pressure and sound speed @@ -1556,7 +1710,7 @@ void init_press_sspd_stress(const Material_t& Materials, // always 3D even for 2D-RZ for (size_t i = 0; i < 3; i++) { for (size_t j = 0; j < 3; j++) { - State.MaterialPoints(mat_id).stress(rk_level, mat_point_lid, i, j) = 0.0; + MaterialPoints_stress(rk_level, mat_point_lid, i, j) = 0.0; } } // end for i,j @@ -1610,12 +1764,13 @@ void init_corner_node_masses_zero(const mesh_t& mesh, /// ///////////////////////////////////////////////////////////////////////////// void calc_corner_node_masses(const Material_t& Materials, - const mesh_t& mesh, - const DCArrayKokkos& node_coords, - const DCArrayKokkos& node_mass, - const DCArrayKokkos& corner_mass, - const DCArrayKokkos& MaterialPoints_mass, - const size_t num_mat_elems){ + const mesh_t& mesh, + const DCArrayKokkos& node_coords, + const DCArrayKokkos& node_mass, + const DCArrayKokkos& corner_mass, + const DCArrayKokkos& MaterialPoints_mass, + const DCArrayKokkos& MaterialToMeshMaps_elem, + const size_t num_mat_elems){ FOR_ALL(mat_elem_lid, 0, num_mat_elems, { @@ -1627,7 +1782,7 @@ void calc_corner_node_masses(const Material_t& Materials, double corner_frac = 1.0/((double)mesh.num_nodes_in_elem); // =1/8 // partion the mass to the corners - for(corner_lid=0; corner_lid Date: Mon, 29 Jul 2024 11:16:27 -0600 Subject: [PATCH 091/233] compiling --- .../src/Solvers/SGH_solver/src/sgh_solve.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/single-node-refactor/src/Solvers/SGH_solver/src/sgh_solve.cpp b/single-node-refactor/src/Solvers/SGH_solver/src/sgh_solve.cpp index 3126b8664..cf0fab39d 100644 --- a/single-node-refactor/src/Solvers/SGH_solver/src/sgh_solve.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver/src/sgh_solve.cpp @@ -636,10 +636,10 @@ double sum_domain_internal_energy(const DCArrayKokkos& MaterialPoints_ma } // end function // a function to tally the kinetic energy -double sum_domain_kinetic_energy(DCArrayKokkos& node_vel, - DCArrayKokkos& node_coords, - DCArrayKokkos& node_mass, - mesh_t& mesh){ +double sum_domain_kinetic_energy(const mesh_t& mesh, + const DCArrayKokkos& node_vel, + const DCArrayKokkos& node_coords, + const DCArrayKokkos& node_mass){ // extensive KE double KE_sum = 0; double KE_loc_sum; From 5b8323aefd2a809173133347eba1b618d07ff338 Mon Sep 17 00:00:00 2001 From: Nathaniel Morgan Date: Tue, 30 Jul 2024 16:24:19 -0600 Subject: [PATCH 092/233] fixed input mesh option that forced code to exit --- single-node-refactor/src/input/parse_yaml.cpp | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/single-node-refactor/src/input/parse_yaml.cpp b/single-node-refactor/src/input/parse_yaml.cpp index 0f183a14c..1c8d4ca3c 100644 --- a/single-node-refactor/src/input/parse_yaml.cpp +++ b/single-node-refactor/src/input/parse_yaml.cpp @@ -559,11 +559,6 @@ void parse_mesh_input(Yaml::Node& root, mesh_input_t& mesh_input) if (VERBOSE) { std::cout << "\tsource = " << source << std::endl; } - - if (mesh_input.source == mesh_input::generate && !mesh_input.file_path.empty()) { - std::cout << "ERROR: When the mesh source is set to generate, a mesh file cannot be passed in" << std::endl; - exit(0); - } } else{ std::cout << "ERROR: invalid mesh option input in YAML file: " << source << std::endl; @@ -803,9 +798,15 @@ void parse_mesh_input(Yaml::Node& root, mesh_input_t& mesh_input) } if (mesh_input.source == mesh_input::generate) { - std::cout << "ERROR: When the mesh source is set to generate, a mesh file cannot be passed in" << std::endl; - exit(0); + + // check to see if a file path was set + if(mesh_input.file_path.size()>0){ + std::cout << "ERROR: When the mesh source is set to generate, a mesh file cannot be passed in" << std::endl; + exit(0); + } + } + // ----------------------------------------------- From 12069277d4f308765bae362b478c4fd93c1c523e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CAdrian-Diaz=E2=80=9D?= <“adriandiaz1117@gmail.com”> Date: Tue, 30 Jul 2024 23:25:43 -0600 Subject: [PATCH 093/233] ENH: prevent double init call for AL --- .../Kinetic_Energy_Minimize.h | 51 +++++++++++-------- 1 file changed, 29 insertions(+), 22 deletions(-) diff --git a/src/Parallel-Solvers/Parallel-Explicit/Topology_Optimization/Kinetic_Energy_Minimize.h b/src/Parallel-Solvers/Parallel-Explicit/Topology_Optimization/Kinetic_Energy_Minimize.h index cb369efe1..ac146e35b 100644 --- a/src/Parallel-Solvers/Parallel-Explicit/Topology_Optimization/Kinetic_Energy_Minimize.h +++ b/src/Parallel-Solvers/Parallel-Explicit/Topology_Optimization/Kinetic_Energy_Minimize.h @@ -99,6 +99,7 @@ typedef MV::dual_view_type dual_vec_array; real_t previous_objective_accumulation, objective_sign; bool useLC_; // Use linear form of energy. Otherwise use quadratic form. + bool first_init; //prevents ROL from calling init computation twice at start for the AL algorithm ///////////////////////////////////////////////////////////////////////////// /// @@ -145,7 +146,7 @@ typedef MV::dual_view_type dual_vec_array; : useLC_(true) { Explicit_Solver_Pointer_ = Explicit_Solver_Pointer; - + first_init = false; valid_fea_modules.push_back(FEA_MODULE_TYPE::SGH); valid_fea_modules.push_back(FEA_MODULE_TYPE::Dynamic_Elasticity); nvalid_modules = valid_fea_modules.size(); @@ -211,14 +212,17 @@ typedef MV::dual_view_type dual_vec_array; const_host_vec_array design_densities = zp->getLocalView(Tpetra::Access::ReadOnly); if (type == ROL::UpdateType::Initial) { - // This is the first call to update - // first linear solve was done in FEA class run function already - FEM_Dynamic_Elasticity_->comm_variables(zp); - // update deformation variables - FEM_Dynamic_Elasticity_->update_forward_solve(zp); - // initial design density data was already communicated for ghost nodes in init_design() - // decide to output current optimization state - FEM_Dynamic_Elasticity_->Explicit_Solver_Pointer_->write_outputs(); + if(first_init){ + // This is the first call to update + // first linear solve was done in FEA class run function already + FEM_Dynamic_Elasticity_->comm_variables(zp); + // update deformation variables + FEM_Dynamic_Elasticity_->update_forward_solve(zp); + // initial design density data was already communicated for ghost nodes in init_design() + // decide to output current optimization state + FEM_Dynamic_Elasticity_->Explicit_Solver_Pointer_->write_outputs(); + } + first_init = true; } else if (type == ROL::UpdateType::Accept) { @@ -274,19 +278,22 @@ typedef MV::dual_view_type dual_vec_array; const_host_vec_array design_densities = zp->getLocalView(Tpetra::Access::ReadOnly); if (type == ROL::UpdateType::Initial) { - // This is the first call to update - if (Explicit_Solver_Pointer_->myrank == 0) { - *fos << "called SGH Initial" << std::endl; - } + if(first_init){ + // This is the first call to update + if (Explicit_Solver_Pointer_->myrank == 0) { + *fos << "called SGH Initial" << std::endl; + } - FEM_SGH_->comm_variables(zp); - FEM_SGH_->update_forward_solve(zp); - FEM_SGH_->compute_topology_optimization_adjoint_full(zp); - previous_objective_accumulation = objective_accumulation; - previous_gradients->assign(*(FEM_SGH_->cached_design_gradients_distributed)); - // initial design density data was already communicated for ghost nodes in init_design() - // decide to output current optimization state - // FEM_SGH_->Explicit_Solver_Pointer_->write_outputs(); + FEM_SGH_->comm_variables(zp); + FEM_SGH_->update_forward_solve(zp); + FEM_SGH_->compute_topology_optimization_adjoint_full(zp); + previous_objective_accumulation = objective_accumulation; + previous_gradients->assign(*(FEM_SGH_->cached_design_gradients_distributed)); + // initial design density data was already communicated for ghost nodes in init_design() + // decide to output current optimization state + // FEM_SGH_->Explicit_Solver_Pointer_->write_outputs(); + } + first_init = true; } else if (type == ROL::UpdateType::Accept) { if (Explicit_Solver_Pointer_->myrank == 0) { @@ -392,7 +399,7 @@ typedef MV::dual_view_type dual_vec_array; } std::cout.precision(10); - if (Explicit_Solver_Pointer_->myrank == 0) { + if (Explicit_Solver_Pointer_->myrank == 0&&first_init) { std::cout << "CURRENT TIME INTEGRAL OF KINETIC ENERGY " << objective_accumulation << std::endl; } From 8bf0d8c9276b177cb8bd92fe9d9345523d60bc7c Mon Sep 17 00:00:00 2001 From: Nathaniel Morgan Date: Wed, 31 Jul 2024 17:06:50 -0600 Subject: [PATCH 094/233] WIP on material centric implementation --- .../input-origin-erosion.yaml | 20 ++- single-node-refactor/input.yaml | 5 +- .../Solvers/SGH_solver/include/sgh_solver.h | 9 ++ .../src/Solvers/SGH_solver/src/energy_sgh.cpp | 15 +- .../src/Solvers/SGH_solver/src/force_sgh.cpp | 29 ++-- .../src/Solvers/SGH_solver/src/properties.cpp | 55 ++++--- .../src/Solvers/SGH_solver/src/sgh_solve.cpp | 141 ++++++++++++++++-- single-node-refactor/src/common/state.h | 1 + single-node-refactor/src/driver.h | 2 +- 9 files changed, 211 insertions(+), 66 deletions(-) diff --git a/single-node-refactor/input-origin-erosion.yaml b/single-node-refactor/input-origin-erosion.yaml index 3805d6dba..ade0cd963 100644 --- a/single-node-refactor/input-origin-erosion.yaml +++ b/single-node-refactor/input-origin-erosion.yaml @@ -5,7 +5,7 @@ dynamic_options: dt_min: 1.e-8 dt_max: 1.e-2 dt_start: 1.e-5 - cycle_stop: 300000 + cycle_stop: 30000 # mesh_options: @@ -78,15 +78,23 @@ materials: - 1.666666666666667 - 1.0E-14 - 1.0 - erosion_model: basic - void_mat_id: 1 - erode_tension_val: 0.00003 - erode_density_val: 0.02 + #erosion_model: basic + #erode_tension_val: 0.00003 + #erode_density_val: 0.02 - material: id: 1 eos_model_type: decoupled - eos_model: void + eos_model: gamma_law_gas + # strength_model: none + q1: 1.0 + q2: 1.333 + q1ex: 1.0 + q2ex: 1.333 + eos_global_vars: + - 1.666666666666667 + - 1.0E-14 + - 1.0 regions: - fill_volume: diff --git a/single-node-refactor/input.yaml b/single-node-refactor/input.yaml index 4802a3c53..a657ecbf2 100644 --- a/single-node-refactor/input.yaml +++ b/single-node-refactor/input.yaml @@ -42,9 +42,6 @@ boundary_conditions: geometry: x_plane direction: x_dir value: 0.0 - u: 0.0 - v: 0.0 - w: 1.0 type: reflected_velocity @@ -63,6 +60,8 @@ boundary_conditions: direction: z_dir value: 0.0 type: reflected_velocity + + materials: - material: diff --git a/single-node-refactor/src/Solvers/SGH_solver/include/sgh_solver.h b/single-node-refactor/src/Solvers/SGH_solver/include/sgh_solver.h index c5245626c..d4cf6b57d 100644 --- a/single-node-refactor/src/Solvers/SGH_solver/include/sgh_solver.h +++ b/single-node-refactor/src/Solvers/SGH_solver/include/sgh_solver.h @@ -401,5 +401,14 @@ double sum_domain_kinetic_energy(const mesh_t& mesh, const DCArrayKokkos& node_coords, const DCArrayKokkos& node_mass); +double sum_domain_material_mass(const DCArrayKokkos& MaterialPoints_mass, + const size_t num_mat_points); + +double sum_domain_node_mass(const mesh_t& mesh, + const DCArrayKokkos& node_coords, + const DCArrayKokkos& node_mass); + +void set_corner_force_zero(const mesh_t& mesh, + const DCArrayKokkos& corner_force); #endif // end HEADER_H diff --git a/single-node-refactor/src/Solvers/SGH_solver/src/energy_sgh.cpp b/single-node-refactor/src/Solvers/SGH_solver/src/energy_sgh.cpp index 57a80d9ef..691f4db64 100644 --- a/single-node-refactor/src/Solvers/SGH_solver/src/energy_sgh.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver/src/energy_sgh.cpp @@ -63,14 +63,20 @@ void SGH::update_energy(const double rk_alpha, const size_t num_mat_elems ) const { + // loop over all the elements in the mesh -FOR_ALL(mat_elem_lid, 0, num_mat_elems, { + FOR_ALL(mat_elem_lid, 0, num_mat_elems, { // get elem gid size_t elem_gid = MaterialToMeshMaps_elem(mat_elem_lid); double MaterialPoints_power = 0.0; + //double test_momentum[3]; + //test_momentum[0] = 0.0; + //test_momentum[1] = 0.0; + //test_momentum[2] = 0.0; + // --- tally the contribution from each corner to the element --- // Loop over the nodes in the element @@ -96,12 +102,19 @@ FOR_ALL(mat_elem_lid, 0, num_mat_elems, { for (size_t dim = 0; dim < mesh.num_dims; dim++) { double half_vel = (node_vel(1, node_gid, dim) + node_vel(0, node_gid, dim)) * 0.5; MaterialPoints_power += MaterialCorners_force(mat_corner_lid, dim) * node_radius * half_vel; + + //test_momentum[dim] += MaterialCorners_force(mat_corner_lid, dim); } // end for dim } // end for node_lid // update the specific energy MaterialPoints_sie(1, mat_elem_lid) = MaterialPoints_sie(0, mat_elem_lid) - rk_alpha * dt / MaterialPoints_mass(mat_elem_lid) * MaterialPoints_power; + + // a check on momentum conservation + //if( sqrt(pow(test_momentum[0], 2.0) + pow(test_momentum[1], 2.0) + pow(test_momentum[2], 2.0) ) >= 1.e-13) + // printf("momentum conservation %f, %f, %f \n", test_momentum[0], test_momentum[1], test_momentum[2]); + }); // end parallel loop over the elements return; diff --git a/single-node-refactor/src/Solvers/SGH_solver/src/force_sgh.cpp b/single-node-refactor/src/Solvers/SGH_solver/src/force_sgh.cpp index cfd4b95d0..ebb6b2a65 100644 --- a/single-node-refactor/src/Solvers/SGH_solver/src/force_sgh.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver/src/force_sgh.cpp @@ -87,14 +87,6 @@ void SGH::get_force(const Material_t& Materials, const size_t num_nodes_in_elem = 8; - // set corner force to zero - FOR_ALL(corner_gid, 0, mesh.num_corners, { - for (int dim = 0; dim < num_dims; dim++) { - corner_force(corner_gid, dim) = 0.0; - } - }); // end parallel for corners - - // --- calculate the forces acting on the nodes from the element --- FOR_ALL(mat_elem_lid, 0, num_mat_elems, { @@ -103,7 +95,6 @@ void SGH::get_force(const Material_t& Materials, size_t elem_gid = MaterialToMeshMaps_elem(mat_elem_lid); - // total Cauchy stress double tau_array[9]; @@ -249,8 +240,8 @@ void SGH::get_force(const Material_t& Materials, // if there is no velocity change, then use the surface area // normal as the shock direction mag = sqrt(area_normal(node_lid, 0) * area_normal(node_lid, 0) - + area_normal(node_lid, 1) * area_normal(node_lid, 1) - + area_normal(node_lid, 2) * area_normal(node_lid, 2) ); + + area_normal(node_lid, 1) * area_normal(node_lid, 1) + + area_normal(node_lid, 2) * area_normal(node_lid, 2) ); // estimate of the shock direction for (int dim = 0; dim < num_dims; dim++) { @@ -280,15 +271,15 @@ void SGH::get_force(const Material_t& Materials, // direction mu_term = muc(node_lid) * fabs(shock_dir(0) * area_normal(node_lid, 0) - + shock_dir(1) * area_normal(node_lid, 1) - + shock_dir(2) * area_normal(node_lid, 2) ); + + shock_dir(1) * area_normal(node_lid, 1) + + shock_dir(2) * area_normal(node_lid, 2) ); } else{ // Using a full tensoral Riemann jump relation mu_term = muc(node_lid) * sqrt(area_normal(node_lid, 0) * area_normal(node_lid, 0) - + area_normal(node_lid, 1) * area_normal(node_lid, 1) - + area_normal(node_lid, 2) * area_normal(node_lid, 2) ); + + area_normal(node_lid, 1) * area_normal(node_lid, 1) + + area_normal(node_lid, 2) * area_normal(node_lid, 2) ); } sum(0) += mu_term * vel(0); @@ -371,6 +362,8 @@ void SGH::get_force(const Material_t& Materials, // loop over the each node in the elem for (size_t node_lid = 0; node_lid < num_nodes_in_elem; node_lid++) { + + // the local corner id is the local node id size_t corner_lid = node_lid; // Get corner gid @@ -381,6 +374,7 @@ void SGH::get_force(const Material_t& Materials, // Get the material corner lid size_t mat_corner_lid = corners_in_mat_elem(mat_elem_lid, corner_lid); + //printf("corner difference = %zu \n", mat_corner_lid-corner_gid); // loop over dimensions and calc corner forces if (MaterialPoints_eroded(mat_elem_lid) == true) { // material(mat_id).blank_mat_id) @@ -388,6 +382,7 @@ void SGH::get_force(const Material_t& Materials, corner_force(corner_gid, dim) = 0.0; } } + else{ for (int dim = 0; dim < num_dims; dim++) { @@ -419,7 +414,7 @@ void SGH::get_force(const Material_t& Materials, MaterialPoints_statev, MaterialPoints_sspd, MaterialPoints_den(mat_elem_lid), - MaterialPoints_sie(mat_elem_lid), + MaterialPoints_sie(1,mat_elem_lid), vel_grad, elem_node_gids, node_coords, @@ -810,7 +805,7 @@ void SGH::get_force_2D(const Material_t& Materials, // MaterialPoints_statev, // MaterialPoints_sspd, // MaterialPoints_den(elem_gid), - // MaterialPoints_sie(elem_gid), + // MaterialPoints_sie(1,elem_gid), // vel_grad, // elem_node_gids, // node_coords, diff --git a/single-node-refactor/src/Solvers/SGH_solver/src/properties.cpp b/single-node-refactor/src/Solvers/SGH_solver/src/properties.cpp index e8edf4113..28c28662e 100644 --- a/single-node-refactor/src/Solvers/SGH_solver/src/properties.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver/src/properties.cpp @@ -80,28 +80,6 @@ void SGH::update_state( const size_t num_dims = mesh.num_dims; - // --- Density --- - // loop over all the elements the material lives in - FOR_ALL(mat_elem_lid, 0, num_material_elems, { - - // get elem gid - size_t elem_gid = MaterialToMeshMaps_elem(mat_elem_lid); - - - // get the material points for this material - // Note, with the SGH method, they are equal - size_t mat_point_lid = mat_elem_lid; - - // for this method, gauss point is equal to elem_gid - size_t gauss_gid = elem_gid; - - - // --- Density --- - MaterialPoints_den(mat_point_lid) = MaterialPoints_mass(mat_point_lid) / GaussPoints_vol(gauss_gid); - - }); // end parallel for over mat elem lid - Kokkos::fence(); - // --- pressure --- if (Materials.MaterialEnums(mat_id).EOSType == model::decoupledEOSType) { @@ -120,6 +98,9 @@ void SGH::update_state( // for this method, gauss point is equal to elem_gid size_t gauss_gid = elem_gid; + // --- Density --- + MaterialPoints_den(mat_point_lid) = MaterialPoints_mass(mat_point_lid) / GaussPoints_vol(gauss_gid); + // --- Pressure --- Materials.MaterialFunctions(mat_id).calc_pressure( MaterialPoints_pres, @@ -129,8 +110,9 @@ void SGH::update_state( MaterialPoints_statev, MaterialPoints_sspd, MaterialPoints_den(mat_point_lid), - MaterialPoints_sie(0, mat_point_lid), + MaterialPoints_sie(1, mat_point_lid), Materials.eos_global_vars); + // --- Sound Speed --- Materials.MaterialFunctions(mat_id).calc_sound_speed( MaterialPoints_pres, @@ -140,12 +122,37 @@ void SGH::update_state( MaterialPoints_statev, MaterialPoints_sspd, MaterialPoints_den(mat_point_lid), - MaterialPoints_sie(0, mat_point_lid), + MaterialPoints_sie(1, mat_point_lid), Materials.eos_global_vars); }); // end parallel for over mat elem lid } // if decoupled EOS + else { + // only calculate density as pressure and sound speed come from the coupled strength model + + // --- Density --- + // loop over all the elements the material lives in + FOR_ALL(mat_elem_lid, 0, num_material_elems, { + + // get elem gid + size_t elem_gid = MaterialToMeshMaps_elem(mat_elem_lid); + + + // get the material points for this material + // Note, with the SGH method, they are equal + size_t mat_point_lid = mat_elem_lid; + + // for this method, gauss point is equal to elem_gid + size_t gauss_gid = elem_gid; + + + // --- Density --- + MaterialPoints_den(mat_point_lid) = MaterialPoints_mass(mat_point_lid) / GaussPoints_vol(gauss_gid); + + }); // end parallel for over mat elem lid + Kokkos::fence(); + } // end if // --- Stress --- diff --git a/single-node-refactor/src/Solvers/SGH_solver/src/sgh_solve.cpp b/single-node-refactor/src/Solvers/SGH_solver/src/sgh_solve.cpp index cf0fab39d..6decbd888 100644 --- a/single-node-refactor/src/Solvers/SGH_solver/src/sgh_solve.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver/src/sgh_solve.cpp @@ -112,7 +112,7 @@ void SGH::execute(SimulationParameters_t& SimulationParamaters, const size_t num_mats = Materials.num_mats; // extensive IE - for(int mat_id=0; mat_id& MaterialPoints_ma const DCArrayKokkos& MaterialPoints_sie, size_t num_mat_points){ - double IE_sum = 0; + double IE_sum = 0.0; double IE_loc_sum; // loop over the material points and tally IE REDUCE_SUM(matpt_lid, 0, num_mat_points, IE_loc_sum, { - IE_loc_sum += MaterialPoints_mass(matpt_lid) * MaterialPoints_sie(matpt_lid); + IE_loc_sum += MaterialPoints_mass(matpt_lid) * MaterialPoints_sie(1,matpt_lid); }, IE_sum); + Kokkos::fence(); + return IE_sum; } // end function -// a function to tally the kinetic energy double sum_domain_kinetic_energy(const mesh_t& mesh, const DCArrayKokkos& node_vel, const DCArrayKokkos& node_coords, const DCArrayKokkos& node_mass){ // extensive KE - double KE_sum = 0; + double KE_sum = 0.0; double KE_loc_sum; REDUCE_SUM(node_gid, 0, mesh.num_nodes, KE_loc_sum, { @@ -657,13 +710,59 @@ double sum_domain_kinetic_energy(const mesh_t& mesh, else{ KE_loc_sum += node_mass(node_gid) * ke; } + }, KE_sum); Kokkos::fence(); + return 0.5*KE_sum; } // end function + +// a function to tally the material point masses +double sum_domain_material_mass(const DCArrayKokkos& MaterialPoints_mass, + const size_t num_mat_points){ + + double mass_domain = 0.0; + double mass_loc_domain; + + REDUCE_SUM(matpt_lid, 0, num_mat_points, mass_loc_domain, { + + mass_loc_domain += MaterialPoints_mass(matpt_lid); + + }, mass_domain); + Kokkos::fence(); + + return mass_domain; + +} // end function + + +double sum_domain_node_mass(const mesh_t& mesh, + const DCArrayKokkos& node_coords, + const DCArrayKokkos& node_mass){ + + double mass_domain = 0.0; + double mass_loc_domain; + + REDUCE_SUM(node_gid, 0, mesh.num_nodes, mass_loc_domain, { + + if (mesh.num_dims == 2) { + mass_loc_domain += node_mass(node_gid) * node_coords(1, node_gid, 1); + } + else{ + mass_loc_domain += node_mass(node_gid); + } + + }, mass_domain); + Kokkos::fence(); + + + return mass_domain; +} // end function + + // a function to calculate the 2D-RZ areal mass (rho A = m/R) // for R=0, it is interpolated from off-axis void calc_node_areal_mass(const mesh_t& mesh, @@ -702,4 +801,18 @@ void calc_node_areal_mass(const mesh_t& mesh, return; -}// end function \ No newline at end of file +}// end function + + +// set the corner forces to zero +void set_corner_force_zero(const mesh_t& mesh, + const DCArrayKokkos& corner_force){ + + // set corner force to zero + FOR_ALL(corner_gid, 0, mesh.num_corners, { + for (size_t dim = 0; dim < mesh.num_dims; dim++) { + corner_force(corner_gid, dim) = 0.0; + } + }); // end parallel for corners + +} // end function diff --git a/single-node-refactor/src/common/state.h b/single-node-refactor/src/common/state.h index 7f2c68e96..bdce7f43a 100644 --- a/single-node-refactor/src/common/state.h +++ b/single-node-refactor/src/common/state.h @@ -135,6 +135,7 @@ struct MaterialPoint_t DCArrayKokkos stress; ///< MaterialPoint stress DCArrayKokkos sspd; ///< MaterialPoint sound speed DCArrayKokkos mass; ///< MaterialPoint mass + DCArrayKokkos eroded; ///< MaterialPoint eroded or not flag DCArrayKokkos sie; ///< coefficients for the sie in strong form, only used in some methods e.g., FE-SGH and MPM diff --git a/single-node-refactor/src/driver.h b/single-node-refactor/src/driver.h index f1f2de59c..6e2dc44f6 100644 --- a/single-node-refactor/src/driver.h +++ b/single-node-refactor/src/driver.h @@ -771,7 +771,7 @@ void user_voxel_init(DCArrayKokkos& elem_values, found = false; - int num_points = num_points_i * num_points_j * num_points_k; + int num_points = num_points_i * num_points_j * num_points_k; CArray pt_coords_x(num_points_i); CArray pt_coords_y(num_points_j); CArray pt_coords_z(num_points_k); From 22d4c73f635382631e668e98d30f701f88024de2 Mon Sep 17 00:00:00 2001 From: Nathaniel Morgan Date: Thu, 1 Aug 2024 10:19:15 -0600 Subject: [PATCH 095/233] fixing bugs --- .../input-origin-erosion.yaml | 7 +- .../src/Solvers/SGH_solver/src/energy_sgh.cpp | 24 +++--- .../src/Solvers/SGH_solver/src/force_sgh.cpp | 42 ++++++----- .../src/Solvers/SGH_solver/src/properties.cpp | 6 ++ single-node-refactor/src/common/material.h | 10 ++- single-node-refactor/src/driver.h | 75 ++++++++++++++----- .../src/material_models/eos/gamma_law_eos.h | 26 +++---- .../material_models/erosion/basic_erosion.h | 15 ++-- .../src/material_models/erosion/no_erosion.h | 10 ++- 9 files changed, 138 insertions(+), 77 deletions(-) diff --git a/single-node-refactor/input-origin-erosion.yaml b/single-node-refactor/input-origin-erosion.yaml index ade0cd963..24f3d3051 100644 --- a/single-node-refactor/input-origin-erosion.yaml +++ b/single-node-refactor/input-origin-erosion.yaml @@ -78,9 +78,10 @@ materials: - 1.666666666666667 - 1.0E-14 - 1.0 - #erosion_model: basic - #erode_tension_val: 0.00003 - #erode_density_val: 0.02 + erosion_model: basic + erode_tension_val: 0.00003 + erode_density_val: 0.02 + - material: id: 1 diff --git a/single-node-refactor/src/Solvers/SGH_solver/src/energy_sgh.cpp b/single-node-refactor/src/Solvers/SGH_solver/src/energy_sgh.cpp index 691f4db64..67e760e3a 100644 --- a/single-node-refactor/src/Solvers/SGH_solver/src/energy_sgh.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver/src/energy_sgh.cpp @@ -69,18 +69,24 @@ void SGH::update_energy(const double rk_alpha, // get elem gid size_t elem_gid = MaterialToMeshMaps_elem(mat_elem_lid); + + // the material point index = the material elem index for a 1-point element + size_t mat_point_lid = mat_elem_lid; + double MaterialPoints_power = 0.0; - //double test_momentum[3]; - //test_momentum[0] = 0.0; - //test_momentum[1] = 0.0; - //test_momentum[2] = 0.0; + double test_momentum[3]; + test_momentum[0] = 0.0; + test_momentum[1] = 0.0; + test_momentum[2] = 0.0; // --- tally the contribution from each corner to the element --- // Loop over the nodes in the element for (size_t node_lid = 0; node_lid < mesh.num_nodes_in_elem; node_lid++) { + + // corner lid and node lid size_t corner_lid = node_lid; // Get node global id for the local node id @@ -103,17 +109,17 @@ void SGH::update_energy(const double rk_alpha, double half_vel = (node_vel(1, node_gid, dim) + node_vel(0, node_gid, dim)) * 0.5; MaterialPoints_power += MaterialCorners_force(mat_corner_lid, dim) * node_radius * half_vel; - //test_momentum[dim] += MaterialCorners_force(mat_corner_lid, dim); + test_momentum[dim] += MaterialCorners_force(mat_corner_lid, dim); } // end for dim } // end for node_lid // update the specific energy - MaterialPoints_sie(1, mat_elem_lid) = MaterialPoints_sie(0, mat_elem_lid) - - rk_alpha * dt / MaterialPoints_mass(mat_elem_lid) * MaterialPoints_power; + MaterialPoints_sie(1, mat_point_lid) = MaterialPoints_sie(0, mat_point_lid) - + rk_alpha * dt / MaterialPoints_mass(mat_point_lid) * MaterialPoints_power; // a check on momentum conservation - //if( sqrt(pow(test_momentum[0], 2.0) + pow(test_momentum[1], 2.0) + pow(test_momentum[2], 2.0) ) >= 1.e-13) - // printf("momentum conservation %f, %f, %f \n", test_momentum[0], test_momentum[1], test_momentum[2]); + if( sqrt(pow(test_momentum[0], 2.0) + pow(test_momentum[1], 2.0) + pow(test_momentum[2], 2.0) ) >= 1.e-13) + printf("momentum conservation %f, %f, %f \n", test_momentum[0], test_momentum[1], test_momentum[2]); }); // end parallel loop over the elements diff --git a/single-node-refactor/src/Solvers/SGH_solver/src/force_sgh.cpp b/single-node-refactor/src/Solvers/SGH_solver/src/force_sgh.cpp index ebb6b2a65..8a84ad6a0 100644 --- a/single-node-refactor/src/Solvers/SGH_solver/src/force_sgh.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver/src/force_sgh.cpp @@ -94,6 +94,9 @@ void SGH::get_force(const Material_t& Materials, // get elem gid size_t elem_gid = MaterialToMeshMaps_elem(mat_elem_lid); + // the material point index = the material elem index for a 1-point element + size_t mat_point_lid = mat_elem_lid; + // total Cauchy stress double tau_array[9]; @@ -131,7 +134,7 @@ void SGH::get_force(const Material_t& Materials, // create a view of the stress_matrix - ViewCArrayKokkos stress(&MaterialPoints_stress(1, mat_elem_lid, 0, 0), 3, 3); + ViewCArrayKokkos stress(&MaterialPoints_stress(1, mat_point_lid, 0, 0), 3, 3); // cut out the node_gids for this element ViewCArrayKokkos elem_node_gids(&mesh.nodes_in_elem(elem_gid, 0), 8); @@ -181,7 +184,7 @@ void SGH::get_force(const Material_t& Materials, // add the pressure if a decoupled model is used if (Materials.MaterialEnums(mat_id).EOSType == model::decoupledEOSType) { for (int i = 0; i < num_dims; i++) { - tau(i, i) -= MaterialPoints_pres(mat_elem_lid); + tau(i, i) -= MaterialPoints_pres(mat_point_lid); } // end for } @@ -251,13 +254,13 @@ void SGH::get_force(const Material_t& Materials, // cell divergence indicates compression or expansions if (div < 0) { // element in compression - muc(node_lid) = MaterialPoints_den(mat_elem_lid) * - (Materials.MaterialFunctions(mat_id).q1 * MaterialPoints_sspd(mat_elem_lid) + + muc(node_lid) = MaterialPoints_den(mat_point_lid) * + (Materials.MaterialFunctions(mat_id).q1 * MaterialPoints_sspd(mat_point_lid) + Materials.MaterialFunctions(mat_id).q2 * mag_vel); } else{ // element in expansion - muc(node_lid) = MaterialPoints_den(mat_elem_lid) * - (Materials.MaterialFunctions(mat_id).q1ex * MaterialPoints_sspd(mat_elem_lid) + + muc(node_lid) = MaterialPoints_den(mat_point_lid) * + (Materials.MaterialFunctions(mat_id).q1ex * MaterialPoints_sspd(mat_point_lid) + Materials.MaterialFunctions(mat_id).q2ex * mag_vel); } // end if on divergence sign @@ -345,7 +348,7 @@ void SGH::get_force(const Material_t& Materials, double omega = 20.0; // 20.0; // weighting factor on Mach number double third = 1.0 / 3.0; double c_length = pow(vol, third); // characteristic length - double alpha = fmin(1.0, omega * (c_length * fabs(div)) / (MaterialPoints_sspd(mat_elem_lid) + fuzz) ); + double alpha = fmin(1.0, omega * (c_length * fabs(div)) / (MaterialPoints_sspd(mat_point_lid) + fuzz) ); // use Mach based detector with standard shock detector @@ -377,7 +380,7 @@ void SGH::get_force(const Material_t& Materials, //printf("corner difference = %zu \n", mat_corner_lid-corner_gid); // loop over dimensions and calc corner forces - if (MaterialPoints_eroded(mat_elem_lid) == true) { // material(mat_id).blank_mat_id) + if (MaterialPoints_eroded(mat_point_lid) == true) { // material(mat_id).blank_mat_id) for (int dim = 0; dim < num_dims; dim++) { corner_force(corner_gid, dim) = 0.0; } @@ -409,12 +412,12 @@ void SGH::get_force(const Material_t& Materials, // --- call strength model --- Materials.MaterialFunctions(mat_id).calc_stress(MaterialPoints_pres, MaterialPoints_stress, - mat_elem_lid, + mat_point_lid, mat_id, MaterialPoints_statev, MaterialPoints_sspd, - MaterialPoints_den(mat_elem_lid), - MaterialPoints_sie(1,mat_elem_lid), + MaterialPoints_den(mat_point_lid), + MaterialPoints_sie(1,mat_point_lid), vel_grad, elem_node_gids, node_coords, @@ -495,6 +498,9 @@ void SGH::get_force_2D(const Material_t& Materials, //size_t guass_gid = elem_gid; // 1 gauss point per element + // the material point index = the material elem index for a 1-point element + size_t mat_point_lid = mat_elem_lid; + // total Cauchy stress double tau_array[9]; @@ -527,10 +533,10 @@ void SGH::get_force_2D(const Material_t& Materials, ViewCArrayKokkos vel_grad(vel_grad_array, 3, 3); // create a view of the stress_matrix - ViewCArrayKokkos stress(&MaterialPoints_stress(1, mat_elem_lid, 0, 0), 3, 3); + ViewCArrayKokkos stress(&MaterialPoints_stress(1, mat_point_lid, 0, 0), 3, 3); // cut out the node_gids for this element - ViewCArrayKokkos elem_node_gids(&mesh.nodes_in_elem(mat_elem_lid, 0), 4); + ViewCArrayKokkos elem_node_gids(&mesh.nodes_in_elem(elem_gid, 0), 4); // get the B matrix which are the OUTWARD corner area normals geometry::get_bmatrix2D(area_normal, @@ -584,7 +590,7 @@ void SGH::get_force_2D(const Material_t& Materials, // add the pressure for (int i = 0; i < 3; i++) { - tau(i, i) -= MaterialPoints_pres(mat_elem_lid); + tau(i, i) -= MaterialPoints_pres(mat_point_lid); } // end for // ---- Multidirectional Approximate Riemann solver (MARS) ---- @@ -650,13 +656,13 @@ void SGH::get_force_2D(const Material_t& Materials, // cell divergence indicates compression or expansions if (div < 0) { // element in compression - muc(node_lid) = MaterialPoints_den(mat_elem_lid) * - (Materials.MaterialFunctions(mat_id).q1 * MaterialPoints_sspd(mat_elem_lid) + + muc(node_lid) = MaterialPoints_den(mat_point_lid) * + (Materials.MaterialFunctions(mat_id).q1 * MaterialPoints_sspd(mat_point_lid) + Materials.MaterialFunctions(mat_id).q2 * mag_vel); } else{ // element in expansion - muc(node_lid) = MaterialPoints_den(mat_elem_lid) * - (Materials.MaterialFunctions(mat_id).q1ex * MaterialPoints_sspd(mat_elem_lid) + + muc(node_lid) = MaterialPoints_den(mat_point_lid) * + (Materials.MaterialFunctions(mat_id).q1ex * MaterialPoints_sspd(mat_point_lid) + Materials.MaterialFunctions(mat_id).q2ex * mag_vel); } // end if on divergence sign diff --git a/single-node-refactor/src/Solvers/SGH_solver/src/properties.cpp b/single-node-refactor/src/Solvers/SGH_solver/src/properties.cpp index 28c28662e..f6ebf968a 100644 --- a/single-node-refactor/src/Solvers/SGH_solver/src/properties.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver/src/properties.cpp @@ -251,10 +251,14 @@ void SGH::update_state( MaterialPoints_stress, MaterialPoints_pres(mat_point_lid), MaterialPoints_den(mat_point_lid), + MaterialPoints_sie(1, mat_point_lid), + MaterialPoints_sspd(mat_point_lid), Materials.MaterialFunctions(mat_id).erode_tension_val, Materials.MaterialFunctions(mat_id).erode_density_val, mat_point_lid); + + // apply a void eos if mat_point is eroded double phi_fail = 1.0 - (double)MaterialPoints_eroded(mat_point_lid); MaterialPoints_pres(mat_point_lid) *= phi_fail; // phi_fail = 1 or 0 @@ -483,6 +487,8 @@ void SGH::update_state2D( MaterialPoints_stress, MaterialPoints_pres(mat_point_lid), MaterialPoints_den(mat_point_lid), + MaterialPoints_sie(1, mat_point_lid), + MaterialPoints_sspd(mat_point_lid), Materials.MaterialFunctions(mat_id).erode_tension_val, Materials.MaterialFunctions(mat_id).erode_density_val, mat_point_lid); diff --git a/single-node-refactor/src/common/material.h b/single-node-refactor/src/common/material.h index 4c53688ae..85ec0f9db 100644 --- a/single-node-refactor/src/common/material.h +++ b/single-node-refactor/src/common/material.h @@ -237,10 +237,12 @@ struct MaterialFunctions_t double erode_tension_val; ///< tension threshold to initiate erosion double erode_density_val; ///< density threshold to initiate erosion // above should be removed, they go in CArrayKokkos erosion_global_vars; - void (*erode)(const DCArrayKokkos& MaterialPoint_eroded, - const DCArrayKokkos& MaterialPoint_stress, - const double mat_point_pres, - const double mat_point_sie, + void (*erode)(const DCArrayKokkos& MaterialPoints_eroded, + const DCArrayKokkos& MaterialPoints_stress, + const double MaterialPoint_pres, + const double MaterialPoint_den, + const double MaterialPoint_sie, + const double MaterialPoint_sspd, const double erode_tension_val, const double erode_density_val, const size_t mat_point_lid) = NULL; diff --git a/single-node-refactor/src/driver.h b/single-node-refactor/src/driver.h index 6e2dc44f6..5caba016a 100644 --- a/single-node-refactor/src/driver.h +++ b/single-node-refactor/src/driver.h @@ -103,14 +103,19 @@ void init_corner_node_masses_zero(const mesh_t& mesh, const DCArrayKokkos& node_mass, const DCArrayKokkos& corner_mass); -void calc_corner_node_masses(const Material_t& Materials, +void calc_corner_mass(const Material_t& Materials, const mesh_t& mesh, const DCArrayKokkos& node_coords, const DCArrayKokkos& node_mass, const DCArrayKokkos& corner_mass, const DCArrayKokkos& MaterialPoints_mass, const DCArrayKokkos& MaterialToMeshMaps_elem, - const size_t num_mat_elems); + const size_t num_mat_elems); + +void calc_node_mass(const mesh_t& mesh, + const DCArrayKokkos& node_coords, + const DCArrayKokkos& node_mass, + const DCArrayKokkos& corner_mass); // ============================================================================== @@ -640,15 +645,21 @@ void fill_regions(DCArrayKokkos& region_fills, size_t num_mat_elems = State.MaterialToMeshMaps(mat_id).num_material_elems; - calc_corner_node_masses(Materials, - mesh, - State.node.coords, - State.node.mass, - State.corner.mass, - State.MaterialPoints(mat_id).mass, - State.MaterialToMeshMaps(mat_id).elem, - num_mat_elems); + calc_corner_mass(Materials, + mesh, + State.node.coords, + State.node.mass, + State.corner.mass, + State.MaterialPoints(mat_id).mass, + State.MaterialToMeshMaps(mat_id).elem, + num_mat_elems); } // end for mat_id + + calc_node_mass(mesh, + State.node.coords, + State.node.mass, + State.corner.mass); + } else{ // 2D RZ @@ -1748,9 +1759,11 @@ void init_corner_node_masses_zero(const mesh_t& mesh, } // end setting masses equal to zero + + ///////////////////////////////////////////////////////////////////////////// /// -/// \fn init_press_sspd_stress +/// \fn calc_corner_mass /// /// \brief a function to initialize pressure, sound speed and stress /// @@ -1763,14 +1776,14 @@ void init_corner_node_masses_zero(const mesh_t& mesh, /// \param num_mat_elems is the number of material elements for mat_id /// ///////////////////////////////////////////////////////////////////////////// -void calc_corner_node_masses(const Material_t& Materials, - const mesh_t& mesh, - const DCArrayKokkos& node_coords, - const DCArrayKokkos& node_mass, - const DCArrayKokkos& corner_mass, - const DCArrayKokkos& MaterialPoints_mass, - const DCArrayKokkos& MaterialToMeshMaps_elem, - const size_t num_mat_elems){ +void calc_corner_mass(const Material_t& Materials, + const mesh_t& mesh, + const DCArrayKokkos& node_coords, + const DCArrayKokkos& node_mass, + const DCArrayKokkos& corner_mass, + const DCArrayKokkos& MaterialPoints_mass, + const DCArrayKokkos& MaterialToMeshMaps_elem, + const size_t num_mat_elems){ FOR_ALL(mat_elem_lid, 0, num_mat_elems, { @@ -1790,6 +1803,30 @@ void calc_corner_node_masses(const Material_t& Materials, }); // end parallel for over mat elem local ids +} // end function calculate SGH mass + + +///////////////////////////////////////////////////////////////////////////// +/// +/// \fn calc_node_mass +/// +/// \brief a function to initialize material corner masses +/// +/// \param Materials holds the material models and global parameters +/// \param mesh is the simulation mesh +/// \param node_coords are the nodal coordinates of the mesh +/// \param node_mass is mass of the node +/// \param corner_mass is corner mass +/// \param MaterialPoints_mass is the mass at the material point for mat_id +/// \param num_mat_elems is the number of material elements for mat_id +/// +///////////////////////////////////////////////////////////////////////////// +void calc_node_mass(const mesh_t& mesh, + const DCArrayKokkos& node_coords, + const DCArrayKokkos& node_mass, + const DCArrayKokkos& corner_mass){ + + FOR_ALL(node_gid, 0, mesh.num_nodes, { for (size_t corner_lid = 0; corner_lid < mesh.num_corners_in_node(node_gid); corner_lid++) { diff --git a/single-node-refactor/src/material_models/eos/gamma_law_eos.h b/single-node-refactor/src/material_models/eos/gamma_law_eos.h index 3ff200b66..f7f5ae415 100644 --- a/single-node-refactor/src/material_models/eos/gamma_law_eos.h +++ b/single-node-refactor/src/material_models/eos/gamma_law_eos.h @@ -71,11 +71,11 @@ namespace GammaLawGasEOSModel { }; // host side function - static void initialize(const DCArrayKokkos& elem_pres, - const DCArrayKokkos& elem_stress, + static void initialize(const DCArrayKokkos& MaterialPoints_pres, + const DCArrayKokkos& MaterialPoints_stress, const size_t mat_pt_lid, const size_t mat_id, - const DCArrayKokkos& elem_sspd, + const DCArrayKokkos& MaterialPoints_sspd, const double den, const double sie, const RaggedRightArrayKokkos &eos_global_vars, @@ -88,12 +88,12 @@ namespace GammaLawGasEOSModel { } // end func KOKKOS_FUNCTION - static void calc_pressure(const DCArrayKokkos& elem_pres, - const DCArrayKokkos& elem_stress, + static void calc_pressure(const DCArrayKokkos& MaterialPoints_pres, + const DCArrayKokkos& MaterialPoints_stress, const size_t mat_pt_lid, const size_t mat_id, - const DCArrayKokkos& elem_state_vars, - const DCArrayKokkos& elem_sspd, + const DCArrayKokkos& MaterialPoints_state_vars, + const DCArrayKokkos& MaterialPoints_sspd, const double den, const double sie, const RaggedRightArrayKokkos &eos_global_vars) @@ -102,19 +102,19 @@ namespace GammaLawGasEOSModel { double gamma = eos_global_vars(mat_id, VarNames::gamma); // pressure - elem_pres(mat_pt_lid) = (gamma - 1.0) * sie * den; + MaterialPoints_pres(mat_pt_lid) = (gamma - 1.0) * sie * den; return; } // end func KOKKOS_FUNCTION - static void calc_sound_speed(const DCArrayKokkos& elem_pres, - const DCArrayKokkos& elem_stress, + static void calc_sound_speed(const DCArrayKokkos& MaterialPoints_pres, + const DCArrayKokkos& MaterialPoints_stress, const size_t mat_pt_lid, const size_t mat_id, - const DCArrayKokkos& elem_state_vars, - const DCArrayKokkos& elem_sspd, + const DCArrayKokkos& MaterialPoints_state_vars, + const DCArrayKokkos& MaterialPoints_sspd, const double den, const double sie, const RaggedRightArrayKokkos &eos_global_vars) @@ -125,7 +125,7 @@ namespace GammaLawGasEOSModel { // sound speed - elem_sspd(mat_pt_lid) = fmax(sqrt(gamma * (gamma - 1.0) * sie), csmin); + MaterialPoints_sspd(mat_pt_lid) = fmax(sqrt(gamma * (gamma - 1.0) * sie), csmin); return; diff --git a/single-node-refactor/src/material_models/erosion/basic_erosion.h b/single-node-refactor/src/material_models/erosion/basic_erosion.h index 61b9946b9..6f1f0dd0b 100644 --- a/single-node-refactor/src/material_models/erosion/basic_erosion.h +++ b/single-node-refactor/src/material_models/erosion/basic_erosion.h @@ -42,20 +42,21 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. namespace BasicErosionModel { KOKKOS_FUNCTION - static void erode (const DCArrayKokkos& MaterialPoint_eroded, - const DCArrayKokkos& MaterialPoint_stress, - const double mat_point_pres, - const double mat_point_den, + static void erode (const DCArrayKokkos& MaterialPoints_eroded, + const DCArrayKokkos& MaterialPoints_stress, + const double MaterialPoint_pres, + const double MaterialPoint_den, + const double MaterialPoint_sie, + const double MaterialPoint_sspd, const double erode_tension_val, const double erode_density_val, const size_t mat_point_lid) { - // simple model based on tension and density - if (mat_point_pres <= erode_tension_val || mat_point_den <= erode_density_val) { + if (MaterialPoint_pres <= erode_tension_val || MaterialPoint_den <= erode_density_val) { - MaterialPoint_eroded(mat_point_lid) = true; + MaterialPoints_eroded(mat_point_lid) = true; } // end if diff --git a/single-node-refactor/src/material_models/erosion/no_erosion.h b/single-node-refactor/src/material_models/erosion/no_erosion.h index 2e77953b3..4190c84c5 100644 --- a/single-node-refactor/src/material_models/erosion/no_erosion.h +++ b/single-node-refactor/src/material_models/erosion/no_erosion.h @@ -42,10 +42,12 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. namespace NoErosionModel { KOKKOS_FUNCTION - static void erode (const DCArrayKokkos& MaterialPoint_eroded, - const DCArrayKokkos& MaterialPoint_stress, - const double mat_point_pres, - const double mat_point_den, + static void erode (const DCArrayKokkos& MaterialPoints_eroded, + const DCArrayKokkos& MaterialPoints_stress, + const double MaterialPoint_pres, + const double MaterialPoint_den, + const double MaterialPoint_sie, + const double MaterialPoint_sspd, const double erode_tension_val, const double erode_density_val, const size_t mat_point_lid) From ff0474c69945f952821ce9830eaa30a31a31fbe3 Mon Sep 17 00:00:00 2001 From: Nathaniel Morgan Date: Thu, 1 Aug 2024 10:30:13 -0600 Subject: [PATCH 096/233] fixed bug with corner force and erosion model --- single-node-refactor/input-origin-erosion.yaml | 2 +- single-node-refactor/src/Solvers/SGH_solver/src/force_sgh.cpp | 1 + .../src/Solvers/SGH_solver/src/properties.cpp | 4 +++- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/single-node-refactor/input-origin-erosion.yaml b/single-node-refactor/input-origin-erosion.yaml index 24f3d3051..0fc87e2a3 100644 --- a/single-node-refactor/input-origin-erosion.yaml +++ b/single-node-refactor/input-origin-erosion.yaml @@ -1,7 +1,7 @@ # num_dims: 3 dynamic_options: - time_final: 4.25 + time_final: 2.25 dt_min: 1.e-8 dt_max: 1.e-2 dt_start: 1.e-5 diff --git a/single-node-refactor/src/Solvers/SGH_solver/src/force_sgh.cpp b/single-node-refactor/src/Solvers/SGH_solver/src/force_sgh.cpp index 8a84ad6a0..9e3e1f5e9 100644 --- a/single-node-refactor/src/Solvers/SGH_solver/src/force_sgh.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver/src/force_sgh.cpp @@ -383,6 +383,7 @@ void SGH::get_force(const Material_t& Materials, if (MaterialPoints_eroded(mat_point_lid) == true) { // material(mat_id).blank_mat_id) for (int dim = 0; dim < num_dims; dim++) { corner_force(corner_gid, dim) = 0.0; + MaterialCorners_force(mat_corner_lid, dim) = 0.0; } } diff --git a/single-node-refactor/src/Solvers/SGH_solver/src/properties.cpp b/single-node-refactor/src/Solvers/SGH_solver/src/properties.cpp index f6ebf968a..defa79ed4 100644 --- a/single-node-refactor/src/Solvers/SGH_solver/src/properties.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver/src/properties.cpp @@ -245,6 +245,8 @@ void SGH::update_state( // for this method, gauss point is equal to elem_gid size_t gauss_gid = elem_gid; + double sie_before = MaterialPoints_sie(1, mat_point_lid); + // --- Element erosion model --- Materials.MaterialFunctions(mat_id).erode( MaterialPoints_eroded, @@ -263,7 +265,7 @@ void SGH::update_state( double phi_fail = 1.0 - (double)MaterialPoints_eroded(mat_point_lid); MaterialPoints_pres(mat_point_lid) *= phi_fail; // phi_fail = 1 or 0 MaterialPoints_sspd(mat_point_lid) *= phi_fail; - MaterialPoints_sspd(mat_point_lid) = fmax(MaterialPoints_sspd(mat_point_lid), 1e-32); + MaterialPoints_sspd(mat_point_lid) = fmax(MaterialPoints_sspd(mat_point_lid), 1.0e-32); for (size_t i = 0; i < 3; i++) { for (size_t j = 0; j < 3; j++) { From a5576d768f673666d6cfed6ea0576b83662d0a3a Mon Sep 17 00:00:00 2001 From: Nathaniel Morgan Date: Thu, 1 Aug 2024 15:15:47 -0600 Subject: [PATCH 097/233] fixed setup, material centric running, added eroded outputs --- .../input-impact-erosion.yaml | 11 +-- .../input-origin-erosion.yaml | 2 +- .../Solvers/SGH_solver/include/sgh_solver.h | 12 ++-- .../src/Solvers/SGH_solver/src/energy_sgh.cpp | 11 +-- .../src/Solvers/SGH_solver/src/force_sgh.cpp | 2 +- .../src/Solvers/SGH_solver/src/properties.cpp | 24 ++++--- .../src/Solvers/SGH_solver/src/sgh_solve.cpp | 6 +- .../SGH_solver/src/time_integration.cpp | 71 +++++++++++-------- single-node-refactor/src/common/io_utils.h | 14 +++- single-node-refactor/src/driver.h | 64 ++++++----------- .../src/material_models/eos/no_eos.h | 36 +++++----- .../material_models/eos/user_defined_eos.h | 56 +++++++-------- 12 files changed, 149 insertions(+), 160 deletions(-) diff --git a/single-node-refactor/input-impact-erosion.yaml b/single-node-refactor/input-impact-erosion.yaml index ebb56847c..ff05f5b20 100644 --- a/single-node-refactor/input-impact-erosion.yaml +++ b/single-node-refactor/input-impact-erosion.yaml @@ -85,20 +85,13 @@ materials: - 1.0E-4 - 1.0 erosion_model: basic - void_mat_id: 2 erode_tension_val: 2.0e-7 erode_density_val: 0.01 - - # eroded material - - material: - id: 2 - eos_model_type: decoupled - eos_model: void # background air - material: - id: 3 + id: 2 eos_model_type: decoupled eos_model: gamma_law_gas # strength_model: none @@ -115,7 +108,7 @@ regions: # air - fill_volume: type: global - material_id: 3 + material_id: 2 den: 0.010 sie: 3.0e-4 velocity: cartesian diff --git a/single-node-refactor/input-origin-erosion.yaml b/single-node-refactor/input-origin-erosion.yaml index 0fc87e2a3..24f3d3051 100644 --- a/single-node-refactor/input-origin-erosion.yaml +++ b/single-node-refactor/input-origin-erosion.yaml @@ -1,7 +1,7 @@ # num_dims: 3 dynamic_options: - time_final: 2.25 + time_final: 4.25 dt_min: 1.e-8 dt_max: 1.e-2 dt_start: 1.e-5 diff --git a/single-node-refactor/src/Solvers/SGH_solver/include/sgh_solver.h b/single-node-refactor/src/Solvers/SGH_solver/include/sgh_solver.h index d4cf6b57d..41dc7543f 100644 --- a/single-node-refactor/src/Solvers/SGH_solver/include/sgh_solver.h +++ b/single-node-refactor/src/Solvers/SGH_solver/include/sgh_solver.h @@ -318,10 +318,11 @@ class SGH : public Solver mesh_t& mesh, DCArrayKokkos& node_coords, DCArrayKokkos& node_vel, - DCArrayKokkos& MaterialPoints_sspd, DCArrayKokkos& GaussPoints_vol, + DCArrayKokkos& MaterialPoints_sspd, + DCArrayKokkos& MaterialPoints_eroded, DCArrayKokkos& MaterialToMeshMaps_elem, - size_t num_material_elems, + size_t num_mat_elems, double time_value, const double graphics_time, const double time_final, @@ -335,10 +336,11 @@ class SGH : public Solver mesh_t& mesh, DCArrayKokkos& node_coords, DCArrayKokkos& node_vel, - DCArrayKokkos& MaterialPoints_sspd, DCArrayKokkos& GaussPoints_vol, + DCArrayKokkos& MaterialPoints_sspd, + DCArrayKokkos& MaterialPoints_eroded, DCArrayKokkos& MaterialToMeshMaps_elem, - size_t num_material_elems, + size_t num_mat_elems, double time_value, const double graphics_time, const double time_final, @@ -407,7 +409,7 @@ double sum_domain_material_mass(const DCArrayKokkos& MaterialPoints_mass double sum_domain_node_mass(const mesh_t& mesh, const DCArrayKokkos& node_coords, const DCArrayKokkos& node_mass); - + void set_corner_force_zero(const mesh_t& mesh, const DCArrayKokkos& corner_force); diff --git a/single-node-refactor/src/Solvers/SGH_solver/src/energy_sgh.cpp b/single-node-refactor/src/Solvers/SGH_solver/src/energy_sgh.cpp index 67e760e3a..0063e366f 100644 --- a/single-node-refactor/src/Solvers/SGH_solver/src/energy_sgh.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver/src/energy_sgh.cpp @@ -76,10 +76,6 @@ void SGH::update_energy(const double rk_alpha, double MaterialPoints_power = 0.0; - double test_momentum[3]; - test_momentum[0] = 0.0; - test_momentum[1] = 0.0; - test_momentum[2] = 0.0; // --- tally the contribution from each corner to the element --- @@ -106,10 +102,10 @@ void SGH::update_energy(const double rk_alpha, // calculate the Power=F dot V for this corner for (size_t dim = 0; dim < mesh.num_dims; dim++) { + double half_vel = (node_vel(1, node_gid, dim) + node_vel(0, node_gid, dim)) * 0.5; MaterialPoints_power += MaterialCorners_force(mat_corner_lid, dim) * node_radius * half_vel; - test_momentum[dim] += MaterialCorners_force(mat_corner_lid, dim); } // end for dim } // end for node_lid @@ -117,10 +113,7 @@ void SGH::update_energy(const double rk_alpha, MaterialPoints_sie(1, mat_point_lid) = MaterialPoints_sie(0, mat_point_lid) - rk_alpha * dt / MaterialPoints_mass(mat_point_lid) * MaterialPoints_power; - // a check on momentum conservation - if( sqrt(pow(test_momentum[0], 2.0) + pow(test_momentum[1], 2.0) + pow(test_momentum[2], 2.0) ) >= 1.e-13) - printf("momentum conservation %f, %f, %f \n", test_momentum[0], test_momentum[1], test_momentum[2]); - + }); // end parallel loop over the elements return; diff --git a/single-node-refactor/src/Solvers/SGH_solver/src/force_sgh.cpp b/single-node-refactor/src/Solvers/SGH_solver/src/force_sgh.cpp index 9e3e1f5e9..dac1858f0 100644 --- a/single-node-refactor/src/Solvers/SGH_solver/src/force_sgh.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver/src/force_sgh.cpp @@ -383,7 +383,7 @@ void SGH::get_force(const Material_t& Materials, if (MaterialPoints_eroded(mat_point_lid) == true) { // material(mat_id).blank_mat_id) for (int dim = 0; dim < num_dims; dim++) { corner_force(corner_gid, dim) = 0.0; - MaterialCorners_force(mat_corner_lid, dim) = 0.0; + MaterialCorners_force(mat_corner_lid, dim) = 0.0; } } diff --git a/single-node-refactor/src/Solvers/SGH_solver/src/properties.cpp b/single-node-refactor/src/Solvers/SGH_solver/src/properties.cpp index defa79ed4..c17762fde 100644 --- a/single-node-refactor/src/Solvers/SGH_solver/src/properties.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver/src/properties.cpp @@ -245,8 +245,6 @@ void SGH::update_state( // for this method, gauss point is equal to elem_gid size_t gauss_gid = elem_gid; - double sie_before = MaterialPoints_sie(1, mat_point_lid); - // --- Element erosion model --- Materials.MaterialFunctions(mat_id).erode( MaterialPoints_eroded, @@ -262,16 +260,20 @@ void SGH::update_state( // apply a void eos if mat_point is eroded - double phi_fail = 1.0 - (double)MaterialPoints_eroded(mat_point_lid); - MaterialPoints_pres(mat_point_lid) *= phi_fail; // phi_fail = 1 or 0 - MaterialPoints_sspd(mat_point_lid) *= phi_fail; - MaterialPoints_sspd(mat_point_lid) = fmax(MaterialPoints_sspd(mat_point_lid), 1.0e-32); + if(MaterialPoints_eroded(mat_point_lid)){ + + MaterialPoints_pres(mat_point_lid) = 0.0; + MaterialPoints_sspd(mat_point_lid) = 1.0e-32; + + for (size_t i = 0; i < 3; i++) { + for (size_t j = 0; j < 3; j++) { + MaterialPoints_stress(1, mat_point_lid, i, j) = 0.0; + } + } // end for i,j + + } // end if on eroded + - for (size_t i = 0; i < 3; i++) { - for (size_t j = 0; j < 3; j++) { - MaterialPoints_stress(1, mat_point_lid, i, j) *= phi_fail; - } - } // end for i,j }); // end parallel for } // end if elem errosion diff --git a/single-node-refactor/src/Solvers/SGH_solver/src/sgh_solve.cpp b/single-node-refactor/src/Solvers/SGH_solver/src/sgh_solve.cpp index 6decbd888..ddc127146 100644 --- a/single-node-refactor/src/Solvers/SGH_solver/src/sgh_solve.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver/src/sgh_solve.cpp @@ -187,8 +187,9 @@ void SGH::execute(SimulationParameters_t& SimulationParamaters, get_timestep2D(mesh, State.node.coords, State.node.vel, - State.MaterialPoints(mat_id).sspd, State.GaussPoints.vol, + State.MaterialPoints(mat_id).sspd, + State.MaterialPoints(mat_id).eroded, State.MaterialToMeshMaps(mat_id).elem, State.MaterialToMeshMaps(mat_id).num_material_elems, time_value, @@ -204,8 +205,9 @@ void SGH::execute(SimulationParameters_t& SimulationParamaters, get_timestep(mesh, State.node.coords, State.node.vel, - State.MaterialPoints(mat_id).sspd, State.GaussPoints.vol, + State.MaterialPoints(mat_id).sspd, + State.MaterialPoints(mat_id).eroded, State.MaterialToMeshMaps(mat_id).elem, State.MaterialToMeshMaps(mat_id).num_material_elems, time_value, diff --git a/single-node-refactor/src/Solvers/SGH_solver/src/time_integration.cpp b/single-node-refactor/src/Solvers/SGH_solver/src/time_integration.cpp index 795566352..4714a9eb7 100644 --- a/single-node-refactor/src/Solvers/SGH_solver/src/time_integration.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver/src/time_integration.cpp @@ -103,20 +103,21 @@ void SGH::rk_init(DCArrayKokkos& node_coords, /// ///////////////////////////////////////////////////////////////////////////// void SGH::get_timestep(mesh_t& mesh, - DCArrayKokkos& node_coords, - DCArrayKokkos& node_vel, - DCArrayKokkos& MaterialPoints_sspd, - DCArrayKokkos& GaussPoints_vol, - DCArrayKokkos& MaterialToMeshMaps_elem, - size_t num_mat_elems, - double time_value, - const double graphics_time, - const double time_final, - const double dt_max, - const double dt_min, - const double dt_cfl, - double& dt, - const double fuzz) const + DCArrayKokkos& node_coords, + DCArrayKokkos& node_vel, + DCArrayKokkos& GaussPoints_vol, + DCArrayKokkos& MaterialPoints_sspd, + DCArrayKokkos& MaterialPoints_eroded, + DCArrayKokkos& MaterialToMeshMaps_elem, + size_t num_mat_elems, + double time_value, + const double graphics_time, + const double time_final, + const double dt_max, + const double dt_min, + const double dt_cfl, + double& dt, + const double fuzz) const { // increase dt by 10%, that is the largest dt value dt = dt * 1.1; @@ -176,7 +177,11 @@ void SGH::get_timestep(mesh_t& mesh, } // local dt calc based on CFL - double dt_lcl_ = dt_cfl * dist_min / (MaterialPoints_sspd(elem_gid) + fuzz); + double dt_lcl_ = dt_cfl * dist_min / (MaterialPoints_sspd(mat_elem_lid) + fuzz); + + if (MaterialToMeshMaps_elem(mat_elem_lid) == true){ + dt_lcl_ = 1.0e32; // a huge time step as this element doesn't exist + } // make dt be in bounds dt_lcl_ = fmin(dt_lcl_, dt_max); // make dt small than dt_max @@ -218,27 +223,28 @@ void SGH::get_timestep(mesh_t& mesh, /// ///////////////////////////////////////////////////////////////////////////// void SGH::get_timestep2D(mesh_t& mesh, - DCArrayKokkos& node_coords, - DCArrayKokkos& node_vel, - DCArrayKokkos& MaterialPoints_sspd, - DCArrayKokkos& GaussPoints_vol, - DCArrayKokkos& MaterialToMeshMaps_elem, - size_t num_material_elems, - double time_value, - const double graphics_time, - const double time_final, - const double dt_max, - const double dt_min, - const double dt_cfl, - double& dt, - const double fuzz) const + DCArrayKokkos& node_coords, + DCArrayKokkos& node_vel, + DCArrayKokkos& GaussPoints_vol, + DCArrayKokkos& MaterialPoints_sspd, + DCArrayKokkos& MaterialPoints_eroded, + DCArrayKokkos& MaterialToMeshMaps_elem, + size_t num_mat_elems, + double time_value, + const double graphics_time, + const double time_final, + const double dt_max, + const double dt_min, + const double dt_cfl, + double& dt, + const double fuzz) const { // increase dt by 10%, that is the largest dt value dt = dt * 1.1; double dt_lcl; double min_dt_calc; - REDUCE_MIN(mat_elem_lid, 0, num_material_elems, dt_lcl, { + REDUCE_MIN(mat_elem_lid, 0, num_mat_elems, dt_lcl, { size_t elem_gid = MaterialToMeshMaps_elem(mat_elem_lid); @@ -278,6 +284,11 @@ void SGH::get_timestep2D(mesh_t& mesh, // local dt calc based on CFL double dt_lcl_ = dt_cfl * dist_min / (MaterialPoints_sspd(elem_gid) + fuzz); + + if (MaterialToMeshMaps_elem(mat_elem_lid) == true){ + dt_lcl_ = 1.0e32; // a huge time step as this element doesn't exist + } + // make dt be in bounds dt_lcl_ = fmin(dt_lcl_, dt_max); // make dt small than dt_max dt_lcl_ = fmax(dt_lcl_, dt_min); // make dt larger than dt_min diff --git a/single-node-refactor/src/common/io_utils.h b/single-node-refactor/src/common/io_utils.h index 320636a19..eeb253416 100644 --- a/single-node-refactor/src/common/io_utils.h +++ b/single-node-refactor/src/common/io_utils.h @@ -932,6 +932,7 @@ class MeshWriter // ---- Update host data ---- + // material point values for(int mat_id=0; mat_id these_coords(&node_coords(1,node_gid,0), 3); - - - // calc if we are to fill this element - size_t fill_this = fill_geometric_region(mesh, - voxel_elem_mat_id, - region_fills, - these_coords, - voxel_dx, - voxel_dy, - voxel_dz, - orig_x, - orig_y, - orig_z, - voxel_num_i, - voxel_num_j, - voxel_num_k, - f_id); - - // paint the material state on the node if fill_this=1 - if (fill_this == 1) { - - // default sgh paint - paint_node_vel(region_fills, - node_vel, - node_coords, - node_gid, - mesh.num_dims, - f_id, - rk_num_bins); - - // add user defined paint here - // user_defined_vel_state(); + // technically, not thread safe, but making it a separate loop created bad fill behavior + // loop over the nodes of this element and apply velocity + for (size_t node_lid = 0; node_lid < mesh.num_nodes_in_elem; node_lid++) { + + // get the mesh node index + size_t node_gid = mesh.nodes_in_elem(elem_gid, node_lid); + + // default sgh paint + paint_node_vel(region_fills, + node_vel, + node_coords, + node_gid, + mesh.num_dims, + f_id, + rk_num_bins); + + // add user defined paint here + // user_defined_vel_state(); + + } // end loop over the nodes in elem - } // end if fill + } // end if fill this }); // end FOR_ALL node loop Kokkos::fence(); diff --git a/single-node-refactor/src/material_models/eos/no_eos.h b/single-node-refactor/src/material_models/eos/no_eos.h index cfe016d21..6dd9f889f 100644 --- a/single-node-refactor/src/material_models/eos/no_eos.h +++ b/single-node-refactor/src/material_models/eos/no_eos.h @@ -56,29 +56,29 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. namespace NoEOSModel { KOKKOS_FUNCTION - static void calc_pressure(const DCArrayKokkos& elem_pres, - const DCArrayKokkos& elem_stress, - const size_t mat_pt_lid, - const size_t mat_id, - const DCArrayKokkos& elem_state_vars, - const DCArrayKokkos& elem_sspd, - const double den, - const double sie, - const RaggedRightArrayKokkos &eos_global_vars) + static void calc_pressure(const DCArrayKokkos& MaterialPoints_pres, + const DCArrayKokkos& MaterialPoints_stress, + const size_t mat_pt_lid, + const size_t mat_id, + const DCArrayKokkos& MaterialPoints_state_vars, + const DCArrayKokkos& MaterialPoints_sspd, + const double den, + const double sie, + const RaggedRightArrayKokkos &eos_global_vars) { return; } // end func KOKKOS_FUNCTION - static void calc_sound_speed(const DCArrayKokkos& elem_pres, - const DCArrayKokkos& elem_stress, - const size_t mat_pt_lid, - const size_t mat_id, - const DCArrayKokkos& elem_state_vars, - const DCArrayKokkos& elem_sspd, - const double den, - const double sie, - const RaggedRightArrayKokkos &eos_global_vars) + static void calc_sound_speed(const DCArrayKokkos& MaterialPoints_pres, + const DCArrayKokkos& MaterialPoints_stress, + const size_t mat_pt_lid, + const size_t mat_id, + const DCArrayKokkos& MaterialPoints_state_vars, + const DCArrayKokkos& MaterialPoints_sspd, + const double den, + const double sie, + const RaggedRightArrayKokkos &eos_global_vars) { return; diff --git a/single-node-refactor/src/material_models/eos/user_defined_eos.h b/single-node-refactor/src/material_models/eos/user_defined_eos.h index c1908f903..d7132022f 100644 --- a/single-node-refactor/src/material_models/eos/user_defined_eos.h +++ b/single-node-refactor/src/material_models/eos/user_defined_eos.h @@ -60,12 +60,12 @@ namespace UserDefinedEOSModel { KOKKOS_FUNCTION - static void calc_pressure(const DCArrayKokkos& elem_pres, - const DCArrayKokkos& elem_stress, + static void calc_pressure(const DCArrayKokkos& MaterialPoints_pres, + const DCArrayKokkos& MaterialPoints_stress, const size_t mat_pt_lid, const size_t mat_id, - const DCArrayKokkos& elem_state_vars, - const DCArrayKokkos& elem_sspd, + const DCArrayKokkos& MaterialPoints_state_vars, + const DCArrayKokkos& MaterialPoints_sspd, const double den, const double sie, const RaggedRightArrayKokkos &eos_global_vars) @@ -82,12 +82,12 @@ namespace UserDefinedEOSModel } // end for user_eos_model KOKKOS_FUNCTION - static void calc_sound_speed(const DCArrayKokkos& elem_pres, - const DCArrayKokkos& elem_stress, + static void calc_sound_speed(const DCArrayKokkos& MaterialPoints_pres, + const DCArrayKokkos& MaterialPoints_stress, const size_t mat_pt_lid, const size_t mat_id, - const DCArrayKokkos& elem_state_vars, - const DCArrayKokkos& elem_sspd, + const DCArrayKokkos& MaterialPoints_state_vars, + const DCArrayKokkos& MaterialPoints_sspd, const double den, const double sie, const RaggedRightArrayKokkos &eos_global_vars) @@ -130,36 +130,36 @@ namespace UserDefinedEOSModel namespace NotionalEOSModel { KOKKOS_FUNCTION - static void calc_pressure(const DCArrayKokkos& elem_pres, - const DCArrayKokkos& elem_stress, - const size_t mat_pt_lid, - const size_t mat_id, - const DCArrayKokkos& elem_state_vars, - const DCArrayKokkos& elem_sspd, - const double den, - const double sie, - const RaggedRightArrayKokkos &eos_global_vars) + static void calc_pressure(const DCArrayKokkos& MaterialPoints_pres, + const DCArrayKokkos& MaterialPoints_stress, + const size_t mat_pt_lid, + const size_t mat_id, + const DCArrayKokkos& MaterialPoints_state_vars, + const DCArrayKokkos& MaterialPoints_sspd, + const double den, + const double sie, + const RaggedRightArrayKokkos &eos_global_vars) { // pressure of a void is 0 - elem_pres(mat_pt_lid) = 0.0; + MaterialPoints_pres(mat_pt_lid) = 0.0; return; } // end func KOKKOS_FUNCTION - static void calc_sound_speed(const DCArrayKokkos& elem_pres, - const DCArrayKokkos& elem_stress, - const size_t mat_pt_lid, - const size_t mat_id, - const DCArrayKokkos& elem_state_vars, - const DCArrayKokkos& elem_sspd, - const double den, - const double sie, - const RaggedRightArrayKokkos &eos_global_vars) + static void calc_sound_speed(const DCArrayKokkos& MaterialPoints_pres, + const DCArrayKokkos& MaterialPoints_stress, + const size_t mat_pt_lid, + const size_t mat_id, + const DCArrayKokkos& MaterialPoints_state_vars, + const DCArrayKokkos& MaterialPoints_sspd, + const double den, + const double sie, + const RaggedRightArrayKokkos &eos_global_vars) { // sound speed of a void is 0, machine small must be used for CFL calculation - elem_sspd(mat_pt_lid) = 1.0e-32; + MaterialPoints_sspd(mat_pt_lid) = 1.0e-32; return; } // end func From 3ea3bf4a71df97538601cd657ffc208580e8904c Mon Sep 17 00:00:00 2001 From: Nathaniel Morgan Date: Fri, 2 Aug 2024 10:28:19 -0600 Subject: [PATCH 098/233] fixed KE tally location --- .../src/Solvers/SGH_solver/src/properties.cpp | 73 ++++++++++--------- .../src/Solvers/SGH_solver/src/sgh_solve.cpp | 10 ++- 2 files changed, 45 insertions(+), 38 deletions(-) diff --git a/single-node-refactor/src/Solvers/SGH_solver/src/properties.cpp b/single-node-refactor/src/Solvers/SGH_solver/src/properties.cpp index c17762fde..052625bc1 100644 --- a/single-node-refactor/src/Solvers/SGH_solver/src/properties.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver/src/properties.cpp @@ -185,42 +185,43 @@ void SGH::update_state( MaterialPoints_den(mat_point_lid) = MaterialPoints_mass(mat_point_lid) / GaussPoints_vol(gauss_gid); - // corner area normals - double area_array[24]; - ViewCArrayKokkos area(area_array, num_nodes_in_elem, num_dims); - - // velocity gradient - double vel_grad_array[9]; - ViewCArrayKokkos vel_grad(vel_grad_array, num_dims, num_dims); - - // get the B matrix which are the OUTWARD corner area normals - geometry::get_bmatrix(area, elem_gid, node_coords, elem_node_gids); - - // --- Calculate the velocity gradient --- - get_velgrad(vel_grad, - elem_node_gids, - node_vel, - area, - GaussPoints_vol(elem_gid), - elem_gid); - - // --- call strength model --- - Materials.MaterialFunctions(mat_id).calc_stress( - MaterialPoints_pres, - MaterialPoints_stress, - mat_point_lid, - mat_id, - MaterialPoints_statev, - MaterialPoints_sspd, - MaterialPoints_den(mat_point_lid), - MaterialPoints_sie(1,mat_point_lid), - vel_grad, - elem_node_gids, - node_coords, - node_vel, - GaussPoints_vol(gauss_gid), - dt, - rk_alpha); + // corner area normals + double area_array[24]; + ViewCArrayKokkos area(area_array, num_nodes_in_elem, num_dims); + + // velocity gradient + double vel_grad_array[9]; + ViewCArrayKokkos vel_grad(vel_grad_array, num_dims, num_dims); + + // get the B matrix which are the OUTWARD corner area normals + geometry::get_bmatrix(area, elem_gid, node_coords, elem_node_gids); + + // --- Calculate the velocity gradient --- + get_velgrad(vel_grad, + elem_node_gids, + node_vel, + area, + GaussPoints_vol(elem_gid), + elem_gid); + + + // --- call strength model --- + Materials.MaterialFunctions(mat_id).calc_stress( + MaterialPoints_pres, + MaterialPoints_stress, + mat_point_lid, + mat_id, + MaterialPoints_statev, + MaterialPoints_sspd, + MaterialPoints_den(mat_point_lid), + MaterialPoints_sie(1,mat_point_lid), + vel_grad, + elem_node_gids, + node_coords, + node_vel, + GaussPoints_vol(gauss_gid), + dt, + rk_alpha); }); // end parallel for over mat elem lid diff --git a/single-node-refactor/src/Solvers/SGH_solver/src/sgh_solve.cpp b/single-node-refactor/src/Solvers/SGH_solver/src/sgh_solve.cpp index ddc127146..de5752ef5 100644 --- a/single-node-refactor/src/Solvers/SGH_solver/src/sgh_solve.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver/src/sgh_solve.cpp @@ -93,6 +93,13 @@ void SGH::execute(SimulationParameters_t& SimulationParamaters, CArrayKokkos node_extensive_mass(mesh.num_nodes); + + + std::cout << "Applying initial boundary conditions" << std::endl; + boundary_velocity(mesh, BoundaryConditions, State.node.vel, time_value); // Time value = 0.0; + + + // extensive energy tallies over the entire mesh double IE_t0 = 0.0; double KE_t0 = 0.0; @@ -160,8 +167,7 @@ void SGH::execute(SimulationParameters_t& SimulationParamaters, auto time_1 = std::chrono::high_resolution_clock::now(); - std::cout << "Applying initial boundary conditions" << std::endl; - boundary_velocity(mesh, BoundaryConditions, State.node.vel, time_value); // Time value = 0.0; + // loop over the max number of time integration cycles From 201edbae2676b3eeb3b367a550db082512e351c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CAdrian-Diaz=E2=80=9D?= <“adriandiaz1117@gmail.com”> Date: Fri, 2 Aug 2024 16:56:44 -0600 Subject: [PATCH 099/233] BUG: align mpi data type for allreduce --- src/Parallel-Solvers/Implicit-Lagrange/Implicit_Solver.cpp | 5 +++-- src/Parallel-Solvers/Parallel-Explicit/Explicit_Solver.cpp | 5 +++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/Parallel-Solvers/Implicit-Lagrange/Implicit_Solver.cpp b/src/Parallel-Solvers/Implicit-Lagrange/Implicit_Solver.cpp index e8fad7eea..72d7cad72 100644 --- a/src/Parallel-Solvers/Implicit-Lagrange/Implicit_Solver.cpp +++ b/src/Parallel-Solvers/Implicit-Lagrange/Implicit_Solver.cpp @@ -186,8 +186,9 @@ void Implicit_Solver::run(){ all_initial_node_coords_distributed = all_node_coords_distributed; //print element imbalance stats - int rnum_global_sum = 0; - MPI_Allreduce(&rnum_elem, &rnum_global_sum, 1, MPI_INT, MPI_SUM, MPI_COMM_WORLD); + long long int rnum_global_sum = 0; + long long int temp_rnum_elem = rnum_elem; + MPI_Allreduce(&temp_rnum_elem, &rnum_global_sum, 1, MPI_LONG_LONG_INT, MPI_SUM, MPI_COMM_WORLD); double local_imbalance, max_imbalance, avg_elem; max_imbalance = 0; avg_elem = rnum_global_sum/((double) nranks); diff --git a/src/Parallel-Solvers/Parallel-Explicit/Explicit_Solver.cpp b/src/Parallel-Solvers/Parallel-Explicit/Explicit_Solver.cpp index 8074bd3ad..65cdb7d2a 100644 --- a/src/Parallel-Solvers/Parallel-Explicit/Explicit_Solver.cpp +++ b/src/Parallel-Solvers/Parallel-Explicit/Explicit_Solver.cpp @@ -194,8 +194,9 @@ void Explicit_Solver::run() { init_maps(); //print element imbalance stats - int rnum_global_sum = 0; - MPI_Allreduce(&rnum_elem, &rnum_global_sum, 1, MPI_INT, MPI_SUM, MPI_COMM_WORLD); + long long int rnum_global_sum = 0; + long long int temp_rnum_elem = rnum_elem; + MPI_Allreduce(&temp_rnum_elem, &rnum_global_sum, 1, MPI_LONG_LONG_INT, MPI_SUM, MPI_COMM_WORLD); double local_imbalance, max_imbalance, avg_elem; max_imbalance = 0; avg_elem = rnum_global_sum/((double) nranks); From 2a911bf9f4818864fb71ed9d4138c9447a1b59b5 Mon Sep 17 00:00:00 2001 From: Nathaniel Morgan Date: Sun, 4 Aug 2024 11:30:25 -0600 Subject: [PATCH 100/233] merged in past fixes to region_t, making CUDA work --- single-node-refactor/src/common/region.h | 25 ++++-- .../src/common/simulation_parameters.h | 4 +- single-node-refactor/src/driver.h | 90 ++++++++++--------- single-node-refactor/src/input/parse_yaml.cpp | 73 +++++++++------ single-node-refactor/src/input/parse_yaml.h | 5 +- 5 files changed, 116 insertions(+), 81 deletions(-) diff --git a/single-node-refactor/src/common/region.h b/single-node-refactor/src/common/region.h index 93e62d4e7..7c8a83da7 100644 --- a/single-node-refactor/src/common/region.h +++ b/single-node-refactor/src/common/region.h @@ -80,8 +80,6 @@ struct reg_fill_t // type region::vol_tag volume; ///< Type of volume for this region eg. global, box, sphere, planes, etc. - std::string file_path = ""; ///< Absolute path of mesh file - // material id size_t material_id; ///< Material ID for this region @@ -97,11 +95,6 @@ struct reg_fill_t double radius1 = 0.0; ///< Inner radius to fill for sphere double radius2 = 0.0; ///< Outer radius to fill for sphere - // scale parameters for mesh files - double scale_x = 1.0; - double scale_y = 1.0; - double scale_z = 1.0; - // initial conditions init_conds::init_velocity_conds velocity; ///< Initial conditions for this region WARNING: Currently unimplemented @@ -119,6 +112,24 @@ struct reg_fill_t double origin[3] = {0.0, 0.0, 0.0}; ///< Origin for region }; + +///////////////////////////////////////////////////////////////////////////// +/// +/// \struct reg_fill_host_t +/// +/// \brief Geometry data, on the cpu only, for regions of materials/states +/// +///////////////////////////////////////////////////////////////////////////// +struct reg_fill_host_t +{ + std::string file_path; ///< path of mesh file + + // scale parameters for input mesh files + double scale_x = 1.0; + double scale_y = 1.0; + double scale_z = 1.0; +}; + // ---------------------------------- // valid inputs for a material fill // ---------------------------------- diff --git a/single-node-refactor/src/common/simulation_parameters.h b/single-node-refactor/src/common/simulation_parameters.h index a70dfc180..f5330a5fe 100644 --- a/single-node-refactor/src/common/simulation_parameters.h +++ b/single-node-refactor/src/common/simulation_parameters.h @@ -62,7 +62,9 @@ struct SimulationParameters_t std::vector solver_inputs; ///< Solvers to use during the simulation - DCArrayKokkos region_fills; ///< Region data for simulation mesh, set the initial conditions + CArrayKokkos region_fills; ///< Region data for simulation mesh, set the initial conditions + + CArray region_fills_host; ///< Region data on CPU, set the initial conditions }; // simulation_parameters_t diff --git a/single-node-refactor/src/driver.h b/single-node-refactor/src/driver.h index f586b9fc5..e7a4a6eeb 100644 --- a/single-node-refactor/src/driver.h +++ b/single-node-refactor/src/driver.h @@ -44,7 +44,7 @@ #include "state.h" -void fill_regions(DCArrayKokkos&, +void fill_regions(SimulationParameters_t&, Material_t&, mesh_t&, State_t&, @@ -53,9 +53,10 @@ void fill_regions(DCArrayKokkos&, // ============================================================================== // Function that returns 1 or 0 if the mesh location is inside an object // ============================================================================== +KOKKOS_FUNCTION size_t fill_geometric_region(const mesh_t& mesh, const DCArrayKokkos& voxel_elem_mat_id, - const DCArrayKokkos& region_fills, + const CArrayKokkos& region_fills, const ViewCArrayKokkos & mesh_coords, const double voxel_dx, const double voxel_dy, @@ -75,13 +76,13 @@ size_t fill_geometric_region(const mesh_t& mesh, void fill_regions_sgh(const Material_t& Materials, const mesh_t& mesh, const DCArrayKokkos & node_coords, - const DCArrayKokkos & node_vel, + DCArrayKokkos & node_vel, DCArrayKokkos & GaussPoint_den, DCArrayKokkos & GaussPoint_sie, DCArrayKokkos & elem_mat_id, - DCArrayKokkos & region_fills, DCArrayKokkos & voxel_elem_mat_id, - const DCArrayKokkos & read_voxel_file, + const CArrayKokkos & region_fills, + const CArray & region_fills_host, const size_t num_fills, const size_t num_elems, const size_t num_nodes, @@ -307,7 +308,7 @@ class Driver //fill_regions(); - fill_regions(SimulationParamaters.region_fills, + fill_regions(SimulationParamaters, Materials, mesh, State, @@ -400,15 +401,14 @@ class Driver /// \brief Fills mesh regions based on YAML input /// ///////////////////////////////////////////////////////////////////////////// -void fill_regions(DCArrayKokkos& region_fills, +void fill_regions(SimulationParameters_t& SimulationParamaters, Material_t& Materials, mesh_t& mesh, State_t& State, size_t rk_num_bins) { - - size_t num_fills = region_fills.size(); + size_t num_fills = SimulationParamaters.region_fills.size(); printf("Num Fills's = %zu\n", num_fills); // the number of elems and nodes in the mesh @@ -416,34 +416,13 @@ void fill_regions(DCArrayKokkos& region_fills, const size_t num_nodes = mesh.num_nodes; - // create temporary state fields // Painting routine requires only 1 material per GaussPoint DCArrayKokkos GaussPoint_den(num_elems); DCArrayKokkos GaussPoint_sie(num_elems); DCArrayKokkos elem_mat_id(num_elems); // the mat_id in the elem - - // --------------------------------------------- - // variables from a voxel file - // --------------------------------------------- - DCArrayKokkos voxel_elem_mat_id; // 1 or 0 if material exist, or it is the material_id - - DCArrayKokkos read_voxel_file(num_fills); // check to see if readVoxelFile - FOR_ALL(f_id, 0, num_fills, { - if (region_fills(f_id).volume == region::readVoxelFile) - { - read_voxel_file(f_id) = region::readVoxelFile; // read the voxel file - } - // add other mesh voxel files - else - { - read_voxel_file(f_id) = 0; - } - }); // end parallel for - read_voxel_file.update_host(); // copy to CPU if code is to read a file - Kokkos::fence(); - // --------------------------------------------- + DCArrayKokkos voxel_elem_mat_id; // 1 or 0 if material exist, or it is the material_id @@ -457,9 +436,9 @@ void fill_regions(DCArrayKokkos& region_fills, GaussPoint_den, GaussPoint_sie, elem_mat_id, - region_fills, voxel_elem_mat_id, - read_voxel_file, + SimulationParamaters.region_fills, + SimulationParamaters.region_fills_host, num_fills, num_elems, num_nodes, @@ -1091,9 +1070,10 @@ std::string trim(const std::string& s) /// \param mesh_coords is the geometric center of the element or a node coordinates /// ///////////////////////////////////////////////////////////////////////////// +KOKKOS_FUNCTION size_t fill_geometric_region(const mesh_t& mesh, const DCArrayKokkos& voxel_elem_mat_id, - const DCArrayKokkos& region_fills, + const CArrayKokkos& region_fills, const ViewCArrayKokkos & mesh_coords, const double voxel_dx, const double voxel_dy, @@ -1245,7 +1225,7 @@ void paint_gauss_den_sie(const Material_t& Materials, const DCArrayKokkos & GaussPoint_den, const DCArrayKokkos & GaussPoint_sie, const DCArrayKokkos & elem_mat_id, - const DCArrayKokkos& region_fills, + const CArrayKokkos& region_fills, const ViewCArrayKokkos elem_coords, const double elem_gid, const size_t f_id){ @@ -1309,7 +1289,7 @@ void paint_gauss_den_sie(const Material_t& Materials, /// ///////////////////////////////////////////////////////////////////////////// KOKKOS_FUNCTION -void paint_node_vel(const DCArrayKokkos& region_fills, +void paint_node_vel(const CArrayKokkos& region_fills, const DCArrayKokkos& node_vel, const DCArrayKokkos& node_coords, const double node_gid, @@ -1479,13 +1459,13 @@ void paint_node_vel(const DCArrayKokkos& region_fills, void fill_regions_sgh(const Material_t& Materials, const mesh_t& mesh, const DCArrayKokkos & node_coords, - const DCArrayKokkos & node_vel, + DCArrayKokkos & node_vel, DCArrayKokkos & GaussPoint_den, DCArrayKokkos & GaussPoint_sie, DCArrayKokkos & elem_mat_id, - DCArrayKokkos & region_fills, DCArrayKokkos & voxel_elem_mat_id, - const DCArrayKokkos & read_voxel_file, + const CArrayKokkos & region_fills, + const CArray & region_fills_host, const size_t num_fills, const size_t num_elems, const size_t num_nodes, @@ -1497,6 +1477,28 @@ void fill_regions_sgh(const Material_t& Materials, size_t voxel_num_i, voxel_num_j, voxel_num_k; // num voxel elements in each direction, set by input file + // --------------------------------------------- + // copy to host, enum to read a voxel file + // --------------------------------------------- + + DCArrayKokkos read_voxel_file(num_fills); // check to see if readVoxelFile + + FOR_ALL(f_id, 0, num_fills, { + if (region_fills(f_id).volume == region::readVoxelFile) + { + read_voxel_file(f_id) = region::readVoxelFile; // read the voxel file + } + // add other mesh voxel files + else + { + read_voxel_file(f_id) = 0; + } + }); // end parallel for + read_voxel_file.update_host(); // copy to CPU if code is to read a file + Kokkos::fence(); + // --------------------------------------------- + + // loop over the fill instructions for (size_t f_id = 0; f_id < num_fills; f_id++) { @@ -1515,10 +1517,10 @@ void fill_regions_sgh(const Material_t& Materials, voxel_num_i, voxel_num_j, voxel_num_k, - region_fills(f_id).scale_x, - region_fills(f_id).scale_y, - region_fills(f_id).scale_z, - region_fills(f_id).file_path); + region_fills_host(f_id).scale_x, + region_fills_host(f_id).scale_y, + region_fills_host(f_id).scale_z, + region_fills_host(f_id).file_path); // copy values read from file to device voxel_elem_mat_id.update_device(); @@ -1620,6 +1622,8 @@ void fill_regions_sgh(const Material_t& Materials, elem_mat_id.update_host(); GaussPoint_den.update_host(); GaussPoint_sie.update_host(); + node_vel.update_host(); + Kokkos::fence(); } // end SGH fill regions diff --git a/single-node-refactor/src/input/parse_yaml.cpp b/single-node-refactor/src/input/parse_yaml.cpp index 1c8d4ca3c..d500656e2 100644 --- a/single-node-refactor/src/input/parse_yaml.cpp +++ b/single-node-refactor/src/input/parse_yaml.cpp @@ -313,7 +313,9 @@ void parse_yaml(Yaml::Node& root, SimulationParameters_t& SimulationParamaters, std::cout << "Parsing YAML regions:" << std::endl; } // parse the region yaml text into a vector of region_fills - parse_regions(root, SimulationParamaters.region_fills); + parse_regions(root, + SimulationParamaters.region_fills, + SimulationParamaters.region_fills_host); if (VERBOSE) { printf("\n"); @@ -816,7 +818,8 @@ void parse_mesh_input(Yaml::Node& root, mesh_input_t& mesh_input) // ================================================================================= // Parse Output options // ================================================================================= -void parse_output_options(Yaml::Node& root, output_options_t& output_options) +void parse_output_options(Yaml::Node& root, + output_options_t& output_options) { Yaml::Node& out_opts = root["output_options"]; @@ -909,14 +912,16 @@ void parse_output_options(Yaml::Node& root, output_options_t& output_options) // ================================================================================= // Parse Fill regions // ================================================================================= -void parse_regions(Yaml::Node& root, DCArrayKokkos& region_fills) +void parse_regions(Yaml::Node& root, + CArrayKokkos& region_fills, + CArray& region_fills_host) { Yaml::Node& region_yaml = root["regions"]; size_t num_regions = region_yaml.Size(); - region_fills = DCArrayKokkos(num_regions , "sim_param.region_fills"); - + region_fills = CArrayKokkos(num_regions , "sim_param.region_fills"); + region_fills_host = CArray(num_regions); // loop over the fill regions specified for (int reg_id = 0; reg_id < num_regions; reg_id++) { @@ -1128,9 +1133,8 @@ void parse_regions(Yaml::Node& root, DCArrayKokkos& region_fills) std::cout << "\tscale_x = " << scale_x << std::endl; } - RUN({ - region_fills(reg_id).scale_x = scale_x; - }); + region_fills_host(reg_id).scale_x = scale_x; + } // scale_x else if (a_word.compare("scale_y") == 0) { // outer plane @@ -1140,9 +1144,8 @@ void parse_regions(Yaml::Node& root, DCArrayKokkos& region_fills) std::cout << "\tscale_y = " << scale_y << std::endl; } - RUN({ - region_fills(reg_id).scale_y = scale_y; - }); + region_fills_host(reg_id).scale_y = scale_y; + } // scale_y else if (a_word.compare("scale_z") == 0) { // outer plane @@ -1152,9 +1155,8 @@ void parse_regions(Yaml::Node& root, DCArrayKokkos& region_fills) std::cout << "\tscale_z = " << scale_z << std::endl; } - RUN({ - region_fills(reg_id).scale_z = scale_z; - }); + region_fills_host(reg_id).scale_z = scale_z; + } // scale_z else if (a_word.compare("velocity") == 0) { @@ -1337,7 +1339,8 @@ void parse_regions(Yaml::Node& root, DCArrayKokkos& region_fills) } // absolute path to file or local to the director where exe is run - region_fills(reg_id).file_path = path; + region_fills_host(reg_id).file_path = path; // saving the absolute file path + } // end file path // @@ -1388,22 +1391,34 @@ void parse_regions(Yaml::Node& root, DCArrayKokkos& region_fills) // ----------------------------------------------- // check for consistency in input settings - - // if the following is true, stop simulation; must add all mesh read options - if (region_fills(reg_id).volume == region::readVoxelFile && region_fills(reg_id).file_path.empty()) { - std::cout << "ERROR: When using a file to initialize a region, a file_path must be set to point to the mesh file" << std::endl; - } - // add all mesh read options here - if (region_fills(reg_id).volume != region::readVoxelFile ) { - // this means it is a geometric definition of the region + // check to see if a file path is empty + if(region_fills_host(reg_id).file_path.empty()){ + + RUN({ + // if the following is true, stop simulation; must add all mesh read options + if (region_fills(reg_id).volume == region::readVoxelFile) { + Kokkos::abort("\n********************************************************************************************\n" + "ERROR: \n" + "When using a file to initialize a region, a file_path must be set to point to the mesh file\n" + "********************************************************************************************\n"); + } + }); + } // end if check + + // check to see if a file path was set + if(region_fills_host(reg_id).file_path.size()>0){ + RUN({ + if (region_fills(reg_id).volume != region::readVoxelFile){ + // this means it is a geometric definition of the region + Kokkos::abort("\n********************************************************************************************\n" + "ERROR: \n" + "When a geometric entity defines the region, a mesh file cannot be passed to set the region\n" + "********************************************************************************************\n"); + } + }); + } - // check to see if a file path was set - if(region_fills(reg_id).file_path.size()>0){ - std::cout << "ERROR: When a geometric entity defines the region, a mesh file cannot be passed to set the region" << std::endl; - exit(0); - } - } // ----------------------------------------------- diff --git a/single-node-refactor/src/input/parse_yaml.h b/single-node-refactor/src/input/parse_yaml.h index 23dbacef5..cb8d9928d 100644 --- a/single-node-refactor/src/input/parse_yaml.h +++ b/single-node-refactor/src/input/parse_yaml.h @@ -50,6 +50,7 @@ struct SimulationParameters_t; struct solver_input_t; struct mesh_input_t; struct reg_fill_t; +struct reg_fill_host_t; struct output_options_t; struct Material_t; @@ -105,7 +106,9 @@ void parse_mesh_input(Yaml::Node& root, mesh_input_t& mesh_input); void parse_output_options(Yaml::Node& root, output_options_t& output_options); // parse the region text -void parse_regions(Yaml::Node& root, DCArrayKokkos& region_fills); +void parse_regions(Yaml::Node& root, + CArrayKokkos& region_fills, + CArray& region_fills_host); // parse the region text void parse_materials(Yaml::Node& root, Material_t& Materials); From ca60842002af6b30633425135532be0cdbbcb1ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CAdrian-Diaz=E2=80=9D?= <“adriandiaz1117@gmail.com”> Date: Mon, 5 Aug 2024 00:06:58 -0600 Subject: [PATCH 101/233] WIP: refactor dynamic optimization classes --- .../Fierro_Optimization_Objective.hpp | 129 ++++++++++++++++++ .../Kinetic_Energy_Minimize.h | 18 ++- 2 files changed, 141 insertions(+), 6 deletions(-) create mode 100644 src/Parallel-Solvers/Optimization_Modules/Fierro_Optimization_Objective.hpp diff --git a/src/Parallel-Solvers/Optimization_Modules/Fierro_Optimization_Objective.hpp b/src/Parallel-Solvers/Optimization_Modules/Fierro_Optimization_Objective.hpp new file mode 100644 index 000000000..5494ef17e --- /dev/null +++ b/src/Parallel-Solvers/Optimization_Modules/Fierro_Optimization_Objective.hpp @@ -0,0 +1,129 @@ +// @HEADER +// ************************************************************************ +// +// Rapid Optimization Library (ROL) Package +// Copyright (2014) Sandia Corporation +// +// Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive +// license for use of this work by or on behalf of the U.S. Government. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact lead developers: +// Drew Kouri (dpkouri@sandia.gov) and +// Denis Ridzal (dridzal@sandia.gov) +// +// ************************************************************************ +// @HEADER + +#ifndef FIERRO_OPTIMIZATION_OBJECTIVE_H +#define FIERRO_OPTIMIZATION_OBJECTIVE_H + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include "Tpetra_Details_DefaultTypes.hpp" + +#include "ROL_Types.hpp" +#include +#include "ROL_Elementwise_Reduce.hpp" +#include "ROL_Objective.hpp" +#include "ROL_BoundConstraint.hpp" + +/** @ingroup func_group + \class ROL::ObjectiveMMA + \brief Provides the interface to to Method of Moving Asymptotes + Objective function + + --- +*/ + +class FierroOptimizationObjective : public ROL::Objective { + + typedef Tpetra::Map<>::local_ordinal_type LO; + typedef Tpetra::Map<>::global_ordinal_type GO; + typedef Tpetra::Map<>::node_type Node; + typedef Tpetra::Map Map; + typedef Tpetra::MultiVector MV; + typedef ROL::Vector V; + typedef const ROL::Vector const_V; + typedef ROL::TpetraMultiVector ROL_MV; + + using traits = Kokkos::ViewTraits; + using array_layout = typename traits::array_layout; + using execution_space = typename traits::execution_space; + using device_type = typename traits::device_type; + using memory_traits = typename traits::memory_traits; + using global_size_t = Tpetra::global_size_t; + + typedef Kokkos::View values_array; + typedef Kokkos::View global_indices_array; + typedef Kokkos::View indices_array; + + //typedef Kokkos::DualView::t_dev vec_array; + typedef MV::dual_view_type::t_dev vec_array; + typedef MV::dual_view_type::t_host host_vec_array; + typedef Kokkos::View const_host_vec_array; + typedef MV::dual_view_type dual_vec_array; + typedef ROL::Objective OBJ; + typedef ROL::BoundConstraint BND; + int update_count = 0; + +private: + + real_t fval_; // Original objective value + + real_t tol_; + + ROL::Ptr getVector( const V& x ) { + return dynamic_cast(x).getVector(); + } + + ROL::Ptr getVector( V& x ) { + return dynamic_cast(x).getVector(); + } + +public: + + FierroOptimizationObjective(){ + + } + + +}; // class ObjectiveMMA + + +#endif // FIERRO_MMA_OBJECTIVE + diff --git a/src/Parallel-Solvers/Parallel-Explicit/Topology_Optimization/Kinetic_Energy_Minimize.h b/src/Parallel-Solvers/Parallel-Explicit/Topology_Optimization/Kinetic_Energy_Minimize.h index ac146e35b..4266d8564 100644 --- a/src/Parallel-Solvers/Parallel-Explicit/Topology_Optimization/Kinetic_Energy_Minimize.h +++ b/src/Parallel-Solvers/Parallel-Explicit/Topology_Optimization/Kinetic_Energy_Minimize.h @@ -53,12 +53,13 @@ #include "ROL_Types.hpp" #include #include "ROL_Objective.hpp" +#include "Fierro_Optimization_Objective.hpp" #include "ROL_Elementwise_Reduce.hpp" #include "FEA_Module_SGH.h" #include "FEA_Module_Dynamic_Elasticity.h" #include "Explicit_Solver.h" -class KineticEnergyMinimize_TopOpt : public ROL::Objective +class KineticEnergyMinimize_TopOpt : public FierroOptimizationObjective { typedef Tpetra::Map<>::local_ordinal_type LO; typedef Tpetra::Map<>::global_ordinal_type GO; @@ -286,6 +287,9 @@ typedef MV::dual_view_type dual_vec_array; FEM_SGH_->comm_variables(zp); FEM_SGH_->update_forward_solve(zp); + if(Explicit_Solver_Pointer_->myrank == 0){ + std::cout << "CURRENT TIME INTEGRAL OF KINETIC ENERGY " << objective_accumulation << std::endl; + } FEM_SGH_->compute_topology_optimization_adjoint_full(zp); previous_objective_accumulation = objective_accumulation; previous_gradients->assign(*(FEM_SGH_->cached_design_gradients_distributed)); @@ -312,7 +316,9 @@ typedef MV::dual_view_type dual_vec_array; if (Explicit_Solver_Pointer_->myrank == 0) { *fos << "called Revert" << std::endl; } objective_accumulation = previous_objective_accumulation; FEM_SGH_->cached_design_gradients_distributed->assign(*previous_gradients); - + if(Explicit_Solver_Pointer_->myrank == 0){ + std::cout << "CURRENT TIME INTEGRAL OF KINETIC ENERGY " << objective_accumulation << std::endl; + } // FEM_SGH_->comm_variables(zp); // // update deformation variables // FEM_SGH_->update_forward_solve(zp); @@ -331,8 +337,11 @@ typedef MV::dual_view_type dual_vec_array; FEM_SGH_->comm_variables(zp); // update deformation variables FEM_SGH_->update_forward_solve(zp, print_flag); + + if(Explicit_Solver_Pointer_->myrank == 0){ + std::cout << "CURRENT TIME INTEGRAL OF KINETIC ENERGY " << objective_accumulation << std::endl; + } FEM_SGH_->compute_topology_optimization_adjoint_full(zp); - // decide to output current optimization state // FEM_SGH_->Explicit_Solver_Pointer_->write_outputs(); } @@ -399,9 +408,6 @@ typedef MV::dual_view_type dual_vec_array; } std::cout.precision(10); - if (Explicit_Solver_Pointer_->myrank == 0&&first_init) { - std::cout << "CURRENT TIME INTEGRAL OF KINETIC ENERGY " << objective_accumulation << std::endl; - } // std::cout << "Ended obj value on task " <myrank << std::endl; return objective_sign*objective_accumulation; From 0b5a4502a25ead862382796318858f2910bc7dc4 Mon Sep 17 00:00:00 2001 From: Nathaniel Morgan Date: Mon, 5 Aug 2024 07:54:11 -0600 Subject: [PATCH 102/233] WIP reorganizing fill regions to be in region_fill and solver setup --- .../src/Solvers/SGH_solver/CMakeLists.txt | 5 +- .../Solvers/SGH_solver/include/sgh_solver.h | 39 +- .../src/Solvers/SGH_solver/src/sgh_solve.cpp | 14 +- single-node-refactor/src/common/io_utils.h | 500 ++++- single-node-refactor/src/driver.h | 1621 +---------------- single-node-refactor/src/solver.h | 6 +- 6 files changed, 548 insertions(+), 1637 deletions(-) diff --git a/single-node-refactor/src/Solvers/SGH_solver/CMakeLists.txt b/single-node-refactor/src/Solvers/SGH_solver/CMakeLists.txt index 76ac6da4e..3f175c4bc 100755 --- a/single-node-refactor/src/Solvers/SGH_solver/CMakeLists.txt +++ b/single-node-refactor/src/Solvers/SGH_solver/CMakeLists.txt @@ -28,16 +28,15 @@ src/position.cpp src/momentum.cpp src/properties.cpp src/sgh_solve.cpp -src/time_integration.cpp) +src/time_integration.cpp +src/sgh_setup.cpp) -# set(SGH_Solver_SRC src/sgh_solver.cpp ) message("\n ****** ADDING SGH LIBRARY ******** \n ") add_library(sgh_solver ${SRC_Files} ) # ${SGH_Solver_SRC} target_include_directories(sgh_solver PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include) - target_link_libraries(sgh_solver matar Kokkos::kokkos) diff --git a/single-node-refactor/src/Solvers/SGH_solver/include/sgh_solver.h b/single-node-refactor/src/Solvers/SGH_solver/include/sgh_solver.h index 41dc7543f..90c3f0950 100644 --- a/single-node-refactor/src/Solvers/SGH_solver/include/sgh_solver.h +++ b/single-node-refactor/src/Solvers/SGH_solver/include/sgh_solver.h @@ -35,12 +35,17 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef SGH_SOLVER_H #define SGH_SOLVER_H +#include "solver.h" #include "geometry_new.h" #include "matar.h" #include "simulation_parameters.h" #include "boundary_conditions.h" #include "material.h" -#include "solver.h" +#include "mesh.h" +#include "state.h" +#include "io_utils.h" +#include "dynamic_options.h" + @@ -70,25 +75,25 @@ class SGH : public Solver // Initialize data specific to the SGH solver void initialize(SimulationParameters_t& SimulationParamaters, Material_t& Materials, + mesh_t& mesh, BoundaryCondition_t& Boundary, State_t& State) const override { + // stuff goes here } ///////////////////////////////////////////////////////////////////////////// /// /// \fn setup /// - /// \brief Calls setup_sgh, which initializes state, and material data + /// \brief Calls setup_sgh, which initializes state and material data /// ///////////////////////////////////////////////////////////////////////////// void setup(SimulationParameters_t& SimulationParamaters, Material_t& Materials, - BoundaryCondition_t& Boundary, mesh_t& mesh, - State_t& State) const override - { - } + BoundaryCondition_t& Boundary, + State_t& State) override; ///////////////////////////////////////////////////////////////////////////// /// @@ -127,6 +132,28 @@ class SGH : public Solver // Any finalize goes here, remove allocated memory, etc } + // **** Functions defined in sgh_setup.cpp **** // + void fill_regions_sgh( + const Material_t& Materials, + const mesh_t& mesh, + const DCArrayKokkos & node_coords, + DCArrayKokkos & node_vel, + DCArrayKokkos & GaussPoint_den, + DCArrayKokkos & GaussPoint_sie, + DCArrayKokkos & elem_mat_id, + DCArrayKokkos & voxel_elem_mat_id, + const CArrayKokkos & region_fills, + const CArray & region_fills_host, + const size_t num_fills, + const size_t num_elems, + const size_t num_nodes, + const size_t rk_num_bins) const; + + void init_corner_node_masses_zero( + const mesh_t& mesh, + const DCArrayKokkos& node_mass, + const DCArrayKokkos& corner_mass) const; + // **** Functions defined in boundary.cpp **** // void boundary_velocity( const mesh_t& mesh, diff --git a/single-node-refactor/src/Solvers/SGH_solver/src/sgh_solve.cpp b/single-node-refactor/src/Solvers/SGH_solver/src/sgh_solve.cpp index de5752ef5..14364a61b 100644 --- a/single-node-refactor/src/Solvers/SGH_solver/src/sgh_solve.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver/src/sgh_solve.cpp @@ -32,11 +32,17 @@ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. **********************************************************************************************/ -#include "state.h" -#include "mesh.h" -#include "geometry_new.h" #include "sgh_solver.h" +#include "solver.h" +#include "geometry_new.h" +#include "matar.h" +#include "simulation_parameters.h" +#include "boundary_conditions.h" +#include "material.h" +#include "mesh.h" +#include "state.h" #include "io_utils.h" +#include "dynamic_options.h" #include ///////////////////////////////////////////////////////////////////////////// @@ -547,7 +553,7 @@ void SGH::execute(SimulationParameters_t& SimulationParamaters, printf("nodal mass conservation error = %f \n", mass_domain_nodes_tend - mass_domain_nodes_t0); printf("nodal and material mass error = %f \n\n", mass_domain_nodes_tend - mass_domain_all_mats_tend); -} // end of SGH solve +} // end of SGH execute ///////////////////////////////////////////////////////////////////////////// /// diff --git a/single-node-refactor/src/common/io_utils.h b/single-node-refactor/src/common/io_utils.h index eeb253416..1e1ab7001 100644 --- a/single-node-refactor/src/common/io_utils.h +++ b/single-node-refactor/src/common/io_utils.h @@ -38,12 +38,61 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "mesh.h" #include "state.h" #include "simulation_parameters.h" +#include "region.h" #include #include #include #include + +// ============================================================================== +// Functions to parse strings +// ============================================================================== +// for string delimiter parsing +std::vector split(std::string s, std::string delimiter); + +// retrieves multiple values between [ ] +std::vector extract_list(std::string str); + +const std::string WHITESPACE = " "; + +std::string ltrim(const std::string& s); + +std::string rtrim(const std::string& s); + +std::string trim(const std::string& s); + + +// ============================================================================== +// Functions to get 1D for an i,j,k layout mesh +// ============================================================================== +int get_id(int i, int j, int k, int num_i, int num_j); + +KOKKOS_FUNCTION +int get_id_device(int i, int j, int k, int num_i, int num_j); + + + +// ============================================================================== +// Functions to read voxel mesh +// ============================================================================== +void user_voxel_init(DCArrayKokkos& elem_values, + double& dx, + double& dy, + double& dz, + double& orig_x, + double& orig_y, + double& orig_z, + size_t& voxel_num_i, + size_t& voxel_num_j, + size_t& voxel_num_k, + double scale_x, + double scale_y, + double scale_z, + std::string mesh_file); + + ///////////////////////////////////////////////////////////////////////////// /// /// \class MeshReader @@ -747,27 +796,7 @@ class MeshBuilder printf(" ***** WARNING:: build_3d_HexN_box not yet implemented\n"); } - ///////////////////////////////////////////////////////////////////////////// - /// - /// \fn get_id - /// - /// \brief This gives the index value of the point or the elem - /// - /// Assumes that the grid has an i,j,k structure - /// the elem = i + (j)*(num_points_i-1) + (k)*(num_points_i-1)*(num_points_j-1) - /// the point = i + (j)*num_points_i + (k)*num_points_i*num_points_j - /// - /// \param i index - /// \param j index - /// \param k index - /// \param Number of i indices - /// \param Number of j indices - /// - ///////////////////////////////////////////////////////////////////////////// - int get_id(int i, int j, int k, int num_i, int num_j) const - { - return i + j * num_i + k * num_i * num_j; - } + ///////////////////////////////////////////////////////////////////////////// /// @@ -1313,6 +1342,433 @@ class MeshWriter // Not yet supported throw std::runtime_error("**** VTK OUTPUT TYPE NOT YET SUPPORTED ****"); } -}; +}; // end class + + + + +// ----------------------------------------------------------------------------- +// The function to read a voxel vtk file from Dream3d and intialize the mesh +// ------------------------------------------------------------------------------ +void user_voxel_init(DCArrayKokkos& elem_values, + double& dx, + double& dy, + double& dz, + double& orig_x, + double& orig_y, + double& orig_z, + size_t& num_elems_i, + size_t& num_elems_j, + size_t& num_elems_k, + double scale_x, + double scale_y, + double scale_z, + std::string mesh_file) +{ + std::string MESH = mesh_file; // user specified + + std::ifstream in; // FILE *in; + in.open(MESH); + + // check to see of a mesh was supplied when running the code + if (in) + { + printf("\nReading the 3D voxel mesh: "); + std::cout << MESH << std::endl; + } + else + { + std::cout << "\n\n**********************************\n\n"; + std::cout << " ERROR:\n"; + std::cout << " Voxel vtk input does not exist \n"; + std::cout << "**********************************\n\n" << std::endl; + std::exit(EXIT_FAILURE); + } // end if + + size_t i; // used for writing information to file + size_t point_id; // the global id for the point + size_t elem_id; // the global id for the elem + size_t this_point; // a local id for a point in a elem (0:7 for a Hexahedral elem) + + size_t num_points_i; + size_t num_points_j; + size_t num_points_k; + + size_t num_dims = 3; + + std::string token; + + bool found = false; + + // look for POINTS + i = 0; + while (found == false) { + std::string str; + std::string delimiter = " "; + std::getline(in, str); + std::vector v = split(str, delimiter); + + // looking for the following text: + // POINTS %d float + if (v[0] == "DIMENSIONS") + { + num_points_i = std::stoi(v[1]); + num_points_j = std::stoi(v[2]); + num_points_k = std::stoi(v[3]); + printf("Num voxel nodes read in = %zu, %zu, %zu\n", num_points_i, num_points_j, num_points_k); + + found = true; + } // end if + + if (i > 1000) + { + printf("ERROR: Failed to find POINTS \n"); + break; + } // end if + + i++; + } // end while + + found = false; + + int num_points = num_points_i * num_points_j * num_points_k; + CArray pt_coords_x(num_points_i); + CArray pt_coords_y(num_points_j); + CArray pt_coords_z(num_points_k); + + while (found == false) { + std::string str; + std::string str0; + std::string delimiter = " "; + std::getline(in, str); + std::vector v = split(str, delimiter); + + // looking for the following text: + if (v[0] == "X_COORDINATES") + { + size_t num_saved = 0; + + while (num_saved < num_points_i - 1) { + // get next line + std::getline(in, str0); + + // remove starting and trailing spaces + str = trim(str0); + std::vector v_coords = split(str, delimiter); + + // loop over the contents of the vector v_coords + for (size_t this_point = 0; this_point < v_coords.size(); this_point++) + { + pt_coords_x(num_saved) = scale_x*std::stod(v_coords[this_point]); + num_saved++; + } // end for + } // end while + + found = true; + } // end if + + if (i > 1000) + { + printf("ERROR: Failed to find X_COORDINATES \n"); + break; + } // end if + + i++; + } // end while + found = false; + + while (found == false) { + std::string str; + std::string str0; + std::string delimiter = " "; + std::getline(in, str); + std::vector v = split(str, delimiter); + + // looking for the following text: + if (v[0] == "Y_COORDINATES") + { + size_t num_saved = 0; + + while (num_saved < num_points_j - 1) { + // get next line + std::getline(in, str0); + + // remove starting and trailing spaces + str = trim(str0); + std::vector v_coords = split(str, delimiter); + + // loop over the contents of the vector v_coords + for (size_t this_point = 0; this_point < v_coords.size(); this_point++) + { + pt_coords_y(num_saved) = scale_y*std::stod(v_coords[this_point]); + num_saved++; + } // end for + } // end while + + found = true; + } // end if + + if (i > 1000) + { + printf("ERROR: Failed to find Y_COORDINATES \n"); + break; + } // end if + + i++; + } // end while + found = false; + + while (found == false) { + std::string str; + std::string str0; + std::string delimiter = " "; + std::getline(in, str); + std::vector v = split(str, delimiter); + + // looking for the following text: + if (v[0] == "Z_COORDINATES") + { + size_t num_saved = 0; + + while (num_saved < num_points_k - 1) { + // get next line + std::getline(in, str0); + + // remove starting and trailing spaces + str = trim(str0); + std::vector v_coords = split(str, delimiter); + + // loop over the contents of the vector v_coords + for (size_t this_point = 0; this_point < v_coords.size(); this_point++) + { + pt_coords_z(num_saved) = scale_z*std::stod(v_coords[this_point]); + num_saved++; + } // end for + } // end while + + found = true; + } // end if + + if (i > 1000) + { + printf("ERROR: Failed to find Z_COORDINATES \n"); + break; + } // end if + + i++; + } // end while + found = false; + + size_t num_elems; + num_elems_i = num_points_i - 1; + num_elems_j = num_points_j - 1; + num_elems_k = num_points_k - 1; + + // center to center distance between first and last elem along each edge + double Lx = (pt_coords_x(num_points_i - 2) - pt_coords_x(0)); + double Ly = (pt_coords_y(num_points_j - 2) - pt_coords_y(0)); + double Lz = (pt_coords_z(num_points_k - 2) - pt_coords_z(0)); + + // spacing between elems + dx = Lx / ((double) num_elems_i); + dy = Ly / ((double) num_elems_j); + dz = Lz / ((double) num_elems_k); + + // element mesh origin + orig_x = 0.5 * (pt_coords_x(0) + pt_coords_x(1)), + orig_y = 0.5 * (pt_coords_y(0) + pt_coords_y(1)), + orig_z = 0.5 * (pt_coords_z(0) + pt_coords_z(1)), + + // look for CELLS + i = 0; + while (found == false) { + std::string str; + std::getline(in, str); + + std::string delimiter = " "; + std::vector v = split(str, delimiter); + + // looking for the following text: + // CELLS num_elems size + if (v[0] == "CELL_DATA") + { + num_elems = std::stoi(v[1]); + printf("Num voxel elements read in %zu\n", num_elems); + + found = true; + } // end if + + if (i > 1000) + { + printf("ERROR: Failed to find CELL_DATA \n"); + break; + } // end if + + i++; + } // end while + found = false; + + // allocate memory for element voxel values + elem_values = DCArrayKokkos(num_elems); + + // reading the cell data + while (found == false) { + std::string str; + std::string str0; + + std::string delimiter = " "; + std::getline(in, str); + std::vector v = split(str, delimiter); + + // looking for the following text: + if (v[0] == "LOOKUP_TABLE") + { + size_t num_saved = 0; + + while (num_saved < num_elems - 1) { + // get next line + std::getline(in, str0); + + // remove starting and trailing spaces + str = trim(str0); + std::vector v_values = split(str, delimiter); + + // loop over the contents of the vector v_coords + for (size_t this_elem = 0; this_elem < v_values.size(); this_elem++) + { + // save integers (0 or 1) to host side + elem_values.host(num_saved) = std::stoi(v_values[this_elem]); + num_saved++; + } // end for + + // printf(" done with one row of data \n"); + } // end while + + found = true; + } // end if + + if (i > 1000) + { + printf("ERROR: Failed to find LOOKUP_TABLE data \n"); + break; + } // end if + + i++; + } // end while + found = false; + + printf("\n"); + + in.close(); +} // end routine + + + +///////////////////////////////////////////////////////////////////////////// +/// +/// \fn get_id +/// +/// \brief This gives the index value of the point or the elem +/// +/// Assumes that the grid has an i,j,k structure +/// the elem = i + (j)*(num_points_i-1) + (k)*(num_points_i-1)*(num_points_j-1) +/// the point = i + (j)*num_points_i + (k)*num_points_i*num_points_j +/// +/// \param i index +/// \param j index +/// \param k index +/// \param Number of i indices +/// \param Number of j indices +/// +///////////////////////////////////////////////////////////////////////////// +int get_id(int i, int j, int k, int num_i, int num_j) +{ + return i + j * num_i + k * num_i * num_j; +} + + +///////////////////////////////////////////////////////////////////////////// +/// +/// \fn get_id_device +/// +/// \brief This gives the index value of the point or the elem +/// +/// Assumes that the grid has an i,j,k structure +/// the elem = i + (j)*(num_points_i-1) + (k)*(num_points_i-1)*(num_points_j-1) +/// the point = i + (j)*num_points_i + (k)*num_points_i*num_points_j +/// +/// \param i index +/// \param j index +/// \param k index +/// \param Number of i indices +/// \param Number of j indices +/// +///////////////////////////////////////////////////////////////////////////// +KOKKOS_FUNCTION +int get_id_device(int i, int j, int k, int num_i, int num_j) +{ + return i + j * num_i + k * num_i * num_j; +} + + + +// Code from stackover flow for string delimiter parsing +std::vector split(std::string s, std::string delimiter) +{ + size_t pos_start = 0, pos_end, delim_len = delimiter.length(); + std::string token; + std::vector res; + + while ((pos_end = s.find(delimiter, pos_start)) != std::string::npos) { + token = s.substr(pos_start, pos_end - pos_start); + pos_start = pos_end + delim_len; + res.push_back(token); + } + + res.push_back(s.substr(pos_start)); + return res; +} // end of split + + +// retrieves multiple values between [ ] +std::vector extract_list(std::string str) +{ + // replace '[' with a space and ']' with a space + std::replace(str.begin(), str.end(), '[', ' '); + std::replace(str.begin(), str.end(), ']', ' '); + + std::vector str_values; + std::vector values; + + // exact the str values into a vector + str_values = split(str, ","); + + // convert the text values into double values + for (auto& word : str_values) + { + values.push_back(atof(word.c_str()) ); + } // end for + + return values; +} // end of extract_list + + +std::string ltrim(const std::string& s) +{ + size_t start = s.find_first_not_of(WHITESPACE); + return (start == std::string::npos) ? "" : s.substr(start); +} + + +std::string rtrim(const std::string& s) +{ + size_t end = s.find_last_not_of(WHITESPACE); + return (end == std::string::npos) ? "" : s.substr(0, end + 1); +} + +std::string trim(const std::string& s) +{ + return rtrim(ltrim(s)); +} #endif // end Header Guard \ No newline at end of file diff --git a/single-node-refactor/src/driver.h b/single-node-refactor/src/driver.h index e7a4a6eeb..528753f5a 100644 --- a/single-node-refactor/src/driver.h +++ b/single-node-refactor/src/driver.h @@ -44,166 +44,6 @@ #include "state.h" -void fill_regions(SimulationParameters_t&, - Material_t&, - mesh_t&, - State_t&, - size_t); - -// ============================================================================== -// Function that returns 1 or 0 if the mesh location is inside an object -// ============================================================================== -KOKKOS_FUNCTION -size_t fill_geometric_region(const mesh_t& mesh, - const DCArrayKokkos& voxel_elem_mat_id, - const CArrayKokkos& region_fills, - const ViewCArrayKokkos & mesh_coords, - const double voxel_dx, - const double voxel_dy, - const double voxel_dz, - const double orig_x, - const double orig_y, - const double orig_z, - const size_t voxel_num_i, - const size_t voxel_num_j, - const size_t voxel_num_k, - const size_t f_id); - - -// ============================================================================== -// SGH related fill functions -// ============================================================================== -void fill_regions_sgh(const Material_t& Materials, - const mesh_t& mesh, - const DCArrayKokkos & node_coords, - DCArrayKokkos & node_vel, - DCArrayKokkos & GaussPoint_den, - DCArrayKokkos & GaussPoint_sie, - DCArrayKokkos & elem_mat_id, - DCArrayKokkos & voxel_elem_mat_id, - const CArrayKokkos & region_fills, - const CArray & region_fills_host, - const size_t num_fills, - const size_t num_elems, - const size_t num_nodes, - const size_t rk_num_bins); - -void init_press_sspd_stress(const Material_t& Materials, - const mesh_t& mesh, - const DCArrayKokkos& MaterialPoints_den, - const DCArrayKokkos& MaterialPoints_pres, - const DCArrayKokkos& MaterialPoints_stress, - const DCArrayKokkos& MaterialPoints_sspd, - const DCArrayKokkos& MaterialPoints_sie, - const DCArrayKokkos& MaterialPoints_statev, - const size_t rk_num_bins, - const size_t num_mat_pts, - const size_t mat_id); - -void init_corner_node_masses_zero(const mesh_t& mesh, - const DCArrayKokkos& node_mass, - const DCArrayKokkos& corner_mass); - -void calc_corner_mass(const Material_t& Materials, - const mesh_t& mesh, - const DCArrayKokkos& node_coords, - const DCArrayKokkos& node_mass, - const DCArrayKokkos& corner_mass, - const DCArrayKokkos& MaterialPoints_mass, - const DCArrayKokkos& MaterialToMeshMaps_elem, - const size_t num_mat_elems); - -void calc_node_mass(const mesh_t& mesh, - const DCArrayKokkos& node_coords, - const DCArrayKokkos& node_mass, - const DCArrayKokkos& corner_mass); - - -// ============================================================================== -// Functions to paint nodal fields onto the mesh -// ============================================================================== -KOKKOS_FUNCTION -void paint_node_vel(const DCArrayKokkos& region_fills, - const DCArrayKokkos& node_vel, - const DCArrayKokkos& node_coords, - const double node_gid, - const double num_dims, - const size_t f_id, - const size_t rk_num_bins); - - - -// ============================================================================== -// Functions to fields on the gauss points of the mesh -// ============================================================================== -KOKKOS_FUNCTION -void paint_gauss_den_sie(const Material_t& Materials, - const mesh_t& mesh, - const DCArrayKokkos & node_coords, - const DCArrayKokkos & GaussPoint_den, - const DCArrayKokkos & GaussPoint_sie, - const DCArrayKokkos & elem_mat_id, - const DCArrayKokkos& region_fills, - const ViewCArrayKokkos elem_coords, - const double elem_gid, - const size_t f_id); - - -// ============================================================================== -// Functions to read voxel mesh -// ============================================================================== -void user_voxel_init(DCArrayKokkos& elem_values, - double& dx, - double& dy, - double& dz, - double& orig_x, - double& orig_y, - double& orig_z, - size_t& voxel_num_i, - size_t& voxel_num_j, - size_t& voxel_num_k, - double scale_x, - double scale_y, - double scale_z, - std::string mesh_file); - -///////////////////////////////////////////////////////////////////////////// -/// -/// \fn get_id_device -/// -/// \brief This gives the index value of the point or the elem -/// -/// Assumes that the grid has an i,j,k structure -/// the elem = i + (j)*(num_points_i-1) + (k)*(num_points_i-1)*(num_points_j-1) -/// the point = i + (j)*num_points_i + (k)*num_points_i*num_points_j -/// -/// \param i index -/// \param j index -/// \param k index -/// \param Number of i indices -/// \param Number of j indices -/// -///////////////////////////////////////////////////////////////////////////// -KOKKOS_FUNCTION -int get_id_device(int i, int j, int k, int num_i, int num_j) -{ - return i + j * num_i + k * num_i * num_j; -} - -// for string delimiter parsing -std::vector split(std::string s, std::string delimiter); - -// retrieves multiple values between [ ] -std::vector extract_list(std::string str); - -const std::string WHITESPACE = " "; - -std::string ltrim(const std::string& s); - -std::string rtrim(const std::string& s); - -std::string trim(const std::string& s); - class Driver @@ -307,23 +147,23 @@ class Driver geometry::get_vol(State.GaussPoints.vol, State.node.coords, mesh); - //fill_regions(); - fill_regions(SimulationParamaters, - Materials, - mesh, - State, - SimulationParamaters.dynamic_options.rk_num_bins); - - - // --- Move the following sovler setup to yaml parsing routine - // Create solvers + // Create solvers and initialize for (int solver_id = 0; solver_id < SimulationParamaters.solver_inputs.size(); solver_id++) { + if (SimulationParamaters.solver_inputs[solver_id].method == solver_input::SGH) { - SGH* sgh_solver = new SGH(); // , mesh, node, MaterialPoints, corner - sgh_solver->initialize(SimulationParamaters, Materials, BoundaryConditions, State); + + SGH* sgh_solver = new SGH(); + + sgh_solver->initialize(SimulationParamaters, + Materials, + mesh, + BoundaryConditions, + State); + solvers.push_back(sgh_solver); - } - } + } // end if SGH solver + + } // end for loop over solvers } // end initialize @@ -337,14 +177,17 @@ class Driver void setup() { std::cout << "Inside driver setup" << std::endl; + + // allocate state, setup models, and apply fill instructions for (auto& solver : solvers) { solver->setup(SimulationParamaters, Materials, - BoundaryConditions, mesh, + BoundaryConditions, State); - } - } + } // end for over solvers + + } // end setup function of driver ///////////////////////////////////////////////////////////////////////////// /// @@ -362,7 +205,7 @@ class Driver BoundaryConditions, mesh, State); - } + } // loop over solvers } ///////////////////////////////////////////////////////////////////////////// @@ -394,1428 +237,6 @@ class Driver }; // end driver class -///////////////////////////////////////////////////////////////////////////// -/// -/// \fn fill_regions -/// -/// \brief Fills mesh regions based on YAML input -/// -///////////////////////////////////////////////////////////////////////////// -void fill_regions(SimulationParameters_t& SimulationParamaters, - Material_t& Materials, - mesh_t& mesh, - State_t& State, - size_t rk_num_bins) -{ - - size_t num_fills = SimulationParamaters.region_fills.size(); - printf("Num Fills's = %zu\n", num_fills); - - // the number of elems and nodes in the mesh - const size_t num_elems = mesh.num_elems; - const size_t num_nodes = mesh.num_nodes; - - - // create temporary state fields - // Painting routine requires only 1 material per GaussPoint - DCArrayKokkos GaussPoint_den(num_elems); - DCArrayKokkos GaussPoint_sie(num_elems); - DCArrayKokkos elem_mat_id(num_elems); // the mat_id in the elem - - DCArrayKokkos voxel_elem_mat_id; // 1 or 0 if material exist, or it is the material_id - - - - // --------------------------------------------- - // fill den, sie, and velocity on the mesh - // --------------------------------------------- - fill_regions_sgh(Materials, - mesh, - State.node.coords, - State.node.vel, - GaussPoint_den, - GaussPoint_sie, - elem_mat_id, - voxel_elem_mat_id, - SimulationParamaters.region_fills, - SimulationParamaters.region_fills_host, - num_fills, - num_elems, - num_nodes, - rk_num_bins); - - - // note device and host are updated in the above function - // --------------------------------------------- - - - // ---------------------------------------------------------------- - // Walk over the mesh and find dimensions of material arrays - // ---------------------------------------------------------------- - const size_t num_mats = Materials.num_mats; // the number of materials on the mesh - - // a counter for the Material index spaces - DCArrayKokkos num_elems_saved_for_mat(num_mats); - - for(int mat_id=0; mat_id (num_mats); - - State.MaterialPoints = CArray (num_mats); - State.MaterialCorners = CArray (num_mats); - // zones not needed with SGH - - - // for ALE SGH, add a buffer to num_elems_for_mat, like 10% of num_elems up to num_elems. - for(int mat_id=0; mat_id corner_areas(&corner_areas_array[0], 4); - // ViewCArrayKokkos elem_node_gids(&mesh.nodes_in_elem(elem_gid, 0), 4); - - // geometry::get_area_weights2D(corner_areas, elem_gid, node_coords, elem_node_gids); - - // // loop over the corners of the element and calculate the mass - // for (size_t corner_lid = 0; corner_lid < 4; corner_lid++) { - // size_t corner_gid = mesh.corners_in_elem(elem_gid, corner_lid); - // corner_mass(corner_gid) = corner_areas(corner_lid) * MaterialPoints.den(elem_gid); // node radius is added later - // } // end for over corners - // }); - // - // - // FOR_ALL(nodes_gid=0; nodes_gid& elem_values, - double& dx, - double& dy, - double& dz, - double& orig_x, - double& orig_y, - double& orig_z, - size_t& num_elems_i, - size_t& num_elems_j, - size_t& num_elems_k, - double scale_x, - double scale_y, - double scale_z, - std::string mesh_file) -{ - std::string MESH = mesh_file; // user specified - - std::ifstream in; // FILE *in; - in.open(MESH); - - // check to see of a mesh was supplied when running the code - if (in) - { - printf("\nReading the 3D voxel mesh: "); - std::cout << MESH << std::endl; - } - else - { - std::cout << "\n\n**********************************\n\n"; - std::cout << " ERROR:\n"; - std::cout << " Voxel vtk input does not exist \n"; - std::cout << "**********************************\n\n" << std::endl; - std::exit(EXIT_FAILURE); - } // end if - - size_t i; // used for writing information to file - size_t point_id; // the global id for the point - size_t elem_id; // the global id for the elem - size_t this_point; // a local id for a point in a elem (0:7 for a Hexahedral elem) - - size_t num_points_i; - size_t num_points_j; - size_t num_points_k; - - size_t num_dims = 3; - - std::string token; - - bool found = false; - - // look for POINTS - i = 0; - while (found == false) { - std::string str; - std::string delimiter = " "; - std::getline(in, str); - std::vector v = split(str, delimiter); - - // looking for the following text: - // POINTS %d float - if (v[0] == "DIMENSIONS") - { - num_points_i = std::stoi(v[1]); - num_points_j = std::stoi(v[2]); - num_points_k = std::stoi(v[3]); - printf("Num voxel nodes read in = %zu, %zu, %zu\n", num_points_i, num_points_j, num_points_k); - - found = true; - } // end if - - if (i > 1000) - { - printf("ERROR: Failed to find POINTS \n"); - break; - } // end if - - i++; - } // end while - - found = false; - - int num_points = num_points_i * num_points_j * num_points_k; - CArray pt_coords_x(num_points_i); - CArray pt_coords_y(num_points_j); - CArray pt_coords_z(num_points_k); - - while (found == false) { - std::string str; - std::string str0; - std::string delimiter = " "; - std::getline(in, str); - std::vector v = split(str, delimiter); - - // looking for the following text: - if (v[0] == "X_COORDINATES") - { - size_t num_saved = 0; - - while (num_saved < num_points_i - 1) { - // get next line - std::getline(in, str0); - - // remove starting and trailing spaces - str = trim(str0); - std::vector v_coords = split(str, delimiter); - - // loop over the contents of the vector v_coords - for (size_t this_point = 0; this_point < v_coords.size(); this_point++) - { - pt_coords_x(num_saved) = scale_x*std::stod(v_coords[this_point]); - num_saved++; - } // end for - } // end while - - found = true; - } // end if - - if (i > 1000) - { - printf("ERROR: Failed to find X_COORDINATES \n"); - break; - } // end if - - i++; - } // end while - found = false; - - while (found == false) { - std::string str; - std::string str0; - std::string delimiter = " "; - std::getline(in, str); - std::vector v = split(str, delimiter); - - // looking for the following text: - if (v[0] == "Y_COORDINATES") - { - size_t num_saved = 0; - - while (num_saved < num_points_j - 1) { - // get next line - std::getline(in, str0); - - // remove starting and trailing spaces - str = trim(str0); - std::vector v_coords = split(str, delimiter); - - // loop over the contents of the vector v_coords - for (size_t this_point = 0; this_point < v_coords.size(); this_point++) - { - pt_coords_y(num_saved) = scale_y*std::stod(v_coords[this_point]); - num_saved++; - } // end for - } // end while - - found = true; - } // end if - - if (i > 1000) - { - printf("ERROR: Failed to find Y_COORDINATES \n"); - break; - } // end if - - i++; - } // end while - found = false; - - while (found == false) { - std::string str; - std::string str0; - std::string delimiter = " "; - std::getline(in, str); - std::vector v = split(str, delimiter); - - // looking for the following text: - if (v[0] == "Z_COORDINATES") - { - size_t num_saved = 0; - - while (num_saved < num_points_k - 1) { - // get next line - std::getline(in, str0); - - // remove starting and trailing spaces - str = trim(str0); - std::vector v_coords = split(str, delimiter); - - // loop over the contents of the vector v_coords - for (size_t this_point = 0; this_point < v_coords.size(); this_point++) - { - pt_coords_z(num_saved) = scale_z*std::stod(v_coords[this_point]); - num_saved++; - } // end for - } // end while - - found = true; - } // end if - - if (i > 1000) - { - printf("ERROR: Failed to find Z_COORDINATES \n"); - break; - } // end if - - i++; - } // end while - found = false; - - size_t num_elems; - num_elems_i = num_points_i - 1; - num_elems_j = num_points_j - 1; - num_elems_k = num_points_k - 1; - - // center to center distance between first and last elem along each edge - double Lx = (pt_coords_x(num_points_i - 2) - pt_coords_x(0)); - double Ly = (pt_coords_y(num_points_j - 2) - pt_coords_y(0)); - double Lz = (pt_coords_z(num_points_k - 2) - pt_coords_z(0)); - - // spacing between elems - dx = Lx / ((double) num_elems_i); - dy = Ly / ((double) num_elems_j); - dz = Lz / ((double) num_elems_k); - - // element mesh origin - orig_x = 0.5 * (pt_coords_x(0) + pt_coords_x(1)), - orig_y = 0.5 * (pt_coords_y(0) + pt_coords_y(1)), - orig_z = 0.5 * (pt_coords_z(0) + pt_coords_z(1)), - - // look for CELLS - i = 0; - while (found == false) { - std::string str; - std::getline(in, str); - - std::string delimiter = " "; - std::vector v = split(str, delimiter); - - // looking for the following text: - // CELLS num_elems size - if (v[0] == "CELL_DATA") - { - num_elems = std::stoi(v[1]); - printf("Num voxel elements read in %zu\n", num_elems); - - found = true; - } // end if - - if (i > 1000) - { - printf("ERROR: Failed to find CELL_DATA \n"); - break; - } // end if - - i++; - } // end while - found = false; - - // allocate memory for element voxel values - elem_values = DCArrayKokkos(num_elems); - - // reading the cell data - while (found == false) { - std::string str; - std::string str0; - - std::string delimiter = " "; - std::getline(in, str); - std::vector v = split(str, delimiter); - - // looking for the following text: - if (v[0] == "LOOKUP_TABLE") - { - size_t num_saved = 0; - - while (num_saved < num_elems - 1) { - // get next line - std::getline(in, str0); - - // remove starting and trailing spaces - str = trim(str0); - std::vector v_values = split(str, delimiter); - - // loop over the contents of the vector v_coords - for (size_t this_elem = 0; this_elem < v_values.size(); this_elem++) - { - // save integers (0 or 1) to host side - elem_values.host(num_saved) = std::stoi(v_values[this_elem]); - num_saved++; - } // end for - - // printf(" done with one row of data \n"); - } // end while - - found = true; - } // end if - - if (i > 1000) - { - printf("ERROR: Failed to find LOOKUP_TABLE data \n"); - break; - } // end if - - i++; - } // end while - found = false; - - printf("\n"); - - in.close(); -} // end routine - - -// Code from stackover flow for string delimiter parsing -std::vector split(std::string s, std::string delimiter) -{ - size_t pos_start = 0, pos_end, delim_len = delimiter.length(); - std::string token; - std::vector res; - - while ((pos_end = s.find(delimiter, pos_start)) != std::string::npos) { - token = s.substr(pos_start, pos_end - pos_start); - pos_start = pos_end + delim_len; - res.push_back(token); - } - - res.push_back(s.substr(pos_start)); - return res; -} // end of split - - -// retrieves multiple values between [ ] -std::vector extract_list(std::string str) -{ - // replace '[' with a space and ']' with a space - std::replace(str.begin(), str.end(), '[', ' '); - std::replace(str.begin(), str.end(), ']', ' '); - - std::vector str_values; - std::vector values; - - // exact the str values into a vector - str_values = split(str, ","); - - // convert the text values into double values - for (auto& word : str_values) - { - values.push_back(atof(word.c_str()) ); - } // end for - - return values; -} // end of extract_list - - -std::string ltrim(const std::string& s) -{ - size_t start = s.find_first_not_of(WHITESPACE); - return (start == std::string::npos) ? "" : s.substr(start); -} - - -std::string rtrim(const std::string& s) -{ - size_t end = s.find_last_not_of(WHITESPACE); - return (end == std::string::npos) ? "" : s.substr(0, end + 1); -} - -std::string trim(const std::string& s) -{ - return rtrim(ltrim(s)); -} - - - -///////////////////////////////////////////////////////////////////////////// -/// -/// \fn fill_geometric_region -/// -/// \brief a function to calculate whether to fill this element based on the -/// input instructions. The output is -/// = 0 then no, do not fill this element -/// = 1 then yes, fill this element -/// -/// \param mesh is the simulation mesh -/// \param node_coords is the nodal position array -/// \param voxel_elem_mat_id are the voxel values on a structured i,j,k mesh -/// \param region_fills are the instructures to paint state on the mesh -/// \param mesh_coords is the geometric center of the element or a node coordinates -/// -///////////////////////////////////////////////////////////////////////////// -KOKKOS_FUNCTION -size_t fill_geometric_region(const mesh_t& mesh, - const DCArrayKokkos& voxel_elem_mat_id, - const CArrayKokkos& region_fills, - const ViewCArrayKokkos & mesh_coords, - const double voxel_dx, - const double voxel_dy, - const double voxel_dz, - const double orig_x, - const double orig_y, - const double orig_z, - const size_t voxel_num_i, - const size_t voxel_num_j, - const size_t voxel_num_k, - const size_t f_id){ - - // default is not to fill the element - size_t fill_this = 0; - - - // for shapes with an origin (e.g., sphere and circle), accounting for the origin - double dist_x = mesh_coords(0) - region_fills(f_id).origin[0]; - double dist_y = mesh_coords(1) - region_fills(f_id).origin[1]; - double dist_z = mesh_coords(2) - region_fills(f_id).origin[2]; - - // spherical radius - double radius = sqrt(dist_x * dist_x + - dist_y * dist_y + - dist_z * dist_z); - - // cylindrical radius - double radius_cyl = sqrt(dist_x * dist_x + - dist_y * dist_y); - - - // check to see if this element should be filled - switch (region_fills(f_id).volume) { - case region::global: - { - fill_this = 1; - break; - } - case region::box: - { - - double x_lower_bound = region_fills(f_id).x1; - double x_upper_bound = region_fills(f_id).x2; - - double y_lower_bound = region_fills(f_id).y1; - double y_upper_bound = region_fills(f_id).y2; - - double z_lower_bound = region_fills(f_id).z1; - double z_upper_bound = region_fills(f_id).z2; - - - if (mesh_coords(0) >= x_lower_bound && mesh_coords(0) <= x_upper_bound && - mesh_coords(1) >= y_lower_bound && mesh_coords(1) <= y_upper_bound && - mesh_coords(2) >= z_lower_bound && mesh_coords(2) <= z_upper_bound) { - fill_this = 1; - } - break; - } - case region::cylinder: - { - if (radius_cyl >= region_fills(f_id).radius1 - && radius_cyl <= region_fills(f_id).radius2) { - fill_this = 1; - } - break; - } - case region::sphere: - { - if (radius >= region_fills(f_id).radius1 - && radius <= region_fills(f_id).radius2) { - fill_this = 1; - } - break; - } - - case region::readVoxelFile: - { - - fill_this = 0; // default is no, don't fill it - - // find the closest element in the voxel mesh to this element - double i0_real = (mesh_coords(0) - orig_x - region_fills(f_id).origin[0]) / (voxel_dx); - double j0_real = (mesh_coords(1) - orig_y - region_fills(f_id).origin[1]) / (voxel_dy); - double k0_real = (mesh_coords(2) - orig_z - region_fills(f_id).origin[2]) / (voxel_dz); - - int i0 = (int)i0_real; - int j0 = (int)j0_real; - int k0 = (int)k0_real; - - // look for the closest element in the voxel mesh - int elem_id0 = get_id_device(i0, j0, k0, voxel_num_i, voxel_num_j); - - // if voxel mesh overlaps this mesh, then fill it if =1 - if (elem_id0 < voxel_elem_mat_id.size() && elem_id0 >= 0 && - i0 >= 0 && j0 >= 0 && k0 >= 0 && - i0 < voxel_num_i && j0 < voxel_num_j && k0 < voxel_num_k) { - // voxel mesh elem values = 0 or 1 - fill_this = voxel_elem_mat_id(elem_id0); // values from file - - } // end if - - break; - - } // end case - case region::no_volume: - { - fill_this = 0; // default is no, don't fill it - - break; - } - default: - { - fill_this = 0; // default is no, don't fill it - - break; - } - - } // end of switch - - - return fill_this; - -} // end function - - - -///////////////////////////////////////////////////////////////////////////// -/// -/// \fn paint_gauss_den_sie -/// -/// \brief a function to paint den and sie on the Gauss points of the mesh -/// -/// \param Materials holds the material models and global parameters -/// \param mesh is the simulation mesh -/// \param node_coords are the node coordinates of the element -/// \param GaussPoint_den is density at the GaussPoints on the mesh -/// \param GaussPoint_sie is specific internal energy at the GaussPoints on the mesh -/// \param elem_mat_id is the material id in an element -/// \param region_fills are the instructures to paint state on the mesh -/// \param elem_coords is the geometric center of the element -/// \param elem_gid is the element global mesh index -/// \param f_id is fill instruction -/// -///////////////////////////////////////////////////////////////////////////// -KOKKOS_FUNCTION -void paint_gauss_den_sie(const Material_t& Materials, - const mesh_t& mesh, - const DCArrayKokkos & node_coords, - const DCArrayKokkos & GaussPoint_den, - const DCArrayKokkos & GaussPoint_sie, - const DCArrayKokkos & elem_mat_id, - const CArrayKokkos& region_fills, - const ViewCArrayKokkos elem_coords, - const double elem_gid, - const size_t f_id){ - - // the material id - size_t mat_id = region_fills(f_id).material_id; - - // --- material_id in elem --- - elem_mat_id(elem_gid) = mat_id; - - // loop over the Gauss points in the element - { - - const size_t gauss_gid = elem_gid; // 1 gauss point per element - - // add test problem state setups here - if (region_fills(f_id).velocity == init_conds::tg_vortex) { - - GaussPoint_den(gauss_gid) = 1.0; - - // note: elem_coords are the gauss_coords, higher quadrature requires ref elem data - double pres = 0.25 * (cos(2.0 * PI * elem_coords(0)) + - cos(2.0 * PI * elem_coords(1)) ) + 1.0; - - // p = rho*ie*(gamma - 1) - // makes sure index 0 matches the gamma in the gamma law function - double gamma = Materials.eos_global_vars(mat_id,0); - GaussPoint_sie(gauss_gid) = - pres / (GaussPoint_den(gauss_gid) * (gamma - 1.0)); - } // end - // add user initialization here - else{ - - // --- density --- - GaussPoint_den(gauss_gid) = region_fills(f_id).den; - - // --- specific internal energy --- - GaussPoint_sie(gauss_gid) = region_fills(f_id).sie; - - } // end if - - } // end loop over gauss points in element' - - // done setting the element state - -} // end function - - -///////////////////////////////////////////////////////////////////////////// -/// -/// \fn paint_node_vel -/// -/// \brief a function to paint a velocity field on the nodes of the mesh -/// -/// \param mesh is the simulation mesh -/// \param node_vel is the nodal velocity array -/// \param node_coords are the coordinates of the nodes -/// \param elem_gid is the element global mesh index -/// \param f_id is fill instruction -/// \param rk_num_bins is time integration storage level -/// -///////////////////////////////////////////////////////////////////////////// -KOKKOS_FUNCTION -void paint_node_vel(const CArrayKokkos& region_fills, - const DCArrayKokkos& node_vel, - const DCArrayKokkos& node_coords, - const double node_gid, - const double num_dims, - const size_t f_id, - const size_t rk_num_bins){ - - // save velocity at all rk_levels - for(size_t rk_level=0; rk_level 1.0e-14) { - dir[dim] /= (radius_val); - } - else{ - dir[dim] = 0.0; - } - } // end for - - node_vel(rk_level, node_gid, 0) = region_fills(f_id).speed * dir[0]; - node_vel(rk_level, node_gid, 1) = region_fills(f_id).speed * dir[1]; - if (num_dims == 3) { - node_vel(rk_level, node_gid, 2) = 0.0; - } - - break; - } - case init_conds::spherical: - { - // Setting up spherical - double dir[3]; - dir[0] = 0.0; - dir[1] = 0.0; - dir[2] = 0.0; - double radius_val = 0.0; - - for (int dim = 0; dim < 3; dim++) { - dir[dim] = node_coords(rk_level, node_gid, dim); - radius_val += node_coords(rk_level, node_gid, dim) * node_coords(rk_level, node_gid, dim); - } // end for - radius_val = sqrt(radius_val); - - for (int dim = 0; dim < 3; dim++) { - if (radius_val > 1.0e-14) { - dir[dim] /= (radius_val); - } - else{ - dir[dim] = 0.0; - } - } // end for - - node_vel(rk_level, node_gid, 0) = region_fills(f_id).speed * dir[0]; - node_vel(rk_level, node_gid, 1) = region_fills(f_id).speed * dir[1]; - if (num_dims == 3) { - node_vel(rk_level, node_gid, 2) = region_fills(f_id).speed * dir[2]; - } - - break; - } - case init_conds::radial_linear: - { - printf("**** Radial_linear initial conditions not yet supported ****\n"); - break; - } - case init_conds::spherical_linear: - { - printf("**** spherical_linear initial conditions not yet supported ****\n"); - break; - } - case init_conds::tg_vortex: - { - node_vel(rk_level, node_gid, 0) = sin(PI * node_coords(rk_level, node_gid, 0)) * - cos(PI * node_coords(rk_level, node_gid, 1)); - node_vel(rk_level, node_gid, 1) = -1.0 * cos(PI * node_coords(rk_level, node_gid, 0)) * - sin(PI * node_coords(rk_level, node_gid, 1)); - if (num_dims == 3) { - node_vel(rk_level, node_gid, 2) = 0.0; - } - - break; - } - - case init_conds::no_ic_vel: - { - // no velocity - node_vel(rk_level, node_gid, 0) = 0.0; - node_vel(rk_level, node_gid, 1) = 0.0; - if (num_dims == 3) { - node_vel(rk_level, node_gid, 2) = 0.0; - } - - break; - } - default: - { - // no velocity - node_vel(rk_level, node_gid, 0) = 0.0; - node_vel(rk_level, node_gid, 1) = 0.0; - if (num_dims == 3) { - node_vel(rk_level, node_gid, 2) = 0.0; - } - - break; - } - } // end of switch - - } // end loop over rk_num_bins - - - // done setting the velocity -} - - -///////////////////////////////////////////////////////////////////////////// -/// -/// \fn fill_regions_sgh -/// -/// \brief a function to paint den, sie, vel, and mat_ids on the mesh -/// The arrays populated (on host and device) are: -/// elem_mat_id -/// GaussPoint_den -/// GaussPoint_sie -/// node_vel -/// -/// \param Materials holds the material models and global parameters -/// \param mesh is the simulation mesh -/// \param node_coords are the coordinates of the nodes -/// \param node_vel is the nodal velocity array -/// \param region_fills are the instructures to paint state on the mesh -/// \param voxel_elem_mat_id are the voxel values on a structured i,j,k mesh -/// \param GaussPoint_den is density at the GaussPoints on the mesh -/// \param GaussPoint_sie is specific internal energy at the GaussPoints on the mesh -/// \param elem_mat_id is the material id in an element -/// \param num_fills is number of fill instruction -/// \param num_elems is number of elements on the mesh -/// \param num_nodes is number of nodes on the mesh -/// \param rk_num_bins is number of time integration storage bins -/// -///////////////////////////////////////////////////////////////////////////// -void fill_regions_sgh(const Material_t& Materials, - const mesh_t& mesh, - const DCArrayKokkos & node_coords, - DCArrayKokkos & node_vel, - DCArrayKokkos & GaussPoint_den, - DCArrayKokkos & GaussPoint_sie, - DCArrayKokkos & elem_mat_id, - DCArrayKokkos & voxel_elem_mat_id, - const CArrayKokkos & region_fills, - const CArray & region_fills_host, - const size_t num_fills, - const size_t num_elems, - const size_t num_nodes, - const size_t rk_num_bins){ - - - double voxel_dx, voxel_dy, voxel_dz; // voxel mesh resolution, set by input file - double orig_x, orig_y, orig_z; // origin of voxel elem center mesh, set by input file - size_t voxel_num_i, voxel_num_j, voxel_num_k; // num voxel elements in each direction, set by input file - - - // --------------------------------------------- - // copy to host, enum to read a voxel file - // --------------------------------------------- - - DCArrayKokkos read_voxel_file(num_fills); // check to see if readVoxelFile - - FOR_ALL(f_id, 0, num_fills, { - if (region_fills(f_id).volume == region::readVoxelFile) - { - read_voxel_file(f_id) = region::readVoxelFile; // read the voxel file - } - // add other mesh voxel files - else - { - read_voxel_file(f_id) = 0; - } - }); // end parallel for - read_voxel_file.update_host(); // copy to CPU if code is to read a file - Kokkos::fence(); - // --------------------------------------------- - - - // loop over the fill instructions - for (size_t f_id = 0; f_id < num_fills; f_id++) { - - // ---- - // voxel mesh setup - if (read_voxel_file.host(f_id) == region::readVoxelFile) - { - // read voxel mesh to get the values in the fcn interface - user_voxel_init(voxel_elem_mat_id, - voxel_dx, - voxel_dy, - voxel_dz, - orig_x, - orig_y, - orig_z, - voxel_num_i, - voxel_num_j, - voxel_num_k, - region_fills_host(f_id).scale_x, - region_fills_host(f_id).scale_y, - region_fills_host(f_id).scale_z, - region_fills_host(f_id).file_path); - - // copy values read from file to device - voxel_elem_mat_id.update_device(); - } // endif - // add else if for other mesh reads including STL-2-voxel - - - // parallel loop over elements in mesh - FOR_ALL(elem_gid, 0, num_elems, { - - // calculate the coordinates and radius of the element - double elem_coords_1D[3]; // note:initialization with a list won't work - ViewCArrayKokkos elem_coords(&elem_coords_1D[0], 3); - elem_coords(0) = 0.0; - elem_coords(1) = 0.0; - elem_coords(2) = 0.0; - - // get the coordinates of the element center (using rk_level=1 or node coords) - for (int node_lid = 0; node_lid < mesh.num_nodes_in_elem; node_lid++) { - elem_coords(0) += node_coords(1, mesh.nodes_in_elem(elem_gid, node_lid), 0); - elem_coords(1) += node_coords(1, mesh.nodes_in_elem(elem_gid, node_lid), 1); - if (mesh.num_dims == 3) { - elem_coords(2) += node_coords(1, mesh.nodes_in_elem(elem_gid, node_lid), 2); - } - else{ - elem_coords(2) = 0.0; - } - } // end loop over nodes in element - elem_coords(0) = (elem_coords(0) / mesh.num_nodes_in_elem); - elem_coords(1) = (elem_coords(1) / mesh.num_nodes_in_elem); - elem_coords(2) = (elem_coords(2) / mesh.num_nodes_in_elem); - - - // calc if we are to fill this element - size_t fill_this = fill_geometric_region(mesh, - voxel_elem_mat_id, - region_fills, - elem_coords, - voxel_dx, - voxel_dy, - voxel_dz, - orig_x, - orig_y, - orig_z, - voxel_num_i, - voxel_num_j, - voxel_num_k, - f_id); - - - // paint the material state on the element if fill_this=1 - if (fill_this == 1) { - - // default sgh paint - paint_gauss_den_sie(Materials, - mesh, - node_coords, - GaussPoint_den, - GaussPoint_sie, - elem_mat_id, - region_fills, - elem_coords, - elem_gid, - f_id); - - // add user defined paint here - // user_defined_sgh_state(); - - - // technically, not thread safe, but making it a separate loop created bad fill behavior - // loop over the nodes of this element and apply velocity - for (size_t node_lid = 0; node_lid < mesh.num_nodes_in_elem; node_lid++) { - - // get the mesh node index - size_t node_gid = mesh.nodes_in_elem(elem_gid, node_lid); - - // default sgh paint - paint_node_vel(region_fills, - node_vel, - node_coords, - node_gid, - mesh.num_dims, - f_id, - rk_num_bins); - - // add user defined paint here - // user_defined_vel_state(); - - } // end loop over the nodes in elem - - } // end if fill this - - }); // end FOR_ALL node loop - Kokkos::fence(); - - } // end for loop over fills - - - elem_mat_id.update_host(); - GaussPoint_den.update_host(); - GaussPoint_sie.update_host(); - node_vel.update_host(); - - Kokkos::fence(); - -} // end SGH fill regions - - -///////////////////////////////////////////////////////////////////////////// -/// -/// \fn init_press_sspd_stress -/// -/// \brief a function to initialize pressure, sound speed and stress -/// -/// \param Materials holds the material models and global parameters -/// \param mesh is the simulation mesh -/// \param GaussPoint_den is density at the GaussPoints on the mesh -/// \param GaussPoint_pres is pressure at the GaussPoints on the mesh -/// \param GaussPoint_stress is stress at the GaussPoints on the mesh -/// \param GaussPoint_sspd is sound speed at the GaussPoints on the mesh -/// \param GaussPoint_sie is specific internal energy at the GaussPoints on the mesh -/// \param GaussPoint_statev are the state variables at the GaussPoints on the mesh -/// \param num_mat_pts is the number of material points for mat_id -/// \param mat_id is material id -/// \param rk_num_bins is number of time integration storage bins -/// -///////////////////////////////////////////////////////////////////////////// -void init_press_sspd_stress(const Material_t& Materials, - const mesh_t& mesh, - const DCArrayKokkos& MaterialPoints_den, - const DCArrayKokkos& MaterialPoints_pres, - const DCArrayKokkos& MaterialPoints_stress, - const DCArrayKokkos& MaterialPoints_sspd, - const DCArrayKokkos& MaterialPoints_sie, - const DCArrayKokkos& MaterialPoints_statev, - const size_t rk_num_bins, - const size_t num_mat_pts, - const size_t mat_id){ - - - // ------- - // the call to the model initialization goes here - // ------- - - // --- pressure and sound speed --- - // loop over the material points - FOR_ALL(mat_point_lid, 0, num_mat_pts, { - - // --- Pressure --- - Materials.MaterialFunctions(mat_id).calc_pressure( - MaterialPoints_pres, - MaterialPoints_stress, - mat_point_lid, - mat_id, - MaterialPoints_statev, - MaterialPoints_sspd, - MaterialPoints_den(mat_point_lid), - MaterialPoints_sie(0, mat_point_lid), - Materials.eos_global_vars); - - // --- Sound Speed --- - Materials.MaterialFunctions(mat_id).calc_sound_speed( - MaterialPoints_pres, - MaterialPoints_stress, - mat_point_lid, - mat_id, - MaterialPoints_statev, - MaterialPoints_sspd, - MaterialPoints_den(mat_point_lid), - MaterialPoints_sie(0, mat_point_lid), - Materials.eos_global_vars); - }); // end pressure and sound speed - - - // --- stress tensor --- - for(size_t rk_level=0; rk_level& node_mass, - const DCArrayKokkos& corner_mass){ - - // calculate the nodal mass - FOR_ALL(node_gid, 0, mesh.num_nodes, { - node_mass(node_gid) = 0.0; - }); // end parallel over nodes - - FOR_ALL(corner_gid, 0, mesh.num_corners, { - corner_mass(corner_gid) = 0.0; - }); // end parallel over corners - -} // end setting masses equal to zero - - - - -///////////////////////////////////////////////////////////////////////////// -/// -/// \fn calc_corner_mass -/// -/// \brief a function to initialize pressure, sound speed and stress -/// -/// \param Materials holds the material models and global parameters -/// \param mesh is the simulation mesh -/// \param node_coords are the nodal coordinates of the mesh -/// \param node_mass is mass of the node -/// \param corner_mass is corner mass -/// \param MaterialPoints_mass is the mass at the material point for mat_id -/// \param num_mat_elems is the number of material elements for mat_id -/// -///////////////////////////////////////////////////////////////////////////// -void calc_corner_mass(const Material_t& Materials, - const mesh_t& mesh, - const DCArrayKokkos& node_coords, - const DCArrayKokkos& node_mass, - const DCArrayKokkos& corner_mass, - const DCArrayKokkos& MaterialPoints_mass, - const DCArrayKokkos& MaterialToMeshMaps_elem, - const size_t num_mat_elems){ - - - FOR_ALL(mat_elem_lid, 0, num_mat_elems, { - - // get elem gid - size_t elem_gid = MaterialToMeshMaps_elem(mat_elem_lid); - - // calculate the fraction of matpt mass to scatter to each corner - double corner_frac = 1.0/((double)mesh.num_nodes_in_elem); // =1/8 - - // partion the mass to the corners - for(size_t corner_lid=0; corner_lid& node_coords, - const DCArrayKokkos& node_mass, - const DCArrayKokkos& corner_mass){ - - - FOR_ALL(node_gid, 0, mesh.num_nodes, { - for (size_t corner_lid = 0; corner_lid < mesh.num_corners_in_node(node_gid); corner_lid++) { - size_t corner_gid = mesh.corners_in_node(node_gid, corner_lid); - node_mass(node_gid) += corner_mass(corner_gid); - } // end for elem_lid - }); // end parallel loop over nodes in the mesh -} // end function calculate SGH mass \ No newline at end of file diff --git a/single-node-refactor/src/solver.h b/single-node-refactor/src/solver.h index cb58f36da..6ebbcf0a0 100644 --- a/single-node-refactor/src/solver.h +++ b/single-node-refactor/src/solver.h @@ -43,6 +43,7 @@ #include "material.h" #include "region.h" #include "boundary_conditions.h" +#include "dynamic_options.h" struct SimulationParameters_t; @@ -56,14 +57,15 @@ class Solver virtual void initialize(SimulationParameters_t& SimulationParamaters, Material_t& Materials, + mesh_t& mesh, BoundaryCondition_t& Boundary, State_t& State) const = 0; virtual void setup(SimulationParameters_t& SimulationParamaters, Material_t& Materials, - BoundaryCondition_t& Boundary, mesh_t& mesh, - State_t& State) const = 0; + BoundaryCondition_t& Boundary, + State_t& State) = 0; virtual void execute(SimulationParameters_t& SimulationParamaters, Material_t& Materials, From e4b2d3438657ad0257342d97a11bb8f6b34c0e51 Mon Sep 17 00:00:00 2001 From: Nathaniel Morgan Date: Mon, 5 Aug 2024 08:03:56 -0600 Subject: [PATCH 103/233] added sgh_setup and region_fill files --- .../src/Solvers/SGH_solver/src/sgh_setup.cpp | 564 +++++++++++++++++ single-node-refactor/src/common/region_fill.h | 592 ++++++++++++++++++ 2 files changed, 1156 insertions(+) create mode 100644 single-node-refactor/src/Solvers/SGH_solver/src/sgh_setup.cpp create mode 100644 single-node-refactor/src/common/region_fill.h diff --git a/single-node-refactor/src/Solvers/SGH_solver/src/sgh_setup.cpp b/single-node-refactor/src/Solvers/SGH_solver/src/sgh_setup.cpp new file mode 100644 index 000000000..c6adf8da3 --- /dev/null +++ b/single-node-refactor/src/Solvers/SGH_solver/src/sgh_setup.cpp @@ -0,0 +1,564 @@ +/********************************************************************************************** +© 2020. Triad National Security, LLC. All rights reserved. +This program was produced under U.S. Government contract 89233218CNA000001 for Los Alamos +National Laboratory (LANL), which is operated by Triad National Security, LLC for the U.S. +Department of Energy/National Nuclear Security Administration. All rights in the program are +reserved by Triad National Security, LLC, and the U.S. Department of Energy/National Nuclear +Security Administration. The Government is granted for itself and others acting on its behalf a +nonexclusive, paid-up, irrevocable worldwide license in this material to reproduce, prepare +derivative works, distribute copies to the public, perform publicly and display publicly, and +to permit others to do so. +This program is open source under the BSD-3 License. +Redistribution and use in source and binary forms, with or without modification, are permitted +provided that the following conditions are met: +1. Redistributions of source code must retain the above copyright notice, this list of +conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, this list of +conditions and the following disclaimer in the documentation and/or other materials +provided with the distribution. +3. Neither the name of the copyright holder nor the names of its contributors may be used +to endorse or promote products derived from this software without specific prior +written permission. +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +**********************************************************************************************/ + +#include "sgh_solver.h" +#include "solver.h" +#include "geometry_new.h" +#include "matar.h" +#include "simulation_parameters.h" +#include "boundary_conditions.h" +#include "material.h" +#include "mesh.h" +#include "state.h" +#include "io_utils.h" +#include "dynamic_options.h" +#include "region_fill.h" + + +///////////////////////////////////////////////////////////////////////////// +/// +/// \fn setup the SGH method +/// +/// \brief Allocate state, setup models, and fill mesh regions per the YAML input +/// +///////////////////////////////////////////////////////////////////////////// +void SGH::setup(SimulationParameters_t& SimulationParamaters, + Material_t& Materials, + mesh_t& mesh, + BoundaryCondition_t& Boundary, + State_t& State) +{ + + size_t num_fills = SimulationParamaters.region_fills.size(); + printf("Num Fills's = %zu\n", num_fills); + + // the number of elems and nodes in the mesh + const size_t num_elems = mesh.num_elems; + const size_t num_nodes = mesh.num_nodes; + + const size_t rk_num_bins = SimulationParamaters.dynamic_options.rk_num_bins; + + + // create temporary state fields + // Painting routine requires only 1 material per GaussPoint + DCArrayKokkos GaussPoint_den(num_elems); + DCArrayKokkos GaussPoint_sie(num_elems); + DCArrayKokkos elem_mat_id(num_elems); // the mat_id in the elem + + DCArrayKokkos voxel_elem_mat_id; // 1 or 0 if material exist, or it is the material_id + + + + // --------------------------------------------- + // fill den, sie, and velocity on the mesh + // --------------------------------------------- + fill_regions_sgh(Materials, + mesh, + State.node.coords, + State.node.vel, + GaussPoint_den, + GaussPoint_sie, + elem_mat_id, + voxel_elem_mat_id, + SimulationParamaters.region_fills, + SimulationParamaters.region_fills_host, + num_fills, + num_elems, + num_nodes, + rk_num_bins); + + + // note: the device and host side are updated in the above function + // --------------------------------------------- + + + // ---------------------------------------------------------------- + // Walk over the mesh and find dimensions of material storage arrays + // ---------------------------------------------------------------- + const size_t num_mats = Materials.num_mats; // the number of materials on the mesh + + // a counter for the Material index spaces + DCArrayKokkos num_elems_saved_for_mat(num_mats); + + for(int mat_id=0; mat_id (num_mats); + + State.MaterialPoints = CArray (num_mats); + State.MaterialCorners = CArray (num_mats); + // zones not needed with SGH + + + // for ALE SGH, add a buffer to num_elems_for_mat, like 10% of num_elems up to num_elems. + for(int mat_id=0; mat_id corner_areas(&corner_areas_array[0], 4); + // ViewCArrayKokkos elem_node_gids(&mesh.nodes_in_elem(elem_gid, 0), 4); + + // geometry::get_area_weights2D(corner_areas, elem_gid, node_coords, elem_node_gids); + + // // loop over the corners of the element and calculate the mass + // for (size_t corner_lid = 0; corner_lid < 4; corner_lid++) { + // size_t corner_gid = mesh.corners_in_elem(elem_gid, corner_lid); + // corner_mass(corner_gid) = corner_areas(corner_lid) * MaterialPoints.den(elem_gid); // node radius is added later + // } // end for over corners + // }); + // + // + // FOR_ALL(nodes_gid=0; nodes_gid& node_coords, + DCArrayKokkos & node_vel, + DCArrayKokkos & GaussPoint_den, + DCArrayKokkos & GaussPoint_sie, + DCArrayKokkos & elem_mat_id, + DCArrayKokkos & voxel_elem_mat_id, + const CArrayKokkos & region_fills, + const CArray & region_fills_host, + const size_t num_fills, + const size_t num_elems, + const size_t num_nodes, + const size_t rk_num_bins){ + + + double voxel_dx, voxel_dy, voxel_dz; // voxel mesh resolution, set by input file + double orig_x, orig_y, orig_z; // origin of voxel elem center mesh, set by input file + size_t voxel_num_i, voxel_num_j, voxel_num_k; // num voxel elements in each direction, set by input file + + + // --------------------------------------------- + // copy to host, enum to read a voxel file + // --------------------------------------------- + + DCArrayKokkos read_voxel_file(num_fills); // check to see if readVoxelFile + + FOR_ALL(f_id, 0, num_fills, { + if (region_fills(f_id).volume == region::readVoxelFile) + { + read_voxel_file(f_id) = region::readVoxelFile; // read the voxel file + } + // add other mesh voxel files + else + { + read_voxel_file(f_id) = 0; + } + }); // end parallel for + read_voxel_file.update_host(); // copy to CPU if code is to read a file + Kokkos::fence(); + // --------------------------------------------- + + + // loop over the fill instructions + for (size_t f_id = 0; f_id < num_fills; f_id++) { + + // ---- + // voxel mesh setup + if (read_voxel_file.host(f_id) == region::readVoxelFile) + { + // read voxel mesh to get the values in the fcn interface + user_voxel_init(voxel_elem_mat_id, + voxel_dx, + voxel_dy, + voxel_dz, + orig_x, + orig_y, + orig_z, + voxel_num_i, + voxel_num_j, + voxel_num_k, + region_fills_host(f_id).scale_x, + region_fills_host(f_id).scale_y, + region_fills_host(f_id).scale_z, + region_fills_host(f_id).file_path); + + // copy values read from file to device + voxel_elem_mat_id.update_device(); + } // endif + // add else if for other mesh reads including STL-2-voxel + + + // parallel loop over elements in mesh + FOR_ALL(elem_gid, 0, num_elems, { + + // calculate the coordinates and radius of the element + double elem_coords_1D[3]; // note:initialization with a list won't work + ViewCArrayKokkos elem_coords(&elem_coords_1D[0], 3); + elem_coords(0) = 0.0; + elem_coords(1) = 0.0; + elem_coords(2) = 0.0; + + // get the coordinates of the element center (using rk_level=1 or node coords) + for (int node_lid = 0; node_lid < mesh.num_nodes_in_elem; node_lid++) { + elem_coords(0) += node_coords(1, mesh.nodes_in_elem(elem_gid, node_lid), 0); + elem_coords(1) += node_coords(1, mesh.nodes_in_elem(elem_gid, node_lid), 1); + if (mesh.num_dims == 3) { + elem_coords(2) += node_coords(1, mesh.nodes_in_elem(elem_gid, node_lid), 2); + } + else{ + elem_coords(2) = 0.0; + } + } // end loop over nodes in element + elem_coords(0) = (elem_coords(0) / mesh.num_nodes_in_elem); + elem_coords(1) = (elem_coords(1) / mesh.num_nodes_in_elem); + elem_coords(2) = (elem_coords(2) / mesh.num_nodes_in_elem); + + + // calc if we are to fill this element + size_t fill_this = fill_geometric_region(mesh, + voxel_elem_mat_id, + region_fills, + elem_coords, + voxel_dx, + voxel_dy, + voxel_dz, + orig_x, + orig_y, + orig_z, + voxel_num_i, + voxel_num_j, + voxel_num_k, + f_id); + + + // paint the material state on the element if fill_this=1 + if (fill_this == 1) { + + // default sgh paint + paint_gauss_den_sie(Materials, + mesh, + node_coords, + GaussPoint_den, + GaussPoint_sie, + elem_mat_id, + region_fills, + elem_coords, + elem_gid, + f_id); + + // add user defined paint here + // user_defined_sgh_state(); + + + // technically, not thread safe, but making it a separate loop created bad fill behavior + // loop over the nodes of this element and apply velocity + for (size_t node_lid = 0; node_lid < mesh.num_nodes_in_elem; node_lid++) { + + // get the mesh node index + size_t node_gid = mesh.nodes_in_elem(elem_gid, node_lid); + + // default sgh paint + paint_node_vel(region_fills, + node_vel, + node_coords, + node_gid, + mesh.num_dims, + f_id, + rk_num_bins); + + // add user defined paint here + // user_defined_vel_state(); + + } // end loop over the nodes in elem + + } // end if fill this + + }); // end FOR_ALL node loop + Kokkos::fence(); + + } // end for loop over fills + + + elem_mat_id.update_host(); + GaussPoint_den.update_host(); + GaussPoint_sie.update_host(); + node_vel.update_host(); + + Kokkos::fence(); + +} // end SGH fill regions + + + + +///////////////////////////////////////////////////////////////////////////// +/// +/// \fn init_corner_node_masses_zero +/// +/// \brief a function to initialize corner and node masses to zero +/// +/// \param mesh is the simulation mesh +/// \param node_mass is the node mass +/// \param corner_mass is the corner mass +/// +///////////////////////////////////////////////////////////////////////////// +void init_corner_node_masses_zero(const mesh_t& mesh, + const DCArrayKokkos& node_mass, + const DCArrayKokkos& corner_mass){ + + // calculate the nodal mass + FOR_ALL(node_gid, 0, mesh.num_nodes, { + node_mass(node_gid) = 0.0; + }); // end parallel over nodes + + FOR_ALL(corner_gid, 0, mesh.num_corners, { + corner_mass(corner_gid) = 0.0; + }); // end parallel over corners + +} // end setting masses equal to zero + + + + diff --git a/single-node-refactor/src/common/region_fill.h b/single-node-refactor/src/common/region_fill.h new file mode 100644 index 000000000..1c1826c1d --- /dev/null +++ b/single-node-refactor/src/common/region_fill.h @@ -0,0 +1,592 @@ +/********************************************************************************************** +� 2020. Triad National Security, LLC. All rights reserved. +This program was produced under U.S. Government contract 89233218CNA000001 for Los Alamos +National Laboratory (LANL), which is operated by Triad National Security, LLC for the U.S. +Department of Energy/National Nuclear Security Administration. All rights in the program are +reserved by Triad National Security, LLC, and the U.S. Department of Energy/National Nuclear +Security Administration. The Government is granted for itself and others acting on its behalf a +nonexclusive, paid-up, irrevocable worldwide license in this material to reproduce, prepare +derivative works, distribute copies to the public, perform publicly and display publicly, and +to permit others to do so. +This program is open source under the BSD-3 License. +Redistribution and use in source and binary forms, with or without modification, are permitted +provided that the following conditions are met: +1. Redistributions of source code must retain the above copyright notice, this list of +conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, this list of +conditions and the following disclaimer in the documentation and/or other materials +provided with the distribution. +3. Neither the name of the copyright holder nor the names of its contributors may be used +to endorse or promote products derived from this software without specific prior +written permission. +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +**********************************************************************************************/ +#ifndef REGION_FILL_H +#define REGION_FILL_H + +#include "matar.h" +#include "mesh.h" +#include "material.h" +#include "state.h" +#include "simulation_parameters.h" +#include "region.h" + +#include + + + + +///////////////////////////////////////////////////////////////////////////// +/// +/// \fn fill_geometric_region +/// +/// \brief a function to calculate whether to fill this element based on the +/// input instructions. The output is +/// = 0 then no, do not fill this element +/// = 1 then yes, fill this element +/// +/// \param mesh is the simulation mesh +/// \param node_coords is the nodal position array +/// \param voxel_elem_mat_id are the voxel values on a structured i,j,k mesh +/// \param region_fills are the instructures to paint state on the mesh +/// \param mesh_coords is the geometric center of the element or a node coordinates +/// +///////////////////////////////////////////////////////////////////////////// +KOKKOS_FUNCTION +size_t fill_geometric_region(const mesh_t& mesh, + const DCArrayKokkos& voxel_elem_mat_id, + const CArrayKokkos& region_fills, + const ViewCArrayKokkos & mesh_coords, + const double voxel_dx, + const double voxel_dy, + const double voxel_dz, + const double orig_x, + const double orig_y, + const double orig_z, + const size_t voxel_num_i, + const size_t voxel_num_j, + const size_t voxel_num_k, + const size_t f_id){ + + // default is not to fill the element + size_t fill_this = 0; + + + // for shapes with an origin (e.g., sphere and circle), accounting for the origin + double dist_x = mesh_coords(0) - region_fills(f_id).origin[0]; + double dist_y = mesh_coords(1) - region_fills(f_id).origin[1]; + double dist_z = mesh_coords(2) - region_fills(f_id).origin[2]; + + // spherical radius + double radius = sqrt(dist_x * dist_x + + dist_y * dist_y + + dist_z * dist_z); + + // cylindrical radius + double radius_cyl = sqrt(dist_x * dist_x + + dist_y * dist_y); + + + // check to see if this element should be filled + switch (region_fills(f_id).volume) { + case region::global: + { + fill_this = 1; + break; + } + case region::box: + { + + double x_lower_bound = region_fills(f_id).x1; + double x_upper_bound = region_fills(f_id).x2; + + double y_lower_bound = region_fills(f_id).y1; + double y_upper_bound = region_fills(f_id).y2; + + double z_lower_bound = region_fills(f_id).z1; + double z_upper_bound = region_fills(f_id).z2; + + + if (mesh_coords(0) >= x_lower_bound && mesh_coords(0) <= x_upper_bound && + mesh_coords(1) >= y_lower_bound && mesh_coords(1) <= y_upper_bound && + mesh_coords(2) >= z_lower_bound && mesh_coords(2) <= z_upper_bound) { + fill_this = 1; + } + break; + } + case region::cylinder: + { + if (radius_cyl >= region_fills(f_id).radius1 + && radius_cyl <= region_fills(f_id).radius2) { + fill_this = 1; + } + break; + } + case region::sphere: + { + if (radius >= region_fills(f_id).radius1 + && radius <= region_fills(f_id).radius2) { + fill_this = 1; + } + break; + } + + case region::readVoxelFile: + { + + fill_this = 0; // default is no, don't fill it + + // find the closest element in the voxel mesh to this element + double i0_real = (mesh_coords(0) - orig_x - region_fills(f_id).origin[0]) / (voxel_dx); + double j0_real = (mesh_coords(1) - orig_y - region_fills(f_id).origin[1]) / (voxel_dy); + double k0_real = (mesh_coords(2) - orig_z - region_fills(f_id).origin[2]) / (voxel_dz); + + int i0 = (int)i0_real; + int j0 = (int)j0_real; + int k0 = (int)k0_real; + + // look for the closest element in the voxel mesh + int elem_id0 = get_id_device(i0, j0, k0, voxel_num_i, voxel_num_j); + + // if voxel mesh overlaps this mesh, then fill it if =1 + if (elem_id0 < voxel_elem_mat_id.size() && elem_id0 >= 0 && + i0 >= 0 && j0 >= 0 && k0 >= 0 && + i0 < voxel_num_i && j0 < voxel_num_j && k0 < voxel_num_k) { + // voxel mesh elem values = 0 or 1 + fill_this = voxel_elem_mat_id(elem_id0); // values from file + + } // end if + + break; + + } // end case + case region::no_volume: + { + fill_this = 0; // default is no, don't fill it + + break; + } + default: + { + fill_this = 0; // default is no, don't fill it + + break; + } + + } // end of switch + + + return fill_this; + +} // end function + + + +///////////////////////////////////////////////////////////////////////////// +/// +/// \fn paint_gauss_den_sie +/// +/// \brief a function to paint den and sie on the Gauss points of the mesh +/// +/// \param Materials holds the material models and global parameters +/// \param mesh is the simulation mesh +/// \param node_coords are the node coordinates of the element +/// \param GaussPoint_den is density at the GaussPoints on the mesh +/// \param GaussPoint_sie is specific internal energy at the GaussPoints on the mesh +/// \param elem_mat_id is the material id in an element +/// \param region_fills are the instructures to paint state on the mesh +/// \param elem_coords is the geometric center of the element +/// \param elem_gid is the element global mesh index +/// \param f_id is fill instruction +/// +///////////////////////////////////////////////////////////////////////////// +KOKKOS_FUNCTION +void paint_gauss_den_sie(const Material_t& Materials, + const mesh_t& mesh, + const DCArrayKokkos & node_coords, + const DCArrayKokkos & GaussPoint_den, + const DCArrayKokkos & GaussPoint_sie, + const DCArrayKokkos & elem_mat_id, + const CArrayKokkos& region_fills, + const ViewCArrayKokkos elem_coords, + const double elem_gid, + const size_t f_id){ + + // the material id + size_t mat_id = region_fills(f_id).material_id; + + // --- material_id in elem --- + elem_mat_id(elem_gid) = mat_id; + + // loop over the Gauss points in the element + { + + const size_t gauss_gid = elem_gid; // 1 gauss point per element + + // add test problem state setups here + if (region_fills(f_id).velocity == init_conds::tg_vortex) { + + GaussPoint_den(gauss_gid) = 1.0; + + // note: elem_coords are the gauss_coords, higher quadrature requires ref elem data + double pres = 0.25 * (cos(2.0 * PI * elem_coords(0)) + + cos(2.0 * PI * elem_coords(1)) ) + 1.0; + + // p = rho*ie*(gamma - 1) + // makes sure index 0 matches the gamma in the gamma law function + double gamma = Materials.eos_global_vars(mat_id,0); + GaussPoint_sie(gauss_gid) = + pres / (GaussPoint_den(gauss_gid) * (gamma - 1.0)); + } // end + // add user initialization here + else{ + + // --- density --- + GaussPoint_den(gauss_gid) = region_fills(f_id).den; + + // --- specific internal energy --- + GaussPoint_sie(gauss_gid) = region_fills(f_id).sie; + + } // end if + + } // end loop over gauss points in element' + + // done setting the element state + +} // end function + + +///////////////////////////////////////////////////////////////////////////// +/// +/// \fn paint_node_vel +/// +/// \brief a function to paint a velocity field on the nodes of the mesh +/// +/// \param mesh is the simulation mesh +/// \param node_vel is the nodal velocity array +/// \param node_coords are the coordinates of the nodes +/// \param elem_gid is the element global mesh index +/// \param f_id is fill instruction +/// \param rk_num_bins is time integration storage level +/// +///////////////////////////////////////////////////////////////////////////// +KOKKOS_FUNCTION +void paint_node_vel(const CArrayKokkos& region_fills, + const DCArrayKokkos& node_vel, + const DCArrayKokkos& node_coords, + const double node_gid, + const double num_dims, + const size_t f_id, + const size_t rk_num_bins){ + + // save velocity at all rk_levels + for(size_t rk_level=0; rk_level 1.0e-14) { + dir[dim] /= (radius_val); + } + else{ + dir[dim] = 0.0; + } + } // end for + + node_vel(rk_level, node_gid, 0) = region_fills(f_id).speed * dir[0]; + node_vel(rk_level, node_gid, 1) = region_fills(f_id).speed * dir[1]; + if (num_dims == 3) { + node_vel(rk_level, node_gid, 2) = 0.0; + } + + break; + } + case init_conds::spherical: + { + // Setting up spherical + double dir[3]; + dir[0] = 0.0; + dir[1] = 0.0; + dir[2] = 0.0; + double radius_val = 0.0; + + for (int dim = 0; dim < 3; dim++) { + dir[dim] = node_coords(rk_level, node_gid, dim); + radius_val += node_coords(rk_level, node_gid, dim) * node_coords(rk_level, node_gid, dim); + } // end for + radius_val = sqrt(radius_val); + + for (int dim = 0; dim < 3; dim++) { + if (radius_val > 1.0e-14) { + dir[dim] /= (radius_val); + } + else{ + dir[dim] = 0.0; + } + } // end for + + node_vel(rk_level, node_gid, 0) = region_fills(f_id).speed * dir[0]; + node_vel(rk_level, node_gid, 1) = region_fills(f_id).speed * dir[1]; + if (num_dims == 3) { + node_vel(rk_level, node_gid, 2) = region_fills(f_id).speed * dir[2]; + } + + break; + } + case init_conds::radial_linear: + { + printf("**** Radial_linear initial conditions not yet supported ****\n"); + break; + } + case init_conds::spherical_linear: + { + printf("**** spherical_linear initial conditions not yet supported ****\n"); + break; + } + case init_conds::tg_vortex: + { + node_vel(rk_level, node_gid, 0) = sin(PI * node_coords(rk_level, node_gid, 0)) * + cos(PI * node_coords(rk_level, node_gid, 1)); + node_vel(rk_level, node_gid, 1) = -1.0 * cos(PI * node_coords(rk_level, node_gid, 0)) * + sin(PI * node_coords(rk_level, node_gid, 1)); + if (num_dims == 3) { + node_vel(rk_level, node_gid, 2) = 0.0; + } + + break; + } + + case init_conds::no_ic_vel: + { + // no velocity + node_vel(rk_level, node_gid, 0) = 0.0; + node_vel(rk_level, node_gid, 1) = 0.0; + if (num_dims == 3) { + node_vel(rk_level, node_gid, 2) = 0.0; + } + + break; + } + default: + { + // no velocity + node_vel(rk_level, node_gid, 0) = 0.0; + node_vel(rk_level, node_gid, 1) = 0.0; + if (num_dims == 3) { + node_vel(rk_level, node_gid, 2) = 0.0; + } + + break; + } + } // end of switch + + } // end loop over rk_num_bins + + + // done setting the velocity +} // end function paint_node_vel + + + +///////////////////////////////////////////////////////////////////////////// +/// +/// \fn init_press_sspd_stress +/// +/// \brief a function to initialize pressure, sound speed and stress +/// +/// \param Materials holds the material models and global parameters +/// \param mesh is the simulation mesh +/// \param GaussPoint_den is density at the GaussPoints on the mesh +/// \param GaussPoint_pres is pressure at the GaussPoints on the mesh +/// \param GaussPoint_stress is stress at the GaussPoints on the mesh +/// \param GaussPoint_sspd is sound speed at the GaussPoints on the mesh +/// \param GaussPoint_sie is specific internal energy at the GaussPoints on the mesh +/// \param GaussPoint_statev are the state variables at the GaussPoints on the mesh +/// \param num_mat_pts is the number of material points for mat_id +/// \param mat_id is material id +/// \param rk_num_bins is number of time integration storage bins +/// +///////////////////////////////////////////////////////////////////////////// +void init_press_sspd_stress(const Material_t& Materials, + const mesh_t& mesh, + const DCArrayKokkos& MaterialPoints_den, + const DCArrayKokkos& MaterialPoints_pres, + const DCArrayKokkos& MaterialPoints_stress, + const DCArrayKokkos& MaterialPoints_sspd, + const DCArrayKokkos& MaterialPoints_sie, + const DCArrayKokkos& MaterialPoints_statev, + const size_t rk_num_bins, + const size_t num_mat_pts, + const size_t mat_id){ + + + // ------- + // the call to the model initialization goes here + // ------- + + // --- pressure and sound speed --- + // loop over the material points + FOR_ALL(mat_point_lid, 0, num_mat_pts, { + + // --- Pressure --- + Materials.MaterialFunctions(mat_id).calc_pressure( + MaterialPoints_pres, + MaterialPoints_stress, + mat_point_lid, + mat_id, + MaterialPoints_statev, + MaterialPoints_sspd, + MaterialPoints_den(mat_point_lid), + MaterialPoints_sie(0, mat_point_lid), + Materials.eos_global_vars); + + // --- Sound Speed --- + Materials.MaterialFunctions(mat_id).calc_sound_speed( + MaterialPoints_pres, + MaterialPoints_stress, + mat_point_lid, + mat_id, + MaterialPoints_statev, + MaterialPoints_sspd, + MaterialPoints_den(mat_point_lid), + MaterialPoints_sie(0, mat_point_lid), + Materials.eos_global_vars); + }); // end pressure and sound speed + + + // --- stress tensor --- + for(size_t rk_level=0; rk_level& node_coords, + const DCArrayKokkos& node_mass, + const DCArrayKokkos& corner_mass, + const DCArrayKokkos& MaterialPoints_mass, + const DCArrayKokkos& MaterialToMeshMaps_elem, + const size_t num_mat_elems){ + + + FOR_ALL(mat_elem_lid, 0, num_mat_elems, { + + // get elem gid + size_t elem_gid = MaterialToMeshMaps_elem(mat_elem_lid); + + // calculate the fraction of matpt mass to scatter to each corner + double corner_frac = 1.0/((double)mesh.num_nodes_in_elem); // =1/8 + + // partion the mass to the corners + for(size_t corner_lid=0; corner_lid& node_coords, + const DCArrayKokkos& node_mass, + const DCArrayKokkos& corner_mass){ + + + FOR_ALL(node_gid, 0, mesh.num_nodes, { + for (size_t corner_lid = 0; corner_lid < mesh.num_corners_in_node(node_gid); corner_lid++) { + + size_t corner_gid = mesh.corners_in_node(node_gid, corner_lid); + + node_mass(node_gid) += corner_mass(corner_gid); + } // end for elem_lid + }); // end parallel loop over nodes in the mesh + +} // end function calculate node mass + + + + +#endif \ No newline at end of file From 3cad43d12f43b98435d28de10ef0a27eeba216cf Mon Sep 17 00:00:00 2001 From: Adrian-Diaz <46537160+Adrian-Diaz@users.noreply.github.com> Date: Mon, 5 Aug 2024 11:27:44 -0600 Subject: [PATCH 104/233] WIP: dynamic objectives refactor --- .../Optimization_Modules/Fierro_Optimization_Objective.hpp | 6 +++++- .../Topology_Optimization/Kinetic_Energy_Minimize.h | 4 +--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/Parallel-Solvers/Optimization_Modules/Fierro_Optimization_Objective.hpp b/src/Parallel-Solvers/Optimization_Modules/Fierro_Optimization_Objective.hpp index 5494ef17e..d765f13c5 100644 --- a/src/Parallel-Solvers/Optimization_Modules/Fierro_Optimization_Objective.hpp +++ b/src/Parallel-Solvers/Optimization_Modules/Fierro_Optimization_Objective.hpp @@ -117,8 +117,12 @@ class FierroOptimizationObjective : public ROL::Objective { public: + bool time_accumulation; + real_t objective_accumulation; + FierroOptimizationObjective(){ - + objective_accumulation = 0; + time_accumulation = false; } diff --git a/src/Parallel-Solvers/Parallel-Explicit/Topology_Optimization/Kinetic_Energy_Minimize.h b/src/Parallel-Solvers/Parallel-Explicit/Topology_Optimization/Kinetic_Energy_Minimize.h index 4266d8564..fc7937718 100644 --- a/src/Parallel-Solvers/Parallel-Explicit/Topology_Optimization/Kinetic_Energy_Minimize.h +++ b/src/Parallel-Solvers/Parallel-Explicit/Topology_Optimization/Kinetic_Energy_Minimize.h @@ -135,13 +135,12 @@ typedef MV::dual_view_type dual_vec_array; } public: - bool nodal_density_flag_, time_accumulation; + bool nodal_density_flag_; int last_comm_step, last_solve_step, current_step; size_t nvalid_modules; std::vector valid_fea_modules; // modules that may interface with this objective function FEA_MODULE_TYPE set_module_type; // std::string my_fea_module = "SGH"; - real_t objective_accumulation; KineticEnergyMinimize_TopOpt(Explicit_Solver* Explicit_Solver_Pointer, bool nodal_density_flag) : useLC_(true) @@ -169,7 +168,6 @@ typedef MV::dual_view_type dual_vec_array; last_comm_step = last_solve_step = -1; current_step = 0; time_accumulation = true; - objective_accumulation = 0; previous_gradients = Teuchos::rcp(new MV(Explicit_Solver_Pointer_->map, 1)); if(Explicit_Solver_Pointer_->simparam.optimization_options.maximize_flag){ From 6d048ca826ec653fa10f97202320b73abdaf0b9f Mon Sep 17 00:00:00 2001 From: Jacob Moore Date: Mon, 5 Aug 2024 17:12:01 -0500 Subject: [PATCH 105/233] BUG: Fix build --- single-node-refactor/CMakeLists.txt | 3 - single-node-refactor/src/CMakeLists.txt | 8 +- .../src/Solvers/SGH_solver/CMakeLists.txt | 41 +- .../Solvers/SGH_solver/include/sgh_solver.h | 2 - .../src/Solvers/SGH_solver/src/sgh_setup.cpp | 459 ++++++++-------- .../src/Solvers/SGH_solver/src/sgh_solve.cpp | 38 +- .../src/common/dynamic_options.h | 2 +- single-node-refactor/src/common/io_utils.h | 507 ++---------------- single-node-refactor/src/common/region_fill.h | 330 ++++++++++++ single-node-refactor/src/input/CMakeLists.txt | 15 +- single-node-refactor/src/input/parse_yaml.cpp | 59 ++ single-node-refactor/src/input/parse_yaml.h | 19 + single-node-refactor/src/solver.h | 2 +- 13 files changed, 730 insertions(+), 755 deletions(-) diff --git a/single-node-refactor/CMakeLists.txt b/single-node-refactor/CMakeLists.txt index 78d9f53e7..c8f008e1f 100755 --- a/single-node-refactor/CMakeLists.txt +++ b/single-node-refactor/CMakeLists.txt @@ -54,9 +54,6 @@ include_directories(src/input) add_subdirectory(src/input) -include_directories(src/Solvers/SGH_solver) -add_subdirectory(src/Solvers/SGH_solver) - add_subdirectory(src) diff --git a/single-node-refactor/src/CMakeLists.txt b/single-node-refactor/src/CMakeLists.txt index 859a059e9..71b573cf8 100755 --- a/single-node-refactor/src/CMakeLists.txt +++ b/single-node-refactor/src/CMakeLists.txt @@ -75,5 +75,9 @@ endif() include_directories(common) -add_executable(Fierro main.cpp solver.cpp ) -target_link_libraries(Fierro PRIVATE matar parse_yaml sgh_solver Kokkos::kokkos) +# Add SGH Solver +include_directories(Solvers/SGH_solver/include) +add_subdirectory(Solvers/SGH_solver) + +add_executable(Fierro main.cpp solver.cpp ${YAML_SRC_Files} ${SGH_SRC_Files} ) +target_link_libraries(Fierro PRIVATE matar Kokkos::kokkos) #sgh_solver parse_yaml diff --git a/single-node-refactor/src/Solvers/SGH_solver/CMakeLists.txt b/single-node-refactor/src/Solvers/SGH_solver/CMakeLists.txt index 3f175c4bc..9dc2c4025 100755 --- a/single-node-refactor/src/Solvers/SGH_solver/CMakeLists.txt +++ b/single-node-refactor/src/Solvers/SGH_solver/CMakeLists.txt @@ -1,6 +1,5 @@ cmake_minimum_required(VERSION 3.1.3) - find_package(Matar REQUIRED) find_package(Kokkos REQUIRED) @@ -19,28 +18,18 @@ endif() include_directories(include) include_directories(src) - -set(SRC_Files -src/boundary.cpp -src/energy_sgh.cpp -src/force_sgh.cpp -src/position.cpp -src/momentum.cpp -src/properties.cpp -src/sgh_solve.cpp -src/time_integration.cpp -src/sgh_setup.cpp) - - -message("\n ****** ADDING SGH LIBRARY ******** \n ") - -add_library(sgh_solver ${SRC_Files} ) # ${SGH_Solver_SRC} -target_include_directories(sgh_solver PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include) - -target_link_libraries(sgh_solver matar Kokkos::kokkos) - - - - - - +message("\n ****** ADDING SGH SOURCE FILES ******** \n ") + +set(SGH_SRC_Files +${CMAKE_CURRENT_SOURCE_DIR}/src/boundary.cpp +${CMAKE_CURRENT_SOURCE_DIR}/src/energy_sgh.cpp +${CMAKE_CURRENT_SOURCE_DIR}/src/force_sgh.cpp +${CMAKE_CURRENT_SOURCE_DIR}/src/position.cpp +${CMAKE_CURRENT_SOURCE_DIR}/src/momentum.cpp +${CMAKE_CURRENT_SOURCE_DIR}/src/properties.cpp +${CMAKE_CURRENT_SOURCE_DIR}/src/sgh_solve.cpp +${CMAKE_CURRENT_SOURCE_DIR}/src/time_integration.cpp +${CMAKE_CURRENT_SOURCE_DIR}/src/sgh_setup.cpp +${CMAKE_CURRENT_SOURCE_DIR}/include/sgh_solver.h +PARENT_SCOPE +) \ No newline at end of file diff --git a/single-node-refactor/src/Solvers/SGH_solver/include/sgh_solver.h b/single-node-refactor/src/Solvers/SGH_solver/include/sgh_solver.h index 90c3f0950..a8dec6470 100644 --- a/single-node-refactor/src/Solvers/SGH_solver/include/sgh_solver.h +++ b/single-node-refactor/src/Solvers/SGH_solver/include/sgh_solver.h @@ -47,8 +47,6 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "dynamic_options.h" - - using namespace mtr; // matar namespace ///////////////////////////////////////////////////////////////////////////// diff --git a/single-node-refactor/src/Solvers/SGH_solver/src/sgh_setup.cpp b/single-node-refactor/src/Solvers/SGH_solver/src/sgh_setup.cpp index c6adf8da3..643b64e4f 100644 --- a/single-node-refactor/src/Solvers/SGH_solver/src/sgh_setup.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver/src/sgh_setup.cpp @@ -33,19 +33,237 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. **********************************************************************************************/ #include "sgh_solver.h" -#include "solver.h" -#include "geometry_new.h" -#include "matar.h" -#include "simulation_parameters.h" -#include "boundary_conditions.h" -#include "material.h" -#include "mesh.h" -#include "state.h" -#include "io_utils.h" -#include "dynamic_options.h" #include "region_fill.h" + +///////////////////////////////////////////////////////////////////////////// +/// +/// \fn init_corner_node_masses_zero +/// +/// \brief a function to initialize corner and node masses to zero +/// +/// \param mesh is the simulation mesh +/// \param node_mass is the node mass +/// \param corner_mass is the corner mass +/// +///////////////////////////////////////////////////////////////////////////// +void SGH::init_corner_node_masses_zero(const mesh_t& mesh, + const DCArrayKokkos& node_mass, + const DCArrayKokkos& corner_mass) const +{ + + // calculate the nodal mass + FOR_ALL(node_gid, 0, mesh.num_nodes, { + node_mass(node_gid) = 0.0; + }); // end parallel over nodes + + FOR_ALL(corner_gid, 0, mesh.num_corners, { + corner_mass(corner_gid) = 0.0; + }); // end parallel over corners + +} // end setting masses equal to zero + +///////////////////////////////////////////////////////////////////////////// +/// +/// \fn fill_regions_sgh +/// +/// \brief a function to paint den, sie, vel, and mat_ids on the mesh +/// The arrays populated (on host and device) are: +/// elem_mat_id +/// GaussPoint_den +/// GaussPoint_sie +/// node_vel +/// +/// \param Materials holds the material models and global parameters +/// \param mesh is the simulation mesh +/// \param node_coords are the coordinates of the nodes +/// \param node_vel is the nodal velocity array +/// \param region_fills are the instructures to paint state on the mesh +/// \param voxel_elem_mat_id are the voxel values on a structured i,j,k mesh +/// \param GaussPoint_den is density at the GaussPoints on the mesh +/// \param GaussPoint_sie is specific internal energy at the GaussPoints on the mesh +/// \param elem_mat_id is the material id in an element +/// \param num_fills is number of fill instruction +/// \param num_elems is number of elements on the mesh +/// \param num_nodes is number of nodes on the mesh +/// \param rk_num_bins is number of time integration storage bins +/// +///////////////////////////////////////////////////////////////////////////// +void SGH::fill_regions_sgh(const Material_t& Materials, + const mesh_t& mesh, + const DCArrayKokkos & node_coords, + DCArrayKokkos & node_vel, + DCArrayKokkos & GaussPoint_den, + DCArrayKokkos & GaussPoint_sie, + DCArrayKokkos & elem_mat_id, + DCArrayKokkos & voxel_elem_mat_id, + const CArrayKokkos & region_fills, + const CArray & region_fills_host, + const size_t num_fills, + const size_t num_elems, + const size_t num_nodes, + const size_t rk_num_bins) const +{ + + + double voxel_dx, voxel_dy, voxel_dz; // voxel mesh resolution, set by input file + double orig_x, orig_y, orig_z; // origin of voxel elem center mesh, set by input file + size_t voxel_num_i, voxel_num_j, voxel_num_k; // num voxel elements in each direction, set by input file + + + // --------------------------------------------- + // copy to host, enum to read a voxel file + // --------------------------------------------- + + DCArrayKokkos read_voxel_file(num_fills); // check to see if readVoxelFile + + FOR_ALL(f_id, 0, num_fills, { + if (region_fills(f_id).volume == region::readVoxelFile) + { + read_voxel_file(f_id) = region::readVoxelFile; // read the voxel file + } + // add other mesh voxel files + else + { + read_voxel_file(f_id) = 0; + } + }); // end parallel for + read_voxel_file.update_host(); // copy to CPU if code is to read a file + Kokkos::fence(); + // --------------------------------------------- + + + // loop over the fill instructions + for (size_t f_id = 0; f_id < num_fills; f_id++) { + + // ---- + // voxel mesh setup + if (read_voxel_file.host(f_id) == region::readVoxelFile) + { + // read voxel mesh to get the values in the fcn interface + user_voxel_init(voxel_elem_mat_id, + voxel_dx, + voxel_dy, + voxel_dz, + orig_x, + orig_y, + orig_z, + voxel_num_i, + voxel_num_j, + voxel_num_k, + region_fills_host(f_id).scale_x, + region_fills_host(f_id).scale_y, + region_fills_host(f_id).scale_z, + region_fills_host(f_id).file_path); + + // copy values read from file to device + voxel_elem_mat_id.update_device(); + } // endif + // add else if for other mesh reads including STL-2-voxel + + + // parallel loop over elements in mesh + FOR_ALL(elem_gid, 0, num_elems, { + + // calculate the coordinates and radius of the element + double elem_coords_1D[3]; // note:initialization with a list won't work + ViewCArrayKokkos elem_coords(&elem_coords_1D[0], 3); + elem_coords(0) = 0.0; + elem_coords(1) = 0.0; + elem_coords(2) = 0.0; + + // get the coordinates of the element center (using rk_level=1 or node coords) + for (int node_lid = 0; node_lid < mesh.num_nodes_in_elem; node_lid++) { + elem_coords(0) += node_coords(1, mesh.nodes_in_elem(elem_gid, node_lid), 0); + elem_coords(1) += node_coords(1, mesh.nodes_in_elem(elem_gid, node_lid), 1); + if (mesh.num_dims == 3) { + elem_coords(2) += node_coords(1, mesh.nodes_in_elem(elem_gid, node_lid), 2); + } + else{ + elem_coords(2) = 0.0; + } + } // end loop over nodes in element + elem_coords(0) = (elem_coords(0) / mesh.num_nodes_in_elem); + elem_coords(1) = (elem_coords(1) / mesh.num_nodes_in_elem); + elem_coords(2) = (elem_coords(2) / mesh.num_nodes_in_elem); + + + // calc if we are to fill this element + size_t fill_this = fill_geometric_region(mesh, + voxel_elem_mat_id, + region_fills, + elem_coords, + voxel_dx, + voxel_dy, + voxel_dz, + orig_x, + orig_y, + orig_z, + voxel_num_i, + voxel_num_j, + voxel_num_k, + f_id); + + + // paint the material state on the element if fill_this=1 + if (fill_this == 1) { + + // default sgh paint + paint_gauss_den_sie(Materials, + mesh, + node_coords, + GaussPoint_den, + GaussPoint_sie, + elem_mat_id, + region_fills, + elem_coords, + elem_gid, + f_id); + + // add user defined paint here + // user_defined_sgh_state(); + + + // technically, not thread safe, but making it a separate loop created bad fill behavior + // loop over the nodes of this element and apply velocity + for (size_t node_lid = 0; node_lid < mesh.num_nodes_in_elem; node_lid++) { + + // get the mesh node index + size_t node_gid = mesh.nodes_in_elem(elem_gid, node_lid); + + // default sgh paint + paint_node_vel(region_fills, + node_vel, + node_coords, + node_gid, + mesh.num_dims, + f_id, + rk_num_bins); + + // add user defined paint here + // user_defined_vel_state(); + + } // end loop over the nodes in elem + + } // end if fill this + + }); // end FOR_ALL node loop + Kokkos::fence(); + + } // end for loop over fills + + + elem_mat_id.update_host(); + GaussPoint_den.update_host(); + GaussPoint_sie.update_host(); + node_vel.update_host(); + + Kokkos::fence(); + +} // end SGH fill regions + + ///////////////////////////////////////////////////////////////////////////// /// /// \fn setup the SGH method @@ -332,232 +550,11 @@ void SGH::setup(SimulationParameters_t& SimulationParamaters, -///////////////////////////////////////////////////////////////////////////// -/// -/// \fn fill_regions_sgh -/// -/// \brief a function to paint den, sie, vel, and mat_ids on the mesh -/// The arrays populated (on host and device) are: -/// elem_mat_id -/// GaussPoint_den -/// GaussPoint_sie -/// node_vel -/// -/// \param Materials holds the material models and global parameters -/// \param mesh is the simulation mesh -/// \param node_coords are the coordinates of the nodes -/// \param node_vel is the nodal velocity array -/// \param region_fills are the instructures to paint state on the mesh -/// \param voxel_elem_mat_id are the voxel values on a structured i,j,k mesh -/// \param GaussPoint_den is density at the GaussPoints on the mesh -/// \param GaussPoint_sie is specific internal energy at the GaussPoints on the mesh -/// \param elem_mat_id is the material id in an element -/// \param num_fills is number of fill instruction -/// \param num_elems is number of elements on the mesh -/// \param num_nodes is number of nodes on the mesh -/// \param rk_num_bins is number of time integration storage bins -/// -///////////////////////////////////////////////////////////////////////////// -void fill_regions_sgh(const Material_t& Materials, - const mesh_t& mesh, - const DCArrayKokkos & node_coords, - DCArrayKokkos & node_vel, - DCArrayKokkos & GaussPoint_den, - DCArrayKokkos & GaussPoint_sie, - DCArrayKokkos & elem_mat_id, - DCArrayKokkos & voxel_elem_mat_id, - const CArrayKokkos & region_fills, - const CArray & region_fills_host, - const size_t num_fills, - const size_t num_elems, - const size_t num_nodes, - const size_t rk_num_bins){ - - - double voxel_dx, voxel_dy, voxel_dz; // voxel mesh resolution, set by input file - double orig_x, orig_y, orig_z; // origin of voxel elem center mesh, set by input file - size_t voxel_num_i, voxel_num_j, voxel_num_k; // num voxel elements in each direction, set by input file - - - // --------------------------------------------- - // copy to host, enum to read a voxel file - // --------------------------------------------- - - DCArrayKokkos read_voxel_file(num_fills); // check to see if readVoxelFile - - FOR_ALL(f_id, 0, num_fills, { - if (region_fills(f_id).volume == region::readVoxelFile) - { - read_voxel_file(f_id) = region::readVoxelFile; // read the voxel file - } - // add other mesh voxel files - else - { - read_voxel_file(f_id) = 0; - } - }); // end parallel for - read_voxel_file.update_host(); // copy to CPU if code is to read a file - Kokkos::fence(); - // --------------------------------------------- - - - // loop over the fill instructions - for (size_t f_id = 0; f_id < num_fills; f_id++) { - - // ---- - // voxel mesh setup - if (read_voxel_file.host(f_id) == region::readVoxelFile) - { - // read voxel mesh to get the values in the fcn interface - user_voxel_init(voxel_elem_mat_id, - voxel_dx, - voxel_dy, - voxel_dz, - orig_x, - orig_y, - orig_z, - voxel_num_i, - voxel_num_j, - voxel_num_k, - region_fills_host(f_id).scale_x, - region_fills_host(f_id).scale_y, - region_fills_host(f_id).scale_z, - region_fills_host(f_id).file_path); - - // copy values read from file to device - voxel_elem_mat_id.update_device(); - } // endif - // add else if for other mesh reads including STL-2-voxel - - - // parallel loop over elements in mesh - FOR_ALL(elem_gid, 0, num_elems, { - - // calculate the coordinates and radius of the element - double elem_coords_1D[3]; // note:initialization with a list won't work - ViewCArrayKokkos elem_coords(&elem_coords_1D[0], 3); - elem_coords(0) = 0.0; - elem_coords(1) = 0.0; - elem_coords(2) = 0.0; - - // get the coordinates of the element center (using rk_level=1 or node coords) - for (int node_lid = 0; node_lid < mesh.num_nodes_in_elem; node_lid++) { - elem_coords(0) += node_coords(1, mesh.nodes_in_elem(elem_gid, node_lid), 0); - elem_coords(1) += node_coords(1, mesh.nodes_in_elem(elem_gid, node_lid), 1); - if (mesh.num_dims == 3) { - elem_coords(2) += node_coords(1, mesh.nodes_in_elem(elem_gid, node_lid), 2); - } - else{ - elem_coords(2) = 0.0; - } - } // end loop over nodes in element - elem_coords(0) = (elem_coords(0) / mesh.num_nodes_in_elem); - elem_coords(1) = (elem_coords(1) / mesh.num_nodes_in_elem); - elem_coords(2) = (elem_coords(2) / mesh.num_nodes_in_elem); - - - // calc if we are to fill this element - size_t fill_this = fill_geometric_region(mesh, - voxel_elem_mat_id, - region_fills, - elem_coords, - voxel_dx, - voxel_dy, - voxel_dz, - orig_x, - orig_y, - orig_z, - voxel_num_i, - voxel_num_j, - voxel_num_k, - f_id); - - - // paint the material state on the element if fill_this=1 - if (fill_this == 1) { - - // default sgh paint - paint_gauss_den_sie(Materials, - mesh, - node_coords, - GaussPoint_den, - GaussPoint_sie, - elem_mat_id, - region_fills, - elem_coords, - elem_gid, - f_id); - - // add user defined paint here - // user_defined_sgh_state(); - - - // technically, not thread safe, but making it a separate loop created bad fill behavior - // loop over the nodes of this element and apply velocity - for (size_t node_lid = 0; node_lid < mesh.num_nodes_in_elem; node_lid++) { - - // get the mesh node index - size_t node_gid = mesh.nodes_in_elem(elem_gid, node_lid); - - // default sgh paint - paint_node_vel(region_fills, - node_vel, - node_coords, - node_gid, - mesh.num_dims, - f_id, - rk_num_bins); - - // add user defined paint here - // user_defined_vel_state(); - - } // end loop over the nodes in elem - - } // end if fill this - - }); // end FOR_ALL node loop - Kokkos::fence(); - } // end for loop over fills - elem_mat_id.update_host(); - GaussPoint_den.update_host(); - GaussPoint_sie.update_host(); - node_vel.update_host(); - Kokkos::fence(); -} // end SGH fill regions - - - - -///////////////////////////////////////////////////////////////////////////// -/// -/// \fn init_corner_node_masses_zero -/// -/// \brief a function to initialize corner and node masses to zero -/// -/// \param mesh is the simulation mesh -/// \param node_mass is the node mass -/// \param corner_mass is the corner mass -/// -///////////////////////////////////////////////////////////////////////////// -void init_corner_node_masses_zero(const mesh_t& mesh, - const DCArrayKokkos& node_mass, - const DCArrayKokkos& corner_mass){ - - // calculate the nodal mass - FOR_ALL(node_gid, 0, mesh.num_nodes, { - node_mass(node_gid) = 0.0; - }); // end parallel over nodes - - FOR_ALL(corner_gid, 0, mesh.num_corners, { - corner_mass(corner_gid) = 0.0; - }); // end parallel over corners - -} // end setting masses equal to zero diff --git a/single-node-refactor/src/Solvers/SGH_solver/src/sgh_solve.cpp b/single-node-refactor/src/Solvers/SGH_solver/src/sgh_solve.cpp index 14364a61b..6d4c762e5 100644 --- a/single-node-refactor/src/Solvers/SGH_solver/src/sgh_solve.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver/src/sgh_solve.cpp @@ -33,17 +33,6 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. **********************************************************************************************/ #include "sgh_solver.h" -#include "solver.h" -#include "geometry_new.h" -#include "matar.h" -#include "simulation_parameters.h" -#include "boundary_conditions.h" -#include "material.h" -#include "mesh.h" -#include "state.h" -#include "io_utils.h" -#include "dynamic_options.h" -#include ///////////////////////////////////////////////////////////////////////////// /// @@ -668,7 +657,8 @@ void calc_extensive_node_mass(const CArrayKokkos& node_extensive_mass, const DCArrayKokkos& node_coords, const DCArrayKokkos& node_mass, double num_dims, - double num_nodes){ + double num_nodes) +{ // save the nodal mass FOR_ALL(node_gid, 0, num_nodes, { @@ -680,14 +670,14 @@ void calc_extensive_node_mass(const CArrayKokkos& node_extensive_mass, node_extensive_mass(node_gid) = node_mass(node_gid) * radius; }); // end parallel for - } // end function // a function to tally the internal energy double sum_domain_internal_energy(const DCArrayKokkos& MaterialPoints_mass, const DCArrayKokkos& MaterialPoints_sie, - size_t num_mat_points){ + size_t num_mat_points) +{ double IE_sum = 0.0; double IE_loc_sum; @@ -700,13 +690,13 @@ double sum_domain_internal_energy(const DCArrayKokkos& MaterialPoints_ma return IE_sum; - } // end function double sum_domain_kinetic_energy(const mesh_t& mesh, const DCArrayKokkos& node_vel, const DCArrayKokkos& node_coords, - const DCArrayKokkos& node_mass){ + const DCArrayKokkos& node_mass) +{ // extensive KE double KE_sum = 0.0; double KE_loc_sum; @@ -733,10 +723,10 @@ double sum_domain_kinetic_energy(const mesh_t& mesh, } // end function - // a function to tally the material point masses double sum_domain_material_mass(const DCArrayKokkos& MaterialPoints_mass, - const size_t num_mat_points){ + const size_t num_mat_points) +{ double mass_domain = 0.0; double mass_loc_domain; @@ -749,13 +739,13 @@ double sum_domain_material_mass(const DCArrayKokkos& MaterialPoints_mass Kokkos::fence(); return mass_domain; - } // end function double sum_domain_node_mass(const mesh_t& mesh, const DCArrayKokkos& node_coords, - const DCArrayKokkos& node_mass){ + const DCArrayKokkos& node_mass) +{ double mass_domain = 0.0; double mass_loc_domain; @@ -783,7 +773,8 @@ void calc_node_areal_mass(const mesh_t& mesh, const DCArrayKokkos& node_coords, const DCArrayKokkos& node_mass, CArrayKokkos node_extensive_mass, - double tiny){ + double tiny) +{ // calculate the nodal areal mass FOR_ALL(node_gid, 0, mesh.num_nodes, { @@ -814,13 +805,13 @@ void calc_node_areal_mass(const mesh_t& mesh, }); // end parallel for over elem_gid return; - }// end function // set the corner forces to zero void set_corner_force_zero(const mesh_t& mesh, - const DCArrayKokkos& corner_force){ + const DCArrayKokkos& corner_force) +{ // set corner force to zero FOR_ALL(corner_gid, 0, mesh.num_corners, { @@ -828,5 +819,4 @@ void set_corner_force_zero(const mesh_t& mesh, corner_force(corner_gid, dim) = 0.0; } }); // end parallel for corners - } // end function diff --git a/single-node-refactor/src/common/dynamic_options.h b/single-node-refactor/src/common/dynamic_options.h index 28be0f198..b9cbb69a7 100644 --- a/single-node-refactor/src/common/dynamic_options.h +++ b/single-node-refactor/src/common/dynamic_options.h @@ -31,9 +31,9 @@ WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. **********************************************************************************************/ - #ifndef FIERRO_DYNAMIC_OPTIONS_H #define FIERRO_DYNAMIC_OPTIONS_H + #include #include "matar.h" diff --git a/single-node-refactor/src/common/io_utils.h b/single-node-refactor/src/common/io_utils.h index 1e1ab7001..0f94daada 100644 --- a/single-node-refactor/src/common/io_utils.h +++ b/single-node-refactor/src/common/io_utils.h @@ -46,51 +46,63 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include -// ============================================================================== -// Functions to parse strings -// ============================================================================== -// for string delimiter parsing -std::vector split(std::string s, std::string delimiter); - -// retrieves multiple values between [ ] -std::vector extract_list(std::string str); - -const std::string WHITESPACE = " "; - -std::string ltrim(const std::string& s); -std::string rtrim(const std::string& s); - -std::string trim(const std::string& s); // ============================================================================== // Functions to get 1D for an i,j,k layout mesh // ============================================================================== -int get_id(int i, int j, int k, int num_i, int num_j); +// inline int get_id(int i, int j, int k, int num_i, int num_j); -KOKKOS_FUNCTION -int get_id_device(int i, int j, int k, int num_i, int num_j); +// KOKKOS_INLINE_FUNCTION +// int get_id_device(int i, int j, int k, int num_i, int num_j); +///////////////////////////////////////////////////////////////////////////// +/// +/// \fn get_id +/// +/// \brief This gives the index value of the point or the elem +/// +/// Assumes that the grid has an i,j,k structure +/// the elem = i + (j)*(num_points_i-1) + (k)*(num_points_i-1)*(num_points_j-1) +/// the point = i + (j)*num_points_i + (k)*num_points_i*num_points_j +/// +/// \param i index +/// \param j index +/// \param k index +/// \param Number of i indices +/// \param Number of j indices +/// +///////////////////////////////////////////////////////////////////////////// +inline int get_id(int i, int j, int k, int num_i, int num_j) +{ + return i + j * num_i + k * num_i * num_j; +} -// ============================================================================== -// Functions to read voxel mesh -// ============================================================================== -void user_voxel_init(DCArrayKokkos& elem_values, - double& dx, - double& dy, - double& dz, - double& orig_x, - double& orig_y, - double& orig_z, - size_t& voxel_num_i, - size_t& voxel_num_j, - size_t& voxel_num_k, - double scale_x, - double scale_y, - double scale_z, - std::string mesh_file); +///////////////////////////////////////////////////////////////////////////// +/// +/// \fn get_id_device +/// +/// \brief This gives the index value of the point or the elem +/// +/// Assumes that the grid has an i,j,k structure +/// the elem = i + (j)*(num_points_i-1) + (k)*(num_points_i-1)*(num_points_j-1) +/// the point = i + (j)*num_points_i + (k)*num_points_i*num_points_j +/// +/// \param i index +/// \param j index +/// \param k index +/// \param Number of i indices +/// \param Number of j indices +/// +///////////////////////////////////////////////////////////////////////////// +KOKKOS_INLINE_FUNCTION +int get_id_device(int i, int j, int k, int num_i, int num_j) +{ + return i + j * num_i + k * num_i * num_j; +} + ///////////////////////////////////////////////////////////////////////////// @@ -1346,429 +1358,4 @@ class MeshWriter - -// ----------------------------------------------------------------------------- -// The function to read a voxel vtk file from Dream3d and intialize the mesh -// ------------------------------------------------------------------------------ -void user_voxel_init(DCArrayKokkos& elem_values, - double& dx, - double& dy, - double& dz, - double& orig_x, - double& orig_y, - double& orig_z, - size_t& num_elems_i, - size_t& num_elems_j, - size_t& num_elems_k, - double scale_x, - double scale_y, - double scale_z, - std::string mesh_file) -{ - std::string MESH = mesh_file; // user specified - - std::ifstream in; // FILE *in; - in.open(MESH); - - // check to see of a mesh was supplied when running the code - if (in) - { - printf("\nReading the 3D voxel mesh: "); - std::cout << MESH << std::endl; - } - else - { - std::cout << "\n\n**********************************\n\n"; - std::cout << " ERROR:\n"; - std::cout << " Voxel vtk input does not exist \n"; - std::cout << "**********************************\n\n" << std::endl; - std::exit(EXIT_FAILURE); - } // end if - - size_t i; // used for writing information to file - size_t point_id; // the global id for the point - size_t elem_id; // the global id for the elem - size_t this_point; // a local id for a point in a elem (0:7 for a Hexahedral elem) - - size_t num_points_i; - size_t num_points_j; - size_t num_points_k; - - size_t num_dims = 3; - - std::string token; - - bool found = false; - - // look for POINTS - i = 0; - while (found == false) { - std::string str; - std::string delimiter = " "; - std::getline(in, str); - std::vector v = split(str, delimiter); - - // looking for the following text: - // POINTS %d float - if (v[0] == "DIMENSIONS") - { - num_points_i = std::stoi(v[1]); - num_points_j = std::stoi(v[2]); - num_points_k = std::stoi(v[3]); - printf("Num voxel nodes read in = %zu, %zu, %zu\n", num_points_i, num_points_j, num_points_k); - - found = true; - } // end if - - if (i > 1000) - { - printf("ERROR: Failed to find POINTS \n"); - break; - } // end if - - i++; - } // end while - - found = false; - - int num_points = num_points_i * num_points_j * num_points_k; - CArray pt_coords_x(num_points_i); - CArray pt_coords_y(num_points_j); - CArray pt_coords_z(num_points_k); - - while (found == false) { - std::string str; - std::string str0; - std::string delimiter = " "; - std::getline(in, str); - std::vector v = split(str, delimiter); - - // looking for the following text: - if (v[0] == "X_COORDINATES") - { - size_t num_saved = 0; - - while (num_saved < num_points_i - 1) { - // get next line - std::getline(in, str0); - - // remove starting and trailing spaces - str = trim(str0); - std::vector v_coords = split(str, delimiter); - - // loop over the contents of the vector v_coords - for (size_t this_point = 0; this_point < v_coords.size(); this_point++) - { - pt_coords_x(num_saved) = scale_x*std::stod(v_coords[this_point]); - num_saved++; - } // end for - } // end while - - found = true; - } // end if - - if (i > 1000) - { - printf("ERROR: Failed to find X_COORDINATES \n"); - break; - } // end if - - i++; - } // end while - found = false; - - while (found == false) { - std::string str; - std::string str0; - std::string delimiter = " "; - std::getline(in, str); - std::vector v = split(str, delimiter); - - // looking for the following text: - if (v[0] == "Y_COORDINATES") - { - size_t num_saved = 0; - - while (num_saved < num_points_j - 1) { - // get next line - std::getline(in, str0); - - // remove starting and trailing spaces - str = trim(str0); - std::vector v_coords = split(str, delimiter); - - // loop over the contents of the vector v_coords - for (size_t this_point = 0; this_point < v_coords.size(); this_point++) - { - pt_coords_y(num_saved) = scale_y*std::stod(v_coords[this_point]); - num_saved++; - } // end for - } // end while - - found = true; - } // end if - - if (i > 1000) - { - printf("ERROR: Failed to find Y_COORDINATES \n"); - break; - } // end if - - i++; - } // end while - found = false; - - while (found == false) { - std::string str; - std::string str0; - std::string delimiter = " "; - std::getline(in, str); - std::vector v = split(str, delimiter); - - // looking for the following text: - if (v[0] == "Z_COORDINATES") - { - size_t num_saved = 0; - - while (num_saved < num_points_k - 1) { - // get next line - std::getline(in, str0); - - // remove starting and trailing spaces - str = trim(str0); - std::vector v_coords = split(str, delimiter); - - // loop over the contents of the vector v_coords - for (size_t this_point = 0; this_point < v_coords.size(); this_point++) - { - pt_coords_z(num_saved) = scale_z*std::stod(v_coords[this_point]); - num_saved++; - } // end for - } // end while - - found = true; - } // end if - - if (i > 1000) - { - printf("ERROR: Failed to find Z_COORDINATES \n"); - break; - } // end if - - i++; - } // end while - found = false; - - size_t num_elems; - num_elems_i = num_points_i - 1; - num_elems_j = num_points_j - 1; - num_elems_k = num_points_k - 1; - - // center to center distance between first and last elem along each edge - double Lx = (pt_coords_x(num_points_i - 2) - pt_coords_x(0)); - double Ly = (pt_coords_y(num_points_j - 2) - pt_coords_y(0)); - double Lz = (pt_coords_z(num_points_k - 2) - pt_coords_z(0)); - - // spacing between elems - dx = Lx / ((double) num_elems_i); - dy = Ly / ((double) num_elems_j); - dz = Lz / ((double) num_elems_k); - - // element mesh origin - orig_x = 0.5 * (pt_coords_x(0) + pt_coords_x(1)), - orig_y = 0.5 * (pt_coords_y(0) + pt_coords_y(1)), - orig_z = 0.5 * (pt_coords_z(0) + pt_coords_z(1)), - - // look for CELLS - i = 0; - while (found == false) { - std::string str; - std::getline(in, str); - - std::string delimiter = " "; - std::vector v = split(str, delimiter); - - // looking for the following text: - // CELLS num_elems size - if (v[0] == "CELL_DATA") - { - num_elems = std::stoi(v[1]); - printf("Num voxel elements read in %zu\n", num_elems); - - found = true; - } // end if - - if (i > 1000) - { - printf("ERROR: Failed to find CELL_DATA \n"); - break; - } // end if - - i++; - } // end while - found = false; - - // allocate memory for element voxel values - elem_values = DCArrayKokkos(num_elems); - - // reading the cell data - while (found == false) { - std::string str; - std::string str0; - - std::string delimiter = " "; - std::getline(in, str); - std::vector v = split(str, delimiter); - - // looking for the following text: - if (v[0] == "LOOKUP_TABLE") - { - size_t num_saved = 0; - - while (num_saved < num_elems - 1) { - // get next line - std::getline(in, str0); - - // remove starting and trailing spaces - str = trim(str0); - std::vector v_values = split(str, delimiter); - - // loop over the contents of the vector v_coords - for (size_t this_elem = 0; this_elem < v_values.size(); this_elem++) - { - // save integers (0 or 1) to host side - elem_values.host(num_saved) = std::stoi(v_values[this_elem]); - num_saved++; - } // end for - - // printf(" done with one row of data \n"); - } // end while - - found = true; - } // end if - - if (i > 1000) - { - printf("ERROR: Failed to find LOOKUP_TABLE data \n"); - break; - } // end if - - i++; - } // end while - found = false; - - printf("\n"); - - in.close(); -} // end routine - - - -///////////////////////////////////////////////////////////////////////////// -/// -/// \fn get_id -/// -/// \brief This gives the index value of the point or the elem -/// -/// Assumes that the grid has an i,j,k structure -/// the elem = i + (j)*(num_points_i-1) + (k)*(num_points_i-1)*(num_points_j-1) -/// the point = i + (j)*num_points_i + (k)*num_points_i*num_points_j -/// -/// \param i index -/// \param j index -/// \param k index -/// \param Number of i indices -/// \param Number of j indices -/// -///////////////////////////////////////////////////////////////////////////// -int get_id(int i, int j, int k, int num_i, int num_j) -{ - return i + j * num_i + k * num_i * num_j; -} - - -///////////////////////////////////////////////////////////////////////////// -/// -/// \fn get_id_device -/// -/// \brief This gives the index value of the point or the elem -/// -/// Assumes that the grid has an i,j,k structure -/// the elem = i + (j)*(num_points_i-1) + (k)*(num_points_i-1)*(num_points_j-1) -/// the point = i + (j)*num_points_i + (k)*num_points_i*num_points_j -/// -/// \param i index -/// \param j index -/// \param k index -/// \param Number of i indices -/// \param Number of j indices -/// -///////////////////////////////////////////////////////////////////////////// -KOKKOS_FUNCTION -int get_id_device(int i, int j, int k, int num_i, int num_j) -{ - return i + j * num_i + k * num_i * num_j; -} - - - -// Code from stackover flow for string delimiter parsing -std::vector split(std::string s, std::string delimiter) -{ - size_t pos_start = 0, pos_end, delim_len = delimiter.length(); - std::string token; - std::vector res; - - while ((pos_end = s.find(delimiter, pos_start)) != std::string::npos) { - token = s.substr(pos_start, pos_end - pos_start); - pos_start = pos_end + delim_len; - res.push_back(token); - } - - res.push_back(s.substr(pos_start)); - return res; -} // end of split - - -// retrieves multiple values between [ ] -std::vector extract_list(std::string str) -{ - // replace '[' with a space and ']' with a space - std::replace(str.begin(), str.end(), '[', ' '); - std::replace(str.begin(), str.end(), ']', ' '); - - std::vector str_values; - std::vector values; - - // exact the str values into a vector - str_values = split(str, ","); - - // convert the text values into double values - for (auto& word : str_values) - { - values.push_back(atof(word.c_str()) ); - } // end for - - return values; -} // end of extract_list - - -std::string ltrim(const std::string& s) -{ - size_t start = s.find_first_not_of(WHITESPACE); - return (start == std::string::npos) ? "" : s.substr(start); -} - - -std::string rtrim(const std::string& s) -{ - size_t end = s.find_last_not_of(WHITESPACE); - return (end == std::string::npos) ? "" : s.substr(0, end + 1); -} - -std::string trim(const std::string& s) -{ - return rtrim(ltrim(s)); -} - #endif // end Header Guard \ No newline at end of file diff --git a/single-node-refactor/src/common/region_fill.h b/single-node-refactor/src/common/region_fill.h index 1c1826c1d..3dd96ed8c 100644 --- a/single-node-refactor/src/common/region_fill.h +++ b/single-node-refactor/src/common/region_fill.h @@ -40,12 +40,342 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "state.h" #include "simulation_parameters.h" #include "region.h" +#include "io_utils.h" #include +// ============================================================================== +// Functions to read voxel mesh +// ============================================================================== +void user_voxel_init(DCArrayKokkos& elem_values, + double& dx, + double& dy, + double& dz, + double& orig_x, + double& orig_y, + double& orig_z, + size_t& voxel_num_i, + size_t& voxel_num_j, + size_t& voxel_num_k, + double scale_x, + double scale_y, + double scale_z, + std::string mesh_file); + +// ----------------------------------------------------------------------------- +// The function to read a voxel vtk file from Dream3d and intialize the mesh +// ------------------------------------------------------------------------------ +void user_voxel_init(DCArrayKokkos& elem_values, + double& dx, + double& dy, + double& dz, + double& orig_x, + double& orig_y, + double& orig_z, + size_t& num_elems_i, + size_t& num_elems_j, + size_t& num_elems_k, + double scale_x, + double scale_y, + double scale_z, + std::string mesh_file) +{ + std::string MESH = mesh_file; // user specified + + std::ifstream in; // FILE *in; + in.open(MESH); + + // check to see of a mesh was supplied when running the code + if (in) + { + printf("\nReading the 3D voxel mesh: "); + std::cout << MESH << std::endl; + } + else + { + std::cout << "\n\n**********************************\n\n"; + std::cout << " ERROR:\n"; + std::cout << " Voxel vtk input does not exist \n"; + std::cout << "**********************************\n\n" << std::endl; + std::exit(EXIT_FAILURE); + } // end if + + size_t i; // used for writing information to file + size_t point_id; // the global id for the point + size_t elem_id; // the global id for the elem + size_t this_point; // a local id for a point in a elem (0:7 for a Hexahedral elem) + + size_t num_points_i; + size_t num_points_j; + size_t num_points_k; + + size_t num_dims = 3; + + std::string token; + + bool found = false; + + // look for POINTS + i = 0; + while (found == false) { + std::string str; + std::string delimiter = " "; + std::getline(in, str); + std::vector v = split(str, delimiter); + + // looking for the following text: + // POINTS %d float + if (v[0] == "DIMENSIONS") + { + num_points_i = std::stoi(v[1]); + num_points_j = std::stoi(v[2]); + num_points_k = std::stoi(v[3]); + printf("Num voxel nodes read in = %zu, %zu, %zu\n", num_points_i, num_points_j, num_points_k); + + found = true; + } // end if + + if (i > 1000) + { + printf("ERROR: Failed to find POINTS \n"); + break; + } // end if + + i++; + } // end while + + found = false; + + int num_points = num_points_i * num_points_j * num_points_k; + CArray pt_coords_x(num_points_i); + CArray pt_coords_y(num_points_j); + CArray pt_coords_z(num_points_k); + + while (found == false) { + std::string str; + std::string str0; + std::string delimiter = " "; + std::getline(in, str); + std::vector v = split(str, delimiter); + + // looking for the following text: + if (v[0] == "X_COORDINATES") + { + size_t num_saved = 0; + + while (num_saved < num_points_i - 1) { + // get next line + std::getline(in, str0); + + // remove starting and trailing spaces + str = trim(str0); + std::vector v_coords = split(str, delimiter); + + // loop over the contents of the vector v_coords + for (size_t this_point = 0; this_point < v_coords.size(); this_point++) + { + pt_coords_x(num_saved) = scale_x*std::stod(v_coords[this_point]); + num_saved++; + } // end for + } // end while + + found = true; + } // end if + + if (i > 1000) + { + printf("ERROR: Failed to find X_COORDINATES \n"); + break; + } // end if + + i++; + } // end while + found = false; + + while (found == false) { + std::string str; + std::string str0; + std::string delimiter = " "; + std::getline(in, str); + std::vector v = split(str, delimiter); + + // looking for the following text: + if (v[0] == "Y_COORDINATES") + { + size_t num_saved = 0; + + while (num_saved < num_points_j - 1) { + // get next line + std::getline(in, str0); + + // remove starting and trailing spaces + str = trim(str0); + std::vector v_coords = split(str, delimiter); + + // loop over the contents of the vector v_coords + for (size_t this_point = 0; this_point < v_coords.size(); this_point++) + { + pt_coords_y(num_saved) = scale_y*std::stod(v_coords[this_point]); + num_saved++; + } // end for + } // end while + + found = true; + } // end if + + if (i > 1000) + { + printf("ERROR: Failed to find Y_COORDINATES \n"); + break; + } // end if + + i++; + } // end while + found = false; + + while (found == false) { + std::string str; + std::string str0; + std::string delimiter = " "; + std::getline(in, str); + std::vector v = split(str, delimiter); + + // looking for the following text: + if (v[0] == "Z_COORDINATES") + { + size_t num_saved = 0; + + while (num_saved < num_points_k - 1) { + // get next line + std::getline(in, str0); + + // remove starting and trailing spaces + str = trim(str0); + std::vector v_coords = split(str, delimiter); + + // loop over the contents of the vector v_coords + for (size_t this_point = 0; this_point < v_coords.size(); this_point++) + { + pt_coords_z(num_saved) = scale_z*std::stod(v_coords[this_point]); + num_saved++; + } // end for + } // end while + + found = true; + } // end if + + if (i > 1000) + { + printf("ERROR: Failed to find Z_COORDINATES \n"); + break; + } // end if + + i++; + } // end while + found = false; + + size_t num_elems; + num_elems_i = num_points_i - 1; + num_elems_j = num_points_j - 1; + num_elems_k = num_points_k - 1; + + // center to center distance between first and last elem along each edge + double Lx = (pt_coords_x(num_points_i - 2) - pt_coords_x(0)); + double Ly = (pt_coords_y(num_points_j - 2) - pt_coords_y(0)); + double Lz = (pt_coords_z(num_points_k - 2) - pt_coords_z(0)); + + // spacing between elems + dx = Lx / ((double) num_elems_i); + dy = Ly / ((double) num_elems_j); + dz = Lz / ((double) num_elems_k); + + // element mesh origin + orig_x = 0.5 * (pt_coords_x(0) + pt_coords_x(1)), + orig_y = 0.5 * (pt_coords_y(0) + pt_coords_y(1)), + orig_z = 0.5 * (pt_coords_z(0) + pt_coords_z(1)), + + // look for CELLS + i = 0; + while (found == false) { + std::string str; + std::getline(in, str); + + std::string delimiter = " "; + std::vector v = split(str, delimiter); + + // looking for the following text: + // CELLS num_elems size + if (v[0] == "CELL_DATA") + { + num_elems = std::stoi(v[1]); + printf("Num voxel elements read in %zu\n", num_elems); + + found = true; + } // end if + + if (i > 1000) + { + printf("ERROR: Failed to find CELL_DATA \n"); + break; + } // end if + + i++; + } // end while + found = false; + + // allocate memory for element voxel values + elem_values = DCArrayKokkos(num_elems); + + // reading the cell data + while (found == false) { + std::string str; + std::string str0; + + std::string delimiter = " "; + std::getline(in, str); + std::vector v = split(str, delimiter); + + // looking for the following text: + if (v[0] == "LOOKUP_TABLE") + { + size_t num_saved = 0; + + while (num_saved < num_elems - 1) { + // get next line + std::getline(in, str0); + + // remove starting and trailing spaces + str = trim(str0); + std::vector v_values = split(str, delimiter); + + // loop over the contents of the vector v_coords + for (size_t this_elem = 0; this_elem < v_values.size(); this_elem++) + { + // save integers (0 or 1) to host side + elem_values.host(num_saved) = std::stoi(v_values[this_elem]); + num_saved++; + } // end for + + // printf(" done with one row of data \n"); + } // end while + + found = true; + } // end if + + if (i > 1000) + { + printf("ERROR: Failed to find LOOKUP_TABLE data \n"); + break; + } // end if + i++; + } // end while + found = false; + printf("\n"); + in.close(); +} // end routine ///////////////////////////////////////////////////////////////////////////// /// /// \fn fill_geometric_region diff --git a/single-node-refactor/src/input/CMakeLists.txt b/single-node-refactor/src/input/CMakeLists.txt index 560e4d741..a3015a0e3 100644 --- a/single-node-refactor/src/input/CMakeLists.txt +++ b/single-node-refactor/src/input/CMakeLists.txt @@ -18,16 +18,21 @@ endif() include_directories(../common) -set(SRC_Files -parse_yaml.cpp -Yaml.cpp) +set(YAML_SRC_Files +${CMAKE_CURRENT_SOURCE_DIR}/parse_yaml.cpp +${CMAKE_CURRENT_SOURCE_DIR}/parse_yaml.h +${CMAKE_CURRENT_SOURCE_DIR}/Yaml.cpp +${CMAKE_CURRENT_SOURCE_DIR}/Yaml.hpp +PARENT_SCOPE +) # set(SGH_Solver_SRC src/sgh_solver.cpp ) message("\n ****** ADDING PARSE_YAML LIBRARY ******** \n ") -add_library(parse_yaml ${SRC_Files} ) -target_link_libraries(parse_yaml matar Kokkos::kokkos) + +# add_library(parse_yaml ${SRC_Files} ) +# target_link_libraries(parse_yaml matar Kokkos::kokkos) # target_include_directories(sgh_solver PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include) diff --git a/single-node-refactor/src/input/parse_yaml.cpp b/single-node-refactor/src/input/parse_yaml.cpp index d500656e2..894632206 100644 --- a/single-node-refactor/src/input/parse_yaml.cpp +++ b/single-node-refactor/src/input/parse_yaml.cpp @@ -105,6 +105,65 @@ std::vector exact_array_values(std::string s, std::string delimiter return res; } // end of extract_array_values +// Code from stackover flow for string delimiter parsing +std::vector split(std::string s, std::string delimiter) +{ + size_t pos_start = 0, pos_end, delim_len = delimiter.length(); + std::string token; + std::vector res; + + while ((pos_end = s.find(delimiter, pos_start)) != std::string::npos) { + token = s.substr(pos_start, pos_end - pos_start); + pos_start = pos_end + delim_len; + res.push_back(token); + } + + res.push_back(s.substr(pos_start)); + return res; +} // end of split + + +// retrieves multiple values between [ ] +std::vector extract_list(std::string str) +{ + // replace '[' with a space and ']' with a space + std::replace(str.begin(), str.end(), '[', ' '); + std::replace(str.begin(), str.end(), ']', ' '); + + std::vector str_values; + std::vector values; + + // exact the str values into a vector + str_values = split(str, ","); + + // convert the text values into double values + for (auto& word : str_values) + { + values.push_back(atof(word.c_str()) ); + } // end for + + return values; +} // end of extract_list + + +std::string ltrim(const std::string& s) +{ + size_t start = s.find_first_not_of(WHITESPACE); + return (start == std::string::npos) ? "" : s.substr(start); +} + + +std::string rtrim(const std::string& s) +{ + size_t end = s.find_last_not_of(WHITESPACE); + return (end == std::string::npos) ? "" : s.substr(0, end + 1); +} + +std::string trim(const std::string& s) +{ + return rtrim(ltrim(s)); +} + // ================================================================================= // Print a yaml file to 6 levels // ================================================================================= diff --git a/single-node-refactor/src/input/parse_yaml.h b/single-node-refactor/src/input/parse_yaml.h index cb8d9928d..2121e7f72 100644 --- a/single-node-refactor/src/input/parse_yaml.h +++ b/single-node-refactor/src/input/parse_yaml.h @@ -74,6 +74,25 @@ static bool DoesPathExist(const std::string& s) return (stat(s.c_str(), &buffer) == 0); } +// ============================================================================== +// Functions to parse strings +// ============================================================================== +// for string delimiter parsing +std::vector split(std::string s, std::string delimiter); + +// retrieves multiple values between [ ] +std::vector extract_list(std::string str); + +const std::string WHITESPACE = " "; + +std::string ltrim(const std::string& s); + +std::string rtrim(const std::string& s); + +std::string trim(const std::string& s); + + + // for string delimiter parsing std::vector exact_array_values(std::string s, std::string delimiter); diff --git a/single-node-refactor/src/solver.h b/single-node-refactor/src/solver.h index 6ebbcf0a0..bc142285c 100644 --- a/single-node-refactor/src/solver.h +++ b/single-node-refactor/src/solver.h @@ -53,7 +53,7 @@ class Solver public: Solver(); - virtual ~Solver(); + ~Solver(); virtual void initialize(SimulationParameters_t& SimulationParamaters, Material_t& Materials, From 97e2008f8d09df611699fcad81ecd3f3be723719 Mon Sep 17 00:00:00 2001 From: Nathaniel Morgan Date: Mon, 5 Aug 2024 16:40:14 -0600 Subject: [PATCH 106/233] running version of material centric --- single-node-refactor/src/common/region.h | 2 +- single-node-refactor/src/solver.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/single-node-refactor/src/common/region.h b/single-node-refactor/src/common/region.h index 7c8a83da7..d589a440d 100644 --- a/single-node-refactor/src/common/region.h +++ b/single-node-refactor/src/common/region.h @@ -96,7 +96,7 @@ struct reg_fill_t double radius2 = 0.0; ///< Outer radius to fill for sphere // initial conditions - init_conds::init_velocity_conds velocity; ///< Initial conditions for this region WARNING: Currently unimplemented + init_conds::init_velocity_conds velocity; ///< Initial conditions for this region // velocity coefficients by component double u = 0.0; ///< U component of velocity diff --git a/single-node-refactor/src/solver.h b/single-node-refactor/src/solver.h index bc142285c..6ebbcf0a0 100644 --- a/single-node-refactor/src/solver.h +++ b/single-node-refactor/src/solver.h @@ -53,7 +53,7 @@ class Solver public: Solver(); - ~Solver(); + virtual ~Solver(); virtual void initialize(SimulationParameters_t& SimulationParamaters, Material_t& Materials, From f2620c224dd6825018b4268299df20931c26fc4a Mon Sep 17 00:00:00 2001 From: Nathaniel Morgan Date: Mon, 5 Aug 2024 17:05:39 -0600 Subject: [PATCH 107/233] fixing cuda bugs --- .../src/Solvers/SGH_solver/src/properties.cpp | 2 +- single-node-refactor/src/input/parse_yaml.cpp | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/single-node-refactor/src/Solvers/SGH_solver/src/properties.cpp b/single-node-refactor/src/Solvers/SGH_solver/src/properties.cpp index 052625bc1..1724ec12c 100644 --- a/single-node-refactor/src/Solvers/SGH_solver/src/properties.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver/src/properties.cpp @@ -82,7 +82,7 @@ void SGH::update_state( // --- pressure --- - if (Materials.MaterialEnums(mat_id).EOSType == model::decoupledEOSType) { + if (Materials.MaterialEnums.host(mat_id).EOSType == model::decoupledEOSType) { // loop over all the elements the material lives in FOR_ALL(mat_elem_lid, 0, num_material_elems, { diff --git a/single-node-refactor/src/input/parse_yaml.cpp b/single-node-refactor/src/input/parse_yaml.cpp index 894632206..cae8c648b 100644 --- a/single-node-refactor/src/input/parse_yaml.cpp +++ b/single-node-refactor/src/input/parse_yaml.cpp @@ -1611,6 +1611,8 @@ void parse_materials(Yaml::Node& root, Material_t& Materials) RUN({ Materials.MaterialEnums(mat_id).EOSType = model::decoupledEOSType; }); + + Materials.MaterialEnums.host(mat_id).EOSType = model::decoupledEOSType; break; case model::coupledEOSType: @@ -1618,12 +1620,14 @@ void parse_materials(Yaml::Node& root, Material_t& Materials) RUN({ Materials.MaterialEnums(mat_id).EOSType = model::coupledEOSType; }); + Materials.MaterialEnums.host(mat_id).EOSType = model::coupledEOSType; break; default: RUN({ Materials.MaterialEnums(mat_id).EOSType = model::noEOSType; }); + Materials.MaterialEnums.host(mat_id).EOSType = model::noEOSType; std::cout << "ERROR: No valid EOS type input " << std::endl; std::cout << "Valid EOS types are: " << std::endl; @@ -1717,6 +1721,7 @@ void parse_materials(Yaml::Node& root, Material_t& Materials) RUN({ Materials.MaterialEnums(mat_id).StrengthType = model::noStrengthType; }); + Materials.MaterialEnums.host(mat_id).StrengthType = model::noStrengthType; if (VERBOSE) { std::cout << "\tstrength_model_type_type = " << strength_model_type << std::endl; } @@ -1726,6 +1731,7 @@ void parse_materials(Yaml::Node& root, Material_t& Materials) RUN({ Materials.MaterialEnums(mat_id).StrengthType = model::incrementBased; }); + Materials.MaterialEnums.host(mat_id).StrengthType = model::incrementBased; if (VERBOSE) { std::cout << "\tstrength_model_type = " << strength_model_type << std::endl; @@ -1735,6 +1741,8 @@ void parse_materials(Yaml::Node& root, Material_t& Materials) RUN({ Materials.MaterialEnums(mat_id).StrengthType = model::stateBased; }); + Materials.MaterialEnums.host(mat_id).StrengthType = model::stateBased; + std::cout << "ERROR: state_based models not yet defined: " << std::endl; throw std::runtime_error("**** ERROR: state_based models not yet defined ****"); if (VERBOSE) { From 6ba229ff2705783e7c4b0ddeab2aface97465818 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CAdrian-Diaz=E2=80=9D?= <“adriandiaz1117@gmail.com”> Date: Tue, 6 Aug 2024 00:35:14 -0600 Subject: [PATCH 108/233] ENH: allow automatic uncrustify submodule download --- scripts/setup-env.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/setup-env.sh b/scripts/setup-env.sh index 5f1895fc9..5ef15dfc9 100644 --- a/scripts/setup-env.sh +++ b/scripts/setup-env.sh @@ -20,7 +20,7 @@ export installdir=${basedir}/install export devutilsdir=${topdir}/dev-utils -export UNCRUSTIFY_SOURCE_DIR=${devutilsdir}/uncrustify +export UNCRUSTIFY_SOURCE_DIR=${devutilsdir}/uncrustify/src export UNCRUSTIFY_BUILD_DIR=${devutilsdir}/uncrustify/build export UNCRUSTIFY_INSTALL_DIR=${devutilsdir}/uncrustify/build From 25be3de976bf1ee48259f6dd68e4ce3248ffb021 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CAdrian-Diaz=E2=80=9D?= <“adriandiaz1117@gmail.com”> Date: Tue, 6 Aug 2024 09:30:58 -0600 Subject: [PATCH 109/233] ENH: allow automatic submodule downloads on clean build --- scripts/cmake_build.sh | 2 +- scripts/setup-env.sh | 2 +- scripts/uncrustify-install.sh | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/scripts/cmake_build.sh b/scripts/cmake_build.sh index 55c7f49c2..dd6cd480e 100644 --- a/scripts/cmake_build.sh +++ b/scripts/cmake_build.sh @@ -12,7 +12,7 @@ kokkos_build_type="${3}" if { [ ! -d "${ELEMENTS_SOURCE_DIR}/elements" ] || [ ! -d "${ELEMENTS_SOURCE_DIR}/matar/src" ] ;} then echo "Missing submodules, downloading them...." - git submodule update --recursive "${ELEMENTS_SOURCE_DIR}" + git submodule update --init --recursive "${ELEMENTS_SOURCE_DIR}" fi if [ ! -d "${TRILINOS_INSTALL_DIR}/lib" ]; then diff --git a/scripts/setup-env.sh b/scripts/setup-env.sh index 5ef15dfc9..5f1895fc9 100644 --- a/scripts/setup-env.sh +++ b/scripts/setup-env.sh @@ -20,7 +20,7 @@ export installdir=${basedir}/install export devutilsdir=${topdir}/dev-utils -export UNCRUSTIFY_SOURCE_DIR=${devutilsdir}/uncrustify/src +export UNCRUSTIFY_SOURCE_DIR=${devutilsdir}/uncrustify export UNCRUSTIFY_BUILD_DIR=${devutilsdir}/uncrustify/build export UNCRUSTIFY_INSTALL_DIR=${devutilsdir}/uncrustify/build diff --git a/scripts/uncrustify-install.sh b/scripts/uncrustify-install.sh index b0cf694b5..49312555d 100644 --- a/scripts/uncrustify-install.sh +++ b/scripts/uncrustify-install.sh @@ -2,10 +2,10 @@ # Check if the uncrustify build directory exists and is not empty in the parent directory; if not, clone it -if [ ! -d "${UNCRUSTIFY_SOURCE_DIR}" ]; +if [ ! -d "${UNCRUSTIFY_SOURCE_DIR}/src" ]; then echo "Missing Uncrustify submodule, downloading...." - git submodule update ${UNCRUSTIFY_SOURCE_DIR} + git submodule update --init ${UNCRUSTIFY_SOURCE_DIR} fi if [ ! -f "${UNCRUSTIFY_BUILD_DIR}/uncrustify" ]; then From 07745ed8de263a28ae867c8352b56ec725abedfe Mon Sep 17 00:00:00 2001 From: Adrian-Diaz <46537160+Adrian-Diaz@users.noreply.github.com> Date: Wed, 7 Aug 2024 16:35:20 -0600 Subject: [PATCH 110/233] BUG: fix map construction when one rank has 0 entries --- src/Parallel-Solvers/Solver.cpp | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/src/Parallel-Solvers/Solver.cpp b/src/Parallel-Solvers/Solver.cpp index e52ea4947..001d66ef6 100644 --- a/src/Parallel-Solvers/Solver.cpp +++ b/src/Parallel-Solvers/Solver.cpp @@ -3537,11 +3537,10 @@ void Solver::init_maps() // construct distributed element connectivity multivector global_nodes_in_elem_distributed = Teuchos::rcp(new MCONN(all_element_map, dual_nodes_in_elem)); - if (nlocal_elem_non_overlapping >= 1) + // construct map of nodes that belong to the non-overlapping element set (contained by ghost + local node set but not all of them) + std::set nonoverlap_elem_node_set; + if (nlocal_elem_non_overlapping) { - // construct map of nodes that belong to the non-overlapping element set (contained by ghost + local node set but not all of them) - std::set nonoverlap_elem_node_set; - // search through local elements for global node indices not owned by this MPI rank if (num_dim == 2) { @@ -3572,23 +3571,25 @@ void Solver::init_maps() } } } + } - // by now the set contains, with no repeats, all the global node indices belonging to the non overlapping element list on this MPI rank - // now pass the contents of the set over to a CArrayKokkos, then create a map to find local ghost indices from global ghost indices - nnonoverlap_elem_nodes = nonoverlap_elem_node_set.size(); - nonoverlap_elem_nodes = Kokkos::DualView("nonoverlap_elem_nodes", nnonoverlap_elem_nodes); + // by now the set contains, with no repeats, all the global node indices belonging to the non overlapping element list on this MPI rank + // now pass the contents of the set over to a CArrayKokkos, then create a map to find local ghost indices from global ghost indices + nnonoverlap_elem_nodes = nonoverlap_elem_node_set.size(); + nonoverlap_elem_nodes = Kokkos::DualView("nonoverlap_elem_nodes", nnonoverlap_elem_nodes); + if(nnonoverlap_elem_nodes){ int inonoverlap_elem_node = 0; auto it = nonoverlap_elem_node_set.begin(); while (it != nonoverlap_elem_node_set.end()) { nonoverlap_elem_nodes.h_view(inonoverlap_elem_node++) = *it; it++; } - nonoverlap_elem_nodes.modify_host(); nonoverlap_elem_nodes.sync_device(); - // create a Map for ghost node indices - nonoverlap_element_node_map = Teuchos::rcp(new Tpetra::Map(Teuchos::OrdinalTraits::invalid(), nonoverlap_elem_nodes.d_view, 0, comm)); } + + // create a Map for ghost node indices + nonoverlap_element_node_map = Teuchos::rcp(new Tpetra::Map(Teuchos::OrdinalTraits::invalid(), nonoverlap_elem_nodes.d_view, 0, comm)); // std::cout << "number of patches = " << mesh->num_patches() << std::endl; if (myrank == 0) From eb814fd7a5b76eae5a20e0f70e9c55f5ef25b63b Mon Sep 17 00:00:00 2001 From: Adrian-Diaz <46537160+Adrian-Diaz@users.noreply.github.com> Date: Thu, 8 Aug 2024 09:55:10 -0600 Subject: [PATCH 111/233] STYLE: correct comment --- src/Parallel-Solvers/Solver.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Parallel-Solvers/Solver.cpp b/src/Parallel-Solvers/Solver.cpp index 001d66ef6..71143f055 100644 --- a/src/Parallel-Solvers/Solver.cpp +++ b/src/Parallel-Solvers/Solver.cpp @@ -3587,8 +3587,8 @@ void Solver::init_maps() nonoverlap_elem_nodes.modify_host(); nonoverlap_elem_nodes.sync_device(); } - - // create a Map for ghost node indices + + // create a Map for node indices belonging to the non-overlapping set of elements nonoverlap_element_node_map = Teuchos::rcp(new Tpetra::Map(Teuchos::OrdinalTraits::invalid(), nonoverlap_elem_nodes.d_view, 0, comm)); // std::cout << "number of patches = " << mesh->num_patches() << std::endl; From d0ea373cc660f7c8ae9d6c2dd77bcda58af077eb Mon Sep 17 00:00:00 2001 From: Jacob Moore <133793250+jacob-moore22@users.noreply.github.com> Date: Fri, 9 Aug 2024 12:07:47 -0500 Subject: [PATCH 112/233] ENH: Adding state dump and regression tests (#215) --- .../regression_tests/plot_state.py | 44 + .../regression_tests/standard_inputs/Noh.yaml | 70 + .../standard_inputs/Sedov.yaml | 95 + .../standard_inputs/Sedov_Erosion.yaml | 126 ++ .../standard_inputs/Sod_X.yaml | 115 ++ .../standard_inputs/Sod_Y.yaml | 115 ++ .../standard_inputs/Sod_Z.yaml | 115 ++ .../Sedov/state/mat_pt_state_t_1.0000e+00.txt | 1730 +++++++++++++++++ .../state/mat_pt_state_t_4.2500e+00.txt | 1730 +++++++++++++++++ .../Sod_X/state/mat_pt_state_t_1.5000e-01.txt | 102 + .../Sod_Y/state/mat_pt_state_t_1.5000e-01.txt | 102 + .../Sod_Z/state/mat_pt_state_t_1.5000e-01.txt | 102 + .../regression_tests/test_refactor.py | 102 + single-node-refactor/src/common/io_utils.h | 154 +- .../src/common/output_options.h | 4 +- 15 files changed, 4699 insertions(+), 7 deletions(-) create mode 100644 single-node-refactor/regression_tests/plot_state.py create mode 100644 single-node-refactor/regression_tests/standard_inputs/Noh.yaml create mode 100644 single-node-refactor/regression_tests/standard_inputs/Sedov.yaml create mode 100644 single-node-refactor/regression_tests/standard_inputs/Sedov_Erosion.yaml create mode 100644 single-node-refactor/regression_tests/standard_inputs/Sod_X.yaml create mode 100644 single-node-refactor/regression_tests/standard_inputs/Sod_Y.yaml create mode 100644 single-node-refactor/regression_tests/standard_inputs/Sod_Z.yaml create mode 100644 single-node-refactor/regression_tests/standard_results/Sedov/state/mat_pt_state_t_1.0000e+00.txt create mode 100644 single-node-refactor/regression_tests/standard_results/Sedov_Erosion/state/mat_pt_state_t_4.2500e+00.txt create mode 100644 single-node-refactor/regression_tests/standard_results/Sod_X/state/mat_pt_state_t_1.5000e-01.txt create mode 100644 single-node-refactor/regression_tests/standard_results/Sod_Y/state/mat_pt_state_t_1.5000e-01.txt create mode 100644 single-node-refactor/regression_tests/standard_results/Sod_Z/state/mat_pt_state_t_1.5000e-01.txt create mode 100644 single-node-refactor/regression_tests/test_refactor.py diff --git a/single-node-refactor/regression_tests/plot_state.py b/single-node-refactor/regression_tests/plot_state.py new file mode 100644 index 000000000..8c730f689 --- /dev/null +++ b/single-node-refactor/regression_tests/plot_state.py @@ -0,0 +1,44 @@ +#!/usr/bin/python3 +import sys +import matplotlib +import matplotlib.pyplot as plt + +# Check if the file path is provided as a command-line argument +if len(sys.argv) < 2: + print("Usage: python script.py ") + sys.exit(1) + +file_path = sys.argv[1] + +# Ensure the file exists before proceeding +try: + with open(file_path, 'r') as file: + lines = file.readlines() +except FileNotFoundError: + print("The file was not found at the specified location.") + sys.exit(1) + +# Skip the first two lines assuming it's a header +lines = lines[2:] + + +# Parse the data +data = [] +for line in lines: + values = line.rstrip().split('\t') + values = [float(val) for val in values] + data.append(values) + + +# Extract the radius_3D column for the X-axis +x_values = [row[4] for row in data] +y_values = [row[5] for row in data] + + + +plt.plot(x_values, y_values, 'x') +plt.title(f'Density') +plt.xlabel('Radius 3D') +plt.ylabel(f'Density') +plt.savefig(f"test.png", dpi=300) + diff --git a/single-node-refactor/regression_tests/standard_inputs/Noh.yaml b/single-node-refactor/regression_tests/standard_inputs/Noh.yaml new file mode 100644 index 000000000..7a630aeaa --- /dev/null +++ b/single-node-refactor/regression_tests/standard_inputs/Noh.yaml @@ -0,0 +1,70 @@ +num_dims: 3 +dynamic_options: + time_final: 0.6 + dt_min: 1.e-8 + dt_max: 1.e-2 + dt_start: 1.e-5 + cycle_stop: 2000000 + +mesh_generation_options: + type: Box + origin: [0, 0, 0] + length: [1.0, 1.0, 1.0] + num_elems: [10, 10, 10] + +output_options: + timer_output_level: thorough + output_file_format: vtk + graphics_step: 0.6 + write_initial: false + write_final: true + + +fea_module_parameters: + - type: SGH + material_id: 0 + boundary_conditions: + # Tag X plane + - surface: + type: x_plane + plane_position: 0.0 + type: reflected + + # Tag Y plane + - surface: + type: y_plane + plane_position: 0.0 + type: reflected + + # Tag Z plane + - surface: + type: z_plane + plane_position: 0.0 + type: reflected + + +materials: + - id: 0 + eos_model: ideal_gas + strength_model: none + elastic_modulus: 10 + poisson_ratio: 0.3 + q1: 1.0 + q2: 1.333 + q1ex: 1.0 + q2ex: 0.0 + eos_global_vars: + - 1.666666666666667 + - 1.0E-14 + - 1.0 + +regions: + - volume: + type: global + material_id: 0 + den: 1.0 + sie: 1.e-10 + + velocity: spherical + speed: -1.0 + \ No newline at end of file diff --git a/single-node-refactor/regression_tests/standard_inputs/Sedov.yaml b/single-node-refactor/regression_tests/standard_inputs/Sedov.yaml new file mode 100644 index 000000000..07bb127da --- /dev/null +++ b/single-node-refactor/regression_tests/standard_inputs/Sedov.yaml @@ -0,0 +1,95 @@ +# Sedov Test Problem + +dynamic_options: + time_final: 1.0 + dt_min: 1.e-8 + dt_max: 1.e-2 + dt_start: 1.e-5 + cycle_stop: 300000 + +mesh_options: + source: generate + num_dims: 3 + type: Box + origin: [0.0, 0.0, 0.0] + length: [1.2, 1.2, 1.2] + num_elems: [12, 12, 12] + + +output_options: + timer_output_level: thorough + output_file_format: state + graphics_time_step: 1.0 + +solver_options: + - solver: + method: SGH + +boundary_conditions: + # Tag X plane + - boundary_condition: + solver: SGH + geometry: x_plane + direction: x_dir + value: 0.0 + type: reflected_velocity + + + # Tag Y plane + - boundary_condition: + solver: SGH + geometry: y_plane + direction: y_dir + value: 0.0 + type: reflected_velocity + + # Tag z plane + - boundary_condition: + solver: SGH + geometry: z_plane + direction: z_dir + value: 0.0 + type: reflected_velocity + +materials: + - material: + id: 0 + eos_model_type: decoupled + eos_model: gamma_law_gas + q1: 1.0 + q2: 1.333 + q1ex: 1.0 + q2ex: 1.333 + eos_global_vars: + - 1.666666666666667 + - 1.0E-14 + - 1.0 + +regions: + - fill_volume: + type: global + material_id: 0 + den: 1.0 + sie: 1.e-14 + velocity: cartesian + u: 0.0 + v: 0.0 + w: 0.0 + + + + # energy source initial conditions + - fill_volume: + type: sphere + origin: [0.0, 0.0, 0.0] + radius1: 0.0 + radius2: 0.1 + material_id: 0 + den: 1.0 + sie: 61.67375002 + velocity: cartesian + u: 0.0 + v: 0.0 + w: 0.0 + + diff --git a/single-node-refactor/regression_tests/standard_inputs/Sedov_Erosion.yaml b/single-node-refactor/regression_tests/standard_inputs/Sedov_Erosion.yaml new file mode 100644 index 000000000..d62868284 --- /dev/null +++ b/single-node-refactor/regression_tests/standard_inputs/Sedov_Erosion.yaml @@ -0,0 +1,126 @@ +# num_dims: 3 + +dynamic_options: + time_final: 4.25 + dt_min: 1.e-8 + dt_max: 1.e-2 + dt_start: 1.e-5 + cycle_stop: 30000 + + +# mesh_options: +# source: file +# file_path: /var/tmp/repos/Fierro/fork/Fierro/testing/meshes/mesh_Sedov_8.geo + +mesh_options: + source: generate + num_dims: 3 + type: Box + origin: [0.0, 0.0, 0.0] + length: [1.2, 1.2, 1.2] + num_elems: [12, 12, 12] + + +output_options: + timer_output_level: thorough + output_file_format: state + graphics_time_step: 4.25 + # graphics_iteration_step: 10 + +solver_options: + - solver: + method: SGH + # solver_vars: + # - blah + # - blah + # - blah + +boundary_conditions: + # Tag X plane + - boundary_condition: + solver: SGH + geometry: x_plane + direction: x_dir + value: 0.0 + u: 0.0 + v: 0.0 + w: 1.0 + type: reflected_velocity + + + # Tag Y plane + - boundary_condition: + solver: SGH + geometry: y_plane + direction: y_dir + value: 0.0 + type: reflected_velocity + + # Tag z plane + - boundary_condition: + solver: SGH + geometry: z_plane + direction: z_dir + value: 0.0 + type: reflected_velocity + +materials: + - material: + id: 0 + eos_model_type: decoupled + eos_model: gamma_law_gas + # strength_model: none + q1: 1.0 + q2: 1.333 + q1ex: 1.0 + q2ex: 1.333 + eos_global_vars: + - 1.666666666666667 + - 1.0E-14 + - 1.0 + erosion_model: basic + erode_tension_val: 0.00003 + erode_density_val: 0.02 + + + - material: + id: 1 + eos_model_type: decoupled + eos_model: gamma_law_gas + # strength_model: none + q1: 1.0 + q2: 1.333 + q1ex: 1.0 + q2ex: 1.333 + eos_global_vars: + - 1.666666666666667 + - 1.0E-14 + - 1.0 + +regions: + - fill_volume: + type: global + material_id: 0 + den: 1.0 + sie: 0.001 + velocity: cartesian + u: 0.0 + v: 0.0 + w: 0.0 + + + + # energy source initial conditions + - fill_volume: + type: sphere + origin: [0.0, 0.0, 0.0] + radius1: 0.0 + radius2: 0.1 + material_id: 0 + den: 1.0 + # ie: 0.25833839995946534 + sie: 61.67375002 # 963.652344 + velocity: cartesian + u: 0.0 + v: 0.0 + w: 0.0 \ No newline at end of file diff --git a/single-node-refactor/regression_tests/standard_inputs/Sod_X.yaml b/single-node-refactor/regression_tests/standard_inputs/Sod_X.yaml new file mode 100644 index 000000000..0a4a71116 --- /dev/null +++ b/single-node-refactor/regression_tests/standard_inputs/Sod_X.yaml @@ -0,0 +1,115 @@ +# Sod problem in X + +dynamic_options: + time_final: 0.15 + dt_min: 1.e-8 + dt_max: 1.e-2 + dt_start: 1.e-5 + cycle_stop: 2000000 + +mesh_options: + source: generate + num_dims: 3 + type: Box + origin: [0, 0, 0] + length: [1.0, 0.01, 0.01] + num_elems: [100, 1, 1] + +output_options: + timer_output_level: thorough + output_file_format: state + graphics_time_step: 0.15 + +solver_options: + - solver: + method: SGH + +boundary_conditions: + # Tag X=0 plane + - boundary_condition: + solver: SGH + geometry: x_plane + direction: x_dir + value: 0.0 + type: reflected_velocity + + + # Tag Y=0 plane + - boundary_condition: + solver: SGH + geometry: y_plane + direction: y_dir + value: 0.0 + type: reflected_velocity + + # Tag z=0 plane + - boundary_condition: + solver: SGH + geometry: z_plane + direction: z_dir + value: 0.0 + type: reflected_velocity + + + # Tag X=1 plane + - boundary_condition: + solver: SGH + geometry: x_plane + direction: x_dir + value: 1.0 + type: reflected_velocity + + + # Tag Y=0.01 plane + - boundary_condition: + solver: SGH + geometry: y_plane + direction: y_dir + value: 0.01 + type: reflected_velocity + + # Tag z=0.01 plane + - boundary_condition: + solver: SGH + geometry: z_plane + direction: z_dir + value: 0.01 + type: reflected_velocity + + +materials: + - material: + id: 0 + eos_model_type: decoupled + eos_model: gamma_law_gas + q1: 1.0 + q2: 1.333 + q1ex: 1.0 + q2ex: 1.333 + eos_global_vars: + - 1.666666666666667 + - 1.0E-14 + - 1.0 + +regions: + - fill_volume: + type: global + material_id: 0 + den: 1.0 + sie: 2.5 + velocity: cartesian + u: 0.0 + v: 0.0 + w: 0.0 + + - fill_volume: + type: box + x1: 0.5 + x2: 1.0 + y1: 0.0 + y2: 0.01 + z1: 0.0 + z2: 0.01 + material_id: 0 + den: 0.125 + sie: 2 diff --git a/single-node-refactor/regression_tests/standard_inputs/Sod_Y.yaml b/single-node-refactor/regression_tests/standard_inputs/Sod_Y.yaml new file mode 100644 index 000000000..db5e90363 --- /dev/null +++ b/single-node-refactor/regression_tests/standard_inputs/Sod_Y.yaml @@ -0,0 +1,115 @@ +# Sod problem in Y + +dynamic_options: + time_final: 0.15 + dt_min: 1.e-8 + dt_max: 1.e-2 + dt_start: 1.e-5 + cycle_stop: 2000000 + +mesh_options: + source: generate + num_dims: 3 + type: Box + origin: [0, 0, 0] + length: [0.01, 1.0, 0.01] + num_elems: [1, 100, 1] + +output_options: + timer_output_level: thorough + output_file_format: state + graphics_time_step: 0.15 + +solver_options: + - solver: + method: SGH + +boundary_conditions: + # Tag X=0 plane + - boundary_condition: + solver: SGH + geometry: x_plane + direction: x_dir + value: 0.0 + type: reflected_velocity + + + # Tag Y=0 plane + - boundary_condition: + solver: SGH + geometry: y_plane + direction: y_dir + value: 0.0 + type: reflected_velocity + + # Tag z=0 plane + - boundary_condition: + solver: SGH + geometry: z_plane + direction: z_dir + value: 0.0 + type: reflected_velocity + + + # Tag X=0.01 plane + - boundary_condition: + solver: SGH + geometry: x_plane + direction: x_dir + value: 0.01 + type: reflected_velocity + + + # Tag Y=1.0 plane + - boundary_condition: + solver: SGH + geometry: y_plane + direction: y_dir + value: 1.0 + type: reflected_velocity + + # Tag z=0.01 plane + - boundary_condition: + solver: SGH + geometry: z_plane + direction: z_dir + value: 0.01 + type: reflected_velocity + + +materials: + - material: + id: 0 + eos_model_type: decoupled + eos_model: gamma_law_gas + q1: 1.0 + q2: 1.333 + q1ex: 1.0 + q2ex: 1.333 + eos_global_vars: + - 1.666666666666667 + - 1.0E-14 + - 1.0 + +regions: + - fill_volume: + type: global + material_id: 0 + den: 1.0 + sie: 2.5 + velocity: cartesian + u: 0.0 + v: 0.0 + w: 0.0 + + - fill_volume: + type: box + x1: 0.0 + x2: 0.01 + y1: 0.5 + y2: 1.0 + z1: 0.0 + z2: 0.01 + material_id: 0 + den: 0.125 + sie: 2 diff --git a/single-node-refactor/regression_tests/standard_inputs/Sod_Z.yaml b/single-node-refactor/regression_tests/standard_inputs/Sod_Z.yaml new file mode 100644 index 000000000..0de7c0196 --- /dev/null +++ b/single-node-refactor/regression_tests/standard_inputs/Sod_Z.yaml @@ -0,0 +1,115 @@ +# Sod problem in Z + +dynamic_options: + time_final: 0.15 + dt_min: 1.e-8 + dt_max: 1.e-2 + dt_start: 1.e-5 + cycle_stop: 2000000 + +mesh_options: + source: generate + num_dims: 3 + type: Box + origin: [0, 0, 0] + length: [0.01, 0.01, 1.0] + num_elems: [1, 1, 100] + +output_options: + timer_output_level: thorough + output_file_format: state + graphics_time_step: 0.15 + +solver_options: + - solver: + method: SGH + +boundary_conditions: + # Tag X=0 plane + - boundary_condition: + solver: SGH + geometry: x_plane + direction: x_dir + value: 0.0 + type: reflected_velocity + + + # Tag Y=0 plane + - boundary_condition: + solver: SGH + geometry: y_plane + direction: y_dir + value: 0.0 + type: reflected_velocity + + # Tag z=0 plane + - boundary_condition: + solver: SGH + geometry: z_plane + direction: z_dir + value: 0.0 + type: reflected_velocity + + + # Tag X=0.01 plane + - boundary_condition: + solver: SGH + geometry: x_plane + direction: x_dir + value: 0.01 + type: reflected_velocity + + + # Tag Y=0.01 plane + - boundary_condition: + solver: SGH + geometry: y_plane + direction: y_dir + value: 0.01 + type: reflected_velocity + + # Tag z=1.0 plane + - boundary_condition: + solver: SGH + geometry: z_plane + direction: z_dir + value: 1.0 + type: reflected_velocity + + +materials: + - material: + id: 0 + eos_model_type: decoupled + eos_model: gamma_law_gas + q1: 1.0 + q2: 1.333 + q1ex: 1.0 + q2ex: 1.333 + eos_global_vars: + - 1.666666666666667 + - 1.0E-14 + - 1.0 + +regions: + - fill_volume: + type: global + material_id: 0 + den: 1.0 + sie: 2.5 + velocity: cartesian + u: 0.0 + v: 0.0 + w: 0.0 + + - fill_volume: + type: box + x1: 0.0 + x2: 0.01 + y1: 0.0 + y2: 0.01 + z1: 0.5 + z2: 1.0 + material_id: 0 + den: 0.125 + sie: 2 diff --git a/single-node-refactor/regression_tests/standard_results/Sedov/state/mat_pt_state_t_1.0000e+00.txt b/single-node-refactor/regression_tests/standard_results/Sedov/state/mat_pt_state_t_1.0000e+00.txt new file mode 100644 index 000000000..54789e9d3 --- /dev/null +++ b/single-node-refactor/regression_tests/standard_results/Sedov/state/mat_pt_state_t_1.0000e+00.txt @@ -0,0 +1,1730 @@ +# state dump file +# x y z radius_2D radius_3D den pres sie sspd vol mass +2.111384728416e-01 2.111384728416e-01 2.111384728416e-01 2.985948918313e-01 3.657025623941e-01 1.379240620115e-02 5.596595715891e-02 6.086605521476e+00 2.600556675764e+00 7.250366509048e-02 1.000000000000e-03 +4.986041859295e-01 1.556079537626e-01 1.556079537626e-01 5.223217107306e-01 5.450080777152e-01 8.131537195050e-02 5.582898566849e-02 1.029860363348e+00 1.069714584648e+00 1.229779777197e-02 1.000000000000e-03 +6.137371061926e-01 1.131703138454e-01 1.131703138454e-01 6.240839330199e-01 6.342619927044e-01 2.638086680404e-01 5.792836927854e-02 3.293771753720e-01 6.049583781569e-01 3.790626014785e-03 1.000000000000e-03 +6.838961549190e-01 8.976360151738e-02 8.976360151738e-02 6.897618827323e-01 6.955781473190e-01 5.064217343503e-01 6.134444706088e-02 1.816996869405e-01 4.493200875156e-01 1.974638788525e-03 1.000000000000e-03 +7.424612895242e-01 7.542437546435e-02 7.542437546435e-02 7.462825221430e-01 7.500842881106e-01 8.179881381646e-01 6.905276598682e-02 1.266267127206e-01 3.750951178932e-01 1.222511615197e-03 1.000000000000e-03 +7.937576001006e-01 6.644569409731e-02 6.644569409731e-02 7.965338398220e-01 7.993004367856e-01 1.186468144951e+00 7.738818502229e-02 9.783851174378e-02 3.297111728363e-01 8.428376305384e-04 1.000000000000e-03 +8.368912757338e-01 6.030904128347e-02 6.030904128347e-02 8.390614922995e-01 8.412261101038e-01 1.820710160826e+00 1.023063385308e-01 8.428552281297e-02 3.060238240780e-01 5.492362384280e-04 1.000000000000e-03 +8.720444048488e-01 5.572124365623e-02 5.572124365623e-02 8.738228087105e-01 8.755976005091e-01 2.521879781072e+00 1.192745692405e-01 7.094384720616e-02 2.807605686270e-01 3.965296075989e-04 1.000000000000e-03 +9.050045778159e-01 5.225430802937e-02 5.225430802937e-02 9.065118855124e-01 9.080166910817e-01 2.728304917513e+00 9.192242022357e-02 5.053820394130e-02 2.369674237839e-01 3.665279469244e-04 1.000000000000e-03 +9.613635871544e-01 5.041660685549e-02 5.041660685549e-02 9.626846736877e-01 9.640039497845e-01 1.245124796664e+00 2.292758827239e-03 2.762083166339e-03 5.539838712393e-02 8.031323467970e-04 1.000000000000e-03 +1.050433724972e+00 5.001324706222e-02 5.001324706222e-02 1.051623666261e+00 1.052812262619e+00 1.008195500791e+00 3.985499055994e-07 5.929652115392e-07 8.116959005955e-04 9.918711194564e-04 1.000000000000e-03 +1.150000514128e+00 5.000001080617e-02 5.000001080617e-02 1.151086957435e+00 1.152172376277e+00 1.000009850389e+00 8.044775290098e-15 1.206704407007e-14 1.157921704802e-07 9.999901497079e-04 1.000000000000e-03 +1.556079537626e-01 4.986041859295e-01 1.556079537626e-01 5.223217107306e-01 5.450080777152e-01 8.131537195050e-02 5.582898566849e-02 1.029860363348e+00 1.069714584648e+00 1.229779777197e-02 1.000000000000e-03 +4.162380262134e-01 4.162380262134e-01 1.363044969890e-01 5.886494618463e-01 6.042243828508e-01 1.127115642854e-01 5.691439888836e-02 7.574342426512e-01 9.173841087275e-01 8.872204075421e-03 1.000000000000e-03 +5.758958487508e-01 3.278392772666e-01 1.097088060936e-01 6.626723325499e-01 6.716923718947e-01 2.682218103749e-01 5.746247489267e-02 3.213523621309e-01 5.975434546084e-01 3.728257588755e-03 1.000000000000e-03 +6.660562392983e-01 2.643282308460e-01 8.844550332267e-02 7.165893716281e-01 7.220269625079e-01 5.357863057219e-01 6.224265057545e-02 1.742559950975e-01 4.400201953667e-01 1.866415750684e-03 1.000000000000e-03 +7.306452916534e-01 2.239908712682e-01 7.470252492774e-02 7.642083829864e-01 7.678508447982e-01 8.494312899517e-01 6.877917708729e-02 1.214562812218e-01 3.673573513348e-01 1.177258257177e-03 1.000000000000e-03 +7.841651042628e-01 1.977678592834e-01 6.595862237839e-02 8.087193808170e-01 8.114046935870e-01 1.261327154600e+00 7.989063499718e-02 9.500782731802e-02 3.249065289827e-01 7.928157229891e-04 1.000000000000e-03 +8.281765694363e-01 1.796790031695e-01 5.990261940083e-02 8.474437883089e-01 8.495582959129e-01 1.896550205542e+00 1.030828981047e-01 8.152926650993e-02 3.009785273071e-01 5.272731494678e-04 1.000000000000e-03 +8.640637006176e-01 1.661359837768e-01 5.537185756696e-02 8.798904726331e-01 8.816310375894e-01 2.643202165254e+00 1.212656952248e-01 6.881749161237e-02 2.765210291629e-01 3.783289879017e-04 1.000000000000e-03 +8.994054513162e-01 1.561138799607e-01 5.203310211813e-02 9.128536078549e-01 9.143353613909e-01 2.496311647939e+00 7.201763651944e-02 4.327442643963e-02 2.192776688221e-01 4.005910082683e-04 1.000000000000e-03 +9.595381845835e-01 1.510549173085e-01 5.035080953602e-02 9.713552983934e-01 9.726594058240e-01 1.202944594339e+00 1.529153286124e-03 1.906762738682e-03 4.602852664601e-02 8.312934815998e-04 1.000000000000e-03 +1.050330492593e+00 1.500301947207e-01 5.001004310366e-02 1.060991613067e+00 1.062169575637e+00 1.006363910418e+00 2.234219631335e-07 3.330136755012e-07 6.082887431158e-04 9.936763328330e-04 1.000000000000e-03 +1.150000352537e+00 1.500000223935e-01 5.000000738592e-02 1.159741702947e+00 1.160819029088e+00 1.000006887425e+00 7.478462217353e-15 1.121761606554e-14 1.116423658411e-07 9.999931126224e-04 1.000000000000e-03 +1.131703138454e-01 6.137371061926e-01 1.131703138454e-01 6.240839330199e-01 6.342619927044e-01 2.638086680404e-01 5.792836927854e-02 3.293771753720e-01 6.049583781569e-01 3.790626014785e-03 1.000000000000e-03 +3.278392772666e-01 5.758958487508e-01 1.097088060936e-01 6.626723325499e-01 6.716923718947e-01 2.682218103749e-01 5.746247489267e-02 3.213523621309e-01 5.975434546084e-01 3.728257588755e-03 1.000000000000e-03 +5.041100433501e-01 5.041100433501e-01 9.923475840416e-02 7.129192602342e-01 7.197926151944e-01 3.379083203226e-01 6.031352092455e-02 2.677361756007e-01 5.454215246544e-01 2.959382589471e-03 1.000000000000e-03 +6.253081181100e-01 4.263076141900e-01 8.527989115402e-02 7.568014432403e-01 7.615911529987e-01 5.716292183752e-01 6.204758627383e-02 1.628177434234e-01 4.253335206680e-01 1.749385734414e-03 1.000000000000e-03 +7.048596943450e-01 3.658406648551e-01 7.329289634217e-02 7.941451887242e-01 7.975201749348e-01 9.206458701331e-01 6.852418249732e-02 1.116458315629e-01 3.522086369736e-01 1.086193977990e-03 1.000000000000e-03 +7.638753060881e-01 3.245982364499e-01 6.495373728911e-02 8.299816253132e-01 8.325193609433e-01 1.397474043835e+00 8.293075983167e-02 8.901499122385e-02 3.144925210626e-01 7.155767968727e-04 1.000000000000e-03 +8.105725329509e-01 2.954621784981e-01 5.909429775812e-02 8.627431425965e-01 8.647646304775e-01 2.035400051222e+00 1.016923323020e-01 7.494276044725e-02 2.885649559983e-01 4.913039082414e-04 1.000000000000e-03 +8.484842053663e-01 2.735900348858e-01 5.469883311741e-02 8.915026382153e-01 8.931791065006e-01 2.833362887582e+00 1.208805281613e-01 6.399490620727e-02 2.666560543873e-01 3.529374950109e-04 1.000000000000e-03 +8.891817580921e-01 2.581916788083e-01 5.162788821219e-02 9.259088194469e-01 9.273470659741e-01 2.098397227317e+00 4.191673677063e-02 2.996339507955e-02 1.824627666114e-01 4.765541943069e-04 1.000000000000e-03 +9.565745672447e-01 2.512219208086e-01 5.024304275092e-02 9.890133245787e-01 9.902887051457e-01 1.138338085681e+00 6.514533715183e-04 8.584269204109e-04 3.088377712239e-02 8.784736385252e-04 1.000000000000e-03 +1.050187292846e+00 2.500283957581e-01 5.000563419205e-02 1.079540434046e+00 1.080697974548e+00 1.003751619848e+00 6.106323594557e-08 9.125250919370e-08 3.184205974523e-04 9.962624021983e-04 1.000000000000e-03 +1.150000161354e+00 2.500000173475e-01 5.000000335783e-02 1.176860390951e+00 1.177922060293e+00 1.000003276470e+00 6.809582461824e-15 1.021434022575e-14 1.065329381811e-07 9.999967235404e-04 1.000000000000e-03 +8.976360151738e-02 6.838961549190e-01 8.976360151738e-02 6.897618827323e-01 6.955781473190e-01 5.064217343503e-01 6.134444706088e-02 1.816996869405e-01 4.493200875156e-01 1.974638788525e-03 1.000000000000e-03 +2.643282308460e-01 6.660562392983e-01 8.844550332267e-02 7.165893716281e-01 7.220269625079e-01 5.357863057219e-01 6.224265057545e-02 1.742559950975e-01 4.400201953667e-01 1.866415750684e-03 1.000000000000e-03 +4.263076141900e-01 6.253081181100e-01 8.527989115402e-02 7.568014432403e-01 7.615911529987e-01 5.716292183752e-01 6.204758627383e-02 1.628177434234e-01 4.253335206680e-01 1.749385734414e-03 1.000000000000e-03 +5.630648087087e-01 5.630648087087e-01 7.891960376430e-02 7.962938889709e-01 8.001951396195e-01 7.013999936722e-01 6.578151852358e-02 1.406790400279e-01 3.953606511471e-01 1.425720001457e-03 1.000000000000e-03 +6.628716196895e-01 4.969186924950e-01 7.072018897600e-02 8.284485325841e-01 8.314615542943e-01 1.034388147104e+00 7.004321222711e-02 1.015719472761e-01 3.359430296875e-01 9.667550839590e-04 1.000000000000e-03 +7.322726967489e-01 4.438962276043e-01 6.338159151936e-02 8.563102027217e-01 8.586526593616e-01 1.576292409329e+00 8.532994818551e-02 8.119998644968e-02 3.003701169662e-01 6.344000605989e-04 1.000000000000e-03 +7.842642140560e-01 4.052982094955e-01 5.785964697203e-02 8.828006547738e-01 8.846947127777e-01 2.261178909548e+00 1.022080053113e-01 6.780180343958e-02 2.744728350039e-01 4.422471816702e-04 1.000000000000e-03 +8.265940334940e-01 3.764470266887e-01 5.374510938188e-02 9.082786247130e-01 9.098673512623e-01 2.830032831454e+00 1.032820716221e-01 5.474251242289e-02 2.466272770867e-01 3.533527911357e-04 1.000000000000e-03 +8.765470342601e-01 3.579497548144e-01 5.112215598374e-02 9.468171577670e-01 9.481962903716e-01 1.676016033909e+00 1.727129957706e-02 1.545745914206e-02 1.310532510176e-01 5.966530031743e-04 1.000000000000e-03 +9.535695696354e-01 3.509374039509e-01 5.013266291702e-02 1.016096445042e+00 1.017332428225e+00 1.076104499193e+00 1.603336170470e-04 2.234917015502e-04 1.575830298076e-02 9.292777799459e-04 1.000000000000e-03 +1.050075302017e+00 3.500159366535e-01 5.000223109000e-02 1.106873658471e+00 1.108002490490e+00 1.001601459830e+00 6.366458072343e-09 9.534418120891e-09 1.029261770013e-04 9.984011007429e-04 1.000000000000e-03 +1.150000046297e+00 3.500000071517e-01 5.000000095303e-02 1.202081574390e+00 1.203120987924e+00 1.000000994246e+00 6.672725087915e-15 1.000907768038e-14 1.054570880626e-07 9.999990057546e-04 1.000000000000e-03 +7.542437546435e-02 7.424612895242e-01 7.542437546435e-02 7.462825221430e-01 7.500842881106e-01 8.179881381646e-01 6.905276598682e-02 1.266267127206e-01 3.750951178932e-01 1.222511615197e-03 1.000000000000e-03 +2.239908712682e-01 7.306452916534e-01 7.470252492774e-02 7.642083829864e-01 7.678508447982e-01 8.494312899517e-01 6.877917708729e-02 1.214562812218e-01 3.673573513348e-01 1.177258257177e-03 1.000000000000e-03 +3.658406648551e-01 7.048596943450e-01 7.329289634217e-02 7.941451887242e-01 7.975201749348e-01 9.206458701331e-01 6.852418249732e-02 1.116458315629e-01 3.522086369736e-01 1.086193977990e-03 1.000000000000e-03 +4.969186924950e-01 6.628716196895e-01 7.072018897600e-02 8.284485325841e-01 8.314615542943e-01 1.034388147104e+00 7.004321222711e-02 1.015719472761e-01 3.359430296875e-01 9.667550839590e-04 1.000000000000e-03 +6.078004668432e-01 6.078004668432e-01 6.638451431871e-02 8.595596634263e-01 8.621193181520e-01 1.304682329318e+00 8.023298927578e-02 9.224428139271e-02 3.201462884244e-01 7.664701035102e-04 1.000000000000e-03 +6.905713784738e-01 5.521404294063e-01 6.103977755288e-02 8.841650765282e-01 8.862695622641e-01 1.801599573959e+00 8.620318092521e-02 7.177220357778e-02 2.823949235808e-01 5.550622982235e-04 1.000000000000e-03 +7.505642413106e-01 5.066842425221e-01 5.619544087562e-02 9.055802570475e-01 9.073221751558e-01 2.541665347163e+00 1.017111211223e-01 6.002626657899e-02 2.582554002425e-01 3.934428272063e-04 1.000000000000e-03 +8.012985423787e-01 4.738636551491e-01 5.260485693140e-02 9.309275577023e-01 9.324126707967e-01 2.359527747150e+00 5.886195745259e-02 3.741974905170e-02 2.039056128368e-01 4.238136216910e-04 1.000000000000e-03 +8.645660897219e-01 4.558013370506e-01 5.063245327525e-02 9.773583694603e-01 9.786690082345e-01 1.348037512704e+00 4.671258719988e-03 5.197843542147e-03 7.599593221678e-02 7.418191189606e-04 1.000000000000e-03 +9.514363088533e-01 4.504901828009e-01 5.005357167828e-02 1.052697703334e+00 1.053887002786e+00 1.032281486974e+00 1.842448040133e-05 2.677246560238e-05 5.454097909155e-03 9.687280190706e-04 1.000000000000e-03 +1.050019962653e+00 4.500054502267e-01 5.000057964117e-02 1.142386461406e+00 1.143480163872e+00 1.000458122364e+00 1.992087600098e-10 2.986763097177e-10 1.821709544228e-05 9.995420874164e-04 1.000000000000e-03 +1.150000007379e+00 4.500000015283e-01 5.000000014927e-02 1.234908910952e+00 1.235920716859e+00 1.000000169692e+00 6.666717512707e-15 1.000007457212e-14 1.054096483678e-07 9.999998303076e-04 1.000000000000e-03 +6.644569409731e-02 7.937576001006e-01 6.644569409731e-02 7.965338398220e-01 7.993004367856e-01 1.186468144951e+00 7.738818502229e-02 9.783851174378e-02 3.297111728363e-01 8.428376305384e-04 1.000000000000e-03 +1.977678592834e-01 7.841651042628e-01 6.595862237839e-02 8.087193808170e-01 8.114046935870e-01 1.261327154600e+00 7.989063499718e-02 9.500782731802e-02 3.249065289827e-01 7.928157229891e-04 1.000000000000e-03 +3.245982364499e-01 7.638753060881e-01 6.495373728911e-02 8.299816253132e-01 8.325193609433e-01 1.397474043835e+00 8.293075983168e-02 8.901499122385e-02 3.144925210626e-01 7.155767968727e-04 1.000000000000e-03 +4.438962276043e-01 7.322726967488e-01 6.338159151936e-02 8.563102027217e-01 8.586526593616e-01 1.576292409329e+00 8.532994818551e-02 8.119998644968e-02 3.003701169662e-01 6.344000605989e-04 1.000000000000e-03 +5.521404294063e-01 6.905713784738e-01 6.103977755288e-02 8.841650765282e-01 8.862695622641e-01 1.801599573959e+00 8.620318092521e-02 7.177220357778e-02 2.823949235808e-01 5.550622982235e-04 1.000000000000e-03 +6.427891983551e-01 6.427891983551e-01 5.774653441582e-02 9.090412020607e-01 9.108735199143e-01 2.259093881608e+00 9.805309279626e-02 6.510558963123e-02 2.689601160669e-01 4.426553531667e-04 1.000000000000e-03 +7.131454014587e-01 5.978687078227e-01 5.414558274826e-02 9.306037585435e-01 9.321776115883e-01 2.498988262258e+00 7.851157402934e-02 4.712601608524e-02 2.288279705253e-01 4.001619435765e-04 1.000000000000e-03 +7.774272859485e-01 5.666863499454e-01 5.146465263007e-02 9.620429325928e-01 9.634185044009e-01 1.722111448131e+00 1.899309104251e-02 1.654343369861e-02 1.355787335774e-01 5.806825110450e-04 1.000000000000e-03 +8.559393310042e-01 5.530219884522e-01 5.026702262286e-02 1.019051253898e+00 1.020290268323e+00 1.144569811264e+00 6.893995401096e-04 9.034829505262e-04 3.168390671980e-02 8.736907003473e-04 1.000000000000e-03 +9.503916243655e-01 5.501657739437e-01 5.001459272627e-02 1.098146902051e+00 1.099285257778e+00 1.009654138292e+00 7.324739230999e-07 1.088205201148e-06 1.099598513170e-03 9.904381729094e-04 1.000000000000e-03 +1.050003103667e+00 5.500010549623e-01 5.000008783269e-02 1.185330197949e+00 1.186384291431e+00 1.000077669558e+00 1.327392243880e-12 1.990933730878e-12 1.487329348149e-06 9.999223364740e-04 1.000000000000e-03 +1.150000000527e+00 5.500000001411e-01 5.000000001027e-02 1.274754878934e+00 1.275735082753e+00 1.000000012975e+00 6.666666887196e-15 1.000000020105e-14 1.054092563986e-07 9.999999870253e-04 1.000000000000e-03 +6.030904128347e-02 8.368912757338e-01 6.030904128347e-02 8.390614922995e-01 8.412261101038e-01 1.820710160826e+00 1.023063385308e-01 8.428552281297e-02 3.060238240780e-01 5.492362384280e-04 1.000000000000e-03 +1.796790031695e-01 8.281765694363e-01 5.990261940083e-02 8.474437883089e-01 8.495582959129e-01 1.896550205542e+00 1.030828981047e-01 8.152926650993e-02 3.009785273071e-01 5.272731494678e-04 1.000000000000e-03 +2.954621784981e-01 8.105725329509e-01 5.909429775812e-02 8.627431425965e-01 8.647646304775e-01 2.035400051222e+00 1.016923323020e-01 7.494276044725e-02 2.885649559983e-01 4.913039082414e-04 1.000000000000e-03 +4.052982094955e-01 7.842642140560e-01 5.785964697203e-02 8.828006547738e-01 8.846947127777e-01 2.261178909548e+00 1.022080053113e-01 6.780180343958e-02 2.744728350039e-01 4.422471816703e-04 1.000000000000e-03 +5.066842425221e-01 7.505642413106e-01 5.619544087562e-02 9.055802570475e-01 9.073221751558e-01 2.541665347163e+00 1.017111211223e-01 6.002626657899e-02 2.582554002425e-01 3.934428272063e-04 1.000000000000e-03 +5.978687078227e-01 7.131454014587e-01 5.414558274826e-02 9.306037585435e-01 9.321776115883e-01 2.498988262258e+00 7.851157402934e-02 4.712601608524e-02 2.288279705253e-01 4.001619435765e-04 1.000000000000e-03 +6.792354349842e-01 6.792354349842e-01 5.203129850046e-02 9.605839641990e-01 9.619921040736e-01 1.921550911245e+00 3.137578507082e-02 2.449254783250e-02 1.649664876152e-01 5.204129612951e-04 1.000000000000e-03 +7.603654953038e-01 6.581219449257e-01 5.058575972192e-02 1.005624274191e+00 1.006895774114e+00 1.286615155063e+00 3.016656533450e-03 3.516968366469e-03 6.251193989479e-02 7.772331890116e-04 1.000000000000e-03 +8.515826561091e-01 6.510048780690e-01 5.007366899692e-02 1.071914348936e+00 1.073083288372e+00 1.043026431978e+00 3.405506599325e-05 4.897536382945e-05 7.376792725949e-03 9.587484739991e-04 1.000000000000e-03 +9.500623679944e-01 6.500320963490e-01 5.000230488719e-02 1.151156040406e+00 1.152241493723e+00 1.001728629626e+00 6.479764208033e-09 9.702873637225e-09 1.038314533657e-04 9.982743533782e-04 1.000000000000e-03 +1.050000230402e+00 6.500000963087e-01 5.000000625770e-02 1.234909150118e+00 1.235920956078e+00 1.000006287807e+00 7.620983203393e-15 1.143140292663e-14 1.127011925730e-07 9.999937122325e-04 1.000000000000e-03 +1.150000000013e+00 6.500000000044e-01 5.000000000024e-02 1.320984481376e+00 1.321930406654e+00 1.000000000344e+00 6.666666670497e-15 1.000000000231e-14 1.054092553511e-07 9.999999996560e-04 1.000000000000e-03 +5.572124365623e-02 8.720444048488e-01 5.572124365623e-02 8.738228087105e-01 8.755976005091e-01 2.521879781072e+00 1.192745692405e-01 7.094384720616e-02 2.807605686270e-01 3.965296075989e-04 1.000000000000e-03 +1.661359837768e-01 8.640637006176e-01 5.537185756696e-02 8.798904726331e-01 8.816310375894e-01 2.643202165254e+00 1.212656952248e-01 6.881749161237e-02 2.765210291629e-01 3.783289879017e-04 1.000000000000e-03 +2.735900348858e-01 8.484842053663e-01 5.469883311741e-02 8.915026382153e-01 8.931791065006e-01 2.833362887582e+00 1.208805281613e-01 6.399490620727e-02 2.666560543873e-01 3.529374950109e-04 1.000000000000e-03 +3.764470266887e-01 8.265940334940e-01 5.374510938188e-02 9.082786247130e-01 9.098673512623e-01 2.830032831454e+00 1.032820716221e-01 5.474251242289e-02 2.466272770867e-01 3.533527911357e-04 1.000000000000e-03 +4.738636551491e-01 8.012985423787e-01 5.260485693140e-02 9.309275577023e-01 9.324126707967e-01 2.359527747150e+00 5.886195745259e-02 3.741974905170e-02 2.039056128368e-01 4.238136216910e-04 1.000000000000e-03 +5.666863499454e-01 7.774272859485e-01 5.146465263007e-02 9.620429325928e-01 9.634185044009e-01 1.722111448131e+00 1.899309104251e-02 1.654343369861e-02 1.355787335774e-01 5.806825110450e-04 1.000000000000e-03 +6.581219449257e-01 7.603654953038e-01 5.058575972192e-02 1.005624274191e+00 1.006895774114e+00 1.286615155063e+00 3.016656533450e-03 3.516968366469e-03 6.251193989479e-02 7.772331890116e-04 1.000000000000e-03 +7.522487415528e-01 7.522487415528e-01 5.013384912718e-02 1.063840372582e+00 1.065021005034e+00 1.075229085029e+00 1.366589611036e-04 1.906462952961e-04 1.455435388451e-02 9.300343656280e-04 1.000000000000e-03 +8.502256294246e-01 7.501776842646e-01 5.001073480624e-02 1.133865150227e+00 1.134967511647e+00 1.007286554319e+00 2.965236342986e-07 4.415679426485e-07 7.004506031029e-04 9.927661554824e-04 1.000000000000e-03 +9.500044120371e-01 7.500027840591e-01 5.000015884922e-02 1.210377031749e+00 1.211409334152e+00 1.000137628269e+00 5.033061008974e-12 7.548552619234e-12 2.896080228177e-06 9.998623906704e-04 1.000000000000e-03 +1.050000005959e+00 7.500000030387e-01 5.000000015251e-02 1.290348796672e+00 1.291317163631e+00 1.000000176134e+00 6.666704962727e-15 1.000005568274e-14 1.054095488123e-07 9.999998238656e-04 1.000000000000e-03 +1.150000000000e+00 7.500000000000e-01 5.000000000000e-02 1.372953021775e+00 1.373863166404e+00 1.000000000001e+00 6.666666666683e-15 1.000000000001e-14 1.054092553390e-07 9.999999999985e-04 1.000000000000e-03 +5.225430802937e-02 9.050045778159e-01 5.225430802937e-02 9.065118855124e-01 9.080166910817e-01 2.728304917513e+00 9.192242022357e-02 5.053820394130e-02 2.369674237839e-01 3.665279469244e-04 1.000000000000e-03 +1.561138799607e-01 8.994054513162e-01 5.203310211813e-02 9.128536078549e-01 9.143353613909e-01 2.496311647939e+00 7.201763651944e-02 4.327442643963e-02 2.192776688221e-01 4.005910082683e-04 1.000000000000e-03 +2.581916788083e-01 8.891817580921e-01 5.162788821219e-02 9.259088194469e-01 9.273470659741e-01 2.098397227317e+00 4.191673677063e-02 2.996339507955e-02 1.824627666114e-01 4.765541943069e-04 1.000000000000e-03 +3.579497548144e-01 8.765470342601e-01 5.112215598374e-02 9.468171577670e-01 9.481962903716e-01 1.676016033909e+00 1.727129957706e-02 1.545745914206e-02 1.310532510176e-01 5.966530031743e-04 1.000000000000e-03 +4.558013370506e-01 8.645660897219e-01 5.063245327525e-02 9.773583694603e-01 9.786690082345e-01 1.348037512704e+00 4.671258719988e-03 5.197843542147e-03 7.599593221678e-02 7.418191189606e-04 1.000000000000e-03 +5.530219884522e-01 8.559393310042e-01 5.026702262286e-02 1.019051253898e+00 1.020290268323e+00 1.144569811264e+00 6.893995401096e-04 9.034829505262e-04 3.168390671980e-02 8.736907003473e-04 1.000000000000e-03 +6.510048780690e-01 8.515826561091e-01 5.007366899692e-02 1.071914348936e+00 1.073083288372e+00 1.043026431978e+00 3.405506599325e-05 4.897536382945e-05 7.376792725949e-03 9.587484739991e-04 1.000000000000e-03 +7.501776842646e-01 8.502256294246e-01 5.001073480624e-02 1.133865150227e+00 1.134967511647e+00 1.007286554319e+00 2.965236342986e-07 4.415679426485e-07 7.004506031029e-04 9.927661554824e-04 1.000000000000e-03 +8.500111982899e-01 8.500111982899e-01 5.000052333172e-02 1.202097364791e+00 1.203136786392e+00 1.000430236596e+00 1.139772488409e-10 1.708923491188e-10 1.377970928248e-05 9.995699484281e-04 1.000000000000e-03 +9.500000927861e-01 8.500000726904e-01 5.000000315800e-02 1.274754996016e+00 1.275735199868e+00 1.000003235463e+00 6.771122157914e-15 1.015665037540e-14 1.062316670479e-07 9.999967645474e-04 1.000000000000e-03 +1.050000000031e+00 8.500000000194e-01 5.000000000073e-02 1.350925608647e+00 1.351850583496e+00 1.000000000989e+00 6.666666677792e-15 1.000000000680e-14 1.054092553748e-07 9.999999990115e-04 1.000000000000e-03 +1.150000000000e+00 8.500000000000e-01 5.000000000000e-02 1.430034964608e+00 1.430908802125e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +5.041660685549e-02 9.613635871544e-01 5.041660685549e-02 9.626846736877e-01 9.640039497845e-01 1.245124796664e+00 2.292758827239e-03 2.762083166339e-03 5.539838712393e-02 8.031323467970e-04 1.000000000000e-03 +1.510549173085e-01 9.595381845835e-01 5.035080953602e-02 9.713552983934e-01 9.726594058240e-01 1.202944594339e+00 1.529153286124e-03 1.906762738682e-03 4.602852664601e-02 8.312934815998e-04 1.000000000000e-03 +2.512219208086e-01 9.565745672447e-01 5.024304275092e-02 9.890133245787e-01 9.902887051457e-01 1.138338085681e+00 6.514533715183e-04 8.584269204109e-04 3.088377712239e-02 8.784736385252e-04 1.000000000000e-03 +3.509374039509e-01 9.535695696354e-01 5.013266291702e-02 1.016096445042e+00 1.017332428225e+00 1.076104499193e+00 1.603336170470e-04 2.234917015502e-04 1.575830298076e-02 9.292777799459e-04 1.000000000000e-03 +4.504901828009e-01 9.514363088533e-01 5.005357167828e-02 1.052697703334e+00 1.053887002786e+00 1.032281486974e+00 1.842448040133e-05 2.677246560238e-05 5.454097909155e-03 9.687280190706e-04 1.000000000000e-03 +5.501657739437e-01 9.503916243655e-01 5.001459272627e-02 1.098146902051e+00 1.099285257778e+00 1.009654138292e+00 7.324739230999e-07 1.088205201148e-06 1.099598513170e-03 9.904381729094e-04 1.000000000000e-03 +6.500320963490e-01 9.500623679944e-01 5.000230488719e-02 1.151156040406e+00 1.152241493723e+00 1.001728629626e+00 6.479764208033e-09 9.702873637225e-09 1.038314533657e-04 9.982743533782e-04 1.000000000000e-03 +7.500027840591e-01 9.500044120371e-01 5.000015884922e-02 1.210377031749e+00 1.211409334152e+00 1.000137628269e+00 5.033061008974e-12 7.548552619234e-12 2.896080228177e-06 9.998623906704e-04 1.000000000000e-03 +8.500000726904e-01 9.500000927861e-01 5.000000315800e-02 1.274754996016e+00 1.275735199868e+00 1.000003235463e+00 6.771122157914e-15 1.015665037540e-14 1.062316670479e-07 9.999967645474e-04 1.000000000000e-03 +9.500000002422e-01 9.500000002422e-01 5.000000000745e-02 1.343502884597e+00 1.344432966317e+00 1.000000009537e+00 6.666666796508e-15 1.000000009940e-14 1.054092558628e-07 9.999999904634e-04 1.000000000000e-03 +1.050000000000e+00 9.500000000000e-01 5.000000000000e-02 1.415980225851e+00 1.416862731530e+00 1.000000000001e+00 6.666666666673e-15 1.000000000000e-14 1.054092553390e-07 9.999999999995e-04 1.000000000000e-03 +1.150000000000e+00 9.500000000000e-01 5.000000000000e-02 1.491643389018e+00 1.492481155660e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +5.001324706222e-02 1.050433724972e+00 5.001324706222e-02 1.051623666261e+00 1.052812262619e+00 1.008195500791e+00 3.985499055994e-07 5.929652115392e-07 8.116959005955e-04 9.918711194564e-04 1.000000000000e-03 +1.500301947207e-01 1.050330492593e+00 5.001004310366e-02 1.060991613067e+00 1.062169575637e+00 1.006363910418e+00 2.234219631335e-07 3.330136755012e-07 6.082887431158e-04 9.936763328330e-04 1.000000000000e-03 +2.500283957581e-01 1.050187292846e+00 5.000563419205e-02 1.079540434046e+00 1.080697974548e+00 1.003751619848e+00 6.106323594557e-08 9.125250919370e-08 3.184205974523e-04 9.962624021983e-04 1.000000000000e-03 +3.500159366535e-01 1.050075302017e+00 5.000223109000e-02 1.106873658471e+00 1.108002490490e+00 1.001601459830e+00 6.366458072343e-09 9.534418120891e-09 1.029261770013e-04 9.984011007429e-04 1.000000000000e-03 +4.500054502267e-01 1.050019962653e+00 5.000057964117e-02 1.142386461406e+00 1.143480163872e+00 1.000458122364e+00 1.992087600098e-10 2.986763097177e-10 1.821709544228e-05 9.995420874164e-04 1.000000000000e-03 +5.500010549623e-01 1.050003103667e+00 5.000008783269e-02 1.185330197949e+00 1.186384291431e+00 1.000077669558e+00 1.327392243880e-12 1.990933730878e-12 1.487329348149e-06 9.999223364740e-04 1.000000000000e-03 +6.500000963087e-01 1.050000230402e+00 5.000000625770e-02 1.234909150118e+00 1.235920956078e+00 1.000006287807e+00 7.620983203393e-15 1.143140292663e-14 1.127011925730e-07 9.999937122325e-04 1.000000000000e-03 +7.500000030387e-01 1.050000005959e+00 5.000000015251e-02 1.290348796672e+00 1.291317163631e+00 1.000000176134e+00 6.666704962727e-15 1.000005568274e-14 1.054095488123e-07 9.999998238656e-04 1.000000000000e-03 +8.500000000194e-01 1.050000000031e+00 5.000000000073e-02 1.350925608647e+00 1.351850583496e+00 1.000000000989e+00 6.666666677792e-15 1.000000000680e-14 1.054092553748e-07 9.999999990115e-04 1.000000000000e-03 +9.500000000000e-01 1.050000000000e+00 5.000000000000e-02 1.415980225851e+00 1.416862731530e+00 1.000000000001e+00 6.666666666673e-15 1.000000000000e-14 1.054092553390e-07 9.999999999995e-04 1.000000000000e-03 +1.050000000000e+00 1.050000000000e+00 5.000000000000e-02 1.484924240492e+00 1.485765795810e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 1.000000000000e-03 1.000000000000e-03 +1.150000000000e+00 1.050000000000e+00 5.000000000000e-02 1.557241150240e+00 1.558043645088e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +5.000001080617e-02 1.150000514128e+00 5.000001080617e-02 1.151086957435e+00 1.152172376277e+00 1.000009850389e+00 8.044775290098e-15 1.206704407007e-14 1.157921704802e-07 9.999901497079e-04 1.000000000000e-03 +1.500000223935e-01 1.150000352537e+00 5.000000738592e-02 1.159741702947e+00 1.160819029088e+00 1.000006887425e+00 7.478462217353e-15 1.121761606554e-14 1.116423658411e-07 9.999931126224e-04 1.000000000000e-03 +2.500000173475e-01 1.150000161354e+00 5.000000335783e-02 1.176860390951e+00 1.177922060293e+00 1.000003276470e+00 6.809582461824e-15 1.021434022575e-14 1.065329381811e-07 9.999967235404e-04 1.000000000000e-03 +3.500000071517e-01 1.150000046297e+00 5.000000095303e-02 1.202081574390e+00 1.203120987924e+00 1.000000994246e+00 6.672725087915e-15 1.000907768038e-14 1.054570880626e-07 9.999990057546e-04 1.000000000000e-03 +4.500000015283e-01 1.150000007379e+00 5.000000014927e-02 1.234908910952e+00 1.235920716859e+00 1.000000169692e+00 6.666717512707e-15 1.000007457212e-14 1.054096483678e-07 9.999998303076e-04 1.000000000000e-03 +5.500000001411e-01 1.150000000527e+00 5.000000001027e-02 1.274754878934e+00 1.275735082753e+00 1.000000012975e+00 6.666666887197e-15 1.000000020105e-14 1.054092563986e-07 9.999999870253e-04 1.000000000000e-03 +6.500000000044e-01 1.150000000013e+00 5.000000000024e-02 1.320984481376e+00 1.321930406654e+00 1.000000000344e+00 6.666666670497e-15 1.000000000231e-14 1.054092553511e-07 9.999999996560e-04 1.000000000000e-03 +7.500000000000e-01 1.150000000000e+00 5.000000000000e-02 1.372953021775e+00 1.373863166404e+00 1.000000000001e+00 6.666666666683e-15 1.000000000001e-14 1.054092553390e-07 9.999999999985e-04 1.000000000000e-03 +8.500000000000e-01 1.150000000000e+00 5.000000000000e-02 1.430034964608e+00 1.430908802125e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +9.500000000000e-01 1.150000000000e+00 5.000000000000e-02 1.491643389018e+00 1.492481155660e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +1.050000000000e+00 1.150000000000e+00 5.000000000000e-02 1.557241150240e+00 1.558043645088e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +1.150000000000e+00 1.150000000000e+00 5.000000000000e-02 1.626345596729e+00 1.627114009527e+00 9.999999999987e-01 6.666666666652e-15 9.999999999991e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +1.556079537626e-01 1.556079537626e-01 4.986041859295e-01 2.200628786242e-01 5.450080777152e-01 8.131537195050e-02 5.582898566849e-02 1.029860363348e+00 1.069714584648e+00 1.229779777197e-02 1.000000000000e-03 +4.162380262134e-01 1.363044969890e-01 4.162380262134e-01 4.379874545754e-01 6.042243828508e-01 1.127115642854e-01 5.691439888836e-02 7.574342426512e-01 9.173841087275e-01 8.872204075421e-03 1.000000000000e-03 +5.758958487508e-01 1.097088060936e-01 3.278392772666e-01 5.862525486025e-01 6.716923718947e-01 2.682218103749e-01 5.746247489267e-02 3.213523621309e-01 5.975434546084e-01 3.728257588755e-03 1.000000000000e-03 +6.660562392983e-01 8.844550332267e-02 2.643282308460e-01 6.719029103719e-01 7.220269625079e-01 5.357863057219e-01 6.224265057545e-02 1.742559950975e-01 4.400201953667e-01 1.866415750684e-03 1.000000000000e-03 +7.306452916534e-01 7.470252492774e-02 2.239908712682e-01 7.344542255620e-01 7.678508447982e-01 8.494312899517e-01 6.877917708729e-02 1.214562812218e-01 3.673573513348e-01 1.177258257177e-03 1.000000000000e-03 +7.841651042628e-01 6.595862237839e-02 1.977678592834e-01 7.869342098355e-01 8.114046935870e-01 1.261327154600e+00 7.989063499718e-02 9.500782731802e-02 3.249065289827e-01 7.928157229891e-04 1.000000000000e-03 +8.281765694363e-01 5.990261940083e-02 1.796790031695e-01 8.303401435402e-01 8.495582959129e-01 1.896550205542e+00 1.030828981047e-01 8.152926650993e-02 3.009785273071e-01 5.272731494678e-04 1.000000000000e-03 +8.640637006176e-01 5.537185756696e-02 1.661359837768e-01 8.658360822555e-01 8.816310375894e-01 2.643202165254e+00 1.212656952248e-01 6.881749161237e-02 2.765210291629e-01 3.783289879017e-04 1.000000000000e-03 +8.994054513162e-01 5.203310211813e-02 1.561138799607e-01 9.009093237243e-01 9.143353613909e-01 2.496311647939e+00 7.201763651944e-02 4.327442643963e-02 2.192776688221e-01 4.005910082683e-04 1.000000000000e-03 +9.595381845835e-01 5.035080953602e-02 1.510549173085e-01 9.608583307100e-01 9.726594058240e-01 1.202944594339e+00 1.529153286124e-03 1.906762738682e-03 4.602852664601e-02 8.312934815998e-04 1.000000000000e-03 +1.050330492593e+00 5.001004310366e-02 1.500301947207e-01 1.051520398319e+00 1.062169575637e+00 1.006363910418e+00 2.234219631335e-07 3.330136755012e-07 6.082887431158e-04 9.936763328330e-04 1.000000000000e-03 +1.150000352537e+00 5.000000738592e-02 1.500000223935e-01 1.151086795847e+00 1.160819029088e+00 1.000006887425e+00 7.478462217353e-15 1.121761606554e-14 1.116423658411e-07 9.999931126224e-04 1.000000000000e-03 +1.363044969890e-01 4.162380262134e-01 4.162380262134e-01 4.379874545754e-01 6.042243828508e-01 1.127115642854e-01 5.691439888836e-02 7.574342426512e-01 9.173841087275e-01 8.872204075421e-03 1.000000000000e-03 +3.765991271407e-01 3.765991271407e-01 3.765991271407e-01 5.325915931802e-01 6.522888222938e-01 1.574906353636e-01 5.702995583523e-02 5.431747326140e-01 7.768703113662e-01 6.349583882820e-03 1.000000000000e-03 +5.438772885674e-01 3.156493194378e-01 3.156493194378e-01 6.288378152441e-01 7.036131683976e-01 3.029328666958e-01 5.915864233421e-02 2.929294680673e-01 5.705060794956e-01 3.301061422972e-03 1.000000000000e-03 +6.472923836452e-01 2.604309815850e-01 2.604309815850e-01 6.977189449158e-01 7.447388953611e-01 5.624247827338e-01 6.260065755532e-02 1.669574122900e-01 4.307066703427e-01 1.778015533276e-03 1.000000000000e-03 +7.183428032096e-01 2.218021194997e-01 2.218021194997e-01 7.518062005182e-01 7.838422949498e-01 8.861164097546e-01 6.903846253467e-02 1.168669180054e-01 3.603500119565e-01 1.128519897602e-03 1.000000000000e-03 +7.742841956890e-01 1.962892531392e-01 1.962892531392e-01 7.987774950458e-01 8.225417664105e-01 1.335104789029e+00 8.247628311008e-02 9.266270758802e-02 3.208715693026e-01 7.490048782819e-04 1.000000000000e-03 +8.194585231134e-01 1.784856245703e-01 1.784856245703e-01 8.386712045143e-01 8.574535016312e-01 1.966027623784e+00 1.025671556502e-01 7.825461433707e-02 2.948721273461e-01 5.086398522088e-04 1.000000000000e-03 +8.562494491949e-01 1.651247184952e-01 1.651247184952e-01 8.720259697421e-01 8.875220924364e-01 2.751691967765e+00 1.222733514821e-01 6.665354602611e-02 2.721387432626e-01 3.634127699301e-04 1.000000000000e-03 +8.941550419640e-01 1.554894350555e-01 1.554894350555e-01 9.075738005714e-01 9.207970286102e-01 2.284397696094e+00 5.541580928499e-02 3.638758438149e-02 2.010737409827e-01 4.377521487217e-04 1.000000000000e-03 +9.579632080421e-01 1.508829780990e-01 1.508829780990e-01 9.697727471126e-01 9.814401938592e-01 1.168029730463e+00 1.012712457522e-03 1.300539401238e-03 3.801373145526e-02 8.561425911685e-04 1.000000000000e-03 +1.050250450665e+00 1.500227731945e-01 1.500227731945e-01 1.060911325983e+00 1.071466132958e+00 1.004917558368e+00 1.233412003012e-07 1.841064462565e-07 4.522861020005e-04 9.951065056763e-04 1.000000000000e-03 +1.150000240797e+00 1.500000152525e-01 1.500000152525e-01 1.159741591222e+00 1.169401797068e+00 1.000004796728e+00 7.088868647758e-15 1.063325196682e-14 1.086955583618e-07 9.999952032948e-04 1.000000000000e-03 +1.097088060936e-01 5.758958487508e-01 3.278392772666e-01 5.862525486025e-01 6.716923718947e-01 2.682218103749e-01 5.746247489267e-02 3.213523621309e-01 5.975434546084e-01 3.728257588755e-03 1.000000000000e-03 +3.156493194378e-01 5.438772885674e-01 3.156493194378e-01 6.288378152441e-01 7.036131683976e-01 3.029328666958e-01 5.915864233421e-02 2.929294680673e-01 5.705060794956e-01 3.301061422972e-03 1.000000000000e-03 +4.852369548040e-01 4.852369548040e-01 2.874580786751e-01 6.862286824484e-01 7.440039997275e-01 3.977513613491e-01 6.117045550879e-02 2.306860319773e-01 5.062783950635e-01 2.514133444090e-03 1.000000000000e-03 +6.078831561070e-01 4.182047737493e-01 2.503892967076e-01 7.378463012480e-01 7.791738985433e-01 6.275638896783e-01 6.376860502189e-02 1.524193936364e-01 4.115274982528e-01 1.593463257602e-03 1.000000000000e-03 +6.920856357920e-01 3.621401678412e-01 2.173250050085e-01 7.811069250965e-01 8.107762861824e-01 9.709503414021e-01 6.998564745074e-02 1.081192999268e-01 3.466014360534e-01 1.029918789210e-03 1.000000000000e-03 +7.537423432607e-01 3.220678556236e-01 1.932566777741e-01 8.196677519886e-01 8.421421300198e-01 1.467223462259e+00 8.493917407974e-02 8.683664376757e-02 3.106206041810e-01 6.815594391193e-04 1.000000000000e-03 +8.019255810333e-01 2.934659447285e-01 1.760659940933e-01 8.539361206969e-01 8.718980057937e-01 2.110265140158e+00 1.019406316580e-01 7.246053805137e-02 2.837458527379e-01 4.738741028177e-04 1.000000000000e-03 +8.410707048394e-01 2.719818345032e-01 1.631553299519e-01 8.839536463180e-01 8.988847036915e-01 2.876422437143e+00 1.177464610312e-01 6.140255661549e-02 2.611992781500e-01 3.476540813641e-04 1.000000000000e-03 +8.846783564256e-01 2.572889711585e-01 1.543564808184e-01 9.213324096154e-01 9.341730739956e-01 1.935811375776e+00 3.161924396550e-02 2.450076827823e-02 1.649941691840e-01 5.165792558685e-04 1.000000000000e-03 +9.554301471184e-01 2.510109899805e-01 1.506045322793e-01 9.878528651139e-01 9.992672356566e-01 1.114309142144e+00 4.249390367289e-04 5.720212919255e-04 2.521069640550e-02 8.974170292422e-04 1.000000000000e-03 +1.050140445876e+00 2.500212059279e-01 1.500126501740e-01 1.079493195661e+00 1.089866668309e+00 1.002870707846e+00 3.276590156800e-08 4.900816423043e-08 2.333527711676e-04 9.971375095281e-04 1.000000000000e-03 +1.150000109261e+00 2.500000117246e-01 1.500000068792e-01 1.176860338852e+00 1.186381161022e+00 1.000002262126e+00 6.736493387733e-15 1.010471722346e-14 1.059597262247e-07 9.999977378796e-04 1.000000000000e-03 +8.844550332267e-02 6.660562392983e-01 2.643282308460e-01 6.719029103719e-01 7.220269625079e-01 5.357863057219e-01 6.224265057545e-02 1.742559950975e-01 4.400201953667e-01 1.866415750684e-03 1.000000000000e-03 +2.604309815850e-01 6.472923836452e-01 2.604309815850e-01 6.977189449158e-01 7.447388953611e-01 5.624247827338e-01 6.260065755532e-02 1.669574122900e-01 4.307066703427e-01 1.778015533276e-03 1.000000000000e-03 +4.182047737493e-01 6.078831561070e-01 2.503892967076e-01 7.378463012480e-01 7.791738985433e-01 6.275638896783e-01 6.376860502189e-02 1.524193936364e-01 4.115274982528e-01 1.593463257602e-03 1.000000000000e-03 +5.510002927093e-01 5.510002927093e-01 2.320752612896e-01 7.792320868210e-01 8.130569303770e-01 7.777751739180e-01 6.705524161528e-02 1.293212560594e-01 3.790650135669e-01 1.285718590068e-03 1.000000000000e-03 +6.508643468100e-01 4.905197626364e-01 2.092423410972e-01 8.150055432236e-01 8.414370997247e-01 1.122755224483e+00 7.389495563216e-02 9.872359623112e-02 3.311991616856e-01 8.906660848188e-04 1.000000000000e-03 +7.223182131662e-01 4.401547253665e-01 1.884391187182e-01 8.458603805204e-01 8.665962640107e-01 1.646262842985e+00 8.643054191248e-02 7.875158782887e-02 2.958069712740e-01 6.074364153096e-04 1.000000000000e-03 +7.758822266634e-01 4.024492635562e-01 1.723589735258e-01 8.740472752598e-01 8.908794840740e-01 2.347471211633e+00 1.032570880948e-01 6.597977916604e-02 2.707597934333e-01 4.259903146179e-04 1.000000000000e-03 +8.199513189420e-01 3.743646667743e-01 1.603656317989e-01 9.013706613617e-01 9.155250979771e-01 2.743038545152e+00 9.289489105328e-02 5.079853392005e-02 2.375769674584e-01 3.645592227522e-04 1.000000000000e-03 +8.731485593252e-01 3.569741920387e-01 1.529608952451e-01 9.433021681483e-01 9.556233650908e-01 1.574728359156e+00 1.278911985324e-02 1.218221521720e-02 1.163434342186e-01 6.350301588117e-04 1.000000000000e-03 +9.529001775952e-01 3.507624628702e-01 1.503241852277e-01 1.015407826353e+00 1.026474751021e+00 1.062443128902e+00 1.015633055266e-04 1.433911652734e-04 1.262234197645e-02 9.412268504516e-04 1.000000000000e-03 +1.050055605028e+00 3.500117333255e-01 1.500049381385e-01 1.106853643042e+00 1.116972008862e+00 1.001207244040e+00 3.339939030012e-09 5.003867655612e-09 7.456442148022e-05 9.987942116406e-04 1.000000000000e-03 +1.150000030901e+00 3.500000047701e-01 1.500000019262e-01 1.202081558968e+00 1.211404174910e+00 1.000000676528e+00 6.669472588312e-15 1.000420211434e-14 1.054314001000e-07 9.999993234721e-04 1.000000000000e-03 +7.470252492774e-02 7.306452916534e-01 2.239908712682e-01 7.344542255620e-01 7.678508447982e-01 8.494312899517e-01 6.877917708729e-02 1.214562812218e-01 3.673573513348e-01 1.177258257177e-03 1.000000000000e-03 +2.218021194997e-01 7.183428032096e-01 2.218021194997e-01 7.518062005182e-01 7.838422949498e-01 8.861164097546e-01 6.903846253467e-02 1.168669180054e-01 3.603500119565e-01 1.128519897602e-03 1.000000000000e-03 +3.621401678412e-01 6.920856357920e-01 2.173250050085e-01 7.811069250965e-01 8.107762861824e-01 9.709503414021e-01 6.998564745074e-02 1.081192999268e-01 3.466014360534e-01 1.029918789210e-03 1.000000000000e-03 +4.905197626364e-01 6.508643468100e-01 2.092423410972e-01 8.150055432236e-01 8.414370997247e-01 1.122755224483e+00 7.389495563215e-02 9.872359623112e-02 3.311991616856e-01 8.906660848188e-04 1.000000000000e-03 +5.988466842784e-01 5.988466842784e-01 1.964824373676e-01 8.468971026887e-01 8.693906203407e-01 1.401631724523e+00 8.143681591189e-02 8.715215397210e-02 3.111843933035e-01 7.134541709521e-04 1.000000000000e-03 +6.815985878299e-01 5.465708789424e-01 1.812604840022e-01 8.736797815216e-01 8.922845530997e-01 1.912471958895e+00 8.926832460072e-02 7.001539880273e-02 2.789173489738e-01 5.228834835193e-04 1.000000000000e-03 +7.428898320434e-01 5.029770120508e-01 1.673596231779e-01 8.971461292370e-01 9.126228249804e-01 2.594027218878e+00 1.004139399263e-01 5.806450633724e-02 2.540002325835e-01 3.855009664982e-04 1.000000000000e-03 +7.959636594993e-01 4.715807377877e-01 1.570757906732e-01 9.251737888072e-01 9.384132051029e-01 2.214123172832e+00 4.834378711867e-02 3.275142122525e-02 1.907628580937e-01 4.516460566740e-04 1.000000000000e-03 +8.624312050106e-01 4.549819179477e-01 1.516329878552e-01 9.750877545305e-01 9.868073226529e-01 1.295187933817e+00 3.362536294055e-03 3.894264538289e-03 6.577963665223e-02 7.720887246478e-04 1.000000000000e-03 +9.511407159535e-01 4.503896080748e-01 1.501278206315e-01 1.052387504965e+00 1.063041778640e+00 1.026082684860e+00 1.119241799494e-05 1.636186560803e-05 4.263783610315e-03 9.745803284231e-04 1.000000000000e-03 +1.050014436149e+00 4.500039363165e-01 1.500012582639e-01 1.142380785387e+00 1.152186719374e+00 1.000338242690e+00 1.004636174847e-10 1.506444718357e-10 1.293764841399e-05 9.996618716791e-04 1.000000000000e-03 +1.150000004831e+00 4.500000010003e-01 1.500000002963e-01 1.234908908387e+00 1.243985535326e+00 1.000000113150e+00 6.666689773724e-15 1.000003352908e-14 1.054094320526e-07 9.999998868496e-04 1.000000000000e-03 +6.595862237839e-02 7.841651042628e-01 1.977678592834e-01 7.869342098355e-01 8.114046935870e-01 1.261327154600e+00 7.989063499718e-02 9.500782731802e-02 3.249065289827e-01 7.928157229891e-04 1.000000000000e-03 +1.962892531392e-01 7.742841956890e-01 1.962892531392e-01 7.987774950458e-01 8.225417664105e-01 1.335104789029e+00 8.247628311008e-02 9.266270758802e-02 3.208715693026e-01 7.490048782819e-04 1.000000000000e-03 +3.220678556236e-01 7.537423432607e-01 1.932566777741e-01 8.196677519886e-01 8.421421300198e-01 1.467223462259e+00 8.493917407974e-02 8.683664376757e-02 3.106206041810e-01 6.815594391193e-04 1.000000000000e-03 +4.401547253665e-01 7.223182131662e-01 1.884391187182e-01 8.458603805204e-01 8.665962640107e-01 1.646262842985e+00 8.643054191248e-02 7.875158782887e-02 2.958069712740e-01 6.074364153096e-04 1.000000000000e-03 +5.465708789424e-01 6.815985878299e-01 1.812604840022e-01 8.736797815216e-01 8.922845530997e-01 1.912471958895e+00 8.926832460072e-02 7.001539880273e-02 2.789173489738e-01 5.228834835193e-04 1.000000000000e-03 +6.358214308017e-01 6.358214308017e-01 1.715591887852e-01 8.991872906872e-01 9.154071984587e-01 2.355051508456e+00 9.745104288738e-02 6.206937037521e-02 2.626137221921e-01 4.246191628545e-04 1.000000000000e-03 +7.069616203497e-01 5.934796264502e-01 1.613061875930e-01 9.230453941486e-01 9.370338765566e-01 2.427716635464e+00 7.028719782641e-02 4.342796650956e-02 2.196663290578e-01 4.119096872312e-04 1.000000000000e-03 +7.739165384455e-01 5.646663764575e-01 1.538674114688e-01 9.580161403552e-01 9.702938243095e-01 1.625960386649e+00 1.462963411623e-02 1.349630123498e-02 1.224577080509e-01 6.150211334859e-04 1.000000000000e-03 +8.549225690771e-01 5.525175539375e-01 1.506682863740e-01 1.017923497384e+00 1.029013692351e+00 1.121201856519e+00 4.675184585788e-04 6.254696099465e-04 2.636221222268e-02 8.919000572339e-04 1.000000000000e-03 +9.503017832094e-01 5.501278698601e-01 1.500337660925e-01 1.098050159313e+00 1.108252806599e+00 1.007598311924e+00 4.198400424923e-07 6.250110349387e-07 8.333406899267e-04 9.924589870442e-04 1.000000000000e-03 +1.050002184931e+00 5.500007427352e-01 1.500001859320e-01 1.185329239228e+00 1.194782599952e+00 1.000055781334e+00 6.341347735406e-13 9.511491039446e-13 1.028023510294e-06 9.999442217769e-04 1.000000000000e-03 +1.150000000340e+00 5.500000000910e-01 1.500000000201e-01 1.274754878744e+00 1.283549765645e+00 1.000000008515e+00 6.666666796467e-15 1.000000010955e-14 1.054092559163e-07 9.999999914852e-04 1.000000000000e-03 +5.990261940083e-02 8.281765694363e-01 1.796790031695e-01 8.303401435402e-01 8.495582959129e-01 1.896550205542e+00 1.030828981047e-01 8.152926650993e-02 3.009785273071e-01 5.272731494678e-04 1.000000000000e-03 +1.784856245703e-01 8.194585231134e-01 1.784856245703e-01 8.386712045143e-01 8.574535016312e-01 1.966027623784e+00 1.025671556502e-01 7.825461433707e-02 2.948721273461e-01 5.086398522088e-04 1.000000000000e-03 +2.934659447285e-01 8.019255810333e-01 1.760659940933e-01 8.539361206969e-01 8.718980057937e-01 2.110265140158e+00 1.019406316579e-01 7.246053805137e-02 2.837458527379e-01 4.738741028177e-04 1.000000000000e-03 +4.024492635562e-01 7.758822266634e-01 1.723589735258e-01 8.740472752598e-01 8.908794840740e-01 2.347471211633e+00 1.032570880948e-01 6.597977916604e-02 2.707597934333e-01 4.259903146179e-04 1.000000000000e-03 +5.029770120508e-01 7.428898320434e-01 1.673596231779e-01 8.971461292370e-01 9.126228249804e-01 2.594027218878e+00 1.004139399263e-01 5.806450633724e-02 2.540002325835e-01 3.855009664982e-04 1.000000000000e-03 +5.934796264502e-01 7.069616203497e-01 1.613061875930e-01 9.230453941486e-01 9.370338765566e-01 2.427716635464e+00 7.028719782641e-02 4.342796650956e-02 2.196663290578e-01 4.119096872312e-04 1.000000000000e-03 +6.755565572741e-01 6.755565572741e-01 1.553489847472e-01 9.553812454471e-01 9.679290424479e-01 1.798315026840e+00 2.399479580180e-02 2.001439857061e-02 1.491248491500e-01 5.560760962761e-04 1.000000000000e-03 +7.587036779035e-01 6.568497734941e-01 1.514844706257e-01 1.003535199085e+00 1.014904153427e+00 1.243543432231e+00 2.163378209825e-03 2.609532751836e-03 5.384682753305e-02 8.041536580720e-04 1.000000000000e-03 +8.512621287206e-01 6.508041457427e-01 1.501768340028e-01 1.071537795838e+00 1.082010318519e+00 1.035082093390e+00 2.125213843524e-05 3.079775783626e-05 5.849763322493e-03 9.661069458996e-04 1.000000000000e-03 +9.500462273445e-01 6.500238329268e-01 1.500051283654e-01 1.151138053174e+00 1.160870516466e+00 1.001309124772e+00 3.406033144264e-09 5.102370077331e-09 7.529475470392e-05 9.986925867947e-04 1.000000000000e-03 +1.050000157658e+00 6.500000659017e-01 1.500000129100e-01 1.234909072262e+00 1.243985699527e+00 1.000004383206e+00 7.094857988261e-15 1.064224033526e-14 1.087414892469e-07 9.999956168133e-04 1.000000000000e-03 +1.150000000008e+00 6.500000000028e-01 1.500000000005e-01 1.320984481371e+00 1.329473580039e+00 1.000000000220e+00 6.666666669117e-15 1.000000000147e-14 1.054092553467e-07 9.999999997797e-04 1.000000000000e-03 +5.537185756696e-02 8.640637006176e-01 1.661359837768e-01 8.658360822555e-01 8.816310375894e-01 2.643202165254e+00 1.212656952248e-01 6.881749161237e-02 2.765210291629e-01 3.783289879017e-04 1.000000000000e-03 +1.651247184952e-01 8.562494491949e-01 1.651247184952e-01 8.720259697421e-01 8.875220924364e-01 2.751691967765e+00 1.222733514821e-01 6.665354602611e-02 2.721387432626e-01 3.634127699301e-04 1.000000000000e-03 +2.719818345032e-01 8.410707048394e-01 1.631553299519e-01 8.839536463180e-01 8.988847036915e-01 2.876422437143e+00 1.177464610312e-01 6.140255661549e-02 2.611992781500e-01 3.476540813641e-04 1.000000000000e-03 +3.743646667743e-01 8.199513189420e-01 1.603656317989e-01 9.013706613617e-01 9.155250979771e-01 2.743038545152e+00 9.289489105328e-02 5.079853392005e-02 2.375769674584e-01 3.645592227522e-04 1.000000000000e-03 +4.715807377877e-01 7.959636594993e-01 1.570757906732e-01 9.251737888072e-01 9.384132051029e-01 2.214123172832e+00 4.834378711867e-02 3.275142122525e-02 1.907628580937e-01 4.516460566740e-04 1.000000000000e-03 +5.646663764575e-01 7.739165384455e-01 1.538674114688e-01 9.580161403552e-01 9.702938243095e-01 1.625960386649e+00 1.462963411623e-02 1.349630123498e-02 1.224577080509e-01 6.150211334859e-04 1.000000000000e-03 +6.568497734941e-01 7.587036779035e-01 1.514844706257e-01 1.003535199085e+00 1.014904153427e+00 1.243543432231e+00 2.163378209825e-03 2.609532751836e-03 5.384682753305e-02 8.041536580720e-04 1.000000000000e-03 +7.517961678835e-01 7.517961678835e-01 1.503212846008e-01 1.063200336761e+00 1.073774391896e+00 1.061127838059e+00 8.524754381782e-05 1.205050995181e-04 1.157128147701e-02 9.423935214340e-04 1.000000000000e-03 +8.501708533052e-01 7.501348411096e-01 1.500244024175e-01 1.133795731010e+00 1.143678311842e+00 1.005647990613e+00 1.639219484307e-07 2.445019777707e-07 5.212186337706e-04 9.943837300271e-04 1.000000000000e-03 +9.500031309798e-01 7.500019785165e-01 1.500003386935e-01 1.210375527120e+00 1.219634788885e+00 1.000099669851e+00 2.414491229775e-12 3.621375902666e-12 2.005928962591e-06 9.999003400821e-04 1.000000000000e-03 +1.050000003933e+00 7.500000020070e-01 1.500000003049e-01 1.290348794423e+00 1.299038110050e+00 1.000000118309e+00 6.666684007659e-15 1.000002482839e-14 1.054093861960e-07 9.999998816906e-04 1.000000000000e-03 +1.150000000000e+00 7.500000000000e-01 1.500000000000e-01 1.372953021775e+00 1.381122731693e+00 1.000000000001e+00 6.666666666674e-15 1.000000000000e-14 1.054092553390e-07 9.999999999993e-04 1.000000000000e-03 +5.203310211813e-02 8.994054513162e-01 1.561138799607e-01 9.009093237243e-01 9.143353613909e-01 2.496311647939e+00 7.201763651944e-02 4.327442643963e-02 2.192776688221e-01 4.005910082683e-04 1.000000000000e-03 +1.554894350555e-01 8.941550419640e-01 1.554894350555e-01 9.075738005714e-01 9.207970286102e-01 2.284397696094e+00 5.541580928499e-02 3.638758438149e-02 2.010737409827e-01 4.377521487217e-04 1.000000000000e-03 +2.572889711585e-01 8.846783564256e-01 1.543564808184e-01 9.213324096154e-01 9.341730739956e-01 1.935811375776e+00 3.161924396550e-02 2.450076827823e-02 1.649941691840e-01 5.165792558685e-04 1.000000000000e-03 +3.569741920387e-01 8.731485593252e-01 1.529608952451e-01 9.433021681483e-01 9.556233650908e-01 1.574728359156e+00 1.278911985324e-02 1.218221521720e-02 1.163434342186e-01 6.350301588117e-04 1.000000000000e-03 +4.549819179477e-01 8.624312050106e-01 1.516329878552e-01 9.750877545305e-01 9.868073226529e-01 1.295187933817e+00 3.362536294055e-03 3.894264538289e-03 6.577963665223e-02 7.720887246478e-04 1.000000000000e-03 +5.525175539375e-01 8.549225690771e-01 1.506682863740e-01 1.017923497384e+00 1.029013692351e+00 1.121201856519e+00 4.675184585787e-04 6.254696099465e-04 2.636221222268e-02 8.919000572339e-04 1.000000000000e-03 +6.508041457427e-01 8.512621287206e-01 1.501768340028e-01 1.071537795838e+00 1.082010318519e+00 1.035082093390e+00 2.125213843524e-05 3.079775783626e-05 5.849763322493e-03 9.661069458996e-04 1.000000000000e-03 +7.501348411096e-01 8.501708533052e-01 1.500244024175e-01 1.133795731010e+00 1.143678311842e+00 1.005647990613e+00 1.639219484307e-07 2.445019777707e-07 5.212186337706e-04 9.943837300271e-04 1.000000000000e-03 +8.500079476103e-01 8.500079476103e-01 1.500011145407e-01 1.202092767635e+00 1.211415435086e+00 1.000311652394e+00 5.459679816010e-11 8.186968235764e-11 9.537626210473e-06 9.996884447029e-04 1.000000000000e-03 +9.500000624558e-01 8.500000489817e-01 1.500000064188e-01 1.274754957604e+00 1.283549844712e+00 1.000002219760e+00 6.712204174474e-15 1.006828391254e-14 1.057685308825e-07 9.999977802449e-04 1.000000000000e-03 +1.050000000020e+00 8.500000000123e-01 1.500000000014e-01 1.350925608634e+00 1.359227721930e+00 1.000000000639e+00 6.666666673808e-15 1.000000000432e-14 1.054092553617e-07 9.999999993612e-04 1.000000000000e-03 +1.150000000000e+00 8.500000000000e-01 1.500000000000e-01 1.430034964608e+00 1.437880384455e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +5.035080953602e-02 9.595381845835e-01 1.510549173085e-01 9.608583307100e-01 9.726594058240e-01 1.202944594339e+00 1.529153286124e-03 1.906762738682e-03 4.602852664601e-02 8.312934815998e-04 1.000000000000e-03 +1.508829780990e-01 9.579632080421e-01 1.508829780990e-01 9.697727471126e-01 9.814401938592e-01 1.168029730463e+00 1.012712457522e-03 1.300539401238e-03 3.801373145526e-02 8.561425911685e-04 1.000000000000e-03 +2.510109899805e-01 9.554301471184e-01 1.506045322793e-01 9.878528651139e-01 9.992672356566e-01 1.114309142144e+00 4.249390367289e-04 5.720212919255e-04 2.521069640550e-02 8.974170292422e-04 1.000000000000e-03 +3.507624628702e-01 9.529001775952e-01 1.503241852277e-01 1.015407826353e+00 1.026474751021e+00 1.062443128902e+00 1.015633055266e-04 1.433911652734e-04 1.262234197645e-02 9.412268504516e-04 1.000000000000e-03 +4.503896080748e-01 9.511407159535e-01 1.501278206315e-01 1.052387504965e+00 1.063041778640e+00 1.026082684860e+00 1.119241799494e-05 1.636186560803e-05 4.263783610315e-03 9.745803284231e-04 1.000000000000e-03 +5.501278698601e-01 9.503017832094e-01 1.500337660925e-01 1.098050159313e+00 1.108252806599e+00 1.007598311924e+00 4.198400424923e-07 6.250110349387e-07 8.333406899267e-04 9.924589870442e-04 1.000000000000e-03 +6.500238329268e-01 9.500462273445e-01 1.500051283654e-01 1.151138053174e+00 1.160870516466e+00 1.001309124772e+00 3.406033144264e-09 5.102370077331e-09 7.529475470392e-05 9.986925867947e-04 1.000000000000e-03 +7.500019785165e-01 9.500031309798e-01 1.500003386935e-01 1.210375527120e+00 1.219634788885e+00 1.000099669851e+00 2.414491229775e-12 3.621375902666e-12 2.005928962591e-06 9.999003400821e-04 1.000000000000e-03 +8.500000489817e-01 9.500000624558e-01 1.500000064188e-01 1.274754957604e+00 1.283549844712e+00 1.000002219760e+00 6.712204174474e-15 1.006828391254e-14 1.057685308825e-07 9.999977802449e-04 1.000000000000e-03 +9.500000001539e-01 9.500000001539e-01 1.500000000144e-01 1.343502884472e+00 1.351850583677e+00 1.000000006165e+00 6.666666746000e-15 1.000000005735e-14 1.054092556412e-07 9.999999938354e-04 1.000000000000e-03 +1.050000000000e+00 9.500000000000e-01 1.500000000000e-01 1.415980225851e+00 1.423903086590e+00 1.000000000000e+00 6.666666666670e-15 1.000000000000e-14 1.054092553390e-07 9.999999999997e-04 1.000000000000e-03 +1.150000000000e+00 9.500000000000e-01 1.500000000000e-01 1.491643389018e+00 1.499166435057e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +5.001004310366e-02 1.050330492593e+00 1.500301947207e-01 1.051520398319e+00 1.062169575637e+00 1.006363910418e+00 2.234219631335e-07 3.330136755012e-07 6.082887431158e-04 9.936763328330e-04 1.000000000000e-03 +1.500227731945e-01 1.050250450665e+00 1.500227731945e-01 1.060911325983e+00 1.071466132958e+00 1.004917558368e+00 1.233412003012e-07 1.841064462565e-07 4.522861020005e-04 9.951065056763e-04 1.000000000000e-03 +2.500212059279e-01 1.050140445876e+00 1.500126501740e-01 1.079493195661e+00 1.089866668309e+00 1.002870707846e+00 3.276590156800e-08 4.900816423043e-08 2.333527711676e-04 9.971375095281e-04 1.000000000000e-03 +3.500117333255e-01 1.050055605028e+00 1.500049381385e-01 1.106853643042e+00 1.116972008862e+00 1.001207244040e+00 3.339939030011e-09 5.003867655612e-09 7.456442148022e-05 9.987942116406e-04 1.000000000000e-03 +4.500039363165e-01 1.050014436149e+00 1.500012582639e-01 1.142380785387e+00 1.152186719374e+00 1.000338242690e+00 1.004636174847e-10 1.506444718357e-10 1.293764841399e-05 9.996618716791e-04 1.000000000000e-03 +5.500007427352e-01 1.050002184931e+00 1.500001859320e-01 1.185329239228e+00 1.194782599952e+00 1.000055781334e+00 6.341347735406e-13 9.511491039446e-13 1.028023510294e-06 9.999442217769e-04 1.000000000000e-03 +6.500000659017e-01 1.050000157658e+00 1.500000129100e-01 1.234909072262e+00 1.243985699527e+00 1.000004383206e+00 7.094857988261e-15 1.064224033526e-14 1.087414892469e-07 9.999956168133e-04 1.000000000000e-03 +7.500000020070e-01 1.050000003933e+00 1.500000003049e-01 1.290348794423e+00 1.299038110050e+00 1.000000118309e+00 6.666684007659e-15 1.000002482839e-14 1.054093861960e-07 9.999998816906e-04 1.000000000000e-03 +8.500000000123e-01 1.050000000020e+00 1.500000000014e-01 1.350925608634e+00 1.359227721930e+00 1.000000000639e+00 6.666666673808e-15 1.000000000432e-14 1.054092553617e-07 9.999999993612e-04 1.000000000000e-03 +9.500000000000e-01 1.050000000000e+00 1.500000000000e-01 1.415980225851e+00 1.423903086590e+00 1.000000000000e+00 6.666666666670e-15 1.000000000000e-14 1.054092553390e-07 9.999999999997e-04 1.000000000000e-03 +1.050000000000e+00 1.050000000000e+00 1.500000000000e-01 1.484924240492e+00 1.492481155660e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 1.000000000000e-03 1.000000000000e-03 +1.150000000000e+00 1.050000000000e+00 1.500000000000e-01 1.557241150240e+00 1.564448784716e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +5.000000738592e-02 1.150000352537e+00 1.500000223935e-01 1.151086795847e+00 1.160819029088e+00 1.000006887425e+00 7.478462217353e-15 1.121761606554e-14 1.116423658411e-07 9.999931126224e-04 1.000000000000e-03 +1.500000152525e-01 1.150000240797e+00 1.500000152525e-01 1.159741591222e+00 1.169401797068e+00 1.000004796728e+00 7.088868647758e-15 1.063325196682e-14 1.086955583618e-07 9.999952032948e-04 1.000000000000e-03 +2.500000117246e-01 1.150000109261e+00 1.500000068792e-01 1.176860338852e+00 1.186381161022e+00 1.000002262126e+00 6.736493387733e-15 1.010471722346e-14 1.059597262247e-07 9.999977378796e-04 1.000000000000e-03 +3.500000047701e-01 1.150000030901e+00 1.500000019262e-01 1.202081558968e+00 1.211404174910e+00 1.000000676528e+00 6.669472588312e-15 1.000420211434e-14 1.054314001000e-07 9.999993234721e-04 1.000000000000e-03 +4.500000010003e-01 1.150000004831e+00 1.500000002963e-01 1.234908908387e+00 1.243985535326e+00 1.000000113150e+00 6.666689773724e-15 1.000003352908e-14 1.054094320526e-07 9.999998868496e-04 1.000000000000e-03 +5.500000000910e-01 1.150000000340e+00 1.500000000201e-01 1.274754878744e+00 1.283549765645e+00 1.000000008515e+00 6.666666796467e-15 1.000000010955e-14 1.054092559163e-07 9.999999914852e-04 1.000000000000e-03 +6.500000000028e-01 1.150000000008e+00 1.500000000005e-01 1.320984481371e+00 1.329473580039e+00 1.000000000220e+00 6.666666669117e-15 1.000000000147e-14 1.054092553467e-07 9.999999997797e-04 1.000000000000e-03 +7.500000000000e-01 1.150000000000e+00 1.500000000000e-01 1.372953021775e+00 1.381122731693e+00 1.000000000001e+00 6.666666666674e-15 1.000000000000e-14 1.054092553390e-07 9.999999999993e-04 1.000000000000e-03 +8.500000000000e-01 1.150000000000e+00 1.500000000000e-01 1.430034964608e+00 1.437880384455e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +9.500000000000e-01 1.150000000000e+00 1.500000000000e-01 1.491643389018e+00 1.499166435057e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +1.050000000000e+00 1.150000000000e+00 1.500000000000e-01 1.557241150240e+00 1.564448784716e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +1.150000000000e+00 1.150000000000e+00 1.500000000000e-01 1.626345596729e+00 1.633248297106e+00 9.999999999987e-01 6.666666666652e-15 9.999999999991e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +1.131703138454e-01 1.131703138454e-01 6.137371061926e-01 1.600469926981e-01 6.342619927044e-01 2.638086680404e-01 5.792836927854e-02 3.293771753720e-01 6.049583781569e-01 3.790626014785e-03 1.000000000000e-03 +3.278392772666e-01 1.097088060936e-01 5.758958487508e-01 3.457088570650e-01 6.716923718947e-01 2.682218103749e-01 5.746247489267e-02 3.213523621309e-01 5.975434546084e-01 3.728257588755e-03 1.000000000000e-03 +5.041100433501e-01 9.923475840416e-02 5.041100433501e-01 5.137844616977e-01 7.197926151944e-01 3.379083203226e-01 6.031352092455e-02 2.677361756007e-01 5.454215246544e-01 2.959382589471e-03 1.000000000000e-03 +6.253081181100e-01 8.527989115402e-02 4.263076141900e-01 6.310965872269e-01 7.615911529987e-01 5.716292183752e-01 6.204758627383e-02 1.628177434234e-01 4.253335206680e-01 1.749385734414e-03 1.000000000000e-03 +7.048596943450e-01 7.329289634217e-02 3.658406648551e-01 7.086600294685e-01 7.975201749348e-01 9.206458701331e-01 6.852418249732e-02 1.116458315629e-01 3.522086369736e-01 1.086193977990e-03 1.000000000000e-03 +7.638753060881e-01 6.495373728911e-02 3.245982364499e-01 7.666319007444e-01 8.325193609433e-01 1.397474043835e+00 8.293075983167e-02 8.901499122385e-02 3.144925210626e-01 7.155767968727e-04 1.000000000000e-03 +8.105725329509e-01 5.909429775812e-02 2.954621784981e-01 8.127237951493e-01 8.647646304775e-01 2.035400051222e+00 1.016923323020e-01 7.494276044725e-02 2.885649559983e-01 4.913039082414e-04 1.000000000000e-03 +8.484842053663e-01 5.469883311741e-02 2.735900348858e-01 8.502454993121e-01 8.931791065006e-01 2.833362887582e+00 1.208805281613e-01 6.399490620727e-02 2.666560543873e-01 3.529374950109e-04 1.000000000000e-03 +8.891817580921e-01 5.162788821219e-02 2.581916788083e-01 8.906793125278e-01 9.273470659741e-01 2.098397227317e+00 4.191673677063e-02 2.996339507955e-02 1.824627666114e-01 4.765541943069e-04 1.000000000000e-03 +9.565745672447e-01 5.024304275092e-02 2.512219208086e-01 9.578931391571e-01 9.902887051457e-01 1.138338085681e+00 6.514533715184e-04 8.584269204109e-04 3.088377712239e-02 8.784736385252e-04 1.000000000000e-03 +1.050187292846e+00 5.000563419205e-02 2.500283957581e-01 1.051377150934e+00 1.080697974548e+00 1.003751619848e+00 6.106323594557e-08 9.125250919371e-08 3.184205974523e-04 9.962624021983e-04 1.000000000000e-03 +1.150000161354e+00 5.000000335783e-02 2.500000173475e-01 1.151086604670e+00 1.177922060293e+00 1.000003276470e+00 6.809582461824e-15 1.021434022575e-14 1.065329381811e-07 9.999967235404e-04 1.000000000000e-03 +1.097088060936e-01 3.278392772666e-01 5.758958487508e-01 3.457088570650e-01 6.716923718947e-01 2.682218103749e-01 5.746247489267e-02 3.213523621309e-01 5.975434546084e-01 3.728257588755e-03 1.000000000000e-03 +3.156493194378e-01 3.156493194378e-01 5.438772885674e-01 4.463955485027e-01 7.036131683976e-01 3.029328666958e-01 5.915864233421e-02 2.929294680673e-01 5.705060794956e-01 3.301061422972e-03 1.000000000000e-03 +4.852369548040e-01 2.874580786751e-01 4.852369548040e-01 5.639920649291e-01 7.440039997275e-01 3.977513613491e-01 6.117045550879e-02 2.306860319773e-01 5.062783950635e-01 2.514133444090e-03 1.000000000000e-03 +6.078831561070e-01 2.503892967076e-01 4.182047737493e-01 6.574319214826e-01 7.791738985433e-01 6.275638896783e-01 6.376860502189e-02 1.524193936364e-01 4.115274982528e-01 1.593463257602e-03 1.000000000000e-03 +6.920856357920e-01 2.173250050085e-01 3.621401678412e-01 7.254051868243e-01 8.107762861824e-01 9.709503414021e-01 6.998564745074e-02 1.081192999268e-01 3.466014360534e-01 1.029918789210e-03 1.000000000000e-03 +7.537423432607e-01 1.932566777741e-01 3.220678556236e-01 7.781231673253e-01 8.421421300198e-01 1.467223462259e+00 8.493917407974e-02 8.683664376757e-02 3.106206041810e-01 6.815594391193e-04 1.000000000000e-03 +8.019255810333e-01 1.760659940933e-01 2.934659447285e-01 8.210261090803e-01 8.718980057937e-01 2.110265140158e+00 1.019406316579e-01 7.246053805137e-02 2.837458527379e-01 4.738741028177e-04 1.000000000000e-03 +8.410707048394e-01 1.631553299519e-01 2.719818345032e-01 8.567494337499e-01 8.988847036915e-01 2.876422437143e+00 1.177464610312e-01 6.140255661549e-02 2.611992781500e-01 3.476540813641e-04 1.000000000000e-03 +8.846783564256e-01 1.543564808184e-01 2.572889711585e-01 8.980432715068e-01 9.341730739956e-01 1.935811375776e+00 3.161924396550e-02 2.450076827823e-02 1.649941691840e-01 5.165792558685e-04 1.000000000000e-03 +9.554301471184e-01 1.506045322793e-01 2.510109899805e-01 9.672272179616e-01 9.992672356566e-01 1.114309142144e+00 4.249390367289e-04 5.720212919255e-04 2.521069640550e-02 8.974170292422e-04 1.000000000000e-03 +1.050140445876e+00 1.500126501740e-01 2.500212059279e-01 1.060800995134e+00 1.089866668309e+00 1.002870707846e+00 3.276590156800e-08 4.900816423043e-08 2.333527711676e-04 9.971375095281e-04 1.000000000000e-03 +1.150000109261e+00 1.500000068792e-01 2.500000117246e-01 1.159741459708e+00 1.186381161022e+00 1.000002262126e+00 6.736493387733e-15 1.010471722346e-14 1.059597262247e-07 9.999977378796e-04 1.000000000000e-03 +9.923475840416e-02 5.041100433501e-01 5.041100433501e-01 5.137844616977e-01 7.197926151944e-01 3.379083203226e-01 6.031352092455e-02 2.677361756007e-01 5.454215246544e-01 2.959382589471e-03 1.000000000000e-03 +2.874580786751e-01 4.852369548040e-01 4.852369548040e-01 5.639920649291e-01 7.440039997275e-01 3.977513613491e-01 6.117045550879e-02 2.306860319773e-01 5.062783950635e-01 2.514133444090e-03 1.000000000000e-03 +4.483153166868e-01 4.483153166868e-01 4.483153166868e-01 6.340136010780e-01 7.765049063128e-01 5.408444428412e-01 6.215085099108e-02 1.723717008108e-01 4.376346787128e-01 1.848960478815e-03 1.000000000000e-03 +5.738701981290e-01 4.002568289250e-01 4.002568289250e-01 6.996660156115e-01 8.060633117211e-01 7.417807115440e-01 6.671589326051e-02 1.349102751438e-01 3.871696084604e-01 1.348107310473e-03 1.000000000000e-03 +6.659939767429e-01 3.538166241583e-01 3.538166241583e-01 7.541446682094e-01 8.330188377939e-01 1.087486286288e+00 7.353285947007e-02 1.014259127640e-01 3.357014426938e-01 9.195518257187e-04 1.000000000000e-03 +7.332157559213e-01 3.168319426403e-01 3.168319426403e-01 7.987414003346e-01 8.592847633269e-01 1.596157075751e+00 8.674647347129e-02 8.152061735261e-02 3.009625619992e-01 6.265047564505e-04 1.000000000000e-03 +7.846812399904e-01 2.894040141696e-01 2.894040141696e-01 8.363488098936e-01 8.850050933344e-01 2.273426539970e+00 1.030905689396e-01 6.801884762524e-02 2.749117992400e-01 4.398646635019e-04 1.000000000000e-03 +8.268429154658e-01 2.688552726687e-01 2.688552726687e-01 8.694552113236e-01 9.100744596677e-01 2.828302968192e+00 1.031616247318e-01 5.471211494596e-02 2.465587938583e-01 3.535689108438e-04 1.000000000000e-03 +8.767071009659e-01 2.556791237822e-01 2.556791237822e-01 9.132289719573e-01 9.483453851631e-01 1.677696230122e+00 1.749563827157e-02 1.564255610532e-02 1.318355714320e-01 5.960554610815e-04 1.000000000000e-03 +9.536225497178e-01 2.506762722762e-01 2.506762722762e-01 9.860195539707e-01 1.017385450208e+00 1.077174526575e+00 1.721571765080e-04 2.397343776622e-04 1.632089246138e-02 9.283546680031e-04 1.000000000000e-03 +1.050077153787e+00 2.500115557371e-01 2.500115557371e-01 1.079429389496e+00 1.108004325311e+00 1.001643019191e+00 8.292997614844e-09 1.241909161640e-08 1.174691052358e-04 9.983596758928e-04 1.000000000000e-03 +1.150000048668e+00 2.500000052000e-01 2.500000052000e-01 1.176860278256e+00 1.203120990232e+00 1.000001047065e+00 6.677499793880e-15 1.001623920316e-14 1.054948087357e-07 9.999989529357e-04 1.000000000000e-03 +8.527989115402e-02 6.253081181100e-01 4.263076141900e-01 6.310965872269e-01 7.615911529987e-01 5.716292183752e-01 6.204758627383e-02 1.628177434234e-01 4.253335206680e-01 1.749385734414e-03 1.000000000000e-03 +2.503892967076e-01 6.078831561070e-01 4.182047737493e-01 6.574319214826e-01 7.791738985433e-01 6.275638896783e-01 6.376860502189e-02 1.524193936364e-01 4.115274982528e-01 1.593463257602e-03 1.000000000000e-03 +4.002568289250e-01 5.738701981290e-01 4.002568289250e-01 6.996660156115e-01 8.060633117211e-01 7.417807115440e-01 6.671589326051e-02 1.349102751438e-01 3.871696084604e-01 1.348107310473e-03 1.000000000000e-03 +5.273390683969e-01 5.273390683969e-01 3.724252671245e-01 7.457700624961e-01 8.335907663285e-01 9.460278196119e-01 6.967433665543e-02 1.104740292162e-01 3.503554214670e-01 1.057051367063e-03 1.000000000000e-03 +6.275328031620e-01 4.770543551863e-01 3.393995969689e-01 7.882755082118e-01 8.582367757613e-01 1.292401321224e+00 7.918183972726e-02 9.190083423806e-02 3.195497426729e-01 7.737534646379e-04 1.000000000000e-03 +7.027169984481e-01 4.322360928592e-01 3.083511014492e-01 8.250086180629e-01 8.807494658772e-01 1.800807061068e+00 8.879537809786e-02 7.396298583358e-02 2.866724531074e-01 5.553065742683e-04 1.000000000000e-03 +7.594104780770e-01 3.966691189697e-01 2.831805379222e-01 8.567675671717e-01 9.023535234126e-01 2.513388750675e+00 1.042563827721e-01 6.222060718465e-02 2.629334668370e-01 3.978692113312e-04 1.000000000000e-03 +8.074777231548e-01 3.703826104961e-01 2.644888606480e-01 8.883712914931e-01 9.269077132898e-01 2.494796309775e+00 6.943321923801e-02 4.174682656413e-02 2.153726139718e-01 4.008343270678e-04 1.000000000000e-03 +8.672845100557e-01 3.552727392005e-01 2.537459099451e-01 9.372305696047e-01 9.709727737766e-01 1.414880451002e+00 6.775175115164e-03 7.182771283291e-03 8.933564227919e-02 7.067734940376e-04 1.000000000000e-03 +9.518710374309e-01 3.504927547923e-01 2.503501898377e-01 1.014348876404e+00 1.044786514372e+00 1.041387029896e+00 3.855743412984e-05 5.553761429170e-05 7.855473271809e-03 9.602577824496e-04 1.000000000000e-03 +1.050029626137e+00 3.500062159881e-01 2.500043850086e-01 1.106827252553e+00 1.134710870450e+00 1.000670309941e+00 7.874777002134e-10 1.180425299507e-09 3.621579304833e-05 9.993301390735e-04 1.000000000000e-03 +1.150000013372e+00 3.500000020601e-01 2.500000014174e-01 1.202081541410e+00 1.227802929181e+00 1.000000303960e+00 6.667070803580e-15 1.000060316559e-14 1.054124342528e-07 9.999996960404e-04 1.000000000000e-03 +7.329289634217e-02 7.048596943450e-01 3.658406648551e-01 7.086600294685e-01 7.975201749348e-01 9.206458701331e-01 6.852418249732e-02 1.116458315629e-01 3.522086369736e-01 1.086193977990e-03 1.000000000000e-03 +2.173250050085e-01 6.920856357920e-01 3.621401678412e-01 7.254051868243e-01 8.107762861824e-01 9.709503414021e-01 6.998564745074e-02 1.081192999268e-01 3.466014360534e-01 1.029918789210e-03 1.000000000000e-03 +3.538166241583e-01 6.659939767429e-01 3.538166241583e-01 7.541446682094e-01 8.330188377939e-01 1.087486286288e+00 7.353285947007e-02 1.014259127640e-01 3.357014426938e-01 9.195518257187e-04 1.000000000000e-03 +4.770543551863e-01 6.275328031620e-01 3.393995969689e-01 7.882755082118e-01 8.582367757613e-01 1.292401321224e+00 7.918183972726e-02 9.190083423806e-02 3.195497426729e-01 7.737534646379e-04 1.000000000000e-03 +5.814907764886e-01 5.814907764886e-01 3.190606395135e-01 8.223521425050e-01 8.820786461361e-01 1.600040277246e+00 8.307286999210e-02 7.787885515147e-02 2.941633241575e-01 6.249842670968e-04 1.000000000000e-03 +6.642878916683e-01 5.353096711151e-01 2.960394675885e-01 8.531323736716e-01 9.030361085674e-01 2.135117513139e+00 9.442760238853e-02 6.633892641091e-02 2.714957057383e-01 4.683582959000e-04 1.000000000000e-03 +7.281785353636e-01 4.955699764393e-01 2.748803732801e-01 8.808141579881e-01 9.227094886945e-01 2.618585074440e+00 9.269097363022e-02 5.309602571345e-02 2.428900659271e-01 3.818856258522e-04 1.000000000000e-03 +7.862900372849e-01 4.673503370641e-01 2.595015168464e-01 9.146957747182e-01 9.507940878723e-01 1.947192188906e+00 3.106782911369e-02 2.393279098799e-02 1.630705061826e-01 5.135599894542e-04 1.000000000000e-03 +8.588740572130e-01 4.535990167792e-01 2.519736230059e-01 9.712964090207e-01 1.003447766885e+00 1.210976307308e+00 1.674951055676e-03 2.074711592913e-03 4.801286393496e-02 8.257799875731e-04 1.000000000000e-03 +9.507029783717e-01 4.502404267812e-01 2.501317243472e-01 1.051928036984e+00 1.081257820558e+00 1.016700794325e+00 3.858717059976e-06 5.692998001252e-06 2.515065274446e-03 9.835735405950e-04 1.000000000000e-03 +1.050007379972e+00 4.500020073429e-01 2.500010753230e-01 1.142373539876e+00 1.169409185132e+00 1.000180093289e+00 2.109138575369e-11 3.163138203091e-11 5.928404510013e-06 9.998199391388e-04 1.000000000000e-03 +1.150000002018e+00 4.500000004171e-01 2.500000002108e-01 1.234908905554e+00 1.259960318868e+00 1.000000048945e+00 6.666670352416e-15 1.000000503918e-14 1.054092818977e-07 9.999999510551e-04 1.000000000000e-03 +6.495373728911e-02 7.638753060881e-01 3.245982364499e-01 7.666319007444e-01 8.325193609433e-01 1.397474043835e+00 8.293075983167e-02 8.901499122385e-02 3.144925210626e-01 7.155767968727e-04 1.000000000000e-03 +1.932566777741e-01 7.537423432607e-01 3.220678556236e-01 7.781231673253e-01 8.421421300198e-01 1.467223462259e+00 8.493917407974e-02 8.683664376757e-02 3.106206041810e-01 6.815594391193e-04 1.000000000000e-03 +3.168319426403e-01 7.332157559213e-01 3.168319426403e-01 7.987414003346e-01 8.592847633269e-01 1.596157075751e+00 8.674647347129e-02 8.152061735261e-02 3.009625619992e-01 6.265047564505e-04 1.000000000000e-03 +4.322360928592e-01 7.027169984481e-01 3.083511014492e-01 8.250086180629e-01 8.807494658772e-01 1.800807061068e+00 8.879537809786e-02 7.396298583358e-02 2.866724531074e-01 5.553065742683e-04 1.000000000000e-03 +5.353096711151e-01 6.642878916683e-01 2.960394675885e-01 8.531323736716e-01 9.030361085674e-01 2.135117513139e+00 9.442760238853e-02 6.633892641091e-02 2.714957057383e-01 4.683582958999e-04 1.000000000000e-03 +6.225210510365e-01 6.225210510365e-01 2.805844007454e-01 8.803777132386e-01 9.240089414659e-01 2.481587716363e+00 9.232258582520e-02 5.580454715529e-02 2.490081372059e-01 4.029678231424e-04 1.000000000000e-03 +6.956321279977e-01 5.852662115386e-01 2.653175053018e-01 9.090877822693e-01 9.470131860174e-01 2.226668007700e+00 5.193225505464e-02 3.498428248511e-02 1.971583753825e-01 4.491015259310e-04 1.000000000000e-03 +7.678461741125e-01 5.611053846716e-01 2.548924372583e-01 9.510136696214e-01 9.845796841181e-01 1.467039074858e+00 8.339275385155e-03 8.526639332319e-03 9.733469937580e-02 6.816451021230e-04 1.000000000000e-03 +8.533066030936e-01 5.517072298446e-01 2.507572994947e-01 1.016126481471e+00 1.046609884148e+00 1.084005239392e+00 2.052138814523e-04 2.839661756166e-04 1.776282558906e-02 9.225047662693e-04 1.000000000000e-03 +9.501751470354e-01 5.500743564085e-01 2.500327480275e-01 1.097913752360e+00 1.126024414792e+00 1.004605670535e+00 1.252347012244e-07 1.869908336637e-07 4.558153057541e-04 9.954154444173e-04 1.000000000000e-03 +1.050001060819e+00 5.500003604437e-01 2.500001513532e-01 1.185328066069e+00 1.211405258321e+00 1.000028144139e+00 1.186538238796e-13 1.779757268458e-13 4.446918119400e-07 9.999718566531e-04 1.000000000000e-03 +1.150000000138e+00 5.500000000367e-01 2.500000000139e-01 1.274754878538e+00 1.299038105817e+00 1.000000003557e+00 6.666666712307e-15 1.000000003289e-14 1.054092555123e-07 9.999999964429e-04 1.000000000000e-03 +5.909429775812e-02 8.105725329509e-01 2.954621784981e-01 8.127237951493e-01 8.647646304775e-01 2.035400051222e+00 1.016923323020e-01 7.494276044725e-02 2.885649559983e-01 4.913039082414e-04 1.000000000000e-03 +1.760659940933e-01 8.019255810333e-01 2.934659447285e-01 8.210261090803e-01 8.718980057937e-01 2.110265140158e+00 1.019406316580e-01 7.246053805137e-02 2.837458527379e-01 4.738741028177e-04 1.000000000000e-03 +2.894040141696e-01 7.846812399904e-01 2.894040141696e-01 8.363488098936e-01 8.850050933344e-01 2.273426539970e+00 1.030905689396e-01 6.801884762524e-02 2.749117992400e-01 4.398646635019e-04 1.000000000000e-03 +3.966691189697e-01 7.594104780770e-01 2.831805379222e-01 8.567675671717e-01 9.023535234126e-01 2.513388750675e+00 1.042563827721e-01 6.222060718465e-02 2.629334668370e-01 3.978692113312e-04 1.000000000000e-03 +4.955699764393e-01 7.281785353636e-01 2.748803732801e-01 8.808141579881e-01 9.227094886945e-01 2.618585074440e+00 9.269097363022e-02 5.309602571345e-02 2.428900659271e-01 3.818856258522e-04 1.000000000000e-03 +5.852662115386e-01 6.956321279977e-01 2.653175053018e-01 9.090877822693e-01 9.470131860174e-01 2.226668007700e+00 5.193225505464e-02 3.498428248511e-02 1.971583753825e-01 4.491015259310e-04 1.000000000000e-03 +6.691807936443e-01 6.691807936443e-01 2.567436541612e-01 9.463645540514e-01 9.805728800640e-01 1.595953443658e+00 1.364709631086e-02 1.282659249719e-02 1.193807750072e-01 6.265846939169e-04 1.000000000000e-03 +7.560063406187e-01 6.547642605665e-01 2.517267781744e-01 1.000130903418e+00 1.031323516081e+00 1.173522207068e+00 1.060510833040e-03 1.355548484706e-03 3.880934144000e-02 8.521355573652e-04 1.000000000000e-03 +8.507833726432e-01 6.505023636775e-01 2.501842151115e-01 1.070974169771e+00 1.099808080443e+00 1.022827357407e+00 7.707764946241e-06 1.130361574280e-05 3.543948793022e-03 9.776821012440e-04 1.000000000000e-03 +9.500248616288e-01 6.500128579779e-01 2.500046081855e-01 1.151114222503e+00 1.177950023288e+00 1.000734586391e+00 8.150297838859e-10 1.221647270370e-09 3.684271781460e-05 9.992659528305e-04 1.000000000000e-03 +1.050000072198e+00 6.500000301824e-01 2.500000099645e-01 1.234908980797e+00 1.259960394550e+00 1.000002080336e+00 6.731611647449e-15 1.009739646519e-14 1.059213359327e-07 9.999979196679e-04 1.000000000000e-03 +1.150000000003e+00 6.500000000011e-01 2.500000000003e-01 1.320984481366e+00 1.344432965978e+00 1.000000000087e+00 6.666666667636e-15 1.000000000058e-14 1.054092553420e-07 9.999999999128e-04 1.000000000000e-03 +5.469883311741e-02 8.484842053663e-01 2.735900348858e-01 8.502454993121e-01 8.931791065006e-01 2.833362887582e+00 1.208805281613e-01 6.399490620727e-02 2.666560543873e-01 3.529374950109e-04 1.000000000000e-03 +1.631553299519e-01 8.410707048394e-01 2.719818345032e-01 8.567494337499e-01 8.988847036915e-01 2.876422437143e+00 1.177464610312e-01 6.140255661549e-02 2.611992781500e-01 3.476540813641e-04 1.000000000000e-03 +2.688552726687e-01 8.268429154658e-01 2.688552726687e-01 8.694552113236e-01 9.100744596677e-01 2.828302968192e+00 1.031616247318e-01 5.471211494596e-02 2.465587938583e-01 3.535689108438e-04 1.000000000000e-03 +3.703826104961e-01 8.074777231548e-01 2.644888606480e-01 8.883712914931e-01 9.269077132898e-01 2.494796309775e+00 6.943321923801e-02 4.174682656413e-02 2.153726139718e-01 4.008343270678e-04 1.000000000000e-03 +4.673503370641e-01 7.862900372849e-01 2.595015168464e-01 9.146957747182e-01 9.507940878723e-01 1.947192188906e+00 3.106782911369e-02 2.393279098799e-02 1.630705061826e-01 5.135599894542e-04 1.000000000000e-03 +5.611053846716e-01 7.678461741125e-01 2.548924372583e-01 9.510136696214e-01 9.845796841181e-01 1.467039074858e+00 8.339275385155e-03 8.526639332319e-03 9.733469937580e-02 6.816451021230e-04 1.000000000000e-03 +6.547642605665e-01 7.560063406187e-01 2.517267781744e-01 1.000130903418e+00 1.031323516081e+00 1.173522207068e+00 1.060510833040e-03 1.355548484706e-03 3.880934144000e-02 8.521355573652e-04 1.000000000000e-03 +7.511195431039e-01 7.511195431039e-01 2.503348907093e-01 1.062243444821e+00 1.091342610536e+00 1.039656753087e+00 3.109680020569e-05 4.486596193412e-05 7.060528933139e-03 9.618559173795e-04 1.000000000000e-03 +8.500957063172e-01 7.500758320950e-01 2.500228304315e-01 1.133700341268e+00 1.160942668494e+00 1.003315024685e+00 4.467460836382e-08 6.679050038820e-08 2.724181842279e-04 9.966959283937e-04 1.000000000000e-03 +9.500015431804e-01 7.500009779593e-01 2.500002795723e-01 1.210373660894e+00 1.235922545620e+00 1.000051094872e+00 4.533505821729e-13 6.799911291996e-13 8.692213176808e-07 9.999489077384e-04 1.000000000000e-03 +1.050000001670e+00 7.500000008535e-01 2.500000002202e-01 1.290348791911e+00 1.314343944673e+00 1.000000051969e+00 6.666669630824e-15 1.000000392655e-14 1.054092760337e-07 9.999999480309e-04 1.000000000000e-03 +1.150000000000e+00 7.500000000000e-01 2.500000000000e-01 1.372953021775e+00 1.395528573695e+00 9.999999999998e-01 6.666666666665e-15 9.999999999999e-15 1.054092553389e-07 1.000000000000e-03 1.000000000000e-03 +5.162788821219e-02 8.891817580921e-01 2.581916788083e-01 8.906793125278e-01 9.273470659741e-01 2.098397227317e+00 4.191673677063e-02 2.996339507955e-02 1.824627666114e-01 4.765541943069e-04 1.000000000000e-03 +1.543564808184e-01 8.846783564256e-01 2.572889711585e-01 8.980432715068e-01 9.341730739956e-01 1.935811375776e+00 3.161924396550e-02 2.450076827823e-02 1.649941691840e-01 5.165792558685e-04 1.000000000000e-03 +2.556791237822e-01 8.767071009659e-01 2.556791237822e-01 9.132289719573e-01 9.483453851631e-01 1.677696230122e+00 1.749563827157e-02 1.564255610532e-02 1.318355714320e-01 5.960554610815e-04 1.000000000000e-03 +3.552727392005e-01 8.672845100557e-01 2.537459099451e-01 9.372305696047e-01 9.709727737766e-01 1.414880451002e+00 6.775175115164e-03 7.182771283291e-03 8.933564227919e-02 7.067734940376e-04 1.000000000000e-03 +4.535990167792e-01 8.588740572130e-01 2.519736230059e-01 9.712964090207e-01 1.003447766885e+00 1.210976307308e+00 1.674951055676e-03 2.074711592913e-03 4.801286393496e-02 8.257799875731e-04 1.000000000000e-03 +5.517072298446e-01 8.533066030936e-01 2.507572994947e-01 1.016126481471e+00 1.046609884148e+00 1.084005239392e+00 2.052138814523e-04 2.839661756166e-04 1.776282558906e-02 9.225047662693e-04 1.000000000000e-03 +6.505023636775e-01 8.507833726432e-01 2.501842151115e-01 1.070974169771e+00 1.099808080443e+00 1.022827357407e+00 7.707764946241e-06 1.130361574280e-05 3.543948793022e-03 9.776821012440e-04 1.000000000000e-03 +7.500758320950e-01 8.500957063172e-01 2.500228304315e-01 1.133700341268e+00 1.160942668494e+00 1.003315024685e+00 4.467460836382e-08 6.679050038820e-08 2.724181842278e-04 9.966959283937e-04 1.000000000000e-03 +8.500039171250e-01 8.500039171250e-01 2.500009174635e-01 1.202087067668e+00 1.227808526191e+00 1.000159800910e+00 1.017237001464e-11 1.525611708056e-11 4.117188506812e-06 9.998402246219e-04 1.000000000000e-03 +9.500000276254e-01 8.500000217134e-01 2.500000047996e-01 1.274754913464e+00 1.299038141011e+00 1.000001018502e+00 6.673041433184e-15 1.000955195503e-14 1.054595865461e-07 9.999989814990e-04 1.000000000000e-03 +1.050000000008e+00 8.500000000048e-01 2.500000000010e-01 1.350925608620e+00 1.373863166412e+00 1.000000000258e+00 6.666666669539e-15 1.000000000173e-14 1.054092553480e-07 9.999999997418e-04 1.000000000000e-03 +1.150000000000e+00 8.500000000000e-01 2.500000000000e-01 1.430034964608e+00 1.451723114096e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +5.024304275092e-02 9.565745672447e-01 2.512219208086e-01 9.578931391571e-01 9.902887051457e-01 1.138338085681e+00 6.514533715183e-04 8.584269204109e-04 3.088377712239e-02 8.784736385252e-04 1.000000000000e-03 +1.506045322793e-01 9.554301471184e-01 2.510109899805e-01 9.672272179616e-01 9.992672356566e-01 1.114309142144e+00 4.249390367289e-04 5.720212919255e-04 2.521069640550e-02 8.974170292422e-04 1.000000000000e-03 +2.506762722762e-01 9.536225497178e-01 2.506762722762e-01 9.860195539707e-01 1.017385450208e+00 1.077174526575e+00 1.721571765080e-04 2.397343776622e-04 1.632089246138e-02 9.283546680031e-04 1.000000000000e-03 +3.504927547923e-01 9.518710374309e-01 2.503501898377e-01 1.014348876404e+00 1.044786514372e+00 1.041387029896e+00 3.855743412984e-05 5.553761429169e-05 7.855473271809e-03 9.602577824496e-04 1.000000000000e-03 +4.502404267812e-01 9.507029783717e-01 2.501317243472e-01 1.051928036984e+00 1.081257820558e+00 1.016700794325e+00 3.858717059976e-06 5.692998001252e-06 2.515065274446e-03 9.835735405950e-04 1.000000000000e-03 +5.500743564085e-01 9.501751470354e-01 2.500327480275e-01 1.097913752360e+00 1.126024414792e+00 1.004605670535e+00 1.252347012244e-07 1.869908336637e-07 4.558153057541e-04 9.954154444173e-04 1.000000000000e-03 +6.500128579779e-01 9.500248616288e-01 2.500046081855e-01 1.151114222503e+00 1.177950023288e+00 1.000734586391e+00 8.150297838859e-10 1.221647270370e-09 3.684271781460e-05 9.992659528305e-04 1.000000000000e-03 +7.500009779593e-01 9.500015431804e-01 2.500002795723e-01 1.210373660894e+00 1.235922545620e+00 1.000051094872e+00 4.533505821729e-13 6.799911291996e-13 8.692213176808e-07 9.999489077384e-04 1.000000000000e-03 +8.500000217134e-01 9.500000276254e-01 2.500000047996e-01 1.274754913464e+00 1.299038141011e+00 1.000001018502e+00 6.673041433184e-15 1.000955195503e-14 1.054595865461e-07 9.999989814991e-04 1.000000000000e-03 +9.500000000602e-01 9.500000000602e-01 2.500000000097e-01 1.343502884340e+00 1.366565036957e+00 1.000000002492e+00 6.666666696128e-15 1.000000001928e-14 1.054092554405e-07 9.999999975083e-04 1.000000000000e-03 +1.050000000000e+00 9.500000000000e-01 2.500000000000e-01 1.415980225851e+00 1.437880384455e+00 1.000000000000e+00 6.666666666668e-15 1.000000000000e-14 1.054092553390e-07 9.999999999999e-04 1.000000000000e-03 +1.150000000000e+00 9.500000000000e-01 2.500000000000e-01 1.491643389018e+00 1.512448346225e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +5.000563419205e-02 1.050187292846e+00 2.500283957581e-01 1.051377150934e+00 1.080697974548e+00 1.003751619848e+00 6.106323594557e-08 9.125250919370e-08 3.184205974523e-04 9.962624021983e-04 1.000000000000e-03 +1.500126501740e-01 1.050140445876e+00 2.500212059279e-01 1.060800995134e+00 1.089866668309e+00 1.002870707846e+00 3.276590156800e-08 4.900816423043e-08 2.333527711676e-04 9.971375095281e-04 1.000000000000e-03 +2.500115557371e-01 1.050077153787e+00 2.500115557371e-01 1.079429389496e+00 1.108004325311e+00 1.001643019191e+00 8.292997614844e-09 1.241909161640e-08 1.174691052358e-04 9.983596758928e-04 1.000000000000e-03 +3.500062159881e-01 1.050029626137e+00 2.500043850086e-01 1.106827252553e+00 1.134710870450e+00 1.000670309941e+00 7.874777002134e-10 1.180425299507e-09 3.621579304833e-05 9.993301390735e-04 1.000000000000e-03 +4.500020073429e-01 1.050007379972e+00 2.500010753230e-01 1.142373539876e+00 1.169409185132e+00 1.000180093289e+00 2.109138575369e-11 3.163138203091e-11 5.928404510013e-06 9.998199391387e-04 1.000000000000e-03 +5.500003604437e-01 1.050001060819e+00 2.500001513532e-01 1.185328066069e+00 1.211405258321e+00 1.000028144139e+00 1.186538238796e-13 1.779757268458e-13 4.446918119400e-07 9.999718566531e-04 1.000000000000e-03 +6.500000301824e-01 1.050000072198e+00 2.500000099645e-01 1.234908980797e+00 1.259960394550e+00 1.000002080336e+00 6.731611647449e-15 1.009739646519e-14 1.059213359327e-07 9.999979196679e-04 1.000000000000e-03 +7.500000008535e-01 1.050000001670e+00 2.500000002202e-01 1.290348791911e+00 1.314343944673e+00 1.000000051969e+00 6.666669630824e-15 1.000000392655e-14 1.054092760337e-07 9.999999480309e-04 1.000000000000e-03 +8.500000000048e-01 1.050000000008e+00 2.500000000010e-01 1.350925608620e+00 1.373863166412e+00 1.000000000258e+00 6.666666669539e-15 1.000000000173e-14 1.054092553480e-07 9.999999997418e-04 1.000000000000e-03 +9.500000000000e-01 1.050000000000e+00 2.500000000000e-01 1.415980225851e+00 1.437880384455e+00 1.000000000000e+00 6.666666666668e-15 1.000000000000e-14 1.054092553390e-07 9.999999999999e-04 1.000000000000e-03 +1.050000000000e+00 1.050000000000e+00 2.500000000000e-01 1.484924240492e+00 1.505822034638e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 1.000000000000e-03 1.000000000000e-03 +1.150000000000e+00 1.050000000000e+00 2.500000000000e-01 1.557241150240e+00 1.577181029559e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +5.000000335783e-02 1.150000161354e+00 2.500000173475e-01 1.151086604670e+00 1.177922060293e+00 1.000003276470e+00 6.809582461824e-15 1.021434022575e-14 1.065329381811e-07 9.999967235404e-04 1.000000000000e-03 +1.500000068792e-01 1.150000109261e+00 2.500000117246e-01 1.159741459708e+00 1.186381161022e+00 1.000002262126e+00 6.736493387733e-15 1.010471722346e-14 1.059597262247e-07 9.999977378796e-04 1.000000000000e-03 +2.500000052000e-01 1.150000048668e+00 2.500000052000e-01 1.176860278256e+00 1.203120990232e+00 1.000001047065e+00 6.677499793880e-15 1.001623920316e-14 1.054948087357e-07 9.999989529357e-04 1.000000000000e-03 +3.500000020601e-01 1.150000013372e+00 2.500000014174e-01 1.202081541410e+00 1.227802929181e+00 1.000000303960e+00 6.667070803580e-15 1.000060316559e-14 1.054124342528e-07 9.999996960404e-04 1.000000000000e-03 +4.500000004171e-01 1.150000002018e+00 2.500000002108e-01 1.234908905554e+00 1.259960318868e+00 1.000000048945e+00 6.666670352416e-15 1.000000503918e-14 1.054092818977e-07 9.999999510551e-04 1.000000000000e-03 +5.500000000367e-01 1.150000000138e+00 2.500000000139e-01 1.274754878538e+00 1.299038105817e+00 1.000000003557e+00 6.666666712308e-15 1.000000003289e-14 1.054092555123e-07 9.999999964429e-04 1.000000000000e-03 +6.500000000011e-01 1.150000000003e+00 2.500000000003e-01 1.320984481366e+00 1.344432965978e+00 1.000000000087e+00 6.666666667636e-15 1.000000000058e-14 1.054092553420e-07 9.999999999128e-04 1.000000000000e-03 +7.500000000000e-01 1.150000000000e+00 2.500000000000e-01 1.372953021775e+00 1.395528573695e+00 9.999999999999e-01 6.666666666665e-15 9.999999999999e-15 1.054092553389e-07 1.000000000000e-03 1.000000000000e-03 +8.500000000000e-01 1.150000000000e+00 2.500000000000e-01 1.430034964608e+00 1.451723114096e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +9.500000000000e-01 1.150000000000e+00 2.500000000000e-01 1.491643389018e+00 1.512448346225e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +1.050000000000e+00 1.150000000000e+00 2.500000000000e-01 1.557241150240e+00 1.577181029559e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +1.150000000000e+00 1.150000000000e+00 2.500000000000e-01 1.626345596729e+00 1.645448267190e+00 9.999999999987e-01 6.666666666652e-15 9.999999999991e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +8.976360151738e-02 8.976360151738e-02 6.838961549190e-01 1.269449026733e-01 6.955781473190e-01 5.064217343503e-01 6.134444706088e-02 1.816996869405e-01 4.493200875156e-01 1.974638788525e-03 1.000000000000e-03 +2.643282308460e-01 8.844550332267e-02 6.660562392983e-01 2.787328841027e-01 7.220269625079e-01 5.357863057219e-01 6.224265057545e-02 1.742559950975e-01 4.400201953667e-01 1.866415750684e-03 1.000000000000e-03 +4.263076141900e-01 8.527989115402e-02 6.253081181100e-01 4.347537714059e-01 7.615911529987e-01 5.716292183752e-01 6.204758627383e-02 1.628177434234e-01 4.253335206680e-01 1.749385734414e-03 1.000000000000e-03 +5.630648087087e-01 7.891960376430e-02 5.630648087087e-01 5.685686261697e-01 8.001951396195e-01 7.013999936722e-01 6.578151852358e-02 1.406790400279e-01 3.953606511471e-01 1.425720001457e-03 1.000000000000e-03 +6.628716196895e-01 7.072018897600e-02 4.969186924950e-01 6.666334294937e-01 8.314615542943e-01 1.034388147104e+00 7.004321222711e-02 1.015719472761e-01 3.359430296875e-01 9.667550839590e-04 1.000000000000e-03 +7.322726967488e-01 6.338159151936e-02 4.438962276043e-01 7.350105635617e-01 8.586526593616e-01 1.576292409329e+00 8.532994818551e-02 8.119998644968e-02 3.003701169662e-01 6.344000605989e-04 1.000000000000e-03 +7.842642140560e-01 5.785964697203e-02 4.052982094955e-01 7.863956359216e-01 8.846947127777e-01 2.261178909548e+00 1.022080053113e-01 6.780180343958e-02 2.744728350039e-01 4.422471816703e-04 1.000000000000e-03 +8.265940334940e-01 5.374510938188e-02 3.764470266887e-01 8.283394430970e-01 9.098673512623e-01 2.830032831454e+00 1.032820716221e-01 5.474251242289e-02 2.466272770867e-01 3.533527911357e-04 1.000000000000e-03 +8.765470342601e-01 5.112215598374e-02 3.579497548144e-01 8.780365471338e-01 9.481962903716e-01 1.676016033909e+00 1.727129957706e-02 1.545745914206e-02 1.310532510176e-01 5.966530031743e-04 1.000000000000e-03 +9.535695696354e-01 5.013266291702e-02 3.509374039509e-01 9.548864896027e-01 1.017332428225e+00 1.076104499193e+00 1.603336170470e-04 2.234917015502e-04 1.575830298077e-02 9.292777799459e-04 1.000000000000e-03 +1.050075302017e+00 5.000223109000e-02 3.500159366535e-01 1.051265124990e+00 1.108002490490e+00 1.001601459830e+00 6.366458072343e-09 9.534418120891e-09 1.029261770013e-04 9.984011007429e-04 1.000000000000e-03 +1.150000046297e+00 5.000000095303e-02 3.500000071517e-01 1.151086489617e+00 1.203120987924e+00 1.000000994246e+00 6.672725087915e-15 1.000907768038e-14 1.054570880626e-07 9.999990057546e-04 1.000000000000e-03 +8.844550332267e-02 2.643282308460e-01 6.660562392983e-01 2.787328841027e-01 7.220269625079e-01 5.357863057219e-01 6.224265057545e-02 1.742559950975e-01 4.400201953667e-01 1.866415750684e-03 1.000000000000e-03 +2.604309815850e-01 2.604309815850e-01 6.472923836452e-01 3.683050262197e-01 7.447388953611e-01 5.624247827338e-01 6.260065755532e-02 1.669574122900e-01 4.307066703427e-01 1.778015533276e-03 1.000000000000e-03 +4.182047737493e-01 2.503892967076e-01 6.078831561070e-01 4.874320800814e-01 7.791738985433e-01 6.275638896783e-01 6.376860502189e-02 1.524193936364e-01 4.115274982528e-01 1.593463257602e-03 1.000000000000e-03 +5.510002927093e-01 2.320752612896e-01 5.510002927093e-01 5.978797951665e-01 8.130569303770e-01 7.777751739180e-01 6.705524161528e-02 1.293212560594e-01 3.790650135669e-01 1.285718590068e-03 1.000000000000e-03 +6.508643468100e-01 2.092423410972e-01 4.905197626364e-01 6.836715258486e-01 8.414370997247e-01 1.122755224483e+00 7.389495563216e-02 9.872359623112e-02 3.311991616856e-01 8.906660848188e-04 1.000000000000e-03 +7.223182131662e-01 1.884391187182e-01 4.401547253665e-01 7.464937391130e-01 8.665962640107e-01 1.646262842985e+00 8.643054191248e-02 7.875158782887e-02 2.958069712740e-01 6.074364153096e-04 1.000000000000e-03 +7.758822266634e-01 1.723589735258e-01 4.024492635562e-01 7.947961030397e-01 8.908794840740e-01 2.347471211633e+00 1.032570880948e-01 6.597977916604e-02 2.707597934333e-01 4.259903146179e-04 1.000000000000e-03 +8.199513189420e-01 1.603656317989e-01 3.743646667743e-01 8.354862663724e-01 9.155250979771e-01 2.743038545152e+00 9.289489105328e-02 5.079853392005e-02 2.375769674584e-01 3.645592227522e-04 1.000000000000e-03 +8.731485593252e-01 1.529608952451e-01 3.569741920387e-01 8.864453971486e-01 9.556233650908e-01 1.574728359156e+00 1.278911985324e-02 1.218221521720e-02 1.163434342186e-01 6.350301588117e-04 1.000000000000e-03 +9.529001775952e-01 1.503241852277e-01 3.507624628702e-01 9.646844609121e-01 1.026474751021e+00 1.062443128902e+00 1.015633055266e-04 1.433911652734e-04 1.262234197645e-02 9.412268504516e-04 1.000000000000e-03 +1.050055605028e+00 1.500049381385e-01 3.500117333255e-01 1.060715916311e+00 1.116972008862e+00 1.001207244040e+00 3.339939030012e-09 5.003867655612e-09 7.456442148022e-05 9.987942116406e-04 1.000000000000e-03 +1.150000030901e+00 1.500000019262e-01 3.500000047701e-01 1.159741381365e+00 1.211404174910e+00 1.000000676528e+00 6.669472588312e-15 1.000420211434e-14 1.054314001000e-07 9.999993234721e-04 1.000000000000e-03 +8.527989115402e-02 4.263076141900e-01 6.253081181100e-01 4.347537714059e-01 7.615911529987e-01 5.716292183752e-01 6.204758627383e-02 1.628177434234e-01 4.253335206680e-01 1.749385734414e-03 1.000000000000e-03 +2.503892967076e-01 4.182047737493e-01 6.078831561070e-01 4.874320800814e-01 7.791738985433e-01 6.275638896783e-01 6.376860502189e-02 1.524193936364e-01 4.115274982528e-01 1.593463257602e-03 1.000000000000e-03 +4.002568289250e-01 4.002568289250e-01 5.738701981290e-01 5.660486358982e-01 8.060633117211e-01 7.417807115440e-01 6.671589326051e-02 1.349102751438e-01 3.871696084604e-01 1.348107310473e-03 1.000000000000e-03 +5.273390683969e-01 3.724252671245e-01 5.273390683969e-01 6.455904837050e-01 8.335907663285e-01 9.460278196119e-01 6.967433665543e-02 1.104740292162e-01 3.503554214670e-01 1.057051367063e-03 1.000000000000e-03 +6.275328031620e-01 3.393995969689e-01 4.770543551863e-01 7.134350043746e-01 8.582367757613e-01 1.292401321224e+00 7.918183972726e-02 9.190083423806e-02 3.195497426729e-01 7.737534646379e-04 1.000000000000e-03 +7.027169984481e-01 3.083511014492e-01 4.322360928592e-01 7.673927167187e-01 8.807494658772e-01 1.800807061068e+00 8.879537809786e-02 7.396298583358e-02 2.866724531074e-01 5.553065742683e-04 1.000000000000e-03 +7.594104780770e-01 2.831805379222e-01 3.966691189697e-01 8.104908952425e-01 9.023535234126e-01 2.513388750675e+00 1.042563827721e-01 6.222060718465e-02 2.629334668370e-01 3.978692113312e-04 1.000000000000e-03 +8.074777231548e-01 2.644888606480e-01 3.703826104961e-01 8.496909030925e-01 9.269077132898e-01 2.494796309775e+00 6.943321923801e-02 4.174682656413e-02 2.153726139718e-01 4.008343270678e-04 1.000000000000e-03 +8.672845100557e-01 2.537459099451e-01 3.552727392005e-01 9.036423010221e-01 9.709727737766e-01 1.414880451002e+00 6.775175115164e-03 7.182771283291e-03 8.933564227919e-02 7.067734940376e-04 1.000000000000e-03 +9.518710374309e-01 2.503501898377e-01 3.504927547923e-01 9.842426984497e-01 1.044786514372e+00 1.041387029896e+00 3.855743412984e-05 5.553761429170e-05 7.855473271809e-03 9.602577824496e-04 1.000000000000e-03 +1.050029626137e+00 2.500043850086e-01 3.500062159881e-01 1.079381493397e+00 1.134710870450e+00 1.000670309941e+00 7.874777002134e-10 1.180425299507e-09 3.621579304833e-05 9.993301390735e-04 1.000000000000e-03 +1.150000013372e+00 2.500000014174e-01 3.500000020601e-01 1.176860242962e+00 1.227802929181e+00 1.000000303960e+00 6.667070803580e-15 1.000060316559e-14 1.054124342528e-07 9.999996960404e-04 1.000000000000e-03 +7.891960376430e-02 5.630648087087e-01 5.630648087087e-01 5.685686261697e-01 8.001951396195e-01 7.013999936722e-01 6.578151852358e-02 1.406790400279e-01 3.953606511471e-01 1.425720001457e-03 1.000000000000e-03 +2.320752612896e-01 5.510002927093e-01 5.510002927093e-01 5.978797951665e-01 8.130569303770e-01 7.777751739180e-01 6.705524161528e-02 1.293212560594e-01 3.790650135669e-01 1.285718590068e-03 1.000000000000e-03 +3.724252671245e-01 5.273390683969e-01 5.273390683969e-01 6.455904837050e-01 8.335907663285e-01 9.460278196119e-01 6.967433665543e-02 1.104740292162e-01 3.503554214670e-01 1.057051367063e-03 1.000000000000e-03 +4.942716360781e-01 4.942716360781e-01 4.942716360781e-01 6.990056512380e-01 8.561035864274e-01 1.214266329030e+00 7.620556786588e-02 9.413779256332e-02 3.234154407145e-01 8.235425590686e-04 1.000000000000e-03 +5.950083192489e-01 4.564708696277e-01 4.564708696277e-01 7.499337002656e-01 8.779329186292e-01 1.542630070559e+00 8.320019574564e-02 8.090098592028e-02 2.998165845244e-01 6.482435543590e-04 1.000000000000e-03 +6.744910729051e-01 4.195584194438e-01 4.195584194438e-01 7.943346113288e-01 8.983299739411e-01 2.068588588741e+00 9.388790722581e-02 6.808113590360e-02 2.750376457134e-01 4.834214040640e-04 1.000000000000e-03 +7.359200355764e-01 3.879351490131e-01 3.879351490131e-01 8.319086359707e-01 9.179137532701e-01 2.639440571407e+00 9.780836731089e-02 5.558471463827e-02 2.485171906378e-01 3.788681627588e-04 1.000000000000e-03 +7.911731149717e-01 3.650087725106e-01 3.650087725106e-01 8.713129758380e-01 9.446786257100e-01 2.074796912838e+00 3.871990501361e-02 2.799303255226e-02 1.763614739747e-01 4.819748833307e-04 1.000000000000e-03 +8.606452939914e-01 3.533090281347e-01 3.533090281347e-01 9.303427279402e-01 9.951707696635e-01 1.251751097152e+00 2.455559222224e-03 2.942548915448e-03 5.717953125850e-02 7.988808655932e-04 1.000000000000e-03 +9.509182978816e-01 3.502422399418e-01 3.502422399418e-01 1.013368262719e+00 1.072186953159e+00 1.021411450438e+00 7.703864957647e-06 1.131355775532e-05 3.545506977589e-03 9.790373894591e-04 1.000000000000e-03 +1.050010866944e+00 3.500022611942e-01 3.500022611942e-01 1.106808205400e+00 1.160829869698e+00 1.000261057769e+00 6.509102942994e-11 9.761106201886e-11 1.041425636215e-05 9.997390103647e-04 1.000000000000e-03 +1.150000003524e+00 3.500000005400e-01 3.500000005400e-01 1.202081531545e+00 1.251998406093e+00 1.000000084408e+00 6.666681933104e-15 1.000002205557e-14 1.054093715820e-07 9.999999155919e-04 1.000000000000e-03 +7.072018897600e-02 6.628716196895e-01 4.969186924950e-01 6.666334294937e-01 8.314615542943e-01 1.034388147104e+00 7.004321222711e-02 1.015719472761e-01 3.359430296875e-01 9.667550839590e-04 1.000000000000e-03 +2.092423410972e-01 6.508643468100e-01 4.905197626364e-01 6.836715258486e-01 8.414370997247e-01 1.122755224483e+00 7.389495563216e-02 9.872359623112e-02 3.311991616856e-01 8.906660848188e-04 1.000000000000e-03 +3.393995969689e-01 6.275328031620e-01 4.770543551863e-01 7.134350043746e-01 8.582367757613e-01 1.292401321224e+00 7.918183972726e-02 9.190083423806e-02 3.195497426729e-01 7.737534646379e-04 1.000000000000e-03 +4.564708696277e-01 5.950083192489e-01 4.564708696277e-01 7.499337002656e-01 8.779329186292e-01 1.542630070559e+00 8.320019574564e-02 8.090098592028e-02 2.998165845244e-01 6.482435543590e-04 1.000000000000e-03 +5.571487983934e-01 5.571487983934e-01 4.304384694244e-01 7.879273869478e-01 8.978345298900e-01 1.919548952688e+00 8.824236358893e-02 6.895554562338e-02 2.767982530922e-01 5.209557164977e-04 1.000000000000e-03 +6.401227479499e-01 5.186541589754e-01 4.023029098510e-01 8.238684780142e-01 9.168461704888e-01 2.416014373501e+00 9.705454574645e-02 6.025701676961e-02 2.587513108278e-01 4.139048223256e-04 1.000000000000e-03 +7.081834446172e-01 4.848978335558e-01 3.767887581817e-01 8.582829954142e-01 9.373470373929e-01 2.437430841122e+00 6.916441380354e-02 4.256392384761e-02 2.174701099452e-01 4.102680507398e-04 1.000000000000e-03 +7.743863065653e-01 4.619602068557e-01 3.592129948413e-01 9.017102553005e-01 9.706262721444e-01 1.628383115549e+00 1.469812937341e-02 1.353931630069e-02 1.226526998421e-01 6.141060973008e-04 1.000000000000e-03 +8.550895506055e-01 4.520983470703e-01 3.516195090955e-01 9.672492207174e-01 1.029177989541e+00 1.124568992940e+00 5.343668970790e-04 7.127622677228e-04 2.814174968348e-02 8.892295681974e-04 1.000000000000e-03 +9.503218606868e-01 4.501102388861e-01 3.500849482142e-01 1.051527872217e+00 1.108273584010e+00 1.008142620304e+00 6.416533414135e-07 9.547062020153e-07 1.029944012510e-03 9.919231464477e-04 1.000000000000e-03 +1.050002546872e+00 4.500006898725e-01 3.500005238764e-01 1.142368578579e+00 1.194782966081e+00 1.000065844045e+00 1.415226714461e-12 2.122700304518e-12 1.535759061151e-06 9.999341602902e-04 1.000000000000e-03 +1.150000000507e+00 4.500000001042e-01 3.500000000766e-01 1.234908904033e+00 1.283549765811e+00 1.000000012896e+00 6.666666942936e-15 1.000000028545e-14 1.054092568434e-07 9.999999871042e-04 1.000000000000e-03 +6.338159151936e-02 7.322726967488e-01 4.438962276043e-01 7.350105635617e-01 8.586526593616e-01 1.576292409329e+00 8.532994818551e-02 8.119998644968e-02 3.003701169662e-01 6.344000605989e-04 1.000000000000e-03 +1.884391187182e-01 7.223182131662e-01 4.401547253665e-01 7.464937391130e-01 8.665962640107e-01 1.646262842985e+00 8.643054191248e-02 7.875158782887e-02 2.958069712740e-01 6.074364153096e-04 1.000000000000e-03 +3.083511014492e-01 7.027169984481e-01 4.322360928592e-01 7.673927167187e-01 8.807494658772e-01 1.800807061068e+00 8.879537809786e-02 7.396298583358e-02 2.866724531074e-01 5.553065742683e-04 1.000000000000e-03 +4.195584194438e-01 6.744910729051e-01 4.195584194438e-01 7.943346113288e-01 8.983299739411e-01 2.068588588741e+00 9.388790722581e-02 6.808113590360e-02 2.750376457134e-01 4.834214040640e-04 1.000000000000e-03 +5.186541589754e-01 6.401227479499e-01 4.023029098510e-01 8.238684780142e-01 9.168461704888e-01 2.416014373501e+00 9.705454574645e-02 6.025701676961e-02 2.587513108278e-01 4.139048223256e-04 1.000000000000e-03 +6.044774634870e-01 6.044774634870e-01 3.826403557122e-01 8.548602270122e-01 9.365893708274e-01 2.449455144596e+00 7.467996509986e-02 4.573259808285e-02 2.254196040051e-01 4.082540569098e-04 1.000000000000e-03 +6.813943151702e-01 5.746436254033e-01 3.650877125594e-01 8.913548726309e-01 9.632250758907e-01 1.886083140547e+00 2.831237350637e-02 2.251680180294e-02 1.581729075093e-01 5.301993207522e-04 1.000000000000e-03 +7.609577794088e-01 5.569512082585e-01 3.543090714024e-01 9.430012674559e-01 1.007366025088e+00 1.293835439116e+00 3.327226500468e-03 3.857399171344e-03 6.546754218139e-02 7.728958179436e-04 1.000000000000e-03 +8.517245275278e-01 5.509016174244e-01 3.505622779615e-01 1.014360519181e+00 1.073229320137e+00 1.046611736286e+00 5.216207405858e-05 7.475848815296e-05 9.113999497291e-03 9.554641566975e-04 1.000000000000e-03 +9.500732532747e-01 5.500311787351e-01 3.500192876494e-01 1.097803937035e+00 1.152253004290e+00 1.002056179059e+00 1.580957054806e-08 2.366569491580e-08 1.621579987947e-04 9.979480401381e-04 1.000000000000e-03 +1.050000339723e+00 5.500001152263e-01 3.500000686928e-01 1.185327313516e+00 1.235921068779e+00 1.000009510564e+00 1.243743699713e-14 1.865597806684e-14 1.439752218915e-07 9.999904895269e-04 1.000000000000e-03 +1.150000000033e+00 5.500000000087e-01 3.500000000048e-01 1.274754878431e+00 1.321930406674e+00 1.000000000882e+00 6.666666676684e-15 1.000000000621e-14 1.054092553717e-07 9.999999991181e-04 1.000000000000e-03 +5.785964697203e-02 7.842642140560e-01 4.052982094955e-01 7.863956359216e-01 8.846947127777e-01 2.261178909548e+00 1.022080053113e-01 6.780180343958e-02 2.744728350039e-01 4.422471816703e-04 1.000000000000e-03 +1.723589735258e-01 7.758822266634e-01 4.024492635562e-01 7.947961030397e-01 8.908794840740e-01 2.347471211633e+00 1.032570880948e-01 6.597977916604e-02 2.707597934333e-01 4.259903146179e-04 1.000000000000e-03 +2.831805379222e-01 7.594104780770e-01 3.966691189697e-01 8.104908952425e-01 9.023535234126e-01 2.513388750675e+00 1.042563827721e-01 6.222060718465e-02 2.629334668370e-01 3.978692113312e-04 1.000000000000e-03 +3.879351490131e-01 7.359200355764e-01 3.879351490131e-01 8.319086359707e-01 9.179137532701e-01 2.639440571407e+00 9.780836731089e-02 5.558471463827e-02 2.485171906378e-01 3.788681627588e-04 1.000000000000e-03 +4.848978335558e-01 7.081834446172e-01 3.767887581817e-01 8.582829954142e-01 9.373470373929e-01 2.437430841122e+00 6.916441380354e-02 4.256392384761e-02 2.174701099452e-01 4.102680507398e-04 1.000000000000e-03 +5.746436254033e-01 6.813943151702e-01 3.650877125594e-01 8.913548726309e-01 9.632250758907e-01 1.886083140547e+00 2.831237350637e-02 2.251680180294e-02 1.581729075093e-01 5.301993207522e-04 1.000000000000e-03 +6.619122650945e-01 6.619122650945e-01 3.559363263373e-01 9.360853023977e-01 1.001472097350e+00 1.377154451790e+00 5.524669805928e-03 6.017483876353e-03 8.176853426562e-02 7.261349652541e-04 1.000000000000e-03 +7.532651282783e-01 6.526154910073e-01 3.513352207425e-01 9.966520619468e-01 1.056764765649e+00 1.100480150893e+00 3.206285831789e-04 4.370300312805e-04 2.203608231163e-02 9.086942633071e-04 1.000000000000e-03 +8.503618697066e-01 6.502340487588e-01 3.501204436372e-01 1.070476355468e+00 1.126278807698e+00 1.011357314405e+00 1.367939495348e-06 2.028866765283e-06 1.501431452271e-03 9.887702256725e-04 1.000000000000e-03 +9.500092980881e-01 6.500048274600e-01 3.500024285734e-01 1.151096843091e+00 1.203131598032e+00 1.000291965268e+00 7.024492389352e-11 1.053366312025e-10 1.081853508272e-05 9.997081199507e-04 1.000000000000e-03 +1.050000021058e+00 6.500000088075e-01 3.500000041513e-01 1.234908926064e+00 1.283549788118e+00 1.000000637962e+00 6.669260533274e-15 1.000388441781e-14 1.054297260307e-07 9.999993620385e-04 1.000000000000e-03 +1.150000000001e+00 6.500000000002e-01 3.500000000001e-01 1.320984481363e+00 1.366565036872e+00 1.000000000019e+00 6.666666666882e-15 1.000000000013e-14 1.054092553396e-07 9.999999999806e-04 1.000000000000e-03 +5.374510938188e-02 8.265940334940e-01 3.764470266887e-01 8.283394430970e-01 9.098673512623e-01 2.830032831454e+00 1.032820716221e-01 5.474251242289e-02 2.466272770867e-01 3.533527911357e-04 1.000000000000e-03 +1.603656317989e-01 8.199513189420e-01 3.743646667743e-01 8.354862663724e-01 9.155250979771e-01 2.743038545152e+00 9.289489105328e-02 5.079853392005e-02 2.375769674584e-01 3.645592227522e-04 1.000000000000e-03 +2.644888606480e-01 8.074777231548e-01 3.703826104961e-01 8.496909030925e-01 9.269077132898e-01 2.494796309775e+00 6.943321923801e-02 4.174682656413e-02 2.153726139718e-01 4.008343270678e-04 1.000000000000e-03 +3.650087725106e-01 7.911731149717e-01 3.650087725106e-01 8.713129758380e-01 9.446786257100e-01 2.074796912838e+00 3.871990501361e-02 2.799303255226e-02 1.763614739747e-01 4.819748833307e-04 1.000000000000e-03 +4.619602068557e-01 7.743863065653e-01 3.592129948413e-01 9.017102553005e-01 9.706262721444e-01 1.628383115549e+00 1.469812937341e-02 1.353931630069e-02 1.226526998421e-01 6.141060973008e-04 1.000000000000e-03 +5.569512082585e-01 7.609577794088e-01 3.543090714024e-01 9.430012674559e-01 1.007366025088e+00 1.293835439116e+00 3.327226500468e-03 3.857399171344e-03 6.546754218139e-02 7.728958179436e-04 1.000000000000e-03 +6.526154910073e-01 7.532651282783e-01 3.513352207425e-01 9.966520619468e-01 1.056764765649e+00 1.100480150893e+00 3.206285831789e-04 4.370300312805e-04 2.203608231163e-02 9.086942633071e-04 1.000000000000e-03 +7.505214636265e-01 7.505214636265e-01 3.502196464478e-01 1.061397632713e+00 1.117684542027e+00 1.019774532972e+00 5.668767311933e-06 8.338265658701e-06 3.043803479330e-03 9.806089166450e-04 1.000000000000e-03 +8.500379124613e-01 7.500301946228e-01 3.500127232443e-01 1.133626810493e+00 1.186431056531e+00 1.001405109424e+00 4.784267475180e-09 7.166331732519e-09 8.923335034565e-05 9.985968621385e-04 1.000000000000e-03 +9.500005045904e-01 7.500003211832e-01 3.500001294686e-01 1.210372438755e+00 1.259960924444e+00 1.000017658828e+00 3.131389040508e-14 4.697000617234e-14 2.284488908860e-07 9.999823414834e-04 1.000000000000e-03 +1.050000000431e+00 7.500000002207e-01 3.500000000822e-01 1.290348790535e+00 1.336974196196e+00 1.000000014055e+00 6.666666932853e-15 1.000000025873e-14 1.054092567026e-07 9.999999859449e-04 1.000000000000e-03 +1.150000000000e+00 7.500000000000e-01 3.500000000000e-01 1.372953021775e+00 1.416862731531e+00 9.999999999994e-01 6.666666666660e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +5.112215598374e-02 8.765470342601e-01 3.579497548144e-01 8.780365471338e-01 9.481962903716e-01 1.676016033909e+00 1.727129957706e-02 1.545745914206e-02 1.310532510176e-01 5.966530031743e-04 1.000000000000e-03 +1.529608952451e-01 8.731485593252e-01 3.569741920387e-01 8.864453971486e-01 9.556233650908e-01 1.574728359156e+00 1.278911985324e-02 1.218221521720e-02 1.163434342186e-01 6.350301588117e-04 1.000000000000e-03 +2.537459099451e-01 8.672845100557e-01 3.552727392005e-01 9.036423010221e-01 9.709727737766e-01 1.414880451002e+00 6.775175115164e-03 7.182771283291e-03 8.933564227919e-02 7.067734940376e-04 1.000000000000e-03 +3.533090281347e-01 8.606452939914e-01 3.533090281347e-01 9.303427279402e-01 9.951707696635e-01 1.251751097152e+00 2.455559222224e-03 2.942548915448e-03 5.717953125850e-02 7.988808655932e-04 1.000000000000e-03 +4.520983470703e-01 8.550895506055e-01 3.516195090955e-01 9.672492207174e-01 1.029177989541e+00 1.124568992940e+00 5.343668970790e-04 7.127622677228e-04 2.814174968348e-02 8.892295681974e-04 1.000000000000e-03 +5.509016174244e-01 8.517245275278e-01 3.505622779615e-01 1.014360519181e+00 1.073229320137e+00 1.046611736286e+00 5.216207405858e-05 7.475848815296e-05 9.113999497291e-03 9.554641566975e-04 1.000000000000e-03 +6.502340487588e-01 8.503618697066e-01 3.501204436372e-01 1.070476355468e+00 1.126278807698e+00 1.011357314405e+00 1.367939495348e-06 2.028866765283e-06 1.501431452271e-03 9.887702256726e-04 1.000000000000e-03 +7.500301946228e-01 8.500379124613e-01 3.500127232443e-01 1.133626810493e+00 1.186431056531e+00 1.001405109424e+00 4.784267475180e-09 7.166331732519e-09 8.923335034565e-05 9.985968621385e-04 1.000000000000e-03 +8.500012812751e-01 8.500012812751e-01 3.500004231069e-01 1.202083340014e+00 1.252000260589e+00 1.000055233664e+00 5.721142134178e-13 8.581239227983e-13 9.764584094222e-07 9.999447693865e-04 1.000000000000e-03 +9.500000076079e-01 8.500000060005e-01 3.500000018958e-01 1.274754888069e+00 1.321930416468e+00 1.000000295197e+00 6.666896609159e-15 1.000034196167e-14 1.054110576198e-07 9.999997048035e-04 1.000000000000e-03 +1.050000000002e+00 8.500000000011e-01 3.500000000003e-01 1.350925608613e+00 1.395528573697e+00 1.000000000061e+00 6.666666667340e-15 1.000000000040e-14 1.054092553411e-07 9.999999999394e-04 1.000000000000e-03 +1.150000000000e+00 8.500000000000e-01 3.500000000000e-01 1.430034964608e+00 1.472243186434e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +5.013266291702e-02 9.535695696354e-01 3.509374039509e-01 9.548864896027e-01 1.017332428225e+00 1.076104499193e+00 1.603336170470e-04 2.234917015502e-04 1.575830298076e-02 9.292777799459e-04 1.000000000000e-03 +1.503241852277e-01 9.529001775952e-01 3.507624628702e-01 9.646844609121e-01 1.026474751021e+00 1.062443128902e+00 1.015633055266e-04 1.433911652734e-04 1.262234197645e-02 9.412268504516e-04 1.000000000000e-03 +2.503501898377e-01 9.518710374309e-01 3.504927547923e-01 9.842426984497e-01 1.044786514372e+00 1.041387029896e+00 3.855743412984e-05 5.553761429170e-05 7.855473271809e-03 9.602577824496e-04 1.000000000000e-03 +3.502422399418e-01 9.509182978816e-01 3.502422399418e-01 1.013368262719e+00 1.072186953159e+00 1.021411450438e+00 7.703864957647e-06 1.131355775532e-05 3.545506977589e-03 9.790373894591e-04 1.000000000000e-03 +4.501102388861e-01 9.503218606868e-01 3.500849482142e-01 1.051527872217e+00 1.108273584010e+00 1.008142620304e+00 6.416533414135e-07 9.547062020153e-07 1.029944012510e-03 9.919231464477e-04 1.000000000000e-03 +5.500311787351e-01 9.500732532747e-01 3.500192876494e-01 1.097803937035e+00 1.152253004290e+00 1.002056179059e+00 1.580957054806e-08 2.366569491580e-08 1.621579987947e-04 9.979480401381e-04 1.000000000000e-03 +6.500048274600e-01 9.500092980881e-01 3.500024285734e-01 1.151096843091e+00 1.203131598032e+00 1.000291965268e+00 7.024492389352e-11 1.053366312025e-10 1.081853508272e-05 9.997081199507e-04 1.000000000000e-03 +7.500003211832e-01 9.500005045904e-01 3.500001294686e-01 1.210372438755e+00 1.259960924444e+00 1.000017658828e+00 3.131389040508e-14 4.697000617234e-14 2.284488908860e-07 9.999823414834e-04 1.000000000000e-03 +8.500000060005e-01 9.500000076079e-01 3.500000018958e-01 1.274754888069e+00 1.321930416468e+00 1.000000295197e+00 6.666896609159e-15 1.000034196167e-14 1.054110576198e-07 9.999997048035e-04 1.000000000000e-03 +9.500000000135e-01 9.500000000135e-01 3.500000000032e-01 1.343502884273e+00 1.388344337711e+00 1.000000000584e+00 6.666666673187e-15 1.000000000394e-14 1.054092553597e-07 9.999999994164e-04 1.000000000000e-03 +1.050000000000e+00 9.500000000000e-01 3.500000000000e-01 1.415980225851e+00 1.458595214581e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 1.000000000000e-03 1.000000000000e-03 +1.150000000000e+00 9.500000000000e-01 3.500000000000e-01 1.491643389018e+00 1.532155344604e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +5.000223109000e-02 1.050075302017e+00 3.500159366535e-01 1.051265124990e+00 1.108002490490e+00 1.001601459830e+00 6.366458072343e-09 9.534418120891e-09 1.029261770013e-04 9.984011007429e-04 1.000000000000e-03 +1.500049381385e-01 1.050055605028e+00 3.500117333255e-01 1.060715916311e+00 1.116972008862e+00 1.001207244040e+00 3.339939030011e-09 5.003867655612e-09 7.456442148022e-05 9.987942116406e-04 1.000000000000e-03 +2.500043850086e-01 1.050029626137e+00 3.500062159881e-01 1.079381493397e+00 1.134710870450e+00 1.000670309941e+00 7.874777002134e-10 1.180425299507e-09 3.621579304833e-05 9.993301390735e-04 1.000000000000e-03 +3.500022611942e-01 1.050010866944e+00 3.500022611942e-01 1.106808205400e+00 1.160829869698e+00 1.000261057769e+00 6.509102942994e-11 9.761106201885e-11 1.041425636215e-05 9.997390103647e-04 1.000000000000e-03 +4.500006898725e-01 1.050002546872e+00 3.500005238764e-01 1.142368578579e+00 1.194782966081e+00 1.000065844045e+00 1.415226714461e-12 2.122700304518e-12 1.535759061151e-06 9.999341602902e-04 1.000000000000e-03 +5.500001152263e-01 1.050000339723e+00 3.500000686928e-01 1.185327313516e+00 1.235921068779e+00 1.000009510564e+00 1.243743699713e-14 1.865597806684e-14 1.439752218915e-07 9.999904895269e-04 1.000000000000e-03 +6.500000088075e-01 1.050000021058e+00 3.500000041513e-01 1.234908926064e+00 1.283549788118e+00 1.000000637962e+00 6.669260533274e-15 1.000388441781e-14 1.054297260307e-07 9.999993620385e-04 1.000000000000e-03 +7.500000002207e-01 1.050000000431e+00 3.500000000822e-01 1.290348790535e+00 1.336974196196e+00 1.000000014055e+00 6.666666932853e-15 1.000000025873e-14 1.054092567026e-07 9.999999859449e-04 1.000000000000e-03 +8.500000000011e-01 1.050000000002e+00 3.500000000003e-01 1.350925608613e+00 1.395528573697e+00 1.000000000061e+00 6.666666667340e-15 1.000000000040e-14 1.054092553411e-07 9.999999999394e-04 1.000000000000e-03 +9.500000000000e-01 1.050000000000e+00 3.500000000000e-01 1.415980225851e+00 1.458595214581e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 1.000000000000e-03 1.000000000000e-03 +1.050000000000e+00 1.050000000000e+00 3.500000000000e-01 1.484924240492e+00 1.525614630239e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 1.000000000000e-03 1.000000000000e-03 +1.150000000000e+00 1.050000000000e+00 3.500000000000e-01 1.557241150240e+00 1.596088969951e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +5.000000095303e-02 1.150000046297e+00 3.500000071517e-01 1.151086489617e+00 1.203120987924e+00 1.000000994246e+00 6.672725087915e-15 1.000907768038e-14 1.054570880626e-07 9.999990057546e-04 1.000000000000e-03 +1.500000019262e-01 1.150000030901e+00 3.500000047701e-01 1.159741381365e+00 1.211404174910e+00 1.000000676528e+00 6.669472588312e-15 1.000420211434e-14 1.054314001000e-07 9.999993234721e-04 1.000000000000e-03 +2.500000014174e-01 1.150000013372e+00 3.500000020601e-01 1.176860242962e+00 1.227802929181e+00 1.000000303960e+00 6.667070803580e-15 1.000060316559e-14 1.054124342528e-07 9.999996960404e-04 1.000000000000e-03 +3.500000005400e-01 1.150000003524e+00 3.500000005400e-01 1.202081531545e+00 1.251998406093e+00 1.000000084408e+00 6.666681933104e-15 1.000002205557e-14 1.054093715820e-07 9.999999155919e-04 1.000000000000e-03 +4.500000001042e-01 1.150000000507e+00 3.500000000766e-01 1.234908904033e+00 1.283549765811e+00 1.000000012896e+00 6.666666942936e-15 1.000000028545e-14 1.054092568434e-07 9.999999871042e-04 1.000000000000e-03 +5.500000000087e-01 1.150000000033e+00 3.500000000048e-01 1.274754878431e+00 1.321930406674e+00 1.000000000882e+00 6.666666676684e-15 1.000000000621e-14 1.054092553717e-07 9.999999991181e-04 1.000000000000e-03 +6.500000000002e-01 1.150000000001e+00 3.500000000001e-01 1.320984481363e+00 1.366565036872e+00 1.000000000019e+00 6.666666666882e-15 1.000000000013e-14 1.054092553396e-07 9.999999999806e-04 1.000000000000e-03 +7.500000000000e-01 1.150000000000e+00 3.500000000000e-01 1.372953021775e+00 1.416862731531e+00 9.999999999994e-01 6.666666666660e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +8.500000000000e-01 1.150000000000e+00 3.500000000000e-01 1.430034964608e+00 1.472243186434e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +9.500000000000e-01 1.150000000000e+00 3.500000000000e-01 1.491643389018e+00 1.532155344604e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +1.050000000000e+00 1.150000000000e+00 3.500000000000e-01 1.557241150240e+00 1.596088969951e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +1.150000000000e+00 1.150000000000e+00 3.500000000000e-01 1.626345596729e+00 1.663580475961e+00 9.999999999987e-01 6.666666666652e-15 9.999999999991e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +7.542437546435e-02 7.542437546435e-02 7.424612895242e-01 1.066661747152e-01 7.500842881106e-01 8.179881381646e-01 6.905276598682e-02 1.266267127206e-01 3.750951178932e-01 1.222511615197e-03 1.000000000000e-03 +2.239908712682e-01 7.470252492774e-02 7.306452916534e-01 2.361194139457e-01 7.678508447982e-01 8.494312899517e-01 6.877917708729e-02 1.214562812218e-01 3.673573513348e-01 1.177258257177e-03 1.000000000000e-03 +3.658406648551e-01 7.329289634217e-02 7.048596943450e-01 3.731102259599e-01 7.975201749348e-01 9.206458701331e-01 6.852418249732e-02 1.116458315629e-01 3.522086369736e-01 1.086193977990e-03 1.000000000000e-03 +4.969186924950e-01 7.072018897600e-02 6.628716196895e-01 5.019258232844e-01 8.314615542943e-01 1.034388147104e+00 7.004321222711e-02 1.015719472761e-01 3.359430296875e-01 9.667550839590e-04 1.000000000000e-03 +6.078004668432e-01 6.638451431871e-02 6.078004668432e-01 6.114150073691e-01 8.621193181520e-01 1.304682329318e+00 8.023298927578e-02 9.224428139271e-02 3.201462884244e-01 7.664701035102e-04 1.000000000000e-03 +6.905713784738e-01 6.103977755288e-02 5.521404294063e-01 6.932637904945e-01 8.862695622641e-01 1.801599573959e+00 8.620318092521e-02 7.177220357778e-02 2.823949235808e-01 5.550622982235e-04 1.000000000000e-03 +7.505642413106e-01 5.619544087562e-02 5.066842425221e-01 7.526650037761e-01 9.073221751558e-01 2.541665347163e+00 1.017111211223e-01 6.002626657899e-02 2.582554002425e-01 3.934428272063e-04 1.000000000000e-03 +8.012985423787e-01 5.260485693140e-02 4.738636551491e-01 8.030234274235e-01 9.324126707967e-01 2.359527747150e+00 5.886195745259e-02 3.741974905170e-02 2.039056128368e-01 4.238136216910e-04 1.000000000000e-03 +8.645660897219e-01 5.063245327525e-02 4.558013370506e-01 8.660474402835e-01 9.786690082345e-01 1.348037512704e+00 4.671258719988e-03 5.197843542147e-03 7.599593221678e-02 7.418191189606e-04 1.000000000000e-03 +9.514363088533e-01 5.005357167828e-02 4.504901828009e-01 9.527520190701e-01 1.053887002786e+00 1.032281486974e+00 1.842448040133e-05 2.677246560238e-05 5.454097909155e-03 9.687280190706e-04 1.000000000000e-03 +1.050019962653e+00 5.000057964117e-02 4.500054502267e-01 1.051209769710e+00 1.143480163872e+00 1.000458122364e+00 1.992087600098e-10 2.986763097177e-10 1.821709544228e-05 9.995420874164e-04 1.000000000000e-03 +1.150000007379e+00 5.000000014927e-02 4.500000015283e-01 1.151086450701e+00 1.235920716859e+00 1.000000169692e+00 6.666717512707e-15 1.000007457212e-14 1.054096483678e-07 9.999998303076e-04 1.000000000000e-03 +7.470252492774e-02 2.239908712682e-01 7.306452916534e-01 2.361194139457e-01 7.678508447982e-01 8.494312899517e-01 6.877917708729e-02 1.214562812218e-01 3.673573513348e-01 1.177258257177e-03 1.000000000000e-03 +2.218021194997e-01 2.218021194997e-01 7.183428032096e-01 3.136755655596e-01 7.838422949498e-01 8.861164097546e-01 6.903846253467e-02 1.168669180054e-01 3.603500119565e-01 1.128519897602e-03 1.000000000000e-03 +3.621401678412e-01 2.173250050085e-01 6.920856357920e-01 4.223454261218e-01 8.107762861824e-01 9.709503414021e-01 6.998564745074e-02 1.081192999268e-01 3.466014360534e-01 1.029918789210e-03 1.000000000000e-03 +4.905197626364e-01 2.092423410972e-01 6.508643468100e-01 5.332841595666e-01 8.414370997247e-01 1.122755224483e+00 7.389495563216e-02 9.872359623112e-02 3.311991616856e-01 8.906660848188e-04 1.000000000000e-03 +5.988466842784e-01 1.964824373676e-01 5.988466842784e-01 6.302560586501e-01 8.693906203407e-01 1.401631724523e+00 8.143681591189e-02 8.715215397210e-02 3.111843933035e-01 7.134541709521e-04 1.000000000000e-03 +6.815985878299e-01 1.812604840022e-01 5.465708789424e-01 7.052885919908e-01 8.922845530997e-01 1.912471958895e+00 8.926832460072e-02 7.001539880273e-02 2.789173489738e-01 5.228834835193e-04 1.000000000000e-03 +7.428898320434e-01 1.673596231779e-01 5.029770120508e-01 7.615080735118e-01 9.126228249804e-01 2.594027218878e+00 1.004139399263e-01 5.806450633724e-02 2.540002325835e-01 3.855009664982e-04 1.000000000000e-03 +7.959636594993e-01 1.570757906732e-01 4.715807377877e-01 8.113143356672e-01 9.384132051029e-01 2.214123172832e+00 4.834378711867e-02 3.275142122525e-02 1.907628580937e-01 4.516460566740e-04 1.000000000000e-03 +8.624312050106e-01 1.516329878552e-01 4.549819179477e-01 8.756598348571e-01 9.868073226529e-01 1.295187933817e+00 3.362536294055e-03 3.894264538289e-03 6.577963665223e-02 7.720887246478e-04 1.000000000000e-03 +9.511407159535e-01 1.501278206315e-01 4.503896080748e-01 9.629158966764e-01 1.063041778640e+00 1.026082684860e+00 1.119241799494e-05 1.636186560803e-05 4.263783610315e-03 9.745803284231e-04 1.000000000000e-03 +1.050014436149e+00 1.500012582639e-01 4.500039363165e-01 1.060674640784e+00 1.152186719374e+00 1.000338242690e+00 1.004636174847e-10 1.506444718357e-10 1.293764841399e-05 9.996618716791e-04 1.000000000000e-03 +1.150000004831e+00 1.500000002963e-01 4.500000010003e-01 1.159741355304e+00 1.243985535326e+00 1.000000113150e+00 6.666689773724e-15 1.000003352908e-14 1.054094320526e-07 9.999998868496e-04 1.000000000000e-03 +7.329289634217e-02 3.658406648551e-01 7.048596943450e-01 3.731102259599e-01 7.975201749348e-01 9.206458701331e-01 6.852418249732e-02 1.116458315629e-01 3.522086369736e-01 1.086193977990e-03 1.000000000000e-03 +2.173250050085e-01 3.621401678412e-01 6.920856357920e-01 4.223454261218e-01 8.107762861824e-01 9.709503414021e-01 6.998564745074e-02 1.081192999268e-01 3.466014360534e-01 1.029918789210e-03 1.000000000000e-03 +3.538166241583e-01 3.538166241583e-01 6.659939767429e-01 5.003722684778e-01 8.330188377939e-01 1.087486286288e+00 7.353285947007e-02 1.014259127640e-01 3.357014426938e-01 9.195518257187e-04 1.000000000000e-03 +4.770543551863e-01 3.393995969689e-01 6.275328031620e-01 5.854681410845e-01 8.582367757613e-01 1.292401321224e+00 7.918183972726e-02 9.190083423806e-02 3.195497426729e-01 7.737534646379e-04 1.000000000000e-03 +5.814907764886e-01 3.190606395135e-01 5.814907764886e-01 6.632731072703e-01 8.820786461361e-01 1.600040277246e+00 8.307286999210e-02 7.787885515147e-02 2.941633241575e-01 6.249842670968e-04 1.000000000000e-03 +6.642878916683e-01 2.960394675885e-01 5.353096711151e-01 7.272673300700e-01 9.030361085674e-01 2.135117513139e+00 9.442760238853e-02 6.633892641091e-02 2.714957057383e-01 4.683582959000e-04 1.000000000000e-03 +7.281785353636e-01 2.748803732801e-01 4.955699764393e-01 7.783336039121e-01 9.227094886945e-01 2.618585074440e+00 9.269097363022e-02 5.309602571345e-02 2.428900659271e-01 3.818856258522e-04 1.000000000000e-03 +7.862900372849e-01 2.595015168464e-01 4.673503370641e-01 8.280054709838e-01 9.507940878723e-01 1.947192188906e+00 3.106782911369e-02 2.393279098799e-02 1.630705061826e-01 5.135599894542e-04 1.000000000000e-03 +8.588740572130e-01 2.519736230059e-01 4.535990167792e-01 8.950728198556e-01 1.003447766885e+00 1.210976307308e+00 1.674951055676e-03 2.074711592913e-03 4.801286393496e-02 8.257799875731e-04 1.000000000000e-03 +9.507029783717e-01 2.501317243472e-01 4.502404267812e-01 9.830574920164e-01 1.081257820558e+00 1.016700794325e+00 3.858717059976e-06 5.692998001252e-06 2.515065274446e-03 9.835735405950e-04 1.000000000000e-03 +1.050007379972e+00 2.500010753230e-01 4.500020073429e-01 1.079359085596e+00 1.169409185132e+00 1.000180093289e+00 2.109138575369e-11 3.163138203091e-11 5.928404510013e-06 9.998199391387e-04 1.000000000000e-03 +1.150000002018e+00 2.500000002108e-01 4.500000004171e-01 1.176860231611e+00 1.259960318868e+00 1.000000048945e+00 6.666670352416e-15 1.000000503918e-14 1.054092818977e-07 9.999999510551e-04 1.000000000000e-03 +7.072018897600e-02 4.969186924950e-01 6.628716196895e-01 5.019258232844e-01 8.314615542943e-01 1.034388147104e+00 7.004321222711e-02 1.015719472761e-01 3.359430296875e-01 9.667550839590e-04 1.000000000000e-03 +2.092423410972e-01 4.905197626364e-01 6.508643468100e-01 5.332841595666e-01 8.414370997247e-01 1.122755224483e+00 7.389495563216e-02 9.872359623112e-02 3.311991616856e-01 8.906660848188e-04 1.000000000000e-03 +3.393995969689e-01 4.770543551863e-01 6.275328031620e-01 5.854681410845e-01 8.582367757613e-01 1.292401321224e+00 7.918183972726e-02 9.190083423806e-02 3.195497426729e-01 7.737534646379e-04 1.000000000000e-03 +4.564708696277e-01 4.564708696277e-01 5.950083192489e-01 6.455472946558e-01 8.779329186292e-01 1.542630070559e+00 8.320019574563e-02 8.090098592028e-02 2.998165845244e-01 6.482435543590e-04 1.000000000000e-03 +5.571487983934e-01 4.304384694244e-01 5.571487983934e-01 7.040540174671e-01 8.978345298900e-01 1.919548952688e+00 8.824236358893e-02 6.895554562338e-02 2.767982530922e-01 5.209557164977e-04 1.000000000000e-03 +6.401227479499e-01 4.023029098510e-01 5.186541589754e-01 7.560454772813e-01 9.168461704888e-01 2.416014373501e+00 9.705454574645e-02 6.025701676961e-02 2.587513108278e-01 4.139048223256e-04 1.000000000000e-03 +7.081834446172e-01 3.767887581817e-01 4.848978335558e-01 8.021805030802e-01 9.373470373929e-01 2.437430841122e+00 6.916441380354e-02 4.256392384761e-02 2.174701099452e-01 4.102680507398e-04 1.000000000000e-03 +7.743863065653e-01 3.592129948413e-01 4.619602068557e-01 8.536440285381e-01 9.706262721444e-01 1.628383115549e+00 1.469812937341e-02 1.353931630069e-02 1.226526998421e-01 6.141060973008e-04 1.000000000000e-03 +8.550895506055e-01 3.516195090955e-01 4.520983470703e-01 9.245617441422e-01 1.029177989541e+00 1.124568992940e+00 5.343668970790e-04 7.127622677228e-04 2.814174968348e-02 8.892295681974e-04 1.000000000000e-03 +9.503218606868e-01 3.500849482142e-01 4.501102388861e-01 1.012754219870e+00 1.108273584010e+00 1.008142620304e+00 6.416533414135e-07 9.547062020153e-07 1.029944012510e-03 9.919231464477e-04 1.000000000000e-03 +1.050002546872e+00 3.500005238764e-01 4.500006898725e-01 1.106799762899e+00 1.194782966081e+00 1.000065844045e+00 1.415226714461e-12 2.122700304518e-12 1.535759061151e-06 9.999341602902e-04 1.000000000000e-03 +1.150000000507e+00 3.500000000766e-01 4.500000001042e-01 1.202081528524e+00 1.283549765811e+00 1.000000012896e+00 6.666666942936e-15 1.000000028545e-14 1.054092568434e-07 9.999999871042e-04 1.000000000000e-03 +6.638451431871e-02 6.078004668432e-01 6.078004668432e-01 6.114150073691e-01 8.621193181520e-01 1.304682329318e+00 8.023298927578e-02 9.224428139271e-02 3.201462884244e-01 7.664701035102e-04 1.000000000000e-03 +1.964824373676e-01 5.988466842784e-01 5.988466842784e-01 6.302560586501e-01 8.693906203407e-01 1.401631724523e+00 8.143681591189e-02 8.715215397210e-02 3.111843933035e-01 7.134541709521e-04 1.000000000000e-03 +3.190606395135e-01 5.814907764886e-01 5.814907764886e-01 6.632731072703e-01 8.820786461361e-01 1.600040277246e+00 8.307286999210e-02 7.787885515147e-02 2.941633241575e-01 6.249842670968e-04 1.000000000000e-03 +4.304384694244e-01 5.571487983934e-01 5.571487983934e-01 7.040540174671e-01 8.978345298900e-01 1.919548952688e+00 8.824236358893e-02 6.895554562338e-02 2.767982530922e-01 5.209557164977e-04 1.000000000000e-03 +5.281770956114e-01 5.281770956114e-01 5.281770956114e-01 7.469552119485e-01 9.148295649932e-01 2.341661051055e+00 9.642377621064e-02 6.176626811587e-02 2.619717290003e-01 4.270472874584e-04 1.000000000000e-03 +6.119968439717e-01 4.981727854110e-01 4.981727854110e-01 7.891237299407e-01 9.332161514245e-01 2.500318986905e+00 8.198210100222e-02 4.918298511005e-02 2.337686061758e-01 3.999489686065e-04 1.000000000000e-03 +6.863512522420e-01 4.724942683714e-01 4.724942683714e-01 8.332639888403e-01 9.579038097543e-01 1.995773154480e+00 3.486119147268e-02 2.620126796055e-02 1.706239137875e-01 5.010589493877e-04 1.000000000000e-03 +7.631552506282e-01 4.566495068119e-01 4.566495068119e-01 8.893451009776e-01 9.997317043610e-01 1.345909796113e+00 4.649577025897e-03 5.181896705848e-03 7.587926598549e-02 7.429918430552e-04 1.000000000000e-03 +8.522015776520e-01 4.509249640613e-01 4.509249640613e-01 9.641477335794e-01 1.064384411470e+00 1.058073015339e+00 9.229488954349e-05 1.308438380984e-04 1.205744758776e-02 9.451143593147e-04 1.000000000000e-03 +9.501026289001e-01 4.500351762686e-01 4.500351762686e-01 1.051297610252e+00 1.143572614748e+00 1.002829617240e+00 3.970766135942e-08 5.939343136183e-08 2.568904465198e-04 9.971783669022e-04 1.000000000000e-03 +1.050000551023e+00 4.500001481584e-01 4.500001481584e-01 1.142366530712e+00 1.227803495610e+00 1.000015265716e+00 2.944712784331e-14 4.417001747802e-14 2.215350924748e-07 9.999847345171e-04 1.000000000000e-03 +1.150000000068e+00 4.500000000139e-01 4.500000000139e-01 1.234908903591e+00 1.314343942879e+00 1.000000001836e+00 6.666666688742e-15 1.000000001476e-14 1.054092554167e-07 9.999999981643e-04 1.000000000000e-03 +6.103977755288e-02 6.905713784738e-01 5.521404294063e-01 6.932637904945e-01 8.862695622641e-01 1.801599573959e+00 8.620318092521e-02 7.177220357778e-02 2.823949235808e-01 5.550622982235e-04 1.000000000000e-03 +1.812604840022e-01 6.815985878299e-01 5.465708789424e-01 7.052885919908e-01 8.922845530997e-01 1.912471958895e+00 8.926832460072e-02 7.001539880273e-02 2.789173489738e-01 5.228834835193e-04 1.000000000000e-03 +2.960394675885e-01 6.642878916683e-01 5.353096711151e-01 7.272673300700e-01 9.030361085674e-01 2.135117513139e+00 9.442760238853e-02 6.633892641091e-02 2.714957057383e-01 4.683582959000e-04 1.000000000000e-03 +4.023029098510e-01 6.401227479499e-01 5.186541589754e-01 7.560454772813e-01 9.168461704888e-01 2.416014373501e+00 9.705454574645e-02 6.025701676961e-02 2.587513108278e-01 4.139048223256e-04 1.000000000000e-03 +4.981727854110e-01 6.119968439717e-01 4.981727854110e-01 7.891237299407e-01 9.332161514245e-01 2.500318986905e+00 8.198210100222e-02 4.918298511005e-02 2.337686061758e-01 3.999489686065e-04 1.000000000000e-03 +5.846713258564e-01 5.846713258564e-01 4.773830279030e-01 8.268501185568e-01 9.547647217442e-01 2.097404732817e+00 4.186788658657e-02 2.994263763080e-02 1.823995541868e-01 4.767797003381e-04 1.000000000000e-03 +6.675446150080e-01 5.639926522211e-01 4.611802732283e-01 8.739013243986e-01 9.881248753071e-01 1.518131279506e+00 1.031917760585e-02 1.019593405243e-02 1.064369090767e-01 6.587045623125e-04 1.000000000000e-03 +7.551957933139e-01 5.533663315679e-01 4.527098336229e-01 9.362344701794e-01 1.039942871802e+00 1.149741247387e+00 8.206273283399e-04 1.070624364663e-03 3.449032657722e-02 8.697609155738e-04 1.000000000000e-03 +8.506544716324e-01 5.503469471796e-01 4.502801048595e-01 1.013160792953e+00 1.108714104362e+00 1.019508708736e+00 6.086603760954e-06 8.955201228983e-06 3.154397499961e-03 9.808645982435e-04 1.000000000000e-03 +9.500206705734e-01 5.500088184875e-01 4.500070761401e-01 1.097747227248e+00 1.186404376048e+00 1.000629928302e+00 6.325229791215e-10 9.481871787431e-10 3.245830109101e-05 9.993704682583e-04 1.000000000000e-03 +1.050000066408e+00 5.500000224497e-01 4.500000176537e-01 1.185327028356e+00 1.267872304312e+00 1.000001982789e+00 6.734464171964e-15 1.010167622845e-14 1.059437808381e-07 9.999980172148e-04 1.000000000000e-03 +1.150000000004e+00 5.500000000011e-01 4.500000000008e-01 1.274754878402e+00 1.351850583464e+00 1.000000000114e+00 6.666666667929e-15 1.000000000076e-14 1.054092553429e-07 9.999999998865e-04 1.000000000000e-03 +5.619544087562e-02 7.505642413106e-01 5.066842425221e-01 7.526650037761e-01 9.073221751558e-01 2.541665347163e+00 1.017111211223e-01 6.002626657899e-02 2.582554002425e-01 3.934428272063e-04 1.000000000000e-03 +1.673596231779e-01 7.428898320434e-01 5.029770120508e-01 7.615080735118e-01 9.126228249804e-01 2.594027218878e+00 1.004139399263e-01 5.806450633724e-02 2.540002325835e-01 3.855009664982e-04 1.000000000000e-03 +2.748803732801e-01 7.281785353636e-01 4.955699764393e-01 7.783336039121e-01 9.227094886945e-01 2.618585074440e+00 9.269097363022e-02 5.309602571345e-02 2.428900659271e-01 3.818856258522e-04 1.000000000000e-03 +3.767887581817e-01 7.081834446172e-01 4.848978335558e-01 8.021805030802e-01 9.373470373929e-01 2.437430841122e+00 6.916441380354e-02 4.256392384761e-02 2.174701099452e-01 4.102680507398e-04 1.000000000000e-03 +4.724942683714e-01 6.863512522420e-01 4.724942683714e-01 8.332639888403e-01 9.579038097543e-01 1.995773154480e+00 3.486119147268e-02 2.620126796055e-02 1.706239137875e-01 5.010589493877e-04 1.000000000000e-03 +5.639926522211e-01 6.675446150080e-01 4.611802732283e-01 8.739013243986e-01 9.881248753071e-01 1.518131279506e+00 1.031917760585e-02 1.019593405243e-02 1.064369090767e-01 6.587045623125e-04 1.000000000000e-03 +6.557665420337e-01 6.557665420337e-01 4.537622269171e-01 9.273939374945e-01 1.032453230843e+00 1.195233496423e+00 1.448503246541e-03 1.817849714147e-03 4.494255239434e-02 8.366566055857e-04 1.000000000000e-03 +7.513099355507e-01 6.510600969875e-01 4.507026836855e-01 9.941558575729e-01 1.091548797914e+00 1.044653878484e+00 4.783980965934e-05 6.869233529590e-05 8.736407556624e-03 9.572548578969e-04 1.000000000000e-03 +8.501166018218e-01 6.500760939801e-01 4.500506285498e-01 1.070185574869e+00 1.160966292756e+00 1.004035988442e+00 9.026504765337e-08 1.348533050993e-07 3.870878526458e-04 9.959802352820e-04 1.000000000000e-03 +9.500022608300e-01 6.500011789347e-01 4.500007697174e-01 1.151088974927e+00 1.235923347520e+00 1.000076462582e+00 1.666658435362e-12 2.499796512146e-12 1.666598836002e-06 9.999235432636e-04 1.000000000000e-03 +1.050000003579e+00 6.500000014986e-01 4.500000009369e-01 1.234908907355e+00 1.314343946730e+00 1.000000115124e+00 6.666692405012e-15 1.000003745627e-14 1.054094527506e-07 9.999998848757e-04 1.000000000000e-03 +1.150000000000e+00 6.500000000000e-01 4.500000000000e-01 1.320984481362e+00 1.395528573695e+00 1.000000000002e+00 6.666666666685e-15 1.000000000001e-14 1.054092553390e-07 9.999999999984e-04 1.000000000000e-03 +5.260485693140e-02 8.012985423787e-01 4.738636551491e-01 8.030234274235e-01 9.324126707967e-01 2.359527747150e+00 5.886195745259e-02 3.741974905170e-02 2.039056128368e-01 4.238136216910e-04 1.000000000000e-03 +1.570757906732e-01 7.959636594993e-01 4.715807377877e-01 8.113143356672e-01 9.384132051029e-01 2.214123172832e+00 4.834378711867e-02 3.275142122525e-02 1.907628580937e-01 4.516460566740e-04 1.000000000000e-03 +2.595015168464e-01 7.862900372849e-01 4.673503370641e-01 8.280054709838e-01 9.507940878723e-01 1.947192188906e+00 3.106782911369e-02 2.393279098799e-02 1.630705061826e-01 5.135599894542e-04 1.000000000000e-03 +3.592129948413e-01 7.743863065653e-01 4.619602068557e-01 8.536440285381e-01 9.706262721444e-01 1.628383115549e+00 1.469812937341e-02 1.353931630069e-02 1.226526998421e-01 6.141060973008e-04 1.000000000000e-03 +4.566495068119e-01 7.631552506282e-01 4.566495068119e-01 8.893451009776e-01 9.997317043610e-01 1.345909796113e+00 4.649577025897e-03 5.181896705848e-03 7.587926598549e-02 7.429918430552e-04 1.000000000000e-03 +5.533663315679e-01 7.551957933139e-01 4.527098336229e-01 9.362344701794e-01 1.039942871802e+00 1.149741247387e+00 8.206273283399e-04 1.070624364663e-03 3.449032657722e-02 8.697609155738e-04 1.000000000000e-03 +6.510600969875e-01 7.513099355507e-01 4.507026836855e-01 9.941558575729e-01 1.091548797914e+00 1.044653878484e+00 4.783980965934e-05 6.869233529590e-05 8.736407556624e-03 9.572548578969e-04 1.000000000000e-03 +7.501706785708e-01 7.501706785708e-01 4.500932966402e-01 1.060901547730e+00 1.152430505347e+00 1.007115594235e+00 3.957354028090e-07 5.894091081611e-07 8.092583080006e-04 9.929346797169e-04 1.000000000000e-03 +8.500099192445e-01 7.500079470262e-01 4.500043215926e-01 1.133591100625e+00 1.219644486262e+00 1.000399153026e+00 1.503012174486e-10 2.253618722997e-10 1.582409808909e-05 9.996010062338e-04 1.000000000000e-03 +9.500001012292e-01 7.500000648316e-01 4.500000341591e-01 1.210371963317e+00 1.291317281045e+00 1.000003787797e+00 6.978684056960e-15 1.046798643484e-14 1.078475592617e-07 9.999962122176e-04 1.000000000000e-03 +1.050000000061e+00 7.500000000313e-01 4.500000000156e-01 1.290348790124e+00 1.366565036941e+00 1.000000002098e+00 6.666666691555e-15 1.000000001635e-14 1.054092554251e-07 9.999999979020e-04 1.000000000000e-03 +1.150000000000e+00 7.500000000000e-01 4.500000000000e-01 1.372953021775e+00 1.444818327680e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +5.063245327525e-02 8.645660897219e-01 4.558013370506e-01 8.660474402835e-01 9.786690082345e-01 1.348037512704e+00 4.671258719988e-03 5.197843542147e-03 7.599593221678e-02 7.418191189606e-04 1.000000000000e-03 +1.516329878552e-01 8.624312050106e-01 4.549819179477e-01 8.756598348571e-01 9.868073226529e-01 1.295187933817e+00 3.362536294055e-03 3.894264538289e-03 6.577963665223e-02 7.720887246478e-04 1.000000000000e-03 +2.519736230059e-01 8.588740572130e-01 4.535990167792e-01 8.950728198556e-01 1.003447766885e+00 1.210976307308e+00 1.674951055676e-03 2.074711592913e-03 4.801286393496e-02 8.257799875731e-04 1.000000000000e-03 +3.516195090955e-01 8.550895506055e-01 4.520983470703e-01 9.245617441422e-01 1.029177989541e+00 1.124568992940e+00 5.343668970790e-04 7.127622677228e-04 2.814174968348e-02 8.892295681974e-04 1.000000000000e-03 +4.509249640613e-01 8.522015776520e-01 4.509249640613e-01 9.641477335794e-01 1.064384411470e+00 1.058073015339e+00 9.229488954349e-05 1.308438380984e-04 1.205744758776e-02 9.451143593147e-04 1.000000000000e-03 +5.503469471796e-01 8.506544716324e-01 4.502801048595e-01 1.013160792953e+00 1.108714104362e+00 1.019508708736e+00 6.086603760954e-06 8.955201228983e-06 3.154397499961e-03 9.808645982435e-04 1.000000000000e-03 +6.500760939801e-01 8.501166018218e-01 4.500506285498e-01 1.070185574869e+00 1.160966292756e+00 1.004035988442e+00 9.026504765337e-08 1.348533050993e-07 3.870878526458e-04 9.959802352820e-04 1.000000000000e-03 +7.500079470262e-01 8.500099192445e-01 4.500043215926e-01 1.133591100625e+00 1.219644486262e+00 1.000399153026e+00 1.503012174486e-10 2.253618722997e-10 1.582409808909e-05 9.996010062338e-04 1.000000000000e-03 +8.500002580167e-01 8.500002580167e-01 4.500001113505e-01 1.202081892908e+00 1.283550146069e+00 1.000011873277e+00 1.388621449257e-14 2.082907442948e-14 1.521296027496e-07 9.999881268639e-04 1.000000000000e-03 +9.500000011830e-01 8.500000009376e-01 4.500000003933e-01 1.274754879905e+00 1.351850585011e+00 1.000000048757e+00 6.666669212162e-15 1.000000333067e-14 1.054092728931e-07 9.999999512427e-04 1.000000000000e-03 +1.050000000000e+00 8.500000000001e-01 4.500000000000e-01 1.350925608611e+00 1.423903086590e+00 1.000000000007e+00 6.666666666747e-15 1.000000000005e-14 1.054092553392e-07 9.999999999928e-04 1.000000000000e-03 +1.150000000000e+00 8.500000000000e-01 4.500000000000e-01 1.430034964608e+00 1.499166435057e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +5.005357167828e-02 9.514363088533e-01 4.504901828009e-01 9.527520190701e-01 1.053887002786e+00 1.032281486974e+00 1.842448040133e-05 2.677246560238e-05 5.454097909155e-03 9.687280190706e-04 1.000000000000e-03 +1.501278206315e-01 9.511407159535e-01 4.503896080748e-01 9.629158966764e-01 1.063041778640e+00 1.026082684860e+00 1.119241799494e-05 1.636186560803e-05 4.263783610315e-03 9.745803284231e-04 1.000000000000e-03 +2.501317243472e-01 9.507029783717e-01 4.502404267812e-01 9.830574920164e-01 1.081257820558e+00 1.016700794325e+00 3.858717059976e-06 5.692998001252e-06 2.515065274446e-03 9.835735405950e-04 1.000000000000e-03 +3.500849482142e-01 9.503218606868e-01 4.501102388861e-01 1.012754219870e+00 1.108273584010e+00 1.008142620304e+00 6.416533414135e-07 9.547062020153e-07 1.029944012510e-03 9.919231464477e-04 1.000000000000e-03 +4.500351762686e-01 9.501026289001e-01 4.500351762686e-01 1.051297610252e+00 1.143572614748e+00 1.002829617240e+00 3.970766135942e-08 5.939343136183e-08 2.568904465198e-04 9.971783669022e-04 1.000000000000e-03 +5.500088184875e-01 9.500206705734e-01 4.500070761401e-01 1.097747227248e+00 1.186404376048e+00 1.000629928302e+00 6.325229791214e-10 9.481871787431e-10 3.245830109101e-05 9.993704682583e-04 1.000000000000e-03 +6.500011789347e-01 9.500022608300e-01 4.500007697174e-01 1.151088974927e+00 1.235923347520e+00 1.000076462582e+00 1.666658435362e-12 2.499796512146e-12 1.666598836002e-06 9.999235432636e-04 1.000000000000e-03 +7.500000648316e-01 9.500001012292e-01 4.500000341591e-01 1.210371963317e+00 1.291317281045e+00 1.000003787797e+00 6.978684056960e-15 1.046798643484e-14 1.078475592617e-07 9.999962122176e-04 1.000000000000e-03 +8.500000009376e-01 9.500000011830e-01 4.500000003933e-01 1.274754879905e+00 1.351850585011e+00 1.000000048757e+00 6.666669212163e-15 1.000000333067e-14 1.054092728931e-07 9.999999512427e-04 1.000000000000e-03 +9.500000000015e-01 9.500000000015e-01 4.500000000005e-01 1.343502884257e+00 1.416862731533e+00 1.000000000069e+00 6.666666667432e-15 1.000000000046e-14 1.054092553414e-07 9.999999999311e-04 1.000000000000e-03 +1.050000000000e+00 9.500000000000e-01 4.500000000000e-01 1.415980225851e+00 1.485765795810e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 1.000000000000e-03 1.000000000000e-03 +1.150000000000e+00 9.500000000000e-01 4.500000000000e-01 1.491643389018e+00 1.558043645088e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +5.000057964117e-02 1.050019962653e+00 4.500054502267e-01 1.051209769710e+00 1.143480163872e+00 1.000458122364e+00 1.992087600098e-10 2.986763097177e-10 1.821709544228e-05 9.995420874164e-04 1.000000000000e-03 +1.500012582639e-01 1.050014436149e+00 4.500039363165e-01 1.060674640784e+00 1.152186719374e+00 1.000338242690e+00 1.004636174847e-10 1.506444718357e-10 1.293764841399e-05 9.996618716791e-04 1.000000000000e-03 +2.500010753230e-01 1.050007379972e+00 4.500020073429e-01 1.079359085596e+00 1.169409185132e+00 1.000180093289e+00 2.109138575369e-11 3.163138203091e-11 5.928404510013e-06 9.998199391388e-04 1.000000000000e-03 +3.500005238764e-01 1.050002546872e+00 4.500006898725e-01 1.106799762899e+00 1.194782966081e+00 1.000065844045e+00 1.415226714461e-12 2.122700304518e-12 1.535759061151e-06 9.999341602902e-04 1.000000000000e-03 +4.500001481584e-01 1.050000551023e+00 4.500001481584e-01 1.142366530712e+00 1.227803495610e+00 1.000015265716e+00 2.944712784331e-14 4.417001747802e-14 2.215350924748e-07 9.999847345171e-04 1.000000000000e-03 +5.500000224497e-01 1.050000066408e+00 4.500000176537e-01 1.185327028356e+00 1.267872304312e+00 1.000001982789e+00 6.734464171964e-15 1.010167622845e-14 1.059437808381e-07 9.999980172148e-04 1.000000000000e-03 +6.500000014986e-01 1.050000003579e+00 4.500000009369e-01 1.234908907355e+00 1.314343946730e+00 1.000000115124e+00 6.666692405012e-15 1.000003745627e-14 1.054094527506e-07 9.999998848757e-04 1.000000000000e-03 +7.500000000313e-01 1.050000000061e+00 4.500000000156e-01 1.290348790124e+00 1.366565036941e+00 1.000000002098e+00 6.666666691555e-15 1.000000001635e-14 1.054092554251e-07 9.999999979020e-04 1.000000000000e-03 +8.500000000001e-01 1.050000000000e+00 4.500000000000e-01 1.350925608611e+00 1.423903086590e+00 1.000000000007e+00 6.666666666747e-15 1.000000000005e-14 1.054092553392e-07 9.999999999928e-04 1.000000000000e-03 +9.500000000000e-01 1.050000000000e+00 4.500000000000e-01 1.415980225851e+00 1.485765795810e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 1.000000000000e-03 1.000000000000e-03 +1.050000000000e+00 1.050000000000e+00 4.500000000000e-01 1.484924240492e+00 1.551612064918e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 1.000000000000e-03 1.000000000000e-03 +1.150000000000e+00 1.050000000000e+00 4.500000000000e-01 1.557241150240e+00 1.620956507745e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +5.000000014927e-02 1.150000007379e+00 4.500000015283e-01 1.151086450701e+00 1.235920716859e+00 1.000000169692e+00 6.666717512707e-15 1.000007457212e-14 1.054096483678e-07 9.999998303076e-04 1.000000000000e-03 +1.500000002963e-01 1.150000004831e+00 4.500000010003e-01 1.159741355304e+00 1.243985535326e+00 1.000000113150e+00 6.666689773724e-15 1.000003352908e-14 1.054094320526e-07 9.999998868496e-04 1.000000000000e-03 +2.500000002108e-01 1.150000002018e+00 4.500000004171e-01 1.176860231611e+00 1.259960318868e+00 1.000000048945e+00 6.666670352416e-15 1.000000503918e-14 1.054092818977e-07 9.999999510551e-04 1.000000000000e-03 +3.500000000766e-01 1.150000000507e+00 4.500000001042e-01 1.202081528524e+00 1.283549765811e+00 1.000000012896e+00 6.666666942936e-15 1.000000028545e-14 1.054092568434e-07 9.999999871042e-04 1.000000000000e-03 +4.500000000139e-01 1.150000000068e+00 4.500000000139e-01 1.234908903591e+00 1.314343942879e+00 1.000000001836e+00 6.666666688742e-15 1.000000001476e-14 1.054092554167e-07 9.999999981643e-04 1.000000000000e-03 +5.500000000011e-01 1.150000000004e+00 4.500000000008e-01 1.274754878402e+00 1.351850583464e+00 1.000000000114e+00 6.666666667929e-15 1.000000000076e-14 1.054092553429e-07 9.999999998865e-04 1.000000000000e-03 +6.500000000000e-01 1.150000000000e+00 4.500000000000e-01 1.320984481362e+00 1.395528573695e+00 1.000000000002e+00 6.666666666685e-15 1.000000000001e-14 1.054092553390e-07 9.999999999984e-04 1.000000000000e-03 +7.500000000000e-01 1.150000000000e+00 4.500000000000e-01 1.372953021775e+00 1.444818327680e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +8.500000000000e-01 1.150000000000e+00 4.500000000000e-01 1.430034964608e+00 1.499166435057e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +9.500000000000e-01 1.150000000000e+00 4.500000000000e-01 1.491643389018e+00 1.558043645088e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +1.050000000000e+00 1.150000000000e+00 4.500000000000e-01 1.557241150240e+00 1.620956507745e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +1.150000000000e+00 1.150000000000e+00 4.500000000000e-01 1.626345596729e+00 1.687453703069e+00 9.999999999987e-01 6.666666666652e-15 9.999999999991e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +6.644569409731e-02 6.644569409731e-02 7.937576001006e-01 9.396840175371e-02 7.993004367856e-01 1.186468144951e+00 7.738818502229e-02 9.783851174378e-02 3.297111728363e-01 8.428376305384e-04 1.000000000000e-03 +1.977678592834e-01 6.595862237839e-02 7.841651042628e-01 2.084770155954e-01 8.114046935870e-01 1.261327154600e+00 7.989063499718e-02 9.500782731802e-02 3.249065289827e-01 7.928157229891e-04 1.000000000000e-03 +3.245982364499e-01 6.495373728911e-02 7.638753060881e-01 3.310332356338e-01 8.325193609433e-01 1.397474043835e+00 8.293075983167e-02 8.901499122385e-02 3.144925210626e-01 7.155767968727e-04 1.000000000000e-03 +4.438962276043e-01 6.338159151936e-02 7.322726967488e-01 4.483983575181e-01 8.586526593616e-01 1.576292409329e+00 8.532994818551e-02 8.119998644968e-02 3.003701169662e-01 6.344000605989e-04 1.000000000000e-03 +5.521404294063e-01 6.103977755288e-02 6.905713784738e-01 5.555041928092e-01 8.862695622641e-01 1.801599573959e+00 8.620318092521e-02 7.177220357778e-02 2.823949235808e-01 5.550622982235e-04 1.000000000000e-03 +6.427891983551e-01 5.774653441582e-02 6.427891983551e-01 6.453778860164e-01 9.108735199143e-01 2.259093881608e+00 9.805309279626e-02 6.510558963123e-02 2.689601160669e-01 4.426553531667e-04 1.000000000000e-03 +7.131454014587e-01 5.414558274826e-02 5.978687078227e-01 7.151979500480e-01 9.321776115883e-01 2.498988262258e+00 7.851157402934e-02 4.712601608524e-02 2.288279705253e-01 4.001619435765e-04 1.000000000000e-03 +7.774272859485e-01 5.146465263007e-02 5.666863499454e-01 7.791288695765e-01 9.634185044009e-01 1.722111448131e+00 1.899309104251e-02 1.654343369861e-02 1.355787335774e-01 5.806825110450e-04 1.000000000000e-03 +8.559393310042e-01 5.026702262286e-02 5.530219884522e-01 8.574140842809e-01 1.020290268323e+00 1.144569811264e+00 6.893995401096e-04 9.034829505262e-04 3.168390671980e-02 8.736907003473e-04 1.000000000000e-03 +9.503916243655e-01 5.001459272627e-02 5.501657739437e-01 9.517067295915e-01 1.099285257778e+00 1.009654138292e+00 7.324739230999e-07 1.088205201148e-06 1.099598513170e-03 9.904381729094e-04 1.000000000000e-03 +1.050003103667e+00 5.000008783269e-02 5.500010549623e-01 1.051192906413e+00 1.186384291431e+00 1.000077669558e+00 1.327392243880e-12 1.990933730878e-12 1.487329348149e-06 9.999223364740e-04 1.000000000000e-03 +1.150000000527e+00 5.000000001027e-02 5.500000001411e-01 1.151086443849e+00 1.275735082753e+00 1.000000012975e+00 6.666666887196e-15 1.000000020105e-14 1.054092563986e-07 9.999999870253e-04 1.000000000000e-03 +6.595862237839e-02 1.977678592834e-01 7.841651042628e-01 2.084770155954e-01 8.114046935870e-01 1.261327154600e+00 7.989063499718e-02 9.500782731802e-02 3.249065289827e-01 7.928157229891e-04 1.000000000000e-03 +1.962892531392e-01 1.962892531392e-01 7.742841956890e-01 2.775949239375e-01 8.225417664105e-01 1.335104789029e+00 8.247628311008e-02 9.266270758802e-02 3.208715693026e-01 7.490048782819e-04 1.000000000000e-03 +3.220678556236e-01 1.932566777741e-01 7.537423432607e-01 3.756006484689e-01 8.421421300198e-01 1.467223462259e+00 8.493917407974e-02 8.683664376757e-02 3.106206041810e-01 6.815594391193e-04 1.000000000000e-03 +4.401547253665e-01 1.884391187182e-01 7.223182131662e-01 4.787958685345e-01 8.665962640107e-01 1.646262842985e+00 8.643054191248e-02 7.875158782887e-02 2.958069712740e-01 6.074364153096e-04 1.000000000000e-03 +5.465708789424e-01 1.812604840022e-01 6.815985878299e-01 5.758429375868e-01 8.922845530997e-01 1.912471958895e+00 8.926832460072e-02 7.001539880273e-02 2.789173489738e-01 5.228834835193e-04 1.000000000000e-03 +6.358214308017e-01 1.715591887852e-01 6.358214308017e-01 6.585601317445e-01 9.154071984587e-01 2.355051508456e+00 9.745104288738e-02 6.206937037521e-02 2.626137221921e-01 4.246191628545e-04 1.000000000000e-03 +7.069616203497e-01 1.613061875930e-01 5.934796264502e-01 7.251306218904e-01 9.370338765566e-01 2.427716635464e+00 7.028719782641e-02 4.342796650956e-02 2.196663290578e-01 4.119096872312e-04 1.000000000000e-03 +7.739165384455e-01 1.538674114688e-01 5.646663764575e-01 7.890639953715e-01 9.702938243095e-01 1.625960386649e+00 1.462963411623e-02 1.349630123498e-02 1.224577080509e-01 6.150211334859e-04 1.000000000000e-03 +8.549225690771e-01 1.506682863740e-01 5.525175539375e-01 8.680976509796e-01 1.029013692351e+00 1.121201856519e+00 4.675184585788e-04 6.254696099465e-04 2.636221222268e-02 8.919000572339e-04 1.000000000000e-03 +9.503017832094e-01 1.500337660925e-01 5.501278698601e-01 9.620725597058e-01 1.108252806599e+00 1.007598311924e+00 4.198400424923e-07 6.250110349387e-07 8.333406899267e-04 9.924589870442e-04 1.000000000000e-03 +1.050002184931e+00 1.500001859320e-01 5.500007427352e-01 1.060662361046e+00 1.194782599952e+00 1.000055781334e+00 6.341347735406e-13 9.511491039446e-13 1.028023510294e-06 9.999442217769e-04 1.000000000000e-03 +1.150000000340e+00 1.500000000201e-01 5.500000000910e-01 1.159741350814e+00 1.283549765645e+00 1.000000008515e+00 6.666666796467e-15 1.000000010955e-14 1.054092559163e-07 9.999999914852e-04 1.000000000000e-03 +6.495373728911e-02 3.245982364499e-01 7.638753060881e-01 3.310332356338e-01 8.325193609433e-01 1.397474043835e+00 8.293075983167e-02 8.901499122385e-02 3.144925210626e-01 7.155767968727e-04 1.000000000000e-03 +1.932566777741e-01 3.220678556236e-01 7.537423432607e-01 3.756006484689e-01 8.421421300198e-01 1.467223462259e+00 8.493917407974e-02 8.683664376757e-02 3.106206041810e-01 6.815594391193e-04 1.000000000000e-03 +3.168319426403e-01 3.168319426403e-01 7.332157559213e-01 4.480680302749e-01 8.592847633269e-01 1.596157075751e+00 8.674647347129e-02 8.152061735261e-02 3.009625619992e-01 6.265047564505e-04 1.000000000000e-03 +4.322360928592e-01 3.083511014492e-01 7.027169984481e-01 5.309505078019e-01 8.807494658772e-01 1.800807061068e+00 8.879537809786e-02 7.396298583358e-02 2.866724531074e-01 5.553065742683e-04 1.000000000000e-03 +5.353096711151e-01 2.960394675885e-01 6.642878916683e-01 6.117154651956e-01 9.030361085674e-01 2.135117513139e+00 9.442760238853e-02 6.633892641091e-02 2.714957057383e-01 4.683582959000e-04 1.000000000000e-03 +6.225210510365e-01 2.805844007454e-01 6.225210510365e-01 6.828323842095e-01 9.240089414659e-01 2.481587716363e+00 9.232258582520e-02 5.580454715529e-02 2.490081372059e-01 4.029678231424e-04 1.000000000000e-03 +6.956321279977e-01 2.653175053018e-01 5.852662115386e-01 7.445115419671e-01 9.470131860174e-01 2.226668007700e+00 5.193225505464e-02 3.498428248511e-02 1.971583753825e-01 4.491015259310e-04 1.000000000000e-03 +7.678461741125e-01 2.548924372583e-01 5.611053846716e-01 8.090475274486e-01 9.845796841181e-01 1.467039074858e+00 8.339275385155e-03 8.526639332319e-03 9.733469937580e-02 6.816451021230e-04 1.000000000000e-03 +8.533066030936e-01 2.507572994947e-01 5.517072298446e-01 8.893882066527e-01 1.046609884148e+00 1.084005239392e+00 2.052138814523e-04 2.839661756166e-04 1.776282558906e-02 9.225047662693e-04 1.000000000000e-03 +9.501751470354e-01 2.500327480275e-01 5.500743564085e-01 9.825218496959e-01 1.126024414792e+00 1.004605670535e+00 1.252347012244e-07 1.869908336637e-07 4.558153057541e-04 9.954154444173e-04 1.000000000000e-03 +1.050001060819e+00 2.500001513532e-01 5.500003604437e-01 1.079352724274e+00 1.211405258321e+00 1.000028144139e+00 1.186538238796e-13 1.779757268458e-13 4.446918119400e-07 9.999718566531e-04 1.000000000000e-03 +1.150000000138e+00 2.500000000139e-01 5.500000000367e-01 1.176860229731e+00 1.299038105817e+00 1.000000003557e+00 6.666666712308e-15 1.000000003289e-14 1.054092555123e-07 9.999999964429e-04 1.000000000000e-03 +6.338159151936e-02 4.438962276043e-01 7.322726967488e-01 4.483983575181e-01 8.586526593616e-01 1.576292409329e+00 8.532994818551e-02 8.119998644968e-02 3.003701169662e-01 6.344000605989e-04 1.000000000000e-03 +1.884391187182e-01 4.401547253665e-01 7.223182131662e-01 4.787958685345e-01 8.665962640107e-01 1.646262842985e+00 8.643054191248e-02 7.875158782887e-02 2.958069712740e-01 6.074364153096e-04 1.000000000000e-03 +3.083511014492e-01 4.322360928592e-01 7.027169984481e-01 5.309505078019e-01 8.807494658772e-01 1.800807061068e+00 8.879537809786e-02 7.396298583358e-02 2.866724531074e-01 5.553065742683e-04 1.000000000000e-03 +4.195584194438e-01 4.195584194438e-01 6.744910729051e-01 5.933452069852e-01 8.983299739411e-01 2.068588588741e+00 9.388790722581e-02 6.808113590360e-02 2.750376457134e-01 4.834214040640e-04 1.000000000000e-03 +5.186541589754e-01 4.023029098510e-01 6.401227479499e-01 6.563914745768e-01 9.168461704888e-01 2.416014373501e+00 9.705454574645e-02 6.025701676961e-02 2.587513108278e-01 4.139048223256e-04 1.000000000000e-03 +6.044774634870e-01 3.826403557122e-01 6.044774634870e-01 7.154066296053e-01 9.365893708274e-01 2.449455144596e+00 7.467996509986e-02 4.573259808285e-02 2.254196040051e-01 4.082540569098e-04 1.000000000000e-03 +6.813943151702e-01 3.650877125594e-01 5.746436254033e-01 7.730376773535e-01 9.632250758907e-01 1.886083140547e+00 2.831237350637e-02 2.251680180294e-02 1.581729075093e-01 5.301993207522e-04 1.000000000000e-03 +7.609577794088e-01 3.543090714024e-01 5.569512082585e-01 8.393995831074e-01 1.007366025088e+00 1.293835439116e+00 3.327226500468e-03 3.857399171344e-03 6.546754218139e-02 7.728958179436e-04 1.000000000000e-03 +8.517245275278e-01 3.505622779615e-01 5.509016174244e-01 9.210475457445e-01 1.073229320137e+00 1.046611736286e+00 5.216207405858e-05 7.475848815296e-05 9.113999497291e-03 9.554641566975e-04 1.000000000000e-03 +9.500732532747e-01 3.500192876494e-01 5.500311787351e-01 1.012498241142e+00 1.152253004290e+00 1.002056179059e+00 1.580957054806e-08 2.366569491580e-08 1.621579987947e-04 9.979480401381e-04 1.000000000000e-03 +1.050000339723e+00 3.500000686928e-01 5.500001152263e-01 1.106797525071e+00 1.235921068779e+00 1.000009510564e+00 1.243743699713e-14 1.865597806684e-14 1.439752218915e-07 9.999904895269e-04 1.000000000000e-03 +1.150000000033e+00 3.500000000048e-01 5.500000000087e-01 1.202081528050e+00 1.321930406674e+00 1.000000000882e+00 6.666666676684e-15 1.000000000621e-14 1.054092553717e-07 9.999999991181e-04 1.000000000000e-03 +6.103977755288e-02 5.521404294063e-01 6.905713784738e-01 5.555041928092e-01 8.862695622641e-01 1.801599573959e+00 8.620318092521e-02 7.177220357778e-02 2.823949235808e-01 5.550622982235e-04 1.000000000000e-03 +1.812604840022e-01 5.465708789424e-01 6.815985878299e-01 5.758429375868e-01 8.922845530997e-01 1.912471958895e+00 8.926832460072e-02 7.001539880273e-02 2.789173489738e-01 5.228834835193e-04 1.000000000000e-03 +2.960394675885e-01 5.353096711151e-01 6.642878916683e-01 6.117154651956e-01 9.030361085674e-01 2.135117513139e+00 9.442760238853e-02 6.633892641091e-02 2.714957057383e-01 4.683582959000e-04 1.000000000000e-03 +4.023029098510e-01 5.186541589754e-01 6.401227479499e-01 6.563914745768e-01 9.168461704888e-01 2.416014373501e+00 9.705454574645e-02 6.025701676961e-02 2.587513108278e-01 4.139048223256e-04 1.000000000000e-03 +4.981727854110e-01 4.981727854110e-01 6.119968439717e-01 7.045227095333e-01 9.332161514245e-01 2.500318986905e+00 8.198210100222e-02 4.918298511005e-02 2.337686061758e-01 3.999489686065e-04 1.000000000000e-03 +5.846713258564e-01 4.773830279030e-01 5.846713258564e-01 7.548079985059e-01 9.547647217442e-01 2.097404732817e+00 4.186788658657e-02 2.994263763080e-02 1.823995541868e-01 4.767797003381e-04 1.000000000000e-03 +6.675446150080e-01 4.611802732283e-01 5.639926522211e-01 8.113587723327e-01 9.881248753071e-01 1.518131279506e+00 1.031917760585e-02 1.019593405243e-02 1.064369090767e-01 6.587045623125e-04 1.000000000000e-03 +7.551957933139e-01 4.527098336229e-01 5.533663315679e-01 8.804924075186e-01 1.039942871802e+00 1.149741247387e+00 8.206273283399e-04 1.070624364663e-03 3.449032657722e-02 8.697609155738e-04 1.000000000000e-03 +8.506544716324e-01 4.502801048595e-01 5.503469471796e-01 9.624786766160e-01 1.108714104362e+00 1.019508708736e+00 6.086603760954e-06 8.955201228983e-06 3.154397499961e-03 9.808645982435e-04 1.000000000000e-03 +9.500206705734e-01 4.500070761401e-01 5.500088184875e-01 1.051211512063e+00 1.186404376048e+00 1.000629928302e+00 6.325229791214e-10 9.481871787431e-10 3.245830109101e-05 9.993704682583e-04 1.000000000000e-03 +1.050000066408e+00 4.500000176537e-01 5.500000224497e-01 1.142366033873e+00 1.267872304312e+00 1.000001982789e+00 6.734464171964e-15 1.010167622845e-14 1.059437808381e-07 9.999980172148e-04 1.000000000000e-03 +1.150000000004e+00 4.500000000008e-01 5.500000000011e-01 1.234908903527e+00 1.351850583464e+00 1.000000000114e+00 6.666666667929e-15 1.000000000076e-14 1.054092553429e-07 9.999999998865e-04 1.000000000000e-03 +5.774653441582e-02 6.427891983551e-01 6.427891983551e-01 6.453778860164e-01 9.108735199143e-01 2.259093881608e+00 9.805309279626e-02 6.510558963123e-02 2.689601160669e-01 4.426553531667e-04 1.000000000000e-03 +1.715591887852e-01 6.358214308017e-01 6.358214308017e-01 6.585601317445e-01 9.154071984587e-01 2.355051508456e+00 9.745104288738e-02 6.206937037521e-02 2.626137221921e-01 4.246191628545e-04 1.000000000000e-03 +2.805844007454e-01 6.225210510365e-01 6.225210510365e-01 6.828323842095e-01 9.240089414659e-01 2.481587716363e+00 9.232258582520e-02 5.580454715529e-02 2.490081372059e-01 4.029678231424e-04 1.000000000000e-03 +3.826403557122e-01 6.044774634870e-01 6.044774634870e-01 7.154066296053e-01 9.365893708274e-01 2.449455144596e+00 7.467996509986e-02 4.573259808285e-02 2.254196040051e-01 4.082540569098e-04 1.000000000000e-03 +4.773830279030e-01 5.846713258564e-01 5.846713258564e-01 7.548079985059e-01 9.547647217442e-01 2.097404732817e+00 4.186788658657e-02 2.994263763080e-02 1.823995541868e-01 4.767797003381e-04 1.000000000000e-03 +5.672483118783e-01 5.672483118783e-01 5.672483118783e-01 8.022102558915e-01 9.825028966808e-01 1.605789242252e+00 1.387025540496e-02 1.295648430068e-02 1.199837225103e-01 6.227467301982e-04 1.000000000000e-03 +6.573040549592e-01 5.559063417884e-01 5.559063417884e-01 8.608603147470e-01 1.024749892582e+00 1.237242833013e+00 2.201802472817e-03 2.669406216065e-03 5.446105862668e-02 8.082487716377e-04 1.000000000000e-03 +7.517310244553e-01 5.511444940411e-01 5.511444940411e-01 9.321264862885e-01 1.082875819174e+00 1.056911177814e+00 8.922257734149e-05 1.266273541444e-04 1.186157915964e-02 9.461533012343e-04 1.000000000000e-03 +8.501644256995e-01 5.500882977887e-01 5.500882977887e-01 1.012608851477e+00 1.152377464832e+00 1.005554920542e+00 2.171954970944e-07 3.239934875621e-07 5.999939699346e-04 9.944757661382e-04 1.000000000000e-03 +9.500035698451e-01 5.500015244869e-01 5.500015244869e-01 1.097728773266e+00 1.227807043714e+00 1.000119205947e+00 5.885172591031e-12 8.826706690618e-12 3.131685149958e-06 9.998808082615e-04 1.000000000000e-03 +1.050000006953e+00 5.500000023404e-01 5.500000023404e-01 1.185326966358e+00 1.306713442095e+00 1.000000222624e+00 6.666817479565e-15 1.000022399306e-14 1.054104358794e-07 9.999997773762e-04 1.000000000000e-03 +1.150000000000e+00 5.500000000001e-01 5.500000000001e-01 1.274754878398e+00 1.388344337692e+00 1.000000000006e+00 6.666666666728e-15 1.000000000004e-14 1.054092553391e-07 9.999999999945e-04 1.000000000000e-03 +5.414558274826e-02 7.131454014587e-01 5.978687078227e-01 7.151979500480e-01 9.321776115883e-01 2.498988262258e+00 7.851157402934e-02 4.712601608524e-02 2.288279705253e-01 4.001619435765e-04 1.000000000000e-03 +1.613061875930e-01 7.069616203497e-01 5.934796264502e-01 7.251306218904e-01 9.370338765566e-01 2.427716635464e+00 7.028719782641e-02 4.342796650956e-02 2.196663290578e-01 4.119096872312e-04 1.000000000000e-03 +2.653175053018e-01 6.956321279977e-01 5.852662115386e-01 7.445115419671e-01 9.470131860174e-01 2.226668007700e+00 5.193225505464e-02 3.498428248511e-02 1.971583753825e-01 4.491015259310e-04 1.000000000000e-03 +3.650877125594e-01 6.813943151702e-01 5.746436254033e-01 7.730376773535e-01 9.632250758907e-01 1.886083140547e+00 2.831237350637e-02 2.251680180294e-02 1.581729075093e-01 5.301993207522e-04 1.000000000000e-03 +4.611802732283e-01 6.675446150080e-01 5.639926522211e-01 8.113587723327e-01 9.881248753071e-01 1.518131279506e+00 1.031917760585e-02 1.019593405243e-02 1.064369090767e-01 6.587045623125e-04 1.000000000000e-03 +5.559063417884e-01 6.573040549592e-01 5.559063417884e-01 8.608603147470e-01 1.024749892582e+00 1.237242833013e+00 2.201802472817e-03 2.669406216065e-03 5.446105862668e-02 8.082487716377e-04 1.000000000000e-03 +6.519865905825e-01 6.519865905825e-01 5.516239245874e-01 9.220482788872e-01 1.074458925588e+00 1.076520577509e+00 1.802466019688e-04 2.511516348148e-04 1.670501038660e-02 9.289186113972e-04 1.000000000000e-03 +7.503531864919e-01 6.502884605645e-01 5.502374939375e-01 9.929274829623e-01 1.135194382543e+00 1.013784462369e+00 2.346631511811e-06 3.472086423075e-06 1.964147093121e-03 9.864029654420e-04 1.000000000000e-03 +8.500237972816e-01 6.500156515596e-01 5.500128887698e-01 1.070075139052e+00 1.203152102201e+00 1.000919982307e+00 1.530972459259e-09 2.294347929388e-09 5.049035033645e-05 9.990808632826e-04 1.000000000000e-03 +9.500003210142e-01 6.500001683268e-01 5.500001371321e-01 1.151086803309e+00 1.275735466152e+00 1.000011786521e+00 1.478739175934e-14 2.218082620422e-14 1.569884150157e-07 9.999882136176e-04 1.000000000000e-03 +1.050000000304e+00 6.500000001277e-01 5.500000001019e-01 1.234908903849e+00 1.351850583799e+00 1.000000010433e+00 6.666666842413e-15 1.000000015929e-14 1.054092561785e-07 9.999999895674e-04 1.000000000000e-03 +1.150000000000e+00 6.500000000000e-01 5.500000000000e-01 1.320984481362e+00 1.430908802125e+00 9.999999999994e-01 6.666666666660e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +5.146465263007e-02 7.774272859485e-01 5.666863499454e-01 7.791288695765e-01 9.634185044009e-01 1.722111448131e+00 1.899309104251e-02 1.654343369861e-02 1.355787335774e-01 5.806825110450e-04 1.000000000000e-03 +1.538674114688e-01 7.739165384455e-01 5.646663764575e-01 7.890639953715e-01 9.702938243095e-01 1.625960386649e+00 1.462963411623e-02 1.349630123498e-02 1.224577080509e-01 6.150211334859e-04 1.000000000000e-03 +2.548924372583e-01 7.678461741125e-01 5.611053846716e-01 8.090475274486e-01 9.845796841181e-01 1.467039074858e+00 8.339275385155e-03 8.526639332319e-03 9.733469937580e-02 6.816451021230e-04 1.000000000000e-03 +3.543090714024e-01 7.609577794088e-01 5.569512082585e-01 8.393995831074e-01 1.007366025088e+00 1.293835439116e+00 3.327226500468e-03 3.857399171344e-03 6.546754218139e-02 7.728958179436e-04 1.000000000000e-03 +4.527098336229e-01 7.551957933139e-01 5.533663315679e-01 8.804924075186e-01 1.039942871802e+00 1.149741247387e+00 8.206273283399e-04 1.070624364663e-03 3.449032657722e-02 8.697609155738e-04 1.000000000000e-03 +5.511444940411e-01 7.517310244553e-01 5.511444940411e-01 9.321264862885e-01 1.082875819174e+00 1.056911177814e+00 8.922257734149e-05 1.266273541444e-04 1.186157915964e-02 9.461533012343e-04 1.000000000000e-03 +6.502884605645e-01 7.503531864919e-01 5.502374939375e-01 9.929274829623e-01 1.135194382543e+00 1.013784462369e+00 2.346631511811e-06 3.472086423075e-06 1.964147093121e-03 9.864029654420e-04 1.000000000000e-03 +7.500359393869e-01 7.500359393869e-01 5.500243628049e-01 1.060710997748e+00 1.194836650100e+00 1.001674826878e+00 7.594966693250e-09 1.137340156125e-08 1.124149138052e-04 9.983279734771e-04 1.000000000000e-03 +8.500015431596e-01 7.500012446742e-01 5.500008380996e-01 1.133580385498e+00 1.259962464638e+00 1.000067878178e+00 1.018993879559e-12 1.528387075209e-12 1.303153046017e-06 9.999321264293e-04 1.000000000000e-03 +9.500000109400e-01 7.500000070620e-01 5.500000046815e-01 1.210371856654e+00 1.329473593769e+00 1.000000440188e+00 6.667384175755e-15 1.000107186128e-14 1.054149043926e-07 9.999995598123e-04 1.000000000000e-03 +1.050000000004e+00 7.500000000020e-01 5.500000000013e-01 1.290348790061e+00 1.402676013915e+00 1.000000000144e+00 6.666666668269e-15 1.000000000096e-14 1.054092553440e-07 9.999999998558e-04 1.000000000000e-03 +1.150000000000e+00 7.500000000000e-01 5.500000000000e-01 1.372953021775e+00 1.479019945775e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +5.026702262286e-02 8.559393310042e-01 5.530219884522e-01 8.574140842809e-01 1.020290268323e+00 1.144569811264e+00 6.893995401096e-04 9.034829505262e-04 3.168390671980e-02 8.736907003473e-04 1.000000000000e-03 +1.506682863740e-01 8.549225690771e-01 5.525175539375e-01 8.680976509796e-01 1.029013692351e+00 1.121201856519e+00 4.675184585788e-04 6.254696099465e-04 2.636221222268e-02 8.919000572339e-04 1.000000000000e-03 +2.507572994947e-01 8.533066030936e-01 5.517072298446e-01 8.893882066527e-01 1.046609884148e+00 1.084005239392e+00 2.052138814523e-04 2.839661756166e-04 1.776282558906e-02 9.225047662693e-04 1.000000000000e-03 +3.505622779615e-01 8.517245275278e-01 5.509016174244e-01 9.210475457445e-01 1.073229320137e+00 1.046611736286e+00 5.216207405858e-05 7.475848815296e-05 9.113999497291e-03 9.554641566975e-04 1.000000000000e-03 +4.502801048595e-01 8.506544716324e-01 5.503469471796e-01 9.624786766160e-01 1.108714104362e+00 1.019508708736e+00 6.086603760954e-06 8.955201228983e-06 3.154397499961e-03 9.808645982435e-04 1.000000000000e-03 +5.500882977887e-01 8.501644256995e-01 5.500882977887e-01 1.012608851477e+00 1.152377464832e+00 1.005554920542e+00 2.171954970944e-07 3.239934875621e-07 5.999939699346e-04 9.944757661382e-04 1.000000000000e-03 +6.500156515596e-01 8.500237972816e-01 5.500128887698e-01 1.070075139052e+00 1.203152102201e+00 1.000919982307e+00 1.530972459259e-09 2.294347929388e-09 5.049035033645e-05 9.990808632826e-04 1.000000000000e-03 +7.500012446742e-01 8.500015431596e-01 5.500008380996e-01 1.133580385498e+00 1.259962464638e+00 1.000067878178e+00 1.018993879559e-12 1.528387075209e-12 1.303153046017e-06 9.999321264293e-04 1.000000000000e-03 +8.500000283497e-01 8.500000283497e-01 5.500000154051e-01 1.202081568110e+00 1.321930449507e+00 1.000001398777e+00 6.682923944979e-15 1.002437189561e-14 1.055376283376e-07 9.999986012250e-04 1.000000000000e-03 +9.500000000879e-01 8.500000000701e-01 5.500000000375e-01 1.274754878510e+00 1.388344337809e+00 1.000000003859e+00 6.666666714716e-15 1.000000003348e-14 1.054092555154e-07 9.999999961405e-04 1.000000000000e-03 +1.050000000000e+00 8.500000000000e-01 5.500000000000e-01 1.350925608611e+00 1.458595214581e+00 1.000000000000e+00 6.666666666671e-15 1.000000000000e-14 1.054092553390e-07 9.999999999997e-04 1.000000000000e-03 +1.150000000000e+00 8.500000000000e-01 5.500000000000e-01 1.430034964608e+00 1.532155344604e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +5.001459272627e-02 9.503916243655e-01 5.501657739437e-01 9.517067295915e-01 1.099285257778e+00 1.009654138292e+00 7.324739230999e-07 1.088205201148e-06 1.099598513170e-03 9.904381729094e-04 1.000000000000e-03 +1.500337660925e-01 9.503017832094e-01 5.501278698601e-01 9.620725597058e-01 1.108252806599e+00 1.007598311924e+00 4.198400424923e-07 6.250110349387e-07 8.333406899267e-04 9.924589870442e-04 1.000000000000e-03 +2.500327480275e-01 9.501751470354e-01 5.500743564085e-01 9.825218496959e-01 1.126024414792e+00 1.004605670535e+00 1.252347012244e-07 1.869908336637e-07 4.558153057541e-04 9.954154444173e-04 1.000000000000e-03 +3.500192876494e-01 9.500732532747e-01 5.500311787351e-01 1.012498241142e+00 1.152253004290e+00 1.002056179059e+00 1.580957054806e-08 2.366569491580e-08 1.621579987947e-04 9.979480401381e-04 1.000000000000e-03 +4.500070761401e-01 9.500206705734e-01 5.500088184875e-01 1.051211512063e+00 1.186404376048e+00 1.000629928302e+00 6.325229791214e-10 9.481871787431e-10 3.245830109101e-05 9.993704682583e-04 1.000000000000e-03 +5.500015244869e-01 9.500035698451e-01 5.500015244869e-01 1.097728773266e+00 1.227807043714e+00 1.000119205947e+00 5.885172591031e-12 8.826706690618e-12 3.131685149958e-06 9.998808082615e-04 1.000000000000e-03 +6.500001683268e-01 9.500003210142e-01 5.500001371321e-01 1.151086803309e+00 1.275735466152e+00 1.000011786521e+00 1.478739175934e-14 2.218082620422e-14 1.569884150157e-07 9.999882136176e-04 1.000000000000e-03 +7.500000070620e-01 9.500000109400e-01 5.500000046815e-01 1.210371856654e+00 1.329473593769e+00 1.000000440188e+00 6.667384175755e-15 1.000107186128e-14 1.054149043926e-07 9.999995598123e-04 1.000000000000e-03 +8.500000000701e-01 9.500000000879e-01 5.500000000375e-01 1.274754878510e+00 1.388344337809e+00 1.000000003859e+00 6.666666714716e-15 1.000000003348e-14 1.054092555154e-07 9.999999961405e-04 1.000000000000e-03 +9.500000000001e-01 9.500000000001e-01 5.500000000000e-01 1.343502884255e+00 1.451723114096e+00 1.000000000003e+00 6.666666666703e-15 1.000000000002e-14 1.054092553391e-07 9.999999999967e-04 1.000000000000e-03 +1.050000000000e+00 9.500000000000e-01 5.500000000000e-01 1.415980225851e+00 1.519045753096e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 1.000000000000e-03 1.000000000000e-03 +1.150000000000e+00 9.500000000000e-01 5.500000000000e-01 1.491643389018e+00 1.589811309558e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +5.000008783269e-02 1.050003103667e+00 5.500010549623e-01 1.051192906413e+00 1.186384291431e+00 1.000077669558e+00 1.327392243880e-12 1.990933730878e-12 1.487329348149e-06 9.999223364740e-04 1.000000000000e-03 +1.500001859320e-01 1.050002184931e+00 5.500007427352e-01 1.060662361046e+00 1.194782599952e+00 1.000055781334e+00 6.341347735406e-13 9.511491039446e-13 1.028023510294e-06 9.999442217769e-04 1.000000000000e-03 +2.500001513532e-01 1.050001060819e+00 5.500003604437e-01 1.079352724274e+00 1.211405258321e+00 1.000028144139e+00 1.186538238796e-13 1.779757268458e-13 4.446918119400e-07 9.999718566531e-04 1.000000000000e-03 +3.500000686928e-01 1.050000339723e+00 5.500001152263e-01 1.106797525071e+00 1.235921068779e+00 1.000009510564e+00 1.243743699713e-14 1.865597806684e-14 1.439752218915e-07 9.999904895269e-04 1.000000000000e-03 +4.500000176537e-01 1.050000066408e+00 5.500000224497e-01 1.142366033873e+00 1.267872304312e+00 1.000001982789e+00 6.734464171964e-15 1.010167622845e-14 1.059437808381e-07 9.999980172148e-04 1.000000000000e-03 +5.500000023404e-01 1.050000006953e+00 5.500000023404e-01 1.185326966358e+00 1.306713442095e+00 1.000000222624e+00 6.666817479565e-15 1.000022399306e-14 1.054104358794e-07 9.999997773762e-04 1.000000000000e-03 +6.500000001277e-01 1.050000000304e+00 5.500000001019e-01 1.234908903849e+00 1.351850583799e+00 1.000000010433e+00 6.666666842413e-15 1.000000015929e-14 1.054092561785e-07 9.999999895674e-04 1.000000000000e-03 +7.500000000020e-01 1.050000000004e+00 5.500000000013e-01 1.290348790061e+00 1.402676013915e+00 1.000000000144e+00 6.666666668269e-15 1.000000000096e-14 1.054092553440e-07 9.999999998558e-04 1.000000000000e-03 +8.500000000000e-01 1.050000000000e+00 5.500000000000e-01 1.350925608611e+00 1.458595214581e+00 1.000000000000e+00 6.666666666671e-15 1.000000000000e-14 1.054092553390e-07 9.999999999997e-04 1.000000000000e-03 +9.500000000000e-01 1.050000000000e+00 5.500000000000e-01 1.415980225851e+00 1.519045753096e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 1.000000000000e-03 1.000000000000e-03 +1.050000000000e+00 1.050000000000e+00 5.500000000000e-01 1.484924240492e+00 1.583508762211e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 1.000000000000e-03 1.000000000000e-03 +1.150000000000e+00 1.050000000000e+00 5.500000000000e-01 1.557241150240e+00 1.651514456491e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +5.000000001027e-02 1.150000000527e+00 5.500000001411e-01 1.151086443849e+00 1.275735082753e+00 1.000000012975e+00 6.666666887196e-15 1.000000020105e-14 1.054092563986e-07 9.999999870253e-04 1.000000000000e-03 +1.500000000201e-01 1.150000000340e+00 5.500000000910e-01 1.159741350814e+00 1.283549765645e+00 1.000000008515e+00 6.666666796467e-15 1.000000010955e-14 1.054092559163e-07 9.999999914852e-04 1.000000000000e-03 +2.500000000139e-01 1.150000000138e+00 5.500000000367e-01 1.176860229731e+00 1.299038105817e+00 1.000000003557e+00 6.666666712307e-15 1.000000003289e-14 1.054092555123e-07 9.999999964429e-04 1.000000000000e-03 +3.500000000048e-01 1.150000000033e+00 5.500000000087e-01 1.202081528050e+00 1.321930406674e+00 1.000000000882e+00 6.666666676684e-15 1.000000000621e-14 1.054092553717e-07 9.999999991181e-04 1.000000000000e-03 +4.500000000008e-01 1.150000000004e+00 5.500000000011e-01 1.234908903527e+00 1.351850583464e+00 1.000000000114e+00 6.666666667929e-15 1.000000000076e-14 1.054092553429e-07 9.999999998865e-04 1.000000000000e-03 +5.500000000001e-01 1.150000000000e+00 5.500000000001e-01 1.274754878398e+00 1.388344337692e+00 1.000000000006e+00 6.666666666728e-15 1.000000000004e-14 1.054092553391e-07 9.999999999945e-04 1.000000000000e-03 +6.500000000000e-01 1.150000000000e+00 5.500000000000e-01 1.320984481362e+00 1.430908802125e+00 9.999999999994e-01 6.666666666660e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +7.500000000000e-01 1.150000000000e+00 5.500000000000e-01 1.372953021775e+00 1.479019945775e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +8.500000000000e-01 1.150000000000e+00 5.500000000000e-01 1.430034964608e+00 1.532155344604e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +9.500000000000e-01 1.150000000000e+00 5.500000000000e-01 1.491643389018e+00 1.589811309558e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +1.050000000000e+00 1.150000000000e+00 5.500000000000e-01 1.557241150240e+00 1.651514456491e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +1.150000000000e+00 1.150000000000e+00 5.500000000000e-01 1.626345596729e+00 1.716828471339e+00 9.999999999987e-01 6.666666666652e-15 9.999999999991e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +6.030904128347e-02 6.030904128347e-02 8.368912757338e-01 8.528986411680e-02 8.412261101038e-01 1.820710160826e+00 1.023063385308e-01 8.428552281297e-02 3.060238240780e-01 5.492362384280e-04 1.000000000000e-03 +1.796790031695e-01 5.990261940083e-02 8.281765694363e-01 1.894013410488e-01 8.495582959129e-01 1.896550205542e+00 1.030828981047e-01 8.152926650993e-02 3.009785273071e-01 5.272731494678e-04 1.000000000000e-03 +2.954621784981e-01 5.909429775812e-02 8.105725329509e-01 3.013138479234e-01 8.647646304775e-01 2.035400051222e+00 1.016923323020e-01 7.494276044725e-02 2.885649559983e-01 4.913039082414e-04 1.000000000000e-03 +4.052982094955e-01 5.785964697203e-02 7.842642140560e-01 4.094073489424e-01 8.846947127777e-01 2.261178909548e+00 1.022080053113e-01 6.780180343958e-02 2.744728350039e-01 4.422471816703e-04 1.000000000000e-03 +5.066842425221e-01 5.619544087562e-02 7.505642413106e-01 5.097909857926e-01 9.073221751558e-01 2.541665347163e+00 1.017111211223e-01 6.002626657899e-02 2.582554002425e-01 3.934428272063e-04 1.000000000000e-03 +5.978687078227e-01 5.414558274826e-02 7.131454014587e-01 6.003155303045e-01 9.321776115883e-01 2.498988262258e+00 7.851157402934e-02 4.712601608524e-02 2.288279705253e-01 4.001619435765e-04 1.000000000000e-03 +6.792354349842e-01 5.203129850046e-02 6.792354349842e-01 6.812253901329e-01 9.619921040736e-01 1.921550911245e+00 3.137578507082e-02 2.449254783250e-02 1.649664876152e-01 5.204129612951e-04 1.000000000000e-03 +7.603654953038e-01 5.058575972192e-02 6.581219449257e-01 7.620463276831e-01 1.006895774114e+00 1.286615155063e+00 3.016656533450e-03 3.516968366469e-03 6.251193989479e-02 7.772331890116e-04 1.000000000000e-03 +8.515826561091e-01 5.007366899692e-02 6.510048780690e-01 8.530535695445e-01 1.073083288372e+00 1.043026431978e+00 3.405506599325e-05 4.897536382945e-05 7.376792725949e-03 9.587484739991e-04 1.000000000000e-03 +9.500623679944e-01 5.000230488719e-02 6.500320963490e-01 9.513772824559e-01 1.152241493723e+00 1.001728629626e+00 6.479764208033e-09 9.702873637226e-09 1.038314533657e-04 9.982743533782e-04 1.000000000000e-03 +1.050000230402e+00 5.000000625770e-02 6.500000963087e-01 1.051190032520e+00 1.235920956078e+00 1.000006287807e+00 7.620983203393e-15 1.143140292663e-14 1.127011925730e-07 9.999937122325e-04 1.000000000000e-03 +1.150000000013e+00 5.000000000024e-02 6.500000000044e-01 1.151086443335e+00 1.321930406654e+00 1.000000000344e+00 6.666666670497e-15 1.000000000231e-14 1.054092553511e-07 9.999999996560e-04 1.000000000000e-03 +5.990261940083e-02 1.796790031695e-01 8.281765694363e-01 1.894013410488e-01 8.495582959129e-01 1.896550205542e+00 1.030828981047e-01 8.152926650993e-02 3.009785273071e-01 5.272731494678e-04 1.000000000000e-03 +1.784856245703e-01 1.784856245703e-01 8.194585231134e-01 2.524167909559e-01 8.574535016312e-01 1.966027623784e+00 1.025671556502e-01 7.825461433707e-02 2.948721273461e-01 5.086398522088e-04 1.000000000000e-03 +2.934659447285e-01 1.760659940933e-01 8.019255810333e-01 3.422301783763e-01 8.718980057937e-01 2.110265140158e+00 1.019406316579e-01 7.246053805137e-02 2.837458527379e-01 4.738741028177e-04 1.000000000000e-03 +4.024492635562e-01 1.723589735258e-01 7.758822266634e-01 4.378047801153e-01 8.908794840740e-01 2.347471211633e+00 1.032570880948e-01 6.597977916604e-02 2.707597934333e-01 4.259903146179e-04 1.000000000000e-03 +5.029770120508e-01 1.673596231779e-01 7.428898320434e-01 5.300897264820e-01 9.126228249804e-01 2.594027218878e+00 1.004139399263e-01 5.806450633724e-02 2.540002325835e-01 3.855009664982e-04 1.000000000000e-03 +5.934796264502e-01 1.613061875930e-01 7.069616203497e-01 6.150103683413e-01 9.370338765566e-01 2.427716635464e+00 7.028719782641e-02 4.342796650956e-02 2.196663290578e-01 4.119096872312e-04 1.000000000000e-03 +6.755565572741e-01 1.553489847472e-01 6.755565572741e-01 6.931882638490e-01 9.679290424479e-01 1.798315026840e+00 2.399479580180e-02 2.001439857061e-02 1.491248491500e-01 5.560760962761e-04 1.000000000000e-03 +7.587036779035e-01 1.514844706257e-01 6.568497734941e-01 7.736787548492e-01 1.014904153427e+00 1.243543432231e+00 2.163378209825e-03 2.609532751837e-03 5.384682753305e-02 8.041536580720e-04 1.000000000000e-03 +8.512621287206e-01 1.501768340028e-01 6.508041457427e-01 8.644074810325e-01 1.082010318519e+00 1.035082093390e+00 2.125213843524e-05 3.079775783626e-05 5.849763322493e-03 9.661069458996e-04 1.000000000000e-03 +9.500462273445e-01 1.500051283654e-01 6.500238329268e-01 9.618156645779e-01 1.160870516466e+00 1.001309124772e+00 3.406033144264e-09 5.102370077331e-09 7.529475470392e-05 9.986925867947e-04 1.000000000000e-03 +1.050000157658e+00 1.500000129100e-01 6.500000659017e-01 1.060660329679e+00 1.243985699527e+00 1.000004383206e+00 7.094857988261e-15 1.064224033526e-14 1.087414892469e-07 9.999956168133e-04 1.000000000000e-03 +1.150000000008e+00 1.500000000005e-01 6.500000000028e-01 1.159741350483e+00 1.329473580039e+00 1.000000000220e+00 6.666666669117e-15 1.000000000147e-14 1.054092553467e-07 9.999999997797e-04 1.000000000000e-03 +5.909429775812e-02 2.954621784981e-01 8.105725329509e-01 3.013138479234e-01 8.647646304775e-01 2.035400051222e+00 1.016923323020e-01 7.494276044725e-02 2.885649559983e-01 4.913039082414e-04 1.000000000000e-03 +1.760659940933e-01 2.934659447285e-01 8.019255810333e-01 3.422301783763e-01 8.718980057937e-01 2.110265140158e+00 1.019406316579e-01 7.246053805137e-02 2.837458527379e-01 4.738741028177e-04 1.000000000000e-03 +2.894040141696e-01 2.894040141696e-01 7.846812399904e-01 4.092790818438e-01 8.850050933344e-01 2.273426539970e+00 1.030905689396e-01 6.801884762524e-02 2.749117992400e-01 4.398646635019e-04 1.000000000000e-03 +3.966691189697e-01 2.831805379222e-01 7.594104780770e-01 4.873782996832e-01 9.023535234126e-01 2.513388750675e+00 1.042563827721e-01 6.222060718465e-02 2.629334668370e-01 3.978692113312e-04 1.000000000000e-03 +4.955699764393e-01 2.748803732801e-01 7.281785353636e-01 5.666999392647e-01 9.227094886945e-01 2.618585074440e+00 9.269097363022e-02 5.309602571345e-02 2.428900659271e-01 3.818856258522e-04 1.000000000000e-03 +5.852662115386e-01 2.653175053018e-01 6.956321279977e-01 6.425962316948e-01 9.470131860174e-01 2.226668007700e+00 5.193225505464e-02 3.498428248511e-02 1.971583753825e-01 4.491015259310e-04 1.000000000000e-03 +6.691807936443e-01 2.567436541612e-01 6.691807936443e-01 7.167427980346e-01 9.805728800640e-01 1.595953443658e+00 1.364709631086e-02 1.282659249719e-02 1.193807750072e-01 6.265846939169e-04 1.000000000000e-03 +7.560063406187e-01 2.517267781744e-01 6.547642605665e-01 7.968136280874e-01 1.031323516081e+00 1.173522207068e+00 1.060510833040e-03 1.355548484706e-03 3.880934144000e-02 8.521355573652e-04 1.000000000000e-03 +8.507833726432e-01 2.501842151115e-01 6.505023636775e-01 8.868057784301e-01 1.099808080443e+00 1.022827357407e+00 7.707764946241e-06 1.130361574280e-05 3.543948793022e-03 9.776821012440e-04 1.000000000000e-03 +9.500248616288e-01 2.500046081855e-01 6.500128579779e-01 9.823693510217e-01 1.177950023288e+00 1.000734586391e+00 8.150297838859e-10 1.221647270370e-09 3.684271781460e-05 9.992659528305e-04 1.000000000000e-03 +1.050000072198e+00 2.500000099645e-01 6.500000301824e-01 1.079351729789e+00 1.259960394550e+00 1.000002080336e+00 6.731611647449e-15 1.009739646519e-14 1.059213359327e-07 9.999979196679e-04 1.000000000000e-03 +1.150000000003e+00 2.500000000003e-01 6.500000000011e-01 1.176860229597e+00 1.344432965978e+00 1.000000000087e+00 6.666666667636e-15 1.000000000058e-14 1.054092553420e-07 9.999999999128e-04 1.000000000000e-03 +5.785964697203e-02 4.052982094955e-01 7.842642140560e-01 4.094073489424e-01 8.846947127777e-01 2.261178909548e+00 1.022080053113e-01 6.780180343958e-02 2.744728350039e-01 4.422471816703e-04 1.000000000000e-03 +1.723589735258e-01 4.024492635562e-01 7.758822266634e-01 4.378047801153e-01 8.908794840740e-01 2.347471211633e+00 1.032570880948e-01 6.597977916604e-02 2.707597934333e-01 4.259903146179e-04 1.000000000000e-03 +2.831805379222e-01 3.966691189697e-01 7.594104780770e-01 4.873782996832e-01 9.023535234126e-01 2.513388750675e+00 1.042563827721e-01 6.222060718465e-02 2.629334668370e-01 3.978692113312e-04 1.000000000000e-03 +3.879351490131e-01 3.879351490131e-01 7.359200355764e-01 5.486231490556e-01 9.179137532701e-01 2.639440571407e+00 9.780836731089e-02 5.558471463827e-02 2.485171906378e-01 3.788681627588e-04 1.000000000000e-03 +4.848978335558e-01 3.767887581817e-01 7.081834446172e-01 6.140811650582e-01 9.373470373929e-01 2.437430841122e+00 6.916441380354e-02 4.256392384761e-02 2.174701099452e-01 4.102680507398e-04 1.000000000000e-03 +5.746436254033e-01 3.650877125594e-01 6.813943151702e-01 6.808115261058e-01 9.632250758907e-01 1.886083140547e+00 2.831237350637e-02 2.251680180294e-02 1.581729075093e-01 5.301993207522e-04 1.000000000000e-03 +6.619122650945e-01 3.559363263373e-01 6.619122650945e-01 7.515440872557e-01 1.001472097350e+00 1.377154451790e+00 5.524669805928e-03 6.017483876353e-03 8.176853426562e-02 7.261349652541e-04 1.000000000000e-03 +7.532651282783e-01 3.513352207425e-01 6.526154910073e-01 8.311707350564e-01 1.056764765649e+00 1.100480150893e+00 3.206285831789e-04 4.370300312805e-04 2.203608231163e-02 9.086942633071e-04 1.000000000000e-03 +8.503618697066e-01 3.501204436372e-01 6.502340487588e-01 9.196192878053e-01 1.126278807698e+00 1.011357314405e+00 1.367939495348e-06 2.028866765283e-06 1.501431452271e-03 9.887702256726e-04 1.000000000000e-03 +9.500092980881e-01 3.500024285734e-01 6.500048274600e-01 1.012432400934e+00 1.203131598032e+00 1.000291965268e+00 7.024492389352e-11 1.053366312025e-10 1.081853508272e-05 9.997081199507e-04 1.000000000000e-03 +1.050000021058e+00 3.500000041513e-01 6.500000088075e-01 1.106797202349e+00 1.283549788118e+00 1.000000637962e+00 6.669260533274e-15 1.000388441781e-14 1.054297260307e-07 9.999993620385e-04 1.000000000000e-03 +1.150000000001e+00 3.500000000001e-01 6.500000000002e-01 1.202081528018e+00 1.366565036872e+00 1.000000000019e+00 6.666666666882e-15 1.000000000013e-14 1.054092553396e-07 9.999999999806e-04 1.000000000000e-03 +5.619544087562e-02 5.066842425221e-01 7.505642413106e-01 5.097909857926e-01 9.073221751558e-01 2.541665347163e+00 1.017111211223e-01 6.002626657899e-02 2.582554002425e-01 3.934428272063e-04 1.000000000000e-03 +1.673596231779e-01 5.029770120508e-01 7.428898320434e-01 5.300897264820e-01 9.126228249804e-01 2.594027218878e+00 1.004139399263e-01 5.806450633724e-02 2.540002325835e-01 3.855009664982e-04 1.000000000000e-03 +2.748803732801e-01 4.955699764393e-01 7.281785353636e-01 5.666999392647e-01 9.227094886945e-01 2.618585074440e+00 9.269097363022e-02 5.309602571345e-02 2.428900659271e-01 3.818856258522e-04 1.000000000000e-03 +3.767887581817e-01 4.848978335558e-01 7.081834446172e-01 6.140811650582e-01 9.373470373929e-01 2.437430841122e+00 6.916441380354e-02 4.256392384761e-02 2.174701099452e-01 4.102680507398e-04 1.000000000000e-03 +4.724942683714e-01 4.724942683714e-01 6.863512522420e-01 6.682078024743e-01 9.579038097543e-01 1.995773154480e+00 3.486119147268e-02 2.620126796055e-02 1.706239137875e-01 5.010589493877e-04 1.000000000000e-03 +5.639926522211e-01 4.611802732283e-01 6.675446150080e-01 7.285430365973e-01 9.881248753071e-01 1.518131279506e+00 1.031917760585e-02 1.019593405243e-02 1.064369090767e-01 6.587045623125e-04 1.000000000000e-03 +6.557665420337e-01 4.537622269171e-01 6.557665420337e-01 7.974521403994e-01 1.032453230843e+00 1.195233496423e+00 1.448503246541e-03 1.817849714147e-03 4.494255239434e-02 8.366566055857e-04 1.000000000000e-03 +7.513099355507e-01 4.507026836855e-01 6.510600969875e-01 8.761275753785e-01 1.091548797914e+00 1.044653878484e+00 4.783980965934e-05 6.869233529590e-05 8.736407556624e-03 9.572548578969e-04 1.000000000000e-03 +8.501166018218e-01 4.500506285498e-01 6.500760939801e-01 9.618959428915e-01 1.160966292756e+00 1.004035988442e+00 9.026504765337e-08 1.348533050993e-07 3.870878526458e-04 9.959802352820e-04 1.000000000000e-03 +9.500022608300e-01 4.500007697174e-01 6.500011789347e-01 1.051192174785e+00 1.235923347520e+00 1.000076462582e+00 1.666658435362e-12 2.499796512146e-12 1.666598836002e-06 9.999235432636e-04 1.000000000000e-03 +1.050000003579e+00 4.500000009369e-01 6.500000014986e-01 1.142365969538e+00 1.314343946730e+00 1.000000115124e+00 6.666692405012e-15 1.000003745627e-14 1.054094527506e-07 9.999998848757e-04 1.000000000000e-03 +1.150000000000e+00 4.500000000000e-01 6.500000000000e-01 1.234908903523e+00 1.395528573695e+00 1.000000000002e+00 6.666666666685e-15 1.000000000001e-14 1.054092553390e-07 9.999999999984e-04 1.000000000000e-03 +5.414558274826e-02 5.978687078227e-01 7.131454014587e-01 6.003155303045e-01 9.321776115883e-01 2.498988262258e+00 7.851157402934e-02 4.712601608524e-02 2.288279705253e-01 4.001619435765e-04 1.000000000000e-03 +1.613061875930e-01 5.934796264502e-01 7.069616203497e-01 6.150103683413e-01 9.370338765566e-01 2.427716635464e+00 7.028719782641e-02 4.342796650956e-02 2.196663290578e-01 4.119096872312e-04 1.000000000000e-03 +2.653175053018e-01 5.852662115386e-01 6.956321279977e-01 6.425962316948e-01 9.470131860174e-01 2.226668007700e+00 5.193225505464e-02 3.498428248511e-02 1.971583753825e-01 4.491015259310e-04 1.000000000000e-03 +3.650877125594e-01 5.746436254033e-01 6.813943151702e-01 6.808115261058e-01 9.632250758907e-01 1.886083140547e+00 2.831237350637e-02 2.251680180294e-02 1.581729075093e-01 5.301993207522e-04 1.000000000000e-03 +4.611802732283e-01 5.639926522211e-01 6.675446150080e-01 7.285430365973e-01 9.881248753071e-01 1.518131279506e+00 1.031917760585e-02 1.019593405243e-02 1.064369090767e-01 6.587045623125e-04 1.000000000000e-03 +5.559063417884e-01 5.559063417884e-01 6.573040549592e-01 7.861702879664e-01 1.024749892582e+00 1.237242833013e+00 2.201802472817e-03 2.669406216065e-03 5.446105862668e-02 8.082487716377e-04 1.000000000000e-03 +6.519865905825e-01 5.516239245874e-01 6.519865905825e-01 8.540348168996e-01 1.074458925588e+00 1.076520577509e+00 1.802466019688e-04 2.511516348148e-04 1.670501038660e-02 9.289186113972e-04 1.000000000000e-03 +7.503531864919e-01 5.502374939375e-01 6.502884605645e-01 9.304790186851e-01 1.135194382543e+00 1.013784462369e+00 2.346631511811e-06 3.472086423075e-06 1.964147093121e-03 9.864029654420e-04 1.000000000000e-03 +8.500237972816e-01 5.500128887698e-01 6.500156515596e-01 1.012449817896e+00 1.203152102201e+00 1.000919982307e+00 1.530972459259e-09 2.294347929388e-09 5.049035033645e-05 9.990808632826e-04 1.000000000000e-03 +9.500003210142e-01 5.500001371321e-01 6.500001683268e-01 1.097725266527e+00 1.275735466152e+00 1.000011786521e+00 1.478739175934e-14 2.218082620422e-14 1.569884150157e-07 9.999882136176e-04 1.000000000000e-03 +1.050000000304e+00 5.500000001019e-01 6.500000001277e-01 1.185326959430e+00 1.351850583799e+00 1.000000010433e+00 6.666666842413e-15 1.000000015929e-14 1.054092561785e-07 9.999999895674e-04 1.000000000000e-03 +1.150000000000e+00 5.500000000000e-01 6.500000000000e-01 1.274754878398e+00 1.430908802125e+00 9.999999999994e-01 6.666666666660e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +5.203129850046e-02 6.792354349842e-01 6.792354349842e-01 6.812253901329e-01 9.619921040736e-01 1.921550911245e+00 3.137578507082e-02 2.449254783250e-02 1.649664876152e-01 5.204129612951e-04 1.000000000000e-03 +1.553489847472e-01 6.755565572741e-01 6.755565572741e-01 6.931882638490e-01 9.679290424479e-01 1.798315026840e+00 2.399479580180e-02 2.001439857061e-02 1.491248491500e-01 5.560760962761e-04 1.000000000000e-03 +2.567436541612e-01 6.691807936443e-01 6.691807936443e-01 7.167427980346e-01 9.805728800640e-01 1.595953443658e+00 1.364709631086e-02 1.282659249719e-02 1.193807750072e-01 6.265846939169e-04 1.000000000000e-03 +3.559363263373e-01 6.619122650945e-01 6.619122650945e-01 7.515440872557e-01 1.001472097350e+00 1.377154451790e+00 5.524669805928e-03 6.017483876353e-03 8.176853426562e-02 7.261349652541e-04 1.000000000000e-03 +4.537622269171e-01 6.557665420337e-01 6.557665420337e-01 7.974521403994e-01 1.032453230843e+00 1.195233496423e+00 1.448503246541e-03 1.817849714147e-03 4.494255239434e-02 8.366566055857e-04 1.000000000000e-03 +5.516239245874e-01 6.519865905825e-01 6.519865905825e-01 8.540348168996e-01 1.074458925588e+00 1.076520577509e+00 1.802466019688e-04 2.511516348148e-04 1.670501038660e-02 9.289186113971e-04 1.000000000000e-03 +6.504254883420e-01 6.504254883420e-01 6.504254883420e-01 9.198405469264e-01 1.126569992346e+00 1.019508200177e+00 5.794276193123e-06 8.525104837978e-06 3.077716476361e-03 9.808650875262e-04 1.000000000000e-03 +7.500560529523e-01 6.500460544786e-01 6.500460544786e-01 9.925441831543e-01 1.186466952113e+00 1.002537742528e+00 2.352797756221e-08 3.520263112921e-08 1.977726841301e-04 9.974686813070e-04 1.000000000000e-03 +8.500026426486e-01 6.500017492884e-01 6.500017492884e-01 1.070049889766e+00 1.252002013044e+00 1.000114317000e+00 4.372517801198e-12 6.558027007825e-12 2.699388203901e-06 9.998856960671e-04 1.000000000000e-03 +9.500000219549e-01 6.500000116056e-01 6.500000116056e-01 1.151086467995e+00 1.321930433831e+00 1.000000876948e+00 6.671604131745e-15 1.000739742165e-14 1.054482359667e-07 9.999991230527e-04 1.000000000000e-03 +1.050000000010e+00 6.500000000041e-01 6.500000000041e-01 1.234908903533e+00 1.395528573707e+00 1.000000000359e+00 6.666666670661e-15 1.000000000241e-14 1.054092553516e-07 9.999999996414e-04 1.000000000000e-03 +1.150000000000e+00 6.500000000000e-01 6.500000000000e-01 1.320984481362e+00 1.472243186434e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +5.058575972192e-02 7.603654953038e-01 6.581219449257e-01 7.620463276831e-01 1.006895774114e+00 1.286615155063e+00 3.016656533450e-03 3.516968366469e-03 6.251193989479e-02 7.772331890116e-04 1.000000000000e-03 +1.514844706257e-01 7.587036779035e-01 6.568497734941e-01 7.736787548492e-01 1.014904153427e+00 1.243543432231e+00 2.163378209825e-03 2.609532751837e-03 5.384682753305e-02 8.041536580720e-04 1.000000000000e-03 +2.517267781744e-01 7.560063406187e-01 6.547642605665e-01 7.968136280874e-01 1.031323516081e+00 1.173522207068e+00 1.060510833040e-03 1.355548484706e-03 3.880934144000e-02 8.521355573652e-04 1.000000000000e-03 +3.513352207425e-01 7.532651282783e-01 6.526154910073e-01 8.311707350564e-01 1.056764765649e+00 1.100480150893e+00 3.206285831789e-04 4.370300312805e-04 2.203608231163e-02 9.086942633071e-04 1.000000000000e-03 +4.507026836855e-01 7.513099355507e-01 6.510600969875e-01 8.761275753785e-01 1.091548797914e+00 1.044653878484e+00 4.783980965934e-05 6.869233529590e-05 8.736407556624e-03 9.572548578969e-04 1.000000000000e-03 +5.502374939375e-01 7.503531864919e-01 6.502884605645e-01 9.304790186851e-01 1.135194382543e+00 1.013784462369e+00 2.346631511811e-06 3.472086423075e-06 1.964147093121e-03 9.864029654420e-04 1.000000000000e-03 +6.500460544786e-01 7.500560529523e-01 6.500460544786e-01 9.925441831543e-01 1.186466952113e+00 1.002537742528e+00 2.352797756221e-08 3.520263112920e-08 1.977726841301e-04 9.974686813070e-04 1.000000000000e-03 +7.500042095013e-01 7.500042095013e-01 6.500034616220e-01 1.060666124914e+00 1.243992415033e+00 1.000219991973e+00 2.642151929817e-11 3.962356208166e-11 6.635222685844e-06 9.997800564129e-04 1.000000000000e-03 +8.500001192480e-01 7.500000969109e-01 6.500000795961e-01 1.133578558411e+00 1.306713607323e+00 1.000005733503e+00 7.547277597628e-15 1.132085148830e-14 1.121549101729e-07 9.999942665294e-04 1.000000000000e-03 +9.500000005015e-01 7.500000003266e-01 6.500000002674e-01 1.210371844287e+00 1.373863167055e+00 1.000000021658e+00 6.666667169184e-15 1.000000053720e-14 1.054092581702e-07 9.999999783420e-04 1.000000000000e-03 +1.050000000000e+00 7.500000000000e-01 6.500000000000e-01 1.290348790056e+00 1.444818327680e+00 1.000000000003e+00 6.666666666704e-15 1.000000000002e-14 1.054092553391e-07 9.999999999967e-04 1.000000000000e-03 +1.150000000000e+00 7.500000000000e-01 6.500000000000e-01 1.372953021775e+00 1.519045753096e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +5.007366899692e-02 8.515826561091e-01 6.510048780690e-01 8.530535695445e-01 1.073083288372e+00 1.043026431978e+00 3.405506599325e-05 4.897536382945e-05 7.376792725949e-03 9.587484739991e-04 1.000000000000e-03 +1.501768340028e-01 8.512621287206e-01 6.508041457427e-01 8.644074810325e-01 1.082010318519e+00 1.035082093390e+00 2.125213843524e-05 3.079775783626e-05 5.849763322493e-03 9.661069458996e-04 1.000000000000e-03 +2.501842151115e-01 8.507833726432e-01 6.505023636775e-01 8.868057784301e-01 1.099808080443e+00 1.022827357407e+00 7.707764946241e-06 1.130361574280e-05 3.543948793022e-03 9.776821012440e-04 1.000000000000e-03 +3.501204436372e-01 8.503618697066e-01 6.502340487588e-01 9.196192878053e-01 1.126278807698e+00 1.011357314405e+00 1.367939495348e-06 2.028866765283e-06 1.501431452271e-03 9.887702256726e-04 1.000000000000e-03 +4.500506285498e-01 8.501166018218e-01 6.500760939801e-01 9.618959428915e-01 1.160966292756e+00 1.004035988442e+00 9.026504765337e-08 1.348533050993e-07 3.870878526458e-04 9.959802352820e-04 1.000000000000e-03 +5.500128887698e-01 8.500237972816e-01 6.500156515596e-01 1.012449817896e+00 1.203152102201e+00 1.000919982307e+00 1.530972459259e-09 2.294347929388e-09 5.049035033645e-05 9.990808632826e-04 1.000000000000e-03 +6.500017492884e-01 8.500026426486e-01 6.500017492884e-01 1.070049889766e+00 1.252002013044e+00 1.000114317000e+00 4.372517801198e-12 6.558027007825e-12 2.699388203901e-06 9.998856960671e-04 1.000000000000e-03 +7.500000969109e-01 8.500001192480e-01 6.500000795961e-01 1.133578558411e+00 1.306713607323e+00 1.000005733503e+00 7.547277597628e-15 1.132085148830e-14 1.121549101729e-07 9.999942665294e-04 1.000000000000e-03 +8.500000013765e-01 8.500000013765e-01 6.500000009237e-01 1.202081529964e+00 1.366565039023e+00 1.000000072682e+00 6.666672445836e-15 1.000000794193e-14 1.054092971966e-07 9.999999273180e-04 1.000000000000e-03 +9.500000000023e-01 8.500000000019e-01 6.500000000012e-01 1.274754878401e+00 1.430908802129e+00 1.000000000108e+00 6.666666667867e-15 1.000000000072e-14 1.054092553427e-07 9.999999998920e-04 1.000000000000e-03 +1.050000000000e+00 8.500000000000e-01 6.500000000000e-01 1.350925608611e+00 1.499166435056e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 1.000000000000e-03 1.000000000000e-03 +1.150000000000e+00 8.500000000000e-01 6.500000000000e-01 1.430034964608e+00 1.570827807241e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +5.000230488719e-02 9.500623679944e-01 6.500320963490e-01 9.513772824559e-01 1.152241493723e+00 1.001728629626e+00 6.479764208033e-09 9.702873637226e-09 1.038314533657e-04 9.982743533782e-04 1.000000000000e-03 +1.500051283654e-01 9.500462273445e-01 6.500238329268e-01 9.618156645779e-01 1.160870516466e+00 1.001309124772e+00 3.406033144264e-09 5.102370077331e-09 7.529475470392e-05 9.986925867947e-04 1.000000000000e-03 +2.500046081855e-01 9.500248616288e-01 6.500128579779e-01 9.823693510217e-01 1.177950023288e+00 1.000734586391e+00 8.150297838859e-10 1.221647270370e-09 3.684271781460e-05 9.992659528305e-04 1.000000000000e-03 +3.500024285734e-01 9.500092980881e-01 6.500048274600e-01 1.012432400934e+00 1.203131598032e+00 1.000291965268e+00 7.024492389352e-11 1.053366312025e-10 1.081853508272e-05 9.997081199507e-04 1.000000000000e-03 +4.500007697174e-01 9.500022608300e-01 6.500011789347e-01 1.051192174785e+00 1.235923347520e+00 1.000076462582e+00 1.666658435362e-12 2.499796512146e-12 1.666598836002e-06 9.999235432636e-04 1.000000000000e-03 +5.500001371321e-01 9.500003210142e-01 6.500001683268e-01 1.097725266527e+00 1.275735466152e+00 1.000011786521e+00 1.478739175934e-14 2.218082620422e-14 1.569884150157e-07 9.999882136176e-04 1.000000000000e-03 +6.500000116056e-01 9.500000219549e-01 6.500000116056e-01 1.151086467995e+00 1.321930433831e+00 1.000000876948e+00 6.671604131745e-15 1.000739742165e-14 1.054482359667e-07 9.999991230527e-04 1.000000000000e-03 +7.500000003266e-01 9.500000005015e-01 6.500000002674e-01 1.210371844287e+00 1.373863167055e+00 1.000000021658e+00 6.666667169184e-15 1.000000053720e-14 1.054092581702e-07 9.999999783420e-04 1.000000000000e-03 +8.500000000019e-01 9.500000000023e-01 6.500000000012e-01 1.274754878401e+00 1.430908802129e+00 1.000000000108e+00 6.666666667867e-15 1.000000000072e-14 1.054092553427e-07 9.999999998920e-04 1.000000000000e-03 +9.500000000000e-01 9.500000000000e-01 6.500000000000e-01 1.343502884254e+00 1.492481155660e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 1.000000000000e-03 1.000000000000e-03 +1.050000000000e+00 9.500000000000e-01 6.500000000000e-01 1.415980225851e+00 1.558043645088e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 1.000000000000e-03 1.000000000000e-03 +1.150000000000e+00 9.500000000000e-01 6.500000000000e-01 1.491643389018e+00 1.627114009527e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +5.000000625770e-02 1.050000230402e+00 6.500000963087e-01 1.051190032520e+00 1.235920956078e+00 1.000006287807e+00 7.620983203393e-15 1.143140292663e-14 1.127011925730e-07 9.999937122325e-04 1.000000000000e-03 +1.500000129100e-01 1.050000157658e+00 6.500000659017e-01 1.060660329679e+00 1.243985699527e+00 1.000004383206e+00 7.094857988261e-15 1.064224033526e-14 1.087414892469e-07 9.999956168133e-04 1.000000000000e-03 +2.500000099645e-01 1.050000072198e+00 6.500000301824e-01 1.079351729789e+00 1.259960394550e+00 1.000002080336e+00 6.731611647449e-15 1.009739646519e-14 1.059213359327e-07 9.999979196679e-04 1.000000000000e-03 +3.500000041513e-01 1.050000021058e+00 6.500000088075e-01 1.106797202349e+00 1.283549788118e+00 1.000000637962e+00 6.669260533274e-15 1.000388441781e-14 1.054297260307e-07 9.999993620385e-04 1.000000000000e-03 +4.500000009369e-01 1.050000003579e+00 6.500000014986e-01 1.142365969538e+00 1.314343946730e+00 1.000000115124e+00 6.666692405012e-15 1.000003745627e-14 1.054094527506e-07 9.999998848757e-04 1.000000000000e-03 +5.500000001019e-01 1.050000000304e+00 6.500000001277e-01 1.185326959430e+00 1.351850583799e+00 1.000000010433e+00 6.666666842413e-15 1.000000015929e-14 1.054092561785e-07 9.999999895674e-04 1.000000000000e-03 +6.500000000041e-01 1.050000000010e+00 6.500000000041e-01 1.234908903533e+00 1.395528573707e+00 1.000000000359e+00 6.666666670661e-15 1.000000000241e-14 1.054092553516e-07 9.999999996414e-04 1.000000000000e-03 +7.500000000000e-01 1.050000000000e+00 6.500000000000e-01 1.290348790056e+00 1.444818327680e+00 1.000000000003e+00 6.666666666704e-15 1.000000000002e-14 1.054092553391e-07 9.999999999966e-04 1.000000000000e-03 +8.500000000000e-01 1.050000000000e+00 6.500000000000e-01 1.350925608611e+00 1.499166435056e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 1.000000000000e-03 1.000000000000e-03 +9.500000000000e-01 1.050000000000e+00 6.500000000000e-01 1.415980225851e+00 1.558043645088e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 1.000000000000e-03 1.000000000000e-03 +1.050000000000e+00 1.050000000000e+00 6.500000000000e-01 1.484924240492e+00 1.620956507745e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 1.000000000000e-03 1.000000000000e-03 +1.150000000000e+00 1.050000000000e+00 6.500000000000e-01 1.557241150240e+00 1.687453703069e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +5.000000000024e-02 1.150000000013e+00 6.500000000044e-01 1.151086443335e+00 1.321930406654e+00 1.000000000344e+00 6.666666670497e-15 1.000000000231e-14 1.054092553511e-07 9.999999996560e-04 1.000000000000e-03 +1.500000000005e-01 1.150000000008e+00 6.500000000028e-01 1.159741350483e+00 1.329473580039e+00 1.000000000220e+00 6.666666669117e-15 1.000000000147e-14 1.054092553467e-07 9.999999997797e-04 1.000000000000e-03 +2.500000000003e-01 1.150000000003e+00 6.500000000011e-01 1.176860229597e+00 1.344432965978e+00 1.000000000087e+00 6.666666667636e-15 1.000000000058e-14 1.054092553420e-07 9.999999999128e-04 1.000000000000e-03 +3.500000000001e-01 1.150000000001e+00 6.500000000002e-01 1.202081528018e+00 1.366565036872e+00 1.000000000019e+00 6.666666666882e-15 1.000000000013e-14 1.054092553396e-07 9.999999999806e-04 1.000000000000e-03 +4.500000000000e-01 1.150000000000e+00 6.500000000000e-01 1.234908903523e+00 1.395528573695e+00 1.000000000002e+00 6.666666666685e-15 1.000000000001e-14 1.054092553390e-07 9.999999999984e-04 1.000000000000e-03 +5.500000000000e-01 1.150000000000e+00 6.500000000000e-01 1.274754878398e+00 1.430908802125e+00 9.999999999994e-01 6.666666666660e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +6.500000000000e-01 1.150000000000e+00 6.500000000000e-01 1.320984481362e+00 1.472243186434e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +7.500000000000e-01 1.150000000000e+00 6.500000000000e-01 1.372953021775e+00 1.519045753096e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +8.500000000000e-01 1.150000000000e+00 6.500000000000e-01 1.430034964608e+00 1.570827807241e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +9.500000000000e-01 1.150000000000e+00 6.500000000000e-01 1.491643389018e+00 1.627114009527e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +1.050000000000e+00 1.150000000000e+00 6.500000000000e-01 1.557241150240e+00 1.687453703069e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +1.150000000000e+00 1.150000000000e+00 6.500000000000e-01 1.626345596729e+00 1.751427988814e+00 9.999999999987e-01 6.666666666652e-15 9.999999999991e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +5.572124365623e-02 5.572124365623e-02 8.720444048488e-01 7.880173849094e-02 8.755976005091e-01 2.521879781072e+00 1.192745692405e-01 7.094384720616e-02 2.807605686270e-01 3.965296075989e-04 1.000000000000e-03 +1.661359837768e-01 5.537185756696e-02 8.640637006176e-01 1.751205519518e-01 8.816310375894e-01 2.643202165254e+00 1.212656952248e-01 6.881749161237e-02 2.765210291629e-01 3.783289879017e-04 1.000000000000e-03 +2.735900348858e-01 5.469883311741e-02 8.484842053663e-01 2.790044256517e-01 8.931791065006e-01 2.833362887582e+00 1.208805281613e-01 6.399490620727e-02 2.666560543873e-01 3.529374950109e-04 1.000000000000e-03 +3.764470266887e-01 5.374510938188e-02 8.265940334940e-01 3.802642511271e-01 9.098673512623e-01 2.830032831454e+00 1.032820716221e-01 5.474251242289e-02 2.466272770867e-01 3.533527911357e-04 1.000000000000e-03 +4.738636551491e-01 5.260485693140e-02 8.012985423787e-01 4.767746161910e-01 9.324126707967e-01 2.359527747150e+00 5.886195745259e-02 3.741974905170e-02 2.039056128368e-01 4.238136216910e-04 1.000000000000e-03 +5.666863499454e-01 5.146465263007e-02 7.774272859485e-01 5.690184792120e-01 9.634185044009e-01 1.722111448131e+00 1.899309104251e-02 1.654343369861e-02 1.355787335774e-01 5.806825110450e-04 1.000000000000e-03 +6.581219449257e-01 5.058575972192e-02 7.603654953038e-01 6.600631890050e-01 1.006895774114e+00 1.286615155063e+00 3.016656533450e-03 3.516968366469e-03 6.251193989479e-02 7.772331890116e-04 1.000000000000e-03 +7.522487415528e-01 5.013384912718e-02 7.522487415528e-01 7.539174835458e-01 1.065021005034e+00 1.075229085029e+00 1.366589611036e-04 1.906462952961e-04 1.455435388451e-02 9.300343656280e-04 1.000000000000e-03 +8.502256294246e-01 5.001073480624e-02 7.501776842646e-01 8.516951887420e-01 1.134967511647e+00 1.007286554319e+00 2.965236342986e-07 4.415679426485e-07 7.004506031029e-04 9.927661554824e-04 1.000000000000e-03 +9.500044120371e-01 5.000015884922e-02 7.500027840591e-01 9.513192938099e-01 1.211409334152e+00 1.000137628269e+00 5.033061008974e-12 7.548552619234e-12 2.896080228177e-06 9.998623906704e-04 1.000000000000e-03 +1.050000005959e+00 5.000000015251e-02 7.500000030387e-01 1.051189808041e+00 1.291317163631e+00 1.000000176134e+00 6.666704962727e-15 1.000005568274e-14 1.054095488123e-07 9.999998238656e-04 1.000000000000e-03 +1.150000000000e+00 5.000000000000e-02 7.500000000000e-01 1.151086443322e+00 1.373863166404e+00 1.000000000001e+00 6.666666666683e-15 1.000000000001e-14 1.054092553390e-07 9.999999999985e-04 1.000000000000e-03 +5.537185756696e-02 1.661359837768e-01 8.640637006176e-01 1.751205519518e-01 8.816310375894e-01 2.643202165254e+00 1.212656952248e-01 6.881749161237e-02 2.765210291629e-01 3.783289879017e-04 1.000000000000e-03 +1.651247184952e-01 1.651247184952e-01 8.562494491949e-01 2.335216163789e-01 8.875220924364e-01 2.751691967765e+00 1.222733514821e-01 6.665354602611e-02 2.721387432626e-01 3.634127699301e-04 1.000000000000e-03 +2.719818345032e-01 1.631553299519e-01 8.410707048394e-01 3.171652250664e-01 8.988847036915e-01 2.876422437143e+00 1.177464610312e-01 6.140255661549e-02 2.611992781500e-01 3.476540813641e-04 1.000000000000e-03 +3.743646667743e-01 1.603656317989e-01 8.199513189420e-01 4.072665461234e-01 9.155250979771e-01 2.743038545152e+00 9.289489105328e-02 5.079853392005e-02 2.375769674584e-01 3.645592227522e-04 1.000000000000e-03 +4.715807377877e-01 1.570757906732e-01 7.959636594993e-01 4.970525085622e-01 9.384132051029e-01 2.214123172832e+00 4.834378711867e-02 3.275142122525e-02 1.907628580937e-01 4.516460566740e-04 1.000000000000e-03 +5.646663764575e-01 1.538674114688e-01 7.739165384455e-01 5.852548991796e-01 9.702938243095e-01 1.625960386649e+00 1.462963411623e-02 1.349630123498e-02 1.224577080509e-01 6.150211334859e-04 1.000000000000e-03 +6.568497734941e-01 1.514844706257e-01 7.587036779035e-01 6.740913660477e-01 1.014904153427e+00 1.243543432231e+00 2.163378209825e-03 2.609532751837e-03 5.384682753305e-02 8.041536580720e-04 1.000000000000e-03 +7.517961678835e-01 1.503212846008e-01 7.517961678835e-01 7.666772245530e-01 1.073774391896e+00 1.061127838059e+00 8.524754381782e-05 1.205050995181e-04 1.157128147701e-02 9.423935214340e-04 1.000000000000e-03 +8.501708533052e-01 1.500244024175e-01 7.501348411096e-01 8.633063194084e-01 1.143678311842e+00 1.005647990613e+00 1.639219484307e-07 2.445019777707e-07 5.212186337706e-04 9.943837300271e-04 1.000000000000e-03 +9.500031309798e-01 1.500003386935e-01 7.500019785165e-01 9.617723485729e-01 1.219634788885e+00 1.000099669851e+00 2.414491229775e-12 3.621375902666e-12 2.005928962591e-06 9.999003400821e-04 1.000000000000e-03 +1.050000003933e+00 1.500000003049e-01 7.500000020070e-01 1.060660175717e+00 1.299038110050e+00 1.000000118309e+00 6.666684007659e-15 1.000002482839e-14 1.054093861960e-07 9.999998816906e-04 1.000000000000e-03 +1.150000000000e+00 1.500000000000e-01 7.500000000000e-01 1.159741350474e+00 1.381122731693e+00 1.000000000001e+00 6.666666666674e-15 1.000000000000e-14 1.054092553390e-07 9.999999999993e-04 1.000000000000e-03 +5.469883311741e-02 2.735900348858e-01 8.484842053663e-01 2.790044256517e-01 8.931791065006e-01 2.833362887582e+00 1.208805281613e-01 6.399490620727e-02 2.666560543873e-01 3.529374950109e-04 1.000000000000e-03 +1.631553299519e-01 2.719818345032e-01 8.410707048394e-01 3.171652250664e-01 8.988847036915e-01 2.876422437143e+00 1.177464610312e-01 6.140255661549e-02 2.611992781500e-01 3.476540813641e-04 1.000000000000e-03 +2.688552726687e-01 2.688552726687e-01 8.268429154658e-01 3.802187729236e-01 9.100744596677e-01 2.828302968192e+00 1.031616247318e-01 5.471211494596e-02 2.465587938583e-01 3.535689108438e-04 1.000000000000e-03 +3.703826104961e-01 2.644888606480e-01 8.074777231548e-01 4.551237585150e-01 9.269077132898e-01 2.494796309775e+00 6.943321923801e-02 4.174682656413e-02 2.153726139718e-01 4.008343270678e-04 1.000000000000e-03 +4.673503370641e-01 2.595015168464e-01 7.862900372849e-01 5.345627884538e-01 9.507940878723e-01 1.947192188906e+00 3.106782911369e-02 2.393279098799e-02 1.630705061826e-01 5.135599894542e-04 1.000000000000e-03 +5.611053846716e-01 2.548924372583e-01 7.678461741125e-01 6.162867897975e-01 9.845796841181e-01 1.467039074858e+00 8.339275385155e-03 8.526639332319e-03 9.733469937580e-02 6.816451021230e-04 1.000000000000e-03 +6.547642605665e-01 2.517267781744e-01 7.560063406187e-01 7.014859996930e-01 1.031323516081e+00 1.173522207068e+00 1.060510833040e-03 1.355548484706e-03 3.880934144000e-02 8.521355573652e-04 1.000000000000e-03 +7.511195431039e-01 2.503348907093e-01 7.511195431039e-01 7.917374094604e-01 1.091342610536e+00 1.039656753087e+00 3.109680020569e-05 4.486596193412e-05 7.060528933139e-03 9.618559173795e-04 1.000000000000e-03 +8.500957063172e-01 2.500228304315e-01 7.500758320950e-01 8.861005166661e-01 1.160942668494e+00 1.003315024685e+00 4.467460836382e-08 6.679050038820e-08 2.724181842279e-04 9.966959283937e-04 1.000000000000e-03 +9.500015431804e-01 2.500002795723e-01 7.500009779593e-01 9.823456987392e-01 1.235922545620e+00 1.000051094872e+00 4.533505821729e-13 6.799911291996e-13 8.692213176808e-07 9.999489077384e-04 1.000000000000e-03 +1.050000001670e+00 2.500000002202e-01 7.500000008535e-01 1.079351658922e+00 1.314343944673e+00 1.000000051969e+00 6.666669630824e-15 1.000000392655e-14 1.054092760337e-07 9.999999480309e-04 1.000000000000e-03 +1.150000000000e+00 2.500000000000e-01 7.500000000000e-01 1.176860229594e+00 1.395528573695e+00 9.999999999998e-01 6.666666666665e-15 9.999999999999e-15 1.054092553389e-07 1.000000000000e-03 1.000000000000e-03 +5.374510938188e-02 3.764470266887e-01 8.265940334940e-01 3.802642511271e-01 9.098673512623e-01 2.830032831454e+00 1.032820716221e-01 5.474251242289e-02 2.466272770867e-01 3.533527911357e-04 1.000000000000e-03 +1.603656317989e-01 3.743646667743e-01 8.199513189420e-01 4.072665461234e-01 9.155250979771e-01 2.743038545152e+00 9.289489105328e-02 5.079853392005e-02 2.375769674584e-01 3.645592227522e-04 1.000000000000e-03 +2.644888606480e-01 3.703826104961e-01 8.074777231548e-01 4.551237585150e-01 9.269077132898e-01 2.494796309775e+00 6.943321923801e-02 4.174682656413e-02 2.153726139718e-01 4.008343270678e-04 1.000000000000e-03 +3.650087725106e-01 3.650087725106e-01 7.911731149717e-01 5.162003564696e-01 9.446786257100e-01 2.074796912838e+00 3.871990501361e-02 2.799303255226e-02 1.763614739747e-01 4.819748833307e-04 1.000000000000e-03 +4.619602068557e-01 3.592129948413e-01 7.743863065653e-01 5.851847643104e-01 9.706262721444e-01 1.628383115549e+00 1.469812937341e-02 1.353931630069e-02 1.226526998421e-01 6.141060973008e-04 1.000000000000e-03 +5.569512082585e-01 3.543090714024e-01 7.609577794088e-01 6.600981491101e-01 1.007366025088e+00 1.293835439116e+00 3.327226500468e-03 3.857399171344e-03 6.546754218139e-02 7.728958179436e-04 1.000000000000e-03 +6.526154910073e-01 3.513352207425e-01 7.532651282783e-01 7.411770479696e-01 1.056764765649e+00 1.100480150893e+00 3.206285831789e-04 4.370300312805e-04 2.203608231163e-02 9.086942633071e-04 1.000000000000e-03 +7.505214636265e-01 3.502196464478e-01 7.505214636265e-01 8.282126949777e-01 1.117684542027e+00 1.019774532972e+00 5.668767311933e-06 8.338265658701e-06 3.043803479330e-03 9.806089166450e-04 1.000000000000e-03 +8.500379124613e-01 3.500127232443e-01 7.500301946228e-01 9.192787167418e-01 1.186431056531e+00 1.001405109424e+00 4.784267475180e-09 7.166331732519e-09 8.923335034565e-05 9.985968621385e-04 1.000000000000e-03 +9.500005045904e-01 3.500001294686e-01 7.500003211832e-01 1.012423354803e+00 1.259960924444e+00 1.000017658828e+00 3.131389040508e-14 4.697000617234e-14 2.284488908860e-07 9.999823414834e-04 1.000000000000e-03 +1.050000000431e+00 3.500000000822e-01 7.500000002207e-01 1.106797181494e+00 1.336974196196e+00 1.000000014055e+00 6.666666932853e-15 1.000000025873e-14 1.054092567026e-07 9.999999859449e-04 1.000000000000e-03 +1.150000000000e+00 3.500000000000e-01 7.500000000000e-01 1.202081528017e+00 1.416862731531e+00 9.999999999994e-01 6.666666666660e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +5.260485693140e-02 4.738636551491e-01 8.012985423787e-01 4.767746161910e-01 9.324126707967e-01 2.359527747150e+00 5.886195745259e-02 3.741974905170e-02 2.039056128368e-01 4.238136216910e-04 1.000000000000e-03 +1.570757906732e-01 4.715807377877e-01 7.959636594993e-01 4.970525085622e-01 9.384132051029e-01 2.214123172832e+00 4.834378711867e-02 3.275142122525e-02 1.907628580937e-01 4.516460566740e-04 1.000000000000e-03 +2.595015168464e-01 4.673503370641e-01 7.862900372849e-01 5.345627884538e-01 9.507940878723e-01 1.947192188906e+00 3.106782911369e-02 2.393279098799e-02 1.630705061826e-01 5.135599894542e-04 1.000000000000e-03 +3.592129948413e-01 4.619602068557e-01 7.743863065653e-01 5.851847643104e-01 9.706262721444e-01 1.628383115549e+00 1.469812937341e-02 1.353931630069e-02 1.226526998421e-01 6.141060973008e-04 1.000000000000e-03 +4.566495068119e-01 4.566495068119e-01 7.631552506282e-01 6.457999257844e-01 9.997317043610e-01 1.345909796113e+00 4.649577025897e-03 5.181896705848e-03 7.587926598549e-02 7.429918430552e-04 1.000000000000e-03 +5.533663315679e-01 4.527098336229e-01 7.551957933139e-01 7.149548869487e-01 1.039942871802e+00 1.149741247387e+00 8.206273283399e-04 1.070624364663e-03 3.449032657722e-02 8.697609155738e-04 1.000000000000e-03 +6.510600969875e-01 4.507026836855e-01 7.513099355507e-01 7.918409934897e-01 1.091548797914e+00 1.044653878484e+00 4.783980965934e-05 6.869233529590e-05 8.736407556624e-03 9.572548578969e-04 1.000000000000e-03 +7.501706785708e-01 4.500932966402e-01 7.501706785708e-01 8.748371406541e-01 1.152430505347e+00 1.007115594235e+00 3.957354028090e-07 5.894091081611e-07 8.092583080006e-04 9.929346797169e-04 1.000000000000e-03 +8.500099192445e-01 4.500043215926e-01 7.500079470262e-01 9.617799916125e-01 1.219644486262e+00 1.000399153026e+00 1.503012174486e-10 2.253618722997e-10 1.582409808909e-05 9.996010062338e-04 1.000000000000e-03 +9.500001012292e-01 4.500000341591e-01 7.500000648316e-01 1.051189908189e+00 1.291317281045e+00 1.000003787797e+00 6.978684056960e-15 1.046798643484e-14 1.078475592617e-07 9.999962122176e-04 1.000000000000e-03 +1.050000000061e+00 4.500000000156e-01 7.500000000313e-01 1.142365965942e+00 1.366565036941e+00 1.000000002098e+00 6.666666691555e-15 1.000000001635e-14 1.054092554251e-07 9.999999979020e-04 1.000000000000e-03 +1.150000000000e+00 4.500000000000e-01 7.500000000000e-01 1.234908903523e+00 1.444818327680e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +5.146465263007e-02 5.666863499454e-01 7.774272859485e-01 5.690184792120e-01 9.634185044009e-01 1.722111448131e+00 1.899309104251e-02 1.654343369861e-02 1.355787335774e-01 5.806825110450e-04 1.000000000000e-03 +1.538674114688e-01 5.646663764575e-01 7.739165384455e-01 5.852548991796e-01 9.702938243095e-01 1.625960386649e+00 1.462963411623e-02 1.349630123498e-02 1.224577080509e-01 6.150211334859e-04 1.000000000000e-03 +2.548924372583e-01 5.611053846716e-01 7.678461741125e-01 6.162867897975e-01 9.845796841181e-01 1.467039074858e+00 8.339275385155e-03 8.526639332319e-03 9.733469937580e-02 6.816451021230e-04 1.000000000000e-03 +3.543090714024e-01 5.569512082585e-01 7.609577794088e-01 6.600981491101e-01 1.007366025088e+00 1.293835439116e+00 3.327226500468e-03 3.857399171344e-03 6.546754218139e-02 7.728958179436e-04 1.000000000000e-03 +4.527098336229e-01 5.533663315679e-01 7.551957933139e-01 7.149548869487e-01 1.039942871802e+00 1.149741247387e+00 8.206273283399e-04 1.070624364663e-03 3.449032657722e-02 8.697609155738e-04 1.000000000000e-03 +5.511444940411e-01 5.511444940411e-01 7.517310244553e-01 7.794360183002e-01 1.082875819174e+00 1.056911177814e+00 8.922257734149e-05 1.266273541444e-04 1.186157915964e-02 9.461533012343e-04 1.000000000000e-03 +6.502884605645e-01 5.502374939375e-01 7.503531864919e-01 8.518429325163e-01 1.135194382543e+00 1.013784462369e+00 2.346631511811e-06 3.472086423075e-06 1.964147093121e-03 9.864029654420e-04 1.000000000000e-03 +7.500359393869e-01 5.500243628049e-01 7.500359393869e-01 9.300971508670e-01 1.194836650100e+00 1.001674826878e+00 7.594966693250e-09 1.137340156125e-08 1.124149138052e-04 9.983279734771e-04 1.000000000000e-03 +8.500015431596e-01 5.500008380996e-01 7.500012446742e-01 1.012424587455e+00 1.259962464638e+00 1.000067878178e+00 1.018993879559e-12 1.528387075209e-12 1.303153046017e-06 9.999321264293e-04 1.000000000000e-03 +9.500000109400e-01 5.500000046815e-01 7.500000070620e-01 1.097724931818e+00 1.329473593769e+00 1.000000440188e+00 6.667384175755e-15 1.000107186128e-14 1.054149043926e-07 9.999995598123e-04 1.000000000000e-03 +1.050000000004e+00 5.500000000013e-01 7.500000000020e-01 1.185326959117e+00 1.402676013915e+00 1.000000000144e+00 6.666666668269e-15 1.000000000096e-14 1.054092553440e-07 9.999999998558e-04 1.000000000000e-03 +1.150000000000e+00 5.500000000000e-01 7.500000000000e-01 1.274754878398e+00 1.479019945775e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +5.058575972192e-02 6.581219449257e-01 7.603654953038e-01 6.600631890050e-01 1.006895774114e+00 1.286615155063e+00 3.016656533450e-03 3.516968366469e-03 6.251193989479e-02 7.772331890116e-04 1.000000000000e-03 +1.514844706257e-01 6.568497734941e-01 7.587036779035e-01 6.740913660477e-01 1.014904153427e+00 1.243543432231e+00 2.163378209825e-03 2.609532751837e-03 5.384682753305e-02 8.041536580720e-04 1.000000000000e-03 +2.517267781744e-01 6.547642605665e-01 7.560063406187e-01 7.014859996930e-01 1.031323516081e+00 1.173522207068e+00 1.060510833040e-03 1.355548484706e-03 3.880934144000e-02 8.521355573652e-04 1.000000000000e-03 +3.513352207425e-01 6.526154910073e-01 7.532651282783e-01 7.411770479696e-01 1.056764765649e+00 1.100480150893e+00 3.206285831789e-04 4.370300312805e-04 2.203608231163e-02 9.086942633071e-04 1.000000000000e-03 +4.507026836855e-01 6.510600969875e-01 7.513099355507e-01 7.918409934897e-01 1.091548797914e+00 1.044653878484e+00 4.783980965934e-05 6.869233529590e-05 8.736407556624e-03 9.572548578969e-04 1.000000000000e-03 +5.502374939375e-01 6.502884605645e-01 7.503531864919e-01 8.518429325163e-01 1.135194382543e+00 1.013784462369e+00 2.346631511811e-06 3.472086423075e-06 1.964147093121e-03 9.864029654420e-04 1.000000000000e-03 +6.500460544786e-01 6.500460544786e-01 7.500560529523e-01 9.193039464107e-01 1.186466952113e+00 1.002537742528e+00 2.352797756221e-08 3.520263112920e-08 1.977726841301e-04 9.974686813070e-04 1.000000000000e-03 +7.500042095013e-01 6.500034616220e-01 7.500042095013e-01 9.924771102602e-01 1.243992415033e+00 1.000219991973e+00 2.642151929817e-11 3.962356208166e-11 6.635222685844e-06 9.997800564129e-04 1.000000000000e-03 +8.500001192480e-01 6.500000795961e-01 7.500000969109e-01 1.070046871028e+00 1.306713607323e+00 1.000005733503e+00 7.547277597628e-15 1.132085148830e-14 1.121549101729e-07 9.999942665294e-04 1.000000000000e-03 +9.500000005015e-01 6.500000002674e-01 7.500000003266e-01 1.151086443887e+00 1.373863167055e+00 1.000000021658e+00 6.666667169184e-15 1.000000053720e-14 1.054092581702e-07 9.999999783420e-04 1.000000000000e-03 +1.050000000000e+00 6.500000000000e-01 7.500000000000e-01 1.234908903523e+00 1.444818327680e+00 1.000000000003e+00 6.666666666704e-15 1.000000000002e-14 1.054092553391e-07 9.999999999966e-04 1.000000000000e-03 +1.150000000000e+00 6.500000000000e-01 7.500000000000e-01 1.320984481362e+00 1.519045753096e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +5.013384912718e-02 7.522487415528e-01 7.522487415528e-01 7.539174835458e-01 1.065021005034e+00 1.075229085029e+00 1.366589611036e-04 1.906462952961e-04 1.455435388451e-02 9.300343656280e-04 1.000000000000e-03 +1.503212846008e-01 7.517961678835e-01 7.517961678835e-01 7.666772245530e-01 1.073774391896e+00 1.061127838059e+00 8.524754381782e-05 1.205050995181e-04 1.157128147701e-02 9.423935214340e-04 1.000000000000e-03 +2.503348907093e-01 7.511195431039e-01 7.511195431039e-01 7.917374094604e-01 1.091342610536e+00 1.039656753087e+00 3.109680020569e-05 4.486596193412e-05 7.060528933139e-03 9.618559173795e-04 1.000000000000e-03 +3.502196464478e-01 7.505214636265e-01 7.505214636265e-01 8.282126949777e-01 1.117684542027e+00 1.019774532972e+00 5.668767311933e-06 8.338265658701e-06 3.043803479330e-03 9.806089166450e-04 1.000000000000e-03 +4.500932966402e-01 7.501706785708e-01 7.501706785708e-01 8.748371406541e-01 1.152430505347e+00 1.007115594235e+00 3.957354028090e-07 5.894091081611e-07 8.092583080006e-04 9.929346797169e-04 1.000000000000e-03 +5.500243628049e-01 7.500359393869e-01 7.500359393869e-01 9.300971508670e-01 1.194836650100e+00 1.001674826878e+00 7.594966693250e-09 1.137340156125e-08 1.124149138052e-04 9.983279734771e-04 1.000000000000e-03 +6.500034616220e-01 7.500042095013e-01 7.500042095013e-01 9.924771102602e-01 1.243992415033e+00 1.000219991973e+00 2.642151929817e-11 3.962356208166e-11 6.635222685844e-06 9.997800564129e-04 1.000000000000e-03 +7.500002075230e-01 7.500002075230e-01 7.500002075230e-01 1.060660465262e+00 1.299038465117e+00 1.000012058186e+00 1.382416679164e-14 2.073600014891e-14 1.517893282331e-07 9.999879419596e-04 1.000000000000e-03 +8.500000032846e-01 7.500000026856e-01 7.500000026856e-01 1.133578409115e+00 1.359227726925e+00 1.000000171210e+00 6.666714631423e-15 1.000007023502e-14 1.054096255094e-07 9.999998287898e-04 1.000000000000e-03 +9.500000000067e-01 7.500000000044e-01 7.500000000044e-01 1.210371843699e+00 1.423903086599e+00 1.000000000310e+00 6.666666670112e-15 1.000000000207e-14 1.054092553499e-07 9.999999996903e-04 1.000000000000e-03 +1.050000000000e+00 7.500000000000e-01 7.500000000000e-01 1.290348790056e+00 1.492481155660e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 1.000000000000e-03 1.000000000000e-03 +1.150000000000e+00 7.500000000000e-01 7.500000000000e-01 1.372953021775e+00 1.564448784716e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +5.001073480624e-02 8.502256294246e-01 7.501776842646e-01 8.516951887420e-01 1.134967511647e+00 1.007286554319e+00 2.965236342986e-07 4.415679426485e-07 7.004506031029e-04 9.927661554824e-04 1.000000000000e-03 +1.500244024175e-01 8.501708533052e-01 7.501348411096e-01 8.633063194084e-01 1.143678311842e+00 1.005647990613e+00 1.639219484307e-07 2.445019777707e-07 5.212186337706e-04 9.943837300271e-04 1.000000000000e-03 +2.500228304315e-01 8.500957063172e-01 7.500758320950e-01 8.861005166661e-01 1.160942668494e+00 1.003315024685e+00 4.467460836382e-08 6.679050038820e-08 2.724181842279e-04 9.966959283937e-04 1.000000000000e-03 +3.500127232443e-01 8.500379124613e-01 7.500301946228e-01 9.192787167418e-01 1.186431056531e+00 1.001405109424e+00 4.784267475180e-09 7.166331732519e-09 8.923335034565e-05 9.985968621385e-04 1.000000000000e-03 +4.500043215926e-01 8.500099192445e-01 7.500079470262e-01 9.617799916125e-01 1.219644486262e+00 1.000399153026e+00 1.503012174486e-10 2.253618722997e-10 1.582409808909e-05 9.996010062338e-04 1.000000000000e-03 +5.500008380996e-01 8.500015431596e-01 7.500012446742e-01 1.012424587455e+00 1.259962464638e+00 1.000067878178e+00 1.018993879559e-12 1.528387075209e-12 1.303153046017e-06 9.999321264293e-04 1.000000000000e-03 +6.500000795961e-01 8.500001192480e-01 7.500000969109e-01 1.070046871028e+00 1.306713607323e+00 1.000005733503e+00 7.547277597628e-15 1.132085148830e-14 1.121549101729e-07 9.999942665294e-04 1.000000000000e-03 +7.500000026856e-01 8.500000032846e-01 7.500000026856e-01 1.133578409115e+00 1.359227726925e+00 1.000000171210e+00 6.666714631423e-15 1.000007023502e-14 1.054096255094e-07 9.999998287898e-04 1.000000000000e-03 +8.500000000205e-01 8.500000000205e-01 7.500000000167e-01 1.202081528046e+00 1.416862731564e+00 1.000000001150e+00 6.666666679661e-15 1.000000000800e-14 1.054092553811e-07 9.999999988504e-04 1.000000000000e-03 +9.500000000000e-01 8.500000000000e-01 7.500000000000e-01 1.274754878398e+00 1.479019945775e+00 1.000000000001e+00 6.666666666675e-15 1.000000000001e-14 1.054092553390e-07 9.999999999993e-04 1.000000000000e-03 +1.050000000000e+00 8.500000000000e-01 7.500000000000e-01 1.350925608611e+00 1.545153714036e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 1.000000000000e-03 1.000000000000e-03 +1.150000000000e+00 8.500000000000e-01 7.500000000000e-01 1.430034964608e+00 1.614775526196e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +5.000015884922e-02 9.500044120371e-01 7.500027840591e-01 9.513192938099e-01 1.211409334152e+00 1.000137628269e+00 5.033061008974e-12 7.548552619234e-12 2.896080228177e-06 9.998623906704e-04 1.000000000000e-03 +1.500003386935e-01 9.500031309798e-01 7.500019785165e-01 9.617723485729e-01 1.219634788885e+00 1.000099669851e+00 2.414491229775e-12 3.621375902666e-12 2.005928962591e-06 9.999003400821e-04 1.000000000000e-03 +2.500002795723e-01 9.500015431804e-01 7.500009779593e-01 9.823456987392e-01 1.235922545620e+00 1.000051094872e+00 4.533505821729e-13 6.799911291996e-13 8.692213176808e-07 9.999489077384e-04 1.000000000000e-03 +3.500001294686e-01 9.500005045904e-01 7.500003211832e-01 1.012423354803e+00 1.259960924444e+00 1.000017658828e+00 3.131389040508e-14 4.697000617234e-14 2.284488908860e-07 9.999823414834e-04 1.000000000000e-03 +4.500000341591e-01 9.500001012292e-01 7.500000648316e-01 1.051189908189e+00 1.291317281045e+00 1.000003787797e+00 6.978684056960e-15 1.046798643484e-14 1.078475592617e-07 9.999962122176e-04 1.000000000000e-03 +5.500000046815e-01 9.500000109400e-01 7.500000070620e-01 1.097724931818e+00 1.329473593769e+00 1.000000440188e+00 6.667384175755e-15 1.000107186128e-14 1.054149043926e-07 9.999995598123e-04 1.000000000000e-03 +6.500000002674e-01 9.500000005015e-01 7.500000003266e-01 1.151086443887e+00 1.373863167055e+00 1.000000021658e+00 6.666667169184e-15 1.000000053720e-14 1.054092581702e-07 9.999999783420e-04 1.000000000000e-03 +7.500000000044e-01 9.500000000067e-01 7.500000000044e-01 1.210371843699e+00 1.423903086599e+00 1.000000000310e+00 6.666666670112e-15 1.000000000207e-14 1.054092553499e-07 9.999999996903e-04 1.000000000000e-03 +8.500000000000e-01 9.500000000000e-01 7.500000000000e-01 1.274754878398e+00 1.479019945775e+00 1.000000000001e+00 6.666666666675e-15 1.000000000001e-14 1.054092553390e-07 9.999999999992e-04 1.000000000000e-03 +9.500000000000e-01 9.500000000000e-01 7.500000000000e-01 1.343502884254e+00 1.538668255343e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 1.000000000000e-03 1.000000000000e-03 +1.050000000000e+00 9.500000000000e-01 7.500000000000e-01 1.415980225851e+00 1.602342035896e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 1.000000000000e-03 1.000000000000e-03 +1.150000000000e+00 9.500000000000e-01 7.500000000000e-01 1.491643389018e+00 1.669580785706e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +5.000000015251e-02 1.050000005959e+00 7.500000030387e-01 1.051189808041e+00 1.291317163631e+00 1.000000176134e+00 6.666704962727e-15 1.000005568274e-14 1.054095488123e-07 9.999998238656e-04 1.000000000000e-03 +1.500000003049e-01 1.050000003933e+00 7.500000020070e-01 1.060660175717e+00 1.299038110050e+00 1.000000118309e+00 6.666684007659e-15 1.000002482839e-14 1.054093861960e-07 9.999998816906e-04 1.000000000000e-03 +2.500000002202e-01 1.050000001670e+00 7.500000008535e-01 1.079351658922e+00 1.314343944673e+00 1.000000051969e+00 6.666669630824e-15 1.000000392655e-14 1.054092760337e-07 9.999999480309e-04 1.000000000000e-03 +3.500000000822e-01 1.050000000431e+00 7.500000002207e-01 1.106797181494e+00 1.336974196196e+00 1.000000014055e+00 6.666666932853e-15 1.000000025873e-14 1.054092567026e-07 9.999999859449e-04 1.000000000000e-03 +4.500000000156e-01 1.050000000061e+00 7.500000000313e-01 1.142365965942e+00 1.366565036941e+00 1.000000002098e+00 6.666666691555e-15 1.000000001635e-14 1.054092554251e-07 9.999999979020e-04 1.000000000000e-03 +5.500000000013e-01 1.050000000004e+00 7.500000000020e-01 1.185326959117e+00 1.402676013915e+00 1.000000000144e+00 6.666666668269e-15 1.000000000096e-14 1.054092553440e-07 9.999999998558e-04 1.000000000000e-03 +6.500000000000e-01 1.050000000000e+00 7.500000000000e-01 1.234908903523e+00 1.444818327680e+00 1.000000000003e+00 6.666666666704e-15 1.000000000002e-14 1.054092553391e-07 9.999999999966e-04 1.000000000000e-03 +7.500000000000e-01 1.050000000000e+00 7.500000000000e-01 1.290348790056e+00 1.492481155660e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 1.000000000000e-03 1.000000000000e-03 +8.500000000000e-01 1.050000000000e+00 7.500000000000e-01 1.350925608611e+00 1.545153714036e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 1.000000000000e-03 1.000000000000e-03 +9.500000000000e-01 1.050000000000e+00 7.500000000000e-01 1.415980225851e+00 1.602342035896e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 1.000000000000e-03 1.000000000000e-03 +1.050000000000e+00 1.050000000000e+00 7.500000000000e-01 1.484924240492e+00 1.663580475961e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 1.000000000000e-03 1.000000000000e-03 +1.150000000000e+00 1.050000000000e+00 7.500000000000e-01 1.557241150240e+00 1.728438601744e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +5.000000000000e-02 1.150000000000e+00 7.500000000000e-01 1.151086443322e+00 1.373863166404e+00 1.000000000001e+00 6.666666666683e-15 1.000000000001e-14 1.054092553390e-07 9.999999999985e-04 1.000000000000e-03 +1.500000000000e-01 1.150000000000e+00 7.500000000000e-01 1.159741350474e+00 1.381122731693e+00 1.000000000001e+00 6.666666666674e-15 1.000000000000e-14 1.054092553390e-07 9.999999999993e-04 1.000000000000e-03 +2.500000000000e-01 1.150000000000e+00 7.500000000000e-01 1.176860229594e+00 1.395528573695e+00 9.999999999998e-01 6.666666666665e-15 9.999999999999e-15 1.054092553389e-07 1.000000000000e-03 1.000000000000e-03 +3.500000000000e-01 1.150000000000e+00 7.500000000000e-01 1.202081528017e+00 1.416862731531e+00 9.999999999994e-01 6.666666666660e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +4.500000000000e-01 1.150000000000e+00 7.500000000000e-01 1.234908903523e+00 1.444818327680e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +5.500000000000e-01 1.150000000000e+00 7.500000000000e-01 1.274754878398e+00 1.479019945775e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +6.500000000000e-01 1.150000000000e+00 7.500000000000e-01 1.320984481362e+00 1.519045753096e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +7.500000000000e-01 1.150000000000e+00 7.500000000000e-01 1.372953021775e+00 1.564448784716e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +8.500000000000e-01 1.150000000000e+00 7.500000000000e-01 1.430034964608e+00 1.614775526196e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +9.500000000000e-01 1.150000000000e+00 7.500000000000e-01 1.491643389018e+00 1.669580785706e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +1.050000000000e+00 1.150000000000e+00 7.500000000000e-01 1.557241150240e+00 1.728438601744e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +1.150000000000e+00 1.150000000000e+00 7.500000000000e-01 1.626345596729e+00 1.790949468857e+00 9.999999999987e-01 6.666666666652e-15 9.999999999991e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +5.225430802937e-02 5.225430802937e-02 9.050045778159e-01 7.389875110755e-02 9.080166910817e-01 2.728304917513e+00 9.192242022357e-02 5.053820394130e-02 2.369674237839e-01 3.665279469244e-04 1.000000000000e-03 +1.561138799607e-01 5.203310211813e-02 8.994054513162e-01 1.645569422189e-01 9.143353613909e-01 2.496311647939e+00 7.201763651944e-02 4.327442643963e-02 2.192776688221e-01 4.005910082683e-04 1.000000000000e-03 +2.581916788083e-01 5.162788821219e-02 8.891817580921e-01 2.633028329644e-01 9.273470659741e-01 2.098397227317e+00 4.191673677063e-02 2.996339507955e-02 1.824627666114e-01 4.765541943069e-04 1.000000000000e-03 +3.579497548144e-01 5.112215598374e-02 8.765470342601e-01 3.615819434155e-01 9.481962903716e-01 1.676016033909e+00 1.727129957706e-02 1.545745914206e-02 1.310532510176e-01 5.966530031743e-04 1.000000000000e-03 +4.558013370506e-01 5.063245327525e-02 8.645660897219e-01 4.586049543799e-01 9.786690082345e-01 1.348037512704e+00 4.671258719988e-03 5.197843542147e-03 7.599593221678e-02 7.418191189606e-04 1.000000000000e-03 +5.530219884522e-01 5.026702262286e-02 8.559393310042e-01 5.553018037743e-01 1.020290268323e+00 1.144569811264e+00 6.893995401096e-04 9.034829505262e-04 3.168390671980e-02 8.736907003473e-04 1.000000000000e-03 +6.510048780690e-01 5.007366899692e-02 8.515826561091e-01 6.529278088706e-01 1.073083288372e+00 1.043026431978e+00 3.405506599325e-05 4.897536382945e-05 7.376792725949e-03 9.587484739991e-04 1.000000000000e-03 +7.501776842646e-01 5.001073480624e-02 8.502256294246e-01 7.518428237101e-01 1.134967511647e+00 1.007286554319e+00 2.965236342986e-07 4.415679426485e-07 7.004506031029e-04 9.927661554824e-04 1.000000000000e-03 +8.500111982899e-01 5.000052333172e-02 8.500111982899e-01 8.514805279933e-01 1.203136786392e+00 1.000430236596e+00 1.139772488409e-10 1.708923491188e-10 1.377970928248e-05 9.995699484281e-04 1.000000000000e-03 +9.500000927861e-01 5.000000315800e-02 8.500000726904e-01 9.513149723459e-01 1.275735199868e+00 1.000003235463e+00 6.771122157914e-15 1.015665037540e-14 1.062316670479e-07 9.999967645474e-04 1.000000000000e-03 +1.050000000031e+00 5.000000000073e-02 8.500000000194e-01 1.051189802112e+00 1.351850583496e+00 1.000000000989e+00 6.666666677792e-15 1.000000000680e-14 1.054092553748e-07 9.999999990115e-04 1.000000000000e-03 +1.150000000000e+00 5.000000000000e-02 8.500000000000e-01 1.151086443322e+00 1.430908802125e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +5.203310211813e-02 1.561138799607e-01 8.994054513162e-01 1.645569422189e-01 9.143353613909e-01 2.496311647939e+00 7.201763651944e-02 4.327442643963e-02 2.192776688221e-01 4.005910082683e-04 1.000000000000e-03 +1.554894350555e-01 1.554894350555e-01 8.941550419640e-01 2.198952678612e-01 9.207970286102e-01 2.284397696094e+00 5.541580928499e-02 3.638758438149e-02 2.010737409827e-01 4.377521487217e-04 1.000000000000e-03 +2.572889711585e-01 1.543564808184e-01 8.846783564256e-01 3.000392271861e-01 9.341730739956e-01 1.935811375776e+00 3.161924396550e-02 2.450076827823e-02 1.649941691840e-01 5.165792558685e-04 1.000000000000e-03 +3.569741920387e-01 1.529608952451e-01 8.731485593252e-01 3.883653038775e-01 9.556233650908e-01 1.574728359156e+00 1.278911985324e-02 1.218221521720e-02 1.163434342186e-01 6.350301588117e-04 1.000000000000e-03 +4.549819179477e-01 1.516329878552e-01 8.624312050106e-01 4.795843081933e-01 9.868073226529e-01 1.295187933817e+00 3.362536294055e-03 3.894264538289e-03 6.577963665223e-02 7.720887246478e-04 1.000000000000e-03 +5.525175539375e-01 1.506682863740e-01 8.549225690771e-01 5.726923955562e-01 1.029013692351e+00 1.121201856519e+00 4.675184585788e-04 6.254696099465e-04 2.636221222268e-02 8.919000572339e-04 1.000000000000e-03 +6.508041457427e-01 1.501768340028e-01 8.512621287206e-01 6.679065185990e-01 1.082010318519e+00 1.035082093390e+00 2.125213843524e-05 3.079775783626e-05 5.849763322493e-03 9.661069458996e-04 1.000000000000e-03 +7.501348411096e-01 1.500244024175e-01 8.501708533052e-01 7.649899353372e-01 1.143678311842e+00 1.005647990613e+00 1.639219484307e-07 2.445019777707e-07 5.212186337706e-04 9.943837300271e-04 1.000000000000e-03 +8.500079476103e-01 1.500011145407e-01 8.500079476103e-01 8.631418454485e-01 1.211415435086e+00 1.000311652394e+00 5.459679816010e-11 8.186968235764e-11 9.537626210473e-06 9.996884447029e-04 1.000000000000e-03 +9.500000624558e-01 1.500000064188e-01 8.500000489817e-01 9.617692657762e-01 1.283549844712e+00 1.000002219760e+00 6.712204174474e-15 1.006828391254e-14 1.057685308825e-07 9.999977802449e-04 1.000000000000e-03 +1.050000000020e+00 1.500000000014e-01 8.500000000123e-01 1.060660171799e+00 1.359227721930e+00 1.000000000639e+00 6.666666673808e-15 1.000000000432e-14 1.054092553617e-07 9.999999993612e-04 1.000000000000e-03 +1.150000000000e+00 1.500000000000e-01 8.500000000000e-01 1.159741350474e+00 1.437880384455e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +5.162788821219e-02 2.581916788083e-01 8.891817580921e-01 2.633028329644e-01 9.273470659741e-01 2.098397227317e+00 4.191673677063e-02 2.996339507955e-02 1.824627666114e-01 4.765541943069e-04 1.000000000000e-03 +1.543564808184e-01 2.572889711585e-01 8.846783564256e-01 3.000392271861e-01 9.341730739956e-01 1.935811375776e+00 3.161924396550e-02 2.450076827823e-02 1.649941691840e-01 5.165792558685e-04 1.000000000000e-03 +2.556791237822e-01 2.556791237822e-01 8.767071009659e-01 3.615848844685e-01 9.483453851631e-01 1.677696230122e+00 1.749563827157e-02 1.564255610532e-02 1.318355714320e-01 5.960554610815e-04 1.000000000000e-03 +3.552727392005e-01 2.537459099451e-01 8.672845100557e-01 4.365841339684e-01 9.709727737766e-01 1.414880451002e+00 6.775175115164e-03 7.182771283291e-03 8.933564227919e-02 7.067734940376e-04 1.000000000000e-03 +4.535990167792e-01 2.519736230059e-01 8.588740572130e-01 5.188860903067e-01 1.003447766885e+00 1.210976307308e+00 1.674951055676e-03 2.074711592913e-03 4.801286393496e-02 8.257799875731e-04 1.000000000000e-03 +5.517072298446e-01 2.507572994947e-01 8.533066030936e-01 6.060198764996e-01 1.046609884148e+00 1.084005239392e+00 2.052138814523e-04 2.839661756166e-04 1.776282558906e-02 9.225047662693e-04 1.000000000000e-03 +6.505023636775e-01 2.501842151115e-01 8.507833726432e-01 6.969544222120e-01 1.099808080443e+00 1.022827357407e+00 7.707764946241e-06 1.130361574280e-05 3.543948793022e-03 9.776821012440e-04 1.000000000000e-03 +7.500758320950e-01 2.500228304315e-01 8.500957063172e-01 7.906485753038e-01 1.160942668494e+00 1.003315024685e+00 4.467460836382e-08 6.679050038820e-08 2.724181842279e-04 9.966959283937e-04 1.000000000000e-03 +8.500039171250e-01 2.500009174635e-01 8.500039171250e-01 8.860062741654e-01 1.227808526191e+00 1.000159800910e+00 1.017237001464e-11 1.525611708056e-11 4.117188506812e-06 9.998402246219e-04 1.000000000000e-03 +9.500000276254e-01 2.500000047996e-01 8.500000217134e-01 9.823441631567e-01 1.299038141011e+00 1.000001018502e+00 6.673041433184e-15 1.000955195503e-14 1.054595865461e-07 9.999989814990e-04 1.000000000000e-03 +1.050000000008e+00 2.500000000010e-01 8.500000000048e-01 1.079351657254e+00 1.373863166412e+00 1.000000000258e+00 6.666666669539e-15 1.000000000173e-14 1.054092553480e-07 9.999999997418e-04 1.000000000000e-03 +1.150000000000e+00 2.500000000000e-01 8.500000000000e-01 1.176860229594e+00 1.451723114096e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +5.112215598374e-02 3.579497548144e-01 8.765470342601e-01 3.615819434155e-01 9.481962903716e-01 1.676016033909e+00 1.727129957706e-02 1.545745914206e-02 1.310532510176e-01 5.966530031743e-04 1.000000000000e-03 +1.529608952451e-01 3.569741920387e-01 8.731485593252e-01 3.883653038775e-01 9.556233650908e-01 1.574728359156e+00 1.278911985324e-02 1.218221521720e-02 1.163434342186e-01 6.350301588117e-04 1.000000000000e-03 +2.537459099451e-01 3.552727392005e-01 8.672845100557e-01 4.365841339684e-01 9.709727737766e-01 1.414880451002e+00 6.775175115164e-03 7.182771283291e-03 8.933564227919e-02 7.067734940376e-04 1.000000000000e-03 +3.533090281347e-01 3.533090281347e-01 8.606452939914e-01 4.996544192970e-01 9.951707696635e-01 1.251751097152e+00 2.455559222224e-03 2.942548915448e-03 5.717953125850e-02 7.988808655932e-04 1.000000000000e-03 +4.520983470703e-01 3.516195090955e-01 8.550895506055e-01 5.727383299556e-01 1.029177989541e+00 1.124568992940e+00 5.343668970790e-04 7.127622677228e-04 2.814174968348e-02 8.892295681974e-04 1.000000000000e-03 +5.509016174244e-01 3.505622779615e-01 8.517245275278e-01 6.529827737470e-01 1.073229320137e+00 1.046611736286e+00 5.216207405858e-05 7.475848815296e-05 9.113999497291e-03 9.554641566975e-04 1.000000000000e-03 +6.502340487588e-01 3.501204436372e-01 8.503618697066e-01 7.385043285032e-01 1.126278807698e+00 1.011357314405e+00 1.367939495348e-06 2.028866765283e-06 1.501431452271e-03 9.887702256726e-04 1.000000000000e-03 +7.500301946228e-01 3.500127232443e-01 8.500379124613e-01 8.276800101965e-01 1.186431056531e+00 1.001405109424e+00 4.784267475180e-09 7.166331732519e-09 8.923335034565e-05 9.985968621385e-04 1.000000000000e-03 +8.500012812751e-01 3.500004231069e-01 8.500012812751e-01 9.192401614075e-01 1.252000260589e+00 1.000055233664e+00 5.721142134178e-13 8.581239227983e-13 9.764584094223e-07 9.999447693865e-04 1.000000000000e-03 +9.500000076079e-01 3.500000018958e-01 8.500000060005e-01 1.012422844360e+00 1.321930416468e+00 1.000000295197e+00 6.666896609159e-15 1.000034196167e-14 1.054110576198e-07 9.999997048035e-04 1.000000000000e-03 +1.050000000002e+00 3.500000000003e-01 8.500000000011e-01 1.106797181061e+00 1.395528573697e+00 1.000000000061e+00 6.666666667340e-15 1.000000000040e-14 1.054092553411e-07 9.999999999394e-04 1.000000000000e-03 +1.150000000000e+00 3.500000000000e-01 8.500000000000e-01 1.202081528017e+00 1.472243186434e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +5.063245327525e-02 4.558013370506e-01 8.645660897219e-01 4.586049543799e-01 9.786690082345e-01 1.348037512704e+00 4.671258719988e-03 5.197843542147e-03 7.599593221678e-02 7.418191189606e-04 1.000000000000e-03 +1.516329878552e-01 4.549819179477e-01 8.624312050106e-01 4.795843081933e-01 9.868073226529e-01 1.295187933817e+00 3.362536294055e-03 3.894264538289e-03 6.577963665223e-02 7.720887246478e-04 1.000000000000e-03 +2.519736230059e-01 4.535990167792e-01 8.588740572130e-01 5.188860903067e-01 1.003447766885e+00 1.210976307308e+00 1.674951055676e-03 2.074711592913e-03 4.801286393496e-02 8.257799875731e-04 1.000000000000e-03 +3.516195090955e-01 4.520983470703e-01 8.550895506055e-01 5.727383299556e-01 1.029177989541e+00 1.124568992940e+00 5.343668970790e-04 7.127622677228e-04 2.814174968348e-02 8.892295681974e-04 1.000000000000e-03 +4.509249640613e-01 4.509249640613e-01 8.522015776520e-01 6.377041997882e-01 1.064384411470e+00 1.058073015339e+00 9.229488954349e-05 1.308438380984e-04 1.205744758776e-02 9.451143593147e-04 1.000000000000e-03 +5.503469471796e-01 4.502801048595e-01 8.506544716324e-01 7.110794154679e-01 1.108714104362e+00 1.019508708736e+00 6.086603760954e-06 8.955201228983e-06 3.154397499961e-03 9.808645982435e-04 1.000000000000e-03 +6.500760939801e-01 4.500506285498e-01 8.501166018218e-01 7.906607971959e-01 1.160966292756e+00 1.004035988442e+00 9.026504765337e-08 1.348533050993e-07 3.870878526458e-04 9.959802352820e-04 1.000000000000e-03 +7.500079470262e-01 4.500043215926e-01 8.500099192445e-01 8.746518221867e-01 1.219644486262e+00 1.000399153026e+00 1.503012174486e-10 2.253618722997e-10 1.582409808909e-05 9.996010062338e-04 1.000000000000e-03 +8.500002580167e-01 4.500001113505e-01 8.500002580167e-01 9.617694832152e-01 1.283550146069e+00 1.000011873277e+00 1.388621449257e-14 2.082907442948e-14 1.521296027496e-07 9.999881268639e-04 1.000000000000e-03 +9.500000011830e-01 4.500000003933e-01 8.500000009376e-01 1.051189803319e+00 1.351850585011e+00 1.000000048757e+00 6.666669212162e-15 1.000000333067e-14 1.054092728931e-07 9.999999512427e-04 1.000000000000e-03 +1.050000000000e+00 4.500000000000e-01 8.500000000001e-01 1.142365965880e+00 1.423903086590e+00 1.000000000007e+00 6.666666666747e-15 1.000000000005e-14 1.054092553392e-07 9.999999999928e-04 1.000000000000e-03 +1.150000000000e+00 4.500000000000e-01 8.500000000000e-01 1.234908903523e+00 1.499166435057e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +5.026702262286e-02 5.530219884522e-01 8.559393310042e-01 5.553018037743e-01 1.020290268323e+00 1.144569811264e+00 6.893995401096e-04 9.034829505262e-04 3.168390671980e-02 8.736907003473e-04 1.000000000000e-03 +1.506682863740e-01 5.525175539375e-01 8.549225690771e-01 5.726923955562e-01 1.029013692351e+00 1.121201856519e+00 4.675184585788e-04 6.254696099465e-04 2.636221222268e-02 8.919000572339e-04 1.000000000000e-03 +2.507572994947e-01 5.517072298446e-01 8.533066030936e-01 6.060198764996e-01 1.046609884148e+00 1.084005239392e+00 2.052138814523e-04 2.839661756166e-04 1.776282558906e-02 9.225047662693e-04 1.000000000000e-03 +3.505622779615e-01 5.509016174244e-01 8.517245275278e-01 6.529827737470e-01 1.073229320137e+00 1.046611736286e+00 5.216207405858e-05 7.475848815296e-05 9.113999497291e-03 9.554641566975e-04 1.000000000000e-03 +4.502801048595e-01 5.503469471796e-01 8.506544716324e-01 7.110794154679e-01 1.108714104362e+00 1.019508708736e+00 6.086603760954e-06 8.955201228983e-06 3.154397499961e-03 9.808645982435e-04 1.000000000000e-03 +5.500882977887e-01 5.500882977887e-01 8.501644256995e-01 7.779423312355e-01 1.152377464832e+00 1.005554920542e+00 2.171954970944e-07 3.239934875621e-07 5.999939699346e-04 9.944757661382e-04 1.000000000000e-03 +6.500156515596e-01 5.500128887698e-01 8.500237972816e-01 8.514895918832e-01 1.203152102201e+00 1.000919982307e+00 1.530972459259e-09 2.294347929388e-09 5.049035033645e-05 9.990808632826e-04 1.000000000000e-03 +7.500012446742e-01 5.500008380996e-01 8.500015431596e-01 9.300552612201e-01 1.259962464638e+00 1.000067878178e+00 1.018993879559e-12 1.528387075209e-12 1.303153046017e-06 9.999321264293e-04 1.000000000000e-03 +8.500000283497e-01 5.500000154051e-01 8.500000283497e-01 1.012422868736e+00 1.321930449507e+00 1.000001398777e+00 6.682923944979e-15 1.002437189561e-14 1.055376283376e-07 9.999986012250e-04 1.000000000000e-03 +9.500000000879e-01 5.500000000375e-01 8.500000000701e-01 1.097724920100e+00 1.388344337809e+00 1.000000003859e+00 6.666666714716e-15 1.000000003348e-14 1.054092555154e-07 9.999999961405e-04 1.000000000000e-03 +1.050000000000e+00 5.500000000000e-01 8.500000000000e-01 1.185326959113e+00 1.458595214581e+00 1.000000000000e+00 6.666666666671e-15 1.000000000000e-14 1.054092553390e-07 9.999999999997e-04 1.000000000000e-03 +1.150000000000e+00 5.500000000000e-01 8.500000000000e-01 1.274754878398e+00 1.532155344604e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +5.007366899692e-02 6.510048780690e-01 8.515826561091e-01 6.529278088706e-01 1.073083288372e+00 1.043026431978e+00 3.405506599325e-05 4.897536382945e-05 7.376792725949e-03 9.587484739991e-04 1.000000000000e-03 +1.501768340028e-01 6.508041457427e-01 8.512621287206e-01 6.679065185990e-01 1.082010318519e+00 1.035082093390e+00 2.125213843524e-05 3.079775783626e-05 5.849763322493e-03 9.661069458996e-04 1.000000000000e-03 +2.501842151115e-01 6.505023636775e-01 8.507833726432e-01 6.969544222120e-01 1.099808080443e+00 1.022827357407e+00 7.707764946241e-06 1.130361574280e-05 3.543948793022e-03 9.776821012440e-04 1.000000000000e-03 +3.501204436372e-01 6.502340487588e-01 8.503618697066e-01 7.385043285032e-01 1.126278807698e+00 1.011357314405e+00 1.367939495348e-06 2.028866765283e-06 1.501431452271e-03 9.887702256725e-04 1.000000000000e-03 +4.500506285498e-01 6.500760939801e-01 8.501166018218e-01 7.906607971959e-01 1.160966292756e+00 1.004035988442e+00 9.026504765337e-08 1.348533050993e-07 3.870878526458e-04 9.959802352820e-04 1.000000000000e-03 +5.500128887698e-01 6.500156515596e-01 8.500237972816e-01 8.514895918832e-01 1.203152102201e+00 1.000919982307e+00 1.530972459259e-09 2.294347929388e-09 5.049035033645e-05 9.990808632826e-04 1.000000000000e-03 +6.500017492884e-01 6.500017492884e-01 8.500026426486e-01 9.192412894098e-01 1.252002013044e+00 1.000114317000e+00 4.372517801198e-12 6.558027007825e-12 2.699388203901e-06 9.998856960671e-04 1.000000000000e-03 +7.500000969109e-01 6.500000795961e-01 8.500001192480e-01 9.924717874284e-01 1.306713607323e+00 1.000005733503e+00 7.547277597628e-15 1.132085148830e-14 1.121549101729e-07 9.999942665294e-04 1.000000000000e-03 +8.500000013765e-01 6.500000009237e-01 8.500000013765e-01 1.070046729606e+00 1.366565039023e+00 1.000000072682e+00 6.666672445836e-15 1.000000794193e-14 1.054092971966e-07 9.999999273180e-04 1.000000000000e-03 +9.500000000023e-01 6.500000000012e-01 8.500000000019e-01 1.151086443325e+00 1.430908802129e+00 1.000000000108e+00 6.666666667867e-15 1.000000000072e-14 1.054092553427e-07 9.999999998920e-04 1.000000000000e-03 +1.050000000000e+00 6.500000000000e-01 8.500000000000e-01 1.234908903523e+00 1.499166435056e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 1.000000000000e-03 1.000000000000e-03 +1.150000000000e+00 6.500000000000e-01 8.500000000000e-01 1.320984481362e+00 1.570827807241e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +5.001073480624e-02 7.501776842646e-01 8.502256294246e-01 7.518428237101e-01 1.134967511647e+00 1.007286554319e+00 2.965236342986e-07 4.415679426485e-07 7.004506031029e-04 9.927661554824e-04 1.000000000000e-03 +1.500244024175e-01 7.501348411096e-01 8.501708533052e-01 7.649899353372e-01 1.143678311842e+00 1.005647990613e+00 1.639219484307e-07 2.445019777707e-07 5.212186337706e-04 9.943837300271e-04 1.000000000000e-03 +2.500228304315e-01 7.500758320950e-01 8.500957063172e-01 7.906485753038e-01 1.160942668494e+00 1.003315024685e+00 4.467460836382e-08 6.679050038820e-08 2.724181842279e-04 9.966959283937e-04 1.000000000000e-03 +3.500127232443e-01 7.500301946228e-01 8.500379124613e-01 8.276800101965e-01 1.186431056531e+00 1.001405109424e+00 4.784267475180e-09 7.166331732519e-09 8.923335034565e-05 9.985968621385e-04 1.000000000000e-03 +4.500043215926e-01 7.500079470262e-01 8.500099192445e-01 8.746518221867e-01 1.219644486262e+00 1.000399153026e+00 1.503012174486e-10 2.253618722997e-10 1.582409808909e-05 9.996010062338e-04 1.000000000000e-03 +5.500008380996e-01 7.500012446742e-01 8.500015431596e-01 9.300552612201e-01 1.259962464638e+00 1.000067878178e+00 1.018993879559e-12 1.528387075209e-12 1.303153046017e-06 9.999321264293e-04 1.000000000000e-03 +6.500000795961e-01 7.500000969109e-01 8.500001192480e-01 9.924717874284e-01 1.306713607323e+00 1.000005733503e+00 7.547277597628e-15 1.132085148830e-14 1.121549101729e-07 9.999942665294e-04 1.000000000000e-03 +7.500000026856e-01 7.500000026856e-01 8.500000032846e-01 1.060660175578e+00 1.359227726925e+00 1.000000171210e+00 6.666714631423e-15 1.000007023502e-14 1.054096255094e-07 9.999998287898e-04 1.000000000000e-03 +8.500000000205e-01 7.500000000167e-01 8.500000000205e-01 1.133578404902e+00 1.416862731564e+00 1.000000001150e+00 6.666666679661e-15 1.000000000800e-14 1.054092553811e-07 9.999999988504e-04 1.000000000000e-03 +9.500000000000e-01 7.500000000000e-01 8.500000000000e-01 1.210371843691e+00 1.479019945775e+00 1.000000000001e+00 6.666666666675e-15 1.000000000001e-14 1.054092553390e-07 9.999999999993e-04 1.000000000000e-03 +1.050000000000e+00 7.500000000000e-01 8.500000000000e-01 1.290348790056e+00 1.545153714036e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 1.000000000000e-03 1.000000000000e-03 +1.150000000000e+00 7.500000000000e-01 8.500000000000e-01 1.372953021775e+00 1.614775526196e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +5.000052333172e-02 8.500111982899e-01 8.500111982899e-01 8.514805279933e-01 1.203136786392e+00 1.000430236596e+00 1.139772488409e-10 1.708923491188e-10 1.377970928248e-05 9.995699484281e-04 1.000000000000e-03 +1.500011145407e-01 8.500079476103e-01 8.500079476103e-01 8.631418454485e-01 1.211415435086e+00 1.000311652394e+00 5.459679816010e-11 8.186968235764e-11 9.537626210473e-06 9.996884447029e-04 1.000000000000e-03 +2.500009174635e-01 8.500039171250e-01 8.500039171250e-01 8.860062741654e-01 1.227808526191e+00 1.000159800910e+00 1.017237001464e-11 1.525611708056e-11 4.117188506812e-06 9.998402246219e-04 1.000000000000e-03 +3.500004231069e-01 8.500012812751e-01 8.500012812751e-01 9.192401614075e-01 1.252000260589e+00 1.000055233664e+00 5.721142134178e-13 8.581239227983e-13 9.764584094223e-07 9.999447693865e-04 1.000000000000e-03 +4.500001113505e-01 8.500002580167e-01 8.500002580167e-01 9.617694832152e-01 1.283550146069e+00 1.000011873277e+00 1.388621449257e-14 2.082907442948e-14 1.521296027496e-07 9.999881268639e-04 1.000000000000e-03 +5.500000154051e-01 8.500000283497e-01 8.500000283497e-01 1.012422868736e+00 1.321930449507e+00 1.000001398777e+00 6.682923944979e-15 1.002437189561e-14 1.055376283376e-07 9.999986012250e-04 1.000000000000e-03 +6.500000009237e-01 8.500000013765e-01 8.500000013765e-01 1.070046729606e+00 1.366565039023e+00 1.000000072682e+00 6.666672445836e-15 1.000000794193e-14 1.054092971966e-07 9.999999273180e-04 1.000000000000e-03 +7.500000000167e-01 8.500000000205e-01 8.500000000205e-01 1.133578404902e+00 1.416862731564e+00 1.000000001150e+00 6.666666679661e-15 1.000000000800e-14 1.054092553811e-07 9.999999988504e-04 1.000000000000e-03 +8.500000000001e-01 8.500000000001e-01 8.500000000001e-01 1.202081528017e+00 1.472243186434e+00 1.000000000003e+00 6.666666666703e-15 1.000000000002e-14 1.054092553391e-07 9.999999999967e-04 1.000000000000e-03 +9.500000000000e-01 8.500000000000e-01 8.500000000000e-01 1.274754878398e+00 1.532155344604e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 1.000000000000e-03 1.000000000000e-03 +1.050000000000e+00 8.500000000000e-01 8.500000000000e-01 1.350925608611e+00 1.596088969951e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 1.000000000000e-03 1.000000000000e-03 +1.150000000000e+00 8.500000000000e-01 8.500000000000e-01 1.430034964608e+00 1.663580475961e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +5.000000315800e-02 9.500000927861e-01 8.500000726904e-01 9.513149723459e-01 1.275735199868e+00 1.000003235463e+00 6.771122157914e-15 1.015665037540e-14 1.062316670479e-07 9.999967645474e-04 1.000000000000e-03 +1.500000064188e-01 9.500000624558e-01 8.500000489817e-01 9.617692657762e-01 1.283549844712e+00 1.000002219760e+00 6.712204174474e-15 1.006828391254e-14 1.057685308825e-07 9.999977802449e-04 1.000000000000e-03 +2.500000047996e-01 9.500000276254e-01 8.500000217134e-01 9.823441631567e-01 1.299038141011e+00 1.000001018502e+00 6.673041433184e-15 1.000955195503e-14 1.054595865461e-07 9.999989814990e-04 1.000000000000e-03 +3.500000018958e-01 9.500000076079e-01 8.500000060005e-01 1.012422844360e+00 1.321930416468e+00 1.000000295197e+00 6.666896609159e-15 1.000034196167e-14 1.054110576198e-07 9.999997048035e-04 1.000000000000e-03 +4.500000003933e-01 9.500000011830e-01 8.500000009376e-01 1.051189803319e+00 1.351850585011e+00 1.000000048757e+00 6.666669212162e-15 1.000000333067e-14 1.054092728931e-07 9.999999512427e-04 1.000000000000e-03 +5.500000000375e-01 9.500000000879e-01 8.500000000701e-01 1.097724920100e+00 1.388344337809e+00 1.000000003859e+00 6.666666714716e-15 1.000000003348e-14 1.054092555154e-07 9.999999961405e-04 1.000000000000e-03 +6.500000000012e-01 9.500000000023e-01 8.500000000019e-01 1.151086443325e+00 1.430908802129e+00 1.000000000108e+00 6.666666667867e-15 1.000000000072e-14 1.054092553427e-07 9.999999998920e-04 1.000000000000e-03 +7.500000000000e-01 9.500000000000e-01 8.500000000000e-01 1.210371843691e+00 1.479019945775e+00 1.000000000001e+00 6.666666666675e-15 1.000000000001e-14 1.054092553390e-07 9.999999999992e-04 1.000000000000e-03 +8.500000000000e-01 9.500000000000e-01 8.500000000000e-01 1.274754878398e+00 1.532155344604e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 1.000000000000e-03 1.000000000000e-03 +9.500000000000e-01 9.500000000000e-01 8.500000000000e-01 1.343502884254e+00 1.589811309558e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 1.000000000000e-03 1.000000000000e-03 +1.050000000000e+00 9.500000000000e-01 8.500000000000e-01 1.415980225851e+00 1.651514456491e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 1.000000000000e-03 1.000000000000e-03 +1.150000000000e+00 9.500000000000e-01 8.500000000000e-01 1.491643389018e+00 1.716828471339e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +5.000000000073e-02 1.050000000031e+00 8.500000000194e-01 1.051189802112e+00 1.351850583496e+00 1.000000000989e+00 6.666666677792e-15 1.000000000680e-14 1.054092553748e-07 9.999999990115e-04 1.000000000000e-03 +1.500000000014e-01 1.050000000020e+00 8.500000000123e-01 1.060660171799e+00 1.359227721930e+00 1.000000000639e+00 6.666666673808e-15 1.000000000432e-14 1.054092553617e-07 9.999999993612e-04 1.000000000000e-03 +2.500000000010e-01 1.050000000008e+00 8.500000000048e-01 1.079351657254e+00 1.373863166412e+00 1.000000000258e+00 6.666666669539e-15 1.000000000173e-14 1.054092553480e-07 9.999999997418e-04 1.000000000000e-03 +3.500000000003e-01 1.050000000002e+00 8.500000000011e-01 1.106797181061e+00 1.395528573697e+00 1.000000000061e+00 6.666666667340e-15 1.000000000040e-14 1.054092553411e-07 9.999999999394e-04 1.000000000000e-03 +4.500000000000e-01 1.050000000000e+00 8.500000000001e-01 1.142365965880e+00 1.423903086590e+00 1.000000000007e+00 6.666666666747e-15 1.000000000005e-14 1.054092553392e-07 9.999999999928e-04 1.000000000000e-03 +5.500000000000e-01 1.050000000000e+00 8.500000000000e-01 1.185326959113e+00 1.458595214581e+00 1.000000000000e+00 6.666666666671e-15 1.000000000000e-14 1.054092553390e-07 9.999999999997e-04 1.000000000000e-03 +6.500000000000e-01 1.050000000000e+00 8.500000000000e-01 1.234908903523e+00 1.499166435056e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 1.000000000000e-03 1.000000000000e-03 +7.500000000000e-01 1.050000000000e+00 8.500000000000e-01 1.290348790056e+00 1.545153714036e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 1.000000000000e-03 1.000000000000e-03 +8.500000000000e-01 1.050000000000e+00 8.500000000000e-01 1.350925608611e+00 1.596088969951e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 1.000000000000e-03 1.000000000000e-03 +9.500000000000e-01 1.050000000000e+00 8.500000000000e-01 1.415980225851e+00 1.651514456491e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 1.000000000000e-03 1.000000000000e-03 +1.050000000000e+00 1.050000000000e+00 8.500000000000e-01 1.484924240492e+00 1.710993863227e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 1.000000000000e-03 1.000000000000e-03 +1.150000000000e+00 1.050000000000e+00 8.500000000000e-01 1.557241150240e+00 1.774119499921e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +5.000000000000e-02 1.150000000000e+00 8.500000000000e-01 1.151086443322e+00 1.430908802125e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +1.500000000000e-01 1.150000000000e+00 8.500000000000e-01 1.159741350474e+00 1.437880384455e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +2.500000000000e-01 1.150000000000e+00 8.500000000000e-01 1.176860229594e+00 1.451723114096e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +3.500000000000e-01 1.150000000000e+00 8.500000000000e-01 1.202081528017e+00 1.472243186434e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +4.500000000000e-01 1.150000000000e+00 8.500000000000e-01 1.234908903523e+00 1.499166435057e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +5.500000000000e-01 1.150000000000e+00 8.500000000000e-01 1.274754878398e+00 1.532155344604e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +6.500000000000e-01 1.150000000000e+00 8.500000000000e-01 1.320984481362e+00 1.570827807241e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +7.500000000000e-01 1.150000000000e+00 8.500000000000e-01 1.372953021775e+00 1.614775526196e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +8.500000000000e-01 1.150000000000e+00 8.500000000000e-01 1.430034964608e+00 1.663580475961e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +9.500000000000e-01 1.150000000000e+00 8.500000000000e-01 1.491643389018e+00 1.716828471339e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +1.050000000000e+00 1.150000000000e+00 8.500000000000e-01 1.557241150240e+00 1.774119499921e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +1.150000000000e+00 1.150000000000e+00 8.500000000000e-01 1.626345596729e+00 1.835074930350e+00 9.999999999987e-01 6.666666666652e-15 9.999999999991e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +5.041660685549e-02 5.041660685549e-02 9.613635871544e-01 7.129984918387e-02 9.640039497845e-01 1.245124796664e+00 2.292758827239e-03 2.762083166339e-03 5.539838712393e-02 8.031323467970e-04 1.000000000000e-03 +1.510549173085e-01 5.035080953602e-02 9.595381845835e-01 1.592256011576e-01 9.726594058240e-01 1.202944594339e+00 1.529153286124e-03 1.906762738682e-03 4.602852664601e-02 8.312934815998e-04 1.000000000000e-03 +2.512219208086e-01 5.024304275092e-02 9.565745672447e-01 2.561968322201e-01 9.902887051457e-01 1.138338085681e+00 6.514533715184e-04 8.584269204109e-04 3.088377712239e-02 8.784736385252e-04 1.000000000000e-03 +3.509374039509e-01 5.013266291702e-02 9.535695696354e-01 3.545001345317e-01 1.017332428225e+00 1.076104499193e+00 1.603336170470e-04 2.234917015502e-04 1.575830298077e-02 9.292777799459e-04 1.000000000000e-03 +4.504901828009e-01 5.005357167828e-02 9.514363088533e-01 4.532623576227e-01 1.053887002786e+00 1.032281486974e+00 1.842448040133e-05 2.677246560238e-05 5.454097909155e-03 9.687280190706e-04 1.000000000000e-03 +5.501657739437e-01 5.001459272627e-02 9.503916243655e-01 5.524344651673e-01 1.099285257778e+00 1.009654138292e+00 7.324739230999e-07 1.088205201148e-06 1.099598513170e-03 9.904381729094e-04 1.000000000000e-03 +6.500320963490e-01 5.000230488719e-02 9.500623679944e-01 6.519524191058e-01 1.152241493723e+00 1.001728629626e+00 6.479764208033e-09 9.702873637226e-09 1.038314533657e-04 9.982743533782e-04 1.000000000000e-03 +7.500027840591e-01 5.000015884922e-02 9.500044120371e-01 7.516676073780e-01 1.211409334152e+00 1.000137628269e+00 5.033061008974e-12 7.548552619234e-12 2.896080228177e-06 9.998623906704e-04 1.000000000000e-03 +8.500000726904e-01 5.000000315800e-02 9.500000927861e-01 8.514693910468e-01 1.275735199868e+00 1.000003235463e+00 6.771122157914e-15 1.015665037540e-14 1.062316670479e-07 9.999967645474e-04 1.000000000000e-03 +9.500000002422e-01 5.000000000745e-02 9.500000002422e-01 9.513148797642e-01 1.344432966317e+00 1.000000009537e+00 6.666666796508e-15 1.000000009940e-14 1.054092558628e-07 9.999999904634e-04 1.000000000000e-03 +1.050000000000e+00 5.000000000000e-02 9.500000000000e-01 1.051189802081e+00 1.416862731530e+00 1.000000000001e+00 6.666666666673e-15 1.000000000000e-14 1.054092553390e-07 9.999999999995e-04 1.000000000000e-03 +1.150000000000e+00 5.000000000000e-02 9.500000000000e-01 1.151086443322e+00 1.492481155660e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +5.035080953602e-02 1.510549173085e-01 9.595381845835e-01 1.592256011576e-01 9.726594058240e-01 1.202944594339e+00 1.529153286124e-03 1.906762738682e-03 4.602852664601e-02 8.312934815998e-04 1.000000000000e-03 +1.508829780990e-01 1.508829780990e-01 9.579632080421e-01 2.133807539589e-01 9.814401938592e-01 1.168029730463e+00 1.012712457522e-03 1.300539401238e-03 3.801373145526e-02 8.561425911685e-04 1.000000000000e-03 +2.510109899805e-01 1.506045322793e-01 9.554301471184e-01 2.927255407955e-01 9.992672356566e-01 1.114309142144e+00 4.249390367289e-04 5.720212919255e-04 2.521069640550e-02 8.974170292422e-04 1.000000000000e-03 +3.507624628702e-01 1.503241852277e-01 9.529001775952e-01 3.816171720759e-01 1.026474751021e+00 1.062443128902e+00 1.015633055266e-04 1.433911652734e-04 1.262234197645e-02 9.412268504516e-04 1.000000000000e-03 +4.503896080748e-01 1.501278206315e-01 9.511407159535e-01 4.747516841353e-01 1.063041778640e+00 1.026082684860e+00 1.119241799494e-05 1.636186560803e-05 4.263783610315e-03 9.745803284231e-04 1.000000000000e-03 +5.501278698601e-01 1.500337660925e-01 9.503017832094e-01 5.702199612121e-01 1.108252806599e+00 1.007598311924e+00 4.198400424923e-07 6.250110349387e-07 8.333406899267e-04 9.924589870442e-04 1.000000000000e-03 +6.500238329268e-01 1.500051283654e-01 9.500462273445e-01 6.671075789621e-01 1.160870516466e+00 1.001309124772e+00 3.406033144264e-09 5.102370077331e-09 7.529475470392e-05 9.986925867947e-04 1.000000000000e-03 +7.500019785165e-01 1.500003386935e-01 9.500031309798e-01 7.648549335572e-01 1.219634788885e+00 1.000099669851e+00 2.414491229775e-12 3.621375902666e-12 2.005928962591e-06 9.999003400821e-04 1.000000000000e-03 +8.500000489817e-01 1.500000064188e-01 9.500000624558e-01 8.631338744335e-01 1.283549844712e+00 1.000002219760e+00 6.712204174474e-15 1.006828391254e-14 1.057685308825e-07 9.999977802449e-04 1.000000000000e-03 +9.500000001539e-01 1.500000000144e-01 9.500000001539e-01 9.617692032378e-01 1.351850583677e+00 1.000000006165e+00 6.666666746000e-15 1.000000005735e-14 1.054092556412e-07 9.999999938354e-04 1.000000000000e-03 +1.050000000000e+00 1.500000000000e-01 9.500000000000e-01 1.060660171780e+00 1.423903086590e+00 1.000000000000e+00 6.666666666670e-15 1.000000000000e-14 1.054092553390e-07 9.999999999997e-04 1.000000000000e-03 +1.150000000000e+00 1.500000000000e-01 9.500000000000e-01 1.159741350474e+00 1.499166435057e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +5.024304275092e-02 2.512219208086e-01 9.565745672447e-01 2.561968322201e-01 9.902887051457e-01 1.138338085681e+00 6.514533715184e-04 8.584269204109e-04 3.088377712239e-02 8.784736385252e-04 1.000000000000e-03 +1.506045322793e-01 2.510109899805e-01 9.554301471184e-01 2.927255407955e-01 9.992672356566e-01 1.114309142144e+00 4.249390367289e-04 5.720212919255e-04 2.521069640550e-02 8.974170292422e-04 1.000000000000e-03 +2.506762722762e-01 2.506762722762e-01 9.536225497178e-01 3.545097840181e-01 1.017385450208e+00 1.077174526575e+00 1.721571765080e-04 2.397343776622e-04 1.632089246138e-02 9.283546680031e-04 1.000000000000e-03 +3.504927547923e-01 2.503501898377e-01 9.518710374309e-01 4.307207781309e-01 1.044786514372e+00 1.041387029896e+00 3.855743412984e-05 5.553761429170e-05 7.855473271809e-03 9.602577824496e-04 1.000000000000e-03 +4.502404267812e-01 2.501317243472e-01 9.507029783717e-01 5.150556488701e-01 1.081257820558e+00 1.016700794325e+00 3.858717059976e-06 5.692998001252e-06 2.515065274446e-03 9.835735405950e-04 1.000000000000e-03 +5.500743564085e-01 2.500327480275e-01 9.501751470354e-01 6.042335414924e-01 1.126024414792e+00 1.004605670535e+00 1.252347012244e-07 1.869908336637e-07 4.558153057541e-04 9.954154444173e-04 1.000000000000e-03 +6.500128579779e-01 2.500046081855e-01 9.500248616288e-01 6.964330690387e-01 1.177950023288e+00 1.000734586391e+00 8.150297838859e-10 1.221647270370e-09 3.684271781460e-05 9.992659528305e-04 1.000000000000e-03 +7.500009779593e-01 2.500002795723e-01 9.500015431804e-01 7.905704312243e-01 1.235922545620e+00 1.000051094872e+00 4.533505821729e-13 6.799911291996e-13 8.692213176808e-07 9.999489077384e-04 1.000000000000e-03 +8.500000217134e-01 2.500000047996e-01 9.500000276254e-01 8.860022795188e-01 1.299038141011e+00 1.000001018502e+00 6.673041433184e-15 1.000955195503e-14 1.054595865461e-07 9.999989814990e-04 1.000000000000e-03 +9.500000000602e-01 2.500000000097e-01 9.500000000602e-01 9.823441352801e-01 1.366565036957e+00 1.000000002492e+00 6.666666696128e-15 1.000000001928e-14 1.054092554405e-07 9.999999975083e-04 1.000000000000e-03 +1.050000000000e+00 2.500000000000e-01 9.500000000000e-01 1.079351657246e+00 1.437880384455e+00 1.000000000000e+00 6.666666666668e-15 1.000000000000e-14 1.054092553390e-07 9.999999999999e-04 1.000000000000e-03 +1.150000000000e+00 2.500000000000e-01 9.500000000000e-01 1.176860229594e+00 1.512448346225e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +5.013266291702e-02 3.509374039509e-01 9.535695696354e-01 3.545001345317e-01 1.017332428225e+00 1.076104499193e+00 1.603336170470e-04 2.234917015502e-04 1.575830298077e-02 9.292777799459e-04 1.000000000000e-03 +1.503241852277e-01 3.507624628702e-01 9.529001775952e-01 3.816171720759e-01 1.026474751021e+00 1.062443128902e+00 1.015633055266e-04 1.433911652734e-04 1.262234197645e-02 9.412268504516e-04 1.000000000000e-03 +2.503501898377e-01 3.504927547923e-01 9.518710374309e-01 4.307207781309e-01 1.044786514372e+00 1.041387029896e+00 3.855743412984e-05 5.553761429170e-05 7.855473271809e-03 9.602577824496e-04 1.000000000000e-03 +3.502422399418e-01 3.502422399418e-01 9.509182978816e-01 4.953173258417e-01 1.072186953159e+00 1.021411450438e+00 7.703864957647e-06 1.131355775532e-05 3.545506977589e-03 9.790373894591e-04 1.000000000000e-03 +4.501102388861e-01 3.500849482142e-01 9.503218606868e-01 5.702268830178e-01 1.108273584010e+00 1.008142620304e+00 6.416533414135e-07 9.547062020153e-07 1.029944012510e-03 9.919231464477e-04 1.000000000000e-03 +5.500311787351e-01 3.500192876494e-01 9.500732532747e-01 6.519568998848e-01 1.152253004290e+00 1.002056179059e+00 1.580957054806e-08 2.366569491580e-08 1.621579987947e-04 9.979480401381e-04 1.000000000000e-03 +6.500048274600e-01 3.500024285734e-01 9.500092980881e-01 7.382465548369e-01 1.203131598032e+00 1.000291965268e+00 7.024492389352e-11 1.053366312025e-10 1.081853508272e-05 9.997081199507e-04 1.000000000000e-03 +7.500003211832e-01 3.500001294686e-01 9.500005045904e-01 8.276476136635e-01 1.259960924444e+00 1.000017658828e+00 3.131389040508e-14 4.697000617234e-14 2.284488908860e-07 9.999823414834e-04 1.000000000000e-03 +8.500000060005e-01 3.500000018958e-01 9.500000076079e-01 9.192388218129e-01 1.321930416468e+00 1.000000295197e+00 6.666896609159e-15 1.000034196167e-14 1.054110576198e-07 9.999997048035e-04 1.000000000000e-03 +9.500000000135e-01 3.500000000032e-01 9.500000000135e-01 1.012422836580e+00 1.388344337711e+00 1.000000000584e+00 6.666666673187e-15 1.000000000394e-14 1.054092553597e-07 9.999999994164e-04 1.000000000000e-03 +1.050000000000e+00 3.500000000000e-01 9.500000000000e-01 1.106797181059e+00 1.458595214581e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 1.000000000000e-03 1.000000000000e-03 +1.150000000000e+00 3.500000000000e-01 9.500000000000e-01 1.202081528017e+00 1.532155344604e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +5.005357167828e-02 4.504901828009e-01 9.514363088533e-01 4.532623576227e-01 1.053887002786e+00 1.032281486974e+00 1.842448040133e-05 2.677246560238e-05 5.454097909155e-03 9.687280190706e-04 1.000000000000e-03 +1.501278206315e-01 4.503896080748e-01 9.511407159535e-01 4.747516841353e-01 1.063041778640e+00 1.026082684860e+00 1.119241799494e-05 1.636186560803e-05 4.263783610315e-03 9.745803284231e-04 1.000000000000e-03 +2.501317243472e-01 4.502404267812e-01 9.507029783717e-01 5.150556488701e-01 1.081257820558e+00 1.016700794325e+00 3.858717059976e-06 5.692998001252e-06 2.515065274446e-03 9.835735405950e-04 1.000000000000e-03 +3.500849482142e-01 4.501102388861e-01 9.503218606868e-01 5.702268830178e-01 1.108273584010e+00 1.008142620304e+00 6.416533414135e-07 9.547062020153e-07 1.029944012510e-03 9.919231464477e-04 1.000000000000e-03 +4.500351762686e-01 4.500351762686e-01 9.501026289001e-01 6.364458498240e-01 1.143572614748e+00 1.002829617240e+00 3.970766135942e-08 5.939343136183e-08 2.568904465198e-04 9.971783669022e-04 1.000000000000e-03 +5.500088184875e-01 4.500070761401e-01 9.500206705734e-01 7.106448261897e-01 1.186404376048e+00 1.000629928302e+00 6.325229791215e-10 9.481871787431e-10 3.245830109101e-05 9.993704682583e-04 1.000000000000e-03 +6.500011789347e-01 4.500007697174e-01 9.500022608300e-01 7.905708224838e-01 1.235923347520e+00 1.000076462582e+00 1.666658435362e-12 2.499796512146e-12 1.666598836002e-06 9.999235432636e-04 1.000000000000e-03 +7.500000648316e-01 4.500000341591e-01 9.500001012292e-01 8.746428573941e-01 1.291317281045e+00 1.000003787797e+00 6.978684056960e-15 1.046798643484e-14 1.078475592617e-07 9.999962122176e-04 1.000000000000e-03 +8.500000009376e-01 4.500000003933e-01 9.500000011830e-01 9.617692040962e-01 1.351850585011e+00 1.000000048757e+00 6.666669212163e-15 1.000000333067e-14 1.054092728931e-07 9.999999512427e-04 1.000000000000e-03 +9.500000000015e-01 4.500000000005e-01 9.500000000015e-01 1.051189802083e+00 1.416862731533e+00 1.000000000069e+00 6.666666667432e-15 1.000000000046e-14 1.054092553414e-07 9.999999999311e-04 1.000000000000e-03 +1.050000000000e+00 4.500000000000e-01 9.500000000000e-01 1.142365965880e+00 1.485765795810e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 1.000000000000e-03 1.000000000000e-03 +1.150000000000e+00 4.500000000000e-01 9.500000000000e-01 1.234908903523e+00 1.558043645088e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +5.001459272627e-02 5.501657739437e-01 9.503916243655e-01 5.524344651673e-01 1.099285257778e+00 1.009654138292e+00 7.324739230999e-07 1.088205201148e-06 1.099598513170e-03 9.904381729094e-04 1.000000000000e-03 +1.500337660925e-01 5.501278698601e-01 9.503017832094e-01 5.702199612121e-01 1.108252806599e+00 1.007598311924e+00 4.198400424923e-07 6.250110349387e-07 8.333406899267e-04 9.924589870442e-04 1.000000000000e-03 +2.500327480275e-01 5.500743564085e-01 9.501751470354e-01 6.042335414924e-01 1.126024414792e+00 1.004605670535e+00 1.252347012244e-07 1.869908336637e-07 4.558153057541e-04 9.954154444173e-04 1.000000000000e-03 +3.500192876494e-01 5.500311787351e-01 9.500732532747e-01 6.519568998848e-01 1.152253004290e+00 1.002056179059e+00 1.580957054806e-08 2.366569491580e-08 1.621579987947e-04 9.979480401381e-04 1.000000000000e-03 +4.500070761401e-01 5.500088184875e-01 9.500206705734e-01 7.106448261897e-01 1.186404376048e+00 1.000629928302e+00 6.325229791215e-10 9.481871787431e-10 3.245830109101e-05 9.993704682583e-04 1.000000000000e-03 +5.500015244869e-01 5.500015244869e-01 9.500035698451e-01 7.778196152552e-01 1.227807043714e+00 1.000119205947e+00 5.885172591031e-12 8.826706690618e-12 3.131685149958e-06 9.998808082615e-04 1.000000000000e-03 +6.500001683268e-01 5.500001371321e-01 9.500003210142e-01 8.514695353741e-01 1.275735466152e+00 1.000011786521e+00 1.478739175934e-14 2.218082620422e-14 1.569884150157e-07 9.999882136176e-04 1.000000000000e-03 +7.500000070620e-01 5.500000046815e-01 9.500000109400e-01 9.300537703502e-01 1.329473593769e+00 1.000000440188e+00 6.667384175755e-15 1.000107186128e-14 1.054149043926e-07 9.999995598123e-04 1.000000000000e-03 +8.500000000701e-01 5.500000000375e-01 9.500000000879e-01 1.012422836645e+00 1.388344337809e+00 1.000000003859e+00 6.666666714716e-15 1.000000003348e-14 1.054092555154e-07 9.999999961405e-04 1.000000000000e-03 +9.500000000001e-01 5.500000000000e-01 9.500000000001e-01 1.097724920005e+00 1.451723114096e+00 1.000000000003e+00 6.666666666703e-15 1.000000000002e-14 1.054092553391e-07 9.999999999967e-04 1.000000000000e-03 +1.050000000000e+00 5.500000000000e-01 9.500000000000e-01 1.185326959113e+00 1.519045753096e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 1.000000000000e-03 1.000000000000e-03 +1.150000000000e+00 5.500000000000e-01 9.500000000000e-01 1.274754878398e+00 1.589811309558e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +5.000230488719e-02 6.500320963490e-01 9.500623679944e-01 6.519524191058e-01 1.152241493723e+00 1.001728629626e+00 6.479764208033e-09 9.702873637226e-09 1.038314533657e-04 9.982743533782e-04 1.000000000000e-03 +1.500051283654e-01 6.500238329268e-01 9.500462273445e-01 6.671075789621e-01 1.160870516466e+00 1.001309124772e+00 3.406033144265e-09 5.102370077331e-09 7.529475470392e-05 9.986925867947e-04 1.000000000000e-03 +2.500046081855e-01 6.500128579779e-01 9.500248616288e-01 6.964330690387e-01 1.177950023288e+00 1.000734586391e+00 8.150297838859e-10 1.221647270370e-09 3.684271781460e-05 9.992659528305e-04 1.000000000000e-03 +3.500024285734e-01 6.500048274600e-01 9.500092980881e-01 7.382465548369e-01 1.203131598032e+00 1.000291965268e+00 7.024492389352e-11 1.053366312025e-10 1.081853508272e-05 9.997081199507e-04 1.000000000000e-03 +4.500007697174e-01 6.500011789347e-01 9.500022608300e-01 7.905708224838e-01 1.235923347520e+00 1.000076462582e+00 1.666658435362e-12 2.499796512146e-12 1.666598836002e-06 9.999235432636e-04 1.000000000000e-03 +5.500001371321e-01 6.500001683268e-01 9.500003210142e-01 8.514695353741e-01 1.275735466152e+00 1.000011786521e+00 1.478739175934e-14 2.218082620422e-14 1.569884150157e-07 9.999882136176e-04 1.000000000000e-03 +6.500000116056e-01 6.500000116056e-01 9.500000219549e-01 9.192388319553e-01 1.321930433831e+00 1.000000876948e+00 6.671604131745e-15 1.000739742165e-14 1.054482359667e-07 9.999991230527e-04 1.000000000000e-03 +7.500000003266e-01 6.500000002674e-01 9.500000005015e-01 9.924716624859e-01 1.373863167055e+00 1.000000021658e+00 6.666667169184e-15 1.000000053720e-14 1.054092581702e-07 9.999999783420e-04 1.000000000000e-03 +8.500000000019e-01 6.500000000012e-01 9.500000000023e-01 1.070046727954e+00 1.430908802129e+00 1.000000000108e+00 6.666666667867e-15 1.000000000072e-14 1.054092553427e-07 9.999999998920e-04 1.000000000000e-03 +9.500000000000e-01 6.500000000000e-01 9.500000000000e-01 1.151086443322e+00 1.492481155660e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 1.000000000000e-03 1.000000000000e-03 +1.050000000000e+00 6.500000000000e-01 9.500000000000e-01 1.234908903523e+00 1.558043645088e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 1.000000000000e-03 1.000000000000e-03 +1.150000000000e+00 6.500000000000e-01 9.500000000000e-01 1.320984481362e+00 1.627114009527e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +5.000015884922e-02 7.500027840591e-01 9.500044120371e-01 7.516676073780e-01 1.211409334152e+00 1.000137628269e+00 5.033061008974e-12 7.548552619234e-12 2.896080228177e-06 9.998623906704e-04 1.000000000000e-03 +1.500003386935e-01 7.500019785165e-01 9.500031309798e-01 7.648549335572e-01 1.219634788885e+00 1.000099669851e+00 2.414491229775e-12 3.621375902666e-12 2.005928962591e-06 9.999003400821e-04 1.000000000000e-03 +2.500002795723e-01 7.500009779593e-01 9.500015431804e-01 7.905704312243e-01 1.235922545620e+00 1.000051094872e+00 4.533505821729e-13 6.799911291996e-13 8.692213176808e-07 9.999489077384e-04 1.000000000000e-03 +3.500001294686e-01 7.500003211832e-01 9.500005045904e-01 8.276476136635e-01 1.259960924444e+00 1.000017658828e+00 3.131389040508e-14 4.697000617234e-14 2.284488908860e-07 9.999823414834e-04 1.000000000000e-03 +4.500000341591e-01 7.500000648316e-01 9.500001012292e-01 8.746428573941e-01 1.291317281045e+00 1.000003787797e+00 6.978684056960e-15 1.046798643484e-14 1.078475592617e-07 9.999962122176e-04 1.000000000000e-03 +5.500000046815e-01 7.500000070620e-01 9.500000109400e-01 9.300537703502e-01 1.329473593769e+00 1.000000440188e+00 6.667384175755e-15 1.000107186128e-14 1.054149043926e-07 9.999995598123e-04 1.000000000000e-03 +6.500000002674e-01 7.500000003266e-01 9.500000005015e-01 9.924716624859e-01 1.373863167055e+00 1.000000021658e+00 6.666667169184e-15 1.000000053720e-14 1.054092581702e-07 9.999999783420e-04 1.000000000000e-03 +7.500000000044e-01 7.500000000044e-01 9.500000000067e-01 1.060660171786e+00 1.423903086599e+00 1.000000000310e+00 6.666666670112e-15 1.000000000207e-14 1.054092553499e-07 9.999999996903e-04 1.000000000000e-03 +8.500000000000e-01 7.500000000000e-01 9.500000000000e-01 1.133578404875e+00 1.479019945775e+00 1.000000000001e+00 6.666666666675e-15 1.000000000001e-14 1.054092553390e-07 9.999999999992e-04 1.000000000000e-03 +9.500000000000e-01 7.500000000000e-01 9.500000000000e-01 1.210371843691e+00 1.538668255343e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 1.000000000000e-03 1.000000000000e-03 +1.050000000000e+00 7.500000000000e-01 9.500000000000e-01 1.290348790056e+00 1.602342035896e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 1.000000000000e-03 1.000000000000e-03 +1.150000000000e+00 7.500000000000e-01 9.500000000000e-01 1.372953021775e+00 1.669580785706e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +5.000000315800e-02 8.500000726904e-01 9.500000927861e-01 8.514693910468e-01 1.275735199868e+00 1.000003235463e+00 6.771122157914e-15 1.015665037540e-14 1.062316670479e-07 9.999967645474e-04 1.000000000000e-03 +1.500000064188e-01 8.500000489817e-01 9.500000624558e-01 8.631338744335e-01 1.283549844712e+00 1.000002219760e+00 6.712204174474e-15 1.006828391254e-14 1.057685308825e-07 9.999977802449e-04 1.000000000000e-03 +2.500000047996e-01 8.500000217134e-01 9.500000276254e-01 8.860022795188e-01 1.299038141011e+00 1.000001018502e+00 6.673041433184e-15 1.000955195503e-14 1.054595865461e-07 9.999989814990e-04 1.000000000000e-03 +3.500000018958e-01 8.500000060005e-01 9.500000076079e-01 9.192388218129e-01 1.321930416468e+00 1.000000295197e+00 6.666896609159e-15 1.000034196167e-14 1.054110576198e-07 9.999997048035e-04 1.000000000000e-03 +4.500000003933e-01 8.500000009376e-01 9.500000011830e-01 9.617692040962e-01 1.351850585011e+00 1.000000048757e+00 6.666669212162e-15 1.000000333067e-14 1.054092728931e-07 9.999999512427e-04 1.000000000000e-03 +5.500000000375e-01 8.500000000701e-01 9.500000000879e-01 1.012422836645e+00 1.388344337809e+00 1.000000003859e+00 6.666666714716e-15 1.000000003348e-14 1.054092555154e-07 9.999999961405e-04 1.000000000000e-03 +6.500000000012e-01 8.500000000019e-01 9.500000000023e-01 1.070046727954e+00 1.430908802129e+00 1.000000000108e+00 6.666666667867e-15 1.000000000072e-14 1.054092553427e-07 9.999999998920e-04 1.000000000000e-03 +7.500000000000e-01 8.500000000000e-01 9.500000000000e-01 1.133578404875e+00 1.479019945775e+00 1.000000000001e+00 6.666666666675e-15 1.000000000001e-14 1.054092553390e-07 9.999999999992e-04 1.000000000000e-03 +8.500000000000e-01 8.500000000000e-01 9.500000000000e-01 1.202081528017e+00 1.532155344604e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 1.000000000000e-03 1.000000000000e-03 +9.500000000000e-01 8.500000000000e-01 9.500000000000e-01 1.274754878398e+00 1.589811309558e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 1.000000000000e-03 1.000000000000e-03 +1.050000000000e+00 8.500000000000e-01 9.500000000000e-01 1.350925608611e+00 1.651514456491e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 1.000000000000e-03 1.000000000000e-03 +1.150000000000e+00 8.500000000000e-01 9.500000000000e-01 1.430034964608e+00 1.716828471339e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +5.000000000745e-02 9.500000002422e-01 9.500000002422e-01 9.513148797642e-01 1.344432966317e+00 1.000000009537e+00 6.666666796508e-15 1.000000009940e-14 1.054092558628e-07 9.999999904634e-04 1.000000000000e-03 +1.500000000144e-01 9.500000001539e-01 9.500000001539e-01 9.617692032378e-01 1.351850583677e+00 1.000000006165e+00 6.666666746000e-15 1.000000005735e-14 1.054092556412e-07 9.999999938354e-04 1.000000000000e-03 +2.500000000097e-01 9.500000000602e-01 9.500000000602e-01 9.823441352801e-01 1.366565036957e+00 1.000000002492e+00 6.666666696128e-15 1.000000001928e-14 1.054092554405e-07 9.999999975083e-04 1.000000000000e-03 +3.500000000032e-01 9.500000000135e-01 9.500000000135e-01 1.012422836580e+00 1.388344337711e+00 1.000000000584e+00 6.666666673187e-15 1.000000000394e-14 1.054092553597e-07 9.999999994164e-04 1.000000000000e-03 +4.500000000005e-01 9.500000000015e-01 9.500000000015e-01 1.051189802083e+00 1.416862731533e+00 1.000000000069e+00 6.666666667432e-15 1.000000000046e-14 1.054092553414e-07 9.999999999311e-04 1.000000000000e-03 +5.500000000000e-01 9.500000000001e-01 9.500000000001e-01 1.097724920005e+00 1.451723114096e+00 1.000000000003e+00 6.666666666703e-15 1.000000000002e-14 1.054092553391e-07 9.999999999967e-04 1.000000000000e-03 +6.500000000000e-01 9.500000000000e-01 9.500000000000e-01 1.151086443322e+00 1.492481155660e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 1.000000000000e-03 1.000000000000e-03 +7.500000000000e-01 9.500000000000e-01 9.500000000000e-01 1.210371843691e+00 1.538668255343e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 1.000000000000e-03 1.000000000000e-03 +8.500000000000e-01 9.500000000000e-01 9.500000000000e-01 1.274754878398e+00 1.589811309558e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 1.000000000000e-03 1.000000000000e-03 +9.500000000000e-01 9.500000000000e-01 9.500000000000e-01 1.343502884254e+00 1.645448267190e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 1.000000000000e-03 1.000000000000e-03 +1.050000000000e+00 9.500000000000e-01 9.500000000000e-01 1.415980225851e+00 1.705139290498e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 1.000000000000e-03 1.000000000000e-03 +1.150000000000e+00 9.500000000000e-01 9.500000000000e-01 1.491643389018e+00 1.768473918383e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +5.000000000000e-02 1.050000000000e+00 9.500000000000e-01 1.051189802081e+00 1.416862731530e+00 1.000000000001e+00 6.666666666673e-15 1.000000000000e-14 1.054092553390e-07 9.999999999995e-04 1.000000000000e-03 +1.500000000000e-01 1.050000000000e+00 9.500000000000e-01 1.060660171780e+00 1.423903086590e+00 1.000000000000e+00 6.666666666670e-15 1.000000000000e-14 1.054092553390e-07 9.999999999997e-04 1.000000000000e-03 +2.500000000000e-01 1.050000000000e+00 9.500000000000e-01 1.079351657246e+00 1.437880384455e+00 1.000000000000e+00 6.666666666668e-15 1.000000000000e-14 1.054092553390e-07 9.999999999999e-04 1.000000000000e-03 +3.500000000000e-01 1.050000000000e+00 9.500000000000e-01 1.106797181059e+00 1.458595214581e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 1.000000000000e-03 1.000000000000e-03 +4.500000000000e-01 1.050000000000e+00 9.500000000000e-01 1.142365965880e+00 1.485765795810e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 1.000000000000e-03 1.000000000000e-03 +5.500000000000e-01 1.050000000000e+00 9.500000000000e-01 1.185326959113e+00 1.519045753096e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 1.000000000000e-03 1.000000000000e-03 +6.500000000000e-01 1.050000000000e+00 9.500000000000e-01 1.234908903523e+00 1.558043645088e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 1.000000000000e-03 1.000000000000e-03 +7.500000000000e-01 1.050000000000e+00 9.500000000000e-01 1.290348790056e+00 1.602342035896e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 1.000000000000e-03 1.000000000000e-03 +8.500000000000e-01 1.050000000000e+00 9.500000000000e-01 1.350925608611e+00 1.651514456491e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 1.000000000000e-03 1.000000000000e-03 +9.500000000000e-01 1.050000000000e+00 9.500000000000e-01 1.415980225851e+00 1.705139290498e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 1.000000000000e-03 1.000000000000e-03 +1.050000000000e+00 1.050000000000e+00 9.500000000000e-01 1.484924240492e+00 1.762810256380e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 1.000000000000e-03 1.000000000000e-03 +1.150000000000e+00 1.050000000000e+00 9.500000000000e-01 1.557241150240e+00 1.824143634695e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +5.000000000000e-02 1.150000000000e+00 9.500000000000e-01 1.151086443322e+00 1.492481155660e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +1.500000000000e-01 1.150000000000e+00 9.500000000000e-01 1.159741350474e+00 1.499166435057e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +2.500000000000e-01 1.150000000000e+00 9.500000000000e-01 1.176860229594e+00 1.512448346225e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +3.500000000000e-01 1.150000000000e+00 9.500000000000e-01 1.202081528017e+00 1.532155344604e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +4.500000000000e-01 1.150000000000e+00 9.500000000000e-01 1.234908903523e+00 1.558043645088e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +5.500000000000e-01 1.150000000000e+00 9.500000000000e-01 1.274754878398e+00 1.589811309558e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +6.500000000000e-01 1.150000000000e+00 9.500000000000e-01 1.320984481362e+00 1.627114009527e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +7.500000000000e-01 1.150000000000e+00 9.500000000000e-01 1.372953021775e+00 1.669580785706e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +8.500000000000e-01 1.150000000000e+00 9.500000000000e-01 1.430034964608e+00 1.716828471339e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +9.500000000000e-01 1.150000000000e+00 9.500000000000e-01 1.491643389018e+00 1.768473918383e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +1.050000000000e+00 1.150000000000e+00 9.500000000000e-01 1.557241150240e+00 1.824143634695e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +1.150000000000e+00 1.150000000000e+00 9.500000000000e-01 1.626345596729e+00 1.883480820184e+00 9.999999999987e-01 6.666666666652e-15 9.999999999991e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +5.001324706222e-02 5.001324706222e-02 1.050433724972e+00 7.072941229371e-02 1.052812262619e+00 1.008195500791e+00 3.985499055994e-07 5.929652115392e-07 8.116959005955e-04 9.918711194564e-04 1.000000000000e-03 +1.500301947207e-01 5.001004310366e-02 1.050330492593e+00 1.581457041439e-01 1.062169575637e+00 1.006363910418e+00 2.234219631335e-07 3.330136755012e-07 6.082887431158e-04 9.936763328330e-04 1.000000000000e-03 +2.500283957581e-01 5.000563419205e-02 1.050187292846e+00 2.549799249673e-01 1.080697974548e+00 1.003751619848e+00 6.106323594557e-08 9.125250919371e-08 3.184205974523e-04 9.962624021983e-04 1.000000000000e-03 +3.500159366535e-01 5.000223109000e-02 1.050075302017e+00 3.535694825991e-01 1.108002490490e+00 1.001601459830e+00 6.366458072343e-09 9.534418120891e-09 1.029261770013e-04 9.984011007429e-04 1.000000000000e-03 +4.500054502267e-01 5.000057964117e-02 1.050019962653e+00 4.527747378092e-01 1.143480163872e+00 1.000458122364e+00 1.992087600098e-10 2.986763097177e-10 1.821709544228e-05 9.995420874164e-04 1.000000000000e-03 +5.500010549623e-01 5.000008783269e-02 1.050003103667e+00 5.522691094411e-01 1.186384291431e+00 1.000077669558e+00 1.327392243880e-12 1.990933730878e-12 1.487329348149e-06 9.999223364740e-04 1.000000000000e-03 +6.500000963087e-01 5.000000625770e-02 1.050000230402e+00 6.519203370252e-01 1.235920956078e+00 1.000006287807e+00 7.620983203393e-15 1.143140292663e-14 1.127011925730e-07 9.999937122325e-04 1.000000000000e-03 +7.500000030387e-01 5.000000015251e-02 1.050000005959e+00 7.516648219607e-01 1.291317163631e+00 1.000000176134e+00 6.666704962727e-15 1.000005568274e-14 1.054095488123e-07 9.999998238656e-04 1.000000000000e-03 +8.500000000194e-01 5.000000000073e-02 1.050000000031e+00 8.514693183157e-01 1.351850583496e+00 1.000000000989e+00 6.666666677792e-15 1.000000000680e-14 1.054092553748e-07 9.999999990115e-04 1.000000000000e-03 +9.500000000000e-01 5.000000000000e-02 1.050000000000e+00 9.513148795220e-01 1.416862731530e+00 1.000000000001e+00 6.666666666673e-15 1.000000000000e-14 1.054092553390e-07 9.999999999995e-04 1.000000000000e-03 +1.050000000000e+00 5.000000000000e-02 1.050000000000e+00 1.051189802081e+00 1.485765795810e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 1.000000000000e-03 1.000000000000e-03 +1.150000000000e+00 5.000000000000e-02 1.050000000000e+00 1.151086443322e+00 1.558043645088e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +5.001004310366e-02 1.500301947207e-01 1.050330492593e+00 1.581457041439e-01 1.062169575637e+00 1.006363910418e+00 2.234219631335e-07 3.330136755012e-07 6.082887431158e-04 9.936763328330e-04 1.000000000000e-03 +1.500227731945e-01 1.500227731945e-01 1.050250450665e+00 2.121642405165e-01 1.071466132958e+00 1.004917558368e+00 1.233412003012e-07 1.841064462565e-07 4.522861020005e-04 9.951065056763e-04 1.000000000000e-03 +2.500212059279e-01 1.500126501740e-01 1.050140445876e+00 2.915722871363e-01 1.089866668309e+00 1.002870707846e+00 3.276590156800e-08 4.900816423043e-08 2.333527711676e-04 9.971375095281e-04 1.000000000000e-03 +3.500117333255e-01 1.500049381385e-01 1.050055605028e+00 3.808013851490e-01 1.116972008862e+00 1.001207244040e+00 3.339939030012e-09 5.003867655612e-09 7.456442148022e-05 9.987942116406e-04 1.000000000000e-03 +4.500039363165e-01 1.500012582639e-01 1.050014436149e+00 4.743457812410e-01 1.152186719374e+00 1.000338242690e+00 1.004636174847e-10 1.506444718357e-10 1.293764841399e-05 9.996618716791e-04 1.000000000000e-03 +5.500007427352e-01 1.500001859320e-01 1.050002184931e+00 5.700884780356e-01 1.194782599952e+00 1.000055781334e+00 6.341347735406e-13 9.511491039446e-13 1.028023510294e-06 9.999442217769e-04 1.000000000000e-03 +6.500000659017e-01 1.500000129100e-01 1.050000157658e+00 6.670832703233e-01 1.243985699527e+00 1.000004383206e+00 7.094857988261e-15 1.064224033526e-14 1.087414892469e-07 9.999956168133e-04 1.000000000000e-03 +7.500000020070e-01 1.500000003049e-01 1.050000003933e+00 7.648529290667e-01 1.299038110050e+00 1.000000118309e+00 6.666684007659e-15 1.000002482839e-14 1.054093861960e-07 9.999998816906e-04 1.000000000000e-03 +8.500000000123e-01 1.500000000014e-01 1.050000000020e+00 8.631338250940e-01 1.359227721930e+00 1.000000000639e+00 6.666666673808e-15 1.000000000432e-14 1.054092553617e-07 9.999999993612e-04 1.000000000000e-03 +9.500000000000e-01 1.500000000000e-01 1.050000000000e+00 9.617692030836e-01 1.423903086590e+00 1.000000000000e+00 6.666666666670e-15 1.000000000000e-14 1.054092553390e-07 9.999999999997e-04 1.000000000000e-03 +1.050000000000e+00 1.500000000000e-01 1.050000000000e+00 1.060660171780e+00 1.492481155660e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 1.000000000000e-03 1.000000000000e-03 +1.150000000000e+00 1.500000000000e-01 1.050000000000e+00 1.159741350474e+00 1.564448784716e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +5.000563419205e-02 2.500283957581e-01 1.050187292846e+00 2.549799249673e-01 1.080697974548e+00 1.003751619848e+00 6.106323594557e-08 9.125250919371e-08 3.184205974523e-04 9.962624021983e-04 1.000000000000e-03 +1.500126501740e-01 2.500212059279e-01 1.050140445876e+00 2.915722871363e-01 1.089866668309e+00 1.002870707846e+00 3.276590156800e-08 4.900816423043e-08 2.333527711676e-04 9.971375095281e-04 1.000000000000e-03 +2.500115557371e-01 2.500115557371e-01 1.050077153787e+00 3.535697328734e-01 1.108004325311e+00 1.001643019191e+00 8.292997614844e-09 1.241909161640e-08 1.174691052358e-04 9.983596758928e-04 1.000000000000e-03 +3.500062159881e-01 2.500043850086e-01 1.050029626137e+00 4.301238702442e-01 1.134710870450e+00 1.000670309941e+00 7.874777002134e-10 1.180425299507e-09 3.621579304833e-05 9.993301390735e-04 1.000000000000e-03 +4.500020073429e-01 2.500010753230e-01 1.050007379972e+00 5.147837840058e-01 1.169409185132e+00 1.000180093289e+00 2.109138575369e-11 3.163138203091e-11 5.928404510013e-06 9.998199391388e-04 1.000000000000e-03 +5.500003604437e-01 2.500001513532e-01 1.050001060819e+00 6.041526894460e-01 1.211405258321e+00 1.000028144139e+00 1.186538238796e-13 1.779757268458e-13 4.446918119400e-07 9.999718566531e-04 1.000000000000e-03 +6.500000301824e-01 2.500000099645e-01 1.050000072198e+00 6.964194456069e-01 1.259960394550e+00 1.000002080336e+00 6.731611647449e-15 1.009739646519e-14 1.059213359327e-07 9.999979196679e-04 1.000000000000e-03 +7.500000008535e-01 2.500000002202e-01 1.050000001670e+00 7.905694159215e-01 1.314343944673e+00 1.000000051969e+00 6.666669630824e-15 1.000000392655e-14 1.054092760337e-07 9.999999480309e-04 1.000000000000e-03 +8.500000000048e-01 2.500000000010e-01 1.050000000008e+00 8.860022573384e-01 1.373863166412e+00 1.000000000258e+00 6.666666669539e-15 1.000000000173e-14 1.054092553480e-07 9.999999997418e-04 1.000000000000e-03 +9.500000000000e-01 2.500000000000e-01 1.050000000000e+00 9.823441352194e-01 1.437880384455e+00 1.000000000000e+00 6.666666666668e-15 1.000000000000e-14 1.054092553390e-07 9.999999999999e-04 1.000000000000e-03 +1.050000000000e+00 2.500000000000e-01 1.050000000000e+00 1.079351657246e+00 1.505822034638e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 1.000000000000e-03 1.000000000000e-03 +1.150000000000e+00 2.500000000000e-01 1.050000000000e+00 1.176860229594e+00 1.577181029559e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +5.000223109000e-02 3.500159366535e-01 1.050075302017e+00 3.535694825991e-01 1.108002490490e+00 1.001601459830e+00 6.366458072343e-09 9.534418120891e-09 1.029261770013e-04 9.984011007429e-04 1.000000000000e-03 +1.500049381385e-01 3.500117333255e-01 1.050055605028e+00 3.808013851490e-01 1.116972008862e+00 1.001207244040e+00 3.339939030012e-09 5.003867655612e-09 7.456442148022e-05 9.987942116406e-04 1.000000000000e-03 +2.500043850086e-01 3.500062159881e-01 1.050029626137e+00 4.301238702442e-01 1.134710870450e+00 1.000670309941e+00 7.874777002134e-10 1.180425299507e-09 3.621579304833e-05 9.993301390735e-04 1.000000000000e-03 +3.500022611942e-01 3.500022611942e-01 1.050010866944e+00 4.949779446420e-01 1.160829869698e+00 1.000261057769e+00 6.509102942994e-11 9.761106201886e-11 1.041425636215e-05 9.997390103647e-04 1.000000000000e-03 +4.500006898725e-01 3.500005238764e-01 1.050002546872e+00 5.700885787310e-01 1.194782966081e+00 1.000065844045e+00 1.415226714461e-12 2.122700304518e-12 1.535759061151e-06 9.999341602902e-04 1.000000000000e-03 +5.500001152263e-01 3.500000686928e-01 1.050000339723e+00 6.519203746118e-01 1.235921068779e+00 1.000009510564e+00 1.243743699713e-14 1.865597806684e-14 1.439752218915e-07 9.999904895269e-04 1.000000000000e-03 +6.500000088075e-01 3.500000041513e-01 1.050000021058e+00 7.382411627345e-01 1.283549788118e+00 1.000000637962e+00 6.669260533274e-15 1.000388441781e-14 1.054297260307e-07 9.999993620385e-04 1.000000000000e-03 +7.500000002207e-01 3.500000000822e-01 1.050000000431e+00 8.276472680971e-01 1.336974196196e+00 1.000000014055e+00 6.666666932853e-15 1.000000025873e-14 1.054092567026e-07 9.999999859449e-04 1.000000000000e-03 +8.500000000011e-01 3.500000000003e-01 1.050000000002e+00 9.192388155436e-01 1.395528573697e+00 1.000000000061e+00 6.666666667340e-15 1.000000000040e-14 1.054092553411e-07 9.999999999394e-04 1.000000000000e-03 +9.500000000000e-01 3.500000000000e-01 1.050000000000e+00 1.012422836566e+00 1.458595214581e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 1.000000000000e-03 1.000000000000e-03 +1.050000000000e+00 3.500000000000e-01 1.050000000000e+00 1.106797181059e+00 1.525614630239e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 1.000000000000e-03 1.000000000000e-03 +1.150000000000e+00 3.500000000000e-01 1.050000000000e+00 1.202081528017e+00 1.596088969951e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +5.000057964117e-02 4.500054502267e-01 1.050019962653e+00 4.527747378092e-01 1.143480163872e+00 1.000458122364e+00 1.992087600098e-10 2.986763097177e-10 1.821709544228e-05 9.995420874164e-04 1.000000000000e-03 +1.500012582639e-01 4.500039363165e-01 1.050014436149e+00 4.743457812410e-01 1.152186719374e+00 1.000338242690e+00 1.004636174847e-10 1.506444718357e-10 1.293764841399e-05 9.996618716791e-04 1.000000000000e-03 +2.500010753230e-01 4.500020073429e-01 1.050007379972e+00 5.147837840058e-01 1.169409185132e+00 1.000180093289e+00 2.109138575369e-11 3.163138203091e-11 5.928404510013e-06 9.998199391388e-04 1.000000000000e-03 +3.500005238764e-01 4.500006898725e-01 1.050002546872e+00 5.700885787310e-01 1.194782966081e+00 1.000065844045e+00 1.415226714461e-12 2.122700304518e-12 1.535759061151e-06 9.999341602902e-04 1.000000000000e-03 +4.500001481584e-01 4.500001481584e-01 1.050000551023e+00 6.363963125955e-01 1.227803495610e+00 1.000015265716e+00 2.944712784331e-14 4.417001747802e-14 2.215350924748e-07 9.999847345171e-04 1.000000000000e-03 +5.500000224497e-01 4.500000176537e-01 1.050000066408e+00 7.106335487317e-01 1.267872304312e+00 1.000001982789e+00 6.734464171964e-15 1.010167622845e-14 1.059437808381e-07 9.999980172148e-04 1.000000000000e-03 +6.500000014986e-01 4.500000009369e-01 1.050000003579e+00 7.905694168075e-01 1.314343946730e+00 1.000000115124e+00 6.666692405012e-15 1.000003745627e-14 1.054094527506e-07 9.999998848757e-04 1.000000000000e-03 +7.500000000313e-01 4.500000000156e-01 1.050000000061e+00 8.746427842616e-01 1.366565036941e+00 1.000000002098e+00 6.666666691555e-15 1.000000001635e-14 1.054092554251e-07 9.999999979020e-04 1.000000000000e-03 +8.500000000001e-01 4.500000000000e-01 1.050000000000e+00 9.617692030837e-01 1.423903086590e+00 1.000000000007e+00 6.666666666747e-15 1.000000000005e-14 1.054092553392e-07 9.999999999928e-04 1.000000000000e-03 +9.500000000000e-01 4.500000000000e-01 1.050000000000e+00 1.051189802081e+00 1.485765795810e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 1.000000000000e-03 1.000000000000e-03 +1.050000000000e+00 4.500000000000e-01 1.050000000000e+00 1.142365965880e+00 1.551612064918e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 1.000000000000e-03 1.000000000000e-03 +1.150000000000e+00 4.500000000000e-01 1.050000000000e+00 1.234908903523e+00 1.620956507745e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +5.000008783269e-02 5.500010549623e-01 1.050003103667e+00 5.522691094411e-01 1.186384291431e+00 1.000077669558e+00 1.327392243880e-12 1.990933730878e-12 1.487329348149e-06 9.999223364740e-04 1.000000000000e-03 +1.500001859320e-01 5.500007427352e-01 1.050002184931e+00 5.700884780356e-01 1.194782599952e+00 1.000055781334e+00 6.341347735406e-13 9.511491039446e-13 1.028023510294e-06 9.999442217769e-04 1.000000000000e-03 +2.500001513532e-01 5.500003604437e-01 1.050001060819e+00 6.041526894460e-01 1.211405258321e+00 1.000028144139e+00 1.186538238796e-13 1.779757268458e-13 4.446918119400e-07 9.999718566531e-04 1.000000000000e-03 +3.500000686928e-01 5.500001152263e-01 1.050000339723e+00 6.519203746118e-01 1.235921068779e+00 1.000009510564e+00 1.243743699713e-14 1.865597806684e-14 1.439752218915e-07 9.999904895269e-04 1.000000000000e-03 +4.500000176537e-01 5.500000224497e-01 1.050000066408e+00 7.106335487317e-01 1.267872304312e+00 1.000001982789e+00 6.734464171964e-15 1.010167622845e-14 1.059437808381e-07 9.999980172148e-04 1.000000000000e-03 +5.500000023404e-01 5.500000023404e-01 1.050000006953e+00 7.778174626150e-01 1.306713442095e+00 1.000000222624e+00 6.666817479565e-15 1.000022399306e-14 1.054104358794e-07 9.999997773762e-04 1.000000000000e-03 +6.500000001277e-01 5.500000001019e-01 1.050000000304e+00 8.514693184596e-01 1.351850583799e+00 1.000000010433e+00 6.666666842413e-15 1.000000015929e-14 1.054092561785e-07 9.999999895674e-04 1.000000000000e-03 +7.500000000020e-01 5.500000000013e-01 1.050000000004e+00 9.300537618893e-01 1.402676013915e+00 1.000000000144e+00 6.666666668269e-15 1.000000000096e-14 1.054092553440e-07 9.999999998558e-04 1.000000000000e-03 +8.500000000000e-01 5.500000000000e-01 1.050000000000e+00 1.012422836566e+00 1.458595214581e+00 1.000000000000e+00 6.666666666671e-15 1.000000000000e-14 1.054092553390e-07 9.999999999997e-04 1.000000000000e-03 +9.500000000000e-01 5.500000000000e-01 1.050000000000e+00 1.097724920005e+00 1.519045753096e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 1.000000000000e-03 1.000000000000e-03 +1.050000000000e+00 5.500000000000e-01 1.050000000000e+00 1.185326959113e+00 1.583508762211e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 1.000000000000e-03 1.000000000000e-03 +1.150000000000e+00 5.500000000000e-01 1.050000000000e+00 1.274754878398e+00 1.651514456491e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +5.000000625770e-02 6.500000963087e-01 1.050000230402e+00 6.519203370252e-01 1.235920956078e+00 1.000006287807e+00 7.620983203393e-15 1.143140292663e-14 1.127011925730e-07 9.999937122325e-04 1.000000000000e-03 +1.500000129100e-01 6.500000659017e-01 1.050000157658e+00 6.670832703233e-01 1.243985699527e+00 1.000004383206e+00 7.094857988261e-15 1.064224033526e-14 1.087414892469e-07 9.999956168133e-04 1.000000000000e-03 +2.500000099645e-01 6.500000301824e-01 1.050000072198e+00 6.964194456069e-01 1.259960394550e+00 1.000002080336e+00 6.731611647449e-15 1.009739646519e-14 1.059213359327e-07 9.999979196679e-04 1.000000000000e-03 +3.500000041513e-01 6.500000088075e-01 1.050000021058e+00 7.382411627345e-01 1.283549788118e+00 1.000000637962e+00 6.669260533274e-15 1.000388441781e-14 1.054297260307e-07 9.999993620385e-04 1.000000000000e-03 +4.500000009369e-01 6.500000014986e-01 1.050000003579e+00 7.905694168075e-01 1.314343946730e+00 1.000000115124e+00 6.666692405012e-15 1.000003745627e-14 1.054094527506e-07 9.999998848757e-04 1.000000000000e-03 +5.500000001019e-01 6.500000001277e-01 1.050000000304e+00 8.514693184596e-01 1.351850583799e+00 1.000000010433e+00 6.666666842413e-15 1.000000015929e-14 1.054092561785e-07 9.999999895674e-04 1.000000000000e-03 +6.500000000041e-01 6.500000000041e-01 1.050000000010e+00 9.192388155484e-01 1.395528573707e+00 1.000000000359e+00 6.666666670661e-15 1.000000000241e-14 1.054092553516e-07 9.999999996414e-04 1.000000000000e-03 +7.500000000000e-01 6.500000000000e-01 1.050000000000e+00 9.924716620640e-01 1.444818327680e+00 1.000000000003e+00 6.666666666704e-15 1.000000000002e-14 1.054092553391e-07 9.999999999966e-04 1.000000000000e-03 +8.500000000000e-01 6.500000000000e-01 1.050000000000e+00 1.070046727952e+00 1.499166435056e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 1.000000000000e-03 1.000000000000e-03 +9.500000000000e-01 6.500000000000e-01 1.050000000000e+00 1.151086443322e+00 1.558043645088e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 1.000000000000e-03 1.000000000000e-03 +1.050000000000e+00 6.500000000000e-01 1.050000000000e+00 1.234908903523e+00 1.620956507745e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 1.000000000000e-03 1.000000000000e-03 +1.150000000000e+00 6.500000000000e-01 1.050000000000e+00 1.320984481362e+00 1.687453703069e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +5.000000015251e-02 7.500000030387e-01 1.050000005959e+00 7.516648219607e-01 1.291317163631e+00 1.000000176134e+00 6.666704962727e-15 1.000005568274e-14 1.054095488123e-07 9.999998238656e-04 1.000000000000e-03 +1.500000003049e-01 7.500000020070e-01 1.050000003933e+00 7.648529290667e-01 1.299038110050e+00 1.000000118309e+00 6.666684007659e-15 1.000002482839e-14 1.054093861960e-07 9.999998816906e-04 1.000000000000e-03 +2.500000002202e-01 7.500000008535e-01 1.050000001670e+00 7.905694159215e-01 1.314343944673e+00 1.000000051969e+00 6.666669630824e-15 1.000000392655e-14 1.054092760337e-07 9.999999480309e-04 1.000000000000e-03 +3.500000000822e-01 7.500000002207e-01 1.050000000431e+00 8.276472680971e-01 1.336974196196e+00 1.000000014055e+00 6.666666932853e-15 1.000000025873e-14 1.054092567026e-07 9.999999859449e-04 1.000000000000e-03 +4.500000000156e-01 7.500000000313e-01 1.050000000061e+00 8.746427842616e-01 1.366565036941e+00 1.000000002098e+00 6.666666691555e-15 1.000000001635e-14 1.054092554251e-07 9.999999979020e-04 1.000000000000e-03 +5.500000000013e-01 7.500000000020e-01 1.050000000004e+00 9.300537618893e-01 1.402676013915e+00 1.000000000144e+00 6.666666668269e-15 1.000000000096e-14 1.054092553440e-07 9.999999998558e-04 1.000000000000e-03 +6.500000000000e-01 7.500000000000e-01 1.050000000000e+00 9.924716620640e-01 1.444818327680e+00 1.000000000003e+00 6.666666666704e-15 1.000000000002e-14 1.054092553391e-07 9.999999999966e-04 1.000000000000e-03 +7.500000000000e-01 7.500000000000e-01 1.050000000000e+00 1.060660171780e+00 1.492481155660e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 1.000000000000e-03 1.000000000000e-03 +8.500000000000e-01 7.500000000000e-01 1.050000000000e+00 1.133578404875e+00 1.545153714036e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 1.000000000000e-03 1.000000000000e-03 +9.500000000000e-01 7.500000000000e-01 1.050000000000e+00 1.210371843691e+00 1.602342035896e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 1.000000000000e-03 1.000000000000e-03 +1.050000000000e+00 7.500000000000e-01 1.050000000000e+00 1.290348790056e+00 1.663580475961e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 1.000000000000e-03 1.000000000000e-03 +1.150000000000e+00 7.500000000000e-01 1.050000000000e+00 1.372953021775e+00 1.728438601744e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +5.000000000073e-02 8.500000000194e-01 1.050000000031e+00 8.514693183157e-01 1.351850583496e+00 1.000000000989e+00 6.666666677792e-15 1.000000000680e-14 1.054092553748e-07 9.999999990115e-04 1.000000000000e-03 +1.500000000014e-01 8.500000000123e-01 1.050000000020e+00 8.631338250940e-01 1.359227721930e+00 1.000000000639e+00 6.666666673808e-15 1.000000000432e-14 1.054092553617e-07 9.999999993612e-04 1.000000000000e-03 +2.500000000010e-01 8.500000000048e-01 1.050000000008e+00 8.860022573384e-01 1.373863166412e+00 1.000000000258e+00 6.666666669539e-15 1.000000000173e-14 1.054092553480e-07 9.999999997418e-04 1.000000000000e-03 +3.500000000003e-01 8.500000000011e-01 1.050000000002e+00 9.192388155436e-01 1.395528573697e+00 1.000000000061e+00 6.666666667340e-15 1.000000000040e-14 1.054092553411e-07 9.999999999394e-04 1.000000000000e-03 +4.500000000000e-01 8.500000000001e-01 1.050000000000e+00 9.617692030837e-01 1.423903086590e+00 1.000000000007e+00 6.666666666747e-15 1.000000000005e-14 1.054092553392e-07 9.999999999928e-04 1.000000000000e-03 +5.500000000000e-01 8.500000000000e-01 1.050000000000e+00 1.012422836566e+00 1.458595214581e+00 1.000000000000e+00 6.666666666671e-15 1.000000000000e-14 1.054092553390e-07 9.999999999997e-04 1.000000000000e-03 +6.500000000000e-01 8.500000000000e-01 1.050000000000e+00 1.070046727952e+00 1.499166435056e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 1.000000000000e-03 1.000000000000e-03 +7.500000000000e-01 8.500000000000e-01 1.050000000000e+00 1.133578404875e+00 1.545153714036e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 1.000000000000e-03 1.000000000000e-03 +8.500000000000e-01 8.500000000000e-01 1.050000000000e+00 1.202081528017e+00 1.596088969951e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 1.000000000000e-03 1.000000000000e-03 +9.500000000000e-01 8.500000000000e-01 1.050000000000e+00 1.274754878398e+00 1.651514456491e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 1.000000000000e-03 1.000000000000e-03 +1.050000000000e+00 8.500000000000e-01 1.050000000000e+00 1.350925608611e+00 1.710993863227e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 1.000000000000e-03 1.000000000000e-03 +1.150000000000e+00 8.500000000000e-01 1.050000000000e+00 1.430034964608e+00 1.774119499921e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +5.000000000000e-02 9.500000000000e-01 1.050000000000e+00 9.513148795220e-01 1.416862731530e+00 1.000000000001e+00 6.666666666673e-15 1.000000000000e-14 1.054092553390e-07 9.999999999995e-04 1.000000000000e-03 +1.500000000000e-01 9.500000000000e-01 1.050000000000e+00 9.617692030836e-01 1.423903086590e+00 1.000000000000e+00 6.666666666670e-15 1.000000000000e-14 1.054092553390e-07 9.999999999997e-04 1.000000000000e-03 +2.500000000000e-01 9.500000000000e-01 1.050000000000e+00 9.823441352194e-01 1.437880384455e+00 1.000000000000e+00 6.666666666668e-15 1.000000000000e-14 1.054092553390e-07 9.999999999999e-04 1.000000000000e-03 +3.500000000000e-01 9.500000000000e-01 1.050000000000e+00 1.012422836566e+00 1.458595214581e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 1.000000000000e-03 1.000000000000e-03 +4.500000000000e-01 9.500000000000e-01 1.050000000000e+00 1.051189802081e+00 1.485765795810e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 1.000000000000e-03 1.000000000000e-03 +5.500000000000e-01 9.500000000000e-01 1.050000000000e+00 1.097724920005e+00 1.519045753096e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 1.000000000000e-03 1.000000000000e-03 +6.500000000000e-01 9.500000000000e-01 1.050000000000e+00 1.151086443322e+00 1.558043645088e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 1.000000000000e-03 1.000000000000e-03 +7.500000000000e-01 9.500000000000e-01 1.050000000000e+00 1.210371843691e+00 1.602342035896e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 1.000000000000e-03 1.000000000000e-03 +8.500000000000e-01 9.500000000000e-01 1.050000000000e+00 1.274754878398e+00 1.651514456491e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 1.000000000000e-03 1.000000000000e-03 +9.500000000000e-01 9.500000000000e-01 1.050000000000e+00 1.343502884254e+00 1.705139290498e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 1.000000000000e-03 1.000000000000e-03 +1.050000000000e+00 9.500000000000e-01 1.050000000000e+00 1.415980225851e+00 1.762810256380e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 1.000000000000e-03 1.000000000000e-03 +1.150000000000e+00 9.500000000000e-01 1.050000000000e+00 1.491643389018e+00 1.824143634695e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +5.000000000000e-02 1.050000000000e+00 1.050000000000e+00 1.051189802081e+00 1.485765795810e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 1.000000000000e-03 1.000000000000e-03 +1.500000000000e-01 1.050000000000e+00 1.050000000000e+00 1.060660171780e+00 1.492481155660e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 1.000000000000e-03 1.000000000000e-03 +2.500000000000e-01 1.050000000000e+00 1.050000000000e+00 1.079351657246e+00 1.505822034638e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 1.000000000000e-03 1.000000000000e-03 +3.500000000000e-01 1.050000000000e+00 1.050000000000e+00 1.106797181059e+00 1.525614630239e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 1.000000000000e-03 1.000000000000e-03 +4.500000000000e-01 1.050000000000e+00 1.050000000000e+00 1.142365965880e+00 1.551612064918e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 1.000000000000e-03 1.000000000000e-03 +5.500000000000e-01 1.050000000000e+00 1.050000000000e+00 1.185326959113e+00 1.583508762211e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 1.000000000000e-03 1.000000000000e-03 +6.500000000000e-01 1.050000000000e+00 1.050000000000e+00 1.234908903523e+00 1.620956507745e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 1.000000000000e-03 1.000000000000e-03 +7.500000000000e-01 1.050000000000e+00 1.050000000000e+00 1.290348790056e+00 1.663580475961e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 1.000000000000e-03 1.000000000000e-03 +8.500000000000e-01 1.050000000000e+00 1.050000000000e+00 1.350925608611e+00 1.710993863227e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 1.000000000000e-03 1.000000000000e-03 +9.500000000000e-01 1.050000000000e+00 1.050000000000e+00 1.415980225851e+00 1.762810256380e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 1.000000000000e-03 1.000000000000e-03 +1.050000000000e+00 1.050000000000e+00 1.050000000000e+00 1.484924240492e+00 1.818653347947e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 1.000000000000e-03 1.000000000000e-03 +1.150000000000e+00 1.050000000000e+00 1.050000000000e+00 1.557241150240e+00 1.878163997099e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +5.000000000000e-02 1.150000000000e+00 1.050000000000e+00 1.151086443322e+00 1.558043645088e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +1.500000000000e-01 1.150000000000e+00 1.050000000000e+00 1.159741350474e+00 1.564448784716e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +2.500000000000e-01 1.150000000000e+00 1.050000000000e+00 1.176860229594e+00 1.577181029559e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +3.500000000000e-01 1.150000000000e+00 1.050000000000e+00 1.202081528017e+00 1.596088969951e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +4.500000000000e-01 1.150000000000e+00 1.050000000000e+00 1.234908903523e+00 1.620956507745e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +5.500000000000e-01 1.150000000000e+00 1.050000000000e+00 1.274754878398e+00 1.651514456491e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +6.500000000000e-01 1.150000000000e+00 1.050000000000e+00 1.320984481362e+00 1.687453703069e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +7.500000000000e-01 1.150000000000e+00 1.050000000000e+00 1.372953021775e+00 1.728438601744e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +8.500000000000e-01 1.150000000000e+00 1.050000000000e+00 1.430034964608e+00 1.774119499921e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +9.500000000000e-01 1.150000000000e+00 1.050000000000e+00 1.491643389018e+00 1.824143634695e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +1.050000000000e+00 1.150000000000e+00 1.050000000000e+00 1.557241150240e+00 1.878163997099e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +1.150000000000e+00 1.150000000000e+00 1.050000000000e+00 1.626345596729e+00 1.935846068261e+00 9.999999999987e-01 6.666666666652e-15 9.999999999991e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +5.000001080617e-02 5.000001080617e-02 1.150000514128e+00 7.071069340089e-02 1.152172376277e+00 1.000009850389e+00 8.044775290098e-15 1.206704407007e-14 1.157921704802e-07 9.999901497079e-04 1.000000000000e-03 +1.500000223935e-01 5.000000738592e-02 1.150000352537e+00 1.581139065884e-01 1.160819029088e+00 1.000006887425e+00 7.478462217353e-15 1.121761606554e-14 1.116423658411e-07 9.999931126224e-04 1.000000000000e-03 +2.500000173475e-01 5.000000335783e-02 1.150000161354e+00 2.549509933488e-01 1.177922060293e+00 1.000003276470e+00 6.809582461824e-15 1.021434022575e-14 1.065329381811e-07 9.999967235404e-04 1.000000000000e-03 +3.500000071517e-01 5.000000095303e-02 1.150000046297e+00 3.535533978079e-01 1.203120987924e+00 1.000000994246e+00 6.672725087915e-15 1.000907768038e-14 1.054570880626e-07 9.999990057546e-04 1.000000000000e-03 +4.500000015283e-01 5.000000014927e-02 1.150000007379e+00 4.527692584423e-01 1.235920716859e+00 1.000000169692e+00 6.666717512707e-15 1.000007457212e-14 1.054096483678e-07 9.999998303076e-04 1.000000000000e-03 +5.500000001411e-01 5.000000001027e-02 1.150000000527e+00 5.522680510008e-01 1.275735082753e+00 1.000000012975e+00 6.666666887196e-15 1.000000020105e-14 1.054092563986e-07 9.999999870253e-04 1.000000000000e-03 +6.500000000044e-01 5.000000000024e-02 1.150000000013e+00 6.519202405247e-01 1.321930406654e+00 1.000000000344e+00 6.666666670497e-15 1.000000000231e-14 1.054092553511e-07 9.999999996560e-04 1.000000000000e-03 +7.500000000000e-01 5.000000000000e-02 1.150000000000e+00 7.516648189187e-01 1.373863166404e+00 1.000000000001e+00 6.666666666683e-15 1.000000000001e-14 1.054092553390e-07 9.999999999985e-04 1.000000000000e-03 +8.500000000000e-01 5.000000000000e-02 1.150000000000e+00 8.514693182963e-01 1.430908802125e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +9.500000000000e-01 5.000000000000e-02 1.150000000000e+00 9.513148795220e-01 1.492481155660e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +1.050000000000e+00 5.000000000000e-02 1.150000000000e+00 1.051189802081e+00 1.558043645088e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +1.150000000000e+00 5.000000000000e-02 1.150000000000e+00 1.151086443322e+00 1.627114009527e+00 9.999999999987e-01 6.666666666652e-15 9.999999999991e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +5.000000738592e-02 1.500000223935e-01 1.150000352537e+00 1.581139065884e-01 1.160819029088e+00 1.000006887425e+00 7.478462217353e-15 1.121761606554e-14 1.116423658411e-07 9.999931126224e-04 1.000000000000e-03 +1.500000152525e-01 1.500000152525e-01 1.150000240797e+00 2.121320559262e-01 1.169401797068e+00 1.000004796728e+00 7.088868647758e-15 1.063325196682e-14 1.086955583618e-07 9.999952032948e-04 1.000000000000e-03 +2.500000117246e-01 1.500000068792e-01 1.150000109261e+00 2.915476083353e-01 1.186381161022e+00 1.000002262126e+00 6.736493387733e-15 1.010471722346e-14 1.059597262247e-07 9.999977378796e-04 1.000000000000e-03 +3.500000047701e-01 1.500000019262e-01 1.150000030901e+00 3.807886604364e-01 1.211404174910e+00 1.000000676528e+00 6.669472588312e-15 1.000420211434e-14 1.054314001000e-07 9.999993234721e-04 1.000000000000e-03 +4.500000010003e-01 1.500000002963e-01 1.150000004831e+00 4.743416500679e-01 1.243985535326e+00 1.000000113150e+00 6.666689773724e-15 1.000003352908e-14 1.054094320526e-07 9.999998868496e-04 1.000000000000e-03 +5.500000000910e-01 1.500000000201e-01 1.150000000340e+00 5.700877126426e-01 1.283549765645e+00 1.000000008515e+00 6.666666796467e-15 1.000000010955e-14 1.054092559163e-07 9.999999914852e-04 1.000000000000e-03 +6.500000000028e-01 1.500000000005e-01 1.150000000008e+00 6.670832032091e-01 1.329473580039e+00 1.000000000220e+00 6.666666669117e-15 1.000000000147e-14 1.054092553467e-07 9.999999997797e-04 1.000000000000e-03 +7.500000000000e-01 1.500000000000e-01 1.150000000000e+00 7.648529270389e-01 1.381122731693e+00 1.000000000001e+00 6.666666666674e-15 1.000000000000e-14 1.054092553390e-07 9.999999999993e-04 1.000000000000e-03 +8.500000000000e-01 1.500000000000e-01 1.150000000000e+00 8.631338250816e-01 1.437880384455e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +9.500000000000e-01 1.500000000000e-01 1.150000000000e+00 9.617692030836e-01 1.499166435057e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +1.050000000000e+00 1.500000000000e-01 1.150000000000e+00 1.060660171780e+00 1.564448784716e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +1.150000000000e+00 1.500000000000e-01 1.150000000000e+00 1.159741350474e+00 1.633248297106e+00 9.999999999987e-01 6.666666666652e-15 9.999999999991e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +5.000000335783e-02 2.500000173475e-01 1.150000161354e+00 2.549509933488e-01 1.177922060293e+00 1.000003276470e+00 6.809582461824e-15 1.021434022575e-14 1.065329381811e-07 9.999967235404e-04 1.000000000000e-03 +1.500000068792e-01 2.500000117246e-01 1.150000109261e+00 2.915476083353e-01 1.186381161022e+00 1.000002262126e+00 6.736493387733e-15 1.010471722346e-14 1.059597262247e-07 9.999977378796e-04 1.000000000000e-03 +2.500000052000e-01 2.500000052000e-01 1.150000048668e+00 3.535533979472e-01 1.203120990232e+00 1.000001047065e+00 6.677499793880e-15 1.001623920316e-14 1.054948087357e-07 9.999989529357e-04 1.000000000000e-03 +3.500000020601e-01 2.500000014174e-01 1.150000013372e+00 4.301162658523e-01 1.227802929181e+00 1.000000303960e+00 6.667070803580e-15 1.000060316559e-14 1.054124342528e-07 9.999996960404e-04 1.000000000000e-03 +4.500000004171e-01 2.500000002108e-01 1.150000002018e+00 5.147815075163e-01 1.259960318868e+00 1.000000048945e+00 6.666670352416e-15 1.000000503918e-14 1.054092818977e-07 9.999999510551e-04 1.000000000000e-03 +5.500000000367e-01 2.500000000139e-01 1.150000000138e+00 6.041522987189e-01 1.299038105817e+00 1.000000003557e+00 6.666666712307e-15 1.000000003289e-14 1.054092555123e-07 9.999999964429e-04 1.000000000000e-03 +6.500000000011e-01 2.500000000003e-01 1.150000000003e+00 6.964194138603e-01 1.344432965978e+00 1.000000000087e+00 6.666666667636e-15 1.000000000058e-14 1.054092553420e-07 9.999999999128e-04 1.000000000000e-03 +7.500000000000e-01 2.500000000000e-01 1.150000000000e+00 7.905694150421e-01 1.395528573695e+00 9.999999999998e-01 6.666666666665e-15 9.999999999999e-15 1.054092553389e-07 1.000000000000e-03 1.000000000000e-03 +8.500000000000e-01 2.500000000000e-01 1.150000000000e+00 8.860022573335e-01 1.451723114096e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +9.500000000000e-01 2.500000000000e-01 1.150000000000e+00 9.823441352194e-01 1.512448346225e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +1.050000000000e+00 2.500000000000e-01 1.150000000000e+00 1.079351657246e+00 1.577181029559e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +1.150000000000e+00 2.500000000000e-01 1.150000000000e+00 1.176860229594e+00 1.645448267190e+00 9.999999999987e-01 6.666666666652e-15 9.999999999991e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +5.000000095303e-02 3.500000071517e-01 1.150000046297e+00 3.535533978079e-01 1.203120987924e+00 1.000000994246e+00 6.672725087915e-15 1.000907768038e-14 1.054570880626e-07 9.999990057546e-04 1.000000000000e-03 +1.500000019262e-01 3.500000047701e-01 1.150000030901e+00 3.807886604364e-01 1.211404174910e+00 1.000000676528e+00 6.669472588312e-15 1.000420211434e-14 1.054314001000e-07 9.999993234721e-04 1.000000000000e-03 +2.500000014174e-01 3.500000020601e-01 1.150000013372e+00 4.301162658523e-01 1.227802929181e+00 1.000000303960e+00 6.667070803580e-15 1.000060316559e-14 1.054124342528e-07 9.999996960404e-04 1.000000000000e-03 +3.500000005400e-01 3.500000005400e-01 1.150000003524e+00 4.949747475942e-01 1.251998406093e+00 1.000000084408e+00 6.666681933104e-15 1.000002205557e-14 1.054093715820e-07 9.999999155919e-04 1.000000000000e-03 +4.500000001042e-01 3.500000000766e-01 1.150000000507e+00 5.700877126788e-01 1.283549765811e+00 1.000000012896e+00 6.666666942936e-15 1.000000028545e-14 1.054092568434e-07 9.999999871042e-04 1.000000000000e-03 +5.500000000087e-01 3.500000000048e-01 1.150000000033e+00 6.519202405302e-01 1.321930406674e+00 1.000000000882e+00 6.666666676684e-15 1.000000000621e-14 1.054092553717e-07 9.999999991181e-04 1.000000000000e-03 +6.500000000002e-01 3.500000000001e-01 1.150000000001e+00 7.382411530119e-01 1.366565036872e+00 1.000000000019e+00 6.666666666882e-15 1.000000000013e-14 1.054092553396e-07 9.999999999806e-04 1.000000000000e-03 +7.500000000000e-01 3.500000000000e-01 1.150000000000e+00 8.276472678623e-01 1.416862731531e+00 9.999999999994e-01 6.666666666660e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +8.500000000000e-01 3.500000000000e-01 1.150000000000e+00 9.192388155425e-01 1.472243186434e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +9.500000000000e-01 3.500000000000e-01 1.150000000000e+00 1.012422836566e+00 1.532155344604e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +1.050000000000e+00 3.500000000000e-01 1.150000000000e+00 1.106797181059e+00 1.596088969951e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +1.150000000000e+00 3.500000000000e-01 1.150000000000e+00 1.202081528017e+00 1.663580475961e+00 9.999999999987e-01 6.666666666652e-15 9.999999999991e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +5.000000014927e-02 4.500000015283e-01 1.150000007379e+00 4.527692584423e-01 1.235920716859e+00 1.000000169692e+00 6.666717512707e-15 1.000007457212e-14 1.054096483678e-07 9.999998303076e-04 1.000000000000e-03 +1.500000002963e-01 4.500000010003e-01 1.150000004831e+00 4.743416500679e-01 1.243985535326e+00 1.000000113150e+00 6.666689773724e-15 1.000003352908e-14 1.054094320526e-07 9.999998868496e-04 1.000000000000e-03 +2.500000002108e-01 4.500000004171e-01 1.150000002018e+00 5.147815075163e-01 1.259960318868e+00 1.000000048945e+00 6.666670352416e-15 1.000000503918e-14 1.054092818977e-07 9.999999510551e-04 1.000000000000e-03 +3.500000000766e-01 4.500000001042e-01 1.150000000507e+00 5.700877126788e-01 1.283549765811e+00 1.000000012896e+00 6.666666942936e-15 1.000000028545e-14 1.054092568434e-07 9.999999871042e-04 1.000000000000e-03 +4.500000000139e-01 4.500000000139e-01 1.150000000068e+00 6.363961030875e-01 1.314343942879e+00 1.000000001836e+00 6.666666688742e-15 1.000000001476e-14 1.054092554167e-07 9.999999981643e-04 1.000000000000e-03 +5.500000000011e-01 4.500000000008e-01 1.150000000004e+00 7.106335201789e-01 1.351850583464e+00 1.000000000114e+00 6.666666667929e-15 1.000000000076e-14 1.054092553429e-07 9.999999998865e-04 1.000000000000e-03 +6.500000000000e-01 4.500000000000e-01 1.150000000000e+00 7.905694150421e-01 1.395528573695e+00 1.000000000002e+00 6.666666666685e-15 1.000000000001e-14 1.054092553390e-07 9.999999999984e-04 1.000000000000e-03 +7.500000000000e-01 4.500000000000e-01 1.150000000000e+00 8.746427842268e-01 1.444818327680e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +8.500000000000e-01 4.500000000000e-01 1.150000000000e+00 9.617692030836e-01 1.499166435057e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +9.500000000000e-01 4.500000000000e-01 1.150000000000e+00 1.051189802081e+00 1.558043645088e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +1.050000000000e+00 4.500000000000e-01 1.150000000000e+00 1.142365965880e+00 1.620956507745e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +1.150000000000e+00 4.500000000000e-01 1.150000000000e+00 1.234908903523e+00 1.687453703069e+00 9.999999999987e-01 6.666666666652e-15 9.999999999991e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +5.000000001027e-02 5.500000001411e-01 1.150000000527e+00 5.522680510008e-01 1.275735082753e+00 1.000000012975e+00 6.666666887196e-15 1.000000020105e-14 1.054092563986e-07 9.999999870253e-04 1.000000000000e-03 +1.500000000201e-01 5.500000000910e-01 1.150000000340e+00 5.700877126426e-01 1.283549765645e+00 1.000000008515e+00 6.666666796467e-15 1.000000010955e-14 1.054092559163e-07 9.999999914852e-04 1.000000000000e-03 +2.500000000139e-01 5.500000000367e-01 1.150000000138e+00 6.041522987189e-01 1.299038105817e+00 1.000000003557e+00 6.666666712307e-15 1.000000003289e-14 1.054092555123e-07 9.999999964429e-04 1.000000000000e-03 +3.500000000048e-01 5.500000000087e-01 1.150000000033e+00 6.519202405302e-01 1.321930406674e+00 1.000000000882e+00 6.666666676684e-15 1.000000000621e-14 1.054092553717e-07 9.999999991181e-04 1.000000000000e-03 +4.500000000008e-01 5.500000000011e-01 1.150000000004e+00 7.106335201789e-01 1.351850583464e+00 1.000000000114e+00 6.666666667929e-15 1.000000000076e-14 1.054092553429e-07 9.999999998865e-04 1.000000000000e-03 +5.500000000001e-01 5.500000000001e-01 1.150000000000e+00 7.778174593053e-01 1.388344337692e+00 1.000000000006e+00 6.666666666728e-15 1.000000000004e-14 1.054092553391e-07 9.999999999945e-04 1.000000000000e-03 +6.500000000000e-01 5.500000000000e-01 1.150000000000e+00 8.514693182963e-01 1.430908802125e+00 9.999999999994e-01 6.666666666660e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +7.500000000000e-01 5.500000000000e-01 1.150000000000e+00 9.300537618869e-01 1.479019945775e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +8.500000000000e-01 5.500000000000e-01 1.150000000000e+00 1.012422836566e+00 1.532155344604e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +9.500000000000e-01 5.500000000000e-01 1.150000000000e+00 1.097724920005e+00 1.589811309558e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +1.050000000000e+00 5.500000000000e-01 1.150000000000e+00 1.185326959113e+00 1.651514456491e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +1.150000000000e+00 5.500000000000e-01 1.150000000000e+00 1.274754878398e+00 1.716828471339e+00 9.999999999987e-01 6.666666666652e-15 9.999999999991e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +5.000000000024e-02 6.500000000044e-01 1.150000000013e+00 6.519202405247e-01 1.321930406654e+00 1.000000000344e+00 6.666666670497e-15 1.000000000231e-14 1.054092553511e-07 9.999999996560e-04 1.000000000000e-03 +1.500000000005e-01 6.500000000028e-01 1.150000000008e+00 6.670832032091e-01 1.329473580039e+00 1.000000000220e+00 6.666666669117e-15 1.000000000147e-14 1.054092553467e-07 9.999999997797e-04 1.000000000000e-03 +2.500000000003e-01 6.500000000011e-01 1.150000000003e+00 6.964194138603e-01 1.344432965978e+00 1.000000000087e+00 6.666666667636e-15 1.000000000058e-14 1.054092553420e-07 9.999999999128e-04 1.000000000000e-03 +3.500000000001e-01 6.500000000002e-01 1.150000000001e+00 7.382411530119e-01 1.366565036872e+00 1.000000000019e+00 6.666666666882e-15 1.000000000013e-14 1.054092553396e-07 9.999999999806e-04 1.000000000000e-03 +4.500000000000e-01 6.500000000000e-01 1.150000000000e+00 7.905694150421e-01 1.395528573695e+00 1.000000000002e+00 6.666666666685e-15 1.000000000001e-14 1.054092553390e-07 9.999999999984e-04 1.000000000000e-03 +5.500000000000e-01 6.500000000000e-01 1.150000000000e+00 8.514693182963e-01 1.430908802125e+00 9.999999999994e-01 6.666666666660e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +6.500000000000e-01 6.500000000000e-01 1.150000000000e+00 9.192388155425e-01 1.472243186434e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +7.500000000000e-01 6.500000000000e-01 1.150000000000e+00 9.924716620640e-01 1.519045753096e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +8.500000000000e-01 6.500000000000e-01 1.150000000000e+00 1.070046727952e+00 1.570827807241e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +9.500000000000e-01 6.500000000000e-01 1.150000000000e+00 1.151086443322e+00 1.627114009527e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +1.050000000000e+00 6.500000000000e-01 1.150000000000e+00 1.234908903523e+00 1.687453703069e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +1.150000000000e+00 6.500000000000e-01 1.150000000000e+00 1.320984481362e+00 1.751427988814e+00 9.999999999987e-01 6.666666666652e-15 9.999999999991e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +5.000000000000e-02 7.500000000000e-01 1.150000000000e+00 7.516648189187e-01 1.373863166404e+00 1.000000000001e+00 6.666666666683e-15 1.000000000001e-14 1.054092553390e-07 9.999999999985e-04 1.000000000000e-03 +1.500000000000e-01 7.500000000000e-01 1.150000000000e+00 7.648529270389e-01 1.381122731693e+00 1.000000000001e+00 6.666666666674e-15 1.000000000000e-14 1.054092553390e-07 9.999999999993e-04 1.000000000000e-03 +2.500000000000e-01 7.500000000000e-01 1.150000000000e+00 7.905694150421e-01 1.395528573695e+00 9.999999999998e-01 6.666666666665e-15 9.999999999999e-15 1.054092553389e-07 1.000000000000e-03 1.000000000000e-03 +3.500000000000e-01 7.500000000000e-01 1.150000000000e+00 8.276472678623e-01 1.416862731531e+00 9.999999999994e-01 6.666666666660e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +4.500000000000e-01 7.500000000000e-01 1.150000000000e+00 8.746427842268e-01 1.444818327680e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +5.500000000000e-01 7.500000000000e-01 1.150000000000e+00 9.300537618869e-01 1.479019945775e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +6.500000000000e-01 7.500000000000e-01 1.150000000000e+00 9.924716620640e-01 1.519045753096e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +7.500000000000e-01 7.500000000000e-01 1.150000000000e+00 1.060660171780e+00 1.564448784716e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +8.500000000000e-01 7.500000000000e-01 1.150000000000e+00 1.133578404875e+00 1.614775526196e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +9.500000000000e-01 7.500000000000e-01 1.150000000000e+00 1.210371843691e+00 1.669580785706e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +1.050000000000e+00 7.500000000000e-01 1.150000000000e+00 1.290348790056e+00 1.728438601744e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +1.150000000000e+00 7.500000000000e-01 1.150000000000e+00 1.372953021775e+00 1.790949468857e+00 9.999999999987e-01 6.666666666652e-15 9.999999999991e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +5.000000000000e-02 8.500000000000e-01 1.150000000000e+00 8.514693182963e-01 1.430908802125e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +1.500000000000e-01 8.500000000000e-01 1.150000000000e+00 8.631338250816e-01 1.437880384455e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +2.500000000000e-01 8.500000000000e-01 1.150000000000e+00 8.860022573335e-01 1.451723114096e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +3.500000000000e-01 8.500000000000e-01 1.150000000000e+00 9.192388155425e-01 1.472243186434e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +4.500000000000e-01 8.500000000000e-01 1.150000000000e+00 9.617692030836e-01 1.499166435057e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +5.500000000000e-01 8.500000000000e-01 1.150000000000e+00 1.012422836566e+00 1.532155344604e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +6.500000000000e-01 8.500000000000e-01 1.150000000000e+00 1.070046727952e+00 1.570827807241e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +7.500000000000e-01 8.500000000000e-01 1.150000000000e+00 1.133578404875e+00 1.614775526196e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +8.500000000000e-01 8.500000000000e-01 1.150000000000e+00 1.202081528017e+00 1.663580475961e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +9.500000000000e-01 8.500000000000e-01 1.150000000000e+00 1.274754878398e+00 1.716828471339e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +1.050000000000e+00 8.500000000000e-01 1.150000000000e+00 1.350925608611e+00 1.774119499921e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +1.150000000000e+00 8.500000000000e-01 1.150000000000e+00 1.430034964608e+00 1.835074930350e+00 9.999999999987e-01 6.666666666652e-15 9.999999999991e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +5.000000000000e-02 9.500000000000e-01 1.150000000000e+00 9.513148795220e-01 1.492481155660e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +1.500000000000e-01 9.500000000000e-01 1.150000000000e+00 9.617692030836e-01 1.499166435057e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +2.500000000000e-01 9.500000000000e-01 1.150000000000e+00 9.823441352194e-01 1.512448346225e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +3.500000000000e-01 9.500000000000e-01 1.150000000000e+00 1.012422836566e+00 1.532155344604e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +4.500000000000e-01 9.500000000000e-01 1.150000000000e+00 1.051189802081e+00 1.558043645088e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +5.500000000000e-01 9.500000000000e-01 1.150000000000e+00 1.097724920005e+00 1.589811309558e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +6.500000000000e-01 9.500000000000e-01 1.150000000000e+00 1.151086443322e+00 1.627114009527e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +7.500000000000e-01 9.500000000000e-01 1.150000000000e+00 1.210371843691e+00 1.669580785706e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +8.500000000000e-01 9.500000000000e-01 1.150000000000e+00 1.274754878398e+00 1.716828471339e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +9.500000000000e-01 9.500000000000e-01 1.150000000000e+00 1.343502884254e+00 1.768473918383e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +1.050000000000e+00 9.500000000000e-01 1.150000000000e+00 1.415980225851e+00 1.824143634695e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +1.150000000000e+00 9.500000000000e-01 1.150000000000e+00 1.491643389018e+00 1.883480820184e+00 9.999999999987e-01 6.666666666652e-15 9.999999999991e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +5.000000000000e-02 1.050000000000e+00 1.150000000000e+00 1.051189802081e+00 1.558043645088e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +1.500000000000e-01 1.050000000000e+00 1.150000000000e+00 1.060660171780e+00 1.564448784716e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +2.500000000000e-01 1.050000000000e+00 1.150000000000e+00 1.079351657246e+00 1.577181029559e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +3.500000000000e-01 1.050000000000e+00 1.150000000000e+00 1.106797181059e+00 1.596088969951e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +4.500000000000e-01 1.050000000000e+00 1.150000000000e+00 1.142365965880e+00 1.620956507745e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +5.500000000000e-01 1.050000000000e+00 1.150000000000e+00 1.185326959113e+00 1.651514456491e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +6.500000000000e-01 1.050000000000e+00 1.150000000000e+00 1.234908903523e+00 1.687453703069e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +7.500000000000e-01 1.050000000000e+00 1.150000000000e+00 1.290348790056e+00 1.728438601744e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +8.500000000000e-01 1.050000000000e+00 1.150000000000e+00 1.350925608611e+00 1.774119499921e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +9.500000000000e-01 1.050000000000e+00 1.150000000000e+00 1.415980225851e+00 1.824143634695e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +1.050000000000e+00 1.050000000000e+00 1.150000000000e+00 1.484924240492e+00 1.878163997099e+00 9.999999999993e-01 6.666666666659e-15 9.999999999996e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +1.150000000000e+00 1.050000000000e+00 1.150000000000e+00 1.557241150240e+00 1.935846068261e+00 9.999999999987e-01 6.666666666652e-15 9.999999999991e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +5.000000000000e-02 1.150000000000e+00 1.150000000000e+00 1.151086443322e+00 1.627114009527e+00 9.999999999987e-01 6.666666666652e-15 9.999999999991e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +1.500000000000e-01 1.150000000000e+00 1.150000000000e+00 1.159741350474e+00 1.633248297106e+00 9.999999999987e-01 6.666666666652e-15 9.999999999991e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +2.500000000000e-01 1.150000000000e+00 1.150000000000e+00 1.176860229594e+00 1.645448267190e+00 9.999999999987e-01 6.666666666652e-15 9.999999999991e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +3.500000000000e-01 1.150000000000e+00 1.150000000000e+00 1.202081528017e+00 1.663580475961e+00 9.999999999987e-01 6.666666666652e-15 9.999999999991e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +4.500000000000e-01 1.150000000000e+00 1.150000000000e+00 1.234908903523e+00 1.687453703069e+00 9.999999999987e-01 6.666666666652e-15 9.999999999991e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +5.500000000000e-01 1.150000000000e+00 1.150000000000e+00 1.274754878398e+00 1.716828471339e+00 9.999999999987e-01 6.666666666652e-15 9.999999999991e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +6.500000000000e-01 1.150000000000e+00 1.150000000000e+00 1.320984481362e+00 1.751427988814e+00 9.999999999987e-01 6.666666666652e-15 9.999999999991e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +7.500000000000e-01 1.150000000000e+00 1.150000000000e+00 1.372953021775e+00 1.790949468857e+00 9.999999999987e-01 6.666666666652e-15 9.999999999991e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +8.500000000000e-01 1.150000000000e+00 1.150000000000e+00 1.430034964608e+00 1.835074930350e+00 9.999999999987e-01 6.666666666652e-15 9.999999999991e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +9.500000000000e-01 1.150000000000e+00 1.150000000000e+00 1.491643389018e+00 1.883480820184e+00 9.999999999987e-01 6.666666666652e-15 9.999999999991e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +1.050000000000e+00 1.150000000000e+00 1.150000000000e+00 1.557241150240e+00 1.935846068261e+00 9.999999999987e-01 6.666666666652e-15 9.999999999991e-15 1.054092553389e-07 1.000000000001e-03 1.000000000000e-03 +1.150000000000e+00 1.150000000000e+00 1.150000000000e+00 1.626345596729e+00 1.991858428704e+00 9.999999999980e-01 6.666666666645e-15 9.999999999987e-15 1.054092553389e-07 1.000000000002e-03 1.000000000000e-03 diff --git a/single-node-refactor/regression_tests/standard_results/Sedov_Erosion/state/mat_pt_state_t_4.2500e+00.txt b/single-node-refactor/regression_tests/standard_results/Sedov_Erosion/state/mat_pt_state_t_4.2500e+00.txt new file mode 100644 index 000000000..c699fb904 --- /dev/null +++ b/single-node-refactor/regression_tests/standard_results/Sedov_Erosion/state/mat_pt_state_t_4.2500e+00.txt @@ -0,0 +1,1730 @@ +# state dump file +# x y z radius_2D radius_3D den pres sie sspd vol mass +4.336700469946e-02 4.336700469946e-02 4.336700469946e-02 6.133020620547e-02 7.511385551154e-02 1.000000000000e+11 0.000000000000e+00 7.762296898175e+00 1.000000000000e-32 1.000000000000e-14 1.000000000000e-03 +3.699232263673e-01 1.363453020654e-01 1.363453020654e-01 3.942502185178e-01 4.171609715645e-01 2.636265707486e-02 0.000000000000e+00 7.879287159264e-01 1.000000000000e-32 3.793244349992e-02 1.000000000000e-03 +7.474787891692e-01 1.435996413686e-01 1.435996413686e-01 7.611474215019e-01 7.745748861538e-01 6.350485480573e-02 6.953960756385e-03 1.642542316881e-01 4.272056903596e-01 1.574682759388e-02 1.000000000000e-03 +9.111308109915e-01 1.230939711829e-01 1.230939711829e-01 9.194082229780e-01 9.276117755942e-01 1.190367002232e-01 5.851029117584e-03 7.372972923411e-02 2.862200575977e-01 8.400770502922e-03 1.000000000000e-03 +1.036173938274e+00 1.108277236740e-01 1.108277236740e-01 1.042084072757e+00 1.047960876669e+00 1.834262349479e-01 6.010302317250e-03 4.915029454995e-02 2.336909035218e-01 5.451782839484e-03 1.000000000000e-03 +1.145092639744e+00 9.853866655657e-02 9.853866655657e-02 1.149324594013e+00 1.153541022768e+00 2.431233580559e-01 5.793148379343e-03 3.574203087068e-02 1.992821307445e-01 4.113138317916e-03 1.000000000000e-03 +1.252614998406e+00 8.866905544943e-02 8.866905544943e-02 1.255749392047e+00 1.258875981588e+00 2.935696210117e-01 5.239355191863e-03 2.677059281785e-02 1.724676872082e-01 3.406347007410e-03 1.000000000000e-03 +1.365026826285e+00 8.129674901507e-02 8.129674901507e-02 1.367445574009e+00 1.369860050983e+00 3.268656301899e-01 4.412251070888e-03 2.024800405747e-02 1.499926074381e-01 3.059361118571e-03 1.000000000000e-03 +1.489574777163e+00 7.630594105272e-02 7.630594105272e-02 1.491527945900e+00 1.493478560288e+00 3.236078908952e-01 3.260983994054e-03 1.511544102819e-02 1.295952718110e-01 3.090159505177e-03 1.000000000000e-03 +1.636469103365e+00 7.387522244524e-02 7.387522244524e-02 1.638135731482e+00 1.639800665706e+00 2.850952917612e-01 2.169528686925e-03 1.141475543242e-02 1.126190995861e-01 3.507599139300e-03 1.000000000000e-03 +1.814688658443e+00 7.502520181018e-02 7.502520181018e-02 1.816238890672e+00 1.817787800844e+00 2.263915272180e-01 1.372942183668e-03 9.096688824042e-03 1.005357251265e-01 4.417126437055e-03 1.000000000000e-03 +2.020819520716e+00 7.998315076266e-02 7.998315076266e-02 2.022401750324e+00 2.023982743039e+00 1.792946737639e-01 6.359474464643e-04 5.320409969079e-03 7.688671297637e-02 5.577410522058e-03 1.000000000000e-03 +1.363453020654e-01 3.699232263673e-01 1.363453020654e-01 3.942502185178e-01 4.171609715645e-01 2.636265707486e-02 0.000000000000e+00 7.879287159264e-01 1.000000000000e-32 3.793244349992e-02 1.000000000000e-03 +4.518423607327e-01 4.518423607327e-01 1.508966476655e-01 6.390015946028e-01 6.565766034376e-01 2.603549095659e-02 7.459736321089e-03 4.297827338954e-01 6.910400646814e-01 3.840910861513e-02 1.000000000000e-03 +7.336680399356e-01 4.263324498264e-01 1.425376760892e-01 8.485447251606e-01 8.604331116960e-01 6.420450578599e-02 6.091901678523e-03 1.423241625478e-01 3.976656364164e-01 1.557523086204e-02 1.000000000000e-03 +9.026754672765e-01 3.692803592801e-01 1.238339207224e-01 9.752902044894e-01 9.831204518747e-01 1.267383659059e-01 6.019154824087e-03 7.123914034709e-02 2.813442737744e-01 7.890270581070e-03 1.000000000000e-03 +1.025312105686e+00 3.280604173676e-01 1.095326905508e-01 1.076516860764e+00 1.082074841131e+00 1.959444314987e-01 6.275168835073e-03 4.803787063820e-02 2.310311923101e-01 5.103487720225e-03 1.000000000000e-03 +1.134820142550e+00 2.929787569582e-01 9.762301382848e-02 1.172029567872e+00 1.176088245326e+00 2.579568281447e-01 6.007889282445e-03 3.493543469457e-02 1.970206833321e-01 3.876617677431e-03 1.000000000000e-03 +1.241990491814e+00 2.642515130219e-01 8.804600576280e-02 1.269791023709e+00 1.272839873284e+00 3.098946912126e-01 5.429415556615e-03 2.628029316364e-02 1.708810280206e-01 3.226902649048e-03 1.000000000000e-03 +1.353235867777e+00 2.427195460667e-01 8.084220105216e-02 1.374830932108e+00 1.377205704807e+00 3.434614561681e-01 4.561001096006e-03 1.991927047750e-02 1.487700331141e-01 2.911534852139e-03 1.000000000000e-03 +1.475748032726e+00 2.279898803282e-01 7.591633848748e-02 1.493255383927e+00 1.495183912459e+00 3.393278809823e-01 3.385130141157e-03 1.496397878369e-02 1.289443410662e-01 2.947002165295e-03 1.000000000000e-03 +1.619365114728e+00 2.206605648923e-01 7.345352825586e-02 1.634329972709e+00 1.635979792207e+00 2.989832606072e-01 2.258790240944e-03 1.133235805421e-02 1.122118930823e-01 3.344668855270e-03 1.000000000000e-03 +1.792764079138e+00 2.236659649978e-01 7.442429884766e-02 1.806662532779e+00 1.808194813510e+00 2.372392021135e-01 1.450588623995e-03 9.171683754654e-03 1.009492928524e-01 4.215154962127e-03 1.000000000000e-03 +1.992805772590e+00 2.376558932080e-01 7.903561733592e-02 2.006926797580e+00 2.008482461873e+00 1.887607948443e-01 6.905139083839e-04 5.487213928244e-03 7.808267646998e-02 5.297710262478e-03 1.000000000000e-03 +1.435996413686e-01 7.474787891692e-01 1.435996413686e-01 7.611474215019e-01 7.745748861538e-01 6.350485480573e-02 6.953960756385e-03 1.642542316881e-01 4.272056903596e-01 1.574682759388e-02 1.000000000000e-03 +4.263324498264e-01 7.336680399356e-01 1.425376760892e-01 8.485447251606e-01 8.604331116960e-01 6.420450578599e-02 6.091901678523e-03 1.423241625478e-01 3.976656364164e-01 1.557523086204e-02 1.000000000000e-03 +6.771775886281e-01 6.771775886281e-01 1.343413358637e-01 9.576737299730e-01 9.670504472891e-01 8.535345767981e-02 6.422573225928e-03 1.128701765666e-01 3.541345892401e-01 1.171598699319e-02 1.000000000000e-03 +8.652673121075e-01 6.012915105099e-01 1.211436229380e-01 1.053678794516e+00 1.060619997639e+00 1.433907811703e-01 6.521723131879e-03 6.822324711518e-02 2.753245501327e-01 6.973949035207e-03 1.000000000000e-03 +9.997096850009e-01 5.343626829548e-01 1.074041010624e-01 1.133562054419e+00 1.138638912098e+00 2.217192095743e-01 6.699233126961e-03 4.532241346942e-02 2.244064107557e-01 4.510209115033e-03 1.000000000000e-03 +1.111798825902e+00 4.791613139724e-01 9.589773122301e-02 1.210657752664e+00 1.214449903841e+00 2.906111877200e-01 6.442827042525e-03 3.325488134028e-02 1.922234849228e-01 3.441023753578e-03 1.000000000000e-03 +1.219359194077e+00 4.343646135052e-01 8.680973908880e-02 1.294414717795e+00 1.297322393411e+00 3.463460180090e-01 5.809585825264e-03 2.516090350335e-02 1.672021514460e-01 2.887285974149e-03 1.000000000000e-03 +1.328951817877e+00 4.000899330102e-01 7.990258490470e-02 1.387870631123e+00 1.390168806947e+00 3.815693148208e-01 4.893217504283e-03 1.923589233026e-02 1.461958060284e-01 2.620755813317e-03 1.000000000000e-03 +1.448053825614e+00 3.762678814685e-01 7.510386200228e-02 1.496140835784e+00 1.498024696254e+00 3.757202673176e-01 3.656954919415e-03 1.459977769707e-02 1.273655181710e-01 2.661554584583e-03 1.000000000000e-03 +1.585966257751e+00 3.638521823974e-01 7.258749009733e-02 1.627168516583e+00 1.628786764766e+00 3.314737311419e-01 2.455942137433e-03 1.111374102997e-02 1.111242599274e-01 3.016830312782e-03 1.000000000000e-03 +1.750963033217e+00 3.672666287525e-01 7.323829529244e-02 1.789065767457e+00 1.790564203871e+00 2.633058010030e-01 1.604122314014e-03 9.138361030616e-03 1.007657405990e-01 3.797865433237e-03 1.000000000000e-03 +1.940439407973e+00 3.873893559028e-01 7.721110465645e-02 1.978730807634e+00 1.980236643374e+00 2.127667951046e-01 7.797320708366e-04 5.497089457404e-03 7.815290893430e-02 4.699981496213e-03 1.000000000000e-03 +1.230939711829e-01 9.111308109915e-01 1.230939711829e-01 9.194082229780e-01 9.276117755942e-01 1.190367002232e-01 5.851029117584e-03 7.372972923411e-02 2.862200575977e-01 8.400770502922e-03 1.000000000000e-03 +3.692803592801e-01 9.026754672765e-01 1.238339207224e-01 9.752902044894e-01 9.831204518747e-01 1.267383659059e-01 6.019154824087e-03 7.123914034709e-02 2.813442737744e-01 7.890270581070e-03 1.000000000000e-03 +6.012915105099e-01 8.652673121075e-01 1.211436229380e-01 1.053678794516e+00 1.060619997639e+00 1.433907811703e-01 6.521723131879e-03 6.822324711518e-02 2.753245501327e-01 6.973949035207e-03 1.000000000000e-03 +7.974054526948e-01 7.974054526948e-01 1.135593149280e-01 1.127701605911e+00 1.133404883518e+00 1.818636751884e-01 7.241921601534e-03 5.973090773101e-02 2.576192447328e-01 5.498624169802e-03 1.000000000000e-03 +9.511875981895e-01 7.218696482267e-01 1.034447846809e-01 1.194091133867e+00 1.198563498300e+00 2.593849352984e-01 7.343773035566e-03 4.246838599426e-02 2.172259090191e-01 3.855274011382e-03 1.000000000000e-03 +1.073870747774e+00 6.533049437764e-01 9.341710077195e-02 1.256982789257e+00 1.260449319570e+00 3.378360679704e-01 7.009578163213e-03 3.112269009045e-02 1.859590459407e-01 2.960015506951e-03 1.000000000000e-03 +1.183728515681e+00 5.958213623021e-01 8.500674652494e-02 1.325223111258e+00 1.327946701327e+00 4.021201615519e-01 6.410802855880e-03 2.391375813317e-02 1.630056513443e-01 2.486818855689e-03 1.000000000000e-03 +1.292309462142e+00 5.508652899948e-01 7.853283421262e-02 1.404818961170e+00 1.407012338152e+00 4.406593123166e-01 5.430569075066e-03 1.848560415023e-02 1.433162941432e-01 2.269326829252e-03 1.000000000000e-03 +1.407522977630e+00 5.187384612411e-01 7.390677203284e-02 1.500070172934e+00 1.501889721211e+00 4.337614804821e-01 4.104957049311e-03 1.419544116071e-02 1.255894597520e-01 2.305414484681e-03 1.000000000000e-03 +1.538366654571e+00 5.008674515399e-01 7.132361086692e-02 1.617850477612e+00 1.619421879986e+00 3.841847372485e-01 2.789633782864e-03 1.089176708129e-02 1.100089242910e-01 2.602914439449e-03 1.000000000000e-03 +1.692728296636e+00 5.026549077567e-01 7.155850358378e-02 1.765783407591e+00 1.767232769603e+00 3.055242546353e-01 1.852190812833e-03 9.093504614113e-03 1.005181277963e-01 3.273062563211e-03 1.000000000000e-03 +1.869234895754e+00 5.249532750583e-01 7.471699314202e-02 1.941549648219e+00 1.942986789858e+00 2.500690217252e-01 9.321372444974e-04 5.591279787877e-03 7.881962381058e-02 3.998895957209e-03 1.000000000000e-03 +1.108277236740e-01 1.036173938274e+00 1.108277236740e-01 1.042084072757e+00 1.047960876669e+00 1.834262349479e-01 6.010302317250e-03 4.915029454995e-02 2.336909035218e-01 5.451782839484e-03 1.000000000000e-03 +3.280604173676e-01 1.025312105686e+00 1.095326905508e-01 1.076516860764e+00 1.082074841131e+00 1.959444314987e-01 6.275168835073e-03 4.803787063820e-02 2.310311923101e-01 5.103487720225e-03 1.000000000000e-03 +5.343626829548e-01 9.997096850009e-01 1.074041010624e-01 1.133562054419e+00 1.138638912098e+00 2.217192095743e-01 6.699233126961e-03 4.532241346942e-02 2.244064107557e-01 4.510209115033e-03 1.000000000000e-03 +7.218696482267e-01 9.511875981895e-01 1.034447846809e-01 1.194091133867e+00 1.198563498300e+00 2.593849352984e-01 7.343773035566e-03 4.246838599426e-02 2.172259090191e-01 3.855274011382e-03 1.000000000000e-03 +8.837576464019e-01 8.837576464019e-01 9.726920858626e-02 1.249822049392e+00 1.253601393620e+00 3.086146528485e-01 7.708403695524e-03 3.746615864335e-02 2.040320199363e-01 3.240286845650e-03 1.000000000000e-03 +1.019519860458e+00 8.120246258461e-01 8.989120231782e-02 1.303382038716e+00 1.306478154085e+00 4.009455493668e-01 7.711885812937e-03 2.885137081001e-02 1.790449068748e-01 2.494104253257e-03 1.000000000000e-03 +1.135770118338e+00 7.467867542766e-01 8.272386986111e-02 1.359288129159e+00 1.361803016856e+00 4.772442581691e-01 7.142477499569e-03 2.244912550746e-02 1.579350271031e-01 2.095363082704e-03 1.000000000000e-03 +1.244585980340e+00 6.934545992361e-01 7.678903568998e-02 1.424736306711e+00 1.426804156030e+00 5.238804842355e-01 6.184764171381e-03 1.770851661063e-02 1.402716278061e-01 1.908832319759e-03 1.000000000000e-03 +1.356376023363e+00 6.539305042511e-01 7.239380936358e-02 1.505782527838e+00 1.507521769255e+00 5.179308238571e-01 4.756707817399e-03 1.377609016000e-02 1.237205190922e-01 1.930759773193e-03 1.000000000000e-03 +1.479854120888e+00 6.302645794163e-01 6.975004021718e-02 1.608478056791e+00 1.609989666826e+00 4.619491343509e-01 3.293034338890e-03 1.069284720119e-02 1.089997308926e-01 2.164740499850e-03 1.000000000000e-03 +1.622727110525e+00 6.283698932303e-01 6.953194517343e-02 1.740141372978e+00 1.741529985200e+00 3.695145391020e-01 2.231197325279e-03 9.057278222534e-03 1.003177076566e-01 2.706253460094e-03 1.000000000000e-03 +1.785319266774e+00 6.489878283701e-01 7.180960540782e-02 1.899618405283e+00 1.900975198449e+00 3.067157283121e-01 1.167474353630e-03 5.709558945940e-03 7.964894465326e-02 3.260347962927e-03 1.000000000000e-03 +9.853866655657e-02 1.145092639744e+00 9.853866655657e-02 1.149324594013e+00 1.153541022768e+00 2.431233580559e-01 5.793148379343e-03 3.574203087068e-02 1.992821307445e-01 4.113138317916e-03 1.000000000000e-03 +2.929787569582e-01 1.134820142550e+00 9.762301382848e-02 1.172029567872e+00 1.176088245326e+00 2.579568281447e-01 6.007889282445e-03 3.493543469457e-02 1.970206833321e-01 3.876617677431e-03 1.000000000000e-03 +4.791613139724e-01 1.111798825902e+00 9.589773122301e-02 1.210657752664e+00 1.214449903841e+00 2.906111877200e-01 6.442827042525e-03 3.325488134028e-02 1.922234849228e-01 3.441023753578e-03 1.000000000000e-03 +6.533049437764e-01 1.073870747774e+00 9.341710077195e-02 1.256982789257e+00 1.260449319570e+00 3.378360679704e-01 7.009578163213e-03 3.112269009045e-02 1.859590459407e-01 2.960015506951e-03 1.000000000000e-03 +8.120246258461e-01 1.019519860458e+00 8.989120231782e-02 1.303382038716e+00 1.306478154085e+00 4.009455493668e-01 7.711885812937e-03 2.885137081001e-02 1.790449068748e-01 2.494104253257e-03 1.000000000000e-03 +9.530189719772e-01 9.530189719772e-01 8.515921827218e-02 1.347772355369e+00 1.350460075068e+00 4.680620446679e-01 8.030139344393e-03 2.573421441411e-02 1.690963381367e-01 2.136468896361e-03 1.000000000000e-03 +1.076654825200e+00 8.855785166779e-01 7.978553534258e-02 1.394071347467e+00 1.396352625048e+00 5.715975083103e-01 7.935044307390e-03 2.082333510563e-02 1.521086421156e-01 1.749482783709e-03 1.000000000000e-03 +1.188005778343e+00 8.265975826541e-01 7.467368223126e-02 1.447280654547e+00 1.449205800376e+00 6.328834947113e-01 7.059702545990e-03 1.673223256330e-02 1.363501724047e-01 1.580069646873e-03 1.000000000000e-03 +1.297378946438e+00 7.807658845044e-01 7.059037062518e-02 1.514195329892e+00 1.515839865386e+00 6.339384166198e-01 5.621391028571e-03 1.330111304473e-02 1.215689701122e-01 1.577440290387e-03 1.000000000000e-03 +1.414139863481e+00 7.511508396989e-01 6.793637190840e-02 1.601255487880e+00 1.602696006139e+00 5.729843199905e-01 4.005451507315e-03 1.048576209044e-02 1.079390882264e-01 1.745248456392e-03 1.000000000000e-03 +1.545724628631e+00 7.438066435460e-01 6.728284433015e-02 1.715375454686e+00 1.716694478258e+00 4.649401179479e-01 2.790914531278e-03 9.004109637591e-03 1.000228287142e-01 2.150814613318e-03 1.000000000000e-03 +1.694208277854e+00 7.590680751711e-01 6.866633100748e-02 1.856482165681e+00 1.857751624009e+00 3.950027763486e-01 1.537601642797e-03 5.838952539818e-03 8.054641546489e-02 2.531627775491e-03 1.000000000000e-03 +8.866905544943e-02 1.252614998406e+00 8.866905544943e-02 1.255749392047e+00 1.258875981588e+00 2.935696210117e-01 5.239355191863e-03 2.677059281785e-02 1.724676872082e-01 3.406347007410e-03 1.000000000000e-03 +2.642515130219e-01 1.241990491814e+00 8.804600576280e-02 1.269791023709e+00 1.272839873284e+00 3.098946912126e-01 5.429415556615e-03 2.628029316364e-02 1.708810280206e-01 3.226902649048e-03 1.000000000000e-03 +4.343646135052e-01 1.219359194077e+00 8.680973908880e-02 1.294414717795e+00 1.297322393411e+00 3.463460180090e-01 5.809585825264e-03 2.516090350335e-02 1.672021514460e-01 2.887285974149e-03 1.000000000000e-03 +5.958213623021e-01 1.183728515681e+00 8.500674652494e-02 1.325223111258e+00 1.327946701327e+00 4.021201615519e-01 6.410802855880e-03 2.391375813317e-02 1.630056513443e-01 2.486818855689e-03 1.000000000000e-03 +7.467867542766e-01 1.135770118338e+00 8.272386986111e-02 1.359288129159e+00 1.361803016856e+00 4.772442581691e-01 7.142477499569e-03 2.244912550746e-02 1.579350271031e-01 2.095363082704e-03 1.000000000000e-03 +8.855785166779e-01 1.076654825200e+00 7.978553534258e-02 1.394071347467e+00 1.396352625048e+00 5.715975083103e-01 7.935044307390e-03 2.082333510563e-02 1.521086421156e-01 1.749482783709e-03 1.000000000000e-03 +1.011524290773e+00 1.011524290773e+00 7.612407190001e-02 1.430511370682e+00 1.432535394317e+00 6.588464573161e-01 8.225628494380e-03 1.872734171150e-02 1.442503291408e-01 1.517804321319e-03 1.000000000000e-03 +1.125779209258e+00 9.497049526125e-01 7.214282992530e-02 1.472860592525e+00 1.474626363837e+00 7.612979572913e-01 7.894117050175e-03 1.555393057587e-02 1.314615726526e-01 1.313546148945e-03 1.000000000000e-03 +1.233896793680e+00 8.986415355632e-01 6.852224185870e-02 1.526452720163e+00 1.527989922913e+00 7.852777850876e-01 6.632457870852e-03 1.266900324344e-02 1.186451443191e-01 1.273434724616e-03 1.000000000000e-03 +1.344960916087e+00 8.632463147484e-01 6.592880282032e-02 1.598159587065e+00 1.599518887906e+00 7.229530639530e-01 4.921182577874e-03 1.021058521621e-02 1.065133544898e-01 1.383215660685e-03 1.000000000000e-03 +1.466257821884e+00 8.491323997058e-01 6.490656965719e-02 1.694384204502e+00 1.695626932804e+00 6.062470187133e-01 3.625131766219e-03 8.969442292464e-03 9.983009061213e-02 1.649492647605e-03 1.000000000000e-03 +1.601280409531e+00 8.558616643000e-01 6.543810294358e-02 1.815653639428e+00 1.816832486413e+00 5.355668834531e-01 2.134241820419e-03 5.977521817607e-03 8.149656991833e-02 1.867180423017e-03 1.000000000000e-03 +8.129674901507e-02 1.365026826285e+00 8.129674901507e-02 1.367445574009e+00 1.369860050983e+00 3.268656301899e-01 4.412251070888e-03 2.024800405747e-02 1.499926074381e-01 3.059361118571e-03 1.000000000000e-03 +2.427195460667e-01 1.353235867777e+00 8.084220105216e-02 1.374830932108e+00 1.377205704807e+00 3.434614561681e-01 4.561001096006e-03 1.991927047750e-02 1.487700331141e-01 2.911534852139e-03 1.000000000000e-03 +4.000899330102e-01 1.328951817877e+00 7.990258490470e-02 1.387870631123e+00 1.390168806947e+00 3.815693148208e-01 4.893217504283e-03 1.923589233026e-02 1.461958060284e-01 2.620755813317e-03 1.000000000000e-03 +5.508652899948e-01 1.292309462142e+00 7.853283421262e-02 1.404818961170e+00 1.407012338152e+00 4.406593123166e-01 5.430569075066e-03 1.848560415023e-02 1.433162941432e-01 2.269326829252e-03 1.000000000000e-03 +6.934545992361e-01 1.244585980340e+00 7.678903568998e-02 1.424736306711e+00 1.426804156030e+00 5.238804842355e-01 6.184764171381e-03 1.770851661063e-02 1.402716278061e-01 1.908832319759e-03 1.000000000000e-03 +8.265975826541e-01 1.188005778343e+00 7.467368223126e-02 1.447280654547e+00 1.449205800376e+00 6.328834947113e-01 7.059702545990e-03 1.673223256330e-02 1.363501724047e-01 1.580069646873e-03 1.000000000000e-03 +9.497049526125e-01 1.125779209258e+00 7.214282992530e-02 1.472860592525e+00 1.474626363837e+00 7.612979572913e-01 7.894117050175e-03 1.555393057587e-02 1.314615726526e-01 1.313546148945e-03 1.000000000000e-03 +1.063470849840e+00 1.063470849840e+00 6.922611054622e-02 1.503974899032e+00 1.505567252334e+00 8.691217708911e-01 8.160484157316e-03 1.408401750588e-02 1.250955968045e-01 1.150586757221e-03 1.000000000000e-03 +1.170347280862e+00 1.008302717297e+00 6.624062416669e-02 1.544793554987e+00 1.546213099097e+00 9.518402303401e-01 7.524429070652e-03 1.185770809660e-02 1.147834100315e-01 1.050596484709e-03 1.000000000000e-03 +1.276407817314e+00 9.670498751036e-01 6.379466977995e-02 1.601375151873e+00 1.602645355944e+00 9.142735026360e-01 6.009757009697e-03 9.859889287566e-03 1.046682021520e-01 1.093764608858e-03 1.000000000000e-03 +1.388637024867e+00 9.452165486884e-01 6.247913831093e-02 1.679805676483e+00 1.680967207732e+00 8.114045646364e-01 4.852796124912e-03 8.971103324554e-03 9.983933384612e-02 1.232430828693e-03 1.000000000000e-03 +1.511747493122e+00 9.411571745653e-01 6.226367886473e-02 1.780774356901e+00 1.781862530024e+00 7.547646008263e-01 3.103112203385e-03 6.167046387685e-03 8.277846195777e-02 1.324916402949e-03 1.000000000000e-03 +7.630594105272e-02 1.489574777163e+00 7.630594105272e-02 1.491527945900e+00 1.493478560288e+00 3.236078908952e-01 3.260983994054e-03 1.511544102819e-02 1.295952718110e-01 3.090159505177e-03 1.000000000000e-03 +2.279898803282e-01 1.475748032726e+00 7.591633848748e-02 1.493255383927e+00 1.495183912459e+00 3.393278809823e-01 3.385130141157e-03 1.496397878369e-02 1.289443410662e-01 2.947002165295e-03 1.000000000000e-03 +3.762678814685e-01 1.448053825614e+00 7.510386200228e-02 1.496140835784e+00 1.498024696254e+00 3.757202673176e-01 3.656954919415e-03 1.459977769707e-02 1.273655181710e-01 2.661554584583e-03 1.000000000000e-03 +5.187384612411e-01 1.407522977630e+00 7.390677203284e-02 1.500070172934e+00 1.501889721211e+00 4.337614804821e-01 4.104957049311e-03 1.419544116071e-02 1.255894597520e-01 2.305414484681e-03 1.000000000000e-03 +6.539305042512e-01 1.356376023363e+00 7.239380936358e-02 1.505782527838e+00 1.507521769255e+00 5.179308238571e-01 4.756707817399e-03 1.377609016000e-02 1.237205190922e-01 1.930759773193e-03 1.000000000000e-03 +7.807658845044e-01 1.297378946438e+00 7.059037062518e-02 1.514195329892e+00 1.515839865386e+00 6.339384166198e-01 5.621391028571e-03 1.330111304473e-02 1.215689701122e-01 1.577440290387e-03 1.000000000000e-03 +8.986415355632e-01 1.233896793680e+00 6.852224185870e-02 1.526452720163e+00 1.527989922913e+00 7.852777850876e-01 6.632457870852e-03 1.266900324344e-02 1.186451443191e-01 1.273434724616e-03 1.000000000000e-03 +1.008302717297e+00 1.170347280862e+00 6.624062416669e-02 1.544793554987e+00 1.546213099097e+00 9.518402303401e-01 7.524429070652e-03 1.185770809660e-02 1.147834100315e-01 1.050596484709e-03 1.000000000000e-03 +1.111915710219e+00 1.111915710219e+00 6.384481791227e-02 1.572486277608e+00 1.573781831780e+00 1.078724521984e+00 7.815488837560e-03 1.086768031821e-02 1.098872165157e-01 9.270207357116e-04 1.000000000000e-03 +1.212914349692e+00 1.064450496378e+00 6.163607124851e-02 1.613758370676e+00 1.614935009283e+00 1.135665123048e+00 7.157605696407e-03 9.453850723001e-03 1.024903828713e-01 8.805412614209e-04 1.000000000000e-03 +1.316679761772e+00 1.033430331067e+00 6.008689741434e-02 1.673805199009e+00 1.674883362945e+00 1.101084815190e+00 6.610739498881e-03 9.005763326785e-03 1.000320133579e-01 9.081952509054e-04 1.000000000000e-03 +1.430085777156e+00 1.017755915460e+00 5.928121547195e-02 1.755269903313e+00 1.756270678451e+00 1.051324174627e+00 4.464358262941e-03 6.369621812213e-03 8.412703233281e-02 9.511813997379e-04 1.000000000000e-03 +7.387522244524e-02 1.636469103365e+00 7.387522244524e-02 1.638135731482e+00 1.639800665706e+00 2.850952917612e-01 2.169528686925e-03 1.141475543242e-02 1.126190995861e-01 3.507599139300e-03 1.000000000000e-03 +2.206605648923e-01 1.619365114728e+00 7.345352825586e-02 1.634329972709e+00 1.635979792207e+00 2.989832606072e-01 2.258790240944e-03 1.133235805421e-02 1.122118930823e-01 3.344668855270e-03 1.000000000000e-03 +3.638521823974e-01 1.585966257751e+00 7.258749009733e-02 1.627168516583e+00 1.628786764766e+00 3.314737311419e-01 2.455942137433e-03 1.111374102997e-02 1.111242599274e-01 3.016830312782e-03 1.000000000000e-03 +5.008674515399e-01 1.538366654571e+00 7.132361086692e-02 1.617850477612e+00 1.619421879986e+00 3.841847372485e-01 2.789633782864e-03 1.089176708129e-02 1.100089242910e-01 2.602914439449e-03 1.000000000000e-03 +6.302645794163e-01 1.479854120888e+00 6.975004021718e-02 1.608478056791e+00 1.609989666826e+00 4.619491343509e-01 3.293034338890e-03 1.069284720119e-02 1.089997308926e-01 2.164740499850e-03 1.000000000000e-03 +7.511508396989e-01 1.414139863481e+00 6.793637190840e-02 1.601255487880e+00 1.602696006139e+00 5.729843199905e-01 4.005451507315e-03 1.048576209044e-02 1.079390882264e-01 1.745248456392e-03 1.000000000000e-03 +8.632463147484e-01 1.344960916087e+00 6.592880282032e-02 1.598159587065e+00 1.599518887906e+00 7.229530639530e-01 4.921182577874e-03 1.021058521621e-02 1.065133544898e-01 1.383215660685e-03 1.000000000000e-03 +9.670498751036e-01 1.276407817314e+00 6.379466977995e-02 1.601375151873e+00 1.602645355944e+00 9.142735026360e-01 6.009757009697e-03 9.859889287566e-03 1.046682021520e-01 1.093764608858e-03 1.000000000000e-03 +1.064450496378e+00 1.212914349692e+00 6.163607124851e-02 1.613758370676e+00 1.614935009283e+00 1.135665123048e+00 7.157605696407e-03 9.453850723001e-03 1.024903828713e-01 8.805412614209e-04 1.000000000000e-03 +1.158406393543e+00 1.158406393543e+00 5.957952108330e-02 1.638234032489e+00 1.639317072606e+00 1.348342187885e+00 8.164505858429e-03 9.082826969062e-03 1.004590959825e-01 7.416514954329e-04 1.000000000000e-03 +1.253361651229e+00 1.116774932033e+00 5.784907143963e-02 1.678720249949e+00 1.679716700118e+00 1.450791165152e+00 8.466325700597e-03 8.753491788438e-03 9.862100175497e-02 6.892790802839e-04 1.000000000000e-03 +1.358586021467e+00 1.089316721140e+00 5.660505783159e-02 1.741369259141e+00 1.742289020011e+00 1.344396010927e+00 5.466830024164e-03 6.099575548867e-03 8.232439593102e-02 7.438284492606e-04 1.000000000000e-03 +7.502520181018e-02 1.814688658443e+00 7.502520181018e-02 1.816238890672e+00 1.817787800844e+00 2.263915272180e-01 1.372942183668e-03 9.096688824042e-03 1.005357251265e-01 4.417126437055e-03 1.000000000000e-03 +2.236659649978e-01 1.792764079138e+00 7.442429884766e-02 1.806662532779e+00 1.808194813510e+00 2.372392021135e-01 1.450588623995e-03 9.171683754654e-03 1.009492928524e-01 4.215154962127e-03 1.000000000000e-03 +3.672666287525e-01 1.750963033217e+00 7.323829529244e-02 1.789065767457e+00 1.790564203871e+00 2.633058010030e-01 1.604122314014e-03 9.138361030616e-03 1.007657405990e-01 3.797865433237e-03 1.000000000000e-03 +5.026549077567e-01 1.692728296636e+00 7.155850358378e-02 1.765783407591e+00 1.767232769603e+00 3.055242546353e-01 1.852190812833e-03 9.093504614113e-03 1.005181277963e-01 3.273062563211e-03 1.000000000000e-03 +6.283698932303e-01 1.622727110525e+00 6.953194517343e-02 1.740141372978e+00 1.741529985200e+00 3.695145391020e-01 2.231197325279e-03 9.057278222534e-03 1.003177076566e-01 2.706253460094e-03 1.000000000000e-03 +7.438066435460e-01 1.545724628631e+00 6.728284433015e-02 1.715375454686e+00 1.716694478258e+00 4.649401179479e-01 2.790914531278e-03 9.004109637591e-03 1.000228287142e-01 2.150814613318e-03 1.000000000000e-03 +8.491323997058e-01 1.466257821884e+00 6.490656965719e-02 1.694384204502e+00 1.695626932804e+00 6.062470187133e-01 3.625131766219e-03 8.969442292464e-03 9.983009061214e-02 1.649492647605e-03 1.000000000000e-03 +9.452165486883e-01 1.388637024867e+00 6.247913831093e-02 1.679805676483e+00 1.680967207732e+00 8.114045646364e-01 4.852796124912e-03 8.971103324554e-03 9.983933384612e-02 1.232430828693e-03 1.000000000000e-03 +1.033430331067e+00 1.316679761772e+00 6.008689741434e-02 1.673805199009e+00 1.674883362945e+00 1.101084815190e+00 6.610739498881e-03 9.005763326785e-03 1.000320133579e-01 9.081952509055e-04 1.000000000000e-03 +1.116774932033e+00 1.253361651229e+00 5.784907143963e-02 1.678720249949e+00 1.679716700118e+00 1.450791165152e+00 8.466325700597e-03 8.753491788438e-03 9.862100175497e-02 6.892790802839e-04 1.000000000000e-03 +1.200635941474e+00 1.200635941474e+00 5.586324528300e-02 1.697955631905e+00 1.698874342054e+00 1.746327852798e+00 9.539908799339e-03 8.194259271581e-03 9.541872208314e-02 5.726301612827e-04 1.000000000000e-03 +1.298330300283e+00 1.162172677002e+00 5.430564311828e-02 1.742500186457e+00 1.743346208496e+00 1.379840548527e+00 4.765118926291e-03 5.180075623279e-03 7.586593162561e-02 7.247214187666e-04 1.000000000000e-03 +7.998315076266e-02 2.020819520716e+00 7.998315076266e-02 2.022401750324e+00 2.023982743039e+00 1.792946737639e-01 6.359474464643e-04 5.320409969079e-03 7.688671297637e-02 5.577410522058e-03 1.000000000000e-03 +2.376558932080e-01 1.992805772590e+00 7.903561733592e-02 2.006926797580e+00 2.008482461873e+00 1.887607948443e-01 6.905139083839e-04 5.487213928244e-03 7.808267646998e-02 5.297710262478e-03 1.000000000000e-03 +3.873893559028e-01 1.940439407973e+00 7.721110465645e-02 1.978730807634e+00 1.980236643374e+00 2.127667951046e-01 7.797320708366e-04 5.497089457404e-03 7.815290893430e-02 4.699981496213e-03 1.000000000000e-03 +5.249532750583e-01 1.869234895754e+00 7.471699314202e-02 1.941549648219e+00 1.942986789858e+00 2.500690217252e-01 9.321372444974e-04 5.591279787877e-03 7.881962381058e-02 3.998895957209e-03 1.000000000000e-03 +6.489878283701e-01 1.785319266774e+00 7.180960540782e-02 1.899618405283e+00 1.900975198449e+00 3.067157283121e-01 1.167474353630e-03 5.709558945940e-03 7.964894465326e-02 3.260347962927e-03 1.000000000000e-03 +7.590680751711e-01 1.694208277854e+00 6.866633100748e-02 1.856482165681e+00 1.857751624009e+00 3.950027763486e-01 1.537601642797e-03 5.838952539818e-03 8.054641546489e-02 2.531627775491e-03 1.000000000000e-03 +8.558616643000e-01 1.601280409531e+00 6.543810294358e-02 1.815653639428e+00 1.816832486413e+00 5.355668834531e-01 2.134241820419e-03 5.977521817608e-03 8.149656991833e-02 1.867180423017e-03 1.000000000000e-03 +9.411571745653e-01 1.511747493122e+00 6.226367886473e-02 1.780774356901e+00 1.781862530024e+00 7.547646008263e-01 3.103112203385e-03 6.167046387685e-03 8.277846195777e-02 1.324916402949e-03 1.000000000000e-03 +1.017755915460e+00 1.430085777156e+00 5.928121547195e-02 1.755269903313e+00 1.756270678451e+00 1.051324174627e+00 4.464358262941e-03 6.369621812213e-03 8.412703233281e-02 9.511813997379e-04 1.000000000000e-03 +1.089316721140e+00 1.358586021467e+00 5.660505783159e-02 1.741369259141e+00 1.742289020011e+00 1.344396010927e+00 5.466830024164e-03 6.099575548867e-03 8.232439593102e-02 7.438284492606e-04 1.000000000000e-03 +1.162172677002e+00 1.298330300283e+00 5.430564311828e-02 1.742500186457e+00 1.743346208496e+00 1.379840548527e+00 4.765118926291e-03 5.180075623279e-03 7.586593162561e-02 7.247214187666e-04 1.000000000000e-03 +1.254300260084e+00 1.254300260084e+00 5.257104397790e-02 1.773848439099e+00 1.774627284688e+00 8.932758086250e-01 1.455413745440e-03 2.443949110769e-03 5.211045012246e-02 1.119475071803e-03 1.000000000000e-03 +1.363453020654e-01 1.363453020654e-01 3.699232263673e-01 1.928213753468e-01 4.171609715645e-01 2.636265707486e-02 0.000000000000e+00 7.879287159264e-01 1.000000000000e-32 3.793244349992e-02 1.000000000000e-03 +4.518423607327e-01 1.508966476655e-01 4.518423607327e-01 4.763730861721e-01 6.565766034376e-01 2.603549095659e-02 7.459736321089e-03 4.297827338954e-01 6.910400646814e-01 3.840910861513e-02 1.000000000000e-03 +7.336680399356e-01 1.425376760892e-01 4.263324498264e-01 7.473859658355e-01 8.604331116960e-01 6.420450578599e-02 6.091901678523e-03 1.423241625478e-01 3.976656364164e-01 1.557523086204e-02 1.000000000000e-03 +9.026754672765e-01 1.238339207224e-01 3.692803592801e-01 9.111299792808e-01 9.831204518747e-01 1.267383659059e-01 6.019154824087e-03 7.123914034709e-02 2.813442737744e-01 7.890270581070e-03 1.000000000000e-03 +1.025312105686e+00 1.095326905508e-01 3.280604173676e-01 1.031146121733e+00 1.082074841131e+00 1.959444314987e-01 6.275168835073e-03 4.803787063820e-02 2.310311923101e-01 5.103487720225e-03 1.000000000000e-03 +1.134820142550e+00 9.762301382848e-02 2.929787569582e-01 1.139011417311e+00 1.176088245326e+00 2.579568281447e-01 6.007889282445e-03 3.493543469457e-02 1.970206833321e-01 3.876617677431e-03 1.000000000000e-03 +1.241990491814e+00 8.804600576280e-02 2.642515130219e-01 1.245107417409e+00 1.272839873284e+00 3.098946912126e-01 5.429415556615e-03 2.628029316364e-02 1.708810280206e-01 3.226902649048e-03 1.000000000000e-03 +1.353235867777e+00 8.084220105216e-02 2.427195460667e-01 1.355648470404e+00 1.377205704807e+00 3.434614561681e-01 4.561001096006e-03 1.991927047750e-02 1.487700331141e-01 2.911534852139e-03 1.000000000000e-03 +1.475748032726e+00 7.591633848748e-02 2.279898803282e-01 1.477699410078e+00 1.495183912459e+00 3.393278809823e-01 3.385130141157e-03 1.496397878369e-02 1.289443410662e-01 2.947002165295e-03 1.000000000000e-03 +1.619365114728e+00 7.345352825586e-02 2.206605648923e-01 1.621030164929e+00 1.635979792207e+00 2.989832606072e-01 2.258790240944e-03 1.133235805421e-02 1.122118930823e-01 3.344668855270e-03 1.000000000000e-03 +1.792764079138e+00 7.442429884766e-02 2.236659649978e-01 1.794308228735e+00 1.808194813510e+00 2.372392021135e-01 1.450588623995e-03 9.171683754654e-03 1.009492928524e-01 4.215154962127e-03 1.000000000000e-03 +1.992805772590e+00 7.903561733592e-02 2.376558932080e-01 1.994372451694e+00 2.008482461873e+00 1.887607948443e-01 6.905139083839e-04 5.487213928244e-03 7.808267646998e-02 5.297710262478e-03 1.000000000000e-03 +1.508966476655e-01 4.518423607327e-01 4.518423607327e-01 4.763730861721e-01 6.565766034376e-01 2.603549095659e-02 7.459736321089e-03 4.297827338954e-01 6.910400646814e-01 3.840910861513e-02 1.000000000000e-03 +4.557657442084e-01 4.557657442084e-01 4.557657442084e-01 6.445500967246e-01 7.894094253184e-01 3.429193272115e-02 6.135312553024e-03 2.683712494239e-01 5.460680151205e-01 2.916137763746e-02 1.000000000000e-03 +7.132154354623e-01 4.190733661356e-01 4.190733661356e-01 8.272235148894e-01 9.273193785262e-01 7.340947029252e-02 6.188561534542e-03 1.264529258258e-01 3.748376327393e-01 1.362222062106e-02 1.000000000000e-03 +8.861189065772e-01 3.665806503660e-01 3.665806503660e-01 9.589515575963e-01 1.026630149099e+00 1.376412763102e-01 6.371171810210e-03 6.943235322647e-02 2.777535942891e-01 7.265262476541e-03 1.000000000000e-03 +1.012814002178e+00 3.245731340256e-01 3.245731340256e-01 1.063550620487e+00 1.111974658736e+00 2.084479861261e-01 6.508630077983e-03 4.683636094747e-02 2.281236529884e-01 4.797359852617e-03 1.000000000000e-03 +1.123677479395e+00 2.901675643229e-01 2.901675643229e-01 1.160537932635e+00 1.196263143489e+00 2.732840295168e-01 6.238090750400e-03 3.423960098269e-02 1.950487146635e-01 3.659196630582e-03 1.000000000000e-03 +1.230974676075e+00 2.623259509291e-01 2.623259509291e-01 1.258615730741e+00 1.285662654898e+00 3.274071652269e-01 5.629525724929e-03 2.579139824732e-02 1.692841078297e-01 3.054300901775e-03 1.000000000000e-03 +1.341297269427e+00 2.412786202881e-01 2.412786202881e-01 1.362825644600e+00 1.384019187073e+00 3.613336658286e-01 4.727202371939e-03 1.962397702868e-02 1.476631941980e-01 2.767525128629e-03 1.000000000000e-03 +1.462015768428e+00 2.267585919039e-01 2.267585919039e-01 1.479496389362e+00 1.496772870257e+00 3.560430161959e-01 3.517812872320e-03 1.482045446322e-02 1.283244778903e-01 2.808649389291e-03 1.000000000000e-03 +1.602654333952e+00 2.193520252234e-01 2.193520252234e-01 1.617595816360e+00 1.632400544007e+00 3.137380930421e-01 2.354249134384e-03 1.125580151053e-02 1.118322230970e-01 3.187371958259e-03 1.000000000000e-03 +1.771584394374e+00 2.218406349285e-01 2.218406349285e-01 1.785419988041e+00 1.799149188089e+00 2.489518161987e-01 1.530660461625e-03 9.222630818671e-03 1.012292822078e-01 4.016841552993e-03 1.000000000000e-03 +1.965922938548e+00 2.348118975979e-01 2.348118975979e-01 1.979896367885e+00 1.993771866292e+00 1.992065608078e-01 7.477865161520e-04 5.630737108655e-03 7.909724751957e-02 5.019914986459e-03 1.000000000000e-03 +1.425376760892e-01 7.336680399356e-01 4.263324498264e-01 7.473859658355e-01 8.604331116960e-01 6.420450578599e-02 6.091901678523e-03 1.423241625478e-01 3.976656364164e-01 1.557523086204e-02 1.000000000000e-03 +4.190733661356e-01 7.132154354623e-01 4.190733661356e-01 8.272235148894e-01 9.273193785262e-01 7.340947029252e-02 6.188561534542e-03 1.264529258258e-01 3.748376327393e-01 1.362222062106e-02 1.000000000000e-03 +6.605618331866e-01 6.605618331866e-01 3.941007021126e-01 9.341755032785e-01 1.013902970866e+00 1.014830850568e-01 6.640485755633e-03 9.815161440821e-02 3.302383220380e-01 9.853858891267e-03 1.000000000000e-03 +8.461017259547e-01 5.915819832128e-01 3.561652018958e-01 1.032403687288e+00 1.092113100630e+00 1.576060665361e-01 6.724805800292e-03 6.400266767733e-02 2.666722242699e-01 6.344933427872e-03 1.000000000000e-03 +9.845974350752e-01 5.280728725484e-01 3.177179866690e-01 1.117270364718e+00 1.161566953271e+00 2.361039380684e-01 6.973456928627e-03 4.430330759629e-02 2.218690995367e-01 4.235422789561e-03 1.000000000000e-03 +1.099768310693e+00 4.746858661961e-01 2.849674241331e-01 1.197838473573e+00 1.231269037046e+00 3.062123805644e-01 6.670383902441e-03 3.267528189168e-02 1.905409897333e-01 3.265707278579e-03 1.000000000000e-03 +1.208017210963e+00 4.312137265753e-01 2.586398042249e-01 1.282673325508e+00 1.308489743292e+00 3.641697438528e-01 6.025063514997e-03 2.481698555426e-02 1.660554979325e-01 2.745972220043e-03 1.000000000000e-03 +1.317106755366e+00 3.977259226431e-01 2.384730999897e-01 1.375847416894e+00 1.396361534128e+00 3.999382461205e-01 5.075355447087e-03 1.903552171986e-02 1.454323887198e-01 2.500386021343e-03 1.000000000000e-03 +1.434762508299e+00 3.742266168404e-01 2.243204852877e-01 1.482763978512e+00 1.499636187911e+00 3.932259393126e-01 3.801879933063e-03 1.450265440160e-02 1.269411692329e-01 2.543067229360e-03 1.000000000000e-03 +1.570113924096e+00 3.617051426564e-01 2.167582136539e-01 1.611238140333e+00 1.625752892678e+00 3.472511924655e-01 2.562875699764e-03 1.107069934692e-02 1.109088682303e-01 2.879759729261e-03 1.000000000000e-03 +1.731164105974e+00 3.643589411072e-01 2.183205013157e-01 1.769092026938e+00 1.782512395769e+00 2.760835954578e-01 1.693287471750e-03 9.199862829276e-03 1.011042521871e-01 3.622091339190e-03 1.000000000000e-03 +1.915595553628e+00 3.829528984387e-01 2.294464522640e-01 1.953499231508e+00 1.966927787683e+00 2.243185508728e-01 8.438396619191e-04 5.642687543913e-03 7.918113933614e-02 4.457946059784e-03 1.000000000000e-03 +1.238339207224e-01 9.026754672765e-01 3.692803592801e-01 9.111299792808e-01 9.831204518747e-01 1.267383659059e-01 6.019154824087e-03 7.123914034709e-02 2.813442737744e-01 7.890270581070e-03 1.000000000000e-03 +3.665806503660e-01 8.861189065772e-01 3.665806503660e-01 9.589515575963e-01 1.026630149099e+00 1.376412763102e-01 6.371171810210e-03 6.943235322647e-02 2.777535942891e-01 7.265262476541e-03 1.000000000000e-03 +5.915819832128e-01 8.461017259547e-01 3.561652018958e-01 1.032403687288e+00 1.092113100630e+00 1.576060665361e-01 6.724805800292e-03 6.400266767733e-02 2.666722242699e-01 6.344933427872e-03 1.000000000000e-03 +7.833850229859e-01 7.833850229859e-01 3.344912871630e-01 1.107873724067e+00 1.157267734651e+00 2.029650558363e-01 7.503710715407e-03 5.545568436268e-02 2.482285782694e-01 4.926956494455e-03 1.000000000000e-03 +9.366457393342e-01 7.127750758195e-01 3.058672854687e-01 1.177010428893e+00 1.216103756282e+00 2.743739760280e-01 7.475667493102e-03 4.086940533496e-02 2.130972791290e-01 3.644660526762e-03 1.000000000000e-03 +1.061369645916e+00 6.472224466501e-01 2.774580632929e-01 1.243142156280e+00 1.273728934117e+00 3.551234225588e-01 7.248027121628e-03 3.061482288075e-02 1.844355439374e-01 2.815922399020e-03 1.000000000000e-03 +1.172452266403e+00 5.916600349727e-01 2.533208819877e-01 1.313280592248e+00 1.337489208640e+00 4.205201267816e-01 6.630055563045e-03 2.364948241760e-02 1.621024450347e-01 2.378007463408e-03 1.000000000000e-03 +1.280887767293e+00 5.477783933652e-01 2.344329126219e-01 1.393102523377e+00 1.412690139825e+00 4.597447597017e-01 5.625382917006e-03 1.835382393697e-02 1.428045437223e-01 2.175119952751e-03 1.000000000000e-03 +1.395048523246e+00 5.160623458897e-01 2.207826495233e-01 1.487440999521e+00 1.503737246126e+00 4.525076619204e-01 4.264639527181e-03 1.413668724110e-02 1.253292873509e-01 2.209907332300e-03 1.000000000000e-03 +1.523793356160e+00 4.980818900474e-01 2.130225360422e-01 1.603131860288e+00 1.617223040379e+00 4.013682570940e-01 2.911069828668e-03 1.087929766698e-02 1.099459345263e-01 2.491477545435e-03 1.000000000000e-03 +1.674814854749e+00 4.989802018336e-01 2.133852440128e-01 1.747565746835e+00 1.760545171778e+00 3.200447976029e-01 1.955545957297e-03 9.165338596083e-03 1.009143674172e-01 3.124562584644e-03 1.000000000000e-03 +1.846995892054e+00 5.194536114879e-01 2.221688388485e-01 1.918652099718e+00 1.931472203452e+00 2.635761333013e-01 1.007440528311e-03 5.733299041679e-03 7.981436129252e-02 3.793970218300e-03 1.000000000000e-03 +1.095326905508e-01 1.025312105686e+00 3.280604173676e-01 1.031146121733e+00 1.082074841131e+00 1.959444314987e-01 6.275168835073e-03 4.803787063820e-02 2.310311923101e-01 5.103487720225e-03 1.000000000000e-03 +3.245731340256e-01 1.012814002178e+00 3.245731340256e-01 1.063550620487e+00 1.111974658736e+00 2.084479861261e-01 6.508630077983e-03 4.683636094747e-02 2.281236529884e-01 4.797359852617e-03 1.000000000000e-03 +5.280728725484e-01 9.845974350752e-01 3.177179866690e-01 1.117270364718e+00 1.161566953271e+00 2.361039380684e-01 6.973456928627e-03 4.430330759629e-02 2.218690995367e-01 4.235422789561e-03 1.000000000000e-03 +7.127750758195e-01 9.366457393342e-01 3.058672854687e-01 1.177010428893e+00 1.216103756282e+00 2.743739760280e-01 7.475667493102e-03 4.086940533496e-02 2.130972791290e-01 3.644660526762e-03 1.000000000000e-03 +8.729251167043e-01 8.729251167043e-01 2.881438548229e-01 1.234502538979e+00 1.267684266613e+00 3.336532408813e-01 7.967630736331e-03 3.581996108573e-02 1.994992650661e-01 2.997123592622e-03 1.000000000000e-03 +1.008150116816e+00 8.045266494517e-01 2.669754436934e-01 1.289817734300e+00 1.317158181559e+00 4.187542424717e-01 7.877570904901e-03 2.821787855236e-02 1.770683438436e-01 2.388035507646e-03 1.000000000000e-03 +1.124985614616e+00 7.416645060217e-01 2.464476179506e-01 1.347463866894e+00 1.369815790892e+00 4.972302850621e-01 7.374194286146e-03 2.224581197390e-02 1.572182205086e-01 2.011140572170e-03 1.000000000000e-03 +1.233924564050e+00 6.896983607286e-01 2.292348071855e-01 1.413596002597e+00 1.432062238656e+00 5.444700215859e-01 6.388065834227e-03 1.759894644600e-02 1.398369941753e-01 1.836648411031e-03 1.000000000000e-03 +1.344987562612e+00 6.507396204496e-01 2.162900742030e-01 1.494139751564e+00 1.509713546804e+00 5.385667175713e-01 4.933741081869e-03 1.374130888774e-02 1.235642382989e-01 1.856780167385e-03 1.000000000000e-03 +1.466836612338e+00 6.270158773188e-01 2.083703770526e-01 1.595229938819e+00 1.608781144761e+00 4.812943975971e-01 3.435239682368e-03 1.070625286577e-02 1.090680361862e-01 2.077730397429e-03 1.000000000000e-03 +1.606972277217e+00 6.242060412632e-01 2.074300686996e-01 1.723946948631e+00 1.736381385265e+00 3.868122113671e-01 2.353506056874e-03 9.126545082002e-03 1.007005742122e-01 2.585233792040e-03 1.000000000000e-03 +1.765900051482e+00 6.428412066421e-01 2.136660155356e-01 1.879267891702e+00 1.891375418836e+00 3.235982960808e-01 1.261659524891e-03 5.848267157944e-03 8.061063589836e-02 3.090251129599e-03 1.000000000000e-03 +9.762301382848e-02 1.134820142550e+00 2.929787569582e-01 1.139011417311e+00 1.176088245326e+00 2.579568281447e-01 6.007889282445e-03 3.493543469457e-02 1.970206833321e-01 3.876617677431e-03 1.000000000000e-03 +2.901675643229e-01 1.123677479395e+00 2.901675643229e-01 1.160537932635e+00 1.196263143489e+00 2.732840295168e-01 6.238090750400e-03 3.423960098269e-02 1.950487146635e-01 3.659196630582e-03 1.000000000000e-03 +4.746858661961e-01 1.099768310693e+00 2.849674241331e-01 1.197838473573e+00 1.231269037046e+00 3.062123805644e-01 6.670383902441e-03 3.267528189168e-02 1.905409897333e-01 3.265707278579e-03 1.000000000000e-03 +6.472224466501e-01 1.061369645916e+00 2.774580632929e-01 1.243142156280e+00 1.273728934117e+00 3.551234225588e-01 7.248027121628e-03 3.061482288075e-02 1.844355439374e-01 2.815922399020e-03 1.000000000000e-03 +8.045266494517e-01 1.008150116816e+00 2.669754436934e-01 1.289817734300e+00 1.317158181559e+00 4.187542424717e-01 7.877570904902e-03 2.821787855236e-02 1.770683438436e-01 2.388035507646e-03 1.000000000000e-03 +9.443566036490e-01 9.443566036490e-01 2.532143619562e-01 1.335521916597e+00 1.359314644522e+00 4.954925321743e-01 8.272672767563e-03 2.504378642578e-02 1.668125575668e-01 2.018193888033e-03 1.000000000000e-03 +1.067277622235e+00 8.795163140958e-01 2.376755389406e-01 1.382978839203e+00 1.403253409579e+00 5.921193119027e-01 8.127237315273e-03 2.058851269981e-02 1.512485544460e-01 1.688848817963e-03 1.000000000000e-03 +1.178484326317e+00 8.222095263211e-01 2.228932477459e-01 1.436959920300e+00 1.454144151190e+00 6.548417916231e-01 7.269200899363e-03 1.665104684602e-02 1.360189808896e-01 1.527086408950e-03 1.000000000000e-03 +1.287323269750e+00 7.771014912182e-01 2.109139225528e-01 1.503691433936e+00 1.518411212821e+00 6.571487577045e-01 5.814873957337e-03 1.327296267967e-02 1.214402581962e-01 1.521725466686e-03 1.000000000000e-03 +1.402843597748e+00 7.475692298135e-01 2.029890806535e-01 1.589600551430e+00 1.602508808079e+00 5.949248995141e-01 4.167776904765e-03 1.050832695396e-02 1.080551657152e-01 1.680884428970e-03 1.000000000000e-03 +1.532257007337e+00 7.393855398180e-01 2.008062243713e-01 1.701323753148e+00 1.713133285175e+00 4.863466868039e-01 2.943073671338e-03 9.077085599203e-03 1.004273402305e-01 2.056146422158e-03 1.000000000000e-03 +1.677714268588e+00 7.526409149637e-01 2.044561709682e-01 1.838802195425e+00 1.850134005889e+00 4.173618431045e-01 1.663215123029e-03 5.977601272760e-03 8.149711155591e-02 2.396002453319e-03 1.000000000000e-03 +8.804600576280e-02 1.241990491814e+00 2.642515130219e-01 1.245107417409e+00 1.272839873284e+00 3.098946912126e-01 5.429415556615e-03 2.628029316364e-02 1.708810280206e-01 3.226902649048e-03 1.000000000000e-03 +2.623259509291e-01 1.230974676075e+00 2.623259509291e-01 1.258615730741e+00 1.285662654898e+00 3.274071652269e-01 5.629525724929e-03 2.579139824732e-02 1.692841078297e-01 3.054300901775e-03 1.000000000000e-03 +4.312137265753e-01 1.208017210963e+00 2.586398042249e-01 1.282673325508e+00 1.308489743292e+00 3.641697438528e-01 6.025063514997e-03 2.481698555426e-02 1.660554979325e-01 2.745972220043e-03 1.000000000000e-03 +5.916600349727e-01 1.172452266403e+00 2.533208819877e-01 1.313280592248e+00 1.337489208640e+00 4.205201267816e-01 6.630055563045e-03 2.364948241760e-02 1.621024450347e-01 2.378007463408e-03 1.000000000000e-03 +7.416645060217e-01 1.124985614616e+00 2.464476179506e-01 1.347463866894e+00 1.369815790892e+00 4.972302850621e-01 7.374194286146e-03 2.224581197390e-02 1.572182205086e-01 2.011140572170e-03 1.000000000000e-03 +8.795163140958e-01 1.067277622235e+00 2.376755389406e-01 1.382978839203e+00 1.403253409579e+00 5.921193119027e-01 8.127237315273e-03 2.058851269981e-02 1.512485544460e-01 1.688848817963e-03 1.000000000000e-03 +1.004432186979e+00 1.004432186979e+00 2.269427488399e-01 1.420481621309e+00 1.438496106261e+00 6.872749852832e-01 8.443357939178e-03 1.842790321191e-02 1.430924456889e-01 1.455021674604e-03 1.000000000000e-03 +1.117887905520e+00 9.446219722581e-01 2.153403498435e-01 1.463551857564e+00 1.479309131335e+00 7.847612751356e-01 8.099952312561e-03 1.548232418418e-02 1.311586155267e-01 1.274272867029e-03 1.000000000000e-03 +1.225420072392e+00 8.945961223218e-01 2.047476209810e-01 1.517220015652e+00 1.530972946917e+00 8.100004310845e-01 6.831858717718e-03 1.265158348479e-02 1.185635482899e-01 1.234567244194e-03 1.000000000000e-03 +1.335501334625e+00 8.594238605484e-01 1.970305897936e-01 1.588135128654e+00 1.600310669895e+00 7.475935010263e-01 5.097112757624e-03 1.022704066574e-02 1.065991487653e-01 1.337625325297e-03 1.000000000000e-03 +1.455113460470e+00 8.446325348486e-01 1.937976245685e-01 1.682486048016e+00 1.693610587194e+00 6.332878750210e-01 3.822175624372e-03 9.053171018580e-03 1.002949595420e-01 1.579060707529e-03 1.000000000000e-03 +1.587759557766e+00 8.494963814940e-01 1.949966110315e-01 1.800728884493e+00 1.811255971353e+00 5.655938521239e-01 2.310970112305e-03 6.128877029764e-03 8.252189628459e-02 1.768053164377e-03 1.000000000000e-03 +8.084220105216e-02 1.353235867777e+00 2.427195460667e-01 1.355648470404e+00 1.377205704807e+00 3.434614561681e-01 4.561001096006e-03 1.991927047750e-02 1.487700331141e-01 2.911534852139e-03 1.000000000000e-03 +2.412786202881e-01 1.341297269427e+00 2.412786202881e-01 1.362825644600e+00 1.384019187073e+00 3.613336658286e-01 4.727202371939e-03 1.962397702868e-02 1.476631941980e-01 2.767525128629e-03 1.000000000000e-03 +3.977259226431e-01 1.317106755366e+00 2.384730999897e-01 1.375847416894e+00 1.396361534128e+00 3.999382461205e-01 5.075355447087e-03 1.903552171986e-02 1.454323887198e-01 2.500386021343e-03 1.000000000000e-03 +5.477783933652e-01 1.280887767293e+00 2.344329126219e-01 1.393102523377e+00 1.412690139825e+00 4.597447597017e-01 5.625382917006e-03 1.835382393697e-02 1.428045437223e-01 2.175119952751e-03 1.000000000000e-03 +6.896983607286e-01 1.233924564050e+00 2.292348071855e-01 1.413596002597e+00 1.432062238656e+00 5.444700215859e-01 6.388065834227e-03 1.759894644600e-02 1.398369941753e-01 1.836648411031e-03 1.000000000000e-03 +8.222095263211e-01 1.178484326317e+00 2.228932477459e-01 1.436959920300e+00 1.454144151190e+00 6.548417916230e-01 7.269200899363e-03 1.665104684602e-02 1.360189808896e-01 1.527086408950e-03 1.000000000000e-03 +9.446219722581e-01 1.117887905520e+00 2.153403498435e-01 1.463551857564e+00 1.479309131335e+00 7.847612751355e-01 8.099952312561e-03 1.548232418418e-02 1.311586155267e-01 1.274272867029e-03 1.000000000000e-03 +1.057505156566e+00 1.057505156566e+00 2.067220437504e-01 1.495538134695e+00 1.509757700991e+00 8.982693625722e-01 8.356376492221e-03 1.395412696971e-02 1.245174105172e-01 1.113251816957e-03 1.000000000000e-03 +1.163572208273e+00 1.003799810096e+00 1.979474687855e-01 1.536721947072e+00 1.549418453166e+00 9.792322698850e-01 7.742933125135e-03 1.186071991793e-02 1.147979864222e-01 1.021208175786e-03 1.000000000000e-03 +1.268791875367e+00 9.630664597915e-01 1.906994493147e-01 1.592899817620e+00 1.604274324716e+00 9.422061735044e-01 6.213128253088e-03 9.891351427860e-03 1.048350631964e-01 1.061338832329e-03 1.000000000000e-03 +1.379695390770e+00 9.407003196342e-01 1.866336474901e-01 1.669873187602e+00 1.680270389267e+00 8.464019021195e-01 5.120356838817e-03 9.074336008687e-03 1.004121285762e-01 1.181471825023e-03 1.000000000000e-03 +1.501128392218e+00 9.351533819682e-01 1.857099051805e-01 1.768586525372e+00 1.778310002955e+00 7.912542586118e-01 3.350186071698e-03 6.351029460951e-03 8.400416299837e-02 1.263816262745e-03 1.000000000000e-03 +7.591633848748e-02 1.475748032726e+00 2.279898803282e-01 1.477699410078e+00 1.495183912459e+00 3.393278809823e-01 3.385130141157e-03 1.496397878369e-02 1.289443410662e-01 2.947002165295e-03 1.000000000000e-03 +2.267585919039e-01 1.462015768428e+00 2.267585919039e-01 1.479496389362e+00 1.496772870257e+00 3.560430161959e-01 3.517812872320e-03 1.482045446322e-02 1.283244778903e-01 2.808649389291e-03 1.000000000000e-03 +3.742266168404e-01 1.434762508299e+00 2.243204852877e-01 1.482763978512e+00 1.499636187911e+00 3.932259393126e-01 3.801879933063e-03 1.450265440160e-02 1.269411692329e-01 2.543067229360e-03 1.000000000000e-03 +5.160623458897e-01 1.395048523246e+00 2.207826495233e-01 1.487440999521e+00 1.503737246126e+00 4.525076619204e-01 4.264639527181e-03 1.413668724110e-02 1.253292873509e-01 2.209907332300e-03 1.000000000000e-03 +6.507396204496e-01 1.344987562612e+00 2.162900742030e-01 1.494139751564e+00 1.509713546804e+00 5.385667175713e-01 4.933741081869e-03 1.374130888774e-02 1.235642382989e-01 1.856780167385e-03 1.000000000000e-03 +7.771014912182e-01 1.287323269750e+00 2.109139225528e-01 1.503691433936e+00 1.518411212821e+00 6.571487577045e-01 5.814873957337e-03 1.327296267967e-02 1.214402581962e-01 1.521725466686e-03 1.000000000000e-03 +8.945961223218e-01 1.225420072392e+00 2.047476209810e-01 1.517220015652e+00 1.530972946917e+00 8.100004310845e-01 6.831858717718e-03 1.265158348479e-02 1.185635482899e-01 1.234567244194e-03 1.000000000000e-03 +1.003799810096e+00 1.163572208273e+00 1.979474687855e-01 1.536721947072e+00 1.549418453166e+00 9.792322698850e-01 7.742933125135e-03 1.186071991793e-02 1.147979864222e-01 1.021208175786e-03 1.000000000000e-03 +1.106715464272e+00 1.106715464272e+00 1.908358166265e-01 1.565132019262e+00 1.576723357671e+00 1.109123704971e+00 8.011150621936e-03 1.083443251555e-02 1.097189972184e-01 9.016126835247e-04 1.000000000000e-03 +1.206876174523e+00 1.060150968893e+00 1.842782033153e-01 1.606384193609e+00 1.616919488933e+00 1.174130940601e+00 7.459339961738e-03 9.529609991270e-03 1.029002213110e-01 8.516937638049e-04 1.000000000000e-03 +1.309603655166e+00 1.028912315955e+00 1.795714094445e-01 1.665449575204e+00 1.675102438252e+00 1.143910079484e+00 6.955349439950e-03 9.120493251206e-03 1.006671812967e-01 8.741945874371e-04 1.000000000000e-03 +1.421993301426e+00 1.012303580495e+00 1.769989334638e-01 1.745515250115e+00 1.754466332202e+00 1.085076913543e+00 4.700243882661e-03 6.497572417213e-03 8.496778747275e-02 9.215936561905e-04 1.000000000000e-03 +7.345352825586e-02 1.619365114728e+00 2.206605648923e-01 1.621030164929e+00 1.635979792207e+00 2.989832606072e-01 2.258790240944e-03 1.133235805421e-02 1.122118930823e-01 3.344668855270e-03 1.000000000000e-03 +2.193520252234e-01 1.602654333952e+00 2.193520252234e-01 1.617595816360e+00 1.632400544007e+00 3.137380930421e-01 2.354249134384e-03 1.125580151053e-02 1.118322230970e-01 3.187371958259e-03 1.000000000000e-03 +3.617051426564e-01 1.570113924096e+00 2.167582136539e-01 1.611238140333e+00 1.625752892678e+00 3.472511924655e-01 2.562875699764e-03 1.107069934692e-02 1.109088682304e-01 2.879759729261e-03 1.000000000000e-03 +4.980818900474e-01 1.523793356160e+00 2.130225360422e-01 1.603131860288e+00 1.617223040379e+00 4.013682570940e-01 2.911069828668e-03 1.087929766698e-02 1.099459345263e-01 2.491477545435e-03 1.000000000000e-03 +6.270158773188e-01 1.466836612338e+00 2.083703770526e-01 1.595229938819e+00 1.608781144761e+00 4.812943975971e-01 3.435239682368e-03 1.070625286577e-02 1.090680361862e-01 2.077730397429e-03 1.000000000000e-03 +7.475692298135e-01 1.402843597748e+00 2.029890806535e-01 1.589600551430e+00 1.602508808079e+00 5.949248995141e-01 4.167776904765e-03 1.050832695396e-02 1.080551657152e-01 1.680884428970e-03 1.000000000000e-03 +8.594238605484e-01 1.335501334625e+00 1.970305897936e-01 1.588135128654e+00 1.600310669895e+00 7.475935010263e-01 5.097112757624e-03 1.022704066574e-02 1.065991487653e-01 1.337625325297e-03 1.000000000000e-03 +9.630664597915e-01 1.268791875367e+00 1.906994493147e-01 1.592899817620e+00 1.604274324716e+00 9.422061735044e-01 6.213128253088e-03 9.891351427860e-03 1.048350631964e-01 1.061338832329e-03 1.000000000000e-03 +1.060150968893e+00 1.206876174523e+00 1.842782033153e-01 1.606384193609e+00 1.616919488933e+00 1.174130940601e+00 7.459339961738e-03 9.529609991269e-03 1.029002213110e-01 8.516937638049e-04 1.000000000000e-03 +1.153458196436e+00 1.153458196436e+00 1.781478653405e-01 1.631236225031e+00 1.640935185733e+00 1.396720173270e+00 8.517536244764e-03 9.147361519975e-03 1.008153511237e-01 7.159630247615e-04 1.000000000000e-03 +1.247650836693e+00 1.112166984406e+00 1.729468384733e-01 1.671391040871e+00 1.680315036069e+00 1.500560135050e+00 8.793287599560e-03 8.790005206225e-03 9.882647646942e-02 6.664178106843e-04 1.000000000000e-03 +1.352396204916e+00 1.084475727711e+00 1.691657718358e-01 1.733511782211e+00 1.741746295367e+00 1.364104245673e+00 5.563498269483e-03 6.117749014195e-03 8.244694599960e-02 7.330818030749e-04 1.000000000000e-03 +7.442429884766e-02 1.792764079138e+00 2.236659649978e-01 1.794308228735e+00 1.808194813510e+00 2.372392021135e-01 1.450588623995e-03 9.171683754654e-03 1.009492928524e-01 4.215154962127e-03 1.000000000000e-03 +2.218406349285e-01 1.771584394374e+00 2.218406349285e-01 1.785419988041e+00 1.799149188089e+00 2.489518161987e-01 1.530660461625e-03 9.222630818671e-03 1.012292822078e-01 4.016841552993e-03 1.000000000000e-03 +3.643589411072e-01 1.731164105974e+00 2.183205013157e-01 1.769092026938e+00 1.782512395769e+00 2.760835954578e-01 1.693287471750e-03 9.199862829276e-03 1.011042521871e-01 3.622091339190e-03 1.000000000000e-03 +4.989802018336e-01 1.674814854749e+00 2.133852440128e-01 1.747565746835e+00 1.760545171778e+00 3.200447976029e-01 1.955545957297e-03 9.165338596083e-03 1.009143674172e-01 3.124562584644e-03 1.000000000000e-03 +6.242060412632e-01 1.606972277217e+00 2.074300686996e-01 1.723946948631e+00 1.736381385265e+00 3.868122113671e-01 2.353506056874e-03 9.126545082002e-03 1.007005742122e-01 2.585233792040e-03 1.000000000000e-03 +7.393855398180e-01 1.532257007337e+00 2.008062243713e-01 1.701323753148e+00 1.713133285175e+00 4.863466868039e-01 2.943073671338e-03 9.077085599203e-03 1.004273402305e-01 2.056146422158e-03 1.000000000000e-03 +8.446325348486e-01 1.455113460470e+00 1.937976245685e-01 1.682486048016e+00 1.693610587194e+00 6.332878750210e-01 3.822175624372e-03 9.053171018580e-03 1.002949595420e-01 1.579060707529e-03 1.000000000000e-03 +9.407003196342e-01 1.379695390770e+00 1.866336474901e-01 1.669873187602e+00 1.680270389267e+00 8.464019021195e-01 5.120356838817e-03 9.074336008687e-03 1.004121285762e-01 1.181471825023e-03 1.000000000000e-03 +1.028912315955e+00 1.309603655166e+00 1.795714094445e-01 1.665449575204e+00 1.675102438252e+00 1.143910079484e+00 6.955349439950e-03 9.120493251206e-03 1.006671812967e-01 8.741945874371e-04 1.000000000000e-03 +1.112166984406e+00 1.247650836693e+00 1.729468384733e-01 1.671391040871e+00 1.680315036069e+00 1.500560135050e+00 8.793287599560e-03 8.790005206225e-03 9.882647646942e-02 6.664178106843e-04 1.000000000000e-03 +1.195764558924e+00 1.195764558924e+00 1.670301782390e-01 1.691066456636e+00 1.699295395510e+00 1.794011031134e+00 9.850791185960e-03 8.236396835087e-03 9.566374464229e-02 5.574101734302e-04 1.000000000000e-03 +1.293543981943e+00 1.157889545021e+00 1.624007249792e-01 1.736077253952e+00 1.743656568010e+00 1.375266716499e+00 4.721061920971e-03 5.149250539184e-03 7.563986705423e-02 7.271316814424e-04 1.000000000000e-03 +7.903561733592e-02 1.992805772590e+00 2.376558932080e-01 1.994372451694e+00 2.008482461873e+00 1.887607948443e-01 6.905139083839e-04 5.487213928244e-03 7.808267646998e-02 5.297710262478e-03 1.000000000000e-03 +2.348118975979e-01 1.965922938548e+00 2.348118975979e-01 1.979896367885e+00 1.993771866292e+00 1.992065608078e-01 7.477865161520e-04 5.630737108655e-03 7.909724751957e-02 5.019914986459e-03 1.000000000000e-03 +3.829528984387e-01 1.915595553628e+00 2.294464522640e-01 1.953499231508e+00 1.966927787683e+00 2.243185508728e-01 8.438396619191e-04 5.642687543913e-03 7.918113933614e-02 4.457946059784e-03 1.000000000000e-03 +5.194536114879e-01 1.846995892054e+00 2.221688388485e-01 1.918652099718e+00 1.931472203452e+00 2.635761333013e-01 1.007440528311e-03 5.733299041679e-03 7.981436129252e-02 3.793970218300e-03 1.000000000000e-03 +6.428412066421e-01 1.765900051482e+00 2.136660155356e-01 1.879267891702e+00 1.891375418836e+00 3.235982960808e-01 1.261659524891e-03 5.848267157944e-03 8.061063589836e-02 3.090251129599e-03 1.000000000000e-03 +7.526409149637e-01 1.677714268588e+00 2.044561709682e-01 1.838802195425e+00 1.850134005889e+00 4.173618431045e-01 1.663215123029e-03 5.977601272760e-03 8.149711155591e-02 2.396002453319e-03 1.000000000000e-03 +8.494963814940e-01 1.587759557766e+00 1.949966110315e-01 1.800728884493e+00 1.811255971353e+00 5.655938521239e-01 2.310970112305e-03 6.128877029764e-03 8.252189628459e-02 1.768053164377e-03 1.000000000000e-03 +9.351533819682e-01 1.501128392218e+00 1.857099051805e-01 1.768586525372e+00 1.778310002955e+00 7.912542586118e-01 3.350186071698e-03 6.351029460951e-03 8.400416299837e-02 1.263816262745e-03 1.000000000000e-03 +1.012303580495e+00 1.421993301426e+00 1.769989334638e-01 1.745515250115e+00 1.754466332202e+00 1.085076913543e+00 4.700243882661e-03 6.497572417213e-03 8.496778747275e-02 9.215936561905e-04 1.000000000000e-03 +1.084475727711e+00 1.352396204916e+00 1.691657718358e-01 1.733511782211e+00 1.741746295367e+00 1.364104245673e+00 5.563498269483e-03 6.117749014195e-03 8.244694599960e-02 7.330818030749e-04 1.000000000000e-03 +1.157889545021e+00 1.293543981943e+00 1.624007249792e-01 1.736077253952e+00 1.743656568010e+00 1.375266716499e+00 4.721061920970e-03 5.149250539184e-03 7.563986705423e-02 7.271316814424e-04 1.000000000000e-03 +1.250922585696e+00 1.250922585696e+00 1.573420272077e-01 1.769071686170e+00 1.776054938434e+00 8.716316221762e-01 1.395449705155e-03 2.401444032637e-03 5.165531093097e-02 1.147273658456e-03 1.000000000000e-03 +1.435996413686e-01 1.435996413686e-01 7.474787891692e-01 2.030805603753e-01 7.745748861538e-01 6.350485480573e-02 6.953960756385e-03 1.642542316881e-01 4.272056903596e-01 1.574682759388e-02 1.000000000000e-03 +4.263324498264e-01 1.425376760892e-01 7.336680399356e-01 4.495290278502e-01 8.604331116960e-01 6.420450578599e-02 6.091901678523e-03 1.423241625478e-01 3.976656364164e-01 1.557523086204e-02 1.000000000000e-03 +6.771775886281e-01 1.343413358637e-01 6.771775886281e-01 6.903745947396e-01 9.670504472891e-01 8.535345767981e-02 6.422573225928e-03 1.128701765666e-01 3.541345892401e-01 1.171598699319e-02 1.000000000000e-03 +8.652673121075e-01 1.211436229380e-01 6.012915105099e-01 8.737066434338e-01 1.060619997639e+00 1.433907811703e-01 6.521723131879e-03 6.822324711518e-02 2.753245501327e-01 6.973949035207e-03 1.000000000000e-03 +9.997096850009e-01 1.074041010624e-01 5.343626829548e-01 1.005462627455e+00 1.138638912098e+00 2.217192095743e-01 6.699233126961e-03 4.532241346942e-02 2.244064107557e-01 4.510209115033e-03 1.000000000000e-03 +1.111798825902e+00 9.589773122301e-02 4.791613139724e-01 1.115926970788e+00 1.214449903841e+00 2.906111877200e-01 6.442827042525e-03 3.325488134028e-02 1.922234849228e-01 3.441023753578e-03 1.000000000000e-03 +1.219359194077e+00 8.680973908880e-02 4.343646135052e-01 1.222445407771e+00 1.297322393411e+00 3.463460180090e-01 5.809585825264e-03 2.516090350335e-02 1.672021514460e-01 2.887285974149e-03 1.000000000000e-03 +1.328951817877e+00 7.990258490470e-02 4.000899330102e-01 1.331351703087e+00 1.390168806947e+00 3.815693148208e-01 4.893217504283e-03 1.923589233026e-02 1.461958060284e-01 2.620755813317e-03 1.000000000000e-03 +1.448053825614e+00 7.510386200228e-02 3.762678814685e-01 1.450000162745e+00 1.498024696254e+00 3.757202673176e-01 3.656954919415e-03 1.459977769707e-02 1.273655181710e-01 2.661554584583e-03 1.000000000000e-03 +1.585966257751e+00 7.258749009733e-02 3.638521823974e-01 1.587626503445e+00 1.628786764766e+00 3.314737311419e-01 2.455942137433e-03 1.111374102997e-02 1.111242599274e-01 3.016830312782e-03 1.000000000000e-03 +1.750963033217e+00 7.323829529244e-02 3.672666287525e-01 1.752494048945e+00 1.790564203871e+00 2.633058010030e-01 1.604122314014e-03 9.138361030616e-03 1.007657405990e-01 3.797865433237e-03 1.000000000000e-03 +1.940439407973e+00 7.721110465645e-02 3.873893559028e-01 1.941974935651e+00 1.980236643374e+00 2.127667951046e-01 7.797320708366e-04 5.497089457404e-03 7.815290893430e-02 4.699981496213e-03 1.000000000000e-03 +1.425376760892e-01 4.263324498264e-01 7.336680399356e-01 4.495290278502e-01 8.604331116960e-01 6.420450578599e-02 6.091901678523e-03 1.423241625478e-01 3.976656364164e-01 1.557523086204e-02 1.000000000000e-03 +4.190733661356e-01 4.190733661356e-01 7.132154354623e-01 5.926592380183e-01 9.273193785262e-01 7.340947029252e-02 6.188561534542e-03 1.264529258258e-01 3.748376327393e-01 1.362222062106e-02 1.000000000000e-03 +6.605618331866e-01 3.941007021126e-01 6.605618331866e-01 7.691926279343e-01 1.013902970866e+00 1.014830850568e-01 6.640485755633e-03 9.815161440821e-02 3.302383220380e-01 9.853858891267e-03 1.000000000000e-03 +8.461017259547e-01 3.561652018958e-01 5.915819832128e-01 9.180096849734e-01 1.092113100630e+00 1.576060665361e-01 6.724805800292e-03 6.400266767733e-02 2.666722242699e-01 6.344933427872e-03 1.000000000000e-03 +9.845974350752e-01 3.177179866690e-01 5.280728725484e-01 1.034590174035e+00 1.161566953271e+00 2.361039380684e-01 6.973456928627e-03 4.430330759629e-02 2.218690995367e-01 4.235422789561e-03 1.000000000000e-03 +1.099768310693e+00 2.849674241331e-01 4.746858661961e-01 1.136088363650e+00 1.231269037046e+00 3.062123805644e-01 6.670383902441e-03 3.267528189168e-02 1.905409897333e-01 3.265707278579e-03 1.000000000000e-03 +1.208017210963e+00 2.586398042249e-01 4.312137265753e-01 1.235394726520e+00 1.308489743292e+00 3.641697438528e-01 6.025063514997e-03 2.481698555426e-02 1.660554979325e-01 2.745972220043e-03 1.000000000000e-03 +1.317106755366e+00 2.384730999897e-01 3.977259226431e-01 1.338521432197e+00 1.396361534128e+00 3.999382461205e-01 5.075355447087e-03 1.903552171986e-02 1.454323887198e-01 2.500386021343e-03 1.000000000000e-03 +1.434762508299e+00 2.243204852877e-01 3.742266168404e-01 1.452192526954e+00 1.499636187911e+00 3.932259393126e-01 3.801879933063e-03 1.450265440160e-02 1.269411692329e-01 2.543067229360e-03 1.000000000000e-03 +1.570113924096e+00 2.167582136539e-01 3.617051426564e-01 1.585005317917e+00 1.625752892678e+00 3.472511924655e-01 2.562875699764e-03 1.107069934692e-02 1.109088682303e-01 2.879759729261e-03 1.000000000000e-03 +1.731164105974e+00 2.183205013157e-01 3.643589411072e-01 1.744876214264e+00 1.782512395769e+00 2.760835954578e-01 1.693287471750e-03 9.199862829276e-03 1.011042521871e-01 3.622091339190e-03 1.000000000000e-03 +1.915595553628e+00 2.294464522640e-01 3.829528984387e-01 1.929287951431e+00 1.966927787683e+00 2.243185508728e-01 8.438396619191e-04 5.642687543913e-03 7.918113933614e-02 4.457946059784e-03 1.000000000000e-03 +1.343413358637e-01 6.771775886281e-01 6.771775886281e-01 6.903745947396e-01 9.670504472891e-01 8.535345767981e-02 6.422573225928e-03 1.128701765666e-01 3.541345892401e-01 1.171598699319e-02 1.000000000000e-03 +3.941007021126e-01 6.605618331866e-01 6.605618331866e-01 7.691926279343e-01 1.013902970866e+00 1.014830850568e-01 6.640485755633e-03 9.815161440821e-02 3.302383220380e-01 9.853858891267e-03 1.000000000000e-03 +6.235565554139e-01 6.235565554139e-01 6.235565554139e-01 8.818421375730e-01 1.080031635370e+00 1.367419756408e-01 6.638265670422e-03 7.281888724345e-02 2.844466113613e-01 7.313043381989e-03 1.000000000000e-03 +8.086063718859e-01 5.709501773636e-01 5.709501773636e-01 9.898628034662e-01 1.142721521070e+00 1.901576217971e-01 7.271100828074e-03 5.735584584534e-02 2.524454745206e-01 5.258795259162e-03 1.000000000000e-03 +9.541515272332e-01 5.156550295351e-01 5.156550295351e-01 1.084576067598e+00 1.200918546735e+00 2.643962268102e-01 7.368636689227e-03 4.180451123372e-02 2.155213607194e-01 3.782202235124e-03 1.000000000000e-03 +1.074952550061e+00 4.662040606736e-01 4.662040606736e-01 1.171695016235e+00 1.261037444828e+00 3.396991865340e-01 7.090170151986e-03 3.130786192481e-02 1.865114292739e-01 2.943780967517e-03 1.000000000000e-03 +1.184897878670e+00 4.252254870794e-01 4.252254870794e-01 1.258888278497e+00 1.328764995249e+00 4.017063284137e-01 6.438085572612e-03 2.404026941038e-02 1.634362580824e-01 2.489380747246e-03 1.000000000000e-03 +1.293372914480e+00 3.932051784536e-01 3.932051784536e-01 1.351822402638e+00 1.407847335699e+00 4.394584323393e-01 5.439981867951e-03 1.856824719119e-02 1.436362968333e-01 2.275528073672e-03 1.000000000000e-03 +1.408542261772e+00 3.702783628087e-01 3.702783628087e-01 1.456398767221e+00 1.502731990451e+00 4.320888479564e-01 4.103669873734e-03 1.424592381802e-02 1.258125758509e-01 2.314338832695e-03 1.000000000000e-03 +1.539291683050e+00 3.575285251468e-01 3.575285251468e-01 1.580267550702e+00 1.620207449093e+00 3.827082580452e-01 2.789411582023e-03 1.093291635359e-02 1.102165361337e-01 2.612956420402e-03 1.000000000000e-03 +1.693336200238e+00 3.588038188863e-01 3.588038188863e-01 1.730932600503e+00 1.767729574321e+00 3.051605679660e-01 1.870465847885e-03 9.194172073177e-03 1.010729773380e-01 3.276963359537e-03 1.000000000000e-03 +1.868948178284e+00 3.746426239233e-01 3.746426239233e-01 1.906128114469e+00 1.942596583038e+00 2.514116834691e-01 9.534253153948e-04 5.688430837255e-03 7.950143840247e-02 3.977539890753e-03 1.000000000000e-03 +1.211436229380e-01 8.652673121075e-01 6.012915105099e-01 8.737066434338e-01 1.060619997639e+00 1.433907811703e-01 6.521723131879e-03 6.822324711518e-02 2.753245501327e-01 6.973949035207e-03 1.000000000000e-03 +3.561652018958e-01 8.461017259547e-01 5.915819832128e-01 9.180096849734e-01 1.092113100630e+00 1.576060665361e-01 6.724805800292e-03 6.400266767733e-02 2.666722242699e-01 6.344933427872e-03 1.000000000000e-03 +5.709501773636e-01 8.086063718859e-01 5.709501773636e-01 9.898628034662e-01 1.142721521070e+00 1.901576217971e-01 7.271100828074e-03 5.735584584534e-02 2.524454745206e-01 5.258795259162e-03 1.000000000000e-03 +7.557126725761e-01 7.557126725761e-01 5.377779101613e-01 1.068739110814e+00 1.196414797485e+00 2.445224397237e-01 7.722915570405e-03 4.737550209582e-02 2.294328807585e-01 4.089604214361e-03 1.000000000000e-03 +9.086475631292e-01 6.950344331284e-01 4.960061384200e-01 1.143990059928e+00 1.246890270459e+00 3.105855359957e-01 7.844500981299e-03 3.788570331914e-02 2.051712112119e-01 3.219724952079e-03 1.000000000000e-03 +1.036662887703e+00 6.355732188297e-01 4.536793492572e-01 1.215986537440e+00 1.297862940058e+00 3.903606565955e-01 7.638104217593e-03 2.935018202478e-02 1.805860275903e-01 2.561733574078e-03 1.000000000000e-03 +1.149851874598e+00 5.836072212220e-01 4.165547684419e-01 1.289479244571e+00 1.355092099191e+00 4.599971944059e-01 7.043528237219e-03 2.296816694604e-02 1.597503849623e-01 2.173926302510e-03 1.000000000000e-03 +1.258165268543e+00 5.417494202467e-01 3.866575619294e-01 1.369843887933e+00 1.423367959280e+00 5.013833498521e-01 6.011607182371e-03 1.798506228062e-02 1.413626631541e-01 1.994481867607e-03 1.000000000000e-03 +1.370482244304e+00 5.108386302069e-01 3.645753399285e-01 1.462592796395e+00 1.507346299478e+00 4.942130242060e-01 4.589891529614e-03 1.393091026988e-02 1.244137821496e-01 2.023418953004e-03 1.000000000000e-03 +1.495443610372e+00 4.926385370326e-01 3.515543281331e-01 1.574498116853e+00 1.613268348912e+00 4.398491264323e-01 3.165912833219e-03 1.079658674861e-02 1.095271998111e-01 2.273506845657e-03 1.000000000000e-03 +1.640505363151e+00 4.919167844354e-01 3.510308821177e-01 1.712670420524e+00 1.748274191750e+00 3.526578338866e-01 2.156942931427e-03 9.174372681543e-03 1.009640897742e-01 2.835609772167e-03 1.000000000000e-03 +1.805055564456e+00 5.090888282599e-01 3.633401548096e-01 1.875472480692e+00 1.910343710941e+00 2.947228394796e-01 1.137940629498e-03 5.791580141058e-03 8.021900676037e-02 3.393018341455e-03 1.000000000000e-03 +1.074041010624e-01 9.997096850009e-01 5.343626829548e-01 1.005462627455e+00 1.138638912098e+00 2.217192095743e-01 6.699233126961e-03 4.532241346942e-02 2.244064107557e-01 4.510209115033e-03 1.000000000000e-03 +3.177179866690e-01 9.845974350752e-01 5.280728725484e-01 1.034590174035e+00 1.161566953271e+00 2.361039380684e-01 6.973456928627e-03 4.430330759629e-02 2.218690995367e-01 4.235422789561e-03 1.000000000000e-03 +5.156550295351e-01 9.541515272332e-01 5.156550295351e-01 1.084576067598e+00 1.200918546735e+00 2.643962268102e-01 7.368636689227e-03 4.180451123372e-02 2.155213607194e-01 3.782202235124e-03 1.000000000000e-03 +6.950344331284e-01 9.086475631292e-01 4.960061384200e-01 1.143990059928e+00 1.246890270459e+00 3.105855359957e-01 7.844500981299e-03 3.788570331914e-02 2.051712112119e-01 3.219724952079e-03 1.000000000000e-03 +8.516339499407e-01 8.516339499407e-01 4.686680724909e-01 1.204392282184e+00 1.292366252869e+00 3.806667280330e-01 8.265888990039e-03 3.257136117235e-02 1.902377494153e-01 2.626969804184e-03 1.000000000000e-03 +9.860948956526e-01 7.899276016480e-01 4.365936071392e-01 1.263474874731e+00 1.336780736274e+00 4.588711307163e-01 8.215568075145e-03 2.685580174434e-02 1.727419454444e-01 2.179261088923e-03 1.000000000000e-03 +1.103819871954e+00 7.316471788914e-01 4.051612452984e-01 1.324283166132e+00 1.384876001233e+00 5.386886562551e-01 7.768765133756e-03 2.163243566636e-02 1.550356076174e-01 1.856359862767e-03 1.000000000000e-03 +1.212910345700e+00 6.822745565445e-01 3.781383534598e-01 1.391635755941e+00 1.442095243585e+00 5.890264760672e-01 6.778797676044e-03 1.726271556069e-02 1.384947474363e-01 1.697716555420e-03 1.000000000000e-03 +1.322623506139e+00 6.444248431329e-01 3.572657420984e-01 1.471263510538e+00 1.514019526927e+00 5.844019064159e-01 5.287744309360e-03 1.357219471217e-02 1.228015323473e-01 1.711151159880e-03 1.000000000000e-03 +1.441501261589e+00 6.206081682477e-01 3.440761316809e-01 1.569420398000e+00 1.606694983515e+00 5.243665719285e-01 3.720286492040e-03 1.064223014358e-02 1.087414371780e-01 1.907062832633e-03 1.000000000000e-03 +1.576726065953e+00 6.161389458699e-01 3.416015236061e-01 1.692835576089e+00 1.726957986925e+00 4.251364271649e-01 2.591329505612e-03 9.142933914976e-03 1.007909493014e-01 2.352186112747e-03 1.000000000000e-03 +1.729163669784e+00 6.311907282125e-01 3.500235143508e-01 1.840763084235e+00 1.873746298964e+00 3.617548569438e-01 1.427903806970e-03 5.920737950973e-03 8.110855517948e-02 2.764302899617e-03 1.000000000000e-03 +9.589773122301e-02 1.111798825902e+00 4.791613139724e-01 1.115926970788e+00 1.214449903841e+00 2.906111877200e-01 6.442827042525e-03 3.325488134028e-02 1.922234849228e-01 3.441023753578e-03 1.000000000000e-03 +2.849674241331e-01 1.099768310693e+00 4.746858661961e-01 1.136088363650e+00 1.231269037046e+00 3.062123805644e-01 6.670383902441e-03 3.267528189168e-02 1.905409897333e-01 3.265707278579e-03 1.000000000000e-03 +4.662040606736e-01 1.074952550061e+00 4.662040606736e-01 1.171695016235e+00 1.261037444828e+00 3.396991865340e-01 7.090170151986e-03 3.130786192481e-02 1.865114292739e-01 2.943780967517e-03 1.000000000000e-03 +6.355732188297e-01 1.036662887703e+00 4.536793492572e-01 1.215986537440e+00 1.297862940058e+00 3.903606565955e-01 7.638104217593e-03 2.935018202478e-02 1.805860275903e-01 2.561733574078e-03 1.000000000000e-03 +7.899276016480e-01 9.860948956526e-01 4.365936071392e-01 1.263474874731e+00 1.336780736274e+00 4.588711307163e-01 8.215568075145e-03 2.685580174434e-02 1.727419454444e-01 2.179261088923e-03 1.000000000000e-03 +9.273731755618e-01 9.273731755618e-01 4.149069446451e-01 1.311503722260e+00 1.375568895482e+00 5.469802320605e-01 8.606640568871e-03 2.360224391414e-02 1.619404688772e-01 1.828219634616e-03 1.000000000000e-03 +1.049081648370e+00 8.675298153430e-01 3.907636948453e-01 1.361315645049e+00 1.416289712829e+00 6.365882056865e-01 8.466512126956e-03 1.994973842900e-02 1.488837668526e-01 1.570874218321e-03 1.000000000000e-03 +1.159901534316e+00 8.134642273388e-01 3.676708372428e-01 1.416720021200e+00 1.463652097675e+00 7.021434004773e-01 7.651544257747e-03 1.634611445300e-02 1.347677609528e-01 1.424210495064e-03 1.000000000000e-03 +1.267659888161e+00 7.698240001369e-01 3.484732366630e-01 1.483101676636e+00 1.523490787603e+00 7.079545229466e-01 6.190732165912e-03 1.311680051173e-02 1.207237457620e-01 1.412520109114e-03 1.000000000000e-03 +1.380857569138e+00 7.404551470496e-01 3.353726492569e-01 1.566857189101e+00 1.602347111243e+00 6.432024447667e-01 4.480666227501e-03 1.044927517912e-02 1.077511287856e-01 1.554720458755e-03 1.000000000000e-03 +1.506345751312e+00 7.307558486012e-01 3.310522362219e-01 1.674240613759e+00 1.706656736391e+00 5.330062446019e-01 3.239666903538e-03 9.117154638471e-03 1.006487546894e-01 1.876150626991e-03 1.000000000000e-03 +1.646437631693e+00 7.404059246714e-01 3.355174108090e-01 1.805258377170e+00 1.836172579389e+00 4.666536534155e-01 1.887293718703e-03 6.066470405482e-03 8.210068618933e-02 2.142916899248e-03 1.000000000000e-03 +8.680973908880e-02 1.219359194077e+00 4.343646135052e-01 1.222445407771e+00 1.297322393411e+00 3.463460180090e-01 5.809585825264e-03 2.516090350335e-02 1.672021514460e-01 2.887285974149e-03 1.000000000000e-03 +2.586398042249e-01 1.208017210963e+00 4.312137265753e-01 1.235394726520e+00 1.308489743292e+00 3.641697438528e-01 6.025063514997e-03 2.481698555426e-02 1.660554979325e-01 2.745972220043e-03 1.000000000000e-03 +4.252254870794e-01 1.184897878670e+00 4.252254870794e-01 1.258888278497e+00 1.328764995249e+00 4.017063284137e-01 6.438085572612e-03 2.404026941038e-02 1.634362580824e-01 2.489380747246e-03 1.000000000000e-03 +5.836072212220e-01 1.149851874598e+00 4.165547684419e-01 1.289479244571e+00 1.355092099191e+00 4.599971944059e-01 7.043528237219e-03 2.296816694604e-02 1.597503849623e-01 2.173926302510e-03 1.000000000000e-03 +7.316471788914e-01 1.103819871954e+00 4.051612452984e-01 1.324283166132e+00 1.384876001233e+00 5.386886562551e-01 7.768765133756e-03 2.163243566636e-02 1.550356076174e-01 1.856359862767e-03 1.000000000000e-03 +8.675298153430e-01 1.049081648370e+00 3.907636948453e-01 1.361315645049e+00 1.416289712829e+00 6.365882056865e-01 8.466512126956e-03 1.994973842900e-02 1.488837668526e-01 1.570874218321e-03 1.000000000000e-03 +9.904976641243e-01 9.904976641243e-01 3.735882802294e-01 1.400775230103e+00 1.449737717105e+00 7.429460361837e-01 8.780099582184e-03 1.772692595673e-02 1.403445203646e-01 1.345992779148e-03 1.000000000000e-03 +1.102529972862e+00 9.344539005368e-01 3.552556576459e-01 1.445259988129e+00 1.488281900574e+00 8.353450433376e-01 8.450394454291e-03 1.517407900188e-02 1.298464007197e-01 1.197110113929e-03 1.000000000000e-03 +1.208881648692e+00 8.864980510889e-01 3.383772957955e-01 1.499090936244e+00 1.536806048088e+00 8.644395695503e-01 7.216036831176e-03 1.252147128387e-02 1.179523033729e-01 1.156818863024e-03 1.000000000000e-03 +1.317075771580e+00 8.518107871974e-01 3.257224536298e-01 1.568524850064e+00 1.601987928190e+00 8.014682682590e-01 5.440106264800e-03 1.018151275649e-02 1.063616093882e-01 1.247710033701e-03 1.000000000000e-03 +1.433597458347e+00 8.357768441223e-01 3.198395015379e-01 1.659435026071e+00 1.689976897030e+00 6.914072014261e-01 4.207719858567e-03 9.128600012890e-03 1.007119104337e-01 1.446325693365e-03 1.000000000000e-03 +1.562045660895e+00 8.373278875865e-01 3.205856847968e-01 1.772316178917e+00 1.801077405152e+00 6.297049527655e-01 2.627017794599e-03 6.257734951254e-03 8.338488373037e-02 1.588045314886e-03 1.000000000000e-03 +7.990258490470e-02 1.328951817877e+00 4.000899330102e-01 1.331351703087e+00 1.390168806947e+00 3.815693148208e-01 4.893217504283e-03 1.923589233026e-02 1.461958060284e-01 2.620755813317e-03 1.000000000000e-03 +2.384730999897e-01 1.317106755366e+00 3.977259226431e-01 1.338521432197e+00 1.396361534128e+00 3.999382461205e-01 5.075355447087e-03 1.903552171986e-02 1.454323887198e-01 2.500386021343e-03 1.000000000000e-03 +3.932051784536e-01 1.293372914480e+00 3.932051784536e-01 1.351822402638e+00 1.407847335699e+00 4.394584323393e-01 5.439981867951e-03 1.856824719119e-02 1.436362968333e-01 2.275528073672e-03 1.000000000000e-03 +5.417494202467e-01 1.258165268543e+00 3.866575619294e-01 1.369843887933e+00 1.423367959280e+00 5.013833498521e-01 6.011607182371e-03 1.798506228062e-02 1.413626631541e-01 1.994481867607e-03 1.000000000000e-03 +6.822745565445e-01 1.212910345700e+00 3.781383534598e-01 1.391635755941e+00 1.442095243585e+00 5.890264760672e-01 6.778797676044e-03 1.726271556069e-02 1.384947474363e-01 1.697716555420e-03 1.000000000000e-03 +8.134642273388e-01 1.159901534316e+00 3.676708372428e-01 1.416720021200e+00 1.463652097675e+00 7.021434004773e-01 7.651544257747e-03 1.634611445300e-02 1.347677609528e-01 1.424210495064e-03 1.000000000000e-03 +9.344539005368e-01 1.102529972862e+00 3.552556576459e-01 1.445259988129e+00 1.488281900574e+00 8.353450433376e-01 8.450394454291e-03 1.517407900188e-02 1.298464007197e-01 1.197110113929e-03 1.000000000000e-03 +1.045733458648e+00 1.045733458648e+00 3.413140138209e-01 1.478890439847e+00 1.517765525074e+00 9.577080109888e-01 8.688119221084e-03 1.360767444993e-02 1.229619383293e-01 1.044159585725e-03 1.000000000000e-03 +1.150328667086e+00 9.947632368294e-01 3.272461487136e-01 1.520792536695e+00 1.555602771120e+00 1.036915855887e+00 8.121246056575e-03 1.174817514430e-02 1.142520369101e-01 9.643984073757e-04 1.000000000000e-03 +1.253897867818e+00 9.550618739851e-01 3.154477305142e-01 1.576198923378e+00 1.607454607989e+00 1.004913731125e+00 6.624779957316e-03 9.888580112094e-03 1.048203760519e-01 9.951102955677e-04 1.000000000000e-03 +1.362338852483e+00 9.317656069060e-01 3.083352685409e-01 1.650501225446e+00 1.679054773682e+00 9.198562424836e-01 5.634525805361e-03 9.188162582038e-03 1.010399402989e-01 1.087126394120e-03 1.000000000000e-03 +1.480816504718e+00 9.236158899365e-01 3.059345046369e-01 1.745246066545e+00 1.771857712661e+00 8.660427328443e-01 3.766405165215e-03 6.523474574133e-03 8.513697834884e-02 1.154677433428e-03 1.000000000000e-03 +7.510386200228e-02 1.448053825614e+00 3.762678814685e-01 1.450000162745e+00 1.498024696254e+00 3.757202673176e-01 3.656954919415e-03 1.459977769707e-02 1.273655181710e-01 2.661554584583e-03 1.000000000000e-03 +2.243204852877e-01 1.434762508299e+00 3.742266168404e-01 1.452192526954e+00 1.499636187911e+00 3.932259393126e-01 3.801879933063e-03 1.450265440160e-02 1.269411692329e-01 2.543067229360e-03 1.000000000000e-03 +3.702783628087e-01 1.408542261772e+00 3.702783628087e-01 1.456398767221e+00 1.502731990451e+00 4.320888479564e-01 4.103669873734e-03 1.424592381802e-02 1.258125758509e-01 2.314338832695e-03 1.000000000000e-03 +5.108386302069e-01 1.370482244304e+00 3.645753399285e-01 1.462592796395e+00 1.507346299478e+00 4.942130242060e-01 4.589891529614e-03 1.393091026988e-02 1.244137821496e-01 2.023418953004e-03 1.000000000000e-03 +6.444248431329e-01 1.322623506139e+00 3.572657420984e-01 1.471263510538e+00 1.514019526927e+00 5.844019064159e-01 5.287744309360e-03 1.357219471217e-02 1.228015323473e-01 1.711151159880e-03 1.000000000000e-03 +7.698240001369e-01 1.267659888161e+00 3.484732366630e-01 1.483101676636e+00 1.523490787603e+00 7.079545229466e-01 6.190732165912e-03 1.311680051173e-02 1.207237457620e-01 1.412520109114e-03 1.000000000000e-03 +8.864980510889e-01 1.208881648692e+00 3.383772957955e-01 1.499090936244e+00 1.536806048088e+00 8.644395695503e-01 7.216036831176e-03 1.252147128387e-02 1.179523033729e-01 1.156818863024e-03 1.000000000000e-03 +9.947632368294e-01 1.150328667086e+00 3.272461487136e-01 1.520792536695e+00 1.555602771120e+00 1.036915855887e+00 8.121246056575e-03 1.174817514430e-02 1.142520369101e-01 9.643984073757e-04 1.000000000000e-03 +1.096411696061e+00 1.096411696061e+00 3.156725080602e-01 1.550560290514e+00 1.582367323621e+00 1.173827099631e+00 8.372863832690e-03 1.069944266322e-02 1.090333418079e-01 8.519142217062e-04 1.000000000000e-03 +1.195000584812e+00 1.051512747459e+00 3.049667002885e-01 1.591761745919e+00 1.620712850586e+00 1.254459887436e+00 8.018345317123e-03 9.587805952304e-03 1.032139415233e-01 7.971558198197e-04 1.000000000000e-03 +1.295788766245e+00 1.019979466566e+00 2.969611539952e-01 1.649068415483e+00 1.675593198221e+00 1.231308602163e+00 7.578522799459e-03 9.232278714873e-03 1.012822169039e-01 8.121440865787e-04 1.000000000000e-03 +1.406329538503e+00 1.001746850452e+00 2.921808884763e-01 1.726632422739e+00 1.751179372550e+00 1.154826508349e+00 5.063706081964e-03 6.577229625432e-03 8.548703362000e-02 8.659309366130e-04 1.000000000000e-03 +7.258749009733e-02 1.585966257751e+00 3.638521823974e-01 1.587626503445e+00 1.628786764766e+00 3.314737311419e-01 2.455942137433e-03 1.111374102997e-02 1.111242599274e-01 3.016830312782e-03 1.000000000000e-03 +2.167582136539e-01 1.570113924096e+00 3.617051426564e-01 1.585005317917e+00 1.625752892678e+00 3.472511924655e-01 2.562875699764e-03 1.107069934692e-02 1.109088682304e-01 2.879759729261e-03 1.000000000000e-03 +3.575285251468e-01 1.539291683050e+00 3.575285251468e-01 1.580267550702e+00 1.620207449093e+00 3.827082580452e-01 2.789411582023e-03 1.093291635359e-02 1.102165361337e-01 2.612956420402e-03 1.000000000000e-03 +4.926385370326e-01 1.495443610372e+00 3.515543281331e-01 1.574498116853e+00 1.613268348912e+00 4.398491264323e-01 3.165912833219e-03 1.079658674861e-02 1.095271998111e-01 2.273506845657e-03 1.000000000000e-03 +6.206081682477e-01 1.441501261589e+00 3.440761316809e-01 1.569420398000e+00 1.606694983515e+00 5.243665719285e-01 3.720286492040e-03 1.064223014358e-02 1.087414371780e-01 1.907062832633e-03 1.000000000000e-03 +7.404551470496e-01 1.380857569138e+00 3.353726492569e-01 1.566857189101e+00 1.602347111243e+00 6.432024447667e-01 4.480666227501e-03 1.044927517912e-02 1.077511287856e-01 1.554720458755e-03 1.000000000000e-03 +8.518107871974e-01 1.317075771580e+00 3.257224536298e-01 1.568524850064e+00 1.601987928190e+00 8.014682682590e-01 5.440106264800e-03 1.018151275649e-02 1.063616093882e-01 1.247710033701e-03 1.000000000000e-03 +9.550618739851e-01 1.253897867818e+00 3.154477305142e-01 1.576198923378e+00 1.607454607989e+00 1.004913731125e+00 6.624779957316e-03 9.888580112094e-03 1.048203760519e-01 9.951102955677e-04 1.000000000000e-03 +1.051512747459e+00 1.195000584812e+00 3.049667002885e-01 1.591761745919e+00 1.620712850586e+00 1.254459887436e+00 8.018345317123e-03 9.587805952304e-03 1.032139415233e-01 7.971558198198e-04 1.000000000000e-03 +1.143703230613e+00 1.143703230613e+00 2.949108295225e-01 1.617440620063e+00 1.644106613575e+00 1.491005935444e+00 9.156507946655e-03 9.211741947822e-03 1.011695054397e-01 6.706881416284e-04 1.000000000000e-03 +1.236511166045e+00 1.103122328323e+00 2.862259112608e-01 1.657057251576e+00 1.681595672948e+00 1.600796209087e+00 9.427415295099e-03 8.833805866339e-03 9.907239702101e-02 6.246891355210e-04 1.000000000000e-03 +1.340326955627e+00 1.075006109282e+00 2.797479345003e-01 1.718171843261e+00 1.740796768676e+00 1.407215630922e+00 5.700657811359e-03 6.076529089886e-03 8.216872269156e-02 7.106231468911e-04 1.000000000000e-03 +7.323829529244e-02 1.750963033217e+00 3.672666287525e-01 1.752494048945e+00 1.790564203871e+00 2.633058010030e-01 1.604122314014e-03 9.138361030616e-03 1.007657405990e-01 3.797865433237e-03 1.000000000000e-03 +2.183205013157e-01 1.731164105974e+00 3.643589411072e-01 1.744876214264e+00 1.782512395769e+00 2.760835954578e-01 1.693287471750e-03 9.199862829276e-03 1.011042521871e-01 3.622091339190e-03 1.000000000000e-03 +3.588038188863e-01 1.693336200238e+00 3.588038188863e-01 1.730932600503e+00 1.767729574321e+00 3.051605679660e-01 1.870465847885e-03 9.194172073177e-03 1.010729773380e-01 3.276963359537e-03 1.000000000000e-03 +4.919167844354e-01 1.640505363151e+00 3.510308821177e-01 1.712670420524e+00 1.748274191750e+00 3.526578338866e-01 2.156942931427e-03 9.174372681543e-03 1.009640897742e-01 2.835609772167e-03 1.000000000000e-03 +6.161389458699e-01 1.576726065953e+00 3.416015236061e-01 1.692835576089e+00 1.726957986925e+00 4.251364271649e-01 2.591329505612e-03 9.142933914976e-03 1.007909493014e-01 2.352186112747e-03 1.000000000000e-03 +7.307558486012e-01 1.506345751312e+00 3.310522362219e-01 1.674240613759e+00 1.706656736391e+00 5.330062446019e-01 3.239666903538e-03 9.117154638471e-03 1.006487546894e-01 1.876150626991e-03 1.000000000000e-03 +8.357768441223e-01 1.433597458347e+00 3.198395015379e-01 1.659435026071e+00 1.689976897030e+00 6.914072014261e-01 4.207719858567e-03 9.128600012890e-03 1.007119104337e-01 1.446325693365e-03 1.000000000000e-03 +9.317656069060e-01 1.362338852483e+00 3.083352685409e-01 1.650501225446e+00 1.679054773682e+00 9.198562424836e-01 5.634525805361e-03 9.188162582038e-03 1.010399402989e-01 1.087126394120e-03 1.000000000000e-03 +1.019979466566e+00 1.295788766245e+00 2.969611539952e-01 1.649068415483e+00 1.675593198221e+00 1.231308602163e+00 7.578522799459e-03 9.232278714873e-03 1.012822169039e-01 8.121440865786e-04 1.000000000000e-03 +1.103122328323e+00 1.236511166045e+00 2.862259112608e-01 1.657057251576e+00 1.681595672948e+00 1.600796209087e+00 9.427415295099e-03 8.833805866339e-03 9.907239702101e-02 6.246891355210e-04 1.000000000000e-03 +1.186321215023e+00 1.186321215023e+00 2.765219321198e-01 1.677711551617e+00 1.700347149664e+00 1.882396034612e+00 1.038491412380e-02 8.275288993000e-03 9.588934011546e-02 5.312378381662e-04 1.000000000000e-03 +1.284312852455e+00 1.149543289754e+00 2.689395732064e-01 1.723632582078e+00 1.744487825133e+00 1.364033383743e+00 4.609265375183e-03 5.068716165730e-03 7.504603154605e-02 7.331198868870e-04 1.000000000000e-03 +7.721110465645e-02 1.940439407973e+00 3.873893559028e-01 1.941974935651e+00 1.980236643374e+00 2.127667951046e-01 7.797320708366e-04 5.497089457404e-03 7.815290893430e-02 4.699981496213e-03 1.000000000000e-03 +2.294464522640e-01 1.915595553628e+00 3.829528984387e-01 1.929287951431e+00 1.966927787683e+00 2.243185508728e-01 8.438396619191e-04 5.642687543913e-03 7.918113933614e-02 4.457946059784e-03 1.000000000000e-03 +3.746426239233e-01 1.868948178284e+00 3.746426239233e-01 1.906128114469e+00 1.942596583038e+00 2.514116834691e-01 9.534253153948e-04 5.688430837255e-03 7.950143840247e-02 3.977539890753e-03 1.000000000000e-03 +5.090888282599e-01 1.805055564456e+00 3.633401548096e-01 1.875472480692e+00 1.910343710941e+00 2.947228394796e-01 1.137940629498e-03 5.791580141058e-03 8.021900676037e-02 3.393018341455e-03 1.000000000000e-03 +6.311907282125e-01 1.729163669784e+00 3.500235143508e-01 1.840763084235e+00 1.873746298964e+00 3.617548569438e-01 1.427903806970e-03 5.920737950973e-03 8.110855517948e-02 2.764302899617e-03 1.000000000000e-03 +7.404059246714e-01 1.646437631693e+00 3.355174108090e-01 1.805258377170e+00 1.836172579389e+00 4.666536534155e-01 1.887293718703e-03 6.066470405482e-03 8.210068618933e-02 2.142916899248e-03 1.000000000000e-03 +8.373278875865e-01 1.562045660895e+00 3.205856847968e-01 1.772316178917e+00 1.801077405152e+00 6.297049527655e-01 2.627017794599e-03 6.257734951254e-03 8.338488373037e-02 1.588045314886e-03 1.000000000000e-03 +9.236158899365e-01 1.480816504718e+00 3.059345046369e-01 1.745246066545e+00 1.771857712661e+00 8.660427328443e-01 3.766405165215e-03 6.523474574133e-03 8.513697834884e-02 1.154677433428e-03 1.000000000000e-03 +1.001746850452e+00 1.406329538503e+00 2.921808884763e-01 1.726632422739e+00 1.751179372550e+00 1.154826508349e+00 5.063706081964e-03 6.577229625432e-03 8.548703362000e-02 8.659309366130e-04 1.000000000000e-03 +1.075006109282e+00 1.340326955627e+00 2.797479345003e-01 1.718171843261e+00 1.740796768676e+00 1.407215630922e+00 5.700657811359e-03 6.076529089886e-03 8.216872269156e-02 7.106231468911e-04 1.000000000000e-03 +1.149543289754e+00 1.284312852455e+00 2.689395732064e-01 1.723632582078e+00 1.744487825133e+00 1.364033383743e+00 4.609265375184e-03 5.068716165730e-03 7.504603154605e-02 7.331198868870e-04 1.000000000000e-03 +1.244321918688e+00 1.244321918688e+00 2.609708106596e-01 1.759736933366e+00 1.778982810111e+00 8.386253786141e-01 1.262246182035e-03 2.257705670895e-03 5.008554538537e-02 1.192427543336e-03 1.000000000000e-03 +1.230939711829e-01 1.230939711829e-01 9.111308109915e-01 1.740811634932e-01 9.276117755942e-01 1.190367002232e-01 5.851029117584e-03 7.372972923411e-02 2.862200575977e-01 8.400770502922e-03 1.000000000000e-03 +3.692803592801e-01 1.238339207224e-01 9.026754672765e-01 3.894904667274e-01 9.831204518747e-01 1.267383659059e-01 6.019154824087e-03 7.123914034709e-02 2.813442737744e-01 7.890270581070e-03 1.000000000000e-03 +6.012915105099e-01 1.211436229380e-01 8.652673121075e-01 6.133736691364e-01 1.060619997639e+00 1.433907811703e-01 6.521723131879e-03 6.822324711518e-02 2.753245501327e-01 6.973949035207e-03 1.000000000000e-03 +7.974054526948e-01 1.135593149280e-01 7.974054526948e-01 8.054509134604e-01 1.133404883518e+00 1.818636751884e-01 7.241921601534e-03 5.973090773101e-02 2.576192447328e-01 5.498624169802e-03 1.000000000000e-03 +9.511875981895e-01 1.034447846809e-01 7.218696482267e-01 9.567960443204e-01 1.198563498300e+00 2.593849352984e-01 7.343773035566e-03 4.246838599426e-02 2.172259090191e-01 3.855274011382e-03 1.000000000000e-03 +1.073870747774e+00 9.341710077195e-02 6.533049437764e-01 1.077926313642e+00 1.260449319570e+00 3.378360679704e-01 7.009578163213e-03 3.112269009045e-02 1.859590459407e-01 2.960015506951e-03 1.000000000000e-03 +1.183728515681e+00 8.500674652494e-02 5.958213623021e-01 1.186776872791e+00 1.327946701327e+00 4.021201615519e-01 6.410802855880e-03 2.391375813317e-02 1.630056513443e-01 2.486818855689e-03 1.000000000000e-03 +1.292309462142e+00 7.853283421262e-02 5.508652899948e-01 1.294693458696e+00 1.407012338152e+00 4.406593123166e-01 5.430569075066e-03 1.848560415023e-02 1.433162941432e-01 2.269326829252e-03 1.000000000000e-03 +1.407522977630e+00 7.390677203284e-02 5.187384612411e-01 1.409462004989e+00 1.501889721211e+00 4.337614804821e-01 4.104957049311e-03 1.419544116071e-02 1.255894597520e-01 2.305414484681e-03 1.000000000000e-03 +1.538366654571e+00 7.132361086692e-02 5.008674515399e-01 1.540019162661e+00 1.619421879986e+00 3.841847372485e-01 2.789633782864e-03 1.089176708129e-02 1.100089242910e-01 2.602914439449e-03 1.000000000000e-03 +1.692728296636e+00 7.155850358378e-02 5.026549077567e-01 1.694240155842e+00 1.767232769603e+00 3.055242546353e-01 1.852190812833e-03 9.093504614113e-03 1.005181277963e-01 3.273062563211e-03 1.000000000000e-03 +1.869234895754e+00 7.471699314202e-02 5.249532750583e-01 1.870727592293e+00 1.942986789858e+00 2.500690217252e-01 9.321372444974e-04 5.591279787877e-03 7.881962381058e-02 3.998895957209e-03 1.000000000000e-03 +1.238339207224e-01 3.692803592801e-01 9.026754672765e-01 3.894904667274e-01 9.831204518747e-01 1.267383659059e-01 6.019154824087e-03 7.123914034709e-02 2.813442737744e-01 7.890270581070e-03 1.000000000000e-03 +3.665806503660e-01 3.665806503660e-01 8.861189065772e-01 5.184233274511e-01 1.026630149099e+00 1.376412763102e-01 6.371171810210e-03 6.943235322647e-02 2.777535942891e-01 7.265262476541e-03 1.000000000000e-03 +5.915819832128e-01 3.561652018958e-01 8.461017259547e-01 6.905236374690e-01 1.092113100630e+00 1.576060665361e-01 6.724805800292e-03 6.400266767733e-02 2.666722242699e-01 6.344933427872e-03 1.000000000000e-03 +7.833850229859e-01 3.344912871630e-01 7.833850229859e-01 8.518077925369e-01 1.157267734651e+00 2.029650558363e-01 7.503710715407e-03 5.545568436268e-02 2.482285782694e-01 4.926956494455e-03 1.000000000000e-03 +9.366457393342e-01 3.058672854687e-01 7.127750758195e-01 9.853223012461e-01 1.216103756282e+00 2.743739760280e-01 7.475667493102e-03 4.086940533496e-02 2.130972791290e-01 3.644660526762e-03 1.000000000000e-03 +1.061369645916e+00 2.774580632929e-01 6.472224466501e-01 1.097036235572e+00 1.273728934117e+00 3.551234225588e-01 7.248027121628e-03 3.061482288075e-02 1.844355439374e-01 2.815922399020e-03 1.000000000000e-03 +1.172452266403e+00 2.533208819877e-01 5.916600349727e-01 1.199506476116e+00 1.337489208640e+00 4.205201267816e-01 6.630055563045e-03 2.364948241760e-02 1.621024450347e-01 2.378007463408e-03 1.000000000000e-03 +1.280887767293e+00 2.344329126219e-01 5.477783933652e-01 1.302164453102e+00 1.412690139825e+00 4.597447597017e-01 5.625382917006e-03 1.835382393697e-02 1.428045437223e-01 2.175119952751e-03 1.000000000000e-03 +1.395048523246e+00 2.207826495233e-01 5.160623458897e-01 1.412411186780e+00 1.503737246126e+00 4.525076619204e-01 4.264639527181e-03 1.413668724110e-02 1.253292873509e-01 2.209907332300e-03 1.000000000000e-03 +1.523793356160e+00 2.130225360422e-01 4.980818900474e-01 1.538611319710e+00 1.617223040379e+00 4.013682570940e-01 2.911069828668e-03 1.087929766698e-02 1.099459345263e-01 2.491477545435e-03 1.000000000000e-03 +1.674814854749e+00 2.133852440128e-01 4.989802018336e-01 1.688353653726e+00 1.760545171778e+00 3.200447976029e-01 1.955545957297e-03 9.165338596083e-03 1.009143674172e-01 3.124562584644e-03 1.000000000000e-03 +1.846995892054e+00 2.221688388485e-01 5.194536114879e-01 1.860309871559e+00 1.931472203452e+00 2.635761333013e-01 1.007440528311e-03 5.733299041679e-03 7.981436129252e-02 3.793970218300e-03 1.000000000000e-03 +1.211436229380e-01 6.012915105099e-01 8.652673121075e-01 6.133736691364e-01 1.060619997639e+00 1.433907811703e-01 6.521723131879e-03 6.822324711518e-02 2.753245501327e-01 6.973949035207e-03 1.000000000000e-03 +3.561652018958e-01 5.915819832128e-01 8.461017259547e-01 6.905236374690e-01 1.092113100630e+00 1.576060665361e-01 6.724805800292e-03 6.400266767733e-02 2.666722242699e-01 6.344933427872e-03 1.000000000000e-03 +5.709501773636e-01 5.709501773636e-01 8.086063718859e-01 8.074454842670e-01 1.142721521070e+00 1.901576217971e-01 7.271100828074e-03 5.735584584534e-02 2.524454745206e-01 5.258795259162e-03 1.000000000000e-03 +7.557126725761e-01 5.377779101613e-01 7.557126725761e-01 9.275272093850e-01 1.196414797485e+00 2.445224397237e-01 7.722915570405e-03 4.737550209582e-02 2.294328807585e-01 4.089604214361e-03 1.000000000000e-03 +9.086475631292e-01 4.960061384200e-01 6.950344331284e-01 1.035211323031e+00 1.246890270459e+00 3.105855359957e-01 7.844500981299e-03 3.788570331914e-02 2.051712112119e-01 3.219724952079e-03 1.000000000000e-03 +1.036662887703e+00 4.536793492572e-01 6.355732188297e-01 1.131589543378e+00 1.297862940058e+00 3.903606565955e-01 7.638104217593e-03 2.935018202478e-02 1.805860275903e-01 2.561733574078e-03 1.000000000000e-03 +1.149851874598e+00 4.165547684419e-01 5.836072212220e-01 1.222978825911e+00 1.355092099191e+00 4.599971944059e-01 7.043528237219e-03 2.296816694604e-02 1.597503849623e-01 2.173926302510e-03 1.000000000000e-03 +1.258165268543e+00 3.866575619294e-01 5.417494202467e-01 1.316238547212e+00 1.423367959280e+00 5.013833498521e-01 6.011607182371e-03 1.798506228062e-02 1.413626631541e-01 1.994481867607e-03 1.000000000000e-03 +1.370482244304e+00 3.645753399285e-01 5.108386302069e-01 1.418145535704e+00 1.507346299478e+00 4.942130242060e-01 4.589891529614e-03 1.393091026988e-02 1.244137821496e-01 2.023418953004e-03 1.000000000000e-03 +1.495443610372e+00 3.515543281331e-01 4.926385370326e-01 1.536210284249e+00 1.613268348912e+00 4.398491264323e-01 3.165912833219e-03 1.079658674861e-02 1.095271998111e-01 2.273506845657e-03 1.000000000000e-03 +1.640505363151e+00 3.510308821177e-01 4.919167844354e-01 1.677641358196e+00 1.748274191750e+00 3.526578338866e-01 2.156942931427e-03 9.174372681543e-03 1.009640897742e-01 2.835609772167e-03 1.000000000000e-03 +1.805055564456e+00 3.633401548096e-01 5.090888282599e-01 1.841260888324e+00 1.910343710941e+00 2.947228394796e-01 1.137940629498e-03 5.791580141058e-03 8.021900676037e-02 3.393018341455e-03 1.000000000000e-03 +1.135593149280e-01 7.974054526948e-01 7.974054526948e-01 8.054509134604e-01 1.133404883518e+00 1.818636751884e-01 7.241921601534e-03 5.973090773101e-02 2.576192447328e-01 5.498624169802e-03 1.000000000000e-03 +3.344912871630e-01 7.833850229859e-01 7.833850229859e-01 8.518077925369e-01 1.157267734651e+00 2.029650558363e-01 7.503710715407e-03 5.545568436268e-02 2.482285782694e-01 4.926956494455e-03 1.000000000000e-03 +5.377779101613e-01 7.557126725761e-01 7.557126725761e-01 9.275272093850e-01 1.196414797485e+00 2.445224397237e-01 7.722915570405e-03 4.737550209582e-02 2.294328807585e-01 4.089604214361e-03 1.000000000000e-03 +7.161736729509e-01 7.161736729509e-01 7.161736729509e-01 1.012822521302e+00 1.240449188594e+00 3.012473514233e-01 7.964558161553e-03 3.965789968239e-02 2.099150613473e-01 3.319531259861e-03 1.000000000000e-03 +8.690437941069e-01 6.685072924725e-01 6.685072924725e-01 1.096421048760e+00 1.284149958632e+00 3.688150002599e-01 8.318365571842e-03 3.383145574060e-02 1.938827129438e-01 2.711386465559e-03 1.000000000000e-03 +1.000381281656e+00 6.182487182963e-01 6.182487182963e-01 1.176007732271e+00 1.328617952625e+00 4.446417379295e-01 8.146229168970e-03 2.748132420126e-02 1.747421090295e-01 2.249001644912e-03 1.000000000000e-03 +1.116285143034e+00 5.717775713676e-01 5.717775713676e-01 1.254201782680e+00 1.378387355861e+00 5.203786491874e-01 7.632311417810e-03 2.200026297119e-02 1.563481264188e-01 1.921677612180e-03 1.000000000000e-03 +1.224804744310e+00 5.328709578226e-01 5.328709578226e-01 1.335701358604e+00 1.438071478428e+00 5.667675351850e-01 6.595287249679e-03 1.745500625982e-02 1.392639630335e-01 1.764391814845e-03 1.000000000000e-03 +1.334924961939e+00 5.032074610309e-01 5.032074610309e-01 1.426619221392e+00 1.512765729280e+00 5.609839661630e-01 5.108144719866e-03 1.365853133416e-02 1.231915010333e-01 1.782582141946e-03 1.000000000000e-03 +1.455090245089e+00 4.847951751987e-01 4.847951751987e-01 1.533725524091e+00 1.608521167142e+00 5.021291380294e-01 3.573917405362e-03 1.067628962757e-02 1.089153066866e-01 1.991519559937e-03 1.000000000000e-03 +1.592444840026e+00 4.819563289130e-01 4.819563289130e-01 1.663779574194e+00 1.732179082683e+00 4.062801890039e-01 2.481826823193e-03 9.162987355885e-03 1.009014224979e-01 2.461355554776e-03 1.000000000000e-03 +1.747305947663e+00 4.948473758346e-01 4.948473758346e-01 1.816026431556e+00 1.882239603632e+00 3.453462802030e-01 1.359077217976e-03 5.903106371278e-03 8.098769708541e-02 2.895644335338e-03 1.000000000000e-03 +1.034447846809e-01 9.511875981895e-01 7.218696482267e-01 9.567960443204e-01 1.198563498300e+00 2.593849352984e-01 7.343773035566e-03 4.246838599426e-02 2.172259090191e-01 3.855274011382e-03 1.000000000000e-03 +3.058672854687e-01 9.366457393342e-01 7.127750758195e-01 9.853223012461e-01 1.216103756282e+00 2.743739760280e-01 7.475667493102e-03 4.086940533496e-02 2.130972791290e-01 3.644660526762e-03 1.000000000000e-03 +4.960061384200e-01 9.086475631292e-01 6.950344331284e-01 1.035211323031e+00 1.246890270459e+00 3.105855359957e-01 7.844500981299e-03 3.788570331914e-02 2.051712112119e-01 3.219724952079e-03 1.000000000000e-03 +6.685072924725e-01 8.690437941069e-01 6.685072924725e-01 1.096421048760e+00 1.284149958632e+00 3.688150002599e-01 8.318365571842e-03 3.383145574060e-02 1.938827129438e-01 2.711386465559e-03 1.000000000000e-03 +8.209894636906e-01 8.209894636906e-01 6.342326303024e-01 1.161054434117e+00 1.322988446027e+00 4.437111596629e-01 8.573326530910e-03 2.898279548825e-02 1.794522390444e-01 2.253718389142e-03 1.000000000000e-03 +9.546078168356e-01 7.683963048749e-01 5.951774714261e-01 1.225442354951e+00 1.362330792356e+00 5.224877596901e-01 8.685195075921e-03 2.493415849896e-02 1.664470503025e-01 1.913920434410e-03 1.000000000000e-03 +1.073121613548e+00 7.167595143331e-01 5.560938351535e-01 1.290478282983e+00 1.405195556621e+00 6.022614894245e-01 8.306096169591e-03 2.068726703129e-02 1.516108579785e-01 1.660408340164e-03 1.000000000000e-03 +1.182377717789e+00 6.712488482019e-01 5.212368848228e-01 1.359629392054e+00 1.456118118092e+00 6.581659673552e-01 7.359978055620e-03 1.677383461164e-02 1.365195737356e-01 1.519373607266e-03 1.000000000000e-03 +1.290379558926e+00 6.350962438914e-01 4.933351493422e-01 1.438202574431e+00 1.520462500253e+00 6.573300340945e-01 5.838046612278e-03 1.332218134606e-02 1.216652116171e-01 1.521305810068e-03 1.000000000000e-03 +1.405414206452e+00 6.112806939623e-01 4.748956421031e-01 1.532596874102e+00 1.604487160870e+00 5.933762475224e-01 4.168663451750e-03 1.053799373287e-02 1.082075871897e-01 1.685271367325e-03 1.000000000000e-03 +1.534247348602e+00 6.046598150465e-01 4.697659619661e-01 1.649099274945e+00 1.714703612187e+00 4.881216931900e-01 2.978233586532e-03 9.152124238942e-03 1.008415932647e-01 2.048669448524e-03 1.000000000000e-03 +1.678393464991e+00 6.150513519900e-01 4.778841505316e-01 1.787538192294e+00 1.850315121875e+00 4.243004317546e-01 1.708131520275e-03 6.038639342922e-03 8.191214360468e-02 2.356820604365e-03 1.000000000000e-03 +9.341710077195e-02 1.073870747774e+00 6.533049437764e-01 1.077926313642e+00 1.260449319570e+00 3.378360679704e-01 7.009578163213e-03 3.112269009045e-02 1.859590459407e-01 2.960015506951e-03 1.000000000000e-03 +2.774580632929e-01 1.061369645916e+00 6.472224466501e-01 1.097036235572e+00 1.273728934117e+00 3.551234225588e-01 7.248027121628e-03 3.061482288075e-02 1.844355439374e-01 2.815922399020e-03 1.000000000000e-03 +4.536793492572e-01 1.036662887703e+00 6.355732188297e-01 1.131589543378e+00 1.297862940058e+00 3.903606565955e-01 7.638104217593e-03 2.935018202478e-02 1.805860275903e-01 2.561733574078e-03 1.000000000000e-03 +6.182487182963e-01 1.000381281656e+00 6.182487182963e-01 1.176007732271e+00 1.328617952625e+00 4.446417379295e-01 8.146229168970e-03 2.748132420126e-02 1.747421090295e-01 2.249001644912e-03 1.000000000000e-03 +7.683963048749e-01 9.546078168356e-01 5.951774714261e-01 1.225442354951e+00 1.362330792356e+00 5.224877596901e-01 8.685195075921e-03 2.493415849896e-02 1.664470503025e-01 1.913920434410e-03 1.000000000000e-03 +9.028299725182e-01 9.028299725182e-01 5.671187489232e-01 1.276794391652e+00 1.397078234722e+00 6.176075483188e-01 9.013370339682e-03 2.189101403687e-02 1.559594464271e-01 1.619151195160e-03 1.000000000000e-03 +1.023064652656e+00 8.497436326000e-01 5.365179308316e-01 1.329934406149e+00 1.434077060259e+00 7.056433024920e-01 8.922892918013e-03 1.896757090977e-02 1.451725827718e-01 1.417146590166e-03 1.000000000000e-03 +1.133178119548e+00 8.003647430270e-01 5.068716274082e-01 1.387327060394e+00 1.477022416612e+00 7.752937246721e-01 8.198947007324e-03 1.586291765252e-02 1.327609282069e-01 1.289833734206e-03 1.000000000000e-03 +1.239437352077e+00 7.590389767492e-01 4.814189017862e-01 1.453390903352e+00 1.531048424102e+00 7.873176210909e-01 6.763196445724e-03 1.288526307150e-02 1.196534954288e-01 1.270135423381e-03 1.000000000000e-03 +1.349549207628e+00 7.300280921211e-01 4.633068332181e-01 1.534348095804e+00 1.602771755679e+00 7.195787748576e-01 4.963529335300e-03 1.034673931902e-02 1.072211593909e-01 1.389701913036e-03 1.000000000000e-03 +1.469878075327e+00 7.183707844328e-01 4.560153958703e-01 1.636031216161e+00 1.698395767048e+00 6.093382556013e-01 3.722223875666e-03 9.162949744538e-03 1.009012154124e-01 1.641124598378e-03 1.000000000000e-03 +1.603129480414e+00 7.233657887623e-01 4.592770182242e-01 1.758772923184e+00 1.817750691045e+00 5.468027163270e-01 2.264859207591e-03 6.213006464574e-03 8.308634374067e-02 1.828813153521e-03 1.000000000000e-03 +8.500674652494e-02 1.183728515681e+00 5.958213623021e-01 1.186776872791e+00 1.327946701327e+00 4.021201615519e-01 6.410802855880e-03 2.391375813317e-02 1.630056513443e-01 2.486818855689e-03 1.000000000000e-03 +2.533208819877e-01 1.172452266403e+00 5.916600349727e-01 1.199506476116e+00 1.337489208640e+00 4.205201267816e-01 6.630055563045e-03 2.364948241760e-02 1.621024450347e-01 2.378007463408e-03 1.000000000000e-03 +4.165547684419e-01 1.149851874598e+00 5.836072212220e-01 1.222978825911e+00 1.355092099191e+00 4.599971944059e-01 7.043528237219e-03 2.296816694604e-02 1.597503849623e-01 2.173926302510e-03 1.000000000000e-03 +5.717775713676e-01 1.116285143034e+00 5.717775713676e-01 1.254201782680e+00 1.378387355861e+00 5.203786491874e-01 7.632311417810e-03 2.200026297119e-02 1.563481264188e-01 1.921677612180e-03 1.000000000000e-03 +7.167595143331e-01 1.073121613548e+00 5.560938351535e-01 1.290478282983e+00 1.405195556621e+00 6.022614894245e-01 8.306096169591e-03 2.068726703129e-02 1.516108579785e-01 1.660408340164e-03 1.000000000000e-03 +8.497436326000e-01 1.023064652656e+00 5.365179308316e-01 1.329934406149e+00 1.434077060259e+00 7.056433024920e-01 8.922892918013e-03 1.896757090977e-02 1.451725827718e-01 1.417146590166e-03 1.000000000000e-03 +9.702731216509e-01 9.702731216509e-01 5.138078303039e-01 1.372173407845e+00 1.465216143672e+00 8.204318627361e-01 9.219823497351e-03 1.685665303137e-02 1.368561817358e-01 1.218870262626e-03 1.000000000000e-03 +1.080533449336e+00 9.192980541230e-01 4.899438587439e-01 1.418682997518e+00 1.500901872931e+00 9.115285738940e-01 8.918715257812e-03 1.467652607923e-02 1.276998480780e-01 1.097058313518e-03 1.000000000000e-03 +1.185208848323e+00 8.744097075226e-01 4.677047416382e-01 1.472858564409e+00 1.545334939779e+00 9.482022088313e-01 7.777869089440e-03 1.230413041174e-02 1.169241464072e-01 1.054627368178e-03 1.000000000000e-03 +1.290815278279e+00 8.405917670280e-01 4.504065298032e-01 1.540389107152e+00 1.604887735489e+00 8.874156489450e-01 5.983220743756e-03 1.011344698091e-02 1.060054871793e-01 1.126867664762e-03 1.000000000000e-03 +1.403204210522e+00 8.229410200483e-01 4.412805355858e-01 1.626718776835e+00 1.685509563898e+00 7.859568510859e-01 4.832671658811e-03 9.223162159857e-03 1.012321982148e-01 1.272334478182e-03 1.000000000000e-03 +1.526387798595e+00 8.203186901819e-01 4.400644077378e-01 1.732853849914e+00 1.787858816607e+00 7.298602155055e-01 3.148385439480e-03 6.470524161875e-03 8.479075003190e-02 1.370125372990e-03 1.000000000000e-03 +7.853283421262e-02 1.292309462142e+00 5.508652899948e-01 1.294693458696e+00 1.407012338152e+00 4.406593123166e-01 5.430569075066e-03 1.848560415023e-02 1.433162941432e-01 2.269326829252e-03 1.000000000000e-03 +2.344329126219e-01 1.280887767293e+00 5.477783933652e-01 1.302164453102e+00 1.412690139825e+00 4.597447597017e-01 5.625382917006e-03 1.835382393697e-02 1.428045437223e-01 2.175119952751e-03 1.000000000000e-03 +3.866575619294e-01 1.258165268543e+00 5.417494202467e-01 1.316238547212e+00 1.423367959280e+00 5.013833498521e-01 6.011607182371e-03 1.798506228062e-02 1.413626631541e-01 1.994481867607e-03 1.000000000000e-03 +5.328709578226e-01 1.224804744310e+00 5.328709578226e-01 1.335701358604e+00 1.438071478428e+00 5.667675351850e-01 6.595287249679e-03 1.745500625982e-02 1.392639630335e-01 1.764391814845e-03 1.000000000000e-03 +6.712488482019e-01 1.182377717789e+00 5.212368848228e-01 1.359629392054e+00 1.456118118092e+00 6.581659673552e-01 7.359978055620e-03 1.677383461164e-02 1.365195737356e-01 1.519373607266e-03 1.000000000000e-03 +8.003647430270e-01 1.133178119548e+00 5.068716274082e-01 1.387327060394e+00 1.477022416612e+00 7.752937246721e-01 8.198947007324e-03 1.586291765252e-02 1.327609282069e-01 1.289833734206e-03 1.000000000000e-03 +9.192980541230e-01 1.080533449336e+00 4.899438587439e-01 1.418682997518e+00 1.500901872931e+00 9.115285738940e-01 8.918715257812e-03 1.467652607923e-02 1.276998480780e-01 1.097058313518e-03 1.000000000000e-03 +1.028602387866e+00 1.028602387866e+00 4.712775715951e-01 1.454663447210e+00 1.529100485297e+00 1.042348190135e+00 9.147609645967e-03 1.316394521410e-02 1.209405051810e-01 9.593723186403e-04 1.000000000000e-03 +1.131322484528e+00 9.813317522683e-01 4.526051947345e-01 1.497632322036e+00 1.564529972327e+00 1.121880358256e+00 8.624994772169e-03 1.153197135777e-02 1.131958546442e-01 8.913606452250e-04 1.000000000000e-03 +1.232546706303e+00 9.431582898824e-01 4.365971604806e-01 1.552004814101e+00 1.612245646150e+00 1.107525806278e+00 7.301247988693e-03 9.888593043121e-03 1.048204445872e-01 9.029134981156e-04 1.000000000000e-03 +1.337640979816e+00 9.187365206375e-01 4.260618971927e-01 1.622763132819e+00 1.677763071913e+00 1.036377402053e+00 6.455032921571e-03 9.342686711592e-03 1.018860295275e-01 9.648994642482e-04 1.000000000000e-03 +1.452459295838e+00 9.074057842127e-01 4.211871957204e-01 1.712607153812e+00 1.763638828425e+00 9.759409679073e-01 4.362858745987e-03 6.705618817308e-03 8.631736543006e-02 1.024652138689e-03 1.000000000000e-03 +7.390677203284e-02 1.407522977630e+00 5.187384612411e-01 1.409462004989e+00 1.501889721211e+00 4.337614804821e-01 4.104957049311e-03 1.419544116071e-02 1.255894597520e-01 2.305414484681e-03 1.000000000000e-03 +2.207826495233e-01 1.395048523246e+00 5.160623458897e-01 1.412411186780e+00 1.503737246126e+00 4.525076619204e-01 4.264639527181e-03 1.413668724110e-02 1.253292873509e-01 2.209907332300e-03 1.000000000000e-03 +3.645753399285e-01 1.370482244304e+00 5.108386302069e-01 1.418145535704e+00 1.507346299478e+00 4.942130242060e-01 4.589891529614e-03 1.393091026988e-02 1.244137821496e-01 2.023418953004e-03 1.000000000000e-03 +5.032074610309e-01 1.334924961939e+00 5.032074610309e-01 1.426619221392e+00 1.512765729280e+00 5.609839661630e-01 5.108144719866e-03 1.365853133416e-02 1.231915010333e-01 1.782582141946e-03 1.000000000000e-03 +6.350962438914e-01 1.290379558926e+00 4.933351493422e-01 1.438202574431e+00 1.520462500253e+00 6.573300340945e-01 5.838046612278e-03 1.332218134606e-02 1.216652116171e-01 1.521305810068e-03 1.000000000000e-03 +7.590389767492e-01 1.239437352077e+00 4.814189017862e-01 1.453390903352e+00 1.531048424102e+00 7.873176210909e-01 6.763196445724e-03 1.288526307150e-02 1.196534954288e-01 1.270135423382e-03 1.000000000000e-03 +8.744097075226e-01 1.185208848323e+00 4.677047416382e-01 1.472858564409e+00 1.545334939779e+00 9.482022088313e-01 7.777869089440e-03 1.230413041174e-02 1.169241464072e-01 1.054627368178e-03 1.000000000000e-03 +9.813317522683e-01 1.131322484528e+00 4.526051947345e-01 1.497632322036e+00 1.564529972327e+00 1.121880358256e+00 8.624994772169e-03 1.153197135777e-02 1.131958546442e-01 8.913606452250e-04 1.000000000000e-03 +1.081375171137e+00 1.081375171137e+00 4.369906222469e-01 1.529295433036e+00 1.590504739206e+00 1.272787805474e+00 8.945106025720e-03 1.054194499733e-02 1.082278717302e-01 7.856769177855e-04 1.000000000000e-03 +1.177848750951e+00 1.038703247058e+00 4.224156346172e-01 1.570424183323e+00 1.626243242548e+00 1.377700454173e+00 8.854761863461e-03 9.640805993029e-03 1.034988244326e-01 7.258471875878e-04 1.000000000000e-03 +1.275981790990e+00 1.006945781093e+00 4.109412087111e-01 1.625444350631e+00 1.676586417103e+00 1.366368737595e+00 8.473820272143e-03 9.302562374623e-03 1.016670075110e-01 7.318668617668e-04 1.000000000000e-03 +1.384167599360e+00 9.867891560009e-01 4.033870156764e-01 1.699903756546e+00 1.747110147053e+00 1.253876226643e+00 5.522066530897e-03 6.605994770728e-03 8.567376605296e-02 7.975268840347e-04 1.000000000000e-03 +7.132361086692e-02 1.538366654571e+00 5.008674515399e-01 1.540019162661e+00 1.619421879986e+00 3.841847372485e-01 2.789633782864e-03 1.089176708129e-02 1.100089242910e-01 2.602914439449e-03 1.000000000000e-03 +2.130225360422e-01 1.523793356160e+00 4.980818900474e-01 1.538611319710e+00 1.617223040379e+00 4.013682570940e-01 2.911069828668e-03 1.087929766698e-02 1.099459345263e-01 2.491477545435e-03 1.000000000000e-03 +3.515543281331e-01 1.495443610372e+00 4.926385370326e-01 1.536210284249e+00 1.613268348912e+00 4.398491264323e-01 3.165912833219e-03 1.079658674861e-02 1.095271998111e-01 2.273506845657e-03 1.000000000000e-03 +4.847951751987e-01 1.455090245089e+00 4.847951751987e-01 1.533725524091e+00 1.608521167142e+00 5.021291380294e-01 3.573917405362e-03 1.067628962757e-02 1.089153066866e-01 1.991519559937e-03 1.000000000000e-03 +6.112806939623e-01 1.405414206452e+00 4.748956421031e-01 1.532596874102e+00 1.604487160870e+00 5.933762475224e-01 4.168663451750e-03 1.053799373287e-02 1.082075871897e-01 1.685271367325e-03 1.000000000000e-03 +7.300280921211e-01 1.349549207628e+00 4.633068332181e-01 1.534348095804e+00 1.602771755679e+00 7.195787748576e-01 4.963529335300e-03 1.034673931902e-02 1.072211593909e-01 1.389701913036e-03 1.000000000000e-03 +8.405917670280e-01 1.290815278279e+00 4.504065298032e-01 1.540389107152e+00 1.604887735489e+00 8.874156489450e-01 5.983220743756e-03 1.011344698091e-02 1.060054871793e-01 1.126867664762e-03 1.000000000000e-03 +9.431582898824e-01 1.232546706303e+00 4.365971604806e-01 1.552004814101e+00 1.612245646150e+00 1.107525806278e+00 7.301247988693e-03 9.888593043121e-03 1.048204445872e-01 9.029134981157e-04 1.000000000000e-03 +1.038703247058e+00 1.177848750951e+00 4.224156346172e-01 1.570424183323e+00 1.626243242548e+00 1.377700454173e+00 8.854761863461e-03 9.640805993029e-03 1.034988244326e-01 7.258471875878e-04 1.000000000000e-03 +1.129543891040e+00 1.129543891040e+00 4.087066196306e-01 1.597416290005e+00 1.648872312977e+00 1.624967965295e+00 1.003146883962e-02 9.259999938952e-03 1.014341600303e-01 6.153967471097e-04 1.000000000000e-03 +1.220532347930e+00 1.090014880287e+00 3.965450756751e-01 1.636408155563e+00 1.683769476096e+00 1.751940775812e+00 1.035997289584e-02 8.870139652152e-03 9.927593225255e-02 5.707955507436e-04 1.000000000000e-03 +1.323151328814e+00 1.061468186084e+00 3.871752586343e-01 1.696303082887e+00 1.739927823190e+00 1.460556720018e+00 5.836493212310e-03 5.994111490828e-03 8.160958202747e-02 6.846704316884e-04 1.000000000000e-03 +7.155850358378e-02 1.692728296636e+00 5.026549077567e-01 1.694240155842e+00 1.767232769603e+00 3.055242546353e-01 1.852190812833e-03 9.093504614113e-03 1.005181277963e-01 3.273062563211e-03 1.000000000000e-03 +2.133852440128e-01 1.674814854749e+00 4.989802018336e-01 1.688353653726e+00 1.760545171778e+00 3.200447976029e-01 1.955545957297e-03 9.165338596083e-03 1.009143674172e-01 3.124562584644e-03 1.000000000000e-03 +3.510308821177e-01 1.640505363151e+00 4.919167844354e-01 1.677641358196e+00 1.748274191750e+00 3.526578338866e-01 2.156942931427e-03 9.174372681543e-03 1.009640897742e-01 2.835609772167e-03 1.000000000000e-03 +4.819563289130e-01 1.592444840026e+00 4.819563289130e-01 1.663779574194e+00 1.732179082683e+00 4.062801890039e-01 2.481826823193e-03 9.162987355885e-03 1.009014224979e-01 2.461355554776e-03 1.000000000000e-03 +6.046598150465e-01 1.534247348602e+00 4.697659619661e-01 1.649099274945e+00 1.714703612187e+00 4.881216931900e-01 2.978233586532e-03 9.152124238942e-03 1.008415932647e-01 2.048669448524e-03 1.000000000000e-03 +7.183707844328e-01 1.469878075327e+00 4.560153958703e-01 1.636031216161e+00 1.698395767048e+00 6.093382556013e-01 3.722223875666e-03 9.162949744538e-03 1.009012154124e-01 1.641124598378e-03 1.000000000000e-03 +8.229410200483e-01 1.403204210522e+00 4.412805355858e-01 1.626718776835e+00 1.685509563898e+00 7.859568510859e-01 4.832671658811e-03 9.223162159857e-03 1.012321982148e-01 1.272334478182e-03 1.000000000000e-03 +9.187365206375e-01 1.337640979816e+00 4.260618971927e-01 1.622763132819e+00 1.677763071913e+00 1.036377402053e+00 6.455032921571e-03 9.342686711592e-03 1.018860295275e-01 9.648994642482e-04 1.000000000000e-03 +1.006945781093e+00 1.275981790990e+00 4.109412087111e-01 1.625444350631e+00 1.676586417103e+00 1.366368737595e+00 8.473820272142e-03 9.302562374623e-03 1.016670075110e-01 7.318668617668e-04 1.000000000000e-03 +1.090014880287e+00 1.220532347930e+00 3.965450756751e-01 1.636408155563e+00 1.683769476096e+00 1.751940775812e+00 1.035997289584e-02 8.870139652152e-03 9.927593225255e-02 5.707955507436e-04 1.000000000000e-03 +1.172850167435e+00 1.172850167435e+00 3.833356990626e-01 1.658660613418e+00 1.702381064474e+00 1.994361002634e+00 1.099126999138e-02 8.266760614199e-03 9.583991637795e-02 5.014137353664e-04 1.000000000000e-03 +1.271371561724e+00 1.137731754167e+00 3.730423835197e-01 1.706112303572e+00 1.746419139927e+00 1.331142874546e+00 4.288473731024e-03 4.832471945381e-03 7.327628042310e-02 7.512341606014e-04 1.000000000000e-03 +7.471699314202e-02 1.869234895754e+00 5.249532750583e-01 1.870727592293e+00 1.942986789858e+00 2.500690217252e-01 9.321372444974e-04 5.591279787877e-03 7.881962381058e-02 3.998895957209e-03 1.000000000000e-03 +2.221688388485e-01 1.846995892054e+00 5.194536114879e-01 1.860309871559e+00 1.931472203452e+00 2.635761333013e-01 1.007440528311e-03 5.733299041679e-03 7.981436129252e-02 3.793970218300e-03 1.000000000000e-03 +3.633401548096e-01 1.805055564456e+00 5.090888282599e-01 1.841260888324e+00 1.910343710941e+00 2.947228394796e-01 1.137940629498e-03 5.791580141058e-03 8.021900676037e-02 3.393018341455e-03 1.000000000000e-03 +4.948473758346e-01 1.747305947663e+00 4.948473758346e-01 1.816026431556e+00 1.882239603632e+00 3.453462802030e-01 1.359077217976e-03 5.903106371278e-03 8.098769708541e-02 2.895644335338e-03 1.000000000000e-03 +6.150513519900e-01 1.678393464991e+00 4.778841505316e-01 1.787538192294e+00 1.850315121875e+00 4.243004317546e-01 1.708131520275e-03 6.038639342922e-03 8.191214360468e-02 2.356820604365e-03 1.000000000000e-03 +7.233657887623e-01 1.603129480414e+00 4.592770182242e-01 1.758772923184e+00 1.817750691045e+00 5.468027163270e-01 2.264859207591e-03 6.213006464574e-03 8.308634374067e-02 1.828813153521e-03 1.000000000000e-03 +8.203186901819e-01 1.526387798595e+00 4.400644077378e-01 1.732853849914e+00 1.787858816607e+00 7.298602155055e-01 3.148385439480e-03 6.470524161875e-03 8.479075003190e-02 1.370125372990e-03 1.000000000000e-03 +9.074057842127e-01 1.452459295838e+00 4.211871957204e-01 1.712607153812e+00 1.763638828425e+00 9.759409679073e-01 4.362858745987e-03 6.705618817308e-03 8.631736543006e-02 1.024652138689e-03 1.000000000000e-03 +9.867891560009e-01 1.384167599360e+00 4.033870156764e-01 1.699903756546e+00 1.747110147053e+00 1.253876226643e+00 5.522066530897e-03 6.605994770728e-03 8.567376605296e-02 7.975268840347e-04 1.000000000000e-03 +1.061468186084e+00 1.323151328814e+00 3.871752586343e-01 1.696303082887e+00 1.739927823190e+00 1.460556720018e+00 5.836493212310e-03 5.994111490828e-03 8.160958202747e-02 6.846704316884e-04 1.000000000000e-03 +1.137731754167e+00 1.271371561724e+00 3.730423835197e-01 1.706112303572e+00 1.746419139927e+00 1.331142874546e+00 4.288473731024e-03 4.832471945381e-03 7.327628042310e-02 7.512341606014e-04 1.000000000000e-03 +1.235157010016e+00 1.235157010016e+00 3.628431698567e-01 1.746775795224e+00 1.784063015898e+00 7.951704879480e-01 1.085962057084e-03 2.048545702229e-03 4.770913844712e-02 1.257591944314e-03 1.000000000000e-03 +1.108277236740e-01 1.108277236740e-01 1.036173938274e+00 1.567340699067e-01 1.047960876669e+00 1.834262349479e-01 6.010302317250e-03 4.915029454995e-02 2.336909035218e-01 5.451782839484e-03 1.000000000000e-03 +3.280604173676e-01 1.095326905508e-01 1.025312105686e+00 3.458627585369e-01 1.082074841131e+00 1.959444314987e-01 6.275168835073e-03 4.803787063820e-02 2.310311923101e-01 5.103487720225e-03 1.000000000000e-03 +5.343626829548e-01 1.074041010624e-01 9.997096850009e-01 5.450496471512e-01 1.138638912098e+00 2.217192095743e-01 6.699233126961e-03 4.532241346942e-02 2.244064107557e-01 4.510209115033e-03 1.000000000000e-03 +7.218696482267e-01 1.034447846809e-01 9.511875981895e-01 7.292438635386e-01 1.198563498300e+00 2.593849352984e-01 7.343773035566e-03 4.246838599426e-02 2.172259090191e-01 3.855274011382e-03 1.000000000000e-03 +8.837576464019e-01 9.726920858626e-02 8.837576464019e-01 8.890944137226e-01 1.253601393620e+00 3.086146528485e-01 7.708403695524e-03 3.746615864335e-02 2.040320199363e-01 3.240286845650e-03 1.000000000000e-03 +1.019519860458e+00 8.989120231782e-02 8.120246258461e-01 1.023475048119e+00 1.306478154085e+00 4.009455493668e-01 7.711885812937e-03 2.885137081001e-02 1.790449068748e-01 2.494104253257e-03 1.000000000000e-03 +1.135770118338e+00 8.272386986111e-02 7.467867542766e-01 1.138778731955e+00 1.361803016856e+00 4.772442581691e-01 7.142477499569e-03 2.244912550746e-02 1.579350271031e-01 2.095363082704e-03 1.000000000000e-03 +1.244585980340e+00 7.678903568998e-02 6.934545992361e-01 1.246952612757e+00 1.426804156030e+00 5.238804842355e-01 6.184764171381e-03 1.770851661063e-02 1.402716278061e-01 1.908832319759e-03 1.000000000000e-03 +1.356376023363e+00 7.239380936358e-02 6.539305042512e-01 1.358306585564e+00 1.507521769255e+00 5.179308238571e-01 4.756707817399e-03 1.377609016000e-02 1.237205190922e-01 1.930759773193e-03 1.000000000000e-03 +1.479854120888e+00 6.975004021718e-02 6.302645794163e-01 1.481496975097e+00 1.609989666826e+00 4.619491343509e-01 3.293034338890e-03 1.069284720119e-02 1.089997308926e-01 2.164740499850e-03 1.000000000000e-03 +1.622727110525e+00 6.953194517343e-02 6.283698932303e-01 1.624216108353e+00 1.741529985200e+00 3.695145391020e-01 2.231197325279e-03 9.057278222534e-03 1.003177076566e-01 2.706253460094e-03 1.000000000000e-03 +1.785319266774e+00 7.180960540782e-02 6.489878283701e-01 1.786762856046e+00 1.900975198449e+00 3.067157283121e-01 1.167474353630e-03 5.709558945940e-03 7.964894465326e-02 3.260347962927e-03 1.000000000000e-03 +1.095326905508e-01 3.280604173676e-01 1.025312105686e+00 3.458627585369e-01 1.082074841131e+00 1.959444314987e-01 6.275168835073e-03 4.803787063820e-02 2.310311923101e-01 5.103487720225e-03 1.000000000000e-03 +3.245731340256e-01 3.245731340256e-01 1.012814002178e+00 4.590157281209e-01 1.111974658736e+00 2.084479861261e-01 6.508630077983e-03 4.683636094747e-02 2.281236529884e-01 4.797359852617e-03 1.000000000000e-03 +5.280728725484e-01 3.177179866690e-01 9.845974350752e-01 6.162837640036e-01 1.161566953271e+00 2.361039380684e-01 6.973456928627e-03 4.430330759629e-02 2.218690995367e-01 4.235422789561e-03 1.000000000000e-03 +7.127750758195e-01 3.058672854687e-01 9.366457393342e-01 7.756307788049e-01 1.216103756282e+00 2.743739760280e-01 7.475667493102e-03 4.086940533496e-02 2.130972791290e-01 3.644660526762e-03 1.000000000000e-03 +8.729251167043e-01 2.881438548229e-01 8.729251167043e-01 9.192524900404e-01 1.267684266613e+00 3.336532408813e-01 7.967630736331e-03 3.581996108573e-02 1.994992650661e-01 2.997123592622e-03 1.000000000000e-03 +1.008150116816e+00 2.669754436934e-01 8.045266494517e-01 1.042901023861e+00 1.317158181559e+00 4.187542424717e-01 7.877570904901e-03 2.821787855236e-02 1.770683438436e-01 2.388035507646e-03 1.000000000000e-03 +1.124985614616e+00 2.464476179506e-01 7.416645060217e-01 1.151663606044e+00 1.369815790892e+00 4.972302850621e-01 7.374194286146e-03 2.224581197390e-02 1.572182205086e-01 2.011140572170e-03 1.000000000000e-03 +1.233924564050e+00 2.292348071855e-01 6.896983607286e-01 1.255037221198e+00 1.432062238656e+00 5.444700215859e-01 6.388065834227e-03 1.759894644600e-02 1.398369941753e-01 1.836648411031e-03 1.000000000000e-03 +1.344987562612e+00 2.162900742030e-01 6.507396204496e-01 1.362267572755e+00 1.509713546804e+00 5.385667175713e-01 4.933741081869e-03 1.374130888774e-02 1.235642382989e-01 1.856780167385e-03 1.000000000000e-03 +1.466836612338e+00 2.083703770526e-01 6.270158773188e-01 1.481562641716e+00 1.608781144761e+00 4.812943975971e-01 3.435239682368e-03 1.070625286577e-02 1.090680361862e-01 2.077730397429e-03 1.000000000000e-03 +1.606972277217e+00 2.074300686996e-01 6.242060412632e-01 1.620304642080e+00 1.736381385265e+00 3.868122113671e-01 2.353506056874e-03 9.126545082002e-03 1.007005742122e-01 2.585233792040e-03 1.000000000000e-03 +1.765900051482e+00 2.136660155356e-01 6.428412066421e-01 1.778779401168e+00 1.891375418836e+00 3.235982960808e-01 1.261659524891e-03 5.848267157944e-03 8.061063589836e-02 3.090251129599e-03 1.000000000000e-03 +1.074041010624e-01 5.343626829548e-01 9.997096850009e-01 5.450496471512e-01 1.138638912098e+00 2.217192095743e-01 6.699233126961e-03 4.532241346942e-02 2.244064107557e-01 4.510209115033e-03 1.000000000000e-03 +3.177179866690e-01 5.280728725484e-01 9.845974350752e-01 6.162837640036e-01 1.161566953271e+00 2.361039380684e-01 6.973456928627e-03 4.430330759629e-02 2.218690995367e-01 4.235422789561e-03 1.000000000000e-03 +5.156550295351e-01 5.156550295351e-01 9.541515272332e-01 7.292463362744e-01 1.200918546735e+00 2.643962268102e-01 7.368636689227e-03 4.180451123372e-02 2.155213607194e-01 3.782202235124e-03 1.000000000000e-03 +6.950344331284e-01 4.960061384200e-01 9.086475631292e-01 8.538705713306e-01 1.246890270459e+00 3.105855359957e-01 7.844500981299e-03 3.788570331914e-02 2.051712112119e-01 3.219724952079e-03 1.000000000000e-03 +8.516339499407e-01 4.686680724909e-01 8.516339499407e-01 9.720751755209e-01 1.292366252869e+00 3.806667280330e-01 8.265888990039e-03 3.257136117235e-02 1.902377494153e-01 2.626969804184e-03 1.000000000000e-03 +9.860948956526e-01 4.365936071392e-01 7.899276016480e-01 1.078423442358e+00 1.336780736274e+00 4.588711307163e-01 8.215568075145e-03 2.685580174434e-02 1.727419454444e-01 2.179261088923e-03 1.000000000000e-03 +1.103819871954e+00 4.051612452984e-01 7.316471788914e-01 1.175829045572e+00 1.384876001233e+00 5.386886562551e-01 7.768765133756e-03 2.163243566636e-02 1.550356076174e-01 1.856359862767e-03 1.000000000000e-03 +1.212910345700e+00 3.781383534598e-01 6.822745565445e-01 1.270488142827e+00 1.442095243585e+00 5.890264760672e-01 6.778797676044e-03 1.726271556069e-02 1.384947474363e-01 1.697716555420e-03 1.000000000000e-03 +1.322623506139e+00 3.572657420984e-01 6.444248431329e-01 1.370026185688e+00 1.514019526927e+00 5.844019064159e-01 5.287744309360e-03 1.357219471217e-02 1.228015323473e-01 1.711151159880e-03 1.000000000000e-03 +1.441501261589e+00 3.440761316809e-01 6.206081682477e-01 1.481996717795e+00 1.606694983515e+00 5.243665719285e-01 3.720286492040e-03 1.064223014358e-02 1.087414371780e-01 1.907062832633e-03 1.000000000000e-03 +1.576726065953e+00 3.416015236061e-01 6.161389458699e-01 1.613306135854e+00 1.726957986925e+00 4.251364271649e-01 2.591329505612e-03 9.142933914976e-03 1.007909493014e-01 2.352186112747e-03 1.000000000000e-03 +1.729163669784e+00 3.500235143508e-01 6.311907282125e-01 1.764234524517e+00 1.873746298964e+00 3.617548569438e-01 1.427903806970e-03 5.920737950973e-03 8.110855517948e-02 2.764302899617e-03 1.000000000000e-03 +1.034447846809e-01 7.218696482267e-01 9.511875981895e-01 7.292438635386e-01 1.198563498300e+00 2.593849352984e-01 7.343773035566e-03 4.246838599426e-02 2.172259090191e-01 3.855274011382e-03 1.000000000000e-03 +3.058672854687e-01 7.127750758195e-01 9.366457393342e-01 7.756307788049e-01 1.216103756282e+00 2.743739760280e-01 7.475667493102e-03 4.086940533496e-02 2.130972791290e-01 3.644660526762e-03 1.000000000000e-03 +4.960061384200e-01 6.950344331284e-01 9.086475631292e-01 8.538705713306e-01 1.246890270459e+00 3.105855359957e-01 7.844500981299e-03 3.788570331914e-02 2.051712112119e-01 3.219724952079e-03 1.000000000000e-03 +6.685072924725e-01 6.685072924725e-01 8.690437941069e-01 9.454120795600e-01 1.284149958632e+00 3.688150002599e-01 8.318365571842e-03 3.383145574060e-02 1.938827129438e-01 2.711386465559e-03 1.000000000000e-03 +8.209894636906e-01 6.342326303024e-01 8.209894636906e-01 1.037436614368e+00 1.322988446027e+00 4.437111596629e-01 8.573326530910e-03 2.898279548825e-02 1.794522390444e-01 2.253718389143e-03 1.000000000000e-03 +9.546078168356e-01 5.951774714261e-01 7.683963048749e-01 1.124949912866e+00 1.362330792356e+00 5.224877596901e-01 8.685195075921e-03 2.493415849896e-02 1.664470503025e-01 1.913920434410e-03 1.000000000000e-03 +1.073121613548e+00 5.560938351535e-01 7.167595143331e-01 1.208648150191e+00 1.405195556621e+00 6.022614894245e-01 8.306096169591e-03 2.068726703129e-02 1.516108579785e-01 1.660408340164e-03 1.000000000000e-03 +1.182377717789e+00 5.212368848228e-01 6.712488482019e-01 1.292170637967e+00 1.456118118092e+00 6.581659673552e-01 7.359978055620e-03 1.677383461164e-02 1.365195737356e-01 1.519373607266e-03 1.000000000000e-03 +1.290379558926e+00 4.933351493422e-01 6.350962438914e-01 1.381469860573e+00 1.520462500253e+00 6.573300340945e-01 5.838046612278e-03 1.332218134606e-02 1.216652116171e-01 1.521305810068e-03 1.000000000000e-03 +1.405414206452e+00 4.748956421031e-01 6.112806939623e-01 1.483480691679e+00 1.604487160870e+00 5.933762475224e-01 4.168663451750e-03 1.053799373287e-02 1.082075871897e-01 1.685271367325e-03 1.000000000000e-03 +1.534247348602e+00 4.697659619661e-01 6.046598150465e-01 1.604554450841e+00 1.714703612187e+00 4.881216931900e-01 2.978233586532e-03 9.152124238942e-03 1.008415932647e-01 2.048669448524e-03 1.000000000000e-03 +1.678393464991e+00 4.778841505316e-01 6.150513519900e-01 1.745101110152e+00 1.850315121875e+00 4.243004317546e-01 1.708131520275e-03 6.038639342922e-03 8.191214360468e-02 2.356820604365e-03 1.000000000000e-03 +9.726920858626e-02 8.837576464019e-01 8.837576464019e-01 8.890944137226e-01 1.253601393620e+00 3.086146528485e-01 7.708403695524e-03 3.746615864335e-02 2.040320199363e-01 3.240286845650e-03 1.000000000000e-03 +2.881438548229e-01 8.729251167043e-01 8.729251167043e-01 9.192524900404e-01 1.267684266613e+00 3.336532408813e-01 7.967630736331e-03 3.581996108573e-02 1.994992650661e-01 2.997123592622e-03 1.000000000000e-03 +4.686680724909e-01 8.516339499407e-01 8.516339499407e-01 9.720751755209e-01 1.292366252869e+00 3.806667280330e-01 8.265888990039e-03 3.257136117235e-02 1.902377494153e-01 2.626969804184e-03 1.000000000000e-03 +6.342326303024e-01 8.209894636906e-01 8.209894636906e-01 1.037436614368e+00 1.322988446027e+00 4.437111596629e-01 8.573326530910e-03 2.898279548825e-02 1.794522390444e-01 2.253718389143e-03 1.000000000000e-03 +7.831206558828e-01 7.831206558828e-01 7.831206558828e-01 1.107499852524e+00 1.356404764446e+00 5.193451261751e-01 8.958821638478e-03 2.587534142601e-02 1.695593682526e-01 1.925501847615e-03 1.000000000000e-03 +9.158065362147e-01 7.405872273152e-01 7.405872273152e-01 1.177782260452e+00 1.391272976198e+00 6.061540632701e-01 9.136292216585e-03 2.260883685402e-02 1.584958353958e-01 1.649745601976e-03 1.000000000000e-03 +1.034651272327e+00 6.970773854563e-01 6.970773854563e-01 1.247565684300e+00 1.429103571459e+00 6.894019035977e-01 8.910789323409e-03 1.938808685523e-02 1.467730177111e-01 1.450532693312e-03 1.000000000000e-03 +1.143960730195e+00 6.567064736063e-01 6.567064736063e-01 1.319056308390e+00 1.473490053302e+00 7.537006390600e-01 8.085461841730e-03 1.609152511496e-02 1.337141441657e-01 1.326786721645e-03 1.000000000000e-03 +1.250168256490e+00 6.229630474472e-01 6.229630474472e-01 1.396783314627e+00 1.529407266396e+00 7.608854929122e-01 6.592289235991e-03 1.299595529958e-02 1.201663444267e-01 1.314258202207e-03 1.000000000000e-03 +1.360975029666e+00 5.994235655816e-01 5.994235655816e-01 1.487132019139e+00 1.603393355768e+00 6.928303617582e-01 4.801198235368e-03 1.039474848472e-02 1.074696261209e-01 1.443354759255e-03 1.000000000000e-03 +1.482674688175e+00 5.904794865893e-01 5.904794865893e-01 1.595929276327e+00 1.701662798300e+00 5.837704181984e-01 3.570984584511e-03 9.175656576257e-03 1.009711541660e-01 1.713002181724e-03 1.000000000000e-03 +1.617649690695e+00 5.956712005356e-01 5.956712005356e-01 1.723837202567e+00 1.823852757242e+00 5.213125906322e-01 2.155211756503e-03 6.201303580321e-03 8.300805570225e-02 1.918234890102e-03 1.000000000000e-03 +8.989120231782e-02 1.019519860458e+00 8.120246258461e-01 1.023475048119e+00 1.306478154085e+00 4.009455493668e-01 7.711885812937e-03 2.885137081001e-02 1.790449068748e-01 2.494104253257e-03 1.000000000000e-03 +2.669754436934e-01 1.008150116816e+00 8.045266494517e-01 1.042901023861e+00 1.317158181559e+00 4.187542424717e-01 7.877570904902e-03 2.821787855236e-02 1.770683438436e-01 2.388035507646e-03 1.000000000000e-03 +4.365936071392e-01 9.860948956526e-01 7.899276016480e-01 1.078423442358e+00 1.336780736274e+00 4.588711307163e-01 8.215568075145e-03 2.685580174434e-02 1.727419454444e-01 2.179261088923e-03 1.000000000000e-03 +5.951774714261e-01 9.546078168356e-01 7.683963048749e-01 1.124949912866e+00 1.362330792356e+00 5.224877596901e-01 8.685195075921e-03 2.493415849896e-02 1.664470503025e-01 1.913920434410e-03 1.000000000000e-03 +7.405872273152e-01 9.158065362147e-01 7.405872273152e-01 1.177782260452e+00 1.391272976198e+00 6.061540632701e-01 9.136292216585e-03 2.260883685402e-02 1.584958353958e-01 1.649745601976e-03 1.000000000000e-03 +8.721452398395e-01 8.721452398395e-01 7.079975636705e-01 1.233399626540e+00 1.422158637042e+00 7.025151796157e-01 9.443428426319e-03 2.016346842103e-02 1.496791695633e-01 1.423456786438e-03 1.000000000000e-03 +9.908776946171e-01 8.267036106271e-01 6.730598542171e-01 1.290456301280e+00 1.455433623657e+00 7.984414739101e-01 9.434057334768e-03 1.772338545097e-02 1.403305045280e-01 1.252439950423e-03 1.000000000000e-03 +1.099925008405e+00 7.830856691585e-01 6.387509447545e-01 1.350206720971e+00 1.493673645339e+00 8.748039759151e-01 8.850455777216e-03 1.517560965808e-02 1.298529495582e-01 1.143113231686e-03 1.000000000000e-03 +1.204397596594e+00 7.449586701205e-01 6.082717093348e-01 1.416169831224e+00 1.541275920543e+00 8.971738501315e-01 7.511230078343e-03 1.255815148409e-02 1.181249408423e-01 1.114611175809e-03 1.000000000000e-03 +1.310995998895e+00 7.166804475103e-01 5.854613415948e-01 1.494102196291e+00 1.604713792383e+00 8.292209325307e-01 5.648198433361e-03 1.021717773596e-02 1.065477344040e-01 1.205951225746e-03 1.000000000000e-03 +1.425485468111e+00 7.029097008226e-01 5.743229015866e-01 1.589368071689e+00 1.689951970499e+00 7.243023106277e-01 4.460797282004e-03 9.238125883110e-03 1.013142848495e-01 1.380638975366e-03 1.000000000000e-03 +1.551298905478e+00 7.028060921514e-01 5.743060497944e-01 1.703075070954e+00 1.797301348170e+00 6.668346943914e-01 2.860701269265e-03 6.434955979327e-03 8.455738340406e-02 1.499622032883e-03 1.000000000000e-03 +8.272386986111e-02 1.135770118338e+00 7.467867542766e-01 1.138778731955e+00 1.361803016856e+00 4.772442581691e-01 7.142477499569e-03 2.244912550746e-02 1.579350271031e-01 2.095363082704e-03 1.000000000000e-03 +2.464476179506e-01 1.124985614616e+00 7.416645060217e-01 1.151663606044e+00 1.369815790892e+00 4.972302850621e-01 7.374194286146e-03 2.224581197390e-02 1.572182205086e-01 2.011140572170e-03 1.000000000000e-03 +4.051612452984e-01 1.103819871954e+00 7.316471788914e-01 1.175829045572e+00 1.384876001233e+00 5.386886562551e-01 7.768765133756e-03 2.163243566636e-02 1.550356076174e-01 1.856359862767e-03 1.000000000000e-03 +5.560938351535e-01 1.073121613548e+00 7.167595143331e-01 1.208648150191e+00 1.405195556621e+00 6.022614894245e-01 8.306096169591e-03 2.068726703129e-02 1.516108579785e-01 1.660408340164e-03 1.000000000000e-03 +6.970773854563e-01 1.034651272327e+00 6.970773854563e-01 1.247565684300e+00 1.429103571459e+00 6.894019035977e-01 8.910789323409e-03 1.938808685523e-02 1.467730177111e-01 1.450532693312e-03 1.000000000000e-03 +8.267036106271e-01 9.908776946171e-01 6.730598542171e-01 1.290456301280e+00 1.455433623657e+00 7.984414739101e-01 9.434057334768e-03 1.772338545097e-02 1.403305045280e-01 1.252439950423e-03 1.000000000000e-03 +9.447995901570e-01 9.447995901570e-01 6.459797522229e-01 1.336148394125e+00 1.484109959337e+00 9.164944910283e-01 9.716698181948e-03 1.590303860590e-02 1.329287135853e-01 1.091114032642e-03 1.000000000000e-03 +1.053203146443e+00 8.996155885726e-01 6.178877525311e-01 1.385115545679e+00 1.516683997941e+00 1.013209020788e+00 9.457828429045e-03 1.400179267308e-02 1.247298978374e-01 9.869631828016e-04 1.000000000000e-03 +1.155879521794e+00 8.585962680211e-01 5.913496497440e-01 1.439876737906e+00 1.556579400035e+00 1.060336523705e+00 8.465168463376e-03 1.197521014432e-02 1.153507219277e-01 9.430968165712e-04 1.000000000000e-03 +1.258398420208e+00 8.261099109503e-01 5.698130105336e-01 1.505331913218e+00 1.609568586897e+00 1.013058765502e+00 6.782837894410e-03 1.004310627189e-02 1.056362010334e-01 9.871095676311e-04 1.000000000000e-03 +1.366017705788e+00 8.067348567609e-01 5.568258523935e-01 1.586450598550e+00 1.681332962721e+00 9.260192904560e-01 5.779637366267e-03 9.362068521415e-03 1.019916582723e-01 1.079891110592e-03 1.000000000000e-03 +1.483645056167e+00 7.997222988291e-01 5.521820047680e-01 1.685454955771e+00 1.773601808276e+00 8.691015335352e-01 3.894431745073e-03 6.721478897693e-03 8.641938374188e-02 1.150613549066e-03 1.000000000000e-03 +7.678903568998e-02 1.244585980340e+00 6.934545992361e-01 1.246952612757e+00 1.426804156030e+00 5.238804842355e-01 6.184764171381e-03 1.770851661063e-02 1.402716278061e-01 1.908832319759e-03 1.000000000000e-03 +2.292348071855e-01 1.233924564050e+00 6.896983607286e-01 1.255037221198e+00 1.432062238656e+00 5.444700215859e-01 6.388065834227e-03 1.759894644600e-02 1.398369941753e-01 1.836648411031e-03 1.000000000000e-03 +3.781383534598e-01 1.212910345700e+00 6.822745565445e-01 1.270488142827e+00 1.442095243585e+00 5.890264760672e-01 6.778797676044e-03 1.726271556069e-02 1.384947474363e-01 1.697716555420e-03 1.000000000000e-03 +5.212368848228e-01 1.182377717789e+00 6.712488482019e-01 1.292170637967e+00 1.456118118092e+00 6.581659673552e-01 7.359978055620e-03 1.677383461164e-02 1.365195737356e-01 1.519373607266e-03 1.000000000000e-03 +6.567064736063e-01 1.143960730195e+00 6.567064736063e-01 1.319056308390e+00 1.473490053302e+00 7.537006390600e-01 8.085461841730e-03 1.609152511496e-02 1.337141441657e-01 1.326786721645e-03 1.000000000000e-03 +7.830856691585e-01 1.099925008405e+00 6.387509447545e-01 1.350206720971e+00 1.493673645339e+00 8.748039759151e-01 8.850455777216e-03 1.517560965808e-02 1.298529495582e-01 1.143113231686e-03 1.000000000000e-03 +8.996155885726e-01 1.053203146443e+00 6.178877525311e-01 1.385115545679e+00 1.516683997941e+00 1.013209020788e+00 9.457828429045e-03 1.400179267308e-02 1.247298978374e-01 9.869631828016e-04 1.000000000000e-03 +1.006911774570e+00 1.006911774570e+00 5.952962571982e-01 1.423988287710e+00 1.543411894917e+00 1.147889986788e+00 9.684859966640e-03 1.265564654903e-02 1.185825851418e-01 8.711636232652e-04 1.000000000000e-03 +1.107612449498e+00 9.639221108131e-01 5.727946728954e-01 1.468315760999e+00 1.576085312188e+00 1.235836971653e+00 9.247376119921e-03 1.122402428318e-02 1.116742499076e-01 8.091682179266e-04 1.000000000000e-03 +1.205983782141e+00 9.276844804483e-01 5.529446082486e-01 1.521510886603e+00 1.618870939217e+00 1.257040031465e+00 8.287200943221e-03 9.888946337167e-03 1.048223170532e-01 7.955196135117e-04 1.000000000000e-03 +1.307150433121e+00 9.021973537173e-01 5.386256755352e-01 1.588270228854e+00 1.677116554748e+00 1.202500683800e+00 7.613799585492e-03 9.497457699689e-03 1.027264852773e-01 8.316003587123e-04 1.000000000000e-03 +1.418139600977e+00 8.876523563570e-01 5.303611276441e-01 1.673035156118e+00 1.755086766893e+00 1.117189143742e+00 5.089842583569e-03 6.833904462927e-03 8.713912543186e-02 8.951035781196e-04 1.000000000000e-03 +7.239380936358e-02 1.356376023363e+00 6.539305042512e-01 1.358306585564e+00 1.507521769255e+00 5.179308238571e-01 4.756707817399e-03 1.377609016000e-02 1.237205190922e-01 1.930759773193e-03 1.000000000000e-03 +2.162900742030e-01 1.344987562612e+00 6.507396204496e-01 1.362267572755e+00 1.509713546804e+00 5.385667175713e-01 4.933741081869e-03 1.374130888774e-02 1.235642382989e-01 1.856780167385e-03 1.000000000000e-03 +3.572657420984e-01 1.322623506139e+00 6.444248431329e-01 1.370026185688e+00 1.514019526927e+00 5.844019064159e-01 5.287744309360e-03 1.357219471217e-02 1.228015323473e-01 1.711151159880e-03 1.000000000000e-03 +4.933351493422e-01 1.290379558926e+00 6.350962438914e-01 1.381469860573e+00 1.520462500253e+00 6.573300340945e-01 5.838046612278e-03 1.332218134606e-02 1.216652116171e-01 1.521305810068e-03 1.000000000000e-03 +6.229630474472e-01 1.250168256490e+00 6.229630474472e-01 1.396783314627e+00 1.529407266396e+00 7.608854929122e-01 6.592289235990e-03 1.299595529958e-02 1.201663444267e-01 1.314258202207e-03 1.000000000000e-03 +7.449586701205e-01 1.204397596594e+00 6.082717093348e-01 1.416169831224e+00 1.541275920543e+00 8.971738501315e-01 7.511230078343e-03 1.255815148409e-02 1.181249408423e-01 1.114611175809e-03 1.000000000000e-03 +8.585962680211e-01 1.155879521794e+00 5.913496497440e-01 1.439876737906e+00 1.556579400035e+00 1.060336523705e+00 8.465168463376e-03 1.197521014432e-02 1.153507219277e-01 9.430968165712e-04 1.000000000000e-03 +9.639221108131e-01 1.107612449498e+00 5.727946728954e-01 1.468315760999e+00 1.576085312188e+00 1.235836971653e+00 9.247376119921e-03 1.122402428318e-02 1.116742499076e-01 8.091682179266e-04 1.000000000000e-03 +1.062220707059e+00 1.062220707059e+00 5.536574239752e-01 1.502206930156e+00 1.600987883818e+00 1.408737341041e+00 9.760959682253e-03 1.039330689748e-02 1.074621736937e-01 7.098555357817e-04 1.000000000000e-03 +1.156306063684e+00 1.022155802474e+00 5.355335358284e-01 1.543323102090e+00 1.633597981586e+00 1.543510279290e+00 9.962744647840e-03 9.681903108953e-03 1.037191887794e-01 6.478738842348e-04 1.000000000000e-03 +1.251328482693e+00 9.903793681916e-01 5.204497174913e-01 1.595830274352e+00 1.678553595503e+00 1.554923246001e+00 9.617857616112e-03 9.278134120943e-03 1.015334324849e-01 6.431185607212e-04 1.000000000000e-03 +1.356991453066e+00 9.683771682937e-01 5.096311092160e-01 1.667087323377e+00 1.743245252753e+00 1.371965396800e+00 5.949600532187e-03 6.504829363112e-03 8.501522323229e-02 7.288813568711e-04 1.000000000000e-03 +6.975004021718e-02 1.479854120888e+00 6.302645794163e-01 1.481496975097e+00 1.609989666826e+00 4.619491343509e-01 3.293034338890e-03 1.069284720119e-02 1.089997308926e-01 2.164740499850e-03 1.000000000000e-03 +2.083703770526e-01 1.466836612338e+00 6.270158773188e-01 1.481562641716e+00 1.608781144761e+00 4.812943975971e-01 3.435239682368e-03 1.070625286577e-02 1.090680361862e-01 2.077730397429e-03 1.000000000000e-03 +3.440761316809e-01 1.441501261589e+00 6.206081682477e-01 1.481996717795e+00 1.606694983515e+00 5.243665719285e-01 3.720286492040e-03 1.064223014358e-02 1.087414371780e-01 1.907062832633e-03 1.000000000000e-03 +4.748956421031e-01 1.405414206452e+00 6.112806939623e-01 1.483480691679e+00 1.604487160870e+00 5.933762475224e-01 4.168663451750e-03 1.053799373287e-02 1.082075871897e-01 1.685271367325e-03 1.000000000000e-03 +5.994235655816e-01 1.360975029666e+00 5.994235655816e-01 1.487132019139e+00 1.603393355768e+00 6.928303617582e-01 4.801198235368e-03 1.039474848472e-02 1.074696261209e-01 1.443354759255e-03 1.000000000000e-03 +7.166804475103e-01 1.310995998895e+00 5.854613415948e-01 1.494102196291e+00 1.604713792383e+00 8.292209325307e-01 5.648198433361e-03 1.021717773596e-02 1.065477344040e-01 1.205951225746e-03 1.000000000000e-03 +8.261099109503e-01 1.258398420208e+00 5.698130105336e-01 1.505331913218e+00 1.609568586897e+00 1.013058765502e+00 6.782837894410e-03 1.004310627189e-02 1.056362010334e-01 9.871095676311e-04 1.000000000000e-03 +9.276844804483e-01 1.205983782141e+00 5.529446082486e-01 1.521510886603e+00 1.618870939217e+00 1.257040031465e+00 8.287200943221e-03 9.888946337167e-03 1.048223170532e-01 7.955196135117e-04 1.000000000000e-03 +1.022155802474e+00 1.156306063684e+00 5.355335358284e-01 1.543323102090e+00 1.633597981586e+00 1.543510279290e+00 9.962744647840e-03 9.681903108953e-03 1.037191887794e-01 6.478738842348e-04 1.000000000000e-03 +1.111608269261e+00 1.111608269261e+00 5.185506873350e-01 1.572051490436e+00 1.655367241405e+00 1.795550997312e+00 1.104414605326e-02 9.226259295718e-03 1.012491936633e-01 5.569321069113e-04 1.000000000000e-03 +1.200581386481e+00 1.073427001732e+00 5.029733265701e-01 1.610478560433e+00 1.687193931015e+00 1.950273910227e+00 1.154916491706e-02 8.882725285279e-03 9.934633743335e-02 5.127484886897e-04 1.000000000000e-03 +1.302083856970e+00 1.044736188792e+00 4.906337568632e-01 1.669399914566e+00 1.740005045432e+00 1.497552032017e+00 5.792580146321e-03 5.802048966391e-03 8.029147572294e-02 6.677564309088e-04 1.000000000000e-03 +6.953194517343e-02 1.622727110525e+00 6.283698932303e-01 1.624216108353e+00 1.741529985200e+00 3.695145391020e-01 2.231197325279e-03 9.057278222534e-03 1.003177076566e-01 2.706253460094e-03 1.000000000000e-03 +2.074300686996e-01 1.606972277217e+00 6.242060412632e-01 1.620304642080e+00 1.736381385265e+00 3.868122113671e-01 2.353506056874e-03 9.126545082002e-03 1.007005742122e-01 2.585233792040e-03 1.000000000000e-03 +3.416015236061e-01 1.576726065953e+00 6.161389458699e-01 1.613306135854e+00 1.726957986925e+00 4.251364271649e-01 2.591329505612e-03 9.142933914976e-03 1.007909493014e-01 2.352186112747e-03 1.000000000000e-03 +4.697659619661e-01 1.534247348602e+00 6.046598150465e-01 1.604554450841e+00 1.714703612187e+00 4.881216931900e-01 2.978233586532e-03 9.152124238942e-03 1.008415932647e-01 2.048669448524e-03 1.000000000000e-03 +5.904794865893e-01 1.482674688175e+00 5.904794865893e-01 1.595929276327e+00 1.701662798300e+00 5.837704181984e-01 3.570984584511e-03 9.175656576257e-03 1.009711541660e-01 1.713002181724e-03 1.000000000000e-03 +7.029097008226e-01 1.425485468111e+00 5.743229015866e-01 1.589368071689e+00 1.689951970499e+00 7.243023106277e-01 4.460797282004e-03 9.238125883110e-03 1.013142848495e-01 1.380638975366e-03 1.000000000000e-03 +8.067348567609e-01 1.366017705788e+00 5.568258523935e-01 1.586450598550e+00 1.681332962721e+00 9.260192904560e-01 5.779637366267e-03 9.362068521415e-03 1.019916582723e-01 1.079891110592e-03 1.000000000000e-03 +9.021973537173e-01 1.307150433121e+00 5.386256755352e-01 1.588270228854e+00 1.677116554748e+00 1.202500683800e+00 7.613799585492e-03 9.497457699689e-03 1.027264852773e-01 8.316003587123e-04 1.000000000000e-03 +9.903793681916e-01 1.251328482693e+00 5.204497174913e-01 1.595830274352e+00 1.678553595503e+00 1.554923246001e+00 9.617857616112e-03 9.278134120943e-03 1.015334324849e-01 6.431185607212e-04 1.000000000000e-03 +1.073427001732e+00 1.200581386481e+00 5.029733265701e-01 1.610478560433e+00 1.687193931015e+00 1.950273910227e+00 1.154916491706e-02 8.882725285279e-03 9.934633743335e-02 5.127484886897e-04 1.000000000000e-03 +1.156164794123e+00 1.156164794123e+00 4.867172805775e-01 1.635063932187e+00 1.705968280347e+00 2.081286155557e+00 1.123729531029e-02 8.098810882124e-03 9.486136599225e-02 4.804721336997e-04 1.000000000000e-03 +1.255877507326e+00 1.123481907900e+00 4.741889290055e-01 1.685063770540e+00 1.750512796633e+00 1.259672531774e+00 3.682455359357e-03 4.385015073130e-03 6.980142527302e-02 7.938571134768e-04 1.000000000000e-03 +7.180960540782e-02 1.785319266774e+00 6.489878283701e-01 1.786762856046e+00 1.900975198449e+00 3.067157283121e-01 1.167474353630e-03 5.709558945940e-03 7.964894465326e-02 3.260347962927e-03 1.000000000000e-03 +2.136660155356e-01 1.765900051482e+00 6.428412066421e-01 1.778779401168e+00 1.891375418836e+00 3.235982960808e-01 1.261659524891e-03 5.848267157944e-03 8.061063589836e-02 3.090251129599e-03 1.000000000000e-03 +3.500235143508e-01 1.729163669784e+00 6.311907282125e-01 1.764234524517e+00 1.873746298964e+00 3.617548569438e-01 1.427903806970e-03 5.920737950973e-03 8.110855517948e-02 2.764302899617e-03 1.000000000000e-03 +4.778841505316e-01 1.678393464991e+00 6.150513519900e-01 1.745101110152e+00 1.850315121875e+00 4.243004317546e-01 1.708131520275e-03 6.038639342922e-03 8.191214360468e-02 2.356820604365e-03 1.000000000000e-03 +5.956712005356e-01 1.617649690695e+00 5.956712005356e-01 1.723837202567e+00 1.823852757242e+00 5.213125906322e-01 2.155211756503e-03 6.201303580321e-03 8.300805570225e-02 1.918234890102e-03 1.000000000000e-03 +7.028060921514e-01 1.551298905478e+00 5.743060497944e-01 1.703075070954e+00 1.797301348170e+00 6.668346943914e-01 2.860701269265e-03 6.434955979327e-03 8.455738340406e-02 1.499622032883e-03 1.000000000000e-03 +7.997222988291e-01 1.483645056167e+00 5.521820047680e-01 1.685454955771e+00 1.773601808276e+00 8.691015335352e-01 3.894431745073e-03 6.721478897693e-03 8.641938374188e-02 1.150613549066e-03 1.000000000000e-03 +8.876523563570e-01 1.418139600977e+00 5.303611276441e-01 1.673035156118e+00 1.755086766893e+00 1.117189143742e+00 5.089842583569e-03 6.833904462927e-03 8.713912543186e-02 8.951035781196e-04 1.000000000000e-03 +9.683771682937e-01 1.356991453066e+00 5.096311092160e-01 1.667087323377e+00 1.743245252753e+00 1.371965396800e+00 5.949600532187e-03 6.504829363112e-03 8.501522323229e-02 7.288813568711e-04 1.000000000000e-03 +1.044736188792e+00 1.302083856970e+00 4.906337568632e-01 1.669399914566e+00 1.740005045432e+00 1.497552032017e+00 5.792580146321e-03 5.802048966391e-03 8.029147572294e-02 6.677564309088e-04 1.000000000000e-03 +1.123481907900e+00 1.255877507326e+00 4.741889290055e-01 1.685063770540e+00 1.750512796633e+00 1.259672531774e+00 3.682455359357e-03 4.385015073130e-03 6.980142527302e-02 7.938571134768e-04 1.000000000000e-03 +1.224595790006e+00 1.224595790006e+00 4.627327712952e-01 1.731839974652e+00 1.792593460725e+00 7.408412646326e-01 8.687018586298e-04 1.758882570601e-03 4.420762340745e-02 1.349816820066e-03 1.000000000000e-03 +9.853866655657e-02 9.853866655657e-02 1.145092639744e+00 1.393547186625e-01 1.153541022768e+00 2.431233580559e-01 5.793148379343e-03 3.574203087068e-02 1.992821307445e-01 4.113138317916e-03 1.000000000000e-03 +2.929787569582e-01 9.762301382848e-02 1.134820142550e+00 3.088151629336e-01 1.176088245326e+00 2.579568281447e-01 6.007889282445e-03 3.493543469457e-02 1.970206833321e-01 3.876617677431e-03 1.000000000000e-03 +4.791613139724e-01 9.589773122301e-02 1.111798825902e+00 4.886634216528e-01 1.214449903841e+00 2.906111877200e-01 6.442827042525e-03 3.325488134028e-02 1.922234849228e-01 3.441023753578e-03 1.000000000000e-03 +6.533049437764e-01 9.341710077195e-02 1.073870747774e+00 6.599500771114e-01 1.260449319570e+00 3.378360679704e-01 7.009578163213e-03 3.112269009045e-02 1.859590459407e-01 2.960015506951e-03 1.000000000000e-03 +8.120246258461e-01 8.989120231782e-02 1.019519860458e+00 8.169849577774e-01 1.306478154085e+00 4.009455493668e-01 7.711885812937e-03 2.885137081001e-02 1.790449068748e-01 2.494104253257e-03 1.000000000000e-03 +9.530189719772e-01 8.515921827218e-02 9.530189719772e-01 9.568162067007e-01 1.350460075068e+00 4.680620446679e-01 8.030139344393e-03 2.573421441411e-02 1.690963381367e-01 2.136468896361e-03 1.000000000000e-03 +1.076654825200e+00 7.978553534258e-02 8.855785166779e-01 1.079607032339e+00 1.396352625048e+00 5.715975083103e-01 7.935044307390e-03 2.082333510563e-02 1.521086421156e-01 1.749482783709e-03 1.000000000000e-03 +1.188005778343e+00 7.467368223126e-02 8.265975826541e-01 1.190350321625e+00 1.449205800376e+00 6.328834947113e-01 7.059702545990e-03 1.673223256330e-02 1.363501724047e-01 1.580069646873e-03 1.000000000000e-03 +1.297378946438e+00 7.059037062518e-02 7.807658845044e-01 1.299297937767e+00 1.515839865386e+00 6.339384166198e-01 5.621391028571e-03 1.330111304473e-02 1.215689701122e-01 1.577440290387e-03 1.000000000000e-03 +1.414139863481e+00 6.793637190840e-02 7.511508396989e-01 1.415770780923e+00 1.602696006139e+00 5.729843199905e-01 4.005451507315e-03 1.048576209044e-02 1.079390882264e-01 1.745248456392e-03 1.000000000000e-03 +1.545724628631e+00 6.728284433015e-02 7.438066435460e-01 1.547188291288e+00 1.716694478258e+00 4.649401179479e-01 2.790914531278e-03 9.004109637591e-03 1.000228287142e-01 2.150814613318e-03 1.000000000000e-03 +1.694208277854e+00 6.866633100748e-02 7.590680751711e-01 1.695599231470e+00 1.857751624009e+00 3.950027763486e-01 1.537601642797e-03 5.838952539818e-03 8.054641546489e-02 2.531627775491e-03 1.000000000000e-03 +9.762301382848e-02 2.929787569582e-01 1.134820142550e+00 3.088151629336e-01 1.176088245326e+00 2.579568281447e-01 6.007889282445e-03 3.493543469457e-02 1.970206833321e-01 3.876617677431e-03 1.000000000000e-03 +2.901675643229e-01 2.901675643229e-01 1.123677479395e+00 4.103589048262e-01 1.196263143489e+00 2.732840295168e-01 6.238090750400e-03 3.423960098269e-02 1.950487146635e-01 3.659196630582e-03 1.000000000000e-03 +4.746858661961e-01 2.849674241331e-01 1.099768310693e+00 5.536543184907e-01 1.231269037046e+00 3.062123805644e-01 6.670383902441e-03 3.267528189168e-02 1.905409897333e-01 3.265707278579e-03 1.000000000000e-03 +6.472224466501e-01 2.774580632929e-01 1.061369645916e+00 7.041873843899e-01 1.273728934117e+00 3.551234225588e-01 7.248027121628e-03 3.061482288075e-02 1.844355439374e-01 2.815922399020e-03 1.000000000000e-03 +8.045266494517e-01 2.669754436934e-01 1.008150116816e+00 8.476668078988e-01 1.317158181559e+00 4.187542424717e-01 7.877570904901e-03 2.821787855236e-02 1.770683438436e-01 2.388035507646e-03 1.000000000000e-03 +9.443566036490e-01 2.532143619562e-01 9.443566036490e-01 9.777151466334e-01 1.359314644522e+00 4.954925321743e-01 8.272672767563e-03 2.504378642578e-02 1.668125575668e-01 2.018193888033e-03 1.000000000000e-03 +1.067277622235e+00 2.376755389406e-01 8.795163140958e-01 1.093421778059e+00 1.403253409579e+00 5.921193119027e-01 8.127237315273e-03 2.058851269981e-02 1.512485544460e-01 1.688848817963e-03 1.000000000000e-03 +1.178484326317e+00 2.228932477459e-01 8.222095263211e-01 1.199377633302e+00 1.454144151190e+00 6.548417916230e-01 7.269200899363e-03 1.665104684602e-02 1.360189808896e-01 1.527086408950e-03 1.000000000000e-03 +1.287323269750e+00 2.109139225528e-01 7.771014912182e-01 1.304486827670e+00 1.518411212821e+00 6.571487577045e-01 5.814873957337e-03 1.327296267967e-02 1.214402581962e-01 1.521725466686e-03 1.000000000000e-03 +1.402843597748e+00 2.029890806535e-01 7.475692298135e-01 1.417453606510e+00 1.602508808079e+00 5.949248995141e-01 4.167776904765e-03 1.050832695396e-02 1.080551657152e-01 1.680884428970e-03 1.000000000000e-03 +1.532257007337e+00 2.008062243713e-01 7.393855398180e-01 1.545359076811e+00 1.713133285175e+00 4.863466868039e-01 2.943073671338e-03 9.077085599203e-03 1.004273402305e-01 2.056146422158e-03 1.000000000000e-03 +1.677714268588e+00 2.044561709682e-01 7.526409149637e-01 1.690126472448e+00 1.850134005889e+00 4.173618431045e-01 1.663215123029e-03 5.977601272760e-03 8.149711155591e-02 2.396002453319e-03 1.000000000000e-03 +9.589773122301e-02 4.791613139724e-01 1.111798825902e+00 4.886634216528e-01 1.214449903841e+00 2.906111877200e-01 6.442827042525e-03 3.325488134028e-02 1.922234849228e-01 3.441023753578e-03 1.000000000000e-03 +2.849674241331e-01 4.746858661961e-01 1.099768310693e+00 5.536543184907e-01 1.231269037046e+00 3.062123805644e-01 6.670383902441e-03 3.267528189168e-02 1.905409897333e-01 3.265707278579e-03 1.000000000000e-03 +4.662040606736e-01 4.662040606736e-01 1.074952550061e+00 6.593121054380e-01 1.261037444828e+00 3.396991865340e-01 7.090170151986e-03 3.130786192481e-02 1.865114292739e-01 2.943780967517e-03 1.000000000000e-03 +6.355732188297e-01 4.536793492572e-01 1.036662887703e+00 7.808830056007e-01 1.297862940058e+00 3.903606565955e-01 7.638104217593e-03 2.935018202478e-02 1.805860275903e-01 2.561733574078e-03 1.000000000000e-03 +7.899276016480e-01 4.365936071392e-01 9.860948956526e-01 9.025517124465e-01 1.336780736274e+00 4.588711307163e-01 8.215568075145e-03 2.685580174434e-02 1.727419454444e-01 2.179261088923e-03 1.000000000000e-03 +9.273731755618e-01 4.149069446451e-01 9.273731755618e-01 1.015957075602e+00 1.375568895482e+00 5.469802320605e-01 8.606640568871e-03 2.360224391414e-02 1.619404688772e-01 1.828219634616e-03 1.000000000000e-03 +1.049081648370e+00 3.907636948453e-01 8.675298153430e-01 1.119494783443e+00 1.416289712829e+00 6.365882056865e-01 8.466512126956e-03 1.994973842900e-02 1.488837668526e-01 1.570874218321e-03 1.000000000000e-03 +1.159901534316e+00 3.676708372428e-01 8.134642273388e-01 1.216779936500e+00 1.463652097675e+00 7.021434004773e-01 7.651544257747e-03 1.634611445300e-02 1.347677609528e-01 1.424210495064e-03 1.000000000000e-03 +1.267659888161e+00 3.484732366630e-01 7.698240001369e-01 1.314684444543e+00 1.523490787603e+00 7.079545229466e-01 6.190732165912e-03 1.311680051173e-02 1.207237457620e-01 1.412520109114e-03 1.000000000000e-03 +1.380857569138e+00 3.353726492569e-01 7.404551470496e-01 1.421000506726e+00 1.602347111243e+00 6.432024447667e-01 4.480666227501e-03 1.044927517912e-02 1.077511287856e-01 1.554720458755e-03 1.000000000000e-03 +1.506345751312e+00 3.310522362219e-01 7.307558486012e-01 1.542294753153e+00 1.706656736391e+00 5.330062446019e-01 3.239666903538e-03 9.117154638471e-03 1.006487546894e-01 1.876150626991e-03 1.000000000000e-03 +1.646437631693e+00 3.355174108090e-01 7.404059246714e-01 1.680276408217e+00 1.836172579389e+00 4.666536534155e-01 1.887293718703e-03 6.066470405482e-03 8.210068618933e-02 2.142916899248e-03 1.000000000000e-03 +9.341710077195e-02 6.533049437764e-01 1.073870747774e+00 6.599500771114e-01 1.260449319570e+00 3.378360679704e-01 7.009578163213e-03 3.112269009045e-02 1.859590459407e-01 2.960015506951e-03 1.000000000000e-03 +2.774580632929e-01 6.472224466501e-01 1.061369645916e+00 7.041873843899e-01 1.273728934117e+00 3.551234225588e-01 7.248027121628e-03 3.061482288075e-02 1.844355439374e-01 2.815922399020e-03 1.000000000000e-03 +4.536793492572e-01 6.355732188297e-01 1.036662887703e+00 7.808830056007e-01 1.297862940058e+00 3.903606565955e-01 7.638104217593e-03 2.935018202478e-02 1.805860275903e-01 2.561733574078e-03 1.000000000000e-03 +6.182487182963e-01 6.182487182963e-01 1.000381281656e+00 8.743357223344e-01 1.328617952625e+00 4.446417379295e-01 8.146229168970e-03 2.748132420126e-02 1.747421090295e-01 2.249001644912e-03 1.000000000000e-03 +7.683963048749e-01 5.951774714261e-01 9.546078168356e-01 9.719408952393e-01 1.362330792356e+00 5.224877596901e-01 8.685195075921e-03 2.493415849896e-02 1.664470503025e-01 1.913920434410e-03 1.000000000000e-03 +9.028299725182e-01 5.671187489232e-01 9.028299725182e-01 1.066173360508e+00 1.397078234722e+00 6.176075483188e-01 9.013370339682e-03 2.189101403687e-02 1.559594464271e-01 1.619151195160e-03 1.000000000000e-03 +1.023064652656e+00 5.365179308316e-01 8.497436326000e-01 1.155211138112e+00 1.434077060259e+00 7.056433024920e-01 8.922892918013e-03 1.896757090977e-02 1.451725827718e-01 1.417146590166e-03 1.000000000000e-03 +1.133178119548e+00 5.068716274082e-01 8.003647430270e-01 1.241374841574e+00 1.477022416612e+00 7.752937246721e-01 8.198947007324e-03 1.586291765252e-02 1.327609282069e-01 1.289833734206e-03 1.000000000000e-03 +1.239437352077e+00 4.814189017862e-01 7.590389767492e-01 1.329649994818e+00 1.531048424102e+00 7.873176210909e-01 6.763196445724e-03 1.288526307150e-02 1.196534954288e-01 1.270135423382e-03 1.000000000000e-03 +1.349549207628e+00 4.633068332181e-01 7.300280921211e-01 1.426862391934e+00 1.602771755679e+00 7.195787748576e-01 4.963529335300e-03 1.034673931902e-02 1.072211593909e-01 1.389701913036e-03 1.000000000000e-03 +1.469878075327e+00 4.560153958703e-01 7.183707844328e-01 1.538990447533e+00 1.698395767048e+00 6.093382556013e-01 3.722223875666e-03 9.162949744538e-03 1.009012154124e-01 1.641124598378e-03 1.000000000000e-03 +1.603129480414e+00 4.592770182242e-01 7.233657887623e-01 1.667620913290e+00 1.817750691045e+00 5.468027163270e-01 2.264859207591e-03 6.213006464574e-03 8.308634374067e-02 1.828813153521e-03 1.000000000000e-03 +8.989120231782e-02 8.120246258461e-01 1.019519860458e+00 8.169849577774e-01 1.306478154085e+00 4.009455493668e-01 7.711885812937e-03 2.885137081001e-02 1.790449068748e-01 2.494104253257e-03 1.000000000000e-03 +2.669754436934e-01 8.045266494517e-01 1.008150116816e+00 8.476668078988e-01 1.317158181559e+00 4.187542424717e-01 7.877570904902e-03 2.821787855236e-02 1.770683438436e-01 2.388035507646e-03 1.000000000000e-03 +4.365936071392e-01 7.899276016480e-01 9.860948956526e-01 9.025517124465e-01 1.336780736274e+00 4.588711307163e-01 8.215568075145e-03 2.685580174434e-02 1.727419454444e-01 2.179261088923e-03 1.000000000000e-03 +5.951774714261e-01 7.683963048749e-01 9.546078168356e-01 9.719408952393e-01 1.362330792356e+00 5.224877596901e-01 8.685195075921e-03 2.493415849896e-02 1.664470503025e-01 1.913920434410e-03 1.000000000000e-03 +7.405872273152e-01 7.405872273152e-01 9.158065362147e-01 1.047348500989e+00 1.391272976198e+00 6.061540632701e-01 9.136292216585e-03 2.260883685402e-02 1.584958353958e-01 1.649745601976e-03 1.000000000000e-03 +8.721452398395e-01 7.079975636705e-01 8.721452398395e-01 1.123342276218e+00 1.422158637042e+00 7.025151796157e-01 9.443428426319e-03 2.016346842103e-02 1.496791695633e-01 1.423456786438e-03 1.000000000000e-03 +9.908776946171e-01 6.730598542171e-01 8.267036106271e-01 1.197851482050e+00 1.455433623657e+00 7.984414739101e-01 9.434057334768e-03 1.772338545097e-02 1.403305045280e-01 1.252439950423e-03 1.000000000000e-03 +1.099925008405e+00 6.387509447545e-01 7.830856691585e-01 1.271942527609e+00 1.493673645339e+00 8.748039759151e-01 8.850455777216e-03 1.517560965808e-02 1.298529495582e-01 1.143113231686e-03 1.000000000000e-03 +1.204397596594e+00 6.082717093348e-01 7.449586701205e-01 1.349284270663e+00 1.541275920543e+00 8.971738501314e-01 7.511230078343e-03 1.255815148409e-02 1.181249408423e-01 1.114611175809e-03 1.000000000000e-03 +1.310995998895e+00 5.854613415948e-01 7.166804475103e-01 1.435783929295e+00 1.604713792383e+00 8.292209325307e-01 5.648198433361e-03 1.021717773596e-02 1.065477344040e-01 1.205951225746e-03 1.000000000000e-03 +1.425485468111e+00 5.743229015866e-01 7.029097008226e-01 1.536832982169e+00 1.689951970499e+00 7.243023106277e-01 4.460797282004e-03 9.238125883110e-03 1.013142848495e-01 1.380638975366e-03 1.000000000000e-03 +1.551298905478e+00 5.743060497944e-01 7.028060921514e-01 1.654193378348e+00 1.797301348170e+00 6.668346943914e-01 2.860701269265e-03 6.434955979327e-03 8.455738340406e-02 1.499622032883e-03 1.000000000000e-03 +8.515921827218e-02 9.530189719772e-01 9.530189719772e-01 9.568162067007e-01 1.350460075068e+00 4.680620446679e-01 8.030139344393e-03 2.573421441411e-02 1.690963381367e-01 2.136468896361e-03 1.000000000000e-03 +2.532143619562e-01 9.443566036490e-01 9.443566036490e-01 9.777151466334e-01 1.359314644522e+00 4.954925321743e-01 8.272672767563e-03 2.504378642578e-02 1.668125575668e-01 2.018193888033e-03 1.000000000000e-03 +4.149069446451e-01 9.273731755618e-01 9.273731755618e-01 1.015957075602e+00 1.375568895482e+00 5.469802320605e-01 8.606640568871e-03 2.360224391414e-02 1.619404688772e-01 1.828219634616e-03 1.000000000000e-03 +5.671187489232e-01 9.028299725182e-01 9.028299725182e-01 1.066173360508e+00 1.397078234722e+00 6.176075483188e-01 9.013370339682e-03 2.189101403687e-02 1.559594464271e-01 1.619151195160e-03 1.000000000000e-03 +7.079975636705e-01 8.721452398395e-01 8.721452398395e-01 1.123342276218e+00 1.422158637042e+00 7.025151796157e-01 9.443428426319e-03 2.016346842103e-02 1.496791695633e-01 1.423456786438e-03 1.000000000000e-03 +8.369385978920e-01 8.369385978920e-01 8.369385978920e-01 1.183609916012e+00 1.449620174364e+00 8.001539482845e-01 9.791486982141e-03 1.835550584322e-02 1.428110867281e-01 1.249759502086e-03 1.000000000000e-03 +9.542871674284e-01 7.993498374836e-01 7.993498374836e-01 1.244839009914e+00 1.479386468536e+00 9.087543270747e-01 9.888753419737e-03 1.632248638348e-02 1.346703233145e-01 1.100407415081e-03 1.000000000000e-03 +1.062134515577e+00 7.620254788696e-01 7.620254788696e-01 1.307215575040e+00 1.513107858043e+00 9.978778006765e-01 9.490134490388e-03 1.426547591893e-02 1.258988832310e-01 1.002126712632e-03 1.000000000000e-03 +1.164671476563e+00 7.278673917621e-01 7.278673917621e-01 1.373408383661e+00 1.554362096907e+00 1.036168897483e+00 8.360203274292e-03 1.210256835724e-02 1.159624860664e-01 9.650936275242e-04 1.000000000000e-03 +1.267577343030e+00 7.008343299362e-01 7.008343299362e-01 1.448420200971e+00 1.609064895086e+00 9.813596249908e-01 6.602810982539e-03 1.009234150417e-02 1.058948194314e-01 1.018994438465e-03 1.000000000000e-03 +1.376049516029e+00 6.850801574062e-01 6.850801574062e-01 1.537155519990e+00 1.682908766008e+00 8.906393814080e-01 5.561586651297e-03 9.366731531406e-03 1.020170548455e-01 1.122788887259e-03 1.000000000000e-03 +1.494683190167e+00 6.800613683505e-01 6.800613683505e-01 1.642120977179e+00 1.777370183281e+00 8.342448435816e-01 3.737088530470e-03 6.719409582011e-03 8.640607991732e-02 1.198688859384e-03 1.000000000000e-03 +7.978553534258e-02 1.076654825200e+00 8.855785166779e-01 1.079607032339e+00 1.396352625048e+00 5.715975083103e-01 7.935044307390e-03 2.082333510563e-02 1.521086421156e-01 1.749482783709e-03 1.000000000000e-03 +2.376755389406e-01 1.067277622235e+00 8.795163140958e-01 1.093421778059e+00 1.403253409579e+00 5.921193119027e-01 8.127237315273e-03 2.058851269981e-02 1.512485544460e-01 1.688848817963e-03 1.000000000000e-03 +3.907636948453e-01 1.049081648370e+00 8.675298153430e-01 1.119494783443e+00 1.416289712829e+00 6.365882056865e-01 8.466512126956e-03 1.994973842900e-02 1.488837668526e-01 1.570874218321e-03 1.000000000000e-03 +5.365179308316e-01 1.023064652656e+00 8.497436326000e-01 1.155211138112e+00 1.434077060259e+00 7.056433024920e-01 8.922892918013e-03 1.896757090977e-02 1.451725827718e-01 1.417146590166e-03 1.000000000000e-03 +6.730598542171e-01 9.908776946171e-01 8.267036106271e-01 1.197851482050e+00 1.455433623657e+00 7.984414739101e-01 9.434057334768e-03 1.772338545097e-02 1.403305045280e-01 1.252439950423e-03 1.000000000000e-03 +7.993498374836e-01 9.542871674284e-01 7.993498374836e-01 1.244839009914e+00 1.479386468536e+00 9.087543270747e-01 9.888753419737e-03 1.632248638348e-02 1.346703233145e-01 1.100407415081e-03 1.000000000000e-03 +9.152624465907e-01 9.152624465907e-01 7.691505090644e-01 1.294376565099e+00 1.505657065162e+00 1.026670333329e+00 1.014720110462e-02 1.482540321154e-02 1.283459007333e-01 9.740224953779e-04 1.000000000000e-03 +1.021972709290e+00 8.761406937612e-01 7.380264537571e-01 1.346124338164e+00 1.535165717518e+00 1.135684400057e+00 9.992289916662e-03 1.319771133093e-02 1.210955147849e-01 8.805263151889e-04 1.000000000000e-03 +1.122584769250e+00 8.394862520898e-01 7.082391637587e-01 1.401760939533e+00 1.570521074256e+00 1.199543580278e+00 9.218004306089e-03 1.152688963242e-02 1.131709112234e-01 8.336504120748e-04 1.000000000000e-03 +1.221692510630e+00 8.087670544992e-01 6.829306390525e-01 1.465140518508e+00 1.616487239891e+00 1.189724758353e+00 7.923011285901e-03 9.989299495881e-03 1.053528436355e-01 8.405305453880e-04 1.000000000000e-03 +1.324283316631e+00 7.878658606411e-01 6.655840150743e-01 1.540927940259e+00 1.678529415349e+00 1.121648662096e+00 7.138684173176e-03 9.546684823533e-03 1.029923666186e-01 8.915447713651e-04 1.000000000000e-03 +1.436704731948e+00 7.768281403543e-01 6.564056432539e-01 1.633273536934e+00 1.760241692196e+00 1.045370944752e+00 4.812862277301e-03 6.905963335019e-03 8.759733211957e-02 9.565982343591e-04 1.000000000000e-03 +7.467368223126e-02 1.188005778343e+00 8.265975826541e-01 1.190350321625e+00 1.449205800376e+00 6.328834947113e-01 7.059702545990e-03 1.673223256330e-02 1.363501724047e-01 1.580069646873e-03 1.000000000000e-03 +2.228932477459e-01 1.178484326317e+00 8.222095263211e-01 1.199377633302e+00 1.454144151190e+00 6.548417916230e-01 7.269200899363e-03 1.665104684602e-02 1.360189808896e-01 1.527086408950e-03 1.000000000000e-03 +3.676708372428e-01 1.159901534316e+00 8.134642273388e-01 1.216779936500e+00 1.463652097675e+00 7.021434004773e-01 7.651544257747e-03 1.634611445300e-02 1.347677609528e-01 1.424210495064e-03 1.000000000000e-03 +5.068716274082e-01 1.133178119548e+00 8.003647430270e-01 1.241374841574e+00 1.477022416612e+00 7.752937246721e-01 8.198947007324e-03 1.586291765252e-02 1.327609282069e-01 1.289833734206e-03 1.000000000000e-03 +6.387509447545e-01 1.099925008405e+00 7.830856691585e-01 1.271942527609e+00 1.493673645339e+00 8.748039759151e-01 8.850455777216e-03 1.517560965808e-02 1.298529495582e-01 1.143113231686e-03 1.000000000000e-03 +7.620254788696e-01 1.062134515577e+00 7.620254788696e-01 1.307215575040e+00 1.513107858043e+00 9.978778006765e-01 9.490134490387e-03 1.426547591893e-02 1.258988832310e-01 1.002126712632e-03 1.000000000000e-03 +8.761406937612e-01 1.021972709290e+00 7.380264537571e-01 1.346124338164e+00 1.535165717518e+00 1.135684400057e+00 9.992289916662e-03 1.319771133093e-02 1.210955147849e-01 8.805263151889e-04 1.000000000000e-03 +9.815887052312e-01 9.815887052312e-01 7.124006989306e-01 1.388176059610e+00 1.560303665416e+00 1.271702051394e+00 1.022810220115e-02 1.206426716454e-02 1.157788464873e-01 7.863477132113e-04 1.000000000000e-03 +1.080304183965e+00 9.430941610296e-01 6.868269924762e-01 1.434044534336e+00 1.590036176964e+00 1.385195348735e+00 1.004955990916e-02 1.088246497326e-02 1.099619377242e-01 7.219198367315e-04 1.000000000000e-03 +1.175609025319e+00 9.090969277711e-01 6.635299945133e-01 1.486106929024e+00 1.627509096169e+00 1.456592627898e+00 9.599676966886e-03 9.885753349660e-03 1.048053929362e-01 6.865337506503e-04 1.000000000000e-03 +1.272600348991e+00 8.828657922736e-01 6.451971592202e-01 1.548858823592e+00 1.677868597264e+00 1.425638633191e+00 9.032264740145e-03 9.503388021896e-03 1.027585520739e-01 7.014400260478e-04 1.000000000000e-03 +1.379943112132e+00 8.654932401105e-01 6.328888137222e-01 1.628901943457e+00 1.747532486660e+00 1.282679069200e+00 5.798781339222e-03 6.781253563495e-03 8.680280054043e-02 7.796182412361e-04 1.000000000000e-03 +7.059037062518e-02 1.297378946438e+00 7.807658845044e-01 1.299297937767e+00 1.515839865386e+00 6.339384166198e-01 5.621391028571e-03 1.330111304473e-02 1.215689701122e-01 1.577440290387e-03 1.000000000000e-03 +2.109139225528e-01 1.287323269750e+00 7.771014912182e-01 1.304486827670e+00 1.518411212821e+00 6.571487577045e-01 5.814873957337e-03 1.327296267967e-02 1.214402581962e-01 1.521725466686e-03 1.000000000000e-03 +3.484732366630e-01 1.267659888161e+00 7.698240001369e-01 1.314684444543e+00 1.523490787603e+00 7.079545229466e-01 6.190732165912e-03 1.311680051173e-02 1.207237457620e-01 1.412520109114e-03 1.000000000000e-03 +4.814189017862e-01 1.239437352077e+00 7.590389767492e-01 1.329649994818e+00 1.531048424102e+00 7.873176210909e-01 6.763196445724e-03 1.288526307150e-02 1.196534954288e-01 1.270135423381e-03 1.000000000000e-03 +6.082717093348e-01 1.204397596594e+00 7.449586701205e-01 1.349284270663e+00 1.541275920543e+00 8.971738501315e-01 7.511230078343e-03 1.255815148409e-02 1.181249408423e-01 1.114611175809e-03 1.000000000000e-03 +7.278673917621e-01 1.164671476563e+00 7.278673917621e-01 1.373408383661e+00 1.554362096907e+00 1.036168897483e+00 8.360203274292e-03 1.210256835724e-02 1.159624860664e-01 9.650936275242e-04 1.000000000000e-03 +8.394862520898e-01 1.122584769250e+00 7.082391637587e-01 1.401760939533e+00 1.570521074256e+00 1.199543580278e+00 9.218004306089e-03 1.152688963242e-02 1.131709112234e-01 8.336504120748e-04 1.000000000000e-03 +9.430941610296e-01 1.080304183965e+00 6.868269924762e-01 1.434044534336e+00 1.590036176964e+00 1.385195348735e+00 1.004955990916e-02 1.088246497326e-02 1.099619377242e-01 7.219198367315e-04 1.000000000000e-03 +1.039624863115e+00 1.039624863115e+00 6.647262066859e-01 1.470251581197e+00 1.613536687488e+00 1.582997828370e+00 1.081729720842e-02 1.025013775877e-02 1.067194544317e-01 6.317128059674e-04 1.000000000000e-03 +1.131373274735e+00 1.002449873478e+00 6.434460203626e-01 1.511592284851e+00 1.642843272117e+00 1.744579158762e+00 1.122913497496e-02 9.654880019541e-03 1.035743427020e-01 5.732041420866e-04 1.000000000000e-03 +1.223175560708e+00 9.709783902237e-01 6.247174631815e-01 1.561716199121e+00 1.682031330089e+00 1.801304254948e+00 1.106376075363e-02 9.213124925932e-03 1.011770995495e-01 5.551532992015e-04 1.000000000000e-03 +1.326490652259e+00 9.475341739796e-01 6.103642834997e-01 1.630152895096e+00 1.740673151388e+00 1.483823192264e+00 6.232062452178e-03 6.300005099665e-03 8.366603651599e-02 6.739347418299e-04 1.000000000000e-03 +6.793637190840e-02 1.414139863481e+00 7.511508396989e-01 1.415770780923e+00 1.602696006139e+00 5.729843199905e-01 4.005451507315e-03 1.048576209044e-02 1.079390882264e-01 1.745248456392e-03 1.000000000000e-03 +2.029890806535e-01 1.402843597748e+00 7.475692298135e-01 1.417453606510e+00 1.602508808079e+00 5.949248995141e-01 4.167776904765e-03 1.050832695396e-02 1.080551657152e-01 1.680884428970e-03 1.000000000000e-03 +3.353726492569e-01 1.380857569138e+00 7.404551470496e-01 1.421000506726e+00 1.602347111243e+00 6.432024447667e-01 4.480666227501e-03 1.044927517912e-02 1.077511287856e-01 1.554720458755e-03 1.000000000000e-03 +4.633068332181e-01 1.349549207628e+00 7.300280921211e-01 1.426862391934e+00 1.602771755679e+00 7.195787748576e-01 4.963529335300e-03 1.034673931902e-02 1.072211593909e-01 1.389701913036e-03 1.000000000000e-03 +5.854613415948e-01 1.310995998895e+00 7.166804475103e-01 1.435783929295e+00 1.604713792383e+00 8.292209325307e-01 5.648198433361e-03 1.021717773596e-02 1.065477344040e-01 1.205951225746e-03 1.000000000000e-03 +7.008343299362e-01 1.267577343030e+00 7.008343299362e-01 1.448420200971e+00 1.609064895086e+00 9.813596249908e-01 6.602810982539e-03 1.009234150417e-02 1.058948194314e-01 1.018994438465e-03 1.000000000000e-03 +8.087670544992e-01 1.221692510630e+00 6.829306390525e-01 1.465140518508e+00 1.616487239891e+00 1.189724758353e+00 7.923011285901e-03 9.989299495881e-03 1.053528436355e-01 8.405305453880e-04 1.000000000000e-03 +9.090969277711e-01 1.175609025319e+00 6.635299945133e-01 1.486106929024e+00 1.627509096169e+00 1.456592627898e+00 9.599676966886e-03 9.885753349660e-03 1.048053929362e-01 6.865337506503e-04 1.000000000000e-03 +1.002449873478e+00 1.131373274735e+00 6.434460203626e-01 1.511592284851e+00 1.642843272117e+00 1.744579158762e+00 1.122913497496e-02 9.654880019541e-03 1.035743427020e-01 5.732041420865e-04 1.000000000000e-03 +1.090596979153e+00 1.090596979153e+00 6.236341842757e-01 1.542337039001e+00 1.663647540097e+00 2.004458153756e+00 1.225078724166e-02 9.167655023404e-03 1.009271190480e-01 4.988879404272e-04 1.000000000000e-03 +1.177690065573e+00 1.054094481575e+00 6.048311205815e-01 1.580528097389e+00 1.692303090779e+00 2.166316017304e+00 1.272096306861e-02 8.808246096370e-03 9.892896495505e-02 4.616131681677e-04 1.000000000000e-03 +1.278687168889e+00 1.025934507210e+00 5.897488812202e-01 1.639384789781e+00 1.742235986274e+00 1.479043837951e+00 5.372001952722e-03 5.448116358910e-03 7.780400131748e-02 6.761124818218e-04 1.000000000000e-03 +6.728284433015e-02 1.545724628631e+00 7.438066435460e-01 1.547188291288e+00 1.716694478258e+00 4.649401179479e-01 2.790914531278e-03 9.004109637591e-03 1.000228287142e-01 2.150814613318e-03 1.000000000000e-03 +2.008062243713e-01 1.532257007337e+00 7.393855398180e-01 1.545359076811e+00 1.713133285175e+00 4.863466868039e-01 2.943073671338e-03 9.077085599203e-03 1.004273402305e-01 2.056146422158e-03 1.000000000000e-03 +3.310522362219e-01 1.506345751312e+00 7.307558486012e-01 1.542294753153e+00 1.706656736391e+00 5.330062446019e-01 3.239666903538e-03 9.117154638471e-03 1.006487546894e-01 1.876150626991e-03 1.000000000000e-03 +4.560153958703e-01 1.469878075327e+00 7.183707844328e-01 1.538990447533e+00 1.698395767048e+00 6.093382556013e-01 3.722223875666e-03 9.162949744538e-03 1.009012154124e-01 1.641124598378e-03 1.000000000000e-03 +5.743229015866e-01 1.425485468111e+00 7.029097008226e-01 1.536832982169e+00 1.689951970499e+00 7.243023106277e-01 4.460797282004e-03 9.238125883110e-03 1.013142848495e-01 1.380638975366e-03 1.000000000000e-03 +6.850801574062e-01 1.376049516029e+00 6.850801574062e-01 1.537155519990e+00 1.682908766008e+00 8.906393814080e-01 5.561586651297e-03 9.366731531406e-03 1.020170548455e-01 1.122788887259e-03 1.000000000000e-03 +7.878658606411e-01 1.324283316631e+00 6.655840150743e-01 1.540927940259e+00 1.678529415349e+00 1.121648662096e+00 7.138684173176e-03 9.546684823533e-03 1.029923666186e-01 8.915447713651e-04 1.000000000000e-03 +8.828657922736e-01 1.272600348991e+00 6.451971592202e-01 1.548858823592e+00 1.677868597264e+00 1.425638633191e+00 9.032264740145e-03 9.503388021896e-03 1.027585520739e-01 7.014400260478e-04 1.000000000000e-03 +9.709783902237e-01 1.223175560708e+00 6.247174631815e-01 1.561716199121e+00 1.682031330089e+00 1.801304254948e+00 1.106376075363e-02 9.213124925932e-03 1.011770995495e-01 5.551532992015e-04 1.000000000000e-03 +1.054094481575e+00 1.177690065573e+00 6.048311205815e-01 1.580528097389e+00 1.692303090779e+00 2.166316017304e+00 1.272096306861e-02 8.808246096370e-03 9.892896495505e-02 4.616131681677e-04 1.000000000000e-03 +1.137347756551e+00 1.137347756551e+00 5.862518666845e-01 1.608452622448e+00 1.711961182344e+00 2.055106567130e+00 1.037664892944e-02 7.573803540464e-03 9.173514739282e-02 4.865927713893e-04 1.000000000000e-03 +1.239337071444e+00 1.108165352215e+00 5.723294249028e-01 1.662524232757e+00 1.758279782945e+00 1.144744203412e+00 2.802043404239e-03 3.671619470821e-03 6.387156792972e-02 8.735576009200e-04 1.000000000000e-03 +6.866633100748e-02 1.694208277854e+00 7.590680751711e-01 1.695599231470e+00 1.857751624009e+00 3.950027763486e-01 1.537601642797e-03 5.838952539818e-03 8.054641546489e-02 2.531627775491e-03 1.000000000000e-03 +2.044561709682e-01 1.677714268588e+00 7.526409149637e-01 1.690126472448e+00 1.850134005889e+00 4.173618431045e-01 1.663215123029e-03 5.977601272760e-03 8.149711155591e-02 2.396002453319e-03 1.000000000000e-03 +3.355174108090e-01 1.646437631693e+00 7.404059246714e-01 1.680276408217e+00 1.836172579389e+00 4.666536534155e-01 1.887293718703e-03 6.066470405482e-03 8.210068618933e-02 2.142916899248e-03 1.000000000000e-03 +4.592770182242e-01 1.603129480414e+00 7.233657887623e-01 1.667620913290e+00 1.817750691045e+00 5.468027163270e-01 2.264859207591e-03 6.213006464574e-03 8.308634374067e-02 1.828813153521e-03 1.000000000000e-03 +5.743060497944e-01 1.551298905478e+00 7.028060921514e-01 1.654193378348e+00 1.797301348170e+00 6.668346943914e-01 2.860701269265e-03 6.434955979327e-03 8.455738340406e-02 1.499622032883e-03 1.000000000000e-03 +6.800613683505e-01 1.494683190167e+00 6.800613683505e-01 1.642120977179e+00 1.777370183281e+00 8.342448435816e-01 3.737088530470e-03 6.719409582011e-03 8.640607991732e-02 1.198688859384e-03 1.000000000000e-03 +7.768281403543e-01 1.436704731948e+00 6.564056432539e-01 1.633273536934e+00 1.760241692196e+00 1.045370944752e+00 4.812862277301e-03 6.905963335019e-03 8.759733211957e-02 9.565982343591e-04 1.000000000000e-03 +8.654932401105e-01 1.379943112132e+00 6.328888137222e-01 1.628901943457e+00 1.747532486660e+00 1.282679069200e+00 5.798781339222e-03 6.781253563495e-03 8.680280054043e-02 7.796182412361e-04 1.000000000000e-03 +9.475341739796e-01 1.326490652259e+00 6.103642834997e-01 1.630152895096e+00 1.740673151388e+00 1.483823192264e+00 6.232062452178e-03 6.300005099665e-03 8.366603651599e-02 6.739347418299e-04 1.000000000000e-03 +1.025934507210e+00 1.278687168889e+00 5.897488812202e-01 1.639384789781e+00 1.742235986274e+00 1.479043837951e+00 5.372001952722e-03 5.448116358910e-03 7.780400131748e-02 6.761124818218e-04 1.000000000000e-03 +1.108165352215e+00 1.239337071444e+00 5.723294249028e-01 1.662524232757e+00 1.758279782945e+00 1.144744203412e+00 2.802043404239e-03 3.671619470821e-03 6.387156792972e-02 8.735576009200e-04 1.000000000000e-03 +1.214052568014e+00 1.214052568014e+00 5.608662615668e-01 1.716929607119e+00 1.806216553785e+00 6.791641429449e-01 6.386989975039e-04 1.410628794538e-03 3.958996498185e-02 1.472398109335e-03 1.000000000000e-03 +8.866905544943e-02 8.866905544943e-02 1.252614998406e+00 1.253969807794e-01 1.258875981588e+00 2.935696210117e-01 5.239355191863e-03 2.677059281785e-02 1.724676872082e-01 3.406347007410e-03 1.000000000000e-03 +2.642515130219e-01 8.804600576280e-02 1.241990491814e+00 2.785335909099e-01 1.272839873284e+00 3.098946912126e-01 5.429415556615e-03 2.628029316364e-02 1.708810280206e-01 3.226902649048e-03 1.000000000000e-03 +4.343646135052e-01 8.680973908880e-02 1.219359194077e+00 4.429543410625e-01 1.297322393411e+00 3.463460180090e-01 5.809585825264e-03 2.516090350335e-02 1.672021514460e-01 2.887285974149e-03 1.000000000000e-03 +5.958213623021e-01 8.500674652494e-02 1.183728515681e+00 6.018548352636e-01 1.327946701327e+00 4.021201615519e-01 6.410802855880e-03 2.391375813317e-02 1.630056513443e-01 2.486818855689e-03 1.000000000000e-03 +7.467867542766e-01 8.272386986111e-02 1.135770118338e+00 7.513545734257e-01 1.361803016856e+00 4.772442581691e-01 7.142477499569e-03 2.244912550746e-02 1.579350271031e-01 2.095363082704e-03 1.000000000000e-03 +8.855785166779e-01 7.978553534258e-02 1.076654825200e+00 8.891653619273e-01 1.396352625048e+00 5.715975083103e-01 7.935044307390e-03 2.082333510563e-02 1.521086421156e-01 1.749482783709e-03 1.000000000000e-03 +1.011524290773e+00 7.612407190001e-02 1.011524290773e+00 1.014384673163e+00 1.432535394317e+00 6.588464573161e-01 8.225628494380e-03 1.872734171150e-02 1.442503291408e-01 1.517804321319e-03 1.000000000000e-03 +1.125779209258e+00 7.214282992530e-02 9.497049526125e-01 1.128088390112e+00 1.474626363837e+00 7.612979572913e-01 7.894117050175e-03 1.555393057587e-02 1.314615726526e-01 1.313546148945e-03 1.000000000000e-03 +1.233896793680e+00 6.852224185870e-02 8.986415355632e-01 1.235797958844e+00 1.527989922913e+00 7.852777850876e-01 6.632457870852e-03 1.266900324344e-02 1.186451443191e-01 1.273434724616e-03 1.000000000000e-03 +1.344960916087e+00 6.592880282032e-02 8.632463147484e-01 1.346575832563e+00 1.599518887906e+00 7.229530639530e-01 4.921182577874e-03 1.021058521621e-02 1.065133544898e-01 1.383215660685e-03 1.000000000000e-03 +1.466257821884e+00 6.490656965719e-02 8.491323997058e-01 1.467693722484e+00 1.695626932804e+00 6.062470187133e-01 3.625131766219e-03 8.969442292464e-03 9.983009061213e-02 1.649492647605e-03 1.000000000000e-03 +1.601280409531e+00 6.543810294358e-02 8.558616643000e-01 1.602616952133e+00 1.816832486413e+00 5.355668834531e-01 2.134241820419e-03 5.977521817608e-03 8.149656991833e-02 1.867180423017e-03 1.000000000000e-03 +8.804600576280e-02 2.642515130219e-01 1.241990491814e+00 2.785335909099e-01 1.272839873284e+00 3.098946912126e-01 5.429415556615e-03 2.628029316364e-02 1.708810280206e-01 3.226902649048e-03 1.000000000000e-03 +2.623259509291e-01 2.623259509291e-01 1.230974676075e+00 3.709849175663e-01 1.285662654898e+00 3.274071652269e-01 5.629525724929e-03 2.579139824732e-02 1.692841078297e-01 3.054300901775e-03 1.000000000000e-03 +4.312137265753e-01 2.586398042249e-01 1.208017210963e+00 5.028318071845e-01 1.308489743292e+00 3.641697438528e-01 6.025063514997e-03 2.481698555426e-02 1.660554979325e-01 2.745972220043e-03 1.000000000000e-03 +5.916600349727e-01 2.533208819877e-01 1.172452266403e+00 6.436094050237e-01 1.337489208640e+00 4.205201267816e-01 6.630055563045e-03 2.364948241760e-02 1.621024450347e-01 2.378007463408e-03 1.000000000000e-03 +7.416645060217e-01 2.464476179506e-01 1.124985614616e+00 7.815386541215e-01 1.369815790892e+00 4.972302850621e-01 7.374194286146e-03 2.224581197390e-02 1.572182205086e-01 2.011140572170e-03 1.000000000000e-03 +8.795163140958e-01 2.376755389406e-01 1.067277622235e+00 9.110645468744e-01 1.403253409579e+00 5.921193119027e-01 8.127237315273e-03 2.058851269981e-02 1.512485544460e-01 1.688848817963e-03 1.000000000000e-03 +1.004432186979e+00 2.269427488399e-01 1.004432186979e+00 1.029750955081e+00 1.438496106261e+00 6.872749852832e-01 8.443357939178e-03 1.842790321191e-02 1.430924456889e-01 1.455021674604e-03 1.000000000000e-03 +1.117887905520e+00 2.153403498435e-01 9.446219722581e-01 1.138439649511e+00 1.479309131335e+00 7.847612751356e-01 8.099952312561e-03 1.548232418418e-02 1.311586155267e-01 1.274272867029e-03 1.000000000000e-03 +1.225420072392e+00 2.047476209810e-01 8.945961223218e-01 1.242407317315e+00 1.530972946917e+00 8.100004310845e-01 6.831858717718e-03 1.265158348479e-02 1.185635482899e-01 1.234567244194e-03 1.000000000000e-03 +1.335501334625e+00 1.970305897936e-01 8.594238605484e-01 1.349957357881e+00 1.600310669895e+00 7.475935010263e-01 5.097112757624e-03 1.022704066574e-02 1.065991487653e-01 1.337625325297e-03 1.000000000000e-03 +1.455113460470e+00 1.937976245685e-01 8.446325348486e-01 1.467962091517e+00 1.693610587194e+00 6.332878750210e-01 3.822175624372e-03 9.053171018580e-03 1.002949595420e-01 1.579060707529e-03 1.000000000000e-03 +1.587759557766e+00 1.949966110315e-01 8.494963814940e-01 1.599688748348e+00 1.811255971353e+00 5.655938521239e-01 2.310970112305e-03 6.128877029764e-03 8.252189628459e-02 1.768053164377e-03 1.000000000000e-03 +8.680973908880e-02 4.343646135052e-01 1.219359194077e+00 4.429543410625e-01 1.297322393411e+00 3.463460180090e-01 5.809585825264e-03 2.516090350335e-02 1.672021514460e-01 2.887285974149e-03 1.000000000000e-03 +2.586398042249e-01 4.312137265753e-01 1.208017210963e+00 5.028318071845e-01 1.308489743292e+00 3.641697438528e-01 6.025063514997e-03 2.481698555426e-02 1.660554979325e-01 2.745972220043e-03 1.000000000000e-03 +4.252254870794e-01 4.252254870794e-01 1.184897878670e+00 6.013596508943e-01 1.328764995249e+00 4.017063284137e-01 6.438085572612e-03 2.404026941038e-02 1.634362580824e-01 2.489380747246e-03 1.000000000000e-03 +5.836072212220e-01 4.165547684419e-01 1.149851874598e+00 7.170183148108e-01 1.355092099191e+00 4.599971944059e-01 7.043528237219e-03 2.296816694604e-02 1.597503849623e-01 2.173926302510e-03 1.000000000000e-03 +7.316471788914e-01 4.051612452984e-01 1.103819871954e+00 8.363391830301e-01 1.384876001233e+00 5.386886562551e-01 7.768765133756e-03 2.163243566636e-02 1.550356076174e-01 1.856359862767e-03 1.000000000000e-03 +8.675298153430e-01 3.907636948453e-01 1.049081648370e+00 9.514747740840e-01 1.416289712829e+00 6.365882056865e-01 8.466512126956e-03 1.994973842900e-02 1.488837668526e-01 1.570874218321e-03 1.000000000000e-03 +9.904976641243e-01 3.735882802294e-01 9.904976641243e-01 1.058609382993e+00 1.449737717105e+00 7.429460361837e-01 8.780099582184e-03 1.772692595673e-02 1.403445203646e-01 1.345992779148e-03 1.000000000000e-03 +1.102529972862e+00 3.552556576459e-01 9.344539005368e-01 1.158351813289e+00 1.488281900574e+00 8.353450433376e-01 8.450394454291e-03 1.517407900188e-02 1.298464007197e-01 1.197110113929e-03 1.000000000000e-03 +1.208881648692e+00 3.383772957955e-01 8.864980510889e-01 1.255346181280e+00 1.536806048088e+00 8.644395695503e-01 7.216036831176e-03 1.252147128387e-02 1.179523033729e-01 1.156818863024e-03 1.000000000000e-03 +1.317075771580e+00 3.257224536298e-01 8.518107871974e-01 1.356754843323e+00 1.601987928190e+00 8.014682682590e-01 5.440106264800e-03 1.018151275649e-02 1.063616093882e-01 1.247710033701e-03 1.000000000000e-03 +1.433597458347e+00 3.198395015379e-01 8.357768441223e-01 1.468842734715e+00 1.689976897030e+00 6.914072014261e-01 4.207719858567e-03 9.128600012890e-03 1.007119104337e-01 1.446325693365e-03 1.000000000000e-03 +1.562045660895e+00 3.205856847968e-01 8.373278875865e-01 1.594603972157e+00 1.801077405152e+00 6.297049527655e-01 2.627017794599e-03 6.257734951254e-03 8.338488373037e-02 1.588045314886e-03 1.000000000000e-03 +8.500674652494e-02 5.958213623021e-01 1.183728515681e+00 6.018548352636e-01 1.327946701327e+00 4.021201615519e-01 6.410802855880e-03 2.391375813317e-02 1.630056513443e-01 2.486818855689e-03 1.000000000000e-03 +2.533208819877e-01 5.916600349727e-01 1.172452266403e+00 6.436094050237e-01 1.337489208640e+00 4.205201267816e-01 6.630055563045e-03 2.364948241760e-02 1.621024450347e-01 2.378007463408e-03 1.000000000000e-03 +4.165547684419e-01 5.836072212220e-01 1.149851874598e+00 7.170183148108e-01 1.355092099191e+00 4.599971944059e-01 7.043528237219e-03 2.296816694604e-02 1.597503849623e-01 2.173926302510e-03 1.000000000000e-03 +5.717775713676e-01 5.717775713676e-01 1.116285143034e+00 8.086155960888e-01 1.378387355861e+00 5.203786491874e-01 7.632311417810e-03 2.200026297119e-02 1.563481264188e-01 1.921677612180e-03 1.000000000000e-03 +7.167595143331e-01 5.560938351535e-01 1.073121613548e+00 9.071849617816e-01 1.405195556621e+00 6.022614894245e-01 8.306096169591e-03 2.068726703129e-02 1.516108579785e-01 1.660408340164e-03 1.000000000000e-03 +8.497436326000e-01 5.365179308316e-01 1.023064652656e+00 1.004945635967e+00 1.434077060259e+00 7.056433024920e-01 8.922892918013e-03 1.896757090977e-02 1.451725827718e-01 1.417146590166e-03 1.000000000000e-03 +9.702731216509e-01 5.138078303039e-01 9.702731216509e-01 1.097920041296e+00 1.465216143672e+00 8.204318627361e-01 9.219823497351e-03 1.685665303137e-02 1.368561817358e-01 1.218870262626e-03 1.000000000000e-03 +1.080533449336e+00 4.899438587439e-01 9.192980541230e-01 1.186422150777e+00 1.500901872931e+00 9.115285738940e-01 8.918715257812e-03 1.467652607923e-02 1.276998480780e-01 1.097058313518e-03 1.000000000000e-03 +1.185208848323e+00 4.677047416382e-01 8.744097075226e-01 1.274153734638e+00 1.545334939779e+00 9.482022088313e-01 7.777869089440e-03 1.230413041174e-02 1.169241464072e-01 1.054627368178e-03 1.000000000000e-03 +1.290815278279e+00 4.504065298032e-01 8.405917670280e-01 1.367139394768e+00 1.604887735489e+00 8.874156489450e-01 5.983220743756e-03 1.011344698091e-02 1.060054871793e-01 1.126867664762e-03 1.000000000000e-03 +1.403204210522e+00 4.412805355858e-01 8.229410200483e-01 1.470955664701e+00 1.685509563898e+00 7.859568510859e-01 4.832671658811e-03 9.223162159857e-03 1.012321982148e-01 1.272334478182e-03 1.000000000000e-03 +1.526387798595e+00 4.400644077378e-01 8.203186901819e-01 1.588557960749e+00 1.787858816607e+00 7.298602155055e-01 3.148385439480e-03 6.470524161875e-03 8.479075003190e-02 1.370125372990e-03 1.000000000000e-03 +8.272386986111e-02 7.467867542766e-01 1.135770118338e+00 7.513545734257e-01 1.361803016856e+00 4.772442581691e-01 7.142477499569e-03 2.244912550746e-02 1.579350271031e-01 2.095363082704e-03 1.000000000000e-03 +2.464476179506e-01 7.416645060217e-01 1.124985614616e+00 7.815386541215e-01 1.369815790892e+00 4.972302850621e-01 7.374194286146e-03 2.224581197390e-02 1.572182205086e-01 2.011140572170e-03 1.000000000000e-03 +4.051612452984e-01 7.316471788914e-01 1.103819871954e+00 8.363391830301e-01 1.384876001233e+00 5.386886562551e-01 7.768765133756e-03 2.163243566636e-02 1.550356076174e-01 1.856359862767e-03 1.000000000000e-03 +5.560938351535e-01 7.167595143331e-01 1.073121613548e+00 9.071849617816e-01 1.405195556621e+00 6.022614894245e-01 8.306096169591e-03 2.068726703129e-02 1.516108579785e-01 1.660408340164e-03 1.000000000000e-03 +6.970773854563e-01 6.970773854563e-01 1.034651272327e+00 9.858162925359e-01 1.429103571459e+00 6.894019035977e-01 8.910789323409e-03 1.938808685523e-02 1.467730177111e-01 1.450532693312e-03 1.000000000000e-03 +8.267036106271e-01 6.730598542171e-01 9.908776946171e-01 1.066043351456e+00 1.455433623657e+00 7.984414739101e-01 9.434057334768e-03 1.772338545097e-02 1.403305045280e-01 1.252439950423e-03 1.000000000000e-03 +9.447995901570e-01 6.459797522229e-01 9.447995901570e-01 1.144524401593e+00 1.484109959337e+00 9.164944910283e-01 9.716698181948e-03 1.590303860590e-02 1.329287135853e-01 1.091114032642e-03 1.000000000000e-03 +1.053203146443e+00 6.178877525311e-01 8.996155885726e-01 1.221074175636e+00 1.516683997941e+00 1.013209020788e+00 9.457828429045e-03 1.400179267308e-02 1.247298978374e-01 9.869631828016e-04 1.000000000000e-03 +1.155879521794e+00 5.913496497440e-01 8.585962680211e-01 1.298365078533e+00 1.556579400035e+00 1.060336523705e+00 8.465168463376e-03 1.197521014432e-02 1.153507219277e-01 9.430968165712e-04 1.000000000000e-03 +1.258398420208e+00 5.698130105336e-01 8.261099109503e-01 1.381395472323e+00 1.609568586897e+00 1.013058765502e+00 6.782837894410e-03 1.004310627189e-02 1.056362010334e-01 9.871095676311e-04 1.000000000000e-03 +1.366017705788e+00 5.568258523935e-01 8.067348567609e-01 1.475147247708e+00 1.681332962721e+00 9.260192904560e-01 5.779637366267e-03 9.362068521415e-03 1.019916582723e-01 1.079891110592e-03 1.000000000000e-03 +1.483645056167e+00 5.521820047680e-01 7.997222988291e-01 1.583069050635e+00 1.773601808276e+00 8.691015335353e-01 3.894431745073e-03 6.721478897693e-03 8.641938374188e-02 1.150613549066e-03 1.000000000000e-03 +7.978553534258e-02 8.855785166779e-01 1.076654825200e+00 8.891653619273e-01 1.396352625048e+00 5.715975083103e-01 7.935044307390e-03 2.082333510563e-02 1.521086421156e-01 1.749482783709e-03 1.000000000000e-03 +2.376755389406e-01 8.795163140958e-01 1.067277622235e+00 9.110645468744e-01 1.403253409579e+00 5.921193119027e-01 8.127237315273e-03 2.058851269981e-02 1.512485544460e-01 1.688848817963e-03 1.000000000000e-03 +3.907636948453e-01 8.675298153430e-01 1.049081648370e+00 9.514747740840e-01 1.416289712829e+00 6.365882056865e-01 8.466512126956e-03 1.994973842900e-02 1.488837668526e-01 1.570874218321e-03 1.000000000000e-03 +5.365179308316e-01 8.497436326000e-01 1.023064652656e+00 1.004945635967e+00 1.434077060259e+00 7.056433024920e-01 8.922892918013e-03 1.896757090977e-02 1.451725827718e-01 1.417146590166e-03 1.000000000000e-03 +6.730598542171e-01 8.267036106271e-01 9.908776946171e-01 1.066043351456e+00 1.455433623657e+00 7.984414739101e-01 9.434057334768e-03 1.772338545097e-02 1.403305045280e-01 1.252439950423e-03 1.000000000000e-03 +7.993498374836e-01 7.993498374836e-01 9.542871674284e-01 1.130451381250e+00 1.479386468536e+00 9.087543270747e-01 9.888753419737e-03 1.632248638348e-02 1.346703233145e-01 1.100407415081e-03 1.000000000000e-03 +9.152624465907e-01 7.691505090644e-01 9.152624465907e-01 1.195532455324e+00 1.505657065162e+00 1.026670333329e+00 1.014720110462e-02 1.482540321154e-02 1.283459007333e-01 9.740224953779e-04 1.000000000000e-03 +1.021972709290e+00 7.380264537571e-01 8.761406937612e-01 1.260599565674e+00 1.535165717518e+00 1.135684400057e+00 9.992289916662e-03 1.319771133093e-02 1.210955147849e-01 8.805263151889e-04 1.000000000000e-03 +1.122584769250e+00 7.082391637587e-01 8.394862520898e-01 1.327327871038e+00 1.570521074256e+00 1.199543580278e+00 9.218004306089e-03 1.152688963242e-02 1.131709112234e-01 8.336504120748e-04 1.000000000000e-03 +1.221692510630e+00 6.829306390525e-01 8.087670544992e-01 1.399616679054e+00 1.616487239891e+00 1.189724758353e+00 7.923011285901e-03 9.989299495881e-03 1.053528436355e-01 8.405305453880e-04 1.000000000000e-03 +1.324283316631e+00 6.655840150743e-01 7.878658606411e-01 1.482136425512e+00 1.678529415349e+00 1.121648662096e+00 7.138684173176e-03 9.546684823533e-03 1.029923666186e-01 8.915447713651e-04 1.000000000000e-03 +1.436704731948e+00 6.564056432539e-01 7.768281403543e-01 1.579553372095e+00 1.760241692196e+00 1.045370944752e+00 4.812862277301e-03 6.905963335019e-03 8.759733211957e-02 9.565982343591e-04 1.000000000000e-03 +7.612407190001e-02 1.011524290773e+00 1.011524290773e+00 1.014384673163e+00 1.432535394317e+00 6.588464573161e-01 8.225628494380e-03 1.872734171150e-02 1.442503291408e-01 1.517804321319e-03 1.000000000000e-03 +2.269427488399e-01 1.004432186979e+00 1.004432186979e+00 1.029750955081e+00 1.438496106261e+00 6.872749852832e-01 8.443357939178e-03 1.842790321191e-02 1.430924456889e-01 1.455021674604e-03 1.000000000000e-03 +3.735882802294e-01 9.904976641243e-01 9.904976641243e-01 1.058609382993e+00 1.449737717105e+00 7.429460361837e-01 8.780099582184e-03 1.772692595673e-02 1.403445203646e-01 1.345992779148e-03 1.000000000000e-03 +5.138078303039e-01 9.702731216509e-01 9.702731216509e-01 1.097920041296e+00 1.465216143672e+00 8.204318627361e-01 9.219823497351e-03 1.685665303137e-02 1.368561817358e-01 1.218870262626e-03 1.000000000000e-03 +6.459797522229e-01 9.447995901570e-01 9.447995901570e-01 1.144524401593e+00 1.484109959337e+00 9.164944910283e-01 9.716698181948e-03 1.590303860590e-02 1.329287135853e-01 1.091114032642e-03 1.000000000000e-03 +7.691505090644e-01 9.152624465907e-01 9.152624465907e-01 1.195532455324e+00 1.505657065162e+00 1.026670333329e+00 1.014720110462e-02 1.482540321154e-02 1.283459007333e-01 9.740224953779e-04 1.000000000000e-03 +8.830535452864e-01 8.830535452864e-01 8.830535452864e-01 1.248826300046e+00 1.529493606240e+00 1.148298648207e+00 1.042631993527e-02 1.361969721668e-02 1.230162465182e-01 8.708535898402e-04 1.000000000000e-03 +9.882908547279e-01 8.498685720436e-01 8.498685720436e-01 1.303455178856e+00 1.556043698947e+00 1.271863998940e+00 1.045484725337e-02 1.233014763617e-02 1.170476998500e-01 7.862475868754e-04 1.000000000000e-03 +1.086967104595e+00 8.176829658098e-01 8.176829658098e-01 1.360184884142e+00 1.587043903496e+00 1.370266975986e+00 1.007991539158e-02 1.103425343553e-02 1.107261558758e-01 7.297847919603e-04 1.000000000000e-03 +1.182581701991e+00 7.890648378152e-01 7.890648378152e-01 1.421661985199e+00 1.625960060529e+00 1.423473141202e+00 9.435052544299e-03 9.942287217653e-03 1.051046421306e-01 7.025071081814e-04 1.000000000000e-03 +1.280177786094e+00 7.671214493751e-01 7.671214493751e-01 1.492424363946e+00 1.678036292871e+00 1.381982514719e+00 8.815347492348e-03 9.568153791880e-03 1.031081082698e-01 7.235981565246e-04 1.000000000000e-03 +1.388073832062e+00 7.528170305330e-01 7.528170305330e-01 1.579076453094e+00 1.749347285754e+00 1.249101335458e+00 5.715604024385e-03 6.863659331078e-03 8.732862157187e-02 8.005755590946e-04 1.000000000000e-03 +7.214282992530e-02 1.125779209258e+00 9.497049526125e-01 1.128088390112e+00 1.474626363837e+00 7.612979572913e-01 7.894117050175e-03 1.555393057587e-02 1.314615726526e-01 1.313546148945e-03 1.000000000000e-03 +2.153403498435e-01 1.117887905520e+00 9.446219722581e-01 1.138439649511e+00 1.479309131335e+00 7.847612751356e-01 8.099952312561e-03 1.548232418418e-02 1.311586155267e-01 1.274272867029e-03 1.000000000000e-03 +3.552556576459e-01 1.102529972862e+00 9.344539005368e-01 1.158351813289e+00 1.488281900574e+00 8.353450433376e-01 8.450394454291e-03 1.517407900188e-02 1.298464007197e-01 1.197110113929e-03 1.000000000000e-03 +4.899438587439e-01 1.080533449336e+00 9.192980541230e-01 1.186422150777e+00 1.500901872931e+00 9.115285738940e-01 8.918715257812e-03 1.467652607923e-02 1.276998480780e-01 1.097058313518e-03 1.000000000000e-03 +6.178877525311e-01 1.053203146443e+00 8.996155885726e-01 1.221074175636e+00 1.516683997941e+00 1.013209020788e+00 9.457828429045e-03 1.400179267308e-02 1.247298978374e-01 9.869631828016e-04 1.000000000000e-03 +7.380264537571e-01 1.021972709290e+00 8.761406937612e-01 1.260599565674e+00 1.535165717518e+00 1.135684400057e+00 9.992289916662e-03 1.319771133093e-02 1.210955147849e-01 8.805263151889e-04 1.000000000000e-03 +8.498685720436e-01 9.882908547279e-01 8.498685720436e-01 1.303455178856e+00 1.556043698947e+00 1.271863998940e+00 1.045484725337e-02 1.233014763617e-02 1.170476998500e-01 7.862475868753e-04 1.000000000000e-03 +9.536116805747e-01 9.536116805747e-01 8.220040978506e-01 1.348610571906e+00 1.579380008592e+00 1.420621935696e+00 1.082982450477e-02 1.143494715165e-02 1.127186623198e-01 7.039170484931e-04 1.000000000000e-03 +1.050438651132e+00 9.195131354821e-01 7.939885475833e-01 1.396039313958e+00 1.606033492742e+00 1.574688822482e+00 1.108233395502e-02 1.055668948378e-02 1.083035317152e-01 6.350461029017e-04 1.000000000000e-03 +1.142857216510e+00 8.880138304412e-01 7.676939760236e-01 1.447304798715e+00 1.638305594572e+00 1.696318858507e+00 1.112152777744e-02 9.834407949013e-03 1.045328653742e-01 5.895118096371e-04 1.000000000000e-03 +1.235779076697e+00 8.615339747593e-01 7.453316303499e-01 1.506449705788e+00 1.680746844491e+00 1.713513572033e+00 1.069527559836e-02 9.362583208782e-03 1.019944617711e-01 5.835961945801e-04 1.000000000000e-03 +1.339927156580e+00 8.420175437379e-01 7.287085233620e-01 1.582529092593e+00 1.742244081902e+00 1.447301858080e+00 6.283886414010e-03 6.512690886419e-03 8.506658102411e-02 6.909408665629e-04 1.000000000000e-03 +6.852224185870e-02 1.233896793680e+00 8.986415355632e-01 1.235797958844e+00 1.527989922913e+00 7.852777850876e-01 6.632457870852e-03 1.266900324344e-02 1.186451443191e-01 1.273434724616e-03 1.000000000000e-03 +2.047476209810e-01 1.225420072392e+00 8.945961223218e-01 1.242407317315e+00 1.530972946917e+00 8.100004310845e-01 6.831858717718e-03 1.265158348479e-02 1.185635482899e-01 1.234567244194e-03 1.000000000000e-03 +3.383772957955e-01 1.208881648692e+00 8.864980510889e-01 1.255346181280e+00 1.536806048088e+00 8.644395695503e-01 7.216036831176e-03 1.252147128387e-02 1.179523033729e-01 1.156818863024e-03 1.000000000000e-03 +4.677047416382e-01 1.185208848323e+00 8.744097075226e-01 1.274153734638e+00 1.545334939779e+00 9.482022088313e-01 7.777869089440e-03 1.230413041174e-02 1.169241464072e-01 1.054627368178e-03 1.000000000000e-03 +5.913496497440e-01 1.155879521794e+00 8.585962680211e-01 1.298365078533e+00 1.556579400035e+00 1.060336523705e+00 8.465168463376e-03 1.197521014432e-02 1.153507219277e-01 9.430968165712e-04 1.000000000000e-03 +7.082391637587e-01 1.122584769250e+00 8.394862520898e-01 1.327327871038e+00 1.570521074256e+00 1.199543580278e+00 9.218004306089e-03 1.152688963242e-02 1.131709112234e-01 8.336504120748e-04 1.000000000000e-03 +8.176829658098e-01 1.086967104595e+00 8.176829658098e-01 1.360184884142e+00 1.587043903496e+00 1.370266975986e+00 1.007991539158e-02 1.103425343553e-02 1.107261558758e-01 7.297847919603e-04 1.000000000000e-03 +9.195131354821e-01 1.050438651132e+00 7.939885475833e-01 1.396039313958e+00 1.606033492742e+00 1.574688822482e+00 1.108233395502e-02 1.055668948378e-02 1.083035317152e-01 6.350461029017e-04 1.000000000000e-03 +1.014353370118e+00 1.014353370118e+00 7.694868377954e-01 1.434512293060e+00 1.627862252306e+00 1.790009354272e+00 1.201737302890e-02 1.007037169964e-02 1.057794965411e-01 5.586562984229e-04 1.000000000000e-03 +1.104052824594e+00 9.802600292904e-01 7.455177973868e-01 1.476428922948e+00 1.653976768500e+00 1.976524839335e+00 1.248259589324e-02 9.473138645792e-03 1.025948809953e-01 5.059384937134e-04 1.000000000000e-03 +1.192923960506e+00 9.495091400692e-01 7.232918773267e-01 1.524675435174e+00 1.687538539539e+00 2.090961170123e+00 1.267319859218e-02 9.091416024312e-03 1.005065836667e-01 4.782489576030e-04 1.000000000000e-03 +1.294643329114e+00 9.254486437728e-01 7.055774653037e-01 1.591400811198e+00 1.740803291996e+00 1.532660046737e+00 6.008521988247e-03 5.880484065306e-03 8.083236470421e-02 6.524604083787e-04 1.000000000000e-03 +6.592880282032e-02 1.344960916087e+00 8.632463147484e-01 1.346575832563e+00 1.599518887906e+00 7.229530639530e-01 4.921182577874e-03 1.021058521621e-02 1.065133544898e-01 1.383215660685e-03 1.000000000000e-03 +1.970305897936e-01 1.335501334625e+00 8.594238605484e-01 1.349957357881e+00 1.600310669895e+00 7.475935010263e-01 5.097112757624e-03 1.022704066574e-02 1.065991487653e-01 1.337625325297e-03 1.000000000000e-03 +3.257224536298e-01 1.317075771580e+00 8.518107871974e-01 1.356754843323e+00 1.601987928190e+00 8.014682682590e-01 5.440106264800e-03 1.018151275649e-02 1.063616093882e-01 1.247710033701e-03 1.000000000000e-03 +4.504065298032e-01 1.290815278279e+00 8.405917670280e-01 1.367139394768e+00 1.604887735489e+00 8.874156489450e-01 5.983220743756e-03 1.011344698091e-02 1.060054871793e-01 1.126867664762e-03 1.000000000000e-03 +5.698130105336e-01 1.258398420208e+00 8.261099109503e-01 1.381395472323e+00 1.609568586897e+00 1.013058765502e+00 6.782837894410e-03 1.004310627189e-02 1.056362010334e-01 9.871095676311e-04 1.000000000000e-03 +6.829306390525e-01 1.221692510630e+00 8.087670544992e-01 1.399616679054e+00 1.616487239891e+00 1.189724758353e+00 7.923011285901e-03 9.989299495881e-03 1.053528436355e-01 8.405305453880e-04 1.000000000000e-03 +7.890648378152e-01 1.182581701991e+00 7.890648378152e-01 1.421661985199e+00 1.625960060529e+00 1.423473141202e+00 9.435052544299e-03 9.942287217653e-03 1.051046421306e-01 7.025071081814e-04 1.000000000000e-03 +8.880138304412e-01 1.142857216510e+00 7.676939760236e-01 1.447304798715e+00 1.638305594572e+00 1.696318858507e+00 1.112152777744e-02 9.834407949013e-03 1.045328653742e-01 5.895118096371e-04 1.000000000000e-03 +9.802600292904e-01 1.104052824594e+00 7.455177973868e-01 1.476428922948e+00 1.653976768500e+00 1.976524839335e+00 1.248259589324e-02 9.473138645792e-03 1.025948809953e-01 5.059384937134e-04 1.000000000000e-03 +1.067213435118e+00 1.067213435118e+00 7.233361674103e-01 1.509267713890e+00 1.673649976332e+00 2.251837144882e+00 1.364568985306e-02 9.089704744463e-03 1.004971240300e-01 4.440818476917e-04 1.000000000000e-03 +1.153039319625e+00 1.032936857347e+00 7.017987214843e-01 1.548049813110e+00 1.699699876256e+00 2.297642445977e+00 1.291270964554e-02 8.429973298162e-03 9.678138766291e-02 4.352287283649e-04 1.000000000000e-03 +1.254854971374e+00 1.006517982826e+00 6.847713183369e-01 1.608645221587e+00 1.748328117760e+00 1.374574734162e+00 4.286414628282e-03 4.677535373398e-03 7.209203510789e-02 7.274977308597e-04 1.000000000000e-03 +6.490656965719e-02 1.466257821884e+00 8.491323997058e-01 1.467693722484e+00 1.695626932804e+00 6.062470187133e-01 3.625131766219e-03 8.969442292464e-03 9.983009061213e-02 1.649492647605e-03 1.000000000000e-03 +1.937976245685e-01 1.455113460470e+00 8.446325348486e-01 1.467962091517e+00 1.693610587194e+00 6.332878750210e-01 3.822175624372e-03 9.053171018580e-03 1.002949595420e-01 1.579060707529e-03 1.000000000000e-03 +3.198395015379e-01 1.433597458347e+00 8.357768441223e-01 1.468842734715e+00 1.689976897030e+00 6.914072014261e-01 4.207719858567e-03 9.128600012890e-03 1.007119104337e-01 1.446325693365e-03 1.000000000000e-03 +4.412805355857e-01 1.403204210522e+00 8.229410200483e-01 1.470955664701e+00 1.685509563898e+00 7.859568510859e-01 4.832671658811e-03 9.223162159857e-03 1.012321982148e-01 1.272334478182e-03 1.000000000000e-03 +5.568258523935e-01 1.366017705788e+00 8.067348567609e-01 1.475147247708e+00 1.681332962721e+00 9.260192904560e-01 5.779637366267e-03 9.362068521415e-03 1.019916582723e-01 1.079891110592e-03 1.000000000000e-03 +6.655840150743e-01 1.324283316631e+00 7.878658606411e-01 1.482136425512e+00 1.678529415349e+00 1.121648662096e+00 7.138684173176e-03 9.546684823533e-03 1.029923666186e-01 8.915447713651e-04 1.000000000000e-03 +7.671214493751e-01 1.280177786094e+00 7.671214493751e-01 1.492424363946e+00 1.678036292871e+00 1.381982514719e+00 8.815347492348e-03 9.568153791880e-03 1.031081082698e-01 7.235981565246e-04 1.000000000000e-03 +8.615339747593e-01 1.235779076697e+00 7.453316303499e-01 1.506449705788e+00 1.680746844491e+00 1.713513572033e+00 1.069527559836e-02 9.362583208782e-03 1.019944617711e-01 5.835961945801e-04 1.000000000000e-03 +9.495091400692e-01 1.192923960506e+00 7.232918773267e-01 1.524675435174e+00 1.687538539539e+00 2.090961170124e+00 1.267319859218e-02 9.091416024312e-03 1.005065836667e-01 4.782489576030e-04 1.000000000000e-03 +1.032936857347e+00 1.153039319625e+00 7.017987214843e-01 1.548049813110e+00 1.699699876256e+00 2.297642445977e+00 1.291270964554e-02 8.429973298162e-03 9.678138766291e-02 4.352287283649e-04 1.000000000000e-03 +1.117806969241e+00 1.117806969241e+00 6.820608308668e-01 1.580817776016e+00 1.721682844769e+00 1.849141598927e+00 7.801262938981e-03 6.328284656655e-03 8.385360693663e-02 5.407914680955e-04 1.000000000000e-03 +1.223509073280e+00 1.093410852323e+00 6.680440732049e-01 1.640890533940e+00 1.771667188870e+00 1.001630601892e+00 1.834343250417e-03 2.747035554254e-03 5.524727800488e-02 9.983720526423e-04 1.000000000000e-03 +6.543810294358e-02 1.601280409531e+00 8.558616643000e-01 1.602616952133e+00 1.816832486413e+00 5.355668834531e-01 2.134241820419e-03 5.977521817608e-03 8.149656991833e-02 1.867180423017e-03 1.000000000000e-03 +1.949966110315e-01 1.587759557766e+00 8.494963814940e-01 1.599688748348e+00 1.811255971353e+00 5.655938521239e-01 2.310970112305e-03 6.128877029764e-03 8.252189628459e-02 1.768053164377e-03 1.000000000000e-03 +3.205856847968e-01 1.562045660895e+00 8.373278875865e-01 1.594603972157e+00 1.801077405152e+00 6.297049527655e-01 2.627017794599e-03 6.257734951254e-03 8.338488373037e-02 1.588045314886e-03 1.000000000000e-03 +4.400644077378e-01 1.526387798595e+00 8.203186901819e-01 1.588557960749e+00 1.787858816607e+00 7.298602155055e-01 3.148385439480e-03 6.470524161875e-03 8.479075003190e-02 1.370125372990e-03 1.000000000000e-03 +5.521820047680e-01 1.483645056167e+00 7.997222988291e-01 1.583069050635e+00 1.773601808276e+00 8.691015335352e-01 3.894431745073e-03 6.721478897693e-03 8.641938374188e-02 1.150613549066e-03 1.000000000000e-03 +6.564056432539e-01 1.436704731948e+00 7.768281403543e-01 1.579553372095e+00 1.760241692196e+00 1.045370944752e+00 4.812862277301e-03 6.905963335019e-03 8.759733211957e-02 9.565982343591e-04 1.000000000000e-03 +7.528170305330e-01 1.388073832062e+00 7.528170305330e-01 1.579076453094e+00 1.749347285754e+00 1.249101335458e+00 5.715604024385e-03 6.863659331078e-03 8.732862157187e-02 8.005755590946e-04 1.000000000000e-03 +8.420175437379e-01 1.339927156580e+00 7.287085233619e-01 1.582529092593e+00 1.742244081902e+00 1.447301858080e+00 6.283886414010e-03 6.512690886419e-03 8.506658102411e-02 6.909408665629e-04 1.000000000000e-03 +9.254486437728e-01 1.294643329114e+00 7.055774653037e-01 1.591400811198e+00 1.740803291996e+00 1.532660046737e+00 6.008521988247e-03 5.880484065306e-03 8.083236470421e-02 6.524604083787e-04 1.000000000000e-03 +1.006517982826e+00 1.254854971374e+00 6.847713183369e-01 1.608645221587e+00 1.748328117760e+00 1.374574734162e+00 4.286414628282e-03 4.677535373398e-03 7.209203510789e-02 7.274977308597e-04 1.000000000000e-03 +1.093410852323e+00 1.223509073280e+00 6.680440732049e-01 1.640890533940e+00 1.771667188870e+00 1.001630601892e+00 1.834343250417e-03 2.747035554254e-03 5.524727800488e-02 9.983720526423e-04 1.000000000000e-03 +1.204939320086e+00 1.204939320086e+00 6.579451172730e-01 1.704041528302e+00 1.826649749548e+00 6.174631320618e-01 4.584291786793e-04 1.113659637820e-03 3.517669111184e-02 1.619529892677e-03 1.000000000000e-03 +8.129674901507e-02 8.129674901507e-02 1.365026826285e+00 1.149709650340e-01 1.369860050983e+00 3.268656301899e-01 4.412251070888e-03 2.024800405747e-02 1.499926074381e-01 3.059361118571e-03 1.000000000000e-03 +2.427195460667e-01 8.084220105216e-02 1.353235867777e+00 2.558285353782e-01 1.377205704807e+00 3.434614561681e-01 4.561001096006e-03 1.991927047750e-02 1.487700331141e-01 2.911534852139e-03 1.000000000000e-03 +4.000899330102e-01 7.990258490470e-02 1.328951817877e+00 4.079906586805e-01 1.390168806947e+00 3.815693148208e-01 4.893217504283e-03 1.923589233026e-02 1.461958060284e-01 2.620755813317e-03 1.000000000000e-03 +5.508652899948e-01 7.853283421262e-02 1.292309462142e+00 5.564350579992e-01 1.407012338152e+00 4.406593123166e-01 5.430569075066e-03 1.848560415023e-02 1.433162941432e-01 2.269326829252e-03 1.000000000000e-03 +6.934545992361e-01 7.678903568998e-02 1.244585980340e+00 6.976932257117e-01 1.426804156030e+00 5.238804842355e-01 6.184764171381e-03 1.770851661063e-02 1.402716278061e-01 1.908832319759e-03 1.000000000000e-03 +8.265975826541e-01 7.467368223126e-02 1.188005778343e+00 8.299636874392e-01 1.449205800376e+00 6.328834947113e-01 7.059702545990e-03 1.673223256330e-02 1.363501724047e-01 1.580069646873e-03 1.000000000000e-03 +9.497049526125e-01 7.214282992530e-02 1.125779209258e+00 9.524411188763e-01 1.474626363837e+00 7.612979572913e-01 7.894117050175e-03 1.555393057587e-02 1.314615726526e-01 1.313546148945e-03 1.000000000000e-03 +1.063470849840e+00 6.922611054622e-02 1.063470849840e+00 1.065721587865e+00 1.505567252334e+00 8.691217708911e-01 8.160484157316e-03 1.408401750588e-02 1.250955968045e-01 1.150586757221e-03 1.000000000000e-03 +1.170347280862e+00 6.624062416669e-02 1.008302717297e+00 1.172220362436e+00 1.546213099097e+00 9.518402303401e-01 7.524429070652e-03 1.185770809660e-02 1.147834100315e-01 1.050596484709e-03 1.000000000000e-03 +1.276407817314e+00 6.379466977995e-02 9.670498751036e-01 1.278001046945e+00 1.602645355944e+00 9.142735026360e-01 6.009757009697e-03 9.859889287566e-03 1.046682021520e-01 1.093764608858e-03 1.000000000000e-03 +1.388637024867e+00 6.247913831093e-02 9.452165486884e-01 1.390041880504e+00 1.680967207732e+00 8.114045646364e-01 4.852796124912e-03 8.971103324554e-03 9.983933384612e-02 1.232430828693e-03 1.000000000000e-03 +1.511747493122e+00 6.226367886473e-02 9.411571745653e-01 1.513029163191e+00 1.781862530024e+00 7.547646008263e-01 3.103112203385e-03 6.167046387685e-03 8.277846195777e-02 1.324916402949e-03 1.000000000000e-03 +8.084220105216e-02 2.427195460667e-01 1.353235867777e+00 2.558285353782e-01 1.377205704807e+00 3.434614561681e-01 4.561001096006e-03 1.991927047750e-02 1.487700331141e-01 2.911534852139e-03 1.000000000000e-03 +2.412786202881e-01 2.412786202881e-01 1.341297269427e+00 3.412194971222e-01 1.384019187073e+00 3.613336658286e-01 4.727202371939e-03 1.962397702868e-02 1.476631941980e-01 2.767525128629e-03 1.000000000000e-03 +3.977259226431e-01 2.384730999897e-01 1.317106755366e+00 4.637405836899e-01 1.396361534128e+00 3.999382461205e-01 5.075355447087e-03 1.903552171986e-02 1.454323887198e-01 2.500386021343e-03 1.000000000000e-03 +5.477783933652e-01 2.344329126219e-01 1.280887767293e+00 5.958355131730e-01 1.412690139825e+00 4.597447597017e-01 5.625382917006e-03 1.835382393697e-02 1.428045437223e-01 2.175119952751e-03 1.000000000000e-03 +6.896983607286e-01 2.292348071855e-01 1.233924564050e+00 7.267960000007e-01 1.432062238656e+00 5.444700215859e-01 6.388065834227e-03 1.759894644600e-02 1.398369941753e-01 1.836648411031e-03 1.000000000000e-03 +8.222095263211e-01 2.228932477459e-01 1.178484326317e+00 8.518860869059e-01 1.454144151190e+00 6.548417916230e-01 7.269200899363e-03 1.665104684602e-02 1.360189808896e-01 1.527086408950e-03 1.000000000000e-03 +9.446219722581e-01 2.153403498435e-01 1.117887905520e+00 9.688560970255e-01 1.479309131335e+00 7.847612751356e-01 8.099952312561e-03 1.548232418418e-02 1.311586155267e-01 1.274272867029e-03 1.000000000000e-03 +1.057505156566e+00 2.067220437504e-01 1.057505156566e+00 1.077520839491e+00 1.509757700991e+00 8.982693625722e-01 8.356376492221e-03 1.395412696971e-02 1.245174105172e-01 1.113251816957e-03 1.000000000000e-03 +1.163572208273e+00 1.979474687855e-01 1.003799810096e+00 1.180289576445e+00 1.549418453166e+00 9.792322698850e-01 7.742933125135e-03 1.186071991793e-02 1.147979864222e-01 1.021208175786e-03 1.000000000000e-03 +1.268791875367e+00 1.906994493147e-01 9.630664597915e-01 1.283042907688e+00 1.604274324716e+00 9.422061735044e-01 6.213128253088e-03 9.891351427860e-03 1.048350631964e-01 1.061338832329e-03 1.000000000000e-03 +1.379695390770e+00 1.866336474901e-01 9.407003196342e-01 1.392261286428e+00 1.680270389267e+00 8.464019021195e-01 5.120356838817e-03 9.074336008687e-03 1.004121285762e-01 1.181471825023e-03 1.000000000000e-03 +1.501128392218e+00 1.857099051805e-01 9.351533819682e-01 1.512572186312e+00 1.778310002955e+00 7.912542586118e-01 3.350186071698e-03 6.351029460951e-03 8.400416299837e-02 1.263816262745e-03 1.000000000000e-03 +7.990258490470e-02 4.000899330102e-01 1.328951817877e+00 4.079906586805e-01 1.390168806947e+00 3.815693148208e-01 4.893217504283e-03 1.923589233026e-02 1.461958060284e-01 2.620755813317e-03 1.000000000000e-03 +2.384730999897e-01 3.977259226431e-01 1.317106755366e+00 4.637405836899e-01 1.396361534128e+00 3.999382461205e-01 5.075355447087e-03 1.903552171986e-02 1.454323887198e-01 2.500386021343e-03 1.000000000000e-03 +3.932051784536e-01 3.932051784536e-01 1.293372914480e+00 5.560760961644e-01 1.407847335699e+00 4.394584323393e-01 5.439981867951e-03 1.856824719119e-02 1.436362968333e-01 2.275528073672e-03 1.000000000000e-03 +5.417494202467e-01 3.866575619294e-01 1.258165268543e+00 6.655798258172e-01 1.423367959280e+00 5.013833498521e-01 6.011607182371e-03 1.798506228062e-02 1.413626631541e-01 1.994481867607e-03 1.000000000000e-03 +6.822745565445e-01 3.781383534598e-01 1.212910345700e+00 7.800558857321e-01 1.442095243585e+00 5.890264760672e-01 6.778797676044e-03 1.726271556069e-02 1.384947474363e-01 1.697716555420e-03 1.000000000000e-03 +8.134642273388e-01 3.676708372428e-01 1.159901534316e+00 8.926958573438e-01 1.463652097675e+00 7.021434004773e-01 7.651544257747e-03 1.634611445300e-02 1.347677609528e-01 1.424210495064e-03 1.000000000000e-03 +9.344539005368e-01 3.552556576459e-01 1.102529972862e+00 9.997052938330e-01 1.488281900574e+00 8.353450433376e-01 8.450394454291e-03 1.517407900188e-02 1.298464007197e-01 1.197110113929e-03 1.000000000000e-03 +1.045733458648e+00 3.413140138209e-01 1.045733458648e+00 1.100024419077e+00 1.517765525074e+00 9.577080109889e-01 8.688119221084e-03 1.360767444993e-02 1.229619383293e-01 1.044159585725e-03 1.000000000000e-03 +1.150328667086e+00 3.272461487136e-01 9.947632368294e-01 1.195970770616e+00 1.555602771120e+00 1.036915855887e+00 8.121246056575e-03 1.174817514430e-02 1.142520369101e-01 9.643984073757e-04 1.000000000000e-03 +1.253897867818e+00 3.154477305142e-01 9.550618739851e-01 1.292968342073e+00 1.607454607989e+00 1.004913731125e+00 6.624779957316e-03 9.888580112094e-03 1.048203760519e-01 9.951102955677e-04 1.000000000000e-03 +1.362338852483e+00 3.083352685409e-01 9.317656069060e-01 1.396795542237e+00 1.679054773682e+00 9.198562424836e-01 5.634525805361e-03 9.188162582038e-03 1.010399402989e-01 1.087126394120e-03 1.000000000000e-03 +1.480816504718e+00 3.059345046369e-01 9.236158899365e-01 1.512089098491e+00 1.771857712661e+00 8.660427328443e-01 3.766405165215e-03 6.523474574133e-03 8.513697834884e-02 1.154677433428e-03 1.000000000000e-03 +7.853283421262e-02 5.508652899948e-01 1.292309462142e+00 5.564350579992e-01 1.407012338152e+00 4.406593123166e-01 5.430569075066e-03 1.848560415023e-02 1.433162941432e-01 2.269326829252e-03 1.000000000000e-03 +2.344329126219e-01 5.477783933652e-01 1.280887767293e+00 5.958355131730e-01 1.412690139825e+00 4.597447597017e-01 5.625382917006e-03 1.835382393697e-02 1.428045437223e-01 2.175119952751e-03 1.000000000000e-03 +3.866575619294e-01 5.417494202467e-01 1.258165268543e+00 6.655798258172e-01 1.423367959280e+00 5.013833498521e-01 6.011607182371e-03 1.798506228062e-02 1.413626631541e-01 1.994481867607e-03 1.000000000000e-03 +5.328709578226e-01 5.328709578226e-01 1.224804744310e+00 7.535933355474e-01 1.438071478428e+00 5.667675351850e-01 6.595287249679e-03 1.745500625982e-02 1.392639630335e-01 1.764391814845e-03 1.000000000000e-03 +6.712488482019e-01 5.212368848228e-01 1.182377717789e+00 8.498605216812e-01 1.456118118092e+00 6.581659673552e-01 7.359978055620e-03 1.677383461164e-02 1.365195737356e-01 1.519373607266e-03 1.000000000000e-03 +8.003647430270e-01 5.068716274082e-01 1.133178119548e+00 9.473661217037e-01 1.477022416612e+00 7.752937246721e-01 8.198947007324e-03 1.586291765252e-02 1.327609282069e-01 1.289833734206e-03 1.000000000000e-03 +9.192980541230e-01 4.899438587439e-01 1.080533449336e+00 1.041707203122e+00 1.500901872931e+00 9.115285738940e-01 8.918715257812e-03 1.467652607923e-02 1.276998480780e-01 1.097058313518e-03 1.000000000000e-03 +1.028602387866e+00 4.712775715951e-01 1.028602387866e+00 1.131426277675e+00 1.529100485297e+00 1.042348190135e+00 9.147609645967e-03 1.316394521410e-02 1.209405051810e-01 9.593723186403e-04 1.000000000000e-03 +1.131322484528e+00 4.526051947345e-01 9.813317522683e-01 1.218499908206e+00 1.564529972327e+00 1.121880358256e+00 8.624994772169e-03 1.153197135777e-02 1.131958546442e-01 8.913606452250e-04 1.000000000000e-03 +1.232546706303e+00 4.365971604806e-01 9.431582898824e-01 1.307588797657e+00 1.612245646150e+00 1.107525806278e+00 7.301247988693e-03 9.888593043121e-03 1.048204445872e-01 9.029134981156e-04 1.000000000000e-03 +1.337640979816e+00 4.260618971927e-01 9.187365206375e-01 1.403856164684e+00 1.677763071913e+00 1.036377402053e+00 6.455032921571e-03 9.342686711592e-03 1.018860295275e-01 9.648994642482e-04 1.000000000000e-03 +1.452459295838e+00 4.211871957204e-01 9.074057842127e-01 1.512295162958e+00 1.763638828425e+00 9.759409679073e-01 4.362858745987e-03 6.705618817308e-03 8.631736543006e-02 1.024652138689e-03 1.000000000000e-03 +7.678903568998e-02 6.934545992361e-01 1.244585980340e+00 6.976932257117e-01 1.426804156030e+00 5.238804842355e-01 6.184764171381e-03 1.770851661063e-02 1.402716278061e-01 1.908832319759e-03 1.000000000000e-03 +2.292348071855e-01 6.896983607286e-01 1.233924564050e+00 7.267960000007e-01 1.432062238656e+00 5.444700215859e-01 6.388065834227e-03 1.759894644600e-02 1.398369941753e-01 1.836648411031e-03 1.000000000000e-03 +3.781383534598e-01 6.822745565445e-01 1.212910345700e+00 7.800558857321e-01 1.442095243585e+00 5.890264760672e-01 6.778797676044e-03 1.726271556069e-02 1.384947474363e-01 1.697716555420e-03 1.000000000000e-03 +5.212368848228e-01 6.712488482019e-01 1.182377717789e+00 8.498605216812e-01 1.456118118092e+00 6.581659673552e-01 7.359978055620e-03 1.677383461164e-02 1.365195737356e-01 1.519373607266e-03 1.000000000000e-03 +6.567064736063e-01 6.567064736063e-01 1.143960730195e+00 9.287232014723e-01 1.473490053302e+00 7.537006390600e-01 8.085461841730e-03 1.609152511496e-02 1.337141441657e-01 1.326786721645e-03 1.000000000000e-03 +7.830856691585e-01 6.387509447545e-01 1.099925008405e+00 1.010557239678e+00 1.493673645339e+00 8.748039759151e-01 8.850455777216e-03 1.517560965808e-02 1.298529495582e-01 1.143113231686e-03 1.000000000000e-03 +8.996155885726e-01 6.178877525311e-01 1.053203146443e+00 1.091372293001e+00 1.516683997941e+00 1.013209020788e+00 9.457828429045e-03 1.400179267308e-02 1.247298978374e-01 9.869631828016e-04 1.000000000000e-03 +1.006911774570e+00 5.952962571982e-01 1.006911774570e+00 1.169721742810e+00 1.543411894917e+00 1.147889986788e+00 9.684859966640e-03 1.265564654903e-02 1.185825851418e-01 8.711636232652e-04 1.000000000000e-03 +1.107612449498e+00 5.727946728954e-01 9.639221108131e-01 1.246955923672e+00 1.576085312188e+00 1.235836971653e+00 9.247376119921e-03 1.122402428318e-02 1.116742499076e-01 8.091682179266e-04 1.000000000000e-03 +1.205983782141e+00 5.529446082486e-01 9.276844804483e-01 1.326704421707e+00 1.618870939217e+00 1.257040031465e+00 8.287200943221e-03 9.888946337167e-03 1.048223170532e-01 7.955196135117e-04 1.000000000000e-03 +1.307150433121e+00 5.386256755352e-01 9.021973537173e-01 1.413775043334e+00 1.677116554748e+00 1.202500683800e+00 7.613799585492e-03 9.497457699689e-03 1.027264852773e-01 8.316003587123e-04 1.000000000000e-03 +1.418139600977e+00 5.303611276441e-01 8.876523563570e-01 1.514068312057e+00 1.755086766893e+00 1.117189143742e+00 5.089842583569e-03 6.833904462927e-03 8.713912543186e-02 8.951035781196e-04 1.000000000000e-03 +7.467368223126e-02 8.265975826541e-01 1.188005778343e+00 8.299636874392e-01 1.449205800376e+00 6.328834947113e-01 7.059702545990e-03 1.673223256330e-02 1.363501724047e-01 1.580069646873e-03 1.000000000000e-03 +2.228932477459e-01 8.222095263211e-01 1.178484326317e+00 8.518860869059e-01 1.454144151190e+00 6.548417916230e-01 7.269200899363e-03 1.665104684602e-02 1.360189808896e-01 1.527086408950e-03 1.000000000000e-03 +3.676708372428e-01 8.134642273388e-01 1.159901534316e+00 8.926958573438e-01 1.463652097675e+00 7.021434004773e-01 7.651544257747e-03 1.634611445300e-02 1.347677609528e-01 1.424210495064e-03 1.000000000000e-03 +5.068716274082e-01 8.003647430270e-01 1.133178119548e+00 9.473661217037e-01 1.477022416612e+00 7.752937246721e-01 8.198947007324e-03 1.586291765252e-02 1.327609282069e-01 1.289833734206e-03 1.000000000000e-03 +6.387509447545e-01 7.830856691585e-01 1.099925008405e+00 1.010557239678e+00 1.493673645339e+00 8.748039759151e-01 8.850455777216e-03 1.517560965808e-02 1.298529495582e-01 1.143113231686e-03 1.000000000000e-03 +7.620254788696e-01 7.620254788696e-01 1.062134515577e+00 1.077666767091e+00 1.513107858043e+00 9.978778006765e-01 9.490134490388e-03 1.426547591893e-02 1.258988832310e-01 1.002126712632e-03 1.000000000000e-03 +8.761406937612e-01 7.380264537571e-01 1.021972709290e+00 1.145559060769e+00 1.535165717518e+00 1.135684400057e+00 9.992289916662e-03 1.319771133093e-02 1.210955147849e-01 8.805263151889e-04 1.000000000000e-03 +9.815887052312e-01 7.124006989306e-01 9.815887052312e-01 1.212860726578e+00 1.560303665416e+00 1.271702051394e+00 1.022810220115e-02 1.206426716454e-02 1.157788464873e-01 7.863477132113e-04 1.000000000000e-03 +1.080304183965e+00 6.868269924762e-01 9.430941610296e-01 1.280151728306e+00 1.590036176964e+00 1.385195348735e+00 1.004955990916e-02 1.088246497326e-02 1.099619377242e-01 7.219198367315e-04 1.000000000000e-03 +1.175609025319e+00 6.635299945133e-01 9.090969277711e-01 1.349936529630e+00 1.627509096169e+00 1.456592627898e+00 9.599676966886e-03 9.885753349660e-03 1.048053929362e-01 6.865337506503e-04 1.000000000000e-03 +1.272600348991e+00 6.451971592202e-01 8.828657922736e-01 1.426811488081e+00 1.677868597264e+00 1.425638633191e+00 9.032264740145e-03 9.503388021896e-03 1.027585520739e-01 7.014400260478e-04 1.000000000000e-03 +1.379943112132e+00 6.328888137222e-01 8.654932401105e-01 1.518153893140e+00 1.747532486660e+00 1.282679069200e+00 5.798781339222e-03 6.781253563495e-03 8.680280054043e-02 7.796182412361e-04 1.000000000000e-03 +7.214282992530e-02 9.497049526125e-01 1.125779209258e+00 9.524411188763e-01 1.474626363837e+00 7.612979572913e-01 7.894117050175e-03 1.555393057587e-02 1.314615726526e-01 1.313546148945e-03 1.000000000000e-03 +2.153403498435e-01 9.446219722581e-01 1.117887905520e+00 9.688560970255e-01 1.479309131335e+00 7.847612751355e-01 8.099952312561e-03 1.548232418418e-02 1.311586155267e-01 1.274272867029e-03 1.000000000000e-03 +3.552556576459e-01 9.344539005368e-01 1.102529972862e+00 9.997052938330e-01 1.488281900574e+00 8.353450433376e-01 8.450394454291e-03 1.517407900188e-02 1.298464007197e-01 1.197110113929e-03 1.000000000000e-03 +4.899438587439e-01 9.192980541230e-01 1.080533449336e+00 1.041707203122e+00 1.500901872931e+00 9.115285738940e-01 8.918715257812e-03 1.467652607923e-02 1.276998480780e-01 1.097058313518e-03 1.000000000000e-03 +6.178877525311e-01 8.996155885726e-01 1.053203146443e+00 1.091372293001e+00 1.516683997941e+00 1.013209020788e+00 9.457828429045e-03 1.400179267308e-02 1.247298978374e-01 9.869631828016e-04 1.000000000000e-03 +7.380264537571e-01 8.761406937612e-01 1.021972709290e+00 1.145559060769e+00 1.535165717518e+00 1.135684400057e+00 9.992289916662e-03 1.319771133093e-02 1.210955147849e-01 8.805263151889e-04 1.000000000000e-03 +8.498685720436e-01 8.498685720436e-01 9.882908547279e-01 1.201895660819e+00 1.556043698947e+00 1.271863998940e+00 1.045484725337e-02 1.233014763617e-02 1.170476998500e-01 7.862475868753e-04 1.000000000000e-03 +9.536116805747e-01 8.220040978506e-01 9.536116805747e-01 1.258994032635e+00 1.579380008592e+00 1.420621935696e+00 1.082982450477e-02 1.143494715165e-02 1.127186623198e-01 7.039170484931e-04 1.000000000000e-03 +1.050438651132e+00 7.939885475833e-01 9.195131354821e-01 1.316753269783e+00 1.606033492742e+00 1.574688822482e+00 1.108233395502e-02 1.055668948378e-02 1.083035317152e-01 6.350461029017e-04 1.000000000000e-03 +1.142857216510e+00 7.676939760236e-01 8.880138304412e-01 1.376763108945e+00 1.638305594572e+00 1.696318858507e+00 1.112152777744e-02 9.834407949013e-03 1.045328653742e-01 5.895118096371e-04 1.000000000000e-03 +1.235779076697e+00 7.453316303499e-01 8.615339747593e-01 1.443145580184e+00 1.680746844491e+00 1.713513572033e+00 1.069527559836e-02 9.362583208782e-03 1.019944617711e-01 5.835961945801e-04 1.000000000000e-03 +1.339927156580e+00 7.287085233619e-01 8.420175437379e-01 1.525260927500e+00 1.742244081902e+00 1.447301858080e+00 6.283886414010e-03 6.512690886419e-03 8.506658102411e-02 6.909408665629e-04 1.000000000000e-03 +6.922611054622e-02 1.063470849840e+00 1.063470849840e+00 1.065721587865e+00 1.505567252334e+00 8.691217708911e-01 8.160484157316e-03 1.408401750588e-02 1.250955968045e-01 1.150586757221e-03 1.000000000000e-03 +2.067220437504e-01 1.057505156566e+00 1.057505156566e+00 1.077520839491e+00 1.509757700991e+00 8.982693625722e-01 8.356376492221e-03 1.395412696971e-02 1.245174105172e-01 1.113251816957e-03 1.000000000000e-03 +3.413140138209e-01 1.045733458648e+00 1.045733458648e+00 1.100024419077e+00 1.517765525074e+00 9.577080109889e-01 8.688119221084e-03 1.360767444993e-02 1.229619383293e-01 1.044159585725e-03 1.000000000000e-03 +4.712775715951e-01 1.028602387866e+00 1.028602387866e+00 1.131426277675e+00 1.529100485297e+00 1.042348190135e+00 9.147609645967e-03 1.316394521410e-02 1.209405051810e-01 9.593723186403e-04 1.000000000000e-03 +5.952962571982e-01 1.006911774570e+00 1.006911774570e+00 1.169721742810e+00 1.543411894917e+00 1.147889986788e+00 9.684859966640e-03 1.265564654903e-02 1.185825851418e-01 8.711636232652e-04 1.000000000000e-03 +7.124006989306e-01 9.815887052312e-01 9.815887052312e-01 1.212860726578e+00 1.560303665416e+00 1.271702051394e+00 1.022810220115e-02 1.206426716454e-02 1.157788464873e-01 7.863477132113e-04 1.000000000000e-03 +8.220040978506e-01 9.536116805747e-01 9.536116805747e-01 1.258994032635e+00 1.579380008592e+00 1.420621935696e+00 1.082982450477e-02 1.143494715165e-02 1.127186623198e-01 7.039170484931e-04 1.000000000000e-03 +9.240000517663e-01 9.240000517663e-01 9.240000517663e-01 1.306733404841e+00 1.600415035855e+00 1.600704766102e+00 1.154619527958e-02 1.081979218538e-02 1.096448417258e-01 6.247248219515e-04 1.000000000000e-03 +1.019045851185e+00 8.940044556464e-01 8.940044556464e-01 1.355617355131e+00 1.623866490894e+00 1.793208443551e+00 1.221034678811e-02 1.021382664577e-02 1.065302598940e-01 5.576596538992e-04 1.000000000000e-03 +1.109049931063e+00 8.651909314930e-01 8.651909314930e-01 1.406608366791e+00 1.651394091507e+00 1.959174277886e+00 1.250668263013e-02 9.575474809441e-03 1.031475470137e-01 5.104191144644e-04 1.000000000000e-03 +1.198391366680e+00 8.390085616902e-01 8.390085616902e-01 1.462900281743e+00 1.686420054705e+00 2.054618660847e+00 1.256766077990e-02 9.175177627407e-03 1.009685188969e-01 4.867083216249e-04 1.000000000000e-03 +1.300333684171e+00 8.183822969362e-01 8.183822969362e-01 1.536430042055e+00 1.740794892590e+00 1.538123440614e+00 6.168755900769e-03 6.015859070101e-03 8.175749418657e-02 6.501428777398e-04 1.000000000000e-03 +6.624062416669e-02 1.170347280862e+00 1.008302717297e+00 1.172220362436e+00 1.546213099097e+00 9.518402303401e-01 7.524429070652e-03 1.185770809660e-02 1.147834100315e-01 1.050596484709e-03 1.000000000000e-03 +1.979474687855e-01 1.163572208273e+00 1.003799810096e+00 1.180289576445e+00 1.549418453166e+00 9.792322698850e-01 7.742933125135e-03 1.186071991793e-02 1.147979864222e-01 1.021208175786e-03 1.000000000000e-03 +3.272461487136e-01 1.150328667086e+00 9.947632368294e-01 1.195970770616e+00 1.555602771120e+00 1.036915855887e+00 8.121246056575e-03 1.174817514430e-02 1.142520369101e-01 9.643984073757e-04 1.000000000000e-03 +4.526051947345e-01 1.131322484528e+00 9.813317522683e-01 1.218499908206e+00 1.564529972327e+00 1.121880358256e+00 8.624994772169e-03 1.153197135777e-02 1.131958546442e-01 8.913606452250e-04 1.000000000000e-03 +5.727946728954e-01 1.107612449498e+00 9.639221108131e-01 1.246955923672e+00 1.576085312188e+00 1.235836971653e+00 9.247376119921e-03 1.122402428318e-02 1.116742499076e-01 8.091682179266e-04 1.000000000000e-03 +6.868269924762e-01 1.080304183965e+00 9.430941610296e-01 1.280151728306e+00 1.590036176964e+00 1.385195348735e+00 1.004955990916e-02 1.088246497326e-02 1.099619377242e-01 7.219198367315e-04 1.000000000000e-03 +7.939885475833e-01 1.050438651132e+00 9.195131354821e-01 1.316753269783e+00 1.606033492742e+00 1.574688822482e+00 1.108233395502e-02 1.055668948378e-02 1.083035317152e-01 6.350461029017e-04 1.000000000000e-03 +8.940044556464e-01 1.019045851185e+00 8.940044556464e-01 1.355617355131e+00 1.623866490894e+00 1.793208443551e+00 1.221034678811e-02 1.021382664577e-02 1.065302598940e-01 5.576596538992e-04 1.000000000000e-03 +9.872803069993e-01 9.872803069993e-01 8.676139354610e-01 1.396225200022e+00 1.643836594733e+00 2.018943272188e+00 1.312730962242e-02 9.753104361521e-03 1.040998685105e-01 4.953086170254e-04 1.000000000000e-03 +1.075246285938e+00 9.562829596557e-01 8.414032030634e-01 1.438968962261e+00 1.666910622822e+00 2.245278033217e+00 1.389104906807e-02 9.280175236141e-03 1.015446001417e-01 4.453791402249e-04 1.000000000000e-03 +1.161960657065e+00 9.268580347225e-01 8.161644911380e-01 1.486343965944e+00 1.695683597164e+00 2.325069367826e+00 1.354901341025e-02 8.741038180024e-03 9.855082264736e-02 4.300946947381e-04 1.000000000000e-03 +1.263696685220e+00 9.035920146539e-01 7.960401650370e-01 1.553514673630e+00 1.745590955962e+00 1.457388900449e+00 4.971092826364e-03 5.116437511804e-03 7.539847855674e-02 6.861586496862e-04 1.000000000000e-03 +6.379466977995e-02 1.276407817314e+00 9.670498751036e-01 1.278001046945e+00 1.602645355944e+00 9.142735026360e-01 6.009757009697e-03 9.859889287566e-03 1.046682021520e-01 1.093764608858e-03 1.000000000000e-03 +1.906994493147e-01 1.268791875367e+00 9.630664597915e-01 1.283042907688e+00 1.604274324716e+00 9.422061735044e-01 6.213128253088e-03 9.891351427860e-03 1.048350631964e-01 1.061338832329e-03 1.000000000000e-03 +3.154477305142e-01 1.253897867818e+00 9.550618739851e-01 1.292968342073e+00 1.607454607989e+00 1.004913731125e+00 6.624779957316e-03 9.888580112094e-03 1.048203760519e-01 9.951102955677e-04 1.000000000000e-03 +4.365971604806e-01 1.232546706303e+00 9.431582898824e-01 1.307588797657e+00 1.612245646150e+00 1.107525806278e+00 7.301247988693e-03 9.888593043121e-03 1.048204445872e-01 9.029134981156e-04 1.000000000000e-03 +5.529446082486e-01 1.205983782141e+00 9.276844804483e-01 1.326704421707e+00 1.618870939217e+00 1.257040031465e+00 8.287200943221e-03 9.888946337167e-03 1.048223170532e-01 7.955196135117e-04 1.000000000000e-03 +6.635299945133e-01 1.175609025319e+00 9.090969277711e-01 1.349936529630e+00 1.627509096169e+00 1.456592627898e+00 9.599676966886e-03 9.885753349660e-03 1.048053929362e-01 6.865337506503e-04 1.000000000000e-03 +7.676939760236e-01 1.142857216510e+00 8.880138304412e-01 1.376763108945e+00 1.638305594572e+00 1.696318858507e+00 1.112152777744e-02 9.834407949013e-03 1.045328653742e-01 5.895118096371e-04 1.000000000000e-03 +8.651909314930e-01 1.109049931063e+00 8.651909314930e-01 1.406608366791e+00 1.651394091507e+00 1.959174277886e+00 1.250668263013e-02 9.575474809441e-03 1.031475470137e-01 5.104191144644e-04 1.000000000000e-03 +9.562829596557e-01 1.075246285938e+00 8.414032030634e-01 1.438968962261e+00 1.666910622822e+00 2.245278033217e+00 1.389104906807e-02 9.280175236141e-03 1.015446001417e-01 4.453791402249e-04 1.000000000000e-03 +1.042248641364e+00 1.042248641364e+00 8.173733086010e-01 1.473962163982e+00 1.685426826197e+00 2.476902956043e+00 1.462932060890e-02 8.859443144440e-03 9.921605573719e-02 4.037299877092e-04 1.000000000000e-03 +1.128115221185e+00 1.011231070120e+00 7.942060883177e-01 1.515002385954e+00 1.710554161717e+00 2.177539414007e+00 1.070338896958e-02 7.373039197861e-03 9.051113619550e-02 4.592339378876e-04 1.000000000000e-03 +1.232747497838e+00 9.882726896745e-01 7.768084067885e-01 1.579983956432e+00 1.760619380627e+00 1.195040731370e+00 2.815238107385e-03 3.533651239014e-03 6.266002836306e-02 8.367915617852e-04 1.000000000000e-03 +6.247913831093e-02 1.388637024867e+00 9.452165486884e-01 1.390041880504e+00 1.680967207732e+00 8.114045646364e-01 4.852796124912e-03 8.971103324554e-03 9.983933384612e-02 1.232430828693e-03 1.000000000000e-03 +1.866336474901e-01 1.379695390770e+00 9.407003196342e-01 1.392261286428e+00 1.680270389267e+00 8.464019021195e-01 5.120356838817e-03 9.074336008687e-03 1.004121285762e-01 1.181471825023e-03 1.000000000000e-03 +3.083352685409e-01 1.362338852483e+00 9.317656069060e-01 1.396795542237e+00 1.679054773682e+00 9.198562424836e-01 5.634525805361e-03 9.188162582038e-03 1.010399402989e-01 1.087126394120e-03 1.000000000000e-03 +4.260618971927e-01 1.337640979816e+00 9.187365206375e-01 1.403856164684e+00 1.677763071913e+00 1.036377402053e+00 6.455032921571e-03 9.342686711592e-03 1.018860295275e-01 9.648994642482e-04 1.000000000000e-03 +5.386256755352e-01 1.307150433121e+00 9.021973537173e-01 1.413775043334e+00 1.677116554748e+00 1.202500683800e+00 7.613799585492e-03 9.497457699689e-03 1.027264852773e-01 8.316003587123e-04 1.000000000000e-03 +6.451971592202e-01 1.272600348991e+00 8.828657922736e-01 1.426811488081e+00 1.677868597264e+00 1.425638633191e+00 9.032264740145e-03 9.503388021896e-03 1.027585520739e-01 7.014400260478e-04 1.000000000000e-03 +7.453316303499e-01 1.235779076697e+00 8.615339747593e-01 1.443145580184e+00 1.680746844491e+00 1.713513572033e+00 1.069527559836e-02 9.362583208782e-03 1.019944617711e-01 5.835961945801e-04 1.000000000000e-03 +8.390085616902e-01 1.198391366680e+00 8.390085616902e-01 1.462900281743e+00 1.686420054705e+00 2.054618660847e+00 1.256766077990e-02 9.175177627407e-03 1.009685188969e-01 4.867083216249e-04 1.000000000000e-03 +9.268580347225e-01 1.161960657065e+00 8.161644911380e-01 1.486343965944e+00 1.695683597164e+00 2.325069367826e+00 1.354901341025e-02 8.741038180024e-03 9.855082264736e-02 4.300946947381e-04 1.000000000000e-03 +1.011231070120e+00 1.128115221185e+00 7.942060883177e-01 1.515002385954e+00 1.710554161717e+00 2.177539414007e+00 1.070338896958e-02 7.373039197861e-03 9.051113619551e-02 4.592339378876e-04 1.000000000000e-03 +1.099323601866e+00 1.099323601866e+00 7.750692994304e-01 1.554678347196e+00 1.737169301525e+00 1.519986195056e+00 4.568366828904e-03 4.508297684313e-03 7.077584085856e-02 6.579007120282e-04 1.000000000000e-03 +1.210181681557e+00 1.080878923812e+00 7.625997339670e-01 1.622602523823e+00 1.792874034773e+00 8.591881431374e-01 1.055580469321e-03 1.842868429492e-03 4.525076340046e-02 1.163889432119e-03 1.000000000000e-03 +6.226367886473e-02 1.511747493122e+00 9.411571745653e-01 1.513029163191e+00 1.781862530024e+00 7.547646008263e-01 3.103112203385e-03 6.167046387685e-03 8.277846195777e-02 1.324916402949e-03 1.000000000000e-03 +1.857099051805e-01 1.501128392218e+00 9.351533819682e-01 1.512572186312e+00 1.778310002955e+00 7.912542586118e-01 3.350186071698e-03 6.351029460951e-03 8.400416299837e-02 1.263816262745e-03 1.000000000000e-03 +3.059345046369e-01 1.480816504718e+00 9.236158899365e-01 1.512089098491e+00 1.771857712661e+00 8.660427328443e-01 3.766405165215e-03 6.523474574133e-03 8.513697834884e-02 1.154677433428e-03 1.000000000000e-03 +4.211871957204e-01 1.452459295838e+00 9.074057842127e-01 1.512295162958e+00 1.763638828425e+00 9.759409679073e-01 4.362858745987e-03 6.705618817308e-03 8.631736543006e-02 1.024652138689e-03 1.000000000000e-03 +5.303611276441e-01 1.418139600977e+00 8.876523563570e-01 1.514068312057e+00 1.755086766893e+00 1.117189143742e+00 5.089842583569e-03 6.833904462927e-03 8.713912543186e-02 8.951035781196e-04 1.000000000000e-03 +6.328888137222e-01 1.379943112132e+00 8.654932401105e-01 1.518153893140e+00 1.747532486660e+00 1.282679069200e+00 5.798781339222e-03 6.781253563495e-03 8.680280054043e-02 7.796182412361e-04 1.000000000000e-03 +7.287085233619e-01 1.339927156580e+00 8.420175437379e-01 1.525260927500e+00 1.742244081902e+00 1.447301858080e+00 6.283886414010e-03 6.512690886419e-03 8.506658102411e-02 6.909408665629e-04 1.000000000000e-03 +8.183822969362e-01 1.300333684171e+00 8.183822969362e-01 1.536430042055e+00 1.740794892590e+00 1.538123440614e+00 6.168755900769e-03 6.015859070101e-03 8.175749418657e-02 6.501428777398e-04 1.000000000000e-03 +9.035920146539e-01 1.263696685220e+00 7.960401650370e-01 1.553514673630e+00 1.745590955962e+00 1.457388900449e+00 4.971092826364e-03 5.116437511804e-03 7.539847855674e-02 6.861586496862e-04 1.000000000000e-03 +9.882726896745e-01 1.232747497838e+00 7.768084067885e-01 1.579983956432e+00 1.760619380627e+00 1.195040731370e+00 2.815238107385e-03 3.533651239014e-03 6.266002836306e-02 8.367915617852e-04 1.000000000000e-03 +1.080878923812e+00 1.210181681557e+00 7.625997339670e-01 1.622602523823e+00 1.792874034773e+00 8.591881431374e-01 1.055580469321e-03 1.842868429492e-03 4.525076340046e-02 1.163889432119e-03 1.000000000000e-03 +1.198241260588e+00 1.198241260588e+00 7.549774042122e-01 1.694569041718e+00 1.855142883452e+00 5.646977548762e-01 3.622110385794e-04 9.621369186924e-04 3.269619275649e-02 1.770858820254e-03 1.000000000000e-03 +7.630594105272e-02 7.630594105272e-02 1.489574777163e+00 1.079128967264e-01 1.493478560288e+00 3.236078908952e-01 3.260983994054e-03 1.511544102819e-02 1.295952718110e-01 3.090159505177e-03 1.000000000000e-03 +2.279898803282e-01 7.591633848748e-02 1.475748032726e+00 2.402970577877e-01 1.495183912459e+00 3.393278809823e-01 3.385130141157e-03 1.496397878369e-02 1.289443410662e-01 2.947002165295e-03 1.000000000000e-03 +3.762678814685e-01 7.510386200228e-02 1.448053825614e+00 3.836901206866e-01 1.498024696254e+00 3.757202673176e-01 3.656954919415e-03 1.459977769707e-02 1.273655181710e-01 2.661554584583e-03 1.000000000000e-03 +5.187384612411e-01 7.390677203284e-02 1.407522977630e+00 5.239769099140e-01 1.501889721211e+00 4.337614804821e-01 4.104957049311e-03 1.419544116071e-02 1.255894597520e-01 2.305414484681e-03 1.000000000000e-03 +6.539305042512e-01 7.239380936358e-02 1.356376023363e+00 6.579255034001e-01 1.507521769255e+00 5.179308238571e-01 4.756707817399e-03 1.377609016000e-02 1.237205190922e-01 1.930759773193e-03 1.000000000000e-03 +7.807658845044e-01 7.059037062518e-02 1.297378946438e+00 7.839504874869e-01 1.515839865386e+00 6.339384166198e-01 5.621391028571e-03 1.330111304473e-02 1.215689701122e-01 1.577440290387e-03 1.000000000000e-03 +8.986415355632e-01 6.852224185870e-02 1.233896793680e+00 9.012501911615e-01 1.527989922913e+00 7.852777850876e-01 6.632457870852e-03 1.266900324344e-02 1.186451443191e-01 1.273434724616e-03 1.000000000000e-03 +1.008302717297e+00 6.624062416669e-02 1.170347280862e+00 1.010476219413e+00 1.546213099097e+00 9.518402303401e-01 7.524429070652e-03 1.185770809660e-02 1.147834100315e-01 1.050596484709e-03 1.000000000000e-03 +1.111915710219e+00 6.384481791227e-02 1.111915710219e+00 1.113747146980e+00 1.573781831780e+00 1.078724521984e+00 7.815488837560e-03 1.086768031821e-02 1.098872165157e-01 9.270207357116e-04 1.000000000000e-03 +1.212914349692e+00 6.163607124851e-02 1.064450496378e+00 1.214479404917e+00 1.614935009283e+00 1.135665123048e+00 7.157605696407e-03 9.453850723001e-03 1.024903828713e-01 8.805412614209e-04 1.000000000000e-03 +1.316679761772e+00 6.008689741434e-02 1.033430331067e+00 1.318050086416e+00 1.674883362945e+00 1.101084815190e+00 6.610739498881e-03 9.005763326785e-03 1.000320133579e-01 9.081952509054e-04 1.000000000000e-03 +1.430085777156e+00 5.928121547195e-02 1.017755915460e+00 1.431313939195e+00 1.756270678451e+00 1.051324174627e+00 4.464358262941e-03 6.369621812213e-03 8.412703233281e-02 9.511813997379e-04 1.000000000000e-03 +7.591633848748e-02 2.279898803282e-01 1.475748032726e+00 2.402970577877e-01 1.495183912459e+00 3.393278809823e-01 3.385130141157e-03 1.496397878369e-02 1.289443410662e-01 2.947002165295e-03 1.000000000000e-03 +2.267585919039e-01 2.267585919039e-01 1.462015768428e+00 3.206850760552e-01 1.496772870257e+00 3.560430161959e-01 3.517812872320e-03 1.482045446322e-02 1.283244778903e-01 2.808649389291e-03 1.000000000000e-03 +3.742266168404e-01 2.243204852877e-01 1.434762508299e+00 4.363086532164e-01 1.499636187911e+00 3.932259393126e-01 3.801879933063e-03 1.450265440160e-02 1.269411692329e-01 2.543067229360e-03 1.000000000000e-03 +5.160623458897e-01 2.207826495233e-01 1.395048523246e+00 5.613067995096e-01 1.503737246126e+00 4.525076619204e-01 4.264639527181e-03 1.413668724110e-02 1.253292873509e-01 2.209907332300e-03 1.000000000000e-03 +6.507396204496e-01 2.162900742030e-01 1.344987562612e+00 6.857429910846e-01 1.509713546804e+00 5.385667175713e-01 4.933741081869e-03 1.374130888774e-02 1.235642382989e-01 1.856780167385e-03 1.000000000000e-03 +7.771014912182e-01 2.109139225528e-01 1.287323269750e+00 8.052151329801e-01 1.518411212821e+00 6.571487577045e-01 5.814873957337e-03 1.327296267967e-02 1.214402581962e-01 1.521725466686e-03 1.000000000000e-03 +8.945961223218e-01 2.047476209810e-01 1.225420072392e+00 9.177275251242e-01 1.530972946917e+00 8.100004310845e-01 6.831858717718e-03 1.265158348479e-02 1.185635482899e-01 1.234567244194e-03 1.000000000000e-03 +1.003799810096e+00 1.979474687855e-01 1.163572208273e+00 1.023131105551e+00 1.549418453166e+00 9.792322698850e-01 7.742933125135e-03 1.186071991793e-02 1.147979864222e-01 1.021208175786e-03 1.000000000000e-03 +1.106715464272e+00 1.908358166265e-01 1.106715464272e+00 1.123048274905e+00 1.576723357671e+00 1.109123704971e+00 8.011150621936e-03 1.083443251555e-02 1.097189972184e-01 9.016126835247e-04 1.000000000000e-03 +1.206876174523e+00 1.842782033153e-01 1.060150968893e+00 1.220863856803e+00 1.616919488933e+00 1.174130940601e+00 7.459339961738e-03 9.529609991270e-03 1.029002213110e-01 8.516937638049e-04 1.000000000000e-03 +1.309603655166e+00 1.795714094445e-01 1.028912315955e+00 1.321857641622e+00 1.675102438252e+00 1.143910079484e+00 6.955349439950e-03 9.120493251206e-03 1.006671812967e-01 8.741945874371e-04 1.000000000000e-03 +1.421993301426e+00 1.769989334638e-01 1.012303580495e+00 1.432966702945e+00 1.754466332202e+00 1.085076913543e+00 4.700243882661e-03 6.497572417213e-03 8.496778747275e-02 9.215936561905e-04 1.000000000000e-03 +7.510386200228e-02 3.762678814685e-01 1.448053825614e+00 3.836901206866e-01 1.498024696254e+00 3.757202673176e-01 3.656954919415e-03 1.459977769707e-02 1.273655181710e-01 2.661554584583e-03 1.000000000000e-03 +2.243204852877e-01 3.742266168404e-01 1.434762508299e+00 4.363086532164e-01 1.499636187911e+00 3.932259393126e-01 3.801879933063e-03 1.450265440160e-02 1.269411692329e-01 2.543067229360e-03 1.000000000000e-03 +3.702783628087e-01 3.702783628087e-01 1.408542261772e+00 5.236526825373e-01 1.502731990451e+00 4.320888479564e-01 4.103669873734e-03 1.424592381802e-02 1.258125758509e-01 2.314338832695e-03 1.000000000000e-03 +5.108386302069e-01 3.645753399285e-01 1.370482244304e+00 6.275916543387e-01 1.507346299478e+00 4.942130242060e-01 4.589891529614e-03 1.393091026988e-02 1.244137821496e-01 2.023418953004e-03 1.000000000000e-03 +6.444248431329e-01 3.572657420984e-01 1.322623506139e+00 7.368325379107e-01 1.514019526927e+00 5.844019064159e-01 5.287744309360e-03 1.357219471217e-02 1.228015323473e-01 1.711151159880e-03 1.000000000000e-03 +7.698240001369e-01 3.484732366630e-01 1.267659888161e+00 8.450222410430e-01 1.523490787603e+00 7.079545229466e-01 6.190732165912e-03 1.311680051173e-02 1.207237457620e-01 1.412520109114e-03 1.000000000000e-03 +8.864980510889e-01 3.383772957955e-01 1.208881648692e+00 9.488824947770e-01 1.536806048088e+00 8.644395695503e-01 7.216036831176e-03 1.252147128387e-02 1.179523033729e-01 1.156818863024e-03 1.000000000000e-03 +9.947632368294e-01 3.272461487136e-01 1.150328667086e+00 1.047207686753e+00 1.555602771120e+00 1.036915855887e+00 8.121246056575e-03 1.174817514430e-02 1.142520369101e-01 9.643984073757e-04 1.000000000000e-03 +1.096411696061e+00 3.156725080602e-01 1.096411696061e+00 1.140950366845e+00 1.582367323621e+00 1.173827099631e+00 8.372863832689e-03 1.069944266322e-02 1.090333418079e-01 8.519142217062e-04 1.000000000000e-03 +1.195000584812e+00 3.049667002885e-01 1.051512747459e+00 1.233300890288e+00 1.620712850586e+00 1.254459887436e+00 8.018345317123e-03 9.587805952304e-03 1.032139415233e-01 7.971558198198e-04 1.000000000000e-03 +1.295788766245e+00 2.969611539952e-01 1.019979466566e+00 1.329381229636e+00 1.675593198221e+00 1.231308602163e+00 7.578522799459e-03 9.232278714873e-03 1.012822169039e-01 8.121440865786e-04 1.000000000000e-03 +1.406329538503e+00 2.921808884763e-01 1.001746850452e+00 1.436360832958e+00 1.751179372550e+00 1.154826508349e+00 5.063706081964e-03 6.577229625432e-03 8.548703362000e-02 8.659309366130e-04 1.000000000000e-03 +7.390677203284e-02 5.187384612411e-01 1.407522977630e+00 5.239769099140e-01 1.501889721211e+00 4.337614804821e-01 4.104957049311e-03 1.419544116071e-02 1.255894597520e-01 2.305414484681e-03 1.000000000000e-03 +2.207826495233e-01 5.160623458897e-01 1.395048523246e+00 5.613067995096e-01 1.503737246126e+00 4.525076619204e-01 4.264639527181e-03 1.413668724110e-02 1.253292873509e-01 2.209907332300e-03 1.000000000000e-03 +3.645753399285e-01 5.108386302069e-01 1.370482244304e+00 6.275916543387e-01 1.507346299478e+00 4.942130242060e-01 4.589891529614e-03 1.393091026988e-02 1.244137821496e-01 2.023418953004e-03 1.000000000000e-03 +5.032074610309e-01 5.032074610309e-01 1.334924961939e+00 7.116428160772e-01 1.512765729280e+00 5.609839661630e-01 5.108144719866e-03 1.365853133416e-02 1.231915010333e-01 1.782582141946e-03 1.000000000000e-03 +6.350962438914e-01 4.933351493422e-01 1.290379558926e+00 8.041932656902e-01 1.520462500253e+00 6.573300340945e-01 5.838046612278e-03 1.332218134606e-02 1.216652116171e-01 1.521305810068e-03 1.000000000000e-03 +7.590389767492e-01 4.814189017862e-01 1.239437352077e+00 8.988349833098e-01 1.531048424102e+00 7.873176210909e-01 6.763196445724e-03 1.288526307150e-02 1.196534954288e-01 1.270135423382e-03 1.000000000000e-03 +8.744097075226e-01 4.677047416382e-01 1.185208848323e+00 9.916350447421e-01 1.545334939779e+00 9.482022088313e-01 7.777869089440e-03 1.230413041174e-02 1.169241464072e-01 1.054627368178e-03 1.000000000000e-03 +9.813317522683e-01 4.526051947345e-01 1.131322484528e+00 1.080677320161e+00 1.564529972327e+00 1.121880358256e+00 8.624994772169e-03 1.153197135777e-02 1.131958546442e-01 8.913606452250e-04 1.000000000000e-03 +1.081375171137e+00 4.369906222469e-01 1.081375171137e+00 1.166333170532e+00 1.590504739206e+00 1.272787805474e+00 8.945106025720e-03 1.054194499733e-02 1.082278717302e-01 7.856769177855e-04 1.000000000000e-03 +1.177848750951e+00 4.224156346172e-01 1.038703247058e+00 1.251304378832e+00 1.626243242548e+00 1.377700454173e+00 8.854761863461e-03 9.640805993029e-03 1.034988244326e-01 7.258471875878e-04 1.000000000000e-03 +1.275981790990e+00 4.109412087111e-01 1.006945781093e+00 1.340523109817e+00 1.676586417103e+00 1.366368737595e+00 8.473820272142e-03 9.302562374623e-03 1.016670075110e-01 7.318668617668e-04 1.000000000000e-03 +1.384167599360e+00 4.033870156764e-01 9.867891560009e-01 1.441749294272e+00 1.747110147053e+00 1.253876226643e+00 5.522066530897e-03 6.605994770728e-03 8.567376605296e-02 7.975268840347e-04 1.000000000000e-03 +7.239380936358e-02 6.539305042512e-01 1.356376023363e+00 6.579255034001e-01 1.507521769255e+00 5.179308238571e-01 4.756707817399e-03 1.377609016000e-02 1.237205190922e-01 1.930759773193e-03 1.000000000000e-03 +2.162900742030e-01 6.507396204496e-01 1.344987562612e+00 6.857429910846e-01 1.509713546804e+00 5.385667175713e-01 4.933741081869e-03 1.374130888774e-02 1.235642382989e-01 1.856780167385e-03 1.000000000000e-03 +3.572657420984e-01 6.444248431329e-01 1.322623506139e+00 7.368325379107e-01 1.514019526927e+00 5.844019064159e-01 5.287744309360e-03 1.357219471217e-02 1.228015323473e-01 1.711151159880e-03 1.000000000000e-03 +4.933351493422e-01 6.350962438914e-01 1.290379558926e+00 8.041932656902e-01 1.520462500253e+00 6.573300340945e-01 5.838046612278e-03 1.332218134606e-02 1.216652116171e-01 1.521305810068e-03 1.000000000000e-03 +6.229630474472e-01 6.229630474472e-01 1.250168256490e+00 8.810027905572e-01 1.529407266396e+00 7.608854929122e-01 6.592289235991e-03 1.299595529958e-02 1.201663444267e-01 1.314258202207e-03 1.000000000000e-03 +7.449586701205e-01 6.082717093348e-01 1.204397596594e+00 9.617473122213e-01 1.541275920543e+00 8.971738501315e-01 7.511230078343e-03 1.255815148409e-02 1.181249408423e-01 1.114611175809e-03 1.000000000000e-03 +8.585962680211e-01 5.913496497440e-01 1.155879521794e+00 1.042536310980e+00 1.556579400035e+00 1.060336523705e+00 8.465168463376e-03 1.197521014432e-02 1.153507219277e-01 9.430968165712e-04 1.000000000000e-03 +9.639221108131e-01 5.727946728954e-01 1.107612449498e+00 1.121266949933e+00 1.576085312188e+00 1.235836971653e+00 9.247376119921e-03 1.122402428318e-02 1.116742499076e-01 8.091682179266e-04 1.000000000000e-03 +1.062220707059e+00 5.536574239752e-01 1.062220707059e+00 1.197851983188e+00 1.600987883818e+00 1.408737341041e+00 9.760959682253e-03 1.039330689748e-02 1.074621736937e-01 7.098555357817e-04 1.000000000000e-03 +1.156306063684e+00 5.355335358284e-01 1.022155802474e+00 1.274299761010e+00 1.633597981586e+00 1.543510279290e+00 9.962744647840e-03 9.681903108953e-03 1.037191887794e-01 6.478738842348e-04 1.000000000000e-03 +1.251328482693e+00 5.204497174913e-01 9.903793681916e-01 1.355245689916e+00 1.678553595503e+00 1.554923246001e+00 9.617857616112e-03 9.278134120943e-03 1.015334324849e-01 6.431185607212e-04 1.000000000000e-03 +1.356991453066e+00 5.096311092160e-01 9.683771682937e-01 1.449534294584e+00 1.743245252753e+00 1.371965396800e+00 5.949600532187e-03 6.504829363112e-03 8.501522323229e-02 7.288813568711e-04 1.000000000000e-03 +7.059037062518e-02 7.807658845044e-01 1.297378946438e+00 7.839504874869e-01 1.515839865386e+00 6.339384166198e-01 5.621391028571e-03 1.330111304473e-02 1.215689701122e-01 1.577440290387e-03 1.000000000000e-03 +2.109139225528e-01 7.771014912182e-01 1.287323269750e+00 8.052151329801e-01 1.518411212821e+00 6.571487577045e-01 5.814873957337e-03 1.327296267967e-02 1.214402581962e-01 1.521725466686e-03 1.000000000000e-03 +3.484732366630e-01 7.698240001369e-01 1.267659888161e+00 8.450222410430e-01 1.523490787603e+00 7.079545229466e-01 6.190732165912e-03 1.311680051173e-02 1.207237457620e-01 1.412520109114e-03 1.000000000000e-03 +4.814189017862e-01 7.590389767492e-01 1.239437352077e+00 8.988349833098e-01 1.531048424102e+00 7.873176210909e-01 6.763196445724e-03 1.288526307150e-02 1.196534954288e-01 1.270135423381e-03 1.000000000000e-03 +6.082717093348e-01 7.449586701205e-01 1.204397596594e+00 9.617473122213e-01 1.541275920543e+00 8.971738501315e-01 7.511230078343e-03 1.255815148409e-02 1.181249408423e-01 1.114611175809e-03 1.000000000000e-03 +7.278673917621e-01 7.278673917621e-01 1.164671476563e+00 1.029359937039e+00 1.554362096907e+00 1.036168897483e+00 8.360203274292e-03 1.210256835724e-02 1.159624860664e-01 9.650936275242e-04 1.000000000000e-03 +8.394862520898e-01 7.082391637587e-01 1.122584769250e+00 1.098335049304e+00 1.570521074256e+00 1.199543580278e+00 9.218004306089e-03 1.152688963242e-02 1.131709112234e-01 8.336504120748e-04 1.000000000000e-03 +9.430941610296e-01 6.868269924762e-01 1.080304183965e+00 1.166686724945e+00 1.590036176964e+00 1.385195348735e+00 1.004955990916e-02 1.088246497326e-02 1.099619377242e-01 7.219198367315e-04 1.000000000000e-03 +1.039624863115e+00 6.647262066859e-01 1.039624863115e+00 1.233969523879e+00 1.613536687488e+00 1.582997828370e+00 1.081729720842e-02 1.025013775877e-02 1.067194544317e-01 6.317128059674e-04 1.000000000000e-03 +1.131373274735e+00 6.434460203626e-01 1.002449873478e+00 1.301548411664e+00 1.642843272117e+00 1.744579158762e+00 1.122913497496e-02 9.654880019541e-03 1.035743427020e-01 5.732041420865e-04 1.000000000000e-03 +1.223175560708e+00 6.247174631815e-01 9.709783902237e-01 1.373473829790e+00 1.682031330089e+00 1.801304254948e+00 1.106376075363e-02 9.213124925932e-03 1.011770995495e-01 5.551532992015e-04 1.000000000000e-03 +1.326490652259e+00 6.103642834997e-01 9.475341739796e-01 1.460178759298e+00 1.740673151388e+00 1.483823192264e+00 6.232062452178e-03 6.300005099665e-03 8.366603651599e-02 6.739347418299e-04 1.000000000000e-03 +6.852224185870e-02 8.986415355632e-01 1.233896793680e+00 9.012501911615e-01 1.527989922913e+00 7.852777850876e-01 6.632457870852e-03 1.266900324344e-02 1.186451443191e-01 1.273434724616e-03 1.000000000000e-03 +2.047476209810e-01 8.945961223218e-01 1.225420072392e+00 9.177275251242e-01 1.530972946917e+00 8.100004310845e-01 6.831858717718e-03 1.265158348479e-02 1.185635482899e-01 1.234567244194e-03 1.000000000000e-03 +3.383772957955e-01 8.864980510889e-01 1.208881648692e+00 9.488824947770e-01 1.536806048088e+00 8.644395695503e-01 7.216036831176e-03 1.252147128387e-02 1.179523033729e-01 1.156818863024e-03 1.000000000000e-03 +4.677047416382e-01 8.744097075226e-01 1.185208848323e+00 9.916350447421e-01 1.545334939779e+00 9.482022088313e-01 7.777869089440e-03 1.230413041174e-02 1.169241464072e-01 1.054627368178e-03 1.000000000000e-03 +5.913496497440e-01 8.585962680211e-01 1.155879521794e+00 1.042536310980e+00 1.556579400035e+00 1.060336523705e+00 8.465168463376e-03 1.197521014432e-02 1.153507219277e-01 9.430968165712e-04 1.000000000000e-03 +7.082391637587e-01 8.394862520898e-01 1.122584769250e+00 1.098335049304e+00 1.570521074256e+00 1.199543580278e+00 9.218004306089e-03 1.152688963242e-02 1.131709112234e-01 8.336504120748e-04 1.000000000000e-03 +8.176829658098e-01 8.176829658098e-01 1.086967104595e+00 1.156378339970e+00 1.587043903496e+00 1.370266975986e+00 1.007991539158e-02 1.103425343553e-02 1.107261558758e-01 7.297847919603e-04 1.000000000000e-03 +9.195131354821e-01 7.939885475833e-01 1.050438651132e+00 1.214875392794e+00 1.606033492742e+00 1.574688822482e+00 1.108233395502e-02 1.055668948378e-02 1.083035317152e-01 6.350461029017e-04 1.000000000000e-03 +1.014353370118e+00 7.694868377954e-01 1.014353370118e+00 1.273193918070e+00 1.627862252306e+00 1.790009354272e+00 1.201737302890e-02 1.007037169964e-02 1.057794965411e-01 5.586562984229e-04 1.000000000000e-03 +1.104052824594e+00 7.455177973868e-01 9.802600292904e-01 1.332189710857e+00 1.653976768500e+00 1.976524839335e+00 1.248259589324e-02 9.473138645792e-03 1.025948809953e-01 5.059384937134e-04 1.000000000000e-03 +1.192923960506e+00 7.232918773267e-01 9.495091400692e-01 1.395069430300e+00 1.687538539539e+00 2.090961170124e+00 1.267319859218e-02 9.091416024312e-03 1.005065836667e-01 4.782489576030e-04 1.000000000000e-03 +1.294643329114e+00 7.055774653037e-01 9.254486437728e-01 1.474429011233e+00 1.740803291996e+00 1.532660046737e+00 6.008521988247e-03 5.880484065306e-03 8.083236470421e-02 6.524604083787e-04 1.000000000000e-03 +6.624062416669e-02 1.008302717297e+00 1.170347280862e+00 1.010476219413e+00 1.546213099097e+00 9.518402303401e-01 7.524429070652e-03 1.185770809660e-02 1.147834100315e-01 1.050596484709e-03 1.000000000000e-03 +1.979474687855e-01 1.003799810096e+00 1.163572208273e+00 1.023131105551e+00 1.549418453166e+00 9.792322698850e-01 7.742933125135e-03 1.186071991793e-02 1.147979864222e-01 1.021208175786e-03 1.000000000000e-03 +3.272461487136e-01 9.947632368294e-01 1.150328667086e+00 1.047207686753e+00 1.555602771120e+00 1.036915855887e+00 8.121246056575e-03 1.174817514430e-02 1.142520369101e-01 9.643984073757e-04 1.000000000000e-03 +4.526051947345e-01 9.813317522683e-01 1.131322484528e+00 1.080677320161e+00 1.564529972327e+00 1.121880358256e+00 8.624994772169e-03 1.153197135777e-02 1.131958546442e-01 8.913606452250e-04 1.000000000000e-03 +5.727946728954e-01 9.639221108131e-01 1.107612449498e+00 1.121266949933e+00 1.576085312188e+00 1.235836971653e+00 9.247376119921e-03 1.122402428318e-02 1.116742499076e-01 8.091682179266e-04 1.000000000000e-03 +6.868269924762e-01 9.430941610296e-01 1.080304183965e+00 1.166686724945e+00 1.590036176964e+00 1.385195348735e+00 1.004955990916e-02 1.088246497326e-02 1.099619377242e-01 7.219198367315e-04 1.000000000000e-03 +7.939885475833e-01 9.195131354821e-01 1.050438651132e+00 1.214875392794e+00 1.606033492742e+00 1.574688822482e+00 1.108233395502e-02 1.055668948378e-02 1.083035317152e-01 6.350461029017e-04 1.000000000000e-03 +8.940044556464e-01 8.940044556464e-01 1.019045851185e+00 1.264313225997e+00 1.623866490894e+00 1.793208443551e+00 1.221034678811e-02 1.021382664577e-02 1.065302598940e-01 5.576596538992e-04 1.000000000000e-03 +9.872803069993e-01 8.676139354610e-01 9.872803069993e-01 1.314334944219e+00 1.643836594733e+00 2.018943272188e+00 1.312730962242e-02 9.753104361521e-03 1.040998685105e-01 4.953086170254e-04 1.000000000000e-03 +1.075246285938e+00 8.414032030634e-01 9.562829596557e-01 1.365325574926e+00 1.666910622822e+00 2.245278033217e+00 1.389104906807e-02 9.280175236141e-03 1.015446001417e-01 4.453791402249e-04 1.000000000000e-03 +1.161960657065e+00 8.161644911380e-01 9.268580347225e-01 1.419956705383e+00 1.695683597164e+00 2.325069367826e+00 1.354901341025e-02 8.741038180024e-03 9.855082264736e-02 4.300946947381e-04 1.000000000000e-03 +1.263696685220e+00 7.960401650370e-01 9.035920146539e-01 1.493522432570e+00 1.745590955962e+00 1.457388900449e+00 4.971092826364e-03 5.116437511804e-03 7.539847855674e-02 6.861586496862e-04 1.000000000000e-03 +6.384481791227e-02 1.111915710219e+00 1.111915710219e+00 1.113747146980e+00 1.573781831780e+00 1.078724521984e+00 7.815488837560e-03 1.086768031821e-02 1.098872165157e-01 9.270207357116e-04 1.000000000000e-03 +1.908358166265e-01 1.106715464272e+00 1.106715464272e+00 1.123048274905e+00 1.576723357671e+00 1.109123704971e+00 8.011150621936e-03 1.083443251555e-02 1.097189972184e-01 9.016126835247e-04 1.000000000000e-03 +3.156725080602e-01 1.096411696061e+00 1.096411696061e+00 1.140950366845e+00 1.582367323621e+00 1.173827099631e+00 8.372863832689e-03 1.069944266322e-02 1.090333418079e-01 8.519142217062e-04 1.000000000000e-03 +4.369906222469e-01 1.081375171137e+00 1.081375171137e+00 1.166333170532e+00 1.590504739206e+00 1.272787805474e+00 8.945106025720e-03 1.054194499733e-02 1.082278717302e-01 7.856769177855e-04 1.000000000000e-03 +5.536574239752e-01 1.062220707059e+00 1.062220707059e+00 1.197851983188e+00 1.600987883818e+00 1.408737341041e+00 9.760959682253e-03 1.039330689748e-02 1.074621736937e-01 7.098555357817e-04 1.000000000000e-03 +6.647262066859e-01 1.039624863115e+00 1.039624863115e+00 1.233969523879e+00 1.613536687488e+00 1.582997828370e+00 1.081729720842e-02 1.025013775877e-02 1.067194544317e-01 6.317128059674e-04 1.000000000000e-03 +7.694868377954e-01 1.014353370118e+00 1.014353370118e+00 1.273193918070e+00 1.627862252306e+00 1.790009354272e+00 1.201737302890e-02 1.007037169964e-02 1.057794965411e-01 5.586562984229e-04 1.000000000000e-03 +8.676139354610e-01 9.872803069993e-01 9.872803069993e-01 1.314334944219e+00 1.643836594733e+00 2.018943272188e+00 1.312730962242e-02 9.753104361521e-03 1.040998685105e-01 4.953086170254e-04 1.000000000000e-03 +9.593128839411e-01 9.593128839411e-01 9.593128839411e-01 1.356673291029e+00 1.661578655341e+00 2.275145381702e+00 1.426658039562e-02 9.405935447262e-03 1.022303251773e-01 4.395323516653e-04 1.000000000000e-03 +1.045808648562e+00 9.312756973440e-01 9.312756973440e-01 1.400353581733e+00 1.681744504476e+00 2.502999818366e+00 1.499338049137e-02 8.985246651651e-03 9.991800333635e-02 3.995206043015e-04 1.000000000000e-03 +1.131902077485e+00 9.042788228805e-01 9.042788228805e-01 1.448765854969e+00 1.707818108592e+00 2.256940287225e+00 1.152727687952e-02 7.661219668574e-03 9.226302779779e-02 4.430777392120e-04 1.000000000000e-03 +1.236173654298e+00 8.838190581457e-01 8.838190581457e-01 1.519625424611e+00 1.757952661099e+00 1.252559973522e+00 3.161155211164e-03 3.785633356471e-03 6.485568043717e-02 7.983649654619e-04 1.000000000000e-03 +6.163607124851e-02 1.212914349692e+00 1.064450496378e+00 1.214479404917e+00 1.614935009283e+00 1.135665123048e+00 7.157605696407e-03 9.453850723001e-03 1.024903828713e-01 8.805412614209e-04 1.000000000000e-03 +1.842782033153e-01 1.206876174523e+00 1.060150968893e+00 1.220863856803e+00 1.616919488933e+00 1.174130940601e+00 7.459339961738e-03 9.529609991269e-03 1.029002213110e-01 8.516937638049e-04 1.000000000000e-03 +3.049667002885e-01 1.195000584812e+00 1.051512747459e+00 1.233300890288e+00 1.620712850586e+00 1.254459887436e+00 8.018345317123e-03 9.587805952304e-03 1.032139415233e-01 7.971558198198e-04 1.000000000000e-03 +4.224156346172e-01 1.177848750951e+00 1.038703247058e+00 1.251304378832e+00 1.626243242548e+00 1.377700454173e+00 8.854761863461e-03 9.640805993029e-03 1.034988244326e-01 7.258471875878e-04 1.000000000000e-03 +5.355335358284e-01 1.156306063684e+00 1.022155802474e+00 1.274299761010e+00 1.633597981586e+00 1.543510279290e+00 9.962744647840e-03 9.681903108953e-03 1.037191887794e-01 6.478738842348e-04 1.000000000000e-03 +6.434460203626e-01 1.131373274735e+00 1.002449873478e+00 1.301548411664e+00 1.642843272117e+00 1.744579158762e+00 1.122913497496e-02 9.654880019541e-03 1.035743427020e-01 5.732041420866e-04 1.000000000000e-03 +7.455177973868e-01 1.104052824594e+00 9.802600292904e-01 1.332189710857e+00 1.653976768500e+00 1.976524839335e+00 1.248259589324e-02 9.473138645792e-03 1.025948809953e-01 5.059384937134e-04 1.000000000000e-03 +8.414032030634e-01 1.075246285938e+00 9.562829596557e-01 1.365325574926e+00 1.666910622822e+00 2.245278033217e+00 1.389104906807e-02 9.280175236141e-03 1.015446001417e-01 4.453791402249e-04 1.000000000000e-03 +9.312756973440e-01 1.045808648562e+00 9.312756973440e-01 1.400353581733e+00 1.681744504476e+00 2.502999818366e+00 1.499338049137e-02 8.985246651650e-03 9.991800333635e-02 3.995206043015e-04 1.000000000000e-03 +1.016919028155e+00 1.016919028155e+00 9.063638715275e-01 1.438140681452e+00 1.699924729880e+00 2.449210090167e+00 1.305008499731e-02 7.992424812615e-03 9.423625636673e-02 4.082949045550e-04 1.000000000000e-03 +1.104943433479e+00 9.908258514853e-01 8.836419975174e-01 1.484127979374e+00 1.727269243325e+00 1.785452212478e+00 6.361098757683e-03 5.344107263044e-03 7.705775080378e-02 5.600821982303e-04 1.000000000000e-03 +1.214611559462e+00 9.731243314145e-01 8.681250339553e-01 1.556358636294e+00 1.782103610722e+00 9.907738747659e-01 1.502494191589e-03 2.274728214766e-03 5.027400714271e-02 1.009312039275e-03 1.000000000000e-03 +6.008689741434e-02 1.316679761772e+00 1.033430331067e+00 1.318050086416e+00 1.674883362945e+00 1.101084815190e+00 6.610739498881e-03 9.005763326785e-03 1.000320133579e-01 9.081952509054e-04 1.000000000000e-03 +1.795714094445e-01 1.309603655166e+00 1.028912315955e+00 1.321857641622e+00 1.675102438252e+00 1.143910079484e+00 6.955349439950e-03 9.120493251206e-03 1.006671812967e-01 8.741945874371e-04 1.000000000000e-03 +2.969611539952e-01 1.295788766245e+00 1.019979466566e+00 1.329381229636e+00 1.675593198221e+00 1.231308602163e+00 7.578522799459e-03 9.232278714873e-03 1.012822169039e-01 8.121440865786e-04 1.000000000000e-03 +4.109412087111e-01 1.275981790990e+00 1.006945781093e+00 1.340523109817e+00 1.676586417103e+00 1.366368737595e+00 8.473820272142e-03 9.302562374623e-03 1.016670075110e-01 7.318668617668e-04 1.000000000000e-03 +5.204497174913e-01 1.251328482693e+00 9.903793681916e-01 1.355245689916e+00 1.678553595503e+00 1.554923246001e+00 9.617857616112e-03 9.278134120943e-03 1.015334324849e-01 6.431185607212e-04 1.000000000000e-03 +6.247174631815e-01 1.223175560708e+00 9.709783902237e-01 1.373473829790e+00 1.682031330089e+00 1.801304254948e+00 1.106376075363e-02 9.213124925932e-03 1.011770995495e-01 5.551532992015e-04 1.000000000000e-03 +7.232918773267e-01 1.192923960506e+00 9.495091400692e-01 1.395069430300e+00 1.687538539539e+00 2.090961170124e+00 1.267319859218e-02 9.091416024312e-03 1.005065836667e-01 4.782489576030e-04 1.000000000000e-03 +8.161644911380e-01 1.161960657065e+00 9.268580347225e-01 1.419956705383e+00 1.695683597164e+00 2.325069367826e+00 1.354901341025e-02 8.741038180023e-03 9.855082264736e-02 4.300946947381e-04 1.000000000000e-03 +9.042788228805e-01 1.131902077485e+00 9.042788228805e-01 1.448765854969e+00 1.707818108592e+00 2.256940287225e+00 1.152727687952e-02 7.661219668574e-03 9.226302779779e-02 4.430777392120e-04 1.000000000000e-03 +9.908258514853e-01 1.104943433479e+00 8.836419975174e-01 1.484127979374e+00 1.727269243325e+00 1.785452212478e+00 6.361098757683e-03 5.344107263044e-03 7.705775080378e-02 5.600821982303e-04 1.000000000000e-03 +1.083826381180e+00 1.083826381180e+00 8.672965028306e-01 1.532761967522e+00 1.761125342758e+00 1.196606082144e+00 2.163227985742e-03 2.711704400499e-03 5.489084522435e-02 8.356969055419e-04 1.000000000000e-03 +1.200619956825e+00 1.071761708362e+00 8.578749342770e-01 1.609397850202e+00 1.823762825341e+00 7.403215299386e-01 5.999412428887e-04 1.215568949356e-03 3.675094782385e-02 1.350764444312e-03 1.000000000000e-03 +5.928121547195e-02 1.430085777156e+00 1.017755915460e+00 1.431313939195e+00 1.756270678451e+00 1.051324174627e+00 4.464358262941e-03 6.369621812213e-03 8.412703233281e-02 9.511813997379e-04 1.000000000000e-03 +1.769989334638e-01 1.421993301426e+00 1.012303580495e+00 1.432966702945e+00 1.754466332202e+00 1.085076913543e+00 4.700243882661e-03 6.497572417213e-03 8.496778747275e-02 9.215936561905e-04 1.000000000000e-03 +2.921808884763e-01 1.406329538503e+00 1.001746850452e+00 1.436360832958e+00 1.751179372550e+00 1.154826508349e+00 5.063706081964e-03 6.577229625432e-03 8.548703362000e-02 8.659309366130e-04 1.000000000000e-03 +4.033870156764e-01 1.384167599360e+00 9.867891560009e-01 1.441749294272e+00 1.747110147053e+00 1.253876226643e+00 5.522066530897e-03 6.605994770728e-03 8.567376605296e-02 7.975268840347e-04 1.000000000000e-03 +5.096311092160e-01 1.356991453066e+00 9.683771682937e-01 1.449534294584e+00 1.743245252753e+00 1.371965396800e+00 5.949600532187e-03 6.504829363112e-03 8.501522323229e-02 7.288813568711e-04 1.000000000000e-03 +6.103642834997e-01 1.326490652259e+00 9.475341739796e-01 1.460178759298e+00 1.740673151388e+00 1.483823192264e+00 6.232062452178e-03 6.300005099665e-03 8.366603651599e-02 6.739347418299e-04 1.000000000000e-03 +7.055774653037e-01 1.294643329114e+00 9.254486437728e-01 1.474429011233e+00 1.740803291996e+00 1.532660046737e+00 6.008521988247e-03 5.880484065306e-03 8.083236470421e-02 6.524604083787e-04 1.000000000000e-03 +7.960401650370e-01 1.263696685220e+00 9.035920146539e-01 1.493522432570e+00 1.745590955962e+00 1.457388900449e+00 4.971092826364e-03 5.116437511804e-03 7.539847855674e-02 6.861586496862e-04 1.000000000000e-03 +8.838190581457e-01 1.236173654298e+00 8.838190581457e-01 1.519625424611e+00 1.757952661099e+00 1.252559973522e+00 3.161155211164e-03 3.785633356471e-03 6.485568043717e-02 7.983649654619e-04 1.000000000000e-03 +9.731243314145e-01 1.214611559462e+00 8.681250339553e-01 1.556358636294e+00 1.782103610722e+00 9.907738747659e-01 1.502494191589e-03 2.274728214766e-03 5.027400714271e-02 1.009312039275e-03 1.000000000000e-03 +1.071761708362e+00 1.200619956825e+00 8.578749342770e-01 1.609397850202e+00 1.823762825341e+00 7.403215299386e-01 5.999412428887e-04 1.215568949356e-03 3.675094782385e-02 1.350764444312e-03 1.000000000000e-03 +1.194171794963e+00 1.194171794963e+00 8.531350268405e-01 1.688813948241e+00 1.892070803589e+00 5.233403888318e-01 2.983580058593e-04 8.551547297695e-04 3.082485883124e-02 1.910802264339e-03 1.000000000000e-03 +7.387522244524e-02 7.387522244524e-02 1.636469103365e+00 1.044753415054e-01 1.639800665706e+00 2.850952917612e-01 2.169528686925e-03 1.141475543242e-02 1.126190995861e-01 3.507599139300e-03 1.000000000000e-03 +2.206605648923e-01 7.345352825586e-02 1.619365114728e+00 2.325650569450e-01 1.635979792207e+00 2.989832606072e-01 2.258790240944e-03 1.133235805421e-02 1.122118930823e-01 3.344668855270e-03 1.000000000000e-03 +3.638521823974e-01 7.258749009733e-02 1.585966257751e+00 3.710220402537e-01 1.628786764766e+00 3.314737311419e-01 2.455942137433e-03 1.111374102997e-02 1.111242599274e-01 3.016830312782e-03 1.000000000000e-03 +5.008674515399e-01 7.132361086692e-02 1.538366654571e+00 5.059202125624e-01 1.619421879986e+00 3.841847372485e-01 2.789633782864e-03 1.089176708129e-02 1.100089242910e-01 2.602914439449e-03 1.000000000000e-03 +6.302645794163e-01 6.975004021718e-02 1.479854120888e+00 6.341123781926e-01 1.609989666826e+00 4.619491343509e-01 3.293034338890e-03 1.069284720119e-02 1.089997308926e-01 2.164740499850e-03 1.000000000000e-03 +7.511508396989e-01 6.793637190840e-02 1.414139863481e+00 7.542167689785e-01 1.602696006139e+00 5.729843199905e-01 4.005451507315e-03 1.048576209044e-02 1.079390882264e-01 1.745248456392e-03 1.000000000000e-03 +8.632463147484e-01 6.592880282032e-02 1.344960916087e+00 8.657602479717e-01 1.599518887906e+00 7.229530639530e-01 4.921182577874e-03 1.021058521621e-02 1.065133544898e-01 1.383215660685e-03 1.000000000000e-03 +9.670498751036e-01 6.379466977995e-02 1.276407817314e+00 9.691518048429e-01 1.602645355944e+00 9.142735026360e-01 6.009757009697e-03 9.859889287566e-03 1.046682021520e-01 1.093764608858e-03 1.000000000000e-03 +1.064450496378e+00 6.163607124851e-02 1.212914349692e+00 1.066233494370e+00 1.614935009283e+00 1.135665123048e+00 7.157605696407e-03 9.453850723001e-03 1.024903828713e-01 8.805412614209e-04 1.000000000000e-03 +1.158406393543e+00 5.957952108330e-02 1.158406393543e+00 1.159937537945e+00 1.639317072606e+00 1.348342187885e+00 8.164505858429e-03 9.082826969062e-03 1.004590959825e-01 7.416514954329e-04 1.000000000000e-03 +1.253361651229e+00 5.784907143963e-02 1.116774932033e+00 1.254695956731e+00 1.679716700118e+00 1.450791165152e+00 8.466325700597e-03 8.753491788438e-03 9.862100175497e-02 6.892790802839e-04 1.000000000000e-03 +1.358586021467e+00 5.660505783159e-02 1.089316721140e+00 1.359764726082e+00 1.742289020011e+00 1.344396010927e+00 5.466830024163e-03 6.099575548867e-03 8.232439593102e-02 7.438284492606e-04 1.000000000000e-03 +7.345352825586e-02 2.206605648923e-01 1.619365114728e+00 2.325650569450e-01 1.635979792207e+00 2.989832606072e-01 2.258790240944e-03 1.133235805421e-02 1.122118930823e-01 3.344668855270e-03 1.000000000000e-03 +2.193520252234e-01 2.193520252234e-01 1.602654333952e+00 3.102106090049e-01 1.632400544007e+00 3.137380930421e-01 2.354249134384e-03 1.125580151053e-02 1.118322230970e-01 3.187371958259e-03 1.000000000000e-03 +3.617051426564e-01 2.167582136539e-01 1.570113924096e+00 4.216808430679e-01 1.625752892678e+00 3.472511924655e-01 2.562875699764e-03 1.107069934692e-02 1.109088682303e-01 2.879759729261e-03 1.000000000000e-03 +4.980818900474e-01 2.130225360422e-01 1.523793356160e+00 5.417233334970e-01 1.617223040379e+00 4.013682570940e-01 2.911069828668e-03 1.087929766698e-02 1.099459345263e-01 2.491477545435e-03 1.000000000000e-03 +6.270158773188e-01 2.083703770526e-01 1.466836612338e+00 6.607322638126e-01 1.608781144761e+00 4.812943975971e-01 3.435239682368e-03 1.070625286577e-02 1.090680361862e-01 2.077730397429e-03 1.000000000000e-03 +7.475692298135e-01 2.029890806535e-01 1.402843597748e+00 7.746381866579e-01 1.602508808079e+00 5.949248995141e-01 4.167776904765e-03 1.050832695396e-02 1.080551657152e-01 1.680884428970e-03 1.000000000000e-03 +8.594238605484e-01 1.970305897936e-01 1.335501334625e+00 8.817201514054e-01 1.600310669895e+00 7.475935010263e-01 5.097112757624e-03 1.022704066574e-02 1.065991487653e-01 1.337625325297e-03 1.000000000000e-03 +9.630664597915e-01 1.906994493147e-01 1.268791875367e+00 9.817653925171e-01 1.604274324716e+00 9.422061735044e-01 6.213128253088e-03 9.891351427860e-03 1.048350631964e-01 1.061338832329e-03 1.000000000000e-03 +1.060150968893e+00 1.842782033153e-01 1.206876174523e+00 1.076047644420e+00 1.616919488933e+00 1.174130940601e+00 7.459339961738e-03 9.529609991270e-03 1.029002213110e-01 8.516937638049e-04 1.000000000000e-03 +1.153458196436e+00 1.781478653405e-01 1.153458196436e+00 1.167134299407e+00 1.640935185733e+00 1.396720173270e+00 8.517536244764e-03 9.147361519975e-03 1.008153511237e-01 7.159630247615e-04 1.000000000000e-03 +1.247650836693e+00 1.729468384733e-01 1.112166984406e+00 1.259580572746e+00 1.680315036069e+00 1.500560135050e+00 8.793287599560e-03 8.790005206225e-03 9.882647646942e-02 6.664178106843e-04 1.000000000000e-03 +1.352396204916e+00 1.691657718358e-01 1.084475727711e+00 1.362935271182e+00 1.741746295367e+00 1.364104245673e+00 5.563498269483e-03 6.117749014195e-03 8.244694599960e-02 7.330818030749e-04 1.000000000000e-03 +7.258749009733e-02 3.638521823974e-01 1.585966257751e+00 3.710220402537e-01 1.628786764766e+00 3.314737311419e-01 2.455942137433e-03 1.111374102997e-02 1.111242599274e-01 3.016830312782e-03 1.000000000000e-03 +2.167582136539e-01 3.617051426564e-01 1.570113924096e+00 4.216808430679e-01 1.625752892678e+00 3.472511924655e-01 2.562875699764e-03 1.107069934692e-02 1.109088682303e-01 2.879759729261e-03 1.000000000000e-03 +3.575285251468e-01 3.575285251468e-01 1.539291683050e+00 5.056216891979e-01 1.620207449093e+00 3.827082580452e-01 2.789411582023e-03 1.093291635359e-02 1.102165361337e-01 2.612956420402e-03 1.000000000000e-03 +4.926385370326e-01 3.515543281331e-01 1.495443610372e+00 6.052133291648e-01 1.613268348912e+00 4.398491264323e-01 3.165912833219e-03 1.079658674861e-02 1.095271998111e-01 2.273506845657e-03 1.000000000000e-03 +6.206081682477e-01 3.440761316809e-01 1.441501261589e+00 7.096075555462e-01 1.606694983515e+00 5.243665719285e-01 3.720286492040e-03 1.064223014358e-02 1.087414371780e-01 1.907062832633e-03 1.000000000000e-03 +7.404551470496e-01 3.353726492569e-01 1.380857569138e+00 8.128644651243e-01 1.602347111243e+00 6.432024447667e-01 4.480666227501e-03 1.044927517912e-02 1.077511287856e-01 1.554720458755e-03 1.000000000000e-03 +8.518107871974e-01 3.257224536298e-01 1.317075771580e+00 9.119631209563e-01 1.601987928190e+00 8.014682682590e-01 5.440106264800e-03 1.018151275649e-02 1.063616093882e-01 1.247710033701e-03 1.000000000000e-03 +9.550618739851e-01 3.154477305142e-01 1.253897867818e+00 1.005808358400e+00 1.607454607989e+00 1.004913731125e+00 6.624779957316e-03 9.888580112094e-03 1.048203760519e-01 9.951102955677e-04 1.000000000000e-03 +1.051512747459e+00 3.049667002885e-01 1.195000584812e+00 1.094844165328e+00 1.620712850586e+00 1.254459887436e+00 8.018345317123e-03 9.587805952304e-03 1.032139415233e-01 7.971558198198e-04 1.000000000000e-03 +1.143703230613e+00 2.949108295225e-01 1.143703230613e+00 1.181113659681e+00 1.644106613575e+00 1.491005935444e+00 9.156507946655e-03 9.211741947822e-03 1.011695054397e-01 6.706881416284e-04 1.000000000000e-03 +1.236511166045e+00 2.862259112608e-01 1.103122328323e+00 1.269206498577e+00 1.681595672948e+00 1.600796209087e+00 9.427415295099e-03 8.833805866339e-03 9.907239702101e-02 6.246891355210e-04 1.000000000000e-03 +1.340326955627e+00 2.797479345003e-01 1.075006109282e+00 1.369209719085e+00 1.740796768676e+00 1.407215630922e+00 5.700657811359e-03 6.076529089886e-03 8.216872269156e-02 7.106231468911e-04 1.000000000000e-03 +7.132361086692e-02 5.008674515399e-01 1.538366654571e+00 5.059202125624e-01 1.619421879986e+00 3.841847372485e-01 2.789633782864e-03 1.089176708129e-02 1.100089242910e-01 2.602914439449e-03 1.000000000000e-03 +2.130225360422e-01 4.980818900474e-01 1.523793356160e+00 5.417233334970e-01 1.617223040379e+00 4.013682570940e-01 2.911069828668e-03 1.087929766698e-02 1.099459345263e-01 2.491477545435e-03 1.000000000000e-03 +3.515543281331e-01 4.926385370326e-01 1.495443610372e+00 6.052133291648e-01 1.613268348912e+00 4.398491264323e-01 3.165912833219e-03 1.079658674861e-02 1.095271998111e-01 2.273506845657e-03 1.000000000000e-03 +4.847951751987e-01 4.847951751987e-01 1.455090245089e+00 6.856039117391e-01 1.608521167142e+00 5.021291380294e-01 3.573917405362e-03 1.067628962757e-02 1.089153066866e-01 1.991519559937e-03 1.000000000000e-03 +6.112806939623e-01 4.748956421031e-01 1.405414206452e+00 7.740736125844e-01 1.604487160870e+00 5.933762475224e-01 4.168663451750e-03 1.053799373287e-02 1.082075871897e-01 1.685271367325e-03 1.000000000000e-03 +7.300280921211e-01 4.633068332181e-01 1.349549207628e+00 8.646353202319e-01 1.602771755679e+00 7.195787748576e-01 4.963529335300e-03 1.034673931902e-02 1.072211593909e-01 1.389701913036e-03 1.000000000000e-03 +8.405917670280e-01 4.504065298032e-01 1.290815278279e+00 9.536564165802e-01 1.604887735489e+00 8.874156489450e-01 5.983220743756e-03 1.011344698091e-02 1.060054871793e-01 1.126867664762e-03 1.000000000000e-03 +9.431582898824e-01 4.365971604806e-01 1.232546706303e+00 1.039309694130e+00 1.612245646150e+00 1.107525806278e+00 7.301247988693e-03 9.888593043121e-03 1.048204445872e-01 9.029134981157e-04 1.000000000000e-03 +1.038703247058e+00 4.224156346172e-01 1.177848750951e+00 1.121311466016e+00 1.626243242548e+00 1.377700454173e+00 8.854761863461e-03 9.640805993029e-03 1.034988244326e-01 7.258471875878e-04 1.000000000000e-03 +1.129543891040e+00 4.087066196306e-01 1.129543891040e+00 1.201212097307e+00 1.648872312977e+00 1.624967965295e+00 1.003146883962e-02 9.259999938952e-03 1.014341600303e-01 6.153967471097e-04 1.000000000000e-03 +1.220532347930e+00 3.965450756751e-01 1.090014880287e+00 1.283334410583e+00 1.683769476096e+00 1.751940775812e+00 1.035997289584e-02 8.870139652152e-03 9.927593225255e-02 5.707955507436e-04 1.000000000000e-03 +1.323151328814e+00 3.871752586343e-01 1.061468186084e+00 1.378634875462e+00 1.739927823190e+00 1.460556720018e+00 5.836493212310e-03 5.994111490828e-03 8.160958202747e-02 6.846704316884e-04 1.000000000000e-03 +6.975004021718e-02 6.302645794163e-01 1.479854120888e+00 6.341123781926e-01 1.609989666826e+00 4.619491343509e-01 3.293034338890e-03 1.069284720119e-02 1.089997308926e-01 2.164740499850e-03 1.000000000000e-03 +2.083703770526e-01 6.270158773188e-01 1.466836612338e+00 6.607322638126e-01 1.608781144761e+00 4.812943975971e-01 3.435239682368e-03 1.070625286577e-02 1.090680361862e-01 2.077730397429e-03 1.000000000000e-03 +3.440761316809e-01 6.206081682477e-01 1.441501261589e+00 7.096075555462e-01 1.606694983515e+00 5.243665719285e-01 3.720286492040e-03 1.064223014358e-02 1.087414371780e-01 1.907062832633e-03 1.000000000000e-03 +4.748956421031e-01 6.112806939623e-01 1.405414206452e+00 7.740736125844e-01 1.604487160870e+00 5.933762475224e-01 4.168663451750e-03 1.053799373287e-02 1.082075871897e-01 1.685271367325e-03 1.000000000000e-03 +5.994235655816e-01 5.994235655816e-01 1.360975029666e+00 8.477129360515e-01 1.603393355768e+00 6.928303617582e-01 4.801198235368e-03 1.039474848472e-02 1.074696261209e-01 1.443354759255e-03 1.000000000000e-03 +7.166804475103e-01 5.854613415948e-01 1.310995998895e+00 9.254165798955e-01 1.604713792383e+00 8.292209325307e-01 5.648198433361e-03 1.021717773596e-02 1.065477344040e-01 1.205951225746e-03 1.000000000000e-03 +8.261099109503e-01 5.698130105336e-01 1.258398420208e+00 1.003565868264e+00 1.609568586897e+00 1.013058765502e+00 6.782837894410e-03 1.004310627189e-02 1.056362010334e-01 9.871095676311e-04 1.000000000000e-03 +9.276844804483e-01 5.529446082486e-01 1.205983782141e+00 1.079975108535e+00 1.618870939217e+00 1.257040031465e+00 8.287200943221e-03 9.888946337167e-03 1.048223170532e-01 7.955196135117e-04 1.000000000000e-03 +1.022155802474e+00 5.355335358284e-01 1.156306063684e+00 1.153949155088e+00 1.633597981586e+00 1.543510279290e+00 9.962744647840e-03 9.681903108953e-03 1.037191887794e-01 6.478738842348e-04 1.000000000000e-03 +1.111608269261e+00 5.185506873350e-01 1.111608269261e+00 1.226608233963e+00 1.655367241405e+00 1.795550997312e+00 1.104414605326e-02 9.226259295718e-03 1.012491936633e-01 5.569321069113e-04 1.000000000000e-03 +1.200581386481e+00 5.029733265701e-01 1.073427001732e+00 1.301682692827e+00 1.687193931015e+00 1.950273910227e+00 1.154916491706e-02 8.882725285279e-03 9.934633743335e-02 5.127484886897e-04 1.000000000000e-03 +1.302083856970e+00 4.906337568632e-01 1.044736188792e+00 1.391453863394e+00 1.740005045432e+00 1.497552032017e+00 5.792580146321e-03 5.802048966391e-03 8.029147572294e-02 6.677564309088e-04 1.000000000000e-03 +6.793637190840e-02 7.511508396989e-01 1.414139863481e+00 7.542167689785e-01 1.602696006139e+00 5.729843199905e-01 4.005451507315e-03 1.048576209044e-02 1.079390882264e-01 1.745248456392e-03 1.000000000000e-03 +2.029890806535e-01 7.475692298135e-01 1.402843597748e+00 7.746381866579e-01 1.602508808079e+00 5.949248995141e-01 4.167776904765e-03 1.050832695396e-02 1.080551657152e-01 1.680884428970e-03 1.000000000000e-03 +3.353726492569e-01 7.404551470496e-01 1.380857569138e+00 8.128644651243e-01 1.602347111243e+00 6.432024447667e-01 4.480666227501e-03 1.044927517912e-02 1.077511287856e-01 1.554720458755e-03 1.000000000000e-03 +4.633068332181e-01 7.300280921211e-01 1.349549207628e+00 8.646353202319e-01 1.602771755679e+00 7.195787748576e-01 4.963529335300e-03 1.034673931902e-02 1.072211593909e-01 1.389701913036e-03 1.000000000000e-03 +5.854613415948e-01 7.166804475103e-01 1.310995998895e+00 9.254165798955e-01 1.604713792383e+00 8.292209325307e-01 5.648198433361e-03 1.021717773596e-02 1.065477344040e-01 1.205951225746e-03 1.000000000000e-03 +7.008343299362e-01 7.008343299362e-01 1.267577343030e+00 9.911294143724e-01 1.609064895086e+00 9.813596249908e-01 6.602810982539e-03 1.009234150417e-02 1.058948194314e-01 1.018994438465e-03 1.000000000000e-03 +8.087670544992e-01 6.829306390525e-01 1.221692510630e+00 1.058535973031e+00 1.616487239891e+00 1.189724758353e+00 7.923011285901e-03 9.989299495881e-03 1.053528436355e-01 8.405305453881e-04 1.000000000000e-03 +9.090969277711e-01 6.635299945133e-01 1.175609025319e+00 1.125490683081e+00 1.627509096169e+00 1.456592627898e+00 9.599676966886e-03 9.885753349660e-03 1.048053929362e-01 6.865337506503e-04 1.000000000000e-03 +1.002449873478e+00 6.434460203626e-01 1.131373274735e+00 1.191187865098e+00 1.642843272117e+00 1.744579158762e+00 1.122913497496e-02 9.654880019541e-03 1.035743427020e-01 5.732041420866e-04 1.000000000000e-03 +1.090596979153e+00 6.236341842757e-01 1.090596979153e+00 1.256312607091e+00 1.663647540097e+00 2.004458153756e+00 1.225078724166e-02 9.167655023404e-03 1.009271190480e-01 4.988879404272e-04 1.000000000000e-03 +1.177690065573e+00 6.048311205815e-01 1.054094481575e+00 1.323923930962e+00 1.692303090779e+00 2.166316017304e+00 1.272096306861e-02 8.808246096370e-03 9.892896495505e-02 4.616131681677e-04 1.000000000000e-03 +1.278687168889e+00 5.897488812202e-01 1.025934507210e+00 1.408135156433e+00 1.742235986274e+00 1.479043837951e+00 5.372001952722e-03 5.448116358910e-03 7.780400131748e-02 6.761124818218e-04 1.000000000000e-03 +6.592880282032e-02 8.632463147484e-01 1.344960916087e+00 8.657602479717e-01 1.599518887906e+00 7.229530639530e-01 4.921182577874e-03 1.021058521621e-02 1.065133544898e-01 1.383215660685e-03 1.000000000000e-03 +1.970305897936e-01 8.594238605484e-01 1.335501334625e+00 8.817201514054e-01 1.600310669895e+00 7.475935010263e-01 5.097112757624e-03 1.022704066574e-02 1.065991487653e-01 1.337625325297e-03 1.000000000000e-03 +3.257224536298e-01 8.518107871974e-01 1.317075771580e+00 9.119631209563e-01 1.601987928190e+00 8.014682682590e-01 5.440106264800e-03 1.018151275649e-02 1.063616093882e-01 1.247710033701e-03 1.000000000000e-03 +4.504065298032e-01 8.405917670280e-01 1.290815278279e+00 9.536564165802e-01 1.604887735489e+00 8.874156489450e-01 5.983220743756e-03 1.011344698091e-02 1.060054871793e-01 1.126867664762e-03 1.000000000000e-03 +5.698130105336e-01 8.261099109503e-01 1.258398420208e+00 1.003565868264e+00 1.609568586897e+00 1.013058765502e+00 6.782837894410e-03 1.004310627189e-02 1.056362010334e-01 9.871095676311e-04 1.000000000000e-03 +6.829306390525e-01 8.087670544992e-01 1.221692510630e+00 1.058535973031e+00 1.616487239891e+00 1.189724758353e+00 7.923011285901e-03 9.989299495881e-03 1.053528436355e-01 8.405305453880e-04 1.000000000000e-03 +7.890648378152e-01 7.890648378152e-01 1.182581701991e+00 1.115906195230e+00 1.625960060529e+00 1.423473141202e+00 9.435052544299e-03 9.942287217653e-03 1.051046421306e-01 7.025071081814e-04 1.000000000000e-03 +8.880138304412e-01 7.676939760236e-01 1.142857216510e+00 1.173849480929e+00 1.638305594572e+00 1.696318858507e+00 1.112152777744e-02 9.834407949013e-03 1.045328653742e-01 5.895118096371e-04 1.000000000000e-03 +9.802600292904e-01 7.455177973868e-01 1.104052824594e+00 1.231546390212e+00 1.653976768500e+00 1.976524839335e+00 1.248259589324e-02 9.473138645792e-03 1.025948809953e-01 5.059384937134e-04 1.000000000000e-03 +1.067213435118e+00 7.233361674103e-01 1.067213435118e+00 1.289247736930e+00 1.673649976332e+00 2.251837144882e+00 1.364568985306e-02 9.089704744463e-03 1.004971240300e-01 4.440818476917e-04 1.000000000000e-03 +1.153039319625e+00 7.017987214843e-01 1.032936857347e+00 1.349822624673e+00 1.699699876256e+00 2.297642445977e+00 1.291270964554e-02 8.429973298162e-03 9.678138766291e-02 4.352287283649e-04 1.000000000000e-03 +1.254854971374e+00 6.847713183369e-01 1.006517982826e+00 1.429535853904e+00 1.748328117760e+00 1.374574734162e+00 4.286414628282e-03 4.677535373398e-03 7.209203510789e-02 7.274977308597e-04 1.000000000000e-03 +6.379466977995e-02 9.670498751036e-01 1.276407817314e+00 9.691518048429e-01 1.602645355944e+00 9.142735026360e-01 6.009757009697e-03 9.859889287566e-03 1.046682021520e-01 1.093764608858e-03 1.000000000000e-03 +1.906994493147e-01 9.630664597915e-01 1.268791875367e+00 9.817653925171e-01 1.604274324716e+00 9.422061735044e-01 6.213128253088e-03 9.891351427860e-03 1.048350631964e-01 1.061338832329e-03 1.000000000000e-03 +3.154477305142e-01 9.550618739851e-01 1.253897867818e+00 1.005808358400e+00 1.607454607989e+00 1.004913731125e+00 6.624779957316e-03 9.888580112094e-03 1.048203760519e-01 9.951102955677e-04 1.000000000000e-03 +4.365971604806e-01 9.431582898824e-01 1.232546706303e+00 1.039309694130e+00 1.612245646150e+00 1.107525806278e+00 7.301247988693e-03 9.888593043121e-03 1.048204445872e-01 9.029134981156e-04 1.000000000000e-03 +5.529446082486e-01 9.276844804483e-01 1.205983782141e+00 1.079975108535e+00 1.618870939217e+00 1.257040031465e+00 8.287200943221e-03 9.888946337167e-03 1.048223170532e-01 7.955196135117e-04 1.000000000000e-03 +6.635299945133e-01 9.090969277711e-01 1.175609025319e+00 1.125490683081e+00 1.627509096169e+00 1.456592627898e+00 9.599676966886e-03 9.885753349660e-03 1.048053929362e-01 6.865337506503e-04 1.000000000000e-03 +7.676939760236e-01 8.880138304412e-01 1.142857216510e+00 1.173849480929e+00 1.638305594572e+00 1.696318858507e+00 1.112152777744e-02 9.834407949013e-03 1.045328653742e-01 5.895118096371e-04 1.000000000000e-03 +8.651909314930e-01 8.651909314930e-01 1.109049931063e+00 1.223564749360e+00 1.651394091507e+00 1.959174277886e+00 1.250668263013e-02 9.575474809441e-03 1.031475470137e-01 5.104191144644e-04 1.000000000000e-03 +9.562829596557e-01 8.414032030634e-01 1.075246285938e+00 1.273748974113e+00 1.666910622822e+00 2.245278033217e+00 1.389104906807e-02 9.280175236141e-03 1.015446001417e-01 4.453791402249e-04 1.000000000000e-03 +1.042248641364e+00 8.173733086010e-01 1.042248641364e+00 1.324530617252e+00 1.685426826197e+00 2.476902956043e+00 1.462932060890e-02 8.859443144440e-03 9.921605573719e-02 4.037299877092e-04 1.000000000000e-03 +1.128115221185e+00 7.942060883177e-01 1.011231070120e+00 1.379640265790e+00 1.710554161717e+00 2.177539414007e+00 1.070338896958e-02 7.373039197861e-03 9.051113619551e-02 4.592339378876e-04 1.000000000000e-03 +1.232747497838e+00 7.768084067885e-01 9.882726896745e-01 1.457085342141e+00 1.760619380627e+00 1.195040731370e+00 2.815238107385e-03 3.533651239014e-03 6.266002836306e-02 8.367915617852e-04 1.000000000000e-03 +6.163607124851e-02 1.064450496378e+00 1.212914349692e+00 1.066233494370e+00 1.614935009283e+00 1.135665123048e+00 7.157605696407e-03 9.453850723001e-03 1.024903828713e-01 8.805412614209e-04 1.000000000000e-03 +1.842782033153e-01 1.060150968893e+00 1.206876174523e+00 1.076047644420e+00 1.616919488933e+00 1.174130940601e+00 7.459339961738e-03 9.529609991270e-03 1.029002213110e-01 8.516937638049e-04 1.000000000000e-03 +3.049667002885e-01 1.051512747459e+00 1.195000584812e+00 1.094844165328e+00 1.620712850586e+00 1.254459887436e+00 8.018345317123e-03 9.587805952304e-03 1.032139415233e-01 7.971558198198e-04 1.000000000000e-03 +4.224156346172e-01 1.038703247058e+00 1.177848750951e+00 1.121311466016e+00 1.626243242548e+00 1.377700454173e+00 8.854761863461e-03 9.640805993029e-03 1.034988244326e-01 7.258471875878e-04 1.000000000000e-03 +5.355335358284e-01 1.022155802474e+00 1.156306063684e+00 1.153949155088e+00 1.633597981586e+00 1.543510279290e+00 9.962744647840e-03 9.681903108953e-03 1.037191887794e-01 6.478738842348e-04 1.000000000000e-03 +6.434460203626e-01 1.002449873478e+00 1.131373274735e+00 1.191187865098e+00 1.642843272117e+00 1.744579158762e+00 1.122913497496e-02 9.654880019541e-03 1.035743427020e-01 5.732041420865e-04 1.000000000000e-03 +7.455177973868e-01 9.802600292904e-01 1.104052824594e+00 1.231546390212e+00 1.653976768500e+00 1.976524839335e+00 1.248259589324e-02 9.473138645792e-03 1.025948809953e-01 5.059384937134e-04 1.000000000000e-03 +8.414032030634e-01 9.562829596557e-01 1.075246285938e+00 1.273748974113e+00 1.666910622822e+00 2.245278033217e+00 1.389104906807e-02 9.280175236141e-03 1.015446001417e-01 4.453791402249e-04 1.000000000000e-03 +9.312756973440e-01 9.312756973440e-01 1.045808648562e+00 1.317022721492e+00 1.681744504476e+00 2.502999818366e+00 1.499338049137e-02 8.985246651651e-03 9.991800333635e-02 3.995206043015e-04 1.000000000000e-03 +1.016919028155e+00 9.063638715275e-01 1.016919028155e+00 1.362211355640e+00 1.699924729880e+00 2.449210090167e+00 1.305008499731e-02 7.992424812615e-03 9.423625636673e-02 4.082949045550e-04 1.000000000000e-03 +1.104943433479e+00 8.836419975174e-01 9.908258514853e-01 1.414822664141e+00 1.727269243325e+00 1.785452212478e+00 6.361098757683e-03 5.344107263044e-03 7.705775080378e-02 5.600821982303e-04 1.000000000000e-03 +1.214611559462e+00 8.681250339553e-01 9.731243314145e-01 1.492957573060e+00 1.782103610722e+00 9.907738747659e-01 1.502494191589e-03 2.274728214766e-03 5.027400714271e-02 1.009312039275e-03 1.000000000000e-03 +5.957952108330e-02 1.158406393543e+00 1.158406393543e+00 1.159937537945e+00 1.639317072606e+00 1.348342187885e+00 8.164505858429e-03 9.082826969062e-03 1.004590959825e-01 7.416514954330e-04 1.000000000000e-03 +1.781478653405e-01 1.153458196436e+00 1.153458196436e+00 1.167134299407e+00 1.640935185733e+00 1.396720173270e+00 8.517536244764e-03 9.147361519975e-03 1.008153511237e-01 7.159630247615e-04 1.000000000000e-03 +2.949108295225e-01 1.143703230613e+00 1.143703230613e+00 1.181113659681e+00 1.644106613575e+00 1.491005935444e+00 9.156507946655e-03 9.211741947822e-03 1.011695054397e-01 6.706881416284e-04 1.000000000000e-03 +4.087066196306e-01 1.129543891040e+00 1.129543891040e+00 1.201212097307e+00 1.648872312977e+00 1.624967965295e+00 1.003146883962e-02 9.259999938952e-03 1.014341600303e-01 6.153967471097e-04 1.000000000000e-03 +5.185506873350e-01 1.111608269261e+00 1.111608269261e+00 1.226608233963e+00 1.655367241405e+00 1.795550997312e+00 1.104414605326e-02 9.226259295718e-03 1.012491936633e-01 5.569321069113e-04 1.000000000000e-03 +6.236341842757e-01 1.090596979153e+00 1.090596979153e+00 1.256312607091e+00 1.663647540097e+00 2.004458153756e+00 1.225078724166e-02 9.167655023404e-03 1.009271190480e-01 4.988879404272e-04 1.000000000000e-03 +7.233361674103e-01 1.067213435118e+00 1.067213435118e+00 1.289247736930e+00 1.673649976332e+00 2.251837144882e+00 1.364568985306e-02 9.089704744463e-03 1.004971240300e-01 4.440818476917e-04 1.000000000000e-03 +8.173733086010e-01 1.042248641364e+00 1.042248641364e+00 1.324530617252e+00 1.685426826197e+00 2.476902956043e+00 1.462932060890e-02 8.859443144440e-03 9.921605573719e-02 4.037299877092e-04 1.000000000000e-03 +9.063638715275e-01 1.016919028155e+00 1.016919028155e+00 1.362211355640e+00 1.699924729880e+00 2.449210090167e+00 1.305008499731e-02 7.992424812615e-03 9.423625636673e-02 4.082949045550e-04 1.000000000000e-03 +9.932196578616e-01 9.932196578616e-01 9.932196578616e-01 1.404624710564e+00 1.720306910493e+00 1.982522496980e+00 7.711865241653e-03 5.834888572565e-03 8.051838004500e-02 5.044078952564e-04 1.000000000000e-03 +1.085864278179e+00 9.739128711009e-01 9.739128711009e-01 1.458632068453e+00 1.753885341639e+00 1.327614272590e+00 2.717945542275e-03 3.070860563632e-03 5.841290347966e-02 7.532308296512e-04 1.000000000000e-03 +1.202013475611e+00 9.624888800652e-01 9.624888800652e-01 1.539877020998e+00 1.815931189238e+00 8.071049583994e-01 7.256082793627e-04 1.348538882976e-03 3.870886896616e-02 1.238996229168e-03 1.000000000000e-03 +5.784907143963e-02 1.253361651229e+00 1.116774932033e+00 1.254695956731e+00 1.679716700118e+00 1.450791165152e+00 8.466325700597e-03 8.753491788438e-03 9.862100175497e-02 6.892790802839e-04 1.000000000000e-03 +1.729468384733e-01 1.247650836693e+00 1.112166984406e+00 1.259580572746e+00 1.680315036069e+00 1.500560135050e+00 8.793287599560e-03 8.790005206225e-03 9.882647646942e-02 6.664178106843e-04 1.000000000000e-03 +2.862259112608e-01 1.236511166045e+00 1.103122328323e+00 1.269206498577e+00 1.681595672948e+00 1.600796209087e+00 9.427415295099e-03 8.833805866339e-03 9.907239702101e-02 6.246891355210e-04 1.000000000000e-03 +3.965450756751e-01 1.220532347930e+00 1.090014880287e+00 1.283334410583e+00 1.683769476096e+00 1.751940775812e+00 1.035997289584e-02 8.870139652152e-03 9.927593225255e-02 5.707955507436e-04 1.000000000000e-03 +5.029733265701e-01 1.200581386481e+00 1.073427001732e+00 1.301682692827e+00 1.687193931015e+00 1.950273910227e+00 1.154916491706e-02 8.882725285279e-03 9.934633743335e-02 5.127484886897e-04 1.000000000000e-03 +6.048311205815e-01 1.177690065573e+00 1.054094481575e+00 1.323923930962e+00 1.692303090779e+00 2.166316017304e+00 1.272096306861e-02 8.808246096370e-03 9.892896495505e-02 4.616131681677e-04 1.000000000000e-03 +7.017987214843e-01 1.153039319625e+00 1.032936857347e+00 1.349822624673e+00 1.699699876256e+00 2.297642445977e+00 1.291270964554e-02 8.429973298162e-03 9.678138766291e-02 4.352287283649e-04 1.000000000000e-03 +7.942060883177e-01 1.128115221185e+00 1.011231070120e+00 1.379640265790e+00 1.710554161717e+00 2.177539414007e+00 1.070338896958e-02 7.373039197861e-03 9.051113619550e-02 4.592339378876e-04 1.000000000000e-03 +8.836419975174e-01 1.104943433479e+00 9.908258514853e-01 1.414822664141e+00 1.727269243325e+00 1.785452212478e+00 6.361098757683e-03 5.344107263044e-03 7.705775080378e-02 5.600821982303e-04 1.000000000000e-03 +9.739128711009e-01 1.085864278179e+00 9.739128711009e-01 1.458632068453e+00 1.753885341639e+00 1.327614272590e+00 2.717945542275e-03 3.070860563632e-03 5.841290347966e-02 7.532308296512e-04 1.000000000000e-03 +1.072729733568e+00 1.072729733568e+00 9.622576740030e-01 1.517068937973e+00 1.796507164957e+00 9.431600055070e-01 9.399833961891e-04 1.494947926175e-03 4.075602104359e-02 1.060265484288e-03 1.000000000000e-03 +1.194973549164e+00 1.066257919723e+00 9.565290788272e-01 1.601520444632e+00 1.865426389117e+00 6.464506273144e-01 3.944837525842e-04 9.153454322327e-04 3.189122889226e-02 1.546908546062e-03 1.000000000000e-03 +5.660505783159e-02 1.358586021467e+00 1.089316721140e+00 1.359764726082e+00 1.742289020011e+00 1.344396010927e+00 5.466830024163e-03 6.099575548867e-03 8.232439593102e-02 7.438284492606e-04 1.000000000000e-03 +1.691657718358e-01 1.352396204916e+00 1.084475727711e+00 1.362935271182e+00 1.741746295367e+00 1.364104245673e+00 5.563498269483e-03 6.117749014195e-03 8.244694599960e-02 7.330818030749e-04 1.000000000000e-03 +2.797479345003e-01 1.340326955627e+00 1.075006109282e+00 1.369209719085e+00 1.740796768676e+00 1.407215630922e+00 5.700657811359e-03 6.076529089886e-03 8.216872269156e-02 7.106231468911e-04 1.000000000000e-03 +3.871752586343e-01 1.323151328814e+00 1.061468186084e+00 1.378634875462e+00 1.739927823190e+00 1.460556720018e+00 5.836493212310e-03 5.994111490828e-03 8.160958202747e-02 6.846704316884e-04 1.000000000000e-03 +4.906337568632e-01 1.302083856970e+00 1.044736188792e+00 1.391453863394e+00 1.740005045432e+00 1.497552032017e+00 5.792580146321e-03 5.802048966391e-03 8.029147572294e-02 6.677564309088e-04 1.000000000000e-03 +5.897488812202e-01 1.278687168889e+00 1.025934507210e+00 1.408135156433e+00 1.742235986274e+00 1.479043837951e+00 5.372001952722e-03 5.448116358910e-03 7.780400131748e-02 6.761124818218e-04 1.000000000000e-03 +6.847713183369e-01 1.254854971374e+00 1.006517982826e+00 1.429535853904e+00 1.748328117760e+00 1.374574734162e+00 4.286414628282e-03 4.677535373398e-03 7.209203510789e-02 7.274977308597e-04 1.000000000000e-03 +7.768084067885e-01 1.232747497838e+00 9.882726896745e-01 1.457085342141e+00 1.760619380627e+00 1.195040731370e+00 2.815238107385e-03 3.533651239014e-03 6.266002836306e-02 8.367915617852e-04 1.000000000000e-03 +8.681250339553e-01 1.214611559462e+00 9.731243314145e-01 1.492957573060e+00 1.782103610722e+00 9.907738747659e-01 1.502494191589e-03 2.274728214766e-03 5.027400714271e-02 1.009312039275e-03 1.000000000000e-03 +9.624888800652e-01 1.202013475611e+00 9.624888800652e-01 1.539877020998e+00 1.815931189238e+00 8.071049583994e-01 7.256082793626e-04 1.348538882976e-03 3.870886896616e-02 1.238996229168e-03 1.000000000000e-03 +1.066257919723e+00 1.194973549164e+00 9.565290788272e-01 1.601520444632e+00 1.865426389117e+00 6.464506273144e-01 3.944837525842e-04 9.153454322327e-04 3.189122889226e-02 1.546908546062e-03 1.000000000000e-03 +1.192167331410e+00 1.192167331410e+00 9.541757636728e-01 1.685979208698e+00 1.937260251010e+00 4.860155096566e-01 2.629922746421e-04 8.116786483663e-04 3.003106999179e-02 2.057547506471e-03 1.000000000000e-03 +7.502520181018e-02 7.502520181018e-02 1.814688658443e+00 1.061016579197e-01 1.817787800844e+00 2.263915272180e-01 1.372942183668e-03 9.096688824042e-03 1.005357251265e-01 4.417126437055e-03 1.000000000000e-03 +2.236659649978e-01 7.442429884766e-02 1.792764079138e+00 2.357232278698e-01 1.808194813510e+00 2.372392021135e-01 1.450588623995e-03 9.171683754654e-03 1.009492928524e-01 4.215154962127e-03 1.000000000000e-03 +3.672666287525e-01 7.323829529244e-02 1.750963033217e+00 3.744978297568e-01 1.790564203871e+00 2.633058010030e-01 1.604122314014e-03 9.138361030616e-03 1.007657405990e-01 3.797865433237e-03 1.000000000000e-03 +5.026549077567e-01 7.155850358378e-02 1.692728296636e+00 5.077229320476e-01 1.767232769603e+00 3.055242546353e-01 1.852190812833e-03 9.093504614113e-03 1.005181277963e-01 3.273062563211e-03 1.000000000000e-03 +6.283698932303e-01 6.953194517343e-02 1.622727110525e+00 6.322051993759e-01 1.741529985200e+00 3.695145391020e-01 2.231197325279e-03 9.057278222534e-03 1.003177076566e-01 2.706253460094e-03 1.000000000000e-03 +7.438066435460e-01 6.728284433015e-02 1.545724628631e+00 7.468435606767e-01 1.716694478258e+00 4.649401179479e-01 2.790914531278e-03 9.004109637591e-03 1.000228287142e-01 2.150814613318e-03 1.000000000000e-03 +8.491323997058e-01 6.490656965719e-02 1.466257821884e+00 8.516094733003e-01 1.695626932804e+00 6.062470187133e-01 3.625131766219e-03 8.969442292464e-03 9.983009061213e-02 1.649492647605e-03 1.000000000000e-03 +9.452165486884e-01 6.247913831093e-02 1.388637024867e+00 9.472792442772e-01 1.680967207732e+00 8.114045646364e-01 4.852796124912e-03 8.971103324554e-03 9.983933384612e-02 1.232430828693e-03 1.000000000000e-03 +1.033430331067e+00 6.008689741434e-02 1.316679761772e+00 1.035175678042e+00 1.674883362945e+00 1.101084815190e+00 6.610739498881e-03 9.005763326785e-03 1.000320133579e-01 9.081952509054e-04 1.000000000000e-03 +1.116774932033e+00 5.784907143963e-02 1.253361651229e+00 1.118272222620e+00 1.679716700118e+00 1.450791165152e+00 8.466325700597e-03 8.753491788438e-03 9.862100175497e-02 6.892790802839e-04 1.000000000000e-03 +1.200635941474e+00 5.586324528300e-02 1.200635941474e+00 1.201934842715e+00 1.698874342054e+00 1.746327852798e+00 9.539908799339e-03 8.194259271581e-03 9.541872208314e-02 5.726301612827e-04 1.000000000000e-03 +1.298330300283e+00 5.430564311828e-02 1.162172677002e+00 1.299465533021e+00 1.743346208496e+00 1.379840548527e+00 4.765118926291e-03 5.180075623279e-03 7.586593162561e-02 7.247214187666e-04 1.000000000000e-03 +7.442429884766e-02 2.236659649978e-01 1.792764079138e+00 2.357232278698e-01 1.808194813510e+00 2.372392021135e-01 1.450588623995e-03 9.171683754654e-03 1.009492928524e-01 4.215154962127e-03 1.000000000000e-03 +2.218406349285e-01 2.218406349285e-01 1.771584394374e+00 3.137300346013e-01 1.799149188089e+00 2.489518161987e-01 1.530660461625e-03 9.222630818671e-03 1.012292822078e-01 4.016841552993e-03 1.000000000000e-03 +3.643589411072e-01 2.183205013157e-01 1.731164105974e+00 4.247602609231e-01 1.782512395769e+00 2.760835954578e-01 1.693287471750e-03 9.199862829276e-03 1.011042521871e-01 3.622091339190e-03 1.000000000000e-03 +4.989802018336e-01 2.133852440128e-01 1.674814854749e+00 5.426919053978e-01 1.760545171778e+00 3.200447976029e-01 1.955545957297e-03 9.165338596083e-03 1.009143674172e-01 3.124562584644e-03 1.000000000000e-03 +6.242060412632e-01 2.074300686996e-01 1.606972277217e+00 6.577692721237e-01 1.736381385265e+00 3.868122113671e-01 2.353506056874e-03 9.126545082002e-03 1.007005742122e-01 2.585233792040e-03 1.000000000000e-03 +7.393855398180e-01 2.008062243713e-01 1.532257007337e+00 7.661684646592e-01 1.713133285175e+00 4.863466868039e-01 2.943073671338e-03 9.077085599203e-03 1.004273402305e-01 2.056146422158e-03 1.000000000000e-03 +8.446325348486e-01 1.937976245685e-01 1.455113460470e+00 8.665804280118e-01 1.693610587194e+00 6.332878750210e-01 3.822175624372e-03 9.053171018580e-03 1.002949595420e-01 1.579060707529e-03 1.000000000000e-03 +9.407003196342e-01 1.866336474901e-01 1.379695390770e+00 9.590355622892e-01 1.680270389267e+00 8.464019021195e-01 5.120356838816e-03 9.074336008687e-03 1.004121285762e-01 1.181471825023e-03 1.000000000000e-03 +1.028912315955e+00 1.795714094445e-01 1.309603655166e+00 1.044464669108e+00 1.675102438252e+00 1.143910079484e+00 6.955349439950e-03 9.120493251206e-03 1.006671812967e-01 8.741945874371e-04 1.000000000000e-03 +1.112166984406e+00 1.729468384733e-01 1.247650836693e+00 1.125533655712e+00 1.680315036069e+00 1.500560135050e+00 8.793287599560e-03 8.790005206225e-03 9.882647646942e-02 6.664178106843e-04 1.000000000000e-03 +1.195764558924e+00 1.670301782390e-01 1.195764558924e+00 1.207373993766e+00 1.699295395510e+00 1.794011031134e+00 9.850791185960e-03 8.236396835087e-03 9.566374464229e-02 5.574101734303e-04 1.000000000000e-03 +1.293543981943e+00 1.624007249792e-01 1.157889545021e+00 1.303698595802e+00 1.743656568010e+00 1.375266716499e+00 4.721061920970e-03 5.149250539184e-03 7.563986705423e-02 7.271316814424e-04 1.000000000000e-03 +7.323829529244e-02 3.672666287525e-01 1.750963033217e+00 3.744978297568e-01 1.790564203871e+00 2.633058010030e-01 1.604122314014e-03 9.138361030616e-03 1.007657405990e-01 3.797865433237e-03 1.000000000000e-03 +2.183205013157e-01 3.643589411072e-01 1.731164105974e+00 4.247602609231e-01 1.782512395769e+00 2.760835954578e-01 1.693287471750e-03 9.199862829276e-03 1.011042521871e-01 3.622091339190e-03 1.000000000000e-03 +3.588038188863e-01 3.588038188863e-01 1.693336200238e+00 5.074252269002e-01 1.767729574321e+00 3.051605679660e-01 1.870465847885e-03 9.194172073177e-03 1.010729773380e-01 3.276963359537e-03 1.000000000000e-03 +4.919167844354e-01 3.510308821177e-01 1.640505363151e+00 6.043217710869e-01 1.748274191750e+00 3.526578338866e-01 2.156942931427e-03 9.174372681543e-03 1.009640897742e-01 2.835609772167e-03 1.000000000000e-03 +6.161389458699e-01 3.416015236061e-01 1.576726065953e+00 7.044989719991e-01 1.726957986925e+00 4.251364271649e-01 2.591329505612e-03 9.142933914976e-03 1.007909493014e-01 2.352186112747e-03 1.000000000000e-03 +7.307558486012e-01 3.310522362219e-01 1.506345751312e+00 8.022466536997e-01 1.706656736391e+00 5.330062446019e-01 3.239666903538e-03 9.117154638471e-03 1.006487546894e-01 1.876150626991e-03 1.000000000000e-03 +8.357768441223e-01 3.198395015379e-01 1.433597458347e+00 8.948856015799e-01 1.689976897030e+00 6.914072014261e-01 4.207719858567e-03 9.128600012890e-03 1.007119104337e-01 1.446325693365e-03 1.000000000000e-03 +9.317656069060e-01 3.083352685409e-01 1.362338852483e+00 9.814569700395e-01 1.679054773682e+00 9.198562424836e-01 5.634525805361e-03 9.188162582038e-03 1.010399402989e-01 1.087126394120e-03 1.000000000000e-03 +1.019979466566e+00 2.969611539952e-01 1.295788766245e+00 1.062329534183e+00 1.675593198221e+00 1.231308602163e+00 7.578522799459e-03 9.232278714873e-03 1.012822169039e-01 8.121440865786e-04 1.000000000000e-03 +1.103122328323e+00 2.862259112608e-01 1.236511166045e+00 1.139650886685e+00 1.681595672948e+00 1.600796209087e+00 9.427415295099e-03 8.833805866339e-03 9.907239702101e-02 6.246891355210e-04 1.000000000000e-03 +1.186321215023e+00 2.765219321198e-01 1.186321215023e+00 1.218122491442e+00 1.700347149664e+00 1.882396034612e+00 1.038491412380e-02 8.275288993000e-03 9.588934011546e-02 5.312378381662e-04 1.000000000000e-03 +1.284312852455e+00 2.689395732064e-01 1.149543289754e+00 1.312169195271e+00 1.744487825133e+00 1.364033383743e+00 4.609265375184e-03 5.068716165730e-03 7.504603154605e-02 7.331198868870e-04 1.000000000000e-03 +7.155850358378e-02 5.026549077567e-01 1.692728296636e+00 5.077229320476e-01 1.767232769603e+00 3.055242546353e-01 1.852190812833e-03 9.093504614113e-03 1.005181277963e-01 3.273062563211e-03 1.000000000000e-03 +2.133852440128e-01 4.989802018336e-01 1.674814854749e+00 5.426919053978e-01 1.760545171778e+00 3.200447976029e-01 1.955545957297e-03 9.165338596083e-03 1.009143674172e-01 3.124562584644e-03 1.000000000000e-03 +3.510308821177e-01 4.919167844354e-01 1.640505363151e+00 6.043217710869e-01 1.748274191750e+00 3.526578338866e-01 2.156942931427e-03 9.174372681543e-03 1.009640897742e-01 2.835609772167e-03 1.000000000000e-03 +4.819563289130e-01 4.819563289130e-01 1.592444840026e+00 6.815891768204e-01 1.732179082683e+00 4.062801890039e-01 2.481826823193e-03 9.162987355885e-03 1.009014224979e-01 2.461355554776e-03 1.000000000000e-03 +6.046598150465e-01 4.697659619661e-01 1.534247348602e+00 7.656980808086e-01 1.714703612187e+00 4.881216931900e-01 2.978233586532e-03 9.152124238942e-03 1.008415932647e-01 2.048669448524e-03 1.000000000000e-03 +7.183707844328e-01 4.560153958703e-01 1.469878075327e+00 8.508857885741e-01 1.698395767048e+00 6.093382556013e-01 3.722223875666e-03 9.162949744538e-03 1.009012154124e-01 1.641124598378e-03 1.000000000000e-03 +8.229410200483e-01 4.412805355858e-01 1.403204210522e+00 9.337882166557e-01 1.685509563898e+00 7.859568510859e-01 4.832671658811e-03 9.223162159857e-03 1.012321982148e-01 1.272334478182e-03 1.000000000000e-03 +9.187365206375e-01 4.260618971927e-01 1.337640979816e+00 1.012721844631e+00 1.677763071913e+00 1.036377402053e+00 6.455032921571e-03 9.342686711592e-03 1.018860295275e-01 9.648994642482e-04 1.000000000000e-03 +1.006945781093e+00 4.109412087111e-01 1.275981790990e+00 1.087571828928e+00 1.676586417103e+00 1.366368737595e+00 8.473820272142e-03 9.302562374623e-03 1.016670075110e-01 7.318668617668e-04 1.000000000000e-03 +1.090014880287e+00 3.965450756751e-01 1.220532347930e+00 1.159905356609e+00 1.683769476096e+00 1.751940775812e+00 1.035997289584e-02 8.870139652152e-03 9.927593225255e-02 5.707955507436e-04 1.000000000000e-03 +1.172850167435e+00 3.833356990626e-01 1.172850167435e+00 1.233905901367e+00 1.702381064474e+00 1.994361002634e+00 1.099126999138e-02 8.266760614199e-03 9.583991637795e-02 5.014137353664e-04 1.000000000000e-03 +1.271371561724e+00 3.730423835197e-01 1.137731754167e+00 1.324970289426e+00 1.746419139927e+00 1.331142874546e+00 4.288473731024e-03 4.832471945381e-03 7.327628042310e-02 7.512341606014e-04 1.000000000000e-03 +6.953194517343e-02 6.283698932303e-01 1.622727110525e+00 6.322051993759e-01 1.741529985200e+00 3.695145391020e-01 2.231197325279e-03 9.057278222534e-03 1.003177076566e-01 2.706253460094e-03 1.000000000000e-03 +2.074300686996e-01 6.242060412632e-01 1.606972277217e+00 6.577692721237e-01 1.736381385265e+00 3.868122113671e-01 2.353506056874e-03 9.126545082002e-03 1.007005742122e-01 2.585233792040e-03 1.000000000000e-03 +3.416015236061e-01 6.161389458699e-01 1.576726065953e+00 7.044989719991e-01 1.726957986925e+00 4.251364271649e-01 2.591329505612e-03 9.142933914976e-03 1.007909493014e-01 2.352186112747e-03 1.000000000000e-03 +4.697659619661e-01 6.046598150465e-01 1.534247348602e+00 7.656980808086e-01 1.714703612187e+00 4.881216931900e-01 2.978233586532e-03 9.152124238942e-03 1.008415932647e-01 2.048669448524e-03 1.000000000000e-03 +5.904794865893e-01 5.904794865893e-01 1.482674688175e+00 8.350640982377e-01 1.701662798300e+00 5.837704181984e-01 3.570984584511e-03 9.175656576257e-03 1.009711541660e-01 1.713002181724e-03 1.000000000000e-03 +7.029097008226e-01 5.743229015866e-01 1.425485468111e+00 9.077052620743e-01 1.689951970499e+00 7.243023106277e-01 4.460797282004e-03 9.238125883110e-03 1.013142848495e-01 1.380638975366e-03 1.000000000000e-03 +8.067348567609e-01 5.568258523935e-01 1.366017705788e+00 9.802429081644e-01 1.681332962721e+00 9.260192904560e-01 5.779637366267e-03 9.362068521415e-03 1.019916582723e-01 1.079891110592e-03 1.000000000000e-03 +9.021973537173e-01 5.386256755352e-01 1.307150433121e+00 1.050751009231e+00 1.677116554748e+00 1.202500683800e+00 7.613799585492e-03 9.497457699689e-03 1.027264852773e-01 8.316003587123e-04 1.000000000000e-03 +9.903793681916e-01 5.204497174913e-01 1.251328482693e+00 1.118802574799e+00 1.678553595503e+00 1.554923246001e+00 9.617857616112e-03 9.278134120943e-03 1.015334324849e-01 6.431185607212e-04 1.000000000000e-03 +1.073427001732e+00 5.029733265701e-01 1.200581386481e+00 1.185423002683e+00 1.687193931015e+00 1.950273910227e+00 1.154916491706e-02 8.882725285279e-03 9.934633743335e-02 5.127484886897e-04 1.000000000000e-03 +1.156164794123e+00 4.867172805775e-01 1.156164794123e+00 1.254436424209e+00 1.705968280347e+00 2.081286155557e+00 1.123729531029e-02 8.098810882124e-03 9.486136599225e-02 4.804721336997e-04 1.000000000000e-03 +1.255877507326e+00 4.741889290055e-01 1.123481907900e+00 1.342417019335e+00 1.750512796633e+00 1.259672531774e+00 3.682455359357e-03 4.385015073130e-03 6.980142527302e-02 7.938571134768e-04 1.000000000000e-03 +6.728284433015e-02 7.438066435460e-01 1.545724628631e+00 7.468435606767e-01 1.716694478258e+00 4.649401179479e-01 2.790914531278e-03 9.004109637591e-03 1.000228287142e-01 2.150814613318e-03 1.000000000000e-03 +2.008062243713e-01 7.393855398180e-01 1.532257007337e+00 7.661684646592e-01 1.713133285175e+00 4.863466868039e-01 2.943073671338e-03 9.077085599203e-03 1.004273402305e-01 2.056146422158e-03 1.000000000000e-03 +3.310522362219e-01 7.307558486012e-01 1.506345751312e+00 8.022466536997e-01 1.706656736391e+00 5.330062446019e-01 3.239666903538e-03 9.117154638471e-03 1.006487546894e-01 1.876150626991e-03 1.000000000000e-03 +4.560153958703e-01 7.183707844328e-01 1.469878075327e+00 8.508857885741e-01 1.698395767048e+00 6.093382556013e-01 3.722223875666e-03 9.162949744538e-03 1.009012154124e-01 1.641124598378e-03 1.000000000000e-03 +5.743229015866e-01 7.029097008226e-01 1.425485468111e+00 9.077052620743e-01 1.689951970499e+00 7.243023106277e-01 4.460797282004e-03 9.238125883110e-03 1.013142848495e-01 1.380638975366e-03 1.000000000000e-03 +6.850801574062e-01 6.850801574062e-01 1.376049516029e+00 9.688496499165e-01 1.682908766008e+00 8.906393814080e-01 5.561586651297e-03 9.366731531406e-03 1.020170548455e-01 1.122788887259e-03 1.000000000000e-03 +7.878658606411e-01 6.655840150743e-01 1.324283316631e+00 1.031375147794e+00 1.678529415349e+00 1.121648662096e+00 7.138684173176e-03 9.546684823533e-03 1.029923666186e-01 8.915447713651e-04 1.000000000000e-03 +8.828657922736e-01 6.451971592202e-01 1.272600348991e+00 1.093495030365e+00 1.677868597264e+00 1.425638633191e+00 9.032264740145e-03 9.503388021896e-03 1.027585520739e-01 7.014400260478e-04 1.000000000000e-03 +9.709783902237e-01 6.247174631815e-01 1.223175560708e+00 1.154586914479e+00 1.682031330089e+00 1.801304254948e+00 1.106376075363e-02 9.213124925932e-03 1.011770995495e-01 5.551532992015e-04 1.000000000000e-03 +1.054094481575e+00 6.048311205815e-01 1.177690065573e+00 1.215292499981e+00 1.692303090779e+00 2.166316017304e+00 1.272096306861e-02 8.808246096370e-03 9.892896495505e-02 4.616131681677e-04 1.000000000000e-03 +1.137347756551e+00 5.862518666845e-01 1.137347756551e+00 1.279551159791e+00 1.711961182344e+00 2.055106567130e+00 1.037664892944e-02 7.573803540464e-03 9.173514739282e-02 4.865927713893e-04 1.000000000000e-03 +1.239337071444e+00 5.723294249028e-01 1.108165352215e+00 1.365107082710e+00 1.758279782945e+00 1.144744203412e+00 2.802043404239e-03 3.671619470821e-03 6.387156792972e-02 8.735576009200e-04 1.000000000000e-03 +6.490656965719e-02 8.491323997058e-01 1.466257821884e+00 8.516094733003e-01 1.695626932804e+00 6.062470187133e-01 3.625131766219e-03 8.969442292464e-03 9.983009061213e-02 1.649492647605e-03 1.000000000000e-03 +1.937976245685e-01 8.446325348486e-01 1.455113460470e+00 8.665804280118e-01 1.693610587194e+00 6.332878750210e-01 3.822175624372e-03 9.053171018580e-03 1.002949595420e-01 1.579060707529e-03 1.000000000000e-03 +3.198395015379e-01 8.357768441223e-01 1.433597458347e+00 8.948856015799e-01 1.689976897030e+00 6.914072014261e-01 4.207719858567e-03 9.128600012890e-03 1.007119104337e-01 1.446325693365e-03 1.000000000000e-03 +4.412805355858e-01 8.229410200483e-01 1.403204210522e+00 9.337882166557e-01 1.685509563898e+00 7.859568510859e-01 4.832671658811e-03 9.223162159857e-03 1.012321982148e-01 1.272334478182e-03 1.000000000000e-03 +5.568258523935e-01 8.067348567609e-01 1.366017705788e+00 9.802429081644e-01 1.681332962721e+00 9.260192904560e-01 5.779637366267e-03 9.362068521415e-03 1.019916582723e-01 1.079891110592e-03 1.000000000000e-03 +6.655840150743e-01 7.878658606411e-01 1.324283316631e+00 1.031375147794e+00 1.678529415349e+00 1.121648662096e+00 7.138684173176e-03 9.546684823533e-03 1.029923666186e-01 8.915447713651e-04 1.000000000000e-03 +7.671214493751e-01 7.671214493751e-01 1.280177786094e+00 1.084873557694e+00 1.678036292871e+00 1.381982514719e+00 8.815347492348e-03 9.568153791880e-03 1.031081082698e-01 7.235981565246e-04 1.000000000000e-03 +8.615339747593e-01 7.453316303499e-01 1.235779076697e+00 1.139192709275e+00 1.680746844491e+00 1.713513572033e+00 1.069527559836e-02 9.362583208782e-03 1.019944617711e-01 5.835961945801e-04 1.000000000000e-03 +9.495091400692e-01 7.232918773267e-01 1.192923960506e+00 1.193615828850e+00 1.687538539539e+00 2.090961170124e+00 1.267319859218e-02 9.091416024312e-03 1.005065836667e-01 4.782489576030e-04 1.000000000000e-03 +1.032936857347e+00 7.017987214843e-01 1.153039319625e+00 1.248791414426e+00 1.699699876256e+00 2.297642445977e+00 1.291270964554e-02 8.429973298162e-03 9.678138766291e-02 4.352287283649e-04 1.000000000000e-03 +1.117806969241e+00 6.820608308668e-01 1.117806969241e+00 1.309465309768e+00 1.721682844769e+00 1.849141598927e+00 7.801262938981e-03 6.328284656655e-03 8.385360693663e-02 5.407914680955e-04 1.000000000000e-03 +1.223509073280e+00 6.680440732049e-01 1.093410852323e+00 1.394007652828e+00 1.771667188870e+00 1.001630601892e+00 1.834343250417e-03 2.747035554254e-03 5.524727800488e-02 9.983720526423e-04 1.000000000000e-03 +6.247913831093e-02 9.452165486884e-01 1.388637024867e+00 9.472792442772e-01 1.680967207732e+00 8.114045646364e-01 4.852796124912e-03 8.971103324554e-03 9.983933384612e-02 1.232430828693e-03 1.000000000000e-03 +1.866336474901e-01 9.407003196342e-01 1.379695390770e+00 9.590355622892e-01 1.680270389267e+00 8.464019021195e-01 5.120356838817e-03 9.074336008687e-03 1.004121285762e-01 1.181471825023e-03 1.000000000000e-03 +3.083352685409e-01 9.317656069060e-01 1.362338852483e+00 9.814569700395e-01 1.679054773682e+00 9.198562424836e-01 5.634525805361e-03 9.188162582038e-03 1.010399402989e-01 1.087126394120e-03 1.000000000000e-03 +4.260618971927e-01 9.187365206375e-01 1.337640979816e+00 1.012721844631e+00 1.677763071913e+00 1.036377402053e+00 6.455032921571e-03 9.342686711592e-03 1.018860295275e-01 9.648994642482e-04 1.000000000000e-03 +5.386256755352e-01 9.021973537173e-01 1.307150433121e+00 1.050751009231e+00 1.677116554748e+00 1.202500683800e+00 7.613799585492e-03 9.497457699689e-03 1.027264852773e-01 8.316003587123e-04 1.000000000000e-03 +6.451971592202e-01 8.828657922736e-01 1.272600348991e+00 1.093495030365e+00 1.677868597264e+00 1.425638633191e+00 9.032264740145e-03 9.503388021896e-03 1.027585520739e-01 7.014400260478e-04 1.000000000000e-03 +7.453316303499e-01 8.615339747593e-01 1.235779076697e+00 1.139192709275e+00 1.680746844491e+00 1.713513572033e+00 1.069527559836e-02 9.362583208782e-03 1.019944617711e-01 5.835961945801e-04 1.000000000000e-03 +8.390085616902e-01 8.390085616902e-01 1.198391366680e+00 1.186537286889e+00 1.686420054705e+00 2.054618660847e+00 1.256766077991e-02 9.175177627407e-03 1.009685188969e-01 4.867083216249e-04 1.000000000000e-03 +9.268580347225e-01 8.161644911380e-01 1.161960657065e+00 1.234985948553e+00 1.695683597164e+00 2.325069367826e+00 1.354901341025e-02 8.741038180024e-03 9.855082264736e-02 4.300946947381e-04 1.000000000000e-03 +1.011231070120e+00 7.942060883177e-01 1.128115221185e+00 1.285827199859e+00 1.710554161717e+00 2.177539414007e+00 1.070338896958e-02 7.373039197861e-03 9.051113619551e-02 4.592339378876e-04 1.000000000000e-03 +1.099323601866e+00 7.750692994304e-01 1.099323601866e+00 1.345081707756e+00 1.737169301525e+00 1.519986195056e+00 4.568366828904e-03 4.508297684313e-03 7.077584085856e-02 6.579007120282e-04 1.000000000000e-03 +1.210181681557e+00 7.625997339670e-01 1.080878923812e+00 1.430418839579e+00 1.792874034773e+00 8.591881431374e-01 1.055580469321e-03 1.842868429492e-03 4.525076340046e-02 1.163889432119e-03 1.000000000000e-03 +6.008689741434e-02 1.033430331067e+00 1.316679761772e+00 1.035175678042e+00 1.674883362945e+00 1.101084815190e+00 6.610739498881e-03 9.005763326785e-03 1.000320133579e-01 9.081952509054e-04 1.000000000000e-03 +1.795714094445e-01 1.028912315955e+00 1.309603655166e+00 1.044464669108e+00 1.675102438252e+00 1.143910079484e+00 6.955349439950e-03 9.120493251206e-03 1.006671812967e-01 8.741945874371e-04 1.000000000000e-03 +2.969611539952e-01 1.019979466566e+00 1.295788766245e+00 1.062329534183e+00 1.675593198221e+00 1.231308602163e+00 7.578522799459e-03 9.232278714873e-03 1.012822169039e-01 8.121440865786e-04 1.000000000000e-03 +4.109412087111e-01 1.006945781093e+00 1.275981790990e+00 1.087571828928e+00 1.676586417103e+00 1.366368737595e+00 8.473820272142e-03 9.302562374623e-03 1.016670075110e-01 7.318668617668e-04 1.000000000000e-03 +5.204497174913e-01 9.903793681916e-01 1.251328482693e+00 1.118802574799e+00 1.678553595503e+00 1.554923246001e+00 9.617857616112e-03 9.278134120943e-03 1.015334324849e-01 6.431185607212e-04 1.000000000000e-03 +6.247174631815e-01 9.709783902237e-01 1.223175560708e+00 1.154586914479e+00 1.682031330089e+00 1.801304254948e+00 1.106376075363e-02 9.213124925932e-03 1.011770995495e-01 5.551532992015e-04 1.000000000000e-03 +7.232918773267e-01 9.495091400692e-01 1.192923960506e+00 1.193615828850e+00 1.687538539539e+00 2.090961170124e+00 1.267319859218e-02 9.091416024312e-03 1.005065836667e-01 4.782489576030e-04 1.000000000000e-03 +8.161644911380e-01 9.268580347225e-01 1.161960657065e+00 1.234985948553e+00 1.695683597164e+00 2.325069367826e+00 1.354901341025e-02 8.741038180024e-03 9.855082264736e-02 4.300946947381e-04 1.000000000000e-03 +9.042788228805e-01 9.042788228805e-01 1.131902077485e+00 1.278843375484e+00 1.707818108592e+00 2.256940287225e+00 1.152727687952e-02 7.661219668574e-03 9.226302779779e-02 4.430777392120e-04 1.000000000000e-03 +9.908258514853e-01 8.836419975174e-01 1.104943433479e+00 1.327614043217e+00 1.727269243325e+00 1.785452212478e+00 6.361098757683e-03 5.344107263044e-03 7.705775080378e-02 5.600821982303e-04 1.000000000000e-03 +1.083826381180e+00 8.672965028306e-01 1.083826381180e+00 1.388122058165e+00 1.761125342758e+00 1.196606082144e+00 2.163227985742e-03 2.711704400499e-03 5.489084522435e-02 8.356969055419e-04 1.000000000000e-03 +1.200619956825e+00 8.578749342770e-01 1.071761708362e+00 1.475614341075e+00 1.823762825341e+00 7.403215299386e-01 5.999412428887e-04 1.215568949356e-03 3.675094782385e-02 1.350764444312e-03 1.000000000000e-03 +5.784907143963e-02 1.116774932033e+00 1.253361651229e+00 1.118272222620e+00 1.679716700118e+00 1.450791165152e+00 8.466325700597e-03 8.753491788438e-03 9.862100175497e-02 6.892790802839e-04 1.000000000000e-03 +1.729468384733e-01 1.112166984406e+00 1.247650836693e+00 1.125533655712e+00 1.680315036069e+00 1.500560135050e+00 8.793287599560e-03 8.790005206225e-03 9.882647646942e-02 6.664178106843e-04 1.000000000000e-03 +2.862259112608e-01 1.103122328323e+00 1.236511166045e+00 1.139650886685e+00 1.681595672948e+00 1.600796209087e+00 9.427415295099e-03 8.833805866339e-03 9.907239702101e-02 6.246891355210e-04 1.000000000000e-03 +3.965450756751e-01 1.090014880287e+00 1.220532347930e+00 1.159905356609e+00 1.683769476096e+00 1.751940775812e+00 1.035997289584e-02 8.870139652152e-03 9.927593225255e-02 5.707955507436e-04 1.000000000000e-03 +5.029733265701e-01 1.073427001732e+00 1.200581386481e+00 1.185423002683e+00 1.687193931015e+00 1.950273910227e+00 1.154916491706e-02 8.882725285279e-03 9.934633743335e-02 5.127484886897e-04 1.000000000000e-03 +6.048311205815e-01 1.054094481575e+00 1.177690065573e+00 1.215292499981e+00 1.692303090779e+00 2.166316017304e+00 1.272096306861e-02 8.808246096370e-03 9.892896495505e-02 4.616131681677e-04 1.000000000000e-03 +7.017987214843e-01 1.032936857347e+00 1.153039319625e+00 1.248791414426e+00 1.699699876256e+00 2.297642445977e+00 1.291270964554e-02 8.429973298162e-03 9.678138766291e-02 4.352287283649e-04 1.000000000000e-03 +7.942060883177e-01 1.011231070120e+00 1.128115221185e+00 1.285827199859e+00 1.710554161717e+00 2.177539414007e+00 1.070338896958e-02 7.373039197861e-03 9.051113619551e-02 4.592339378876e-04 1.000000000000e-03 +8.836419975174e-01 9.908258514853e-01 1.104943433479e+00 1.327614043217e+00 1.727269243325e+00 1.785452212478e+00 6.361098757683e-03 5.344107263044e-03 7.705775080378e-02 5.600821982303e-04 1.000000000000e-03 +9.739128711009e-01 9.739128711009e-01 1.085864278179e+00 1.377320790881e+00 1.753885341639e+00 1.327614272590e+00 2.717945542275e-03 3.070860563632e-03 5.841290347966e-02 7.532308296512e-04 1.000000000000e-03 +1.072729733568e+00 9.622576740030e-01 1.072729733568e+00 1.441072139922e+00 1.796507164957e+00 9.431600055070e-01 9.399833961891e-04 1.494947926175e-03 4.075602104359e-02 1.060265484288e-03 1.000000000000e-03 +1.194973549164e+00 9.565290788272e-01 1.066257919723e+00 1.530656611341e+00 1.865426389117e+00 6.464506273144e-01 3.944837525842e-04 9.153454322327e-04 3.189122889226e-02 1.546908546062e-03 1.000000000000e-03 +5.586324528300e-02 1.200635941474e+00 1.200635941474e+00 1.201934842715e+00 1.698874342054e+00 1.746327852798e+00 9.539908799339e-03 8.194259271581e-03 9.541872208314e-02 5.726301612827e-04 1.000000000000e-03 +1.670301782390e-01 1.195764558924e+00 1.195764558924e+00 1.207373993766e+00 1.699295395510e+00 1.794011031134e+00 9.850791185960e-03 8.236396835087e-03 9.566374464229e-02 5.574101734302e-04 1.000000000000e-03 +2.765219321198e-01 1.186321215023e+00 1.186321215023e+00 1.218122491442e+00 1.700347149664e+00 1.882396034612e+00 1.038491412380e-02 8.275288993000e-03 9.588934011546e-02 5.312378381662e-04 1.000000000000e-03 +3.833356990626e-01 1.172850167435e+00 1.172850167435e+00 1.233905901367e+00 1.702381064474e+00 1.994361002634e+00 1.099126999138e-02 8.266760614199e-03 9.583991637795e-02 5.014137353664e-04 1.000000000000e-03 +4.867172805775e-01 1.156164794123e+00 1.156164794123e+00 1.254436424209e+00 1.705968280347e+00 2.081286155557e+00 1.123729531029e-02 8.098810882124e-03 9.486136599225e-02 4.804721336997e-04 1.000000000000e-03 +5.862518666845e-01 1.137347756551e+00 1.137347756551e+00 1.279551159791e+00 1.711961182344e+00 2.055106567130e+00 1.037664892944e-02 7.573803540464e-03 9.173514739282e-02 4.865927713893e-04 1.000000000000e-03 +6.820608308668e-01 1.117806969241e+00 1.117806969241e+00 1.309465309768e+00 1.721682844769e+00 1.849141598927e+00 7.801262938981e-03 6.328284656655e-03 8.385360693663e-02 5.407914680955e-04 1.000000000000e-03 +7.750692994304e-01 1.099323601866e+00 1.099323601866e+00 1.345081707756e+00 1.737169301525e+00 1.519986195055e+00 4.568366828904e-03 4.508297684313e-03 7.077584085856e-02 6.579007120282e-04 1.000000000000e-03 +8.672965028306e-01 1.083826381180e+00 1.083826381180e+00 1.388122058165e+00 1.761125342758e+00 1.196606082144e+00 2.163227985742e-03 2.711704400499e-03 5.489084522435e-02 8.356969055419e-04 1.000000000000e-03 +9.622576740030e-01 1.072729733568e+00 1.072729733568e+00 1.441072139922e+00 1.796507164957e+00 9.431600055070e-01 9.399833961891e-04 1.494947926175e-03 4.075602104359e-02 1.060265484288e-03 1.000000000000e-03 +1.066259785919e+00 1.066259785919e+00 1.066259785919e+00 1.507919050260e+00 1.846816123279e+00 7.430338872767e-01 4.643006494015e-04 9.373071484732e-04 3.227154144432e-02 1.345833638443e-03 1.000000000000e-03 +1.192274995337e+00 1.063542290730e+00 1.063542290730e+00 1.597698929298e+00 1.919313437886e+00 5.549611365251e-01 2.983166104132e-04 8.063175710314e-04 2.993172918923e-02 1.801927980510e-03 1.000000000000e-03 +5.430564311828e-02 1.298330300283e+00 1.162172677002e+00 1.299465533021e+00 1.743346208496e+00 1.379840548527e+00 4.765118926291e-03 5.180075623279e-03 7.586593162561e-02 7.247214187666e-04 1.000000000000e-03 +1.624007249792e-01 1.293543981943e+00 1.157889545021e+00 1.303698595802e+00 1.743656568010e+00 1.375266716499e+00 4.721061920970e-03 5.149250539184e-03 7.563986705423e-02 7.271316814424e-04 1.000000000000e-03 +2.689395732064e-01 1.284312852455e+00 1.149543289754e+00 1.312169195271e+00 1.744487825133e+00 1.364033383743e+00 4.609265375184e-03 5.068716165730e-03 7.504603154605e-02 7.331198868870e-04 1.000000000000e-03 +3.730423835197e-01 1.271371561724e+00 1.137731754167e+00 1.324970289426e+00 1.746419139927e+00 1.331142874546e+00 4.288473731024e-03 4.832471945381e-03 7.327628042310e-02 7.512341606014e-04 1.000000000000e-03 +4.741889290055e-01 1.255877507326e+00 1.123481907900e+00 1.342417019335e+00 1.750512796633e+00 1.259672531774e+00 3.682455359357e-03 4.385015073130e-03 6.980142527302e-02 7.938571134768e-04 1.000000000000e-03 +5.723294249028e-01 1.239337071444e+00 1.108165352215e+00 1.365107082710e+00 1.758279782945e+00 1.144744203412e+00 2.802043404239e-03 3.671619470821e-03 6.387156792972e-02 8.735576009200e-04 1.000000000000e-03 +6.680440732049e-01 1.223509073280e+00 1.093410852323e+00 1.394007652828e+00 1.771667188870e+00 1.001630601892e+00 1.834343250417e-03 2.747035554254e-03 5.524727800488e-02 9.983720526423e-04 1.000000000000e-03 +7.625997339670e-01 1.210181681557e+00 1.080878923812e+00 1.430418839579e+00 1.792874034773e+00 8.591881431374e-01 1.055580469321e-03 1.842868429492e-03 4.525076340046e-02 1.163889432119e-03 1.000000000000e-03 +8.578749342770e-01 1.200619956825e+00 1.071761708362e+00 1.475614341075e+00 1.823762825341e+00 7.403215299386e-01 5.999412428887e-04 1.215568949356e-03 3.675094782385e-02 1.350764444312e-03 1.000000000000e-03 +9.565290788272e-01 1.194973549164e+00 1.066257919723e+00 1.530656611341e+00 1.865426389117e+00 6.464506273144e-01 3.944837525842e-04 9.153454322327e-04 3.189122889226e-02 1.546908546062e-03 1.000000000000e-03 +1.063542290730e+00 1.192274995337e+00 1.063542290730e+00 1.597698929298e+00 1.919313437886e+00 5.549611365251e-01 2.983166104132e-04 8.063175710314e-04 2.993172918923e-02 1.801927980510e-03 1.000000000000e-03 +1.191281386865e+00 1.191281386865e+00 1.062503592834e+00 1.684726293907e+00 1.991787280351e+00 4.329640819206e-01 2.213038950184e-04 7.667052681484e-04 2.918723594976e-02 2.309660412393e-03 1.000000000000e-03 +7.998315076266e-02 7.998315076266e-02 2.020819520716e+00 1.131132565699e-01 2.023982743039e+00 1.792946737639e-01 6.359474464643e-04 5.320409969079e-03 7.688671297637e-02 5.577410522058e-03 1.000000000000e-03 +2.376558932080e-01 7.903561733592e-02 1.992805772590e+00 2.504534934557e-01 2.008482461873e+00 1.887607948443e-01 6.905139083839e-04 5.487213928244e-03 7.808267646998e-02 5.297710262478e-03 1.000000000000e-03 +3.873893559028e-01 7.721110465645e-02 1.940439407973e+00 3.950089464165e-01 1.980236643374e+00 2.127667951046e-01 7.797320708366e-04 5.497089457404e-03 7.815290893430e-02 4.699981496213e-03 1.000000000000e-03 +5.249532750583e-01 7.471699314202e-02 1.869234895754e+00 5.302438779077e-01 1.942986789858e+00 2.500690217252e-01 9.321372444974e-04 5.591279787877e-03 7.881962381058e-02 3.998895957209e-03 1.000000000000e-03 +6.489878283701e-01 7.180960540782e-02 1.785319266774e+00 6.529485590774e-01 1.900975198449e+00 3.067157283121e-01 1.167474353630e-03 5.709558945940e-03 7.964894465326e-02 3.260347962927e-03 1.000000000000e-03 +7.590680751711e-01 6.866633100748e-02 1.694208277854e+00 7.621675719670e-01 1.857751624009e+00 3.950027763486e-01 1.537601642797e-03 5.838952539818e-03 8.054641546489e-02 2.531627775491e-03 1.000000000000e-03 +8.558616643000e-01 6.543810294358e-02 1.601280409531e+00 8.583596762053e-01 1.816832486413e+00 5.355668834531e-01 2.134241820419e-03 5.977521817608e-03 8.149656991833e-02 1.867180423017e-03 1.000000000000e-03 +9.411571745653e-01 6.226367886473e-02 1.511747493122e+00 9.432144999636e-01 1.781862530024e+00 7.547646008263e-01 3.103112203385e-03 6.167046387685e-03 8.277846195777e-02 1.324916402949e-03 1.000000000000e-03 +1.017755915460e+00 5.928121547195e-02 1.430085777156e+00 1.019480929670e+00 1.756270678451e+00 1.051324174627e+00 4.464358262941e-03 6.369621812213e-03 8.412703233281e-02 9.511813997379e-04 1.000000000000e-03 +1.089316721140e+00 5.660505783159e-02 1.358586021467e+00 1.090786437176e+00 1.742289020011e+00 1.344396010927e+00 5.466830024163e-03 6.099575548867e-03 8.232439593102e-02 7.438284492606e-04 1.000000000000e-03 +1.162172677002e+00 5.430564311828e-02 1.298330300283e+00 1.163440773759e+00 1.743346208496e+00 1.379840548527e+00 4.765118926291e-03 5.180075623279e-03 7.586593162561e-02 7.247214187666e-04 1.000000000000e-03 +1.254300260084e+00 5.257104397790e-02 1.254300260084e+00 1.255401472483e+00 1.774627284688e+00 8.932758086250e-01 1.455413745440e-03 2.443949110769e-03 5.211045012246e-02 1.119475071803e-03 1.000000000000e-03 +7.903561733592e-02 2.376558932080e-01 1.992805772590e+00 2.504534934557e-01 2.008482461873e+00 1.887607948443e-01 6.905139083839e-04 5.487213928244e-03 7.808267646998e-02 5.297710262478e-03 1.000000000000e-03 +2.348118975979e-01 2.348118975979e-01 1.965922938548e+00 3.320741701895e-01 1.993771866292e+00 1.992065608078e-01 7.477865161520e-04 5.630737108655e-03 7.909724751957e-02 5.019914986459e-03 1.000000000000e-03 +3.829528984387e-01 2.294464522640e-01 1.915595553628e+00 4.464287142188e-01 1.966927787683e+00 2.243185508728e-01 8.438396619191e-04 5.642687543913e-03 7.918113933614e-02 4.457946059784e-03 1.000000000000e-03 +5.194536114879e-01 2.221688388485e-01 1.846995892054e+00 5.649699526905e-01 1.931472203452e+00 2.635761333013e-01 1.007440528311e-03 5.733299041679e-03 7.981436129252e-02 3.793970218300e-03 1.000000000000e-03 +6.428412066421e-01 2.136660155356e-01 1.765900051482e+00 6.774200935549e-01 1.891375418836e+00 3.235982960808e-01 1.261659524891e-03 5.848267157944e-03 8.061063589836e-02 3.090251129599e-03 1.000000000000e-03 +7.526409149637e-01 2.044561709682e-01 1.677714268588e+00 7.799170934942e-01 1.850134005889e+00 4.173618431045e-01 1.663215123029e-03 5.977601272760e-03 8.149711155591e-02 2.396002453319e-03 1.000000000000e-03 +8.494963814940e-01 1.949966110315e-01 1.587759557766e+00 8.715892269212e-01 1.811255971353e+00 5.655938521239e-01 2.310970112305e-03 6.128877029764e-03 8.252189628459e-02 1.768053164377e-03 1.000000000000e-03 +9.351533819682e-01 1.857099051805e-01 1.501128392218e+00 9.534149236763e-01 1.778310002955e+00 7.912542586118e-01 3.350186071698e-03 6.351029460951e-03 8.400416299837e-02 1.263816262745e-03 1.000000000000e-03 +1.012303580495e+00 1.769989334638e-01 1.421993301426e+00 1.027661014892e+00 1.754466332202e+00 1.085076913543e+00 4.700243882661e-03 6.497572417213e-03 8.496778747275e-02 9.215936561905e-04 1.000000000000e-03 +1.084475727711e+00 1.691657718358e-01 1.352396204916e+00 1.097590389150e+00 1.741746295367e+00 1.364104245673e+00 5.563498269483e-03 6.117749014195e-03 8.244694599960e-02 7.330818030749e-04 1.000000000000e-03 +1.157889545021e+00 1.624007249792e-01 1.293543981943e+00 1.169222901735e+00 1.743656568010e+00 1.375266716499e+00 4.721061920970e-03 5.149250539184e-03 7.563986705423e-02 7.271316814424e-04 1.000000000000e-03 +1.250922585696e+00 1.573420272077e-01 1.250922585696e+00 1.260779056350e+00 1.776054938434e+00 8.716316221762e-01 1.395449705155e-03 2.401444032637e-03 5.165531093097e-02 1.147273658456e-03 1.000000000000e-03 +7.721110465645e-02 3.873893559028e-01 1.940439407973e+00 3.950089464165e-01 1.980236643374e+00 2.127667951046e-01 7.797320708366e-04 5.497089457404e-03 7.815290893430e-02 4.699981496213e-03 1.000000000000e-03 +2.294464522640e-01 3.829528984387e-01 1.915595553628e+00 4.464287142188e-01 1.966927787683e+00 2.243185508728e-01 8.438396619191e-04 5.642687543913e-03 7.918113933614e-02 4.457946059784e-03 1.000000000000e-03 +3.746426239233e-01 3.746426239233e-01 1.868948178284e+00 5.298246797954e-01 1.942596583038e+00 2.514116834691e-01 9.534253153948e-04 5.688430837255e-03 7.950143840247e-02 3.977539890753e-03 1.000000000000e-03 +5.090888282599e-01 3.633401548096e-01 1.805055564456e+00 6.254498406395e-01 1.910343710941e+00 2.947228394796e-01 1.137940629498e-03 5.791580141058e-03 8.021900676037e-02 3.393018341455e-03 1.000000000000e-03 +6.311907282125e-01 3.500235143508e-01 1.729163669784e+00 7.217466286585e-01 1.873746298964e+00 3.617548569438e-01 1.427903806970e-03 5.920737950973e-03 8.110855517948e-02 2.764302899617e-03 1.000000000000e-03 +7.404059246714e-01 3.355174108090e-01 1.646437631693e+00 8.128793675844e-01 1.836172579389e+00 4.666536534155e-01 1.887293718703e-03 6.066470405482e-03 8.210068618933e-02 2.142916899248e-03 1.000000000000e-03 +8.373278875865e-01 3.205856847968e-01 1.562045660895e+00 8.966008993006e-01 1.801077405152e+00 6.297049527655e-01 2.627017794599e-03 6.257734951254e-03 8.338488373037e-02 1.588045314886e-03 1.000000000000e-03 +9.236158899365e-01 3.059345046369e-01 1.480816504718e+00 9.729656896678e-01 1.771857712661e+00 8.660427328443e-01 3.766405165215e-03 6.523474574133e-03 8.513697834884e-02 1.154677433428e-03 1.000000000000e-03 +1.001746850452e+00 2.921808884763e-01 1.406329538503e+00 1.043487625217e+00 1.751179372550e+00 1.154826508349e+00 5.063706081964e-03 6.577229625432e-03 8.548703362000e-02 8.659309366130e-04 1.000000000000e-03 +1.075006109282e+00 2.797479345003e-01 1.340326955627e+00 1.110809183367e+00 1.740796768676e+00 1.407215630922e+00 5.700657811359e-03 6.076529089886e-03 8.216872269156e-02 7.106231468911e-04 1.000000000000e-03 +1.149543289754e+00 2.689395732064e-01 1.284312852455e+00 1.180583867862e+00 1.744487825133e+00 1.364033383743e+00 4.609265375184e-03 5.068716165730e-03 7.504603154605e-02 7.331198868870e-04 1.000000000000e-03 +1.244321918688e+00 2.609708106596e-01 1.244321918688e+00 1.271394038582e+00 1.778982810111e+00 8.386253786141e-01 1.262246182035e-03 2.257705670895e-03 5.008554538537e-02 1.192427543336e-03 1.000000000000e-03 +7.471699314202e-02 5.249532750583e-01 1.869234895754e+00 5.302438779077e-01 1.942986789858e+00 2.500690217252e-01 9.321372444974e-04 5.591279787877e-03 7.881962381058e-02 3.998895957209e-03 1.000000000000e-03 +2.221688388485e-01 5.194536114879e-01 1.846995892054e+00 5.649699526905e-01 1.931472203452e+00 2.635761333013e-01 1.007440528311e-03 5.733299041679e-03 7.981436129252e-02 3.793970218300e-03 1.000000000000e-03 +3.633401548096e-01 5.090888282599e-01 1.805055564456e+00 6.254498406395e-01 1.910343710941e+00 2.947228394796e-01 1.137940629498e-03 5.791580141058e-03 8.021900676037e-02 3.393018341455e-03 1.000000000000e-03 +4.948473758346e-01 4.948473758346e-01 1.747305947663e+00 6.998198702100e-01 1.882239603632e+00 3.453462802030e-01 1.359077217976e-03 5.903106371278e-03 8.098769708541e-02 2.895644335338e-03 1.000000000000e-03 +6.150513519900e-01 4.778841505316e-01 1.678393464991e+00 7.788847327519e-01 1.850315121875e+00 4.243004317546e-01 1.708131520275e-03 6.038639342922e-03 8.191214360468e-02 2.356820604365e-03 1.000000000000e-03 +7.233657887623e-01 4.592770182242e-01 1.603129480414e+00 8.568508877399e-01 1.817750691045e+00 5.468027163270e-01 2.264859207591e-03 6.213006464574e-03 8.308634374067e-02 1.828813153521e-03 1.000000000000e-03 +8.203186901819e-01 4.400644077378e-01 1.526387798595e+00 9.309024849142e-01 1.787858816607e+00 7.298602155055e-01 3.148385439480e-03 6.470524161875e-03 8.479075003190e-02 1.370125372990e-03 1.000000000000e-03 +9.074057842127e-01 4.211871957204e-01 1.452459295838e+00 1.000391878746e+00 1.763638828425e+00 9.759409679073e-01 4.362858745987e-03 6.705618817308e-03 8.631736543006e-02 1.024652138689e-03 1.000000000000e-03 +9.867891560009e-01 4.033870156764e-01 1.384167599360e+00 1.066055309455e+00 1.747110147053e+00 1.253876226643e+00 5.522066530897e-03 6.605994770728e-03 8.567376605296e-02 7.975268840347e-04 1.000000000000e-03 +1.061468186084e+00 3.871752586343e-01 1.323151328814e+00 1.129875829889e+00 1.739927823190e+00 1.460556720018e+00 5.836493212310e-03 5.994111490828e-03 8.160958202747e-02 6.846704316884e-04 1.000000000000e-03 +1.137731754167e+00 3.730423835197e-01 1.271371561724e+00 1.197327926819e+00 1.746419139927e+00 1.331142874546e+00 4.288473731024e-03 4.832471945381e-03 7.327628042310e-02 7.512341606014e-04 1.000000000000e-03 +1.235157010016e+00 3.628431698567e-01 1.235157010016e+00 1.287349216531e+00 1.784063015898e+00 7.951704879480e-01 1.085962057084e-03 2.048545702229e-03 4.770913844712e-02 1.257591944314e-03 1.000000000000e-03 +7.180960540782e-02 6.489878283701e-01 1.785319266774e+00 6.529485590774e-01 1.900975198449e+00 3.067157283121e-01 1.167474353630e-03 5.709558945940e-03 7.964894465326e-02 3.260347962927e-03 1.000000000000e-03 +2.136660155356e-01 6.428412066421e-01 1.765900051482e+00 6.774200935549e-01 1.891375418836e+00 3.235982960808e-01 1.261659524891e-03 5.848267157944e-03 8.061063589836e-02 3.090251129599e-03 1.000000000000e-03 +3.500235143508e-01 6.311907282125e-01 1.729163669784e+00 7.217466286585e-01 1.873746298964e+00 3.617548569438e-01 1.427903806970e-03 5.920737950973e-03 8.110855517948e-02 2.764302899617e-03 1.000000000000e-03 +4.778841505316e-01 6.150513519900e-01 1.678393464991e+00 7.788847327519e-01 1.850315121875e+00 4.243004317546e-01 1.708131520275e-03 6.038639342922e-03 8.191214360468e-02 2.356820604365e-03 1.000000000000e-03 +5.956712005356e-01 5.956712005356e-01 1.617649690695e+00 8.424062905125e-01 1.823852757242e+00 5.213125906322e-01 2.155211756503e-03 6.201303580321e-03 8.300805570225e-02 1.918234890102e-03 1.000000000000e-03 +7.028060921514e-01 5.743060497944e-01 1.551298905478e+00 9.076143685484e-01 1.797301348170e+00 6.668346943914e-01 2.860701269265e-03 6.434955979327e-03 8.455738340406e-02 1.499622032883e-03 1.000000000000e-03 +7.997222988291e-01 5.521820047680e-01 1.483645056167e+00 9.718336903165e-01 1.773601808276e+00 8.691015335353e-01 3.894431745073e-03 6.721478897693e-03 8.641938374188e-02 1.150613549066e-03 1.000000000000e-03 +8.876523563570e-01 5.303611276441e-01 1.418139600977e+00 1.034025933651e+00 1.755086766893e+00 1.117189143742e+00 5.089842583569e-03 6.833904462927e-03 8.713912543186e-02 8.951035781196e-04 1.000000000000e-03 +9.683771682937e-01 5.096311092160e-01 1.356991453066e+00 1.094293474144e+00 1.743245252753e+00 1.371965396800e+00 5.949600532187e-03 6.504829363112e-03 8.501522323229e-02 7.288813568711e-04 1.000000000000e-03 +1.044736188792e+00 4.906337568632e-01 1.302083856970e+00 1.154207601581e+00 1.740005045432e+00 1.497552032017e+00 5.792580146321e-03 5.802048966391e-03 8.029147572294e-02 6.677564309088e-04 1.000000000000e-03 +1.123481907900e+00 4.741889290055e-01 1.255877507326e+00 1.219453458632e+00 1.750512796633e+00 1.259672531774e+00 3.682455359357e-03 4.385015073130e-03 6.980142527302e-02 7.938571134768e-04 1.000000000000e-03 +1.224595790006e+00 4.627327712952e-01 1.224595790006e+00 1.309105215990e+00 1.792593460725e+00 7.408412646326e-01 8.687018586298e-04 1.758882570601e-03 4.420762340745e-02 1.349816820066e-03 1.000000000000e-03 +6.866633100748e-02 7.590680751711e-01 1.694208277854e+00 7.621675719670e-01 1.857751624009e+00 3.950027763486e-01 1.537601642797e-03 5.838952539818e-03 8.054641546489e-02 2.531627775491e-03 1.000000000000e-03 +2.044561709682e-01 7.526409149637e-01 1.677714268588e+00 7.799170934942e-01 1.850134005889e+00 4.173618431045e-01 1.663215123029e-03 5.977601272760e-03 8.149711155591e-02 2.396002453319e-03 1.000000000000e-03 +3.355174108090e-01 7.404059246714e-01 1.646437631693e+00 8.128793675844e-01 1.836172579389e+00 4.666536534155e-01 1.887293718703e-03 6.066470405482e-03 8.210068618933e-02 2.142916899248e-03 1.000000000000e-03 +4.592770182242e-01 7.233657887623e-01 1.603129480414e+00 8.568508877399e-01 1.817750691045e+00 5.468027163270e-01 2.264859207591e-03 6.213006464574e-03 8.308634374067e-02 1.828813153521e-03 1.000000000000e-03 +5.743060497944e-01 7.028060921514e-01 1.551298905478e+00 9.076143685484e-01 1.797301348170e+00 6.668346943914e-01 2.860701269265e-03 6.434955979327e-03 8.455738340406e-02 1.499622032883e-03 1.000000000000e-03 +6.800613683505e-01 6.800613683505e-01 1.494683190167e+00 9.617520103673e-01 1.777370183281e+00 8.342448435816e-01 3.737088530470e-03 6.719409582011e-03 8.640607991732e-02 1.198688859384e-03 1.000000000000e-03 +7.768281403543e-01 6.564056432539e-01 1.436704731948e+00 1.017020318451e+00 1.760241692196e+00 1.045370944752e+00 4.812862277301e-03 6.905963335019e-03 8.759733211957e-02 9.565982343591e-04 1.000000000000e-03 +8.654932401105e-01 6.328888137222e-01 1.379943112132e+00 1.072206509592e+00 1.747532486660e+00 1.282679069200e+00 5.798781339222e-03 6.781253563495e-03 8.680280054043e-02 7.796182412361e-04 1.000000000000e-03 +9.475341739796e-01 6.103642834997e-01 1.326490652259e+00 1.127104950495e+00 1.740673151388e+00 1.483823192264e+00 6.232062452178e-03 6.300005099665e-03 8.366603651599e-02 6.739347418299e-04 1.000000000000e-03 +1.025934507210e+00 5.897488812202e-01 1.278687168889e+00 1.183361887161e+00 1.742235986274e+00 1.479043837951e+00 5.372001952722e-03 5.448116358910e-03 7.780400131748e-02 6.761124818218e-04 1.000000000000e-03 +1.108165352215e+00 5.723294249028e-01 1.239337071444e+00 1.247233505988e+00 1.758279782945e+00 1.144744203412e+00 2.802043404239e-03 3.671619470821e-03 6.387156792972e-02 8.735576009200e-04 1.000000000000e-03 +1.214052568014e+00 5.608662615668e-01 1.214052568014e+00 1.337346103768e+00 1.806216553785e+00 6.791641429449e-01 6.386989975039e-04 1.410628794538e-03 3.958996498185e-02 1.472398109335e-03 1.000000000000e-03 +6.543810294358e-02 8.558616643000e-01 1.601280409531e+00 8.583596762053e-01 1.816832486413e+00 5.355668834531e-01 2.134241820419e-03 5.977521817608e-03 8.149656991833e-02 1.867180423017e-03 1.000000000000e-03 +1.949966110315e-01 8.494963814940e-01 1.587759557766e+00 8.715892269212e-01 1.811255971353e+00 5.655938521239e-01 2.310970112305e-03 6.128877029764e-03 8.252189628459e-02 1.768053164377e-03 1.000000000000e-03 +3.205856847968e-01 8.373278875865e-01 1.562045660895e+00 8.966008993006e-01 1.801077405152e+00 6.297049527655e-01 2.627017794599e-03 6.257734951254e-03 8.338488373037e-02 1.588045314886e-03 1.000000000000e-03 +4.400644077378e-01 8.203186901819e-01 1.526387798595e+00 9.309024849142e-01 1.787858816607e+00 7.298602155055e-01 3.148385439480e-03 6.470524161875e-03 8.479075003190e-02 1.370125372990e-03 1.000000000000e-03 +5.521820047680e-01 7.997222988291e-01 1.483645056167e+00 9.718336903165e-01 1.773601808276e+00 8.691015335353e-01 3.894431745073e-03 6.721478897693e-03 8.641938374188e-02 1.150613549066e-03 1.000000000000e-03 +6.564056432539e-01 7.768281403543e-01 1.436704731948e+00 1.017020318451e+00 1.760241692196e+00 1.045370944752e+00 4.812862277301e-03 6.905963335019e-03 8.759733211957e-02 9.565982343591e-04 1.000000000000e-03 +7.528170305330e-01 7.528170305330e-01 1.388073832062e+00 1.064644054565e+00 1.749347285754e+00 1.249101335458e+00 5.715604024385e-03 6.863659331078e-03 8.732862157187e-02 8.005755590946e-04 1.000000000000e-03 +8.420175437379e-01 7.287085233620e-01 1.339927156580e+00 1.113557208222e+00 1.742244081902e+00 1.447301858080e+00 6.283886414010e-03 6.512690886419e-03 8.506658102411e-02 6.909408665629e-04 1.000000000000e-03 +9.254486437728e-01 7.055774653037e-01 1.294643329114e+00 1.163741703217e+00 1.740803291996e+00 1.532660046737e+00 6.008521988247e-03 5.880484065306e-03 8.083236470421e-02 6.524604083787e-04 1.000000000000e-03 +1.006517982826e+00 6.847713183369e-01 1.254854971374e+00 1.217370201775e+00 1.748328117760e+00 1.374574734162e+00 4.286414628282e-03 4.677535373398e-03 7.209203510789e-02 7.274977308597e-04 1.000000000000e-03 +1.093410852323e+00 6.680440732049e-01 1.223509073280e+00 1.281339211810e+00 1.771667188870e+00 1.001630601892e+00 1.834343250417e-03 2.747035554254e-03 5.524727800488e-02 9.983720526423e-04 1.000000000000e-03 +1.204939320086e+00 6.579451172730e-01 1.204939320086e+00 1.372869455714e+00 1.826649749548e+00 6.174631320618e-01 4.584291786793e-04 1.113659637820e-03 3.517669111184e-02 1.619529892677e-03 1.000000000000e-03 +6.226367886473e-02 9.411571745653e-01 1.511747493122e+00 9.432144999636e-01 1.781862530024e+00 7.547646008263e-01 3.103112203385e-03 6.167046387685e-03 8.277846195777e-02 1.324916402949e-03 1.000000000000e-03 +1.857099051805e-01 9.351533819682e-01 1.501128392218e+00 9.534149236763e-01 1.778310002955e+00 7.912542586118e-01 3.350186071698e-03 6.351029460951e-03 8.400416299837e-02 1.263816262745e-03 1.000000000000e-03 +3.059345046369e-01 9.236158899365e-01 1.480816504718e+00 9.729656896678e-01 1.771857712661e+00 8.660427328443e-01 3.766405165215e-03 6.523474574133e-03 8.513697834884e-02 1.154677433428e-03 1.000000000000e-03 +4.211871957204e-01 9.074057842127e-01 1.452459295838e+00 1.000391878746e+00 1.763638828425e+00 9.759409679073e-01 4.362858745987e-03 6.705618817308e-03 8.631736543006e-02 1.024652138689e-03 1.000000000000e-03 +5.303611276441e-01 8.876523563570e-01 1.418139600977e+00 1.034025933651e+00 1.755086766893e+00 1.117189143742e+00 5.089842583569e-03 6.833904462927e-03 8.713912543186e-02 8.951035781196e-04 1.000000000000e-03 +6.328888137222e-01 8.654932401105e-01 1.379943112132e+00 1.072206509592e+00 1.747532486660e+00 1.282679069200e+00 5.798781339222e-03 6.781253563495e-03 8.680280054043e-02 7.796182412361e-04 1.000000000000e-03 +7.287085233620e-01 8.420175437379e-01 1.339927156580e+00 1.113557208222e+00 1.742244081902e+00 1.447301858080e+00 6.283886414010e-03 6.512690886419e-03 8.506658102411e-02 6.909408665629e-04 1.000000000000e-03 +8.183822969362e-01 8.183822969362e-01 1.300333684171e+00 1.157367343533e+00 1.740794892590e+00 1.538123440614e+00 6.168755900769e-03 6.015859070101e-03 8.175749418657e-02 6.501428777398e-04 1.000000000000e-03 +9.035920146539e-01 7.960401650370e-01 1.263696685220e+00 1.204225258537e+00 1.745590955962e+00 1.457388900449e+00 4.971092826364e-03 5.116437511804e-03 7.539847855674e-02 6.861586496862e-04 1.000000000000e-03 +9.882726896745e-01 7.768084067885e-01 1.232747497838e+00 1.257025938481e+00 1.760619380627e+00 1.195040731370e+00 2.815238107385e-03 3.533651239014e-03 6.266002836306e-02 8.367915617852e-04 1.000000000000e-03 +1.080878923812e+00 7.625997339670e-01 1.210181681557e+00 1.322821833123e+00 1.792874034773e+00 8.591881431374e-01 1.055580469321e-03 1.842868429492e-03 4.525076340046e-02 1.163889432119e-03 1.000000000000e-03 +1.198241260588e+00 7.549774042122e-01 1.198241260588e+00 1.416253155141e+00 1.855142883452e+00 5.646977548762e-01 3.622110385794e-04 9.621369186924e-04 3.269619275649e-02 1.770858820254e-03 1.000000000000e-03 +5.928121547195e-02 1.017755915460e+00 1.430085777156e+00 1.019480929670e+00 1.756270678451e+00 1.051324174627e+00 4.464358262941e-03 6.369621812213e-03 8.412703233281e-02 9.511813997379e-04 1.000000000000e-03 +1.769989334638e-01 1.012303580495e+00 1.421993301426e+00 1.027661014892e+00 1.754466332202e+00 1.085076913543e+00 4.700243882661e-03 6.497572417213e-03 8.496778747275e-02 9.215936561905e-04 1.000000000000e-03 +2.921808884763e-01 1.001746850452e+00 1.406329538503e+00 1.043487625217e+00 1.751179372550e+00 1.154826508349e+00 5.063706081964e-03 6.577229625432e-03 8.548703362000e-02 8.659309366130e-04 1.000000000000e-03 +4.033870156764e-01 9.867891560009e-01 1.384167599360e+00 1.066055309455e+00 1.747110147053e+00 1.253876226643e+00 5.522066530897e-03 6.605994770728e-03 8.567376605296e-02 7.975268840347e-04 1.000000000000e-03 +5.096311092160e-01 9.683771682937e-01 1.356991453066e+00 1.094293474144e+00 1.743245252753e+00 1.371965396800e+00 5.949600532187e-03 6.504829363112e-03 8.501522323229e-02 7.288813568711e-04 1.000000000000e-03 +6.103642834997e-01 9.475341739796e-01 1.326490652259e+00 1.127104950495e+00 1.740673151388e+00 1.483823192264e+00 6.232062452178e-03 6.300005099665e-03 8.366603651599e-02 6.739347418299e-04 1.000000000000e-03 +7.055774653037e-01 9.254486437728e-01 1.294643329114e+00 1.163741703217e+00 1.740803291996e+00 1.532660046737e+00 6.008521988247e-03 5.880484065306e-03 8.083236470421e-02 6.524604083787e-04 1.000000000000e-03 +7.960401650370e-01 9.035920146539e-01 1.263696685220e+00 1.204225258537e+00 1.745590955962e+00 1.457388900449e+00 4.971092826365e-03 5.116437511804e-03 7.539847855674e-02 6.861586496862e-04 1.000000000000e-03 +8.838190581457e-01 8.838190581457e-01 1.236173654298e+00 1.249908898714e+00 1.757952661099e+00 1.252559973522e+00 3.161155211164e-03 3.785633356471e-03 6.485568043717e-02 7.983649654619e-04 1.000000000000e-03 +9.731243314145e-01 8.681250339553e-01 1.214611559462e+00 1.304075166151e+00 1.782103610722e+00 9.907738747659e-01 1.502494191589e-03 2.274728214766e-03 5.027400714271e-02 1.009312039275e-03 1.000000000000e-03 +1.071761708362e+00 8.578749342770e-01 1.200619956825e+00 1.372815560216e+00 1.823762825341e+00 7.403215299386e-01 5.999412428887e-04 1.215568949356e-03 3.675094782385e-02 1.350764444312e-03 1.000000000000e-03 +1.194171794963e+00 8.531350268405e-01 1.194171794963e+00 1.467612227364e+00 1.892070803589e+00 5.233403888318e-01 2.983580058593e-04 8.551547297695e-04 3.082485883124e-02 1.910802264339e-03 1.000000000000e-03 +5.660505783159e-02 1.089316721140e+00 1.358586021467e+00 1.090786437176e+00 1.742289020011e+00 1.344396010927e+00 5.466830024163e-03 6.099575548867e-03 8.232439593102e-02 7.438284492606e-04 1.000000000000e-03 +1.691657718358e-01 1.084475727711e+00 1.352396204916e+00 1.097590389150e+00 1.741746295367e+00 1.364104245673e+00 5.563498269483e-03 6.117749014195e-03 8.244694599960e-02 7.330818030749e-04 1.000000000000e-03 +2.797479345003e-01 1.075006109282e+00 1.340326955627e+00 1.110809183367e+00 1.740796768676e+00 1.407215630922e+00 5.700657811359e-03 6.076529089886e-03 8.216872269156e-02 7.106231468911e-04 1.000000000000e-03 +3.871752586343e-01 1.061468186084e+00 1.323151328814e+00 1.129875829889e+00 1.739927823190e+00 1.460556720018e+00 5.836493212310e-03 5.994111490828e-03 8.160958202747e-02 6.846704316884e-04 1.000000000000e-03 +4.906337568632e-01 1.044736188792e+00 1.302083856970e+00 1.154207601581e+00 1.740005045432e+00 1.497552032017e+00 5.792580146321e-03 5.802048966391e-03 8.029147572294e-02 6.677564309088e-04 1.000000000000e-03 +5.897488812202e-01 1.025934507210e+00 1.278687168889e+00 1.183361887161e+00 1.742235986274e+00 1.479043837951e+00 5.372001952722e-03 5.448116358910e-03 7.780400131748e-02 6.761124818218e-04 1.000000000000e-03 +6.847713183369e-01 1.006517982826e+00 1.254854971374e+00 1.217370201775e+00 1.748328117760e+00 1.374574734162e+00 4.286414628282e-03 4.677535373398e-03 7.209203510789e-02 7.274977308597e-04 1.000000000000e-03 +7.768084067885e-01 9.882726896745e-01 1.232747497838e+00 1.257025938481e+00 1.760619380627e+00 1.195040731370e+00 2.815238107385e-03 3.533651239014e-03 6.266002836306e-02 8.367915617852e-04 1.000000000000e-03 +8.681250339553e-01 9.731243314145e-01 1.214611559462e+00 1.304075166151e+00 1.782103610722e+00 9.907738747659e-01 1.502494191589e-03 2.274728214766e-03 5.027400714271e-02 1.009312039275e-03 1.000000000000e-03 +9.624888800652e-01 9.624888800652e-01 1.202013475611e+00 1.361164827822e+00 1.815931189238e+00 8.071049583994e-01 7.256082793627e-04 1.348538882976e-03 3.870886896616e-02 1.238996229168e-03 1.000000000000e-03 +1.066257919723e+00 9.565290788272e-01 1.194973549164e+00 1.432429345558e+00 1.865426389117e+00 6.464506273144e-01 3.944837525842e-04 9.153454322327e-04 3.189122889226e-02 1.546908546062e-03 1.000000000000e-03 +1.192167331410e+00 9.541757636728e-01 1.192167331410e+00 1.526995197786e+00 1.937260251010e+00 4.860155096566e-01 2.629922746421e-04 8.116786483663e-04 3.003106999179e-02 2.057547506471e-03 1.000000000000e-03 +5.430564311828e-02 1.162172677002e+00 1.298330300283e+00 1.163440773759e+00 1.743346208496e+00 1.379840548527e+00 4.765118926291e-03 5.180075623279e-03 7.586593162561e-02 7.247214187666e-04 1.000000000000e-03 +1.624007249792e-01 1.157889545021e+00 1.293543981943e+00 1.169222901735e+00 1.743656568010e+00 1.375266716499e+00 4.721061920970e-03 5.149250539184e-03 7.563986705423e-02 7.271316814424e-04 1.000000000000e-03 +2.689395732064e-01 1.149543289754e+00 1.284312852455e+00 1.180583867862e+00 1.744487825133e+00 1.364033383743e+00 4.609265375184e-03 5.068716165730e-03 7.504603154605e-02 7.331198868870e-04 1.000000000000e-03 +3.730423835197e-01 1.137731754167e+00 1.271371561724e+00 1.197327926819e+00 1.746419139927e+00 1.331142874546e+00 4.288473731024e-03 4.832471945381e-03 7.327628042310e-02 7.512341606014e-04 1.000000000000e-03 +4.741889290055e-01 1.123481907900e+00 1.255877507326e+00 1.219453458632e+00 1.750512796633e+00 1.259672531774e+00 3.682455359357e-03 4.385015073130e-03 6.980142527302e-02 7.938571134768e-04 1.000000000000e-03 +5.723294249028e-01 1.108165352215e+00 1.239337071444e+00 1.247233505988e+00 1.758279782945e+00 1.144744203412e+00 2.802043404239e-03 3.671619470821e-03 6.387156792972e-02 8.735576009200e-04 1.000000000000e-03 +6.680440732049e-01 1.093410852323e+00 1.223509073280e+00 1.281339211810e+00 1.771667188870e+00 1.001630601892e+00 1.834343250417e-03 2.747035554254e-03 5.524727800488e-02 9.983720526423e-04 1.000000000000e-03 +7.625997339670e-01 1.080878923812e+00 1.210181681557e+00 1.322821833123e+00 1.792874034773e+00 8.591881431374e-01 1.055580469321e-03 1.842868429492e-03 4.525076340046e-02 1.163889432119e-03 1.000000000000e-03 +8.578749342770e-01 1.071761708362e+00 1.200619956825e+00 1.372815560216e+00 1.823762825341e+00 7.403215299386e-01 5.999412428887e-04 1.215568949356e-03 3.675094782385e-02 1.350764444312e-03 1.000000000000e-03 +9.565290788272e-01 1.066257919723e+00 1.194973549164e+00 1.432429345558e+00 1.865426389117e+00 6.464506273144e-01 3.944837525842e-04 9.153454322327e-04 3.189122889226e-02 1.546908546062e-03 1.000000000000e-03 +1.063542290730e+00 1.063542290730e+00 1.192274995337e+00 1.504075931708e+00 1.919313437886e+00 5.549611365251e-01 2.983166104132e-04 8.063175710314e-04 2.993172918923e-02 1.801927980510e-03 1.000000000000e-03 +1.191281386865e+00 1.062503592834e+00 1.191281386865e+00 1.596266026537e+00 1.991787280351e+00 4.329640819206e-01 2.213038950184e-04 7.667052681484e-04 2.918723594976e-02 2.309660412393e-03 1.000000000000e-03 +5.257104397790e-02 1.254300260084e+00 1.254300260084e+00 1.255401472483e+00 1.774627284688e+00 8.932758086250e-01 1.455413745440e-03 2.443949110769e-03 5.211045012246e-02 1.119475071803e-03 1.000000000000e-03 +1.573420272077e-01 1.250922585696e+00 1.250922585696e+00 1.260779056350e+00 1.776054938434e+00 8.716316221762e-01 1.395449705155e-03 2.401444032637e-03 5.165531093097e-02 1.147273658456e-03 1.000000000000e-03 +2.609708106596e-01 1.244321918688e+00 1.244321918688e+00 1.271394038582e+00 1.778982810111e+00 8.386253786141e-01 1.262246182035e-03 2.257705670895e-03 5.008554538537e-02 1.192427543336e-03 1.000000000000e-03 +3.628431698567e-01 1.235157010016e+00 1.235157010016e+00 1.287349216531e+00 1.784063015898e+00 7.951704879480e-01 1.085962057084e-03 2.048545702229e-03 4.770913844712e-02 1.257591944314e-03 1.000000000000e-03 +4.627327712952e-01 1.224595790006e+00 1.224595790006e+00 1.309105215990e+00 1.792593460725e+00 7.408412646326e-01 8.687018586298e-04 1.758882570601e-03 4.420762340745e-02 1.349816820066e-03 1.000000000000e-03 +5.608662615668e-01 1.214052568014e+00 1.214052568014e+00 1.337346103768e+00 1.806216553785e+00 6.791641429449e-01 6.386989975039e-04 1.410628794538e-03 3.958996498185e-02 1.472398109335e-03 1.000000000000e-03 +6.579451172730e-01 1.204939320086e+00 1.204939320086e+00 1.372869455714e+00 1.826649749548e+00 6.174631320618e-01 4.584291786794e-04 1.113659637820e-03 3.517669111184e-02 1.619529892677e-03 1.000000000000e-03 +7.549774042122e-01 1.198241260588e+00 1.198241260588e+00 1.416253155141e+00 1.855142883452e+00 5.646977548762e-01 3.622110385794e-04 9.621369186924e-04 3.269619275649e-02 1.770858820254e-03 1.000000000000e-03 +8.531350268405e-01 1.194171794963e+00 1.194171794963e+00 1.467612227364e+00 1.892070803589e+00 5.233403888318e-01 2.983580058593e-04 8.551547297695e-04 3.082485883124e-02 1.910802264339e-03 1.000000000000e-03 +9.541757636728e-01 1.192167331410e+00 1.192167331410e+00 1.526995197786e+00 1.937260251010e+00 4.860155096566e-01 2.629922746421e-04 8.116786483663e-04 3.003106999179e-02 2.057547506471e-03 1.000000000000e-03 +1.062503592834e+00 1.191281386865e+00 1.191281386865e+00 1.596266026537e+00 1.991787280351e+00 4.329640819206e-01 2.213038950184e-04 7.667052681484e-04 2.918723594976e-02 2.309660412393e-03 1.000000000000e-03 +1.190899775961e+00 1.190899775961e+00 1.190899775961e+00 1.684186614591e+00 2.062698918687e+00 3.406535262066e-01 1.647221832842e-04 7.253213482852e-04 2.838859998672e-02 2.935533975343e-03 1.000000000000e-03 diff --git a/single-node-refactor/regression_tests/standard_results/Sod_X/state/mat_pt_state_t_1.5000e-01.txt b/single-node-refactor/regression_tests/standard_results/Sod_X/state/mat_pt_state_t_1.5000e-01.txt new file mode 100644 index 000000000..cf2efd93b --- /dev/null +++ b/single-node-refactor/regression_tests/standard_results/Sod_X/state/mat_pt_state_t_1.5000e-01.txt @@ -0,0 +1,102 @@ +# state dump file +# x y z radius_2D radius_3D den pres sie sspd vol mass +5.000000000000e-03 5.000000000000e-03 5.000000000000e-03 7.071067811865e-03 8.660254037844e-03 1.000000000000e+00 1.666666666667e+00 2.500000000000e+00 1.666666666667e+00 1.000000000000e-06 1.000000000000e-06 +1.500000000000e-02 5.000000000000e-03 5.000000000000e-03 1.581138830084e-02 1.658312395178e-02 1.000000000000e+00 1.666666666667e+00 2.500000000000e+00 1.666666666667e+00 1.000000000000e-06 1.000000000000e-06 +2.500000000000e-02 5.000000000000e-03 5.000000000000e-03 2.549509756796e-02 2.598076211353e-02 1.000000000000e+00 1.666666666667e+00 2.500000000000e+00 1.666666666667e+00 1.000000000000e-06 1.000000000000e-06 +3.500000000000e-02 5.000000000000e-03 5.000000000000e-03 3.535533905933e-02 3.570714214271e-02 1.000000000000e+00 1.666666666667e+00 2.500000000000e+00 1.666666666667e+00 1.000000000000e-06 1.000000000000e-06 +4.500000000000e-02 5.000000000000e-03 5.000000000000e-03 4.527692569069e-02 4.555216789572e-02 1.000000000000e+00 1.666666666667e+00 2.500000000000e+00 1.666666666667e+00 1.000000000000e-06 1.000000000000e-06 +5.500000000000e-02 5.000000000000e-03 5.000000000000e-03 5.522680508594e-02 5.545268253205e-02 1.000000000000e+00 1.666666666667e+00 2.500000000000e+00 1.666666666667e+00 1.000000000000e-06 1.000000000000e-06 +6.500000000000e-02 5.000000000000e-03 5.000000000000e-03 6.519202405203e-02 6.538348415311e-02 9.999999999998e-01 1.666666666666e+00 2.500000000000e+00 1.666666666667e+00 1.000000000000e-06 1.000000000000e-06 +7.500000000001e-02 5.000000000000e-03 5.000000000000e-03 7.516648189188e-02 7.533259586661e-02 9.999999999979e-01 1.666666666661e+00 2.499999999997e+00 1.666666666666e+00 1.000000000002e-06 1.000000000000e-06 +8.500000000012e-02 5.000000000000e-03 5.000000000000e-03 8.514693182975e-02 8.529361054628e-02 9.999999999814e-01 1.666666666615e+00 2.499999999969e+00 1.666666666656e+00 1.000000000019e-06 1.000000000000e-06 +9.500000000099e-02 5.000000000000e-03 5.000000000000e-03 9.513148795319e-02 9.526279441727e-02 9.999999998444e-01 1.666666666235e+00 2.499999999741e+00 1.666666666580e+00 1.000000000156e-06 1.000000000000e-06 +1.050000000078e-01 5.000000000000e-03 5.000000000000e-03 1.051189802160e-01 1.052378259071e-01 9.999999987852e-01 1.666666663292e+00 2.499999997975e+00 1.666666665992e+00 1.000000001215e-06 1.000000000000e-06 +1.150000000581e-01 5.000000000000e-03 5.000000000000e-03 1.151086443903e-01 1.152171862760e-01 9.999999911616e-01 1.666666642115e+00 2.499999985269e+00 1.666666661756e+00 1.000000008838e-06 1.000000000000e-06 +1.250000004008e-01 5.000000000000e-03 5.000000000000e-03 1.250999604324e-01 1.251998406556e-01 9.999999403048e-01 1.666666500847e+00 2.499999900508e+00 1.666666633503e+00 1.000000059695e-06 1.000000000000e-06 +1.350000025625e-01 5.000000000000e-03 5.000000000000e-03 1.350925634218e-01 1.351850609050e-01 9.999996273447e-01 1.666665631513e+00 2.499999378908e+00 1.666666459636e+00 1.000000372655e-06 1.000000000000e-06 +1.450000151218e-01 5.000000000000e-03 5.000000000000e-03 1.450861963983e-01 1.451723265134e-01 9.999978608035e-01 1.666660724458e+00 2.499996434671e+00 1.666665478223e+00 1.000002139201e-06 1.000000000000e-06 +1.550000819135e-01 5.000000000000e-03 5.000000000000e-03 1.550807060637e-01 1.551612883203e-01 9.999887809809e-01 1.666635502840e+00 2.499981301598e+00 1.666660433854e+00 1.000011219145e-06 1.000000000000e-06 +1.650004043163e-01 5.000000000000e-03 5.000000000000e-03 1.650761443230e-01 1.651518495947e-01 9.999467414256e-01 1.666518728784e+00 2.499911234884e+00 1.666637078032e+00 1.000053261411e-06 1.000000000000e-06 +1.750017973266e-01 5.000000000000e-03 5.000000000000e-03 1.750732105935e-01 1.751445947425e-01 9.997747101310e-01 1.666040908268e+00 2.499624502478e+00 1.666541496126e+00 1.000225340636e-06 1.000000000000e-06 +1.850070568892e-01 5.000000000000e-03 5.000000000000e-03 1.850746095465e-01 1.851421375560e-01 9.991741107651e-01 1.664373165048e+00 2.498623333685e+00 1.666207714704e+00 1.000826571892e-06 1.000000000000e-06 +1.950238443538e-01 5.000000000000e-03 5.000000000000e-03 1.950879285515e-01 1.951519917053e-01 9.974754683651e-01 1.659660102218e+00 2.495790856298e+00 1.665263027705e+00 1.002530921025e-06 1.000000000000e-06 +2.050680591740e-01 5.000000000000e-03 5.000000000000e-03 2.051290054902e-01 2.051899337038e-01 9.937275489641e-01 1.649280872552e+00 2.489536806549e+00 1.663175278579e+00 1.006312043017e-06 1.000000000000e-06 +2.151646203260e-01 5.000000000000e-03 5.000000000000e-03 2.152227075381e-01 2.152807790771e-01 9.871666485908e-01 1.631177170688e+00 2.478574169340e+00 1.659509354980e+00 1.013000187382e-06 1.000000000000e-06 +2.253447361084e-01 5.000000000000e-03 5.000000000000e-03 2.254001998485e-01 2.254556499442e-01 9.774951591578e-01 1.604641528842e+00 2.462377711759e+00 1.654078364313e+00 1.023022969097e-06 1.000000000000e-06 +2.356423506381e-01 5.000000000000e-03 5.000000000000e-03 2.356953911604e-01 2.357484197492e-01 9.647853940506e-01 1.570041952614e+00 2.441022577087e+00 1.646890193023e+00 1.036499936842e-06 1.000000000000e-06 +2.460918115611e-01 5.000000000000e-03 5.000000000000e-03 2.461426003711e-01 2.461933787035e-01 9.493139921281e-01 1.528340288620e+00 2.414912717962e+00 1.638058714849e+00 1.053392247762e-06 1.000000000000e-06 +2.567268416549e-01 5.000000000000e-03 5.000000000000e-03 2.567755269220e-01 2.568242029601e-01 9.314336561432e-01 1.480714704624e+00 2.384573546690e+00 1.627736515223e+00 1.073613770991e-06 1.000000000000e-06 +2.675804189938e-01 5.000000000000e-03 5.000000000000e-03 2.676271298447e-01 2.676738325442e-01 9.114925288335e-01 1.428322491520e+00 2.350522543527e+00 1.616072929985e+00 1.097101696796e-06 1.000000000000e-06 +2.786852141056e-01 5.000000000000e-03 5.000000000000e-03 2.787300639706e-01 2.787749066201e-01 8.897926607388e-01 1.372180289825e+00 2.313202306061e+00 1.603192061018e+00 1.123857325559e-06 1.000000000000e-06 +2.900743401871e-01 5.000000000000e-03 5.000000000000e-03 2.901174293885e-01 2.901605121911e-01 8.665752383686e-01 1.313124866139e+00 2.272955898112e+00 1.589184241508e+00 1.153967890754e-06 1.000000000000e-06 +3.017822707525e-01 5.000000000000e-03 5.000000000000e-03 3.018236885013e-01 3.018651005674e-01 8.420214351756e-01 1.251820321644e+00 2.230026937585e+00 1.574105367638e+00 1.187618222322e-06 1.000000000000e-06 +3.138458543052e-01 5.000000000000e-03 5.000000000000e-03 3.138856802477e-01 3.139255011377e-01 8.162609044278e-01 1.188787150335e+00 2.184572011020e+00 1.557980177816e+00 1.225098488211e-06 1.000000000000e-06 +3.263054063258e-01 5.000000000000e-03 5.000000000000e-03 3.263437117480e-01 3.263820126745e-01 7.893831652834e-01 1.124438473410e+00 2.136678085236e+00 1.540807178518e+00 1.266811915910e-06 1.000000000000e-06 +3.392058901156e-01 5.000000000000e-03 5.000000000000e-03 3.392427388893e-01 3.392795836609e-01 7.614494342622e-01 1.059115851584e+00 2.086381190782e+00 1.522564062065e+00 1.313284842045e-06 1.000000000000e-06 +3.525982094249e-01 5.000000000000e-03 5.000000000000e-03 3.526336587588e-01 3.526691045295e-01 7.325046645772e-01 9.931231248761e-01 2.033686281266e+00 1.503213698590e+00 1.365179019819e-06 1.000000000000e-06 +3.665374569575e-01 5.000000000000e-03 5.000000000000e-03 3.665715582977e-01 3.666056564660e-01 7.029034547014e-01 9.274496524032e-01 1.979182872555e+00 1.482933606274e+00 1.422670486696e-06 1.000000000000e-06 +3.810735481908e-01 5.000000000000e-03 5.000000000000e-03 3.811063488460e-01 3.811391466784e-01 6.736058124647e-01 8.642922032941e-01 1.924624581545e+00 1.462351447933e+00 1.484547759974e-06 1.000000000000e-06 +3.962493557703e-01 5.000000000000e-03 5.000000000000e-03 3.962809003073e-01 3.963124423335e-01 6.449059259160e-01 8.042376719830e-01 1.870592995809e+00 1.441678418376e+00 1.550613755920e-06 1.000000000000e-06 +4.121052320105e-01 5.000000000000e-03 5.000000000000e-03 4.121355629528e-01 4.121658916631e-01 6.170700740844e-01 7.477496247185e-01 1.817661371348e+00 1.421134668475e+00 1.620561492119e-06 1.000000000000e-06 +4.286766385631e-01 5.000000000000e-03 5.000000000000e-03 4.287057970797e-01 4.287349536132e-01 5.904164249211e-01 6.953348790392e-01 1.766553697584e+00 1.401013005564e+00 1.693719818404e-06 1.000000000000e-06 +4.459892068445e-01 5.000000000000e-03 5.000000000000e-03 4.460172335479e-01 4.460452584904e-01 5.653570125515e-01 6.476280914535e-01 1.718280866096e+00 1.381738384184e+00 1.768793837874e-06 1.000000000000e-06 +4.640514055896e-01 5.000000000000e-03 5.000000000000e-03 4.640783414788e-01 4.641052758046e-01 5.424035027296e-01 6.053292770704e-01 1.674019269854e+00 1.363826019311e+00 1.843645911148e-06 1.000000000000e-06 +4.828457509805e-01 5.000000000000e-03 5.000000000000e-03 4.828716384712e-01 4.828975245742e-01 5.221323641108e-01 5.691292608422e-01 1.635014318098e+00 1.347843676271e+00 1.915223167028e-06 1.000000000000e-06 +5.023205288335e-01 5.000000000000e-03 5.000000000000e-03 5.023454127267e-01 5.023702953873e-01 5.051187717052e-01 5.397341074002e-01 1.602793652604e+00 1.334496847590e+00 1.979732403577e-06 1.000000000000e-06 +5.223842886423e-01 5.000000000000e-03 5.000000000000e-03 5.224082168384e-01 5.224321439386e-01 4.918791833446e-01 5.177667011434e-01 1.578944744997e+00 1.324531256708e+00 2.033019558178e-06 1.000000000000e-06 +5.429084891227e-01 5.000000000000e-03 5.000000000000e-03 5.429315127725e-01 5.429545354461e-01 4.826672878784e-01 5.035342294850e-01 1.564848837275e+00 1.318605676579e+00 2.071820537902e-06 1.000000000000e-06 +5.637478911409e-01 5.000000000000e-03 5.000000000000e-03 5.637700637369e-01 5.637922354608e-01 4.770856101672e-01 4.964791446934e-01 1.560975014063e+00 1.316972544244e+00 2.096059865754e-06 1.000000000000e-06 +5.847917152780e-01 5.000000000000e-03 5.000000000000e-03 5.848130900192e-01 5.848344639791e-01 4.733268573459e-01 4.938806602195e-01 1.565136181968e+00 1.318726735221e+00 2.112704961656e-06 1.000000000000e-06 +6.060284437860e-01 5.000000000000e-03 5.000000000000e-03 6.060490695296e-01 6.060696945713e-01 4.684629039833e-01 4.915374678552e-01 1.573883856147e+00 1.322406836100e+00 2.134640739954e-06 1.000000000000e-06 +6.275457230969e-01 5.000000000000e-03 5.000000000000e-03 6.275656416481e-01 6.275855595671e-01 4.610812557326e-01 4.923280418537e-01 1.601652753390e+00 1.334021802833e+00 2.168815122209e-06 1.000000000000e-06 +6.500109440925e-01 5.000000000000e-03 5.000000000000e-03 6.500301742535e-01 6.500494038456e-01 4.302501891603e-01 4.943475700015e-01 1.723465494459e+00 1.383821397620e+00 2.324229076928e-06 1.000000000000e-06 +6.643772194111e-01 5.000000000000e-03 5.000000000000e-03 6.643960337573e-01 6.644148475707e-01 2.276759261128e-01 4.951060959468e-01 3.261913354652e+00 1.903772090308e+00 5.490259867794e-07 1.250000000000e-07 +6.698112084469e-01 5.000000000000e-03 5.000000000000e-03 6.698298701619e-01 6.698485313570e-01 2.324405914571e-01 4.953005035593e-01 3.196303841259e+00 1.884528777310e+00 5.377718203881e-07 1.250000000000e-07 +6.751837580777e-01 5.000000000000e-03 5.000000000000e-03 6.752022713024e-01 6.752207840195e-01 2.328882534237e-01 4.955214756346e-01 3.191583098438e+00 1.883136596933e+00 5.367381057755e-07 1.250000000000e-07 +6.805513816802e-01 5.000000000000e-03 5.000000000000e-03 6.805697488919e-01 6.805881156080e-01 2.328672075150e-01 4.955295458527e-01 3.191923528911e+00 1.883237026715e+00 5.367866147144e-07 1.250000000000e-07 +6.859223783660e-01 5.000000000000e-03 5.000000000000e-03 6.859406017603e-01 6.859588246704e-01 2.325959077238e-01 4.952268658616e-01 3.193694618542e+00 1.883759426296e+00 5.374127224474e-07 1.250000000000e-07 +6.913010162713e-01 5.000000000000e-03 5.000000000000e-03 6.913190978830e-01 6.913371790218e-01 2.322061113466e-01 4.948252013883e-01 3.196461099917e+00 1.884575136298e+00 5.383148586189e-07 1.250000000000e-07 +6.966890398337e-01 5.000000000000e-03 5.000000000000e-03 6.967069816102e-01 6.967249229247e-01 2.317863002712e-01 4.943644111869e-01 3.199268532750e+00 1.885402560242e+00 5.392898538599e-07 1.250000000000e-07 +7.020868409677e-01 5.000000000000e-03 5.000000000000e-03 7.021046448073e-01 7.021224481955e-01 2.313656388775e-01 4.938623682092e-01 3.201830470193e+00 1.886157313515e+00 5.402703729319e-07 1.250000000000e-07 +7.074945210435e-01 5.000000000000e-03 5.000000000000e-03 7.075121888042e-01 7.075298561238e-01 2.309402080032e-01 4.934209681367e-01 3.204861806459e+00 1.887049962967e+00 5.412656422231e-07 1.250000000000e-07 +7.129119834291e-01 5.000000000000e-03 5.000000000000e-03 7.129295169347e-01 7.129470500092e-01 2.305308257622e-01 4.929598446027e-01 3.207552675262e+00 1.887841999998e+00 5.422268349003e-07 1.250000000000e-07 +7.183388838141e-01 5.000000000000e-03 5.000000000000e-03 7.183562848610e-01 7.183736854864e-01 2.301376302508e-01 4.924262978695e-01 3.209555282200e+00 1.888431236709e+00 5.431532421004e-07 1.250000000000e-07 +7.237737951077e-01 5.000000000000e-03 5.000000000000e-03 7.237910654910e-01 7.238083354622e-01 2.298516559032e-01 4.920579092733e-01 3.211144427086e+00 1.888898687679e+00 5.438290166273e-07 1.250000000000e-07 +7.292142906582e-01 5.000000000000e-03 5.000000000000e-03 7.292314321943e-01 7.292485733274e-01 2.296653839721e-01 4.919682353036e-01 3.213163168922e+00 1.889492338911e+00 5.442700934643e-07 1.250000000000e-07 +7.346590816319e-01 5.000000000000e-03 5.000000000000e-03 7.346760961296e-01 7.346931102332e-01 2.294891327849e-01 4.919689849038e-01 3.215635827285e+00 1.890219219293e+00 5.446881012756e-07 1.250000000000e-07 +7.401074298535e-01 5.000000000000e-03 5.000000000000e-03 7.401243191008e-01 7.401412079626e-01 2.293655658503e-01 4.921109888581e-01 3.218296872727e+00 1.891001167144e+00 5.449815430517e-07 1.250000000000e-07 +7.455569019139e-01 5.000000000000e-03 5.000000000000e-03 7.455736677160e-01 7.455904331410e-01 2.293944722277e-01 4.924759988062e-01 3.220278113223e+00 1.891583144477e+00 5.449128690246e-07 1.250000000000e-07 +7.510048846144e-01 5.000000000000e-03 5.000000000000e-03 7.510215287957e-01 7.510381726082e-01 2.294909993414e-01 4.929882358877e-01 3.222271705443e+00 1.892168569376e+00 5.446836710752e-07 1.250000000000e-07 +7.564507899160e-01 5.000000000000e-03 5.000000000000e-03 7.564673142738e-01 7.564838382706e-01 2.295695121168e-01 4.936698723282e-01 3.225623479635e+00 1.893152420827e+00 5.444973892543e-07 1.250000000000e-07 +7.618932680368e-01 5.000000000000e-03 5.000000000000e-03 7.619096743577e-01 7.619260803253e-01 2.297801573226e-01 4.946816446852e-01 3.229271298592e+00 1.894222590051e+00 5.439982349064e-07 1.250000000000e-07 +7.673299513262e-01 5.000000000000e-03 5.000000000000e-03 7.673462414075e-01 7.673625311430e-01 2.300591946324e-01 4.956127002834e-01 3.231425075676e+00 1.894854164918e+00 5.433384229642e-07 1.250000000000e-07 +7.727603381664e-01 5.000000000000e-03 5.000000000000e-03 7.727765137755e-01 7.727926890461e-01 2.303133046444e-01 4.965584158192e-01 3.234019089253e+00 1.895614555656e+00 5.427389450775e-07 1.250000000000e-07 +7.781858673352e-01 5.000000000000e-03 5.000000000000e-03 7.782019301700e-01 7.782179926732e-01 2.304712964725e-01 4.975494334809e-01 3.238252058474e+00 1.896854723680e+00 5.423668886893e-07 1.250000000000e-07 +7.836051278101e-01 5.000000000000e-03 5.000000000000e-03 7.836210795597e-01 7.836370309846e-01 2.308465652396e-01 4.988238152473e-01 3.241268598016e+00 1.897738009671e+00 5.414852062896e-07 1.250000000000e-07 +7.890145202768e-01 5.000000000000e-03 5.000000000000e-03 7.890303626653e-01 7.890462047356e-01 2.313130140507e-01 5.003998708838e-01 3.244952772787e+00 1.898816231465e+00 5.403932870486e-07 1.250000000000e-07 +7.944119720809e-01 5.000000000000e-03 5.000000000000e-03 7.944277068340e-01 7.944434412754e-01 2.318691866131e-01 5.026162699584e-01 3.251507524351e+00 1.900733052842e+00 5.390970737676e-07 1.250000000000e-07 +7.997949628113e-01 5.000000000000e-03 5.000000000000e-03 7.998105916643e-01 7.998262202118e-01 2.325576755827e-01 5.052576231641e-01 3.258918170932e+00 1.902897840118e+00 5.375010723115e-07 1.250000000000e-07 +8.051626873478e-01 5.000000000000e-03 5.000000000000e-03 8.051782120109e-01 8.051937363748e-01 2.331898845589e-01 5.073517727434e-01 3.263553479408e+00 1.904250648595e+00 5.360438349906e-07 1.250000000000e-07 +8.105137823199e-01 5.000000000000e-03 5.000000000000e-03 8.105292044896e-01 8.105446263658e-01 2.340056398988e-01 5.102878595489e-01 3.270997184745e+00 1.906421075309e+00 5.341751594281e-07 1.250000000000e-07 +8.158525675538e-01 5.000000000000e-03 5.000000000000e-03 8.158678888056e-01 8.158832097697e-01 2.342658230424e-01 5.115702431531e-01 3.275575390230e+00 1.907754756610e+00 5.335818873476e-07 1.250000000000e-07 +8.211775171573e-01 5.000000000000e-03 5.000000000000e-03 8.211927390599e-01 8.212079606803e-01 2.352241444485e-01 5.148856579514e-01 3.283372498762e+00 1.910023995999e+00 5.314080333593e-07 1.250000000000e-07 +8.264923918928e-01 5.000000000000e-03 5.000000000000e-03 8.265075159106e-01 8.265226396516e-01 2.351538381498e-01 5.144537150683e-01 3.281598882986e+00 1.909508046879e+00 5.315669137424e-07 1.250000000000e-07 +8.317962451070e-01 5.000000000000e-03 5.000000000000e-03 8.318112726900e-01 8.318263000015e-01 2.362039288993e-01 5.185006630860e-01 3.292709813309e+00 1.912737948396e+00 5.292037290933e-07 1.250000000000e-07 +8.371026094421e-01 5.000000000000e-03 5.000000000000e-03 8.371175417674e-01 8.371324738264e-01 2.349318746206e-01 5.138270866325e-01 3.280698420311e+00 1.909246046745e+00 5.320691379229e-07 1.250000000000e-07 +8.425645007956e-01 5.000000000000e-03 5.000000000000e-03 8.425793363245e-01 8.425941715921e-01 2.230911343154e-01 4.705638135652e-01 3.163934427578e+00 1.874962052232e+00 5.603091327838e-07 1.250000000000e-07 +8.487339794929e-01 5.000000000000e-03 5.000000000000e-03 8.487487071836e-01 8.487634346188e-01 1.855737610586e-01 3.391463073736e-01 2.741332924215e+00 1.745257995641e+00 6.735866066784e-07 1.250000000000e-07 +8.563673683186e-01 5.000000000000e-03 5.000000000000e-03 8.563819647336e-01 8.563965608998e-01 1.465259588737e-01 2.202289256591e-01 2.254504191803e+00 1.582720650512e+00 8.530911584599e-07 1.250000000000e-07 +8.653885905033e-01 5.000000000000e-03 5.000000000000e-03 8.654030347608e-01 8.654174787773e-01 1.314194071865e-01 1.814773534117e-01 2.071353355986e+00 1.517070772533e+00 9.511532784697e-07 1.250000000000e-07 +8.750805150626e-01 5.000000000000e-03 5.000000000000e-03 8.750947993459e-01 8.751090833960e-01 1.266166882951e-01 1.702904903149e-01 2.017393906852e+00 1.497180278187e+00 9.872316333901e-07 1.250000000000e-07 +8.850086921507e-01 5.000000000000e-03 5.000000000000e-03 8.850228161931e-01 8.850369400100e-01 1.251998459668e-01 1.671110652079e-01 2.002131838711e+00 1.491506262776e+00 9.984037842437e-07 1.250000000000e-07 +8.950003653887e-01 5.000000000000e-03 5.000000000000e-03 8.950143317544e-01 8.950282979023e-01 1.250086426798e-01 1.666858730365e-01 2.000092187187e+00 1.490746340740e+00 9.999308633417e-07 1.250000000000e-07 +9.050000101169e-01 5.000000000000e-03 5.000000000000e-03 9.050138221660e-01 9.050276340044e-01 1.250002397124e-01 1.666671993611e-01 2.000002556931e+00 1.490712937911e+00 9.999980823047e-07 1.250000000000e-07 +9.150000002713e-01 5.000000000000e-03 5.000000000000e-03 9.150136613715e-01 9.150273222677e-01 1.250000064281e-01 1.666666809514e-01 2.000000068567e+00 1.490712010553e+00 9.999999485751e-07 1.250000000000e-07 +9.250000000073e-01 5.000000000000e-03 5.000000000000e-03 9.250135134221e-01 9.250270266395e-01 1.250000001723e-01 1.666666670496e-01 2.000000001838e+00 1.490711985685e+00 9.999999986214e-07 1.250000000000e-07 +9.350000000002e-01 5.000000000000e-03 5.000000000000e-03 9.350133688886e-01 9.350267375858e-01 1.250000000046e-01 1.666666666769e-01 2.000000000049e+00 1.490711985018e+00 9.999999999630e-07 1.250000000000e-07 +9.450000000000e-01 5.000000000000e-03 5.000000000000e-03 9.450132274207e-01 9.450264546562e-01 1.250000000001e-01 1.666666666669e-01 2.000000000001e+00 1.490711985000e+00 9.999999999990e-07 1.250000000000e-07 +9.550000000000e-01 5.000000000000e-03 5.000000000000e-03 9.550130889155e-01 9.550261776517e-01 1.250000000000e-01 1.666666666667e-01 2.000000000000e+00 1.490711985000e+00 1.000000000000e-06 1.250000000000e-07 +9.650000000000e-01 5.000000000000e-03 5.000000000000e-03 9.650129532809e-01 9.650259063880e-01 1.250000000000e-01 1.666666666667e-01 2.000000000000e+00 1.490711985000e+00 1.000000000000e-06 1.250000000000e-07 +9.750000000000e-01 5.000000000000e-03 5.000000000000e-03 9.750128204285e-01 9.750256406885e-01 1.250000000000e-01 1.666666666667e-01 2.000000000000e+00 1.490711985000e+00 1.000000000000e-06 1.250000000000e-07 +9.850000000000e-01 5.000000000000e-03 5.000000000000e-03 9.850126902736e-01 9.850253803837e-01 1.250000000000e-01 1.666666666667e-01 2.000000000000e+00 1.490711985000e+00 1.000000000000e-06 1.250000000000e-07 +9.950000000000e-01 5.000000000000e-03 5.000000000000e-03 9.950125627348e-01 9.950251253109e-01 1.250000000000e-01 1.666666666667e-01 2.000000000000e+00 1.490711985000e+00 1.000000000000e-06 1.250000000000e-07 diff --git a/single-node-refactor/regression_tests/standard_results/Sod_Y/state/mat_pt_state_t_1.5000e-01.txt b/single-node-refactor/regression_tests/standard_results/Sod_Y/state/mat_pt_state_t_1.5000e-01.txt new file mode 100644 index 000000000..b74f9fb3a --- /dev/null +++ b/single-node-refactor/regression_tests/standard_results/Sod_Y/state/mat_pt_state_t_1.5000e-01.txt @@ -0,0 +1,102 @@ +# state dump file +# x y z radius_2D radius_3D den pres sie sspd vol mass +5.000000000000e-03 5.000000000000e-03 5.000000000000e-03 7.071067811865e-03 8.660254037844e-03 1.000000000000e+00 1.666666666667e+00 2.500000000000e+00 1.666666666667e+00 1.000000000000e-06 1.000000000000e-06 +5.000000000000e-03 1.500000000000e-02 5.000000000000e-03 1.581138830084e-02 1.658312395178e-02 1.000000000000e+00 1.666666666667e+00 2.500000000000e+00 1.666666666667e+00 1.000000000000e-06 1.000000000000e-06 +5.000000000000e-03 2.500000000000e-02 5.000000000000e-03 2.549509756796e-02 2.598076211353e-02 1.000000000000e+00 1.666666666667e+00 2.500000000000e+00 1.666666666667e+00 1.000000000000e-06 1.000000000000e-06 +5.000000000000e-03 3.500000000000e-02 5.000000000000e-03 3.535533905933e-02 3.570714214271e-02 1.000000000000e+00 1.666666666667e+00 2.500000000000e+00 1.666666666667e+00 1.000000000000e-06 1.000000000000e-06 +5.000000000000e-03 4.500000000000e-02 5.000000000000e-03 4.527692569069e-02 4.555216789572e-02 1.000000000000e+00 1.666666666667e+00 2.500000000000e+00 1.666666666667e+00 1.000000000000e-06 1.000000000000e-06 +5.000000000000e-03 5.500000000000e-02 5.000000000000e-03 5.522680508594e-02 5.545268253205e-02 1.000000000000e+00 1.666666666667e+00 2.500000000000e+00 1.666666666667e+00 1.000000000000e-06 1.000000000000e-06 +5.000000000000e-03 6.500000000000e-02 5.000000000000e-03 6.519202405203e-02 6.538348415311e-02 9.999999999998e-01 1.666666666666e+00 2.500000000000e+00 1.666666666667e+00 1.000000000000e-06 1.000000000000e-06 +5.000000000000e-03 7.500000000001e-02 5.000000000000e-03 7.516648189188e-02 7.533259586661e-02 9.999999999979e-01 1.666666666661e+00 2.499999999997e+00 1.666666666666e+00 1.000000000002e-06 1.000000000000e-06 +5.000000000000e-03 8.500000000012e-02 5.000000000000e-03 8.514693182975e-02 8.529361054628e-02 9.999999999814e-01 1.666666666615e+00 2.499999999969e+00 1.666666666656e+00 1.000000000019e-06 1.000000000000e-06 +5.000000000000e-03 9.500000000099e-02 5.000000000000e-03 9.513148795319e-02 9.526279441727e-02 9.999999998444e-01 1.666666666235e+00 2.499999999741e+00 1.666666666580e+00 1.000000000156e-06 1.000000000000e-06 +5.000000000000e-03 1.050000000078e-01 5.000000000000e-03 1.051189802160e-01 1.052378259071e-01 9.999999987852e-01 1.666666663292e+00 2.499999997975e+00 1.666666665992e+00 1.000000001215e-06 1.000000000000e-06 +5.000000000000e-03 1.150000000581e-01 5.000000000000e-03 1.151086443903e-01 1.152171862760e-01 9.999999911616e-01 1.666666642115e+00 2.499999985269e+00 1.666666661756e+00 1.000000008838e-06 1.000000000000e-06 +5.000000000000e-03 1.250000004008e-01 5.000000000000e-03 1.250999604324e-01 1.251998406556e-01 9.999999403048e-01 1.666666500847e+00 2.499999900508e+00 1.666666633503e+00 1.000000059695e-06 1.000000000000e-06 +5.000000000000e-03 1.350000025625e-01 5.000000000000e-03 1.350925634218e-01 1.351850609050e-01 9.999996273447e-01 1.666665631513e+00 2.499999378908e+00 1.666666459636e+00 1.000000372655e-06 1.000000000000e-06 +5.000000000000e-03 1.450000151218e-01 5.000000000000e-03 1.450861963983e-01 1.451723265134e-01 9.999978608035e-01 1.666660724458e+00 2.499996434671e+00 1.666665478223e+00 1.000002139201e-06 1.000000000000e-06 +5.000000000000e-03 1.550000819135e-01 5.000000000000e-03 1.550807060637e-01 1.551612883203e-01 9.999887809809e-01 1.666635502840e+00 2.499981301598e+00 1.666660433854e+00 1.000011219145e-06 1.000000000000e-06 +5.000000000000e-03 1.650004043163e-01 5.000000000000e-03 1.650761443230e-01 1.651518495947e-01 9.999467414256e-01 1.666518728784e+00 2.499911234884e+00 1.666637078032e+00 1.000053261411e-06 1.000000000000e-06 +5.000000000000e-03 1.750017973266e-01 5.000000000000e-03 1.750732105935e-01 1.751445947425e-01 9.997747101310e-01 1.666040908268e+00 2.499624502478e+00 1.666541496126e+00 1.000225340636e-06 1.000000000000e-06 +5.000000000000e-03 1.850070568892e-01 5.000000000000e-03 1.850746095465e-01 1.851421375560e-01 9.991741107651e-01 1.664373165048e+00 2.498623333685e+00 1.666207714704e+00 1.000826571892e-06 1.000000000000e-06 +5.000000000000e-03 1.950238443538e-01 5.000000000000e-03 1.950879285515e-01 1.951519917053e-01 9.974754683651e-01 1.659660102218e+00 2.495790856298e+00 1.665263027705e+00 1.002530921025e-06 1.000000000000e-06 +5.000000000000e-03 2.050680591740e-01 5.000000000000e-03 2.051290054902e-01 2.051899337038e-01 9.937275489641e-01 1.649280872552e+00 2.489536806549e+00 1.663175278579e+00 1.006312043017e-06 1.000000000000e-06 +5.000000000000e-03 2.151646203260e-01 5.000000000000e-03 2.152227075381e-01 2.152807790771e-01 9.871666485908e-01 1.631177170688e+00 2.478574169340e+00 1.659509354980e+00 1.013000187382e-06 1.000000000000e-06 +5.000000000000e-03 2.253447361084e-01 5.000000000000e-03 2.254001998485e-01 2.254556499442e-01 9.774951591578e-01 1.604641528842e+00 2.462377711759e+00 1.654078364313e+00 1.023022969097e-06 1.000000000000e-06 +5.000000000000e-03 2.356423506381e-01 5.000000000000e-03 2.356953911604e-01 2.357484197492e-01 9.647853940506e-01 1.570041952614e+00 2.441022577087e+00 1.646890193023e+00 1.036499936842e-06 1.000000000000e-06 +5.000000000000e-03 2.460918115611e-01 5.000000000000e-03 2.461426003711e-01 2.461933787035e-01 9.493139921281e-01 1.528340288620e+00 2.414912717962e+00 1.638058714849e+00 1.053392247762e-06 1.000000000000e-06 +5.000000000000e-03 2.567268416549e-01 5.000000000000e-03 2.567755269220e-01 2.568242029601e-01 9.314336561432e-01 1.480714704624e+00 2.384573546690e+00 1.627736515223e+00 1.073613770991e-06 1.000000000000e-06 +5.000000000000e-03 2.675804189938e-01 5.000000000000e-03 2.676271298447e-01 2.676738325442e-01 9.114925288335e-01 1.428322491520e+00 2.350522543527e+00 1.616072929985e+00 1.097101696796e-06 1.000000000000e-06 +5.000000000000e-03 2.786852141056e-01 5.000000000000e-03 2.787300639706e-01 2.787749066201e-01 8.897926607388e-01 1.372180289825e+00 2.313202306061e+00 1.603192061018e+00 1.123857325559e-06 1.000000000000e-06 +5.000000000000e-03 2.900743401871e-01 5.000000000000e-03 2.901174293885e-01 2.901605121911e-01 8.665752383686e-01 1.313124866139e+00 2.272955898112e+00 1.589184241508e+00 1.153967890754e-06 1.000000000000e-06 +5.000000000000e-03 3.017822707525e-01 5.000000000000e-03 3.018236885013e-01 3.018651005674e-01 8.420214351756e-01 1.251820321644e+00 2.230026937585e+00 1.574105367638e+00 1.187618222322e-06 1.000000000000e-06 +5.000000000000e-03 3.138458543052e-01 5.000000000000e-03 3.138856802477e-01 3.139255011377e-01 8.162609044278e-01 1.188787150335e+00 2.184572011020e+00 1.557980177816e+00 1.225098488211e-06 1.000000000000e-06 +5.000000000000e-03 3.263054063258e-01 5.000000000000e-03 3.263437117480e-01 3.263820126745e-01 7.893831652833e-01 1.124438473410e+00 2.136678085236e+00 1.540807178518e+00 1.266811915910e-06 1.000000000000e-06 +5.000000000000e-03 3.392058901156e-01 5.000000000000e-03 3.392427388893e-01 3.392795836609e-01 7.614494342622e-01 1.059115851584e+00 2.086381190782e+00 1.522564062065e+00 1.313284842045e-06 1.000000000000e-06 +5.000000000000e-03 3.525982094249e-01 5.000000000000e-03 3.526336587588e-01 3.526691045295e-01 7.325046645772e-01 9.931231248761e-01 2.033686281266e+00 1.503213698590e+00 1.365179019819e-06 1.000000000000e-06 +5.000000000000e-03 3.665374569575e-01 5.000000000000e-03 3.665715582977e-01 3.666056564660e-01 7.029034547014e-01 9.274496524032e-01 1.979182872555e+00 1.482933606274e+00 1.422670486695e-06 1.000000000000e-06 +5.000000000000e-03 3.810735481908e-01 5.000000000000e-03 3.811063488460e-01 3.811391466784e-01 6.736058124647e-01 8.642922032941e-01 1.924624581545e+00 1.462351447933e+00 1.484547759974e-06 1.000000000000e-06 +5.000000000000e-03 3.962493557703e-01 5.000000000000e-03 3.962809003073e-01 3.963124423335e-01 6.449059259160e-01 8.042376719830e-01 1.870592995809e+00 1.441678418376e+00 1.550613755920e-06 1.000000000000e-06 +5.000000000000e-03 4.121052320105e-01 5.000000000000e-03 4.121355629528e-01 4.121658916631e-01 6.170700740844e-01 7.477496247185e-01 1.817661371348e+00 1.421134668475e+00 1.620561492119e-06 1.000000000000e-06 +5.000000000000e-03 4.286766385631e-01 5.000000000000e-03 4.287057970797e-01 4.287349536132e-01 5.904164249211e-01 6.953348790392e-01 1.766553697584e+00 1.401013005564e+00 1.693719818404e-06 1.000000000000e-06 +5.000000000000e-03 4.459892068445e-01 5.000000000000e-03 4.460172335479e-01 4.460452584904e-01 5.653570125515e-01 6.476280914535e-01 1.718280866096e+00 1.381738384184e+00 1.768793837874e-06 1.000000000000e-06 +5.000000000000e-03 4.640514055896e-01 5.000000000000e-03 4.640783414788e-01 4.641052758046e-01 5.424035027296e-01 6.053292770704e-01 1.674019269854e+00 1.363826019311e+00 1.843645911148e-06 1.000000000000e-06 +5.000000000000e-03 4.828457509805e-01 5.000000000000e-03 4.828716384712e-01 4.828975245742e-01 5.221323641108e-01 5.691292608422e-01 1.635014318098e+00 1.347843676271e+00 1.915223167028e-06 1.000000000000e-06 +5.000000000000e-03 5.023205288335e-01 5.000000000000e-03 5.023454127267e-01 5.023702953873e-01 5.051187717052e-01 5.397341074002e-01 1.602793652604e+00 1.334496847590e+00 1.979732403577e-06 1.000000000000e-06 +5.000000000000e-03 5.223842886423e-01 5.000000000000e-03 5.224082168384e-01 5.224321439386e-01 4.918791833446e-01 5.177667011435e-01 1.578944744997e+00 1.324531256708e+00 2.033019558177e-06 1.000000000000e-06 +5.000000000000e-03 5.429084891227e-01 5.000000000000e-03 5.429315127725e-01 5.429545354461e-01 4.826672878784e-01 5.035342294850e-01 1.564848837275e+00 1.318605676579e+00 2.071820537902e-06 1.000000000000e-06 +5.000000000000e-03 5.637478911409e-01 5.000000000000e-03 5.637700637369e-01 5.637922354608e-01 4.770856101672e-01 4.964791446934e-01 1.560975014063e+00 1.316972544244e+00 2.096059865754e-06 1.000000000000e-06 +5.000000000000e-03 5.847917152780e-01 5.000000000000e-03 5.848130900192e-01 5.848344639791e-01 4.733268573459e-01 4.938806602195e-01 1.565136181968e+00 1.318726735221e+00 2.112704961657e-06 1.000000000000e-06 +5.000000000000e-03 6.060284437860e-01 5.000000000000e-03 6.060490695296e-01 6.060696945713e-01 4.684629039833e-01 4.915374678552e-01 1.573883856147e+00 1.322406836100e+00 2.134640739954e-06 1.000000000000e-06 +5.000000000000e-03 6.275457230969e-01 5.000000000000e-03 6.275656416481e-01 6.275855595671e-01 4.610812557326e-01 4.923280418537e-01 1.601652753390e+00 1.334021802833e+00 2.168815122209e-06 1.000000000000e-06 +5.000000000000e-03 6.500109440925e-01 5.000000000000e-03 6.500301742535e-01 6.500494038456e-01 4.302501891603e-01 4.943475700015e-01 1.723465494459e+00 1.383821397620e+00 2.324229076928e-06 1.000000000000e-06 +5.000000000000e-03 6.643772194111e-01 5.000000000000e-03 6.643960337573e-01 6.644148475707e-01 2.276759261128e-01 4.951060959469e-01 3.261913354652e+00 1.903772090308e+00 5.490259867793e-07 1.250000000000e-07 +5.000000000000e-03 6.698112084469e-01 5.000000000000e-03 6.698298701619e-01 6.698485313570e-01 2.324405914571e-01 4.953005035593e-01 3.196303841260e+00 1.884528777310e+00 5.377718203882e-07 1.250000000000e-07 +5.000000000000e-03 6.751837580777e-01 5.000000000000e-03 6.752022713024e-01 6.752207840195e-01 2.328882534237e-01 4.955214756346e-01 3.191583098438e+00 1.883136596933e+00 5.367381057755e-07 1.250000000000e-07 +5.000000000000e-03 6.805513816802e-01 5.000000000000e-03 6.805697488919e-01 6.805881156080e-01 2.328672075151e-01 4.955295458526e-01 3.191923528910e+00 1.883237026715e+00 5.367866147144e-07 1.250000000000e-07 +5.000000000000e-03 6.859223783660e-01 5.000000000000e-03 6.859406017603e-01 6.859588246704e-01 2.325959077238e-01 4.952268658616e-01 3.193694618542e+00 1.883759426296e+00 5.374127224475e-07 1.250000000000e-07 +5.000000000000e-03 6.913010162713e-01 5.000000000000e-03 6.913190978830e-01 6.913371790218e-01 2.322061113466e-01 4.948252013883e-01 3.196461099917e+00 1.884575136298e+00 5.383148586189e-07 1.250000000000e-07 +5.000000000000e-03 6.966890398337e-01 5.000000000000e-03 6.967069816102e-01 6.967249229247e-01 2.317863002712e-01 4.943644111869e-01 3.199268532750e+00 1.885402560242e+00 5.392898538599e-07 1.250000000000e-07 +5.000000000000e-03 7.020868409677e-01 5.000000000000e-03 7.021046448073e-01 7.021224481955e-01 2.313656388775e-01 4.938623682092e-01 3.201830470193e+00 1.886157313515e+00 5.402703729319e-07 1.250000000000e-07 +5.000000000000e-03 7.074945210435e-01 5.000000000000e-03 7.075121888042e-01 7.075298561238e-01 2.309402080032e-01 4.934209681367e-01 3.204861806459e+00 1.887049962967e+00 5.412656422231e-07 1.250000000000e-07 +5.000000000000e-03 7.129119834291e-01 5.000000000000e-03 7.129295169347e-01 7.129470500092e-01 2.305308257622e-01 4.929598446027e-01 3.207552675262e+00 1.887841999998e+00 5.422268349002e-07 1.250000000000e-07 +5.000000000000e-03 7.183388838141e-01 5.000000000000e-03 7.183562848610e-01 7.183736854864e-01 2.301376302507e-01 4.924262978695e-01 3.209555282200e+00 1.888431236709e+00 5.431532421004e-07 1.250000000000e-07 +5.000000000000e-03 7.237737951077e-01 5.000000000000e-03 7.237910654910e-01 7.238083354622e-01 2.298516559032e-01 4.920579092733e-01 3.211144427085e+00 1.888898687679e+00 5.438290166273e-07 1.250000000000e-07 +5.000000000000e-03 7.292142906582e-01 5.000000000000e-03 7.292314321943e-01 7.292485733274e-01 2.296653839721e-01 4.919682353036e-01 3.213163168922e+00 1.889492338911e+00 5.442700934643e-07 1.250000000000e-07 +5.000000000000e-03 7.346590816319e-01 5.000000000000e-03 7.346760961296e-01 7.346931102332e-01 2.294891327849e-01 4.919689849038e-01 3.215635827285e+00 1.890219219293e+00 5.446881012756e-07 1.250000000000e-07 +5.000000000000e-03 7.401074298535e-01 5.000000000000e-03 7.401243191008e-01 7.401412079626e-01 2.293655658503e-01 4.921109888581e-01 3.218296872727e+00 1.891001167144e+00 5.449815430517e-07 1.250000000000e-07 +5.000000000000e-03 7.455569019139e-01 5.000000000000e-03 7.455736677160e-01 7.455904331410e-01 2.293944722277e-01 4.924759988062e-01 3.220278113223e+00 1.891583144477e+00 5.449128690246e-07 1.250000000000e-07 +5.000000000000e-03 7.510048846144e-01 5.000000000000e-03 7.510215287957e-01 7.510381726082e-01 2.294909993414e-01 4.929882358877e-01 3.222271705443e+00 1.892168569376e+00 5.446836710752e-07 1.250000000000e-07 +5.000000000000e-03 7.564507899160e-01 5.000000000000e-03 7.564673142738e-01 7.564838382706e-01 2.295695121169e-01 4.936698723283e-01 3.225623479635e+00 1.893152420827e+00 5.444973892542e-07 1.250000000000e-07 +5.000000000000e-03 7.618932680368e-01 5.000000000000e-03 7.619096743577e-01 7.619260803253e-01 2.297801573226e-01 4.946816446852e-01 3.229271298592e+00 1.894222590051e+00 5.439982349064e-07 1.250000000000e-07 +5.000000000000e-03 7.673299513262e-01 5.000000000000e-03 7.673462414075e-01 7.673625311430e-01 2.300591946325e-01 4.956127002834e-01 3.231425075676e+00 1.894854164918e+00 5.433384229641e-07 1.250000000000e-07 +5.000000000000e-03 7.727603381664e-01 5.000000000000e-03 7.727765137755e-01 7.727926890461e-01 2.303133046444e-01 4.965584158192e-01 3.234019089253e+00 1.895614555656e+00 5.427389450775e-07 1.250000000000e-07 +5.000000000000e-03 7.781858673352e-01 5.000000000000e-03 7.782019301700e-01 7.782179926732e-01 2.304712964725e-01 4.975494334809e-01 3.238252058474e+00 1.896854723680e+00 5.423668886893e-07 1.250000000000e-07 +5.000000000000e-03 7.836051278101e-01 5.000000000000e-03 7.836210795597e-01 7.836370309846e-01 2.308465652396e-01 4.988238152473e-01 3.241268598016e+00 1.897738009671e+00 5.414852062896e-07 1.250000000000e-07 +5.000000000000e-03 7.890145202768e-01 5.000000000000e-03 7.890303626653e-01 7.890462047356e-01 2.313130140507e-01 5.003998708838e-01 3.244952772787e+00 1.898816231465e+00 5.403932870486e-07 1.250000000000e-07 +5.000000000000e-03 7.944119720809e-01 5.000000000000e-03 7.944277068340e-01 7.944434412754e-01 2.318691866131e-01 5.026162699584e-01 3.251507524351e+00 1.900733052843e+00 5.390970737676e-07 1.250000000000e-07 +5.000000000000e-03 7.997949628113e-01 5.000000000000e-03 7.998105916643e-01 7.998262202118e-01 2.325576755827e-01 5.052576231642e-01 3.258918170932e+00 1.902897840118e+00 5.375010723115e-07 1.250000000000e-07 +5.000000000000e-03 8.051626873478e-01 5.000000000000e-03 8.051782120109e-01 8.051937363748e-01 2.331898845589e-01 5.073517727435e-01 3.263553479408e+00 1.904250648595e+00 5.360438349906e-07 1.250000000000e-07 +5.000000000000e-03 8.105137823199e-01 5.000000000000e-03 8.105292044896e-01 8.105446263658e-01 2.340056398988e-01 5.102878595489e-01 3.270997184745e+00 1.906421075309e+00 5.341751594281e-07 1.250000000000e-07 +5.000000000000e-03 8.158525675538e-01 5.000000000000e-03 8.158678888056e-01 8.158832097697e-01 2.342658230424e-01 5.115702431531e-01 3.275575390230e+00 1.907754756610e+00 5.335818873476e-07 1.250000000000e-07 +5.000000000000e-03 8.211775171573e-01 5.000000000000e-03 8.211927390599e-01 8.212079606803e-01 2.352241444485e-01 5.148856579514e-01 3.283372498762e+00 1.910023995999e+00 5.314080333593e-07 1.250000000000e-07 +5.000000000000e-03 8.264923918928e-01 5.000000000000e-03 8.265075159106e-01 8.265226396516e-01 2.351538381498e-01 5.144537150683e-01 3.281598882986e+00 1.909508046879e+00 5.315669137425e-07 1.250000000000e-07 +5.000000000000e-03 8.317962451070e-01 5.000000000000e-03 8.318112726900e-01 8.318263000015e-01 2.362039288993e-01 5.185006630860e-01 3.292709813309e+00 1.912737948396e+00 5.292037290933e-07 1.250000000000e-07 +5.000000000000e-03 8.371026094421e-01 5.000000000000e-03 8.371175417674e-01 8.371324738264e-01 2.349318746206e-01 5.138270866324e-01 3.280698420311e+00 1.909246046745e+00 5.320691379229e-07 1.250000000000e-07 +5.000000000000e-03 8.425645007956e-01 5.000000000000e-03 8.425793363245e-01 8.425941715921e-01 2.230911343154e-01 4.705638135652e-01 3.163934427578e+00 1.874962052232e+00 5.603091327838e-07 1.250000000000e-07 +5.000000000000e-03 8.487339794929e-01 5.000000000000e-03 8.487487071836e-01 8.487634346188e-01 1.855737610586e-01 3.391463073736e-01 2.741332924215e+00 1.745257995641e+00 6.735866066783e-07 1.250000000000e-07 +5.000000000000e-03 8.563673683186e-01 5.000000000000e-03 8.563819647336e-01 8.563965608998e-01 1.465259588737e-01 2.202289256591e-01 2.254504191803e+00 1.582720650512e+00 8.530911584598e-07 1.250000000000e-07 +5.000000000000e-03 8.653885905033e-01 5.000000000000e-03 8.654030347608e-01 8.654174787773e-01 1.314194071865e-01 1.814773534117e-01 2.071353355986e+00 1.517070772533e+00 9.511532784697e-07 1.250000000000e-07 +5.000000000000e-03 8.750805150626e-01 5.000000000000e-03 8.750947993459e-01 8.751090833960e-01 1.266166882951e-01 1.702904903149e-01 2.017393906852e+00 1.497180278187e+00 9.872316333901e-07 1.250000000000e-07 +5.000000000000e-03 8.850086921507e-01 5.000000000000e-03 8.850228161931e-01 8.850369400100e-01 1.251998459668e-01 1.671110652079e-01 2.002131838711e+00 1.491506262776e+00 9.984037842437e-07 1.250000000000e-07 +5.000000000000e-03 8.950003653887e-01 5.000000000000e-03 8.950143317544e-01 8.950282979023e-01 1.250086426798e-01 1.666858730365e-01 2.000092187187e+00 1.490746340740e+00 9.999308633417e-07 1.250000000000e-07 +5.000000000000e-03 9.050000101169e-01 5.000000000000e-03 9.050138221660e-01 9.050276340044e-01 1.250002397124e-01 1.666671993611e-01 2.000002556931e+00 1.490712937911e+00 9.999980823047e-07 1.250000000000e-07 +5.000000000000e-03 9.150000002713e-01 5.000000000000e-03 9.150136613715e-01 9.150273222677e-01 1.250000064281e-01 1.666666809514e-01 2.000000068567e+00 1.490712010553e+00 9.999999485751e-07 1.250000000000e-07 +5.000000000000e-03 9.250000000073e-01 5.000000000000e-03 9.250135134221e-01 9.250270266395e-01 1.250000001723e-01 1.666666670496e-01 2.000000001838e+00 1.490711985685e+00 9.999999986214e-07 1.250000000000e-07 +5.000000000000e-03 9.350000000002e-01 5.000000000000e-03 9.350133688886e-01 9.350267375858e-01 1.250000000046e-01 1.666666666769e-01 2.000000000049e+00 1.490711985018e+00 9.999999999630e-07 1.250000000000e-07 +5.000000000000e-03 9.450000000000e-01 5.000000000000e-03 9.450132274207e-01 9.450264546562e-01 1.250000000001e-01 1.666666666669e-01 2.000000000001e+00 1.490711985000e+00 9.999999999990e-07 1.250000000000e-07 +5.000000000000e-03 9.550000000000e-01 5.000000000000e-03 9.550130889155e-01 9.550261776517e-01 1.250000000000e-01 1.666666666667e-01 2.000000000000e+00 1.490711985000e+00 1.000000000000e-06 1.250000000000e-07 +5.000000000000e-03 9.650000000000e-01 5.000000000000e-03 9.650129532809e-01 9.650259063880e-01 1.250000000000e-01 1.666666666667e-01 2.000000000000e+00 1.490711985000e+00 1.000000000000e-06 1.250000000000e-07 +5.000000000000e-03 9.750000000000e-01 5.000000000000e-03 9.750128204285e-01 9.750256406885e-01 1.250000000000e-01 1.666666666667e-01 2.000000000000e+00 1.490711985000e+00 1.000000000000e-06 1.250000000000e-07 +5.000000000000e-03 9.850000000000e-01 5.000000000000e-03 9.850126902736e-01 9.850253803837e-01 1.250000000000e-01 1.666666666667e-01 2.000000000000e+00 1.490711985000e+00 1.000000000000e-06 1.250000000000e-07 +5.000000000000e-03 9.950000000000e-01 5.000000000000e-03 9.950125627348e-01 9.950251253109e-01 1.250000000000e-01 1.666666666667e-01 2.000000000000e+00 1.490711985000e+00 1.000000000000e-06 1.250000000000e-07 diff --git a/single-node-refactor/regression_tests/standard_results/Sod_Z/state/mat_pt_state_t_1.5000e-01.txt b/single-node-refactor/regression_tests/standard_results/Sod_Z/state/mat_pt_state_t_1.5000e-01.txt new file mode 100644 index 000000000..15e765065 --- /dev/null +++ b/single-node-refactor/regression_tests/standard_results/Sod_Z/state/mat_pt_state_t_1.5000e-01.txt @@ -0,0 +1,102 @@ +# state dump file +# x y z radius_2D radius_3D den pres sie sspd vol mass +5.000000000000e-03 5.000000000000e-03 5.000000000000e-03 7.071067811865e-03 8.660254037844e-03 1.000000000000e+00 1.666666666667e+00 2.500000000000e+00 1.666666666667e+00 1.000000000000e-06 1.000000000000e-06 +5.000000000000e-03 5.000000000000e-03 1.500000000000e-02 7.071067811865e-03 1.658312395178e-02 1.000000000000e+00 1.666666666667e+00 2.500000000000e+00 1.666666666667e+00 1.000000000000e-06 1.000000000000e-06 +5.000000000000e-03 5.000000000000e-03 2.500000000000e-02 7.071067811865e-03 2.598076211353e-02 1.000000000000e+00 1.666666666667e+00 2.500000000000e+00 1.666666666667e+00 1.000000000000e-06 1.000000000000e-06 +5.000000000000e-03 5.000000000000e-03 3.500000000000e-02 7.071067811865e-03 3.570714214271e-02 1.000000000000e+00 1.666666666667e+00 2.500000000000e+00 1.666666666667e+00 1.000000000000e-06 1.000000000000e-06 +5.000000000000e-03 5.000000000000e-03 4.500000000000e-02 7.071067811865e-03 4.555216789572e-02 1.000000000000e+00 1.666666666667e+00 2.500000000000e+00 1.666666666667e+00 1.000000000000e-06 1.000000000000e-06 +5.000000000000e-03 5.000000000000e-03 5.500000000000e-02 7.071067811865e-03 5.545268253205e-02 1.000000000000e+00 1.666666666667e+00 2.500000000000e+00 1.666666666667e+00 1.000000000000e-06 1.000000000000e-06 +5.000000000000e-03 5.000000000000e-03 6.500000000000e-02 7.071067811865e-03 6.538348415311e-02 9.999999999998e-01 1.666666666666e+00 2.500000000000e+00 1.666666666667e+00 1.000000000000e-06 1.000000000000e-06 +5.000000000000e-03 5.000000000000e-03 7.500000000001e-02 7.071067811865e-03 7.533259586661e-02 9.999999999979e-01 1.666666666661e+00 2.499999999997e+00 1.666666666666e+00 1.000000000002e-06 1.000000000000e-06 +5.000000000000e-03 5.000000000000e-03 8.500000000012e-02 7.071067811865e-03 8.529361054628e-02 9.999999999814e-01 1.666666666615e+00 2.499999999969e+00 1.666666666656e+00 1.000000000019e-06 1.000000000000e-06 +5.000000000000e-03 5.000000000000e-03 9.500000000099e-02 7.071067811865e-03 9.526279441727e-02 9.999999998444e-01 1.666666666235e+00 2.499999999741e+00 1.666666666580e+00 1.000000000156e-06 1.000000000000e-06 +5.000000000000e-03 5.000000000000e-03 1.050000000078e-01 7.071067811865e-03 1.052378259071e-01 9.999999987852e-01 1.666666663292e+00 2.499999997975e+00 1.666666665992e+00 1.000000001215e-06 1.000000000000e-06 +5.000000000000e-03 5.000000000000e-03 1.150000000581e-01 7.071067811865e-03 1.152171862760e-01 9.999999911616e-01 1.666666642115e+00 2.499999985269e+00 1.666666661756e+00 1.000000008838e-06 1.000000000000e-06 +5.000000000000e-03 5.000000000000e-03 1.250000004008e-01 7.071067811865e-03 1.251998406556e-01 9.999999403048e-01 1.666666500847e+00 2.499999900508e+00 1.666666633503e+00 1.000000059695e-06 1.000000000000e-06 +5.000000000000e-03 5.000000000000e-03 1.350000025625e-01 7.071067811865e-03 1.351850609050e-01 9.999996273447e-01 1.666665631513e+00 2.499999378908e+00 1.666666459636e+00 1.000000372655e-06 1.000000000000e-06 +5.000000000000e-03 5.000000000000e-03 1.450000151218e-01 7.071067811865e-03 1.451723265134e-01 9.999978608035e-01 1.666660724458e+00 2.499996434671e+00 1.666665478223e+00 1.000002139201e-06 1.000000000000e-06 +5.000000000000e-03 5.000000000000e-03 1.550000819135e-01 7.071067811865e-03 1.551612883203e-01 9.999887809809e-01 1.666635502840e+00 2.499981301598e+00 1.666660433854e+00 1.000011219145e-06 1.000000000000e-06 +5.000000000000e-03 5.000000000000e-03 1.650004043163e-01 7.071067811865e-03 1.651518495947e-01 9.999467414256e-01 1.666518728784e+00 2.499911234884e+00 1.666637078032e+00 1.000053261411e-06 1.000000000000e-06 +5.000000000000e-03 5.000000000000e-03 1.750017973266e-01 7.071067811865e-03 1.751445947425e-01 9.997747101310e-01 1.666040908268e+00 2.499624502478e+00 1.666541496126e+00 1.000225340636e-06 1.000000000000e-06 +5.000000000000e-03 5.000000000000e-03 1.850070568892e-01 7.071067811865e-03 1.851421375560e-01 9.991741107651e-01 1.664373165048e+00 2.498623333685e+00 1.666207714704e+00 1.000826571892e-06 1.000000000000e-06 +5.000000000000e-03 5.000000000000e-03 1.950238443538e-01 7.071067811865e-03 1.951519917053e-01 9.974754683651e-01 1.659660102218e+00 2.495790856298e+00 1.665263027705e+00 1.002530921025e-06 1.000000000000e-06 +5.000000000000e-03 5.000000000000e-03 2.050680591740e-01 7.071067811865e-03 2.051899337038e-01 9.937275489641e-01 1.649280872552e+00 2.489536806549e+00 1.663175278579e+00 1.006312043017e-06 1.000000000000e-06 +5.000000000000e-03 5.000000000000e-03 2.151646203260e-01 7.071067811865e-03 2.152807790771e-01 9.871666485908e-01 1.631177170688e+00 2.478574169340e+00 1.659509354980e+00 1.013000187382e-06 1.000000000000e-06 +5.000000000000e-03 5.000000000000e-03 2.253447361084e-01 7.071067811865e-03 2.254556499442e-01 9.774951591578e-01 1.604641528842e+00 2.462377711759e+00 1.654078364313e+00 1.023022969097e-06 1.000000000000e-06 +5.000000000000e-03 5.000000000000e-03 2.356423506381e-01 7.071067811865e-03 2.357484197492e-01 9.647853940506e-01 1.570041952614e+00 2.441022577087e+00 1.646890193023e+00 1.036499936842e-06 1.000000000000e-06 +5.000000000000e-03 5.000000000000e-03 2.460918115611e-01 7.071067811865e-03 2.461933787035e-01 9.493139921281e-01 1.528340288620e+00 2.414912717962e+00 1.638058714849e+00 1.053392247762e-06 1.000000000000e-06 +5.000000000000e-03 5.000000000000e-03 2.567268416549e-01 7.071067811865e-03 2.568242029601e-01 9.314336561432e-01 1.480714704624e+00 2.384573546690e+00 1.627736515223e+00 1.073613770991e-06 1.000000000000e-06 +5.000000000000e-03 5.000000000000e-03 2.675804189938e-01 7.071067811865e-03 2.676738325442e-01 9.114925288335e-01 1.428322491520e+00 2.350522543527e+00 1.616072929985e+00 1.097101696796e-06 1.000000000000e-06 +5.000000000000e-03 5.000000000000e-03 2.786852141056e-01 7.071067811865e-03 2.787749066201e-01 8.897926607388e-01 1.372180289825e+00 2.313202306061e+00 1.603192061018e+00 1.123857325559e-06 1.000000000000e-06 +5.000000000000e-03 5.000000000000e-03 2.900743401871e-01 7.071067811865e-03 2.901605121911e-01 8.665752383686e-01 1.313124866139e+00 2.272955898112e+00 1.589184241508e+00 1.153967890754e-06 1.000000000000e-06 +5.000000000000e-03 5.000000000000e-03 3.017822707525e-01 7.071067811865e-03 3.018651005674e-01 8.420214351756e-01 1.251820321644e+00 2.230026937585e+00 1.574105367638e+00 1.187618222322e-06 1.000000000000e-06 +5.000000000000e-03 5.000000000000e-03 3.138458543052e-01 7.071067811865e-03 3.139255011377e-01 8.162609044278e-01 1.188787150335e+00 2.184572011020e+00 1.557980177816e+00 1.225098488211e-06 1.000000000000e-06 +5.000000000000e-03 5.000000000000e-03 3.263054063258e-01 7.071067811865e-03 3.263820126745e-01 7.893831652834e-01 1.124438473410e+00 2.136678085236e+00 1.540807178518e+00 1.266811915910e-06 1.000000000000e-06 +5.000000000000e-03 5.000000000000e-03 3.392058901156e-01 7.071067811865e-03 3.392795836609e-01 7.614494342622e-01 1.059115851584e+00 2.086381190782e+00 1.522564062065e+00 1.313284842045e-06 1.000000000000e-06 +5.000000000000e-03 5.000000000000e-03 3.525982094249e-01 7.071067811865e-03 3.526691045295e-01 7.325046645772e-01 9.931231248761e-01 2.033686281266e+00 1.503213698590e+00 1.365179019819e-06 1.000000000000e-06 +5.000000000000e-03 5.000000000000e-03 3.665374569575e-01 7.071067811865e-03 3.666056564660e-01 7.029034547014e-01 9.274496524032e-01 1.979182872555e+00 1.482933606274e+00 1.422670486695e-06 1.000000000000e-06 +5.000000000000e-03 5.000000000000e-03 3.810735481908e-01 7.071067811865e-03 3.811391466784e-01 6.736058124647e-01 8.642922032941e-01 1.924624581545e+00 1.462351447933e+00 1.484547759974e-06 1.000000000000e-06 +5.000000000000e-03 5.000000000000e-03 3.962493557703e-01 7.071067811865e-03 3.963124423335e-01 6.449059259161e-01 8.042376719830e-01 1.870592995809e+00 1.441678418376e+00 1.550613755920e-06 1.000000000000e-06 +5.000000000000e-03 5.000000000000e-03 4.121052320105e-01 7.071067811865e-03 4.121658916631e-01 6.170700740844e-01 7.477496247185e-01 1.817661371348e+00 1.421134668475e+00 1.620561492119e-06 1.000000000000e-06 +5.000000000000e-03 5.000000000000e-03 4.286766385631e-01 7.071067811865e-03 4.287349536132e-01 5.904164249211e-01 6.953348790392e-01 1.766553697584e+00 1.401013005564e+00 1.693719818404e-06 1.000000000000e-06 +5.000000000000e-03 5.000000000000e-03 4.459892068445e-01 7.071067811865e-03 4.460452584904e-01 5.653570125515e-01 6.476280914535e-01 1.718280866096e+00 1.381738384184e+00 1.768793837874e-06 1.000000000000e-06 +5.000000000000e-03 5.000000000000e-03 4.640514055896e-01 7.071067811865e-03 4.641052758046e-01 5.424035027296e-01 6.053292770704e-01 1.674019269854e+00 1.363826019311e+00 1.843645911148e-06 1.000000000000e-06 +5.000000000000e-03 5.000000000000e-03 4.828457509805e-01 7.071067811865e-03 4.828975245742e-01 5.221323641108e-01 5.691292608422e-01 1.635014318098e+00 1.347843676271e+00 1.915223167028e-06 1.000000000000e-06 +5.000000000000e-03 5.000000000000e-03 5.023205288335e-01 7.071067811865e-03 5.023702953873e-01 5.051187717052e-01 5.397341074002e-01 1.602793652604e+00 1.334496847590e+00 1.979732403577e-06 1.000000000000e-06 +5.000000000000e-03 5.000000000000e-03 5.223842886423e-01 7.071067811865e-03 5.224321439386e-01 4.918791833446e-01 5.177667011435e-01 1.578944744997e+00 1.324531256708e+00 2.033019558177e-06 1.000000000000e-06 +5.000000000000e-03 5.000000000000e-03 5.429084891227e-01 7.071067811865e-03 5.429545354461e-01 4.826672878784e-01 5.035342294850e-01 1.564848837275e+00 1.318605676579e+00 2.071820537902e-06 1.000000000000e-06 +5.000000000000e-03 5.000000000000e-03 5.637478911409e-01 7.071067811865e-03 5.637922354608e-01 4.770856101672e-01 4.964791446934e-01 1.560975014063e+00 1.316972544244e+00 2.096059865754e-06 1.000000000000e-06 +5.000000000000e-03 5.000000000000e-03 5.847917152780e-01 7.071067811865e-03 5.848344639791e-01 4.733268573459e-01 4.938806602195e-01 1.565136181968e+00 1.318726735221e+00 2.112704961656e-06 1.000000000000e-06 +5.000000000000e-03 5.000000000000e-03 6.060284437860e-01 7.071067811865e-03 6.060696945713e-01 4.684629039833e-01 4.915374678552e-01 1.573883856147e+00 1.322406836100e+00 2.134640739954e-06 1.000000000000e-06 +5.000000000000e-03 5.000000000000e-03 6.275457230969e-01 7.071067811865e-03 6.275855595671e-01 4.610812557326e-01 4.923280418537e-01 1.601652753390e+00 1.334021802833e+00 2.168815122209e-06 1.000000000000e-06 +5.000000000000e-03 5.000000000000e-03 6.500109440925e-01 7.071067811865e-03 6.500494038456e-01 4.302501891603e-01 4.943475700015e-01 1.723465494459e+00 1.383821397620e+00 2.324229076928e-06 1.000000000000e-06 +5.000000000000e-03 5.000000000000e-03 6.643772194111e-01 7.071067811865e-03 6.644148475707e-01 2.276759261128e-01 4.951060959469e-01 3.261913354652e+00 1.903772090308e+00 5.490259867794e-07 1.250000000000e-07 +5.000000000000e-03 5.000000000000e-03 6.698112084469e-01 7.071067811865e-03 6.698485313570e-01 2.324405914571e-01 4.953005035593e-01 3.196303841259e+00 1.884528777310e+00 5.377718203881e-07 1.250000000000e-07 +5.000000000000e-03 5.000000000000e-03 6.751837580777e-01 7.071067811865e-03 6.752207840195e-01 2.328882534237e-01 4.955214756346e-01 3.191583098438e+00 1.883136596933e+00 5.367381057755e-07 1.250000000000e-07 +5.000000000000e-03 5.000000000000e-03 6.805513816802e-01 7.071067811865e-03 6.805881156080e-01 2.328672075151e-01 4.955295458527e-01 3.191923528911e+00 1.883237026715e+00 5.367866147144e-07 1.250000000000e-07 +5.000000000000e-03 5.000000000000e-03 6.859223783660e-01 7.071067811865e-03 6.859588246704e-01 2.325959077238e-01 4.952268658616e-01 3.193694618542e+00 1.883759426296e+00 5.374127224474e-07 1.250000000000e-07 +5.000000000000e-03 5.000000000000e-03 6.913010162713e-01 7.071067811865e-03 6.913371790218e-01 2.322061113466e-01 4.948252013883e-01 3.196461099917e+00 1.884575136298e+00 5.383148586189e-07 1.250000000000e-07 +5.000000000000e-03 5.000000000000e-03 6.966890398337e-01 7.071067811865e-03 6.967249229247e-01 2.317863002712e-01 4.943644111868e-01 3.199268532750e+00 1.885402560242e+00 5.392898538599e-07 1.250000000000e-07 +5.000000000000e-03 5.000000000000e-03 7.020868409677e-01 7.071067811865e-03 7.021224481955e-01 2.313656388775e-01 4.938623682092e-01 3.201830470194e+00 1.886157313515e+00 5.402703729320e-07 1.250000000000e-07 +5.000000000000e-03 5.000000000000e-03 7.074945210435e-01 7.071067811865e-03 7.075298561238e-01 2.309402080032e-01 4.934209681367e-01 3.204861806458e+00 1.887049962966e+00 5.412656422231e-07 1.250000000000e-07 +5.000000000000e-03 5.000000000000e-03 7.129119834291e-01 7.071067811865e-03 7.129470500092e-01 2.305308257622e-01 4.929598446027e-01 3.207552675262e+00 1.887841999998e+00 5.422268349002e-07 1.250000000000e-07 +5.000000000000e-03 5.000000000000e-03 7.183388838141e-01 7.071067811865e-03 7.183736854864e-01 2.301376302507e-01 4.924262978695e-01 3.209555282200e+00 1.888431236709e+00 5.431532421004e-07 1.250000000000e-07 +5.000000000000e-03 5.000000000000e-03 7.237737951077e-01 7.071067811865e-03 7.238083354622e-01 2.298516559032e-01 4.920579092733e-01 3.211144427086e+00 1.888898687680e+00 5.438290166274e-07 1.250000000000e-07 +5.000000000000e-03 5.000000000000e-03 7.292142906582e-01 7.071067811865e-03 7.292485733274e-01 2.296653839721e-01 4.919682353036e-01 3.213163168922e+00 1.889492338911e+00 5.442700934643e-07 1.250000000000e-07 +5.000000000000e-03 5.000000000000e-03 7.346590816319e-01 7.071067811865e-03 7.346931102332e-01 2.294891327849e-01 4.919689849038e-01 3.215635827285e+00 1.890219219293e+00 5.446881012756e-07 1.250000000000e-07 +5.000000000000e-03 5.000000000000e-03 7.401074298535e-01 7.071067811865e-03 7.401412079626e-01 2.293655658503e-01 4.921109888581e-01 3.218296872727e+00 1.891001167144e+00 5.449815430517e-07 1.250000000000e-07 +5.000000000000e-03 5.000000000000e-03 7.455569019139e-01 7.071067811865e-03 7.455904331410e-01 2.293944722277e-01 4.924759988062e-01 3.220278113223e+00 1.891583144477e+00 5.449128690246e-07 1.250000000000e-07 +5.000000000000e-03 5.000000000000e-03 7.510048846144e-01 7.071067811865e-03 7.510381726082e-01 2.294909993414e-01 4.929882358877e-01 3.222271705443e+00 1.892168569376e+00 5.446836710752e-07 1.250000000000e-07 +5.000000000000e-03 5.000000000000e-03 7.564507899160e-01 7.071067811865e-03 7.564838382706e-01 2.295695121169e-01 4.936698723283e-01 3.225623479635e+00 1.893152420827e+00 5.444973892543e-07 1.250000000000e-07 +5.000000000000e-03 5.000000000000e-03 7.618932680368e-01 7.071067811865e-03 7.619260803253e-01 2.297801573226e-01 4.946816446852e-01 3.229271298592e+00 1.894222590051e+00 5.439982349064e-07 1.250000000000e-07 +5.000000000000e-03 5.000000000000e-03 7.673299513262e-01 7.071067811865e-03 7.673625311430e-01 2.300591946325e-01 4.956127002834e-01 3.231425075676e+00 1.894854164918e+00 5.433384229642e-07 1.250000000000e-07 +5.000000000000e-03 5.000000000000e-03 7.727603381664e-01 7.071067811865e-03 7.727926890461e-01 2.303133046444e-01 4.965584158192e-01 3.234019089253e+00 1.895614555656e+00 5.427389450775e-07 1.250000000000e-07 +5.000000000000e-03 5.000000000000e-03 7.781858673352e-01 7.071067811865e-03 7.782179926732e-01 2.304712964725e-01 4.975494334809e-01 3.238252058474e+00 1.896854723680e+00 5.423668886893e-07 1.250000000000e-07 +5.000000000000e-03 5.000000000000e-03 7.836051278101e-01 7.071067811865e-03 7.836370309846e-01 2.308465652396e-01 4.988238152473e-01 3.241268598016e+00 1.897738009671e+00 5.414852062896e-07 1.250000000000e-07 +5.000000000000e-03 5.000000000000e-03 7.890145202768e-01 7.071067811865e-03 7.890462047356e-01 2.313130140507e-01 5.003998708838e-01 3.244952772787e+00 1.898816231465e+00 5.403932870487e-07 1.250000000000e-07 +5.000000000000e-03 5.000000000000e-03 7.944119720809e-01 7.071067811865e-03 7.944434412754e-01 2.318691866131e-01 5.026162699584e-01 3.251507524351e+00 1.900733052842e+00 5.390970737676e-07 1.250000000000e-07 +5.000000000000e-03 5.000000000000e-03 7.997949628113e-01 7.071067811865e-03 7.998262202118e-01 2.325576755827e-01 5.052576231642e-01 3.258918170932e+00 1.902897840118e+00 5.375010723115e-07 1.250000000000e-07 +5.000000000000e-03 5.000000000000e-03 8.051626873478e-01 7.071067811865e-03 8.051937363748e-01 2.331898845589e-01 5.073517727434e-01 3.263553479408e+00 1.904250648595e+00 5.360438349907e-07 1.250000000000e-07 +5.000000000000e-03 5.000000000000e-03 8.105137823199e-01 7.071067811865e-03 8.105446263658e-01 2.340056398988e-01 5.102878595490e-01 3.270997184745e+00 1.906421075309e+00 5.341751594281e-07 1.250000000000e-07 +5.000000000000e-03 5.000000000000e-03 8.158525675538e-01 7.071067811865e-03 8.158832097697e-01 2.342658230424e-01 5.115702431531e-01 3.275575390230e+00 1.907754756610e+00 5.335818873476e-07 1.250000000000e-07 +5.000000000000e-03 5.000000000000e-03 8.211775171573e-01 7.071067811865e-03 8.212079606803e-01 2.352241444485e-01 5.148856579514e-01 3.283372498762e+00 1.910023995999e+00 5.314080333593e-07 1.250000000000e-07 +5.000000000000e-03 5.000000000000e-03 8.264923918928e-01 7.071067811865e-03 8.265226396516e-01 2.351538381498e-01 5.144537150683e-01 3.281598882986e+00 1.909508046879e+00 5.315669137425e-07 1.250000000000e-07 +5.000000000000e-03 5.000000000000e-03 8.317962451070e-01 7.071067811865e-03 8.318263000015e-01 2.362039288993e-01 5.185006630860e-01 3.292709813309e+00 1.912737948396e+00 5.292037290933e-07 1.250000000000e-07 +5.000000000000e-03 5.000000000000e-03 8.371026094421e-01 7.071067811865e-03 8.371324738264e-01 2.349318746206e-01 5.138270866324e-01 3.280698420311e+00 1.909246046745e+00 5.320691379229e-07 1.250000000000e-07 +5.000000000000e-03 5.000000000000e-03 8.425645007956e-01 7.071067811865e-03 8.425941715921e-01 2.230911343154e-01 4.705638135652e-01 3.163934427578e+00 1.874962052232e+00 5.603091327838e-07 1.250000000000e-07 +5.000000000000e-03 5.000000000000e-03 8.487339794929e-01 7.071067811865e-03 8.487634346188e-01 1.855737610586e-01 3.391463073736e-01 2.741332924215e+00 1.745257995641e+00 6.735866066783e-07 1.250000000000e-07 +5.000000000000e-03 5.000000000000e-03 8.563673683186e-01 7.071067811865e-03 8.563965608998e-01 1.465259588737e-01 2.202289256591e-01 2.254504191803e+00 1.582720650512e+00 8.530911584599e-07 1.250000000000e-07 +5.000000000000e-03 5.000000000000e-03 8.653885905033e-01 7.071067811865e-03 8.654174787773e-01 1.314194071865e-01 1.814773534117e-01 2.071353355986e+00 1.517070772533e+00 9.511532784697e-07 1.250000000000e-07 +5.000000000000e-03 5.000000000000e-03 8.750805150626e-01 7.071067811865e-03 8.751090833960e-01 1.266166882951e-01 1.702904903149e-01 2.017393906852e+00 1.497180278187e+00 9.872316333901e-07 1.250000000000e-07 +5.000000000000e-03 5.000000000000e-03 8.850086921507e-01 7.071067811865e-03 8.850369400100e-01 1.251998459668e-01 1.671110652079e-01 2.002131838711e+00 1.491506262776e+00 9.984037842437e-07 1.250000000000e-07 +5.000000000000e-03 5.000000000000e-03 8.950003653887e-01 7.071067811865e-03 8.950282979023e-01 1.250086426798e-01 1.666858730365e-01 2.000092187187e+00 1.490746340740e+00 9.999308633417e-07 1.250000000000e-07 +5.000000000000e-03 5.000000000000e-03 9.050000101169e-01 7.071067811865e-03 9.050276340044e-01 1.250002397124e-01 1.666671993611e-01 2.000002556931e+00 1.490712937911e+00 9.999980823047e-07 1.250000000000e-07 +5.000000000000e-03 5.000000000000e-03 9.150000002713e-01 7.071067811865e-03 9.150273222677e-01 1.250000064281e-01 1.666666809514e-01 2.000000068567e+00 1.490712010553e+00 9.999999485751e-07 1.250000000000e-07 +5.000000000000e-03 5.000000000000e-03 9.250000000073e-01 7.071067811865e-03 9.250270266395e-01 1.250000001723e-01 1.666666670496e-01 2.000000001838e+00 1.490711985685e+00 9.999999986214e-07 1.250000000000e-07 +5.000000000000e-03 5.000000000000e-03 9.350000000002e-01 7.071067811865e-03 9.350267375858e-01 1.250000000046e-01 1.666666666769e-01 2.000000000049e+00 1.490711985018e+00 9.999999999630e-07 1.250000000000e-07 +5.000000000000e-03 5.000000000000e-03 9.450000000000e-01 7.071067811865e-03 9.450264546562e-01 1.250000000001e-01 1.666666666669e-01 2.000000000001e+00 1.490711985000e+00 9.999999999990e-07 1.250000000000e-07 +5.000000000000e-03 5.000000000000e-03 9.550000000000e-01 7.071067811865e-03 9.550261776517e-01 1.250000000000e-01 1.666666666667e-01 2.000000000000e+00 1.490711985000e+00 1.000000000000e-06 1.250000000000e-07 +5.000000000000e-03 5.000000000000e-03 9.650000000000e-01 7.071067811865e-03 9.650259063880e-01 1.250000000000e-01 1.666666666667e-01 2.000000000000e+00 1.490711985000e+00 1.000000000000e-06 1.250000000000e-07 +5.000000000000e-03 5.000000000000e-03 9.750000000000e-01 7.071067811865e-03 9.750256406885e-01 1.250000000000e-01 1.666666666667e-01 2.000000000000e+00 1.490711985000e+00 1.000000000000e-06 1.250000000000e-07 +5.000000000000e-03 5.000000000000e-03 9.850000000000e-01 7.071067811865e-03 9.850253803837e-01 1.250000000000e-01 1.666666666667e-01 2.000000000000e+00 1.490711985000e+00 1.000000000000e-06 1.250000000000e-07 +5.000000000000e-03 5.000000000000e-03 9.950000000000e-01 7.071067811865e-03 9.950251253109e-01 1.250000000000e-01 1.666666666667e-01 2.000000000000e+00 1.490711985000e+00 1.000000000000e-06 1.250000000000e-07 diff --git a/single-node-refactor/regression_tests/test_refactor.py b/single-node-refactor/regression_tests/test_refactor.py new file mode 100644 index 000000000..2d4dcc766 --- /dev/null +++ b/single-node-refactor/regression_tests/test_refactor.py @@ -0,0 +1,102 @@ +#!/usr/bin/python3 + +import os +import os.path +import sys +import math +import glob + +# Builds being tested +builds = ["openmp"] + +# Name(s) of the solver being used +solvers = ["Fierro"] + +# Add names of each test +tests = ["Sedov", "Sod_X", "Sod_Y", "Sod_Z", "Sedov_Erosion"] + +# Extract data from txt file +def extract_state_data(filename): + data = [] + + # Ensure the file exists before proceeding + try: + with open(filename, 'r') as file: + lines = file.readlines() + except FileNotFoundError: + print("The file was not found at the specified location.") + sys.exit(1) + + # Skip the first line to get table headers + lines = lines[1:] + # First, replace '#' with nothing ('') to remove it + cleaned_header = lines[0].replace('#', '') + # Then, split the cleaned string into a list of words + headers = cleaned_header.split() + + # Skip one more line to get data + lines = lines[1:] + # Parse the simulation data + for line in lines: + values = line.rstrip().split('\t') + values = [float(val) for val in values] + data.append(values) + return data, headers + +# Grab paths to executable +executables = [] +for i in range(len(builds)): + for j in range(len(solvers)): + executables.append("../build-SGH-"+builds[i]+"/bin/"+solvers[j]) + if not os.path.exists(executables[i]): + raise ValueError("Executable not found in "+executables[i]+" directory") + +# Get paths to inputs +inputs = [] +for i in range(len(tests)): + inputs.append("standard_inputs/"+tests[i]+".yaml") + +# Grab paths to standard results +standard_results = [] +for i in range(len(tests)): + pattern = "standard_results/"+tests[i]+"/state/mat_pt_state*" + file = glob.glob(pattern) + standard_results.append(file[0]) + +# Run each tests +for i in range(len(executables)): + for j in range(len(tests)): + # Call Fierro with YAML inputs + print("Running "+tests[j]) + os.system(executables[i] + ' ' + inputs[j]) + + # Compare to standard results + pattern = "state/mat_pt_state*" + file = glob.glob(pattern) + file_path = file[-1] + + print(file_path) + print(standard_results[j]) + + result_data, header1 = extract_state_data(file_path) + standard_data, header2 = extract_state_data(standard_results[j]) + + for k in range(len(result_data[0])): + calc = [row[k] for row in result_data] + true = [row[k] for row in standard_data] + + + for l in range(len(calc)): + diff = calc[l] - true[l] + # print(diff) + + if abs(diff) > 1E-11: + print(diff) + raise Exception("Results do not match for "+header1[k]+" for the "+tests[j]+" test!") + + # Remove simulated state dump + os.system('rm -rf state' ) + + print("\n******************************") + print("\nPASSED : "+tests[j]+"\n") + print("******************************\n") \ No newline at end of file diff --git a/single-node-refactor/src/common/io_utils.h b/single-node-refactor/src/common/io_utils.h index 0f94daada..6fc3c8f2c 100644 --- a/single-node-refactor/src/common/io_utils.h +++ b/single-node-refactor/src/common/io_utils.h @@ -935,6 +935,13 @@ class MeshWriter time_value, graphics_times); } + else if (SimulationParamaters.output_options.format == output_options::state) { + write_material_point_state(mesh, + State, + SimulationParamaters, + time_value, + graphics_times); + } else{ std::cout << "**** MESH OUTPUT TYPE NOT SUPPORTED **** " << std::endl; std::cout << "Valid options are: " << std::endl; @@ -954,9 +961,7 @@ class MeshWriter /// \brief Writes an ensight output file /// /// \param Simulation mesh - /// \param Element related state - /// \param Node related state - /// \param Corner related state + /// \param State data /// \param Simulation parameters /// \param current time value /// \param Vector of all graphics output times @@ -1337,9 +1342,7 @@ class MeshWriter /// \brief Writes a vtk output file /// /// \param Simulation mesh - /// \param Element related state - /// \param Node related state - /// \param Corner related state + /// \param State data /// \param Simulation parameters /// \param current time value /// \param Vector of all graphics output times @@ -1354,6 +1357,145 @@ class MeshWriter // Not yet supported throw std::runtime_error("**** VTK OUTPUT TYPE NOT YET SUPPORTED ****"); } + + + ///////////////////////////////////////////////////////////////////////////// + /// + /// \fn write_material_point_state + /// + /// \brief Writes a state output file at each material point + /// + /// \param Simulation mesh + /// \param State data + /// \param Simulation parameters + /// \param current time value + /// \param Vector of all graphics output times + /// + ///////////////////////////////////////////////////////////////////////////// + void write_material_point_state(mesh_t& mesh, + State_t& State, + SimulationParameters_t& SimulationParamaters, + double time_value, + CArray graphics_times) + { + + // WARNING WARNING WARNING: + // This currently assumes the gauss and material point IDs are the same as the element ID + // This will need to be updated for high order methods + + // Update host data + // ---- Update host data ---- + size_t num_mats = State.MaterialPoints.size(); + + for(int mat_id=0; mat_id output_format_map { // { "vtk", output_options::vtk }, // Not yet supported - { "ensight", output_options::ensight } + { "ensight", output_options::ensight }, + { "state", output_options::state } }; static std::map timer_output_level_map From d897968fa06267e05b743f8383edaa76fb0491f5 Mon Sep 17 00:00:00 2001 From: Jacob Moore Date: Fri, 9 Aug 2024 13:54:51 -0500 Subject: [PATCH 113/233] STYLE: Rename io_utils to mesh_io --- .../src/Solvers/SGH_solver/include/sgh_solver.h | 2 +- .../src/common/{io_utils.h => mesh_io.h} | 11 ----------- single-node-refactor/src/common/region_fill.h | 2 +- single-node-refactor/src/driver.h | 2 +- 4 files changed, 3 insertions(+), 14 deletions(-) rename single-node-refactor/src/common/{io_utils.h => mesh_io.h} (99%) diff --git a/single-node-refactor/src/Solvers/SGH_solver/include/sgh_solver.h b/single-node-refactor/src/Solvers/SGH_solver/include/sgh_solver.h index a8dec6470..91c8c56b6 100644 --- a/single-node-refactor/src/Solvers/SGH_solver/include/sgh_solver.h +++ b/single-node-refactor/src/Solvers/SGH_solver/include/sgh_solver.h @@ -43,7 +43,7 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "material.h" #include "mesh.h" #include "state.h" -#include "io_utils.h" +#include "mesh_io.h" #include "dynamic_options.h" diff --git a/single-node-refactor/src/common/io_utils.h b/single-node-refactor/src/common/mesh_io.h similarity index 99% rename from single-node-refactor/src/common/io_utils.h rename to single-node-refactor/src/common/mesh_io.h index 6fc3c8f2c..1792abefe 100644 --- a/single-node-refactor/src/common/io_utils.h +++ b/single-node-refactor/src/common/mesh_io.h @@ -46,17 +46,6 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include - - - -// ============================================================================== -// Functions to get 1D for an i,j,k layout mesh -// ============================================================================== -// inline int get_id(int i, int j, int k, int num_i, int num_j); - -// KOKKOS_INLINE_FUNCTION -// int get_id_device(int i, int j, int k, int num_i, int num_j); - ///////////////////////////////////////////////////////////////////////////// /// /// \fn get_id diff --git a/single-node-refactor/src/common/region_fill.h b/single-node-refactor/src/common/region_fill.h index 3dd96ed8c..da04d9da5 100644 --- a/single-node-refactor/src/common/region_fill.h +++ b/single-node-refactor/src/common/region_fill.h @@ -40,7 +40,7 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "state.h" #include "simulation_parameters.h" #include "region.h" -#include "io_utils.h" +#include "mesh_io.h" #include diff --git a/single-node-refactor/src/driver.h b/single-node-refactor/src/driver.h index b3a38a219..587a551ce 100644 --- a/single-node-refactor/src/driver.h +++ b/single-node-refactor/src/driver.h @@ -32,7 +32,7 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. **********************************************************************************************/ -#include "io_utils.h" +#include "mesh_io.h" #include "parse_yaml.h" #include "solver.h" #include "simulation_parameters.h" From 1a9c3ee12608ffe0f76d2b9c8b1de2c73806adbc Mon Sep 17 00:00:00 2001 From: Jacob Moore Date: Fri, 9 Aug 2024 15:06:42 -0500 Subject: [PATCH 114/233] ENH: Renaming and header cleanup, add string_utils --- .../src/Solvers/SGH_solver/CMakeLists.txt | 2 +- .../Solvers/SGH_solver/include/sgh_solver.h | 1 - .../src/{sgh_solve.cpp => sgh_execute.cpp} | 0 single-node-refactor/src/common/material.h | 1 - single-node-refactor/src/common/mesh_inputs.h | 2 +- single-node-refactor/src/common/region_fill.h | 38 ++--- .../src/common/string_utils.h | 159 ++++++++++++++++++ single-node-refactor/src/driver.h | 2 +- single-node-refactor/src/input/parse_yaml.cpp | 82 +-------- single-node-refactor/src/input/parse_yaml.h | 25 --- single-node-refactor/src/solver.cpp | 13 +- single-node-refactor/src/solver.h | 13 +- 12 files changed, 186 insertions(+), 152 deletions(-) rename single-node-refactor/src/Solvers/SGH_solver/src/{sgh_solve.cpp => sgh_execute.cpp} (100%) create mode 100644 single-node-refactor/src/common/string_utils.h diff --git a/single-node-refactor/src/Solvers/SGH_solver/CMakeLists.txt b/single-node-refactor/src/Solvers/SGH_solver/CMakeLists.txt index 9dc2c4025..4eac2854b 100755 --- a/single-node-refactor/src/Solvers/SGH_solver/CMakeLists.txt +++ b/single-node-refactor/src/Solvers/SGH_solver/CMakeLists.txt @@ -27,7 +27,7 @@ ${CMAKE_CURRENT_SOURCE_DIR}/src/force_sgh.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/position.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/momentum.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/properties.cpp -${CMAKE_CURRENT_SOURCE_DIR}/src/sgh_solve.cpp +${CMAKE_CURRENT_SOURCE_DIR}/src/sgh_execute.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/time_integration.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/sgh_setup.cpp ${CMAKE_CURRENT_SOURCE_DIR}/include/sgh_solver.h diff --git a/single-node-refactor/src/Solvers/SGH_solver/include/sgh_solver.h b/single-node-refactor/src/Solvers/SGH_solver/include/sgh_solver.h index 91c8c56b6..32e59c8d3 100644 --- a/single-node-refactor/src/Solvers/SGH_solver/include/sgh_solver.h +++ b/single-node-refactor/src/Solvers/SGH_solver/include/sgh_solver.h @@ -37,7 +37,6 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "solver.h" #include "geometry_new.h" -#include "matar.h" #include "simulation_parameters.h" #include "boundary_conditions.h" #include "material.h" diff --git a/single-node-refactor/src/Solvers/SGH_solver/src/sgh_solve.cpp b/single-node-refactor/src/Solvers/SGH_solver/src/sgh_execute.cpp similarity index 100% rename from single-node-refactor/src/Solvers/SGH_solver/src/sgh_solve.cpp rename to single-node-refactor/src/Solvers/SGH_solver/src/sgh_execute.cpp diff --git a/single-node-refactor/src/common/material.h b/single-node-refactor/src/common/material.h index 85ec0f9db..c4c628a82 100644 --- a/single-node-refactor/src/common/material.h +++ b/single-node-refactor/src/common/material.h @@ -36,7 +36,6 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #define FIERRO_MATERIAL_H #include - #include "matar.h" diff --git a/single-node-refactor/src/common/mesh_inputs.h b/single-node-refactor/src/common/mesh_inputs.h index 8638a2562..eb1880fbb 100644 --- a/single-node-refactor/src/common/mesh_inputs.h +++ b/single-node-refactor/src/common/mesh_inputs.h @@ -34,9 +34,9 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef FIERRO_MESH_INPUT_OPTIONS_H #define FIERRO_MESH_INPUT_OPTIONS_H + #include #include "matar.h" -#include "parse_yaml.h" namespace mesh_input { diff --git a/single-node-refactor/src/common/region_fill.h b/single-node-refactor/src/common/region_fill.h index da04d9da5..49698482f 100644 --- a/single-node-refactor/src/common/region_fill.h +++ b/single-node-refactor/src/common/region_fill.h @@ -41,26 +41,11 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "simulation_parameters.h" #include "region.h" #include "mesh_io.h" +#include "string_utils.h" #include +#include -// ============================================================================== -// Functions to read voxel mesh -// ============================================================================== -void user_voxel_init(DCArrayKokkos& elem_values, - double& dx, - double& dy, - double& dz, - double& orig_x, - double& orig_y, - double& orig_z, - size_t& voxel_num_i, - size_t& voxel_num_j, - size_t& voxel_num_k, - double scale_x, - double scale_y, - double scale_z, - std::string mesh_file); // ----------------------------------------------------------------------------- // The function to read a voxel vtk file from Dream3d and intialize the mesh @@ -376,6 +361,7 @@ void user_voxel_init(DCArrayKokkos& elem_values, in.close(); } // end routine + ///////////////////////////////////////////////////////////////////////////// /// /// \fn fill_geometric_region @@ -406,7 +392,8 @@ size_t fill_geometric_region(const mesh_t& mesh, const size_t voxel_num_i, const size_t voxel_num_j, const size_t voxel_num_k, - const size_t f_id){ + const size_t f_id) +{ // default is not to fill the element size_t fill_this = 0; @@ -550,7 +537,8 @@ void paint_gauss_den_sie(const Material_t& Materials, const CArrayKokkos& region_fills, const ViewCArrayKokkos elem_coords, const double elem_gid, - const size_t f_id){ + const size_t f_id) +{ // the material id size_t mat_id = region_fills(f_id).material_id; @@ -617,7 +605,8 @@ void paint_node_vel(const CArrayKokkos& region_fills, const double node_gid, const double num_dims, const size_t f_id, - const size_t rk_num_bins){ + const size_t rk_num_bins) +{ // save velocity at all rk_levels for(size_t rk_level=0; rk_level& MaterialPoints_statev, const size_t rk_num_bins, const size_t num_mat_pts, - const size_t mat_id){ + const size_t mat_id) +{ // ------- @@ -861,7 +851,8 @@ void calc_corner_mass(const Material_t& Materials, const DCArrayKokkos& corner_mass, const DCArrayKokkos& MaterialPoints_mass, const DCArrayKokkos& MaterialToMeshMaps_elem, - const size_t num_mat_elems){ + const size_t num_mat_elems) +{ FOR_ALL(mat_elem_lid, 0, num_mat_elems, { @@ -902,7 +893,8 @@ void calc_corner_mass(const Material_t& Materials, void calc_node_mass(const mesh_t& mesh, const DCArrayKokkos& node_coords, const DCArrayKokkos& node_mass, - const DCArrayKokkos& corner_mass){ + const DCArrayKokkos& corner_mass) +{ FOR_ALL(node_gid, 0, mesh.num_nodes, { diff --git a/single-node-refactor/src/common/string_utils.h b/single-node-refactor/src/common/string_utils.h new file mode 100644 index 000000000..b4b230e64 --- /dev/null +++ b/single-node-refactor/src/common/string_utils.h @@ -0,0 +1,159 @@ +/********************************************************************************************** +� 2020. Triad National Security, LLC. All rights reserved. +This program was produced under U.S. Government contract 89233218CNA000001 for Los Alamos +National Laboratory (LANL), which is operated by Triad National Security, LLC for the U.S. +Department of Energy/National Nuclear Security Administration. All rights in the program are +reserved by Triad National Security, LLC, and the U.S. Department of Energy/National Nuclear +Security Administration. The Government is granted for itself and others acting on its behalf a +nonexclusive, paid-up, irrevocable worldwide license in this material to reproduce, prepare +derivative works, distribute copies to the public, perform publicly and display publicly, and +to permit others to do so. +This program is open source under the BSD-3 License. +Redistribution and use in source and binary forms, with or without modification, are permitted +provided that the following conditions are met: +1. Redistributions of source code must retain the above copyright notice, this list of +conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, this list of +conditions and the following disclaimer in the documentation and/or other materials +provided with the distribution. +3. Neither the name of the copyright holder nor the names of its contributors may be used +to endorse or promote products derived from this software without specific prior +written permission. +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +**********************************************************************************************/ +#ifndef STRING_UTILITIES_H +#define STRING_UTILITIES_H + +#include + + + +const std::string WHITESPACE = " "; + +///////////////////////////////////////////////////////////////////////////// +/// +/// \fn split +/// +/// \brief Splits a string by a given delimiter +/// +/// \param Input string +/// \param delimiter +/// +/// \return Vector of split string values +/// +///////////////////////////////////////////////////////////////////////////// +inline std::vector split(std::string s, std::string delimiter) +{ + size_t pos_start = 0, pos_end, delim_len = delimiter.length(); + std::string token; + std::vector res; + + while ((pos_end = s.find(delimiter, pos_start)) != std::string::npos) { + token = s.substr(pos_start, pos_end - pos_start); + pos_start = pos_end + delim_len; + res.push_back(token); + } + + res.push_back(s.substr(pos_start)); + return res; +} // end of split + +///////////////////////////////////////////////////////////////////////////// +/// +/// \fn exact_array_values +/// +/// \brief Extracts array values between [ and ] (generally for yaml parsing) +/// +/// \param Input string +/// \param delimiter +/// +/// \return Vector of split string values +/// +///////////////////////////////////////////////////////////////////////////// +inline std::vector exact_array_values(std::string s, std::string delimiter) +{ + size_t pos_start = 0, pos_end, delim_len = delimiter.length(); + std::string token; + std::vector res; + + // remove first and last char in the string, which are [ and ] + s.erase(s.begin()); + s.erase(s.end() - 1); + + // now parse the values in the array into a vector + while ((pos_end = s.find(delimiter, pos_start)) != std::string::npos) { + token = s.substr(pos_start, pos_end - pos_start); + pos_start = pos_end + delim_len; + res.push_back(token); + } + + res.push_back(s.substr(pos_start)); + return res; +} // end of extract_array_values + + +///////////////////////////////////////////////////////////////////////////// +/// +/// \fn exact_array_values +/// +/// \brief Extracts array values between [ and ] (generally for yaml parsing) +/// +/// \param Input string +/// \param delimiter +/// +/// \return Vector of split double values +/// +///////////////////////////////////////////////////////////////////////////// +inline std::vector extract_list(std::string str) +{ + // replace '[' with a space and ']' with a space + std::replace(str.begin(), str.end(), '[', ' '); + std::replace(str.begin(), str.end(), ']', ' '); + + std::vector str_values; + std::vector values; + + // exact the str values into a vector + str_values = split(str, ","); + + // convert the text values into double values + for (auto& word : str_values) + { + values.push_back(atof(word.c_str()) ); + } // end for + + return values; +} // end of extract_list + + + +inline std::string ltrim(const std::string& s) +{ + size_t start = s.find_first_not_of(WHITESPACE); + return (start == std::string::npos) ? "" : s.substr(start); +} + + +inline std::string rtrim(const std::string& s) +{ + size_t end = s.find_last_not_of(WHITESPACE); + return (end == std::string::npos) ? "" : s.substr(0, end + 1); +} + +inline std::string trim(const std::string& s) +{ + return rtrim(ltrim(s)); +} + + +#endif \ No newline at end of file diff --git a/single-node-refactor/src/driver.h b/single-node-refactor/src/driver.h index 587a551ce..2229e2631 100644 --- a/single-node-refactor/src/driver.h +++ b/single-node-refactor/src/driver.h @@ -37,7 +37,7 @@ #include "solver.h" #include "simulation_parameters.h" -// Headers for solver classes +// Headers for SGH solver classes #include "sgh_solver.h" // Physical state data diff --git a/single-node-refactor/src/input/parse_yaml.cpp b/single-node-refactor/src/input/parse_yaml.cpp index fb57cb857..c4736d64f 100644 --- a/single-node-refactor/src/input/parse_yaml.cpp +++ b/single-node-refactor/src/input/parse_yaml.cpp @@ -43,6 +43,8 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include #include +#include "string_utils.h" + #include "matar.h" #include "parse_yaml.h" #include "simulation_parameters.h" @@ -83,86 +85,6 @@ bool VERBOSE = false; // ============================================================================== // Function Definitions // ============================================================================== -// modified code from stack over./flow for string delimiter parsing -std::vector exact_array_values(std::string s, std::string delimiter) -{ - size_t pos_start = 0, pos_end, delim_len = delimiter.length(); - std::string token; - std::vector res; - - // remove first and last char in the string, which are [ and ] - s.erase(s.begin()); - s.erase(s.end() - 1); - - // now parse the values in the array into a vector - while ((pos_end = s.find(delimiter, pos_start)) != std::string::npos) { - token = s.substr(pos_start, pos_end - pos_start); - pos_start = pos_end + delim_len; - res.push_back(token); - } - - res.push_back(s.substr(pos_start)); - return res; -} // end of extract_array_values - -// Code from stackover flow for string delimiter parsing -std::vector split(std::string s, std::string delimiter) -{ - size_t pos_start = 0, pos_end, delim_len = delimiter.length(); - std::string token; - std::vector res; - - while ((pos_end = s.find(delimiter, pos_start)) != std::string::npos) { - token = s.substr(pos_start, pos_end - pos_start); - pos_start = pos_end + delim_len; - res.push_back(token); - } - - res.push_back(s.substr(pos_start)); - return res; -} // end of split - - -// retrieves multiple values between [ ] -std::vector extract_list(std::string str) -{ - // replace '[' with a space and ']' with a space - std::replace(str.begin(), str.end(), '[', ' '); - std::replace(str.begin(), str.end(), ']', ' '); - - std::vector str_values; - std::vector values; - - // exact the str values into a vector - str_values = split(str, ","); - - // convert the text values into double values - for (auto& word : str_values) - { - values.push_back(atof(word.c_str()) ); - } // end for - - return values; -} // end of extract_list - - -std::string ltrim(const std::string& s) -{ - size_t start = s.find_first_not_of(WHITESPACE); - return (start == std::string::npos) ? "" : s.substr(start); -} - - -std::string rtrim(const std::string& s) -{ - size_t end = s.find_last_not_of(WHITESPACE); - return (end == std::string::npos) ? "" : s.substr(0, end + 1); -} - -std::string trim(const std::string& s) -{ - return rtrim(ltrim(s)); -} // ================================================================================= // Print a yaml file to 6 levels diff --git a/single-node-refactor/src/input/parse_yaml.h b/single-node-refactor/src/input/parse_yaml.h index 2121e7f72..2e65d8b9d 100644 --- a/single-node-refactor/src/input/parse_yaml.h +++ b/single-node-refactor/src/input/parse_yaml.h @@ -74,31 +74,6 @@ static bool DoesPathExist(const std::string& s) return (stat(s.c_str(), &buffer) == 0); } -// ============================================================================== -// Functions to parse strings -// ============================================================================== -// for string delimiter parsing -std::vector split(std::string s, std::string delimiter); - -// retrieves multiple values between [ ] -std::vector extract_list(std::string str); - -const std::string WHITESPACE = " "; - -std::string ltrim(const std::string& s); - -std::string rtrim(const std::string& s); - -std::string trim(const std::string& s); - - - -// for string delimiter parsing -std::vector exact_array_values(std::string s, std::string delimiter); - -// retrieves multiple values between [ ] -std::vector extract_list(std::string str); - // prints the contents of a parsed yaml file void print_yaml(Yaml::Node root); diff --git a/single-node-refactor/src/solver.cpp b/single-node-refactor/src/solver.cpp index ba8574afc..d028970e5 100644 --- a/single-node-refactor/src/solver.cpp +++ b/single-node-refactor/src/solver.cpp @@ -32,20 +32,9 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. **********************************************************************************************/ -#include -#include -#include -#include -#include -#include -#include -#include // fmin, fmax, abs note: fminl is long -#include -#include - #include "matar.h" #include "solver.h" -#include "simulation_parameters.h" + // debug and performance includes #include #include diff --git a/single-node-refactor/src/solver.h b/single-node-refactor/src/solver.h index 6ebbcf0a0..1fc3d7e0f 100644 --- a/single-node-refactor/src/solver.h +++ b/single-node-refactor/src/solver.h @@ -38,15 +38,14 @@ #include #include -#include "mesh.h" -#include "state.h" -#include "material.h" -#include "region.h" -#include "boundary_conditions.h" -#include "dynamic_options.h" - +#include "matar.h" struct SimulationParameters_t; +struct Material_t; +struct mesh_t; +struct State_t; +struct BoundaryCondition_t; + class Solver { From 8eaf4d1785122901b5b8e3abc3afc38adda208b7 Mon Sep 17 00:00:00 2001 From: Nathaniel Morgan <47866137+nathanielmorgan@users.noreply.github.com> Date: Fri, 9 Aug 2024 14:57:04 -0600 Subject: [PATCH 115/233] Update state.h Updated comments to better describe the material to material maps --- single-node-refactor/src/common/state.h | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/single-node-refactor/src/common/state.h b/single-node-refactor/src/common/state.h index bdce7f43a..c737d401a 100644 --- a/single-node-refactor/src/common/state.h +++ b/single-node-refactor/src/common/state.h @@ -405,6 +405,11 @@ struct State_t // material to mesh maps // --------------------------------------------------------------------- CArray MaterialToMeshMaps; ///< access as MaterialToMeshMaps(mat_id).elem(mat_storage_lid) + + + // --------------------------------------------------------------------- + // materialto material maps + // --------------------------------------------------------------------- corners_in_mat_t corners_in_mat_elem; ///< access the corner mat lid using (mat_elem_lid, corn_lid) points_in_mat_t points_in_mat_elem; ///< for accessing e.g., guass points mat lid with arbitrary-order FE zones_in_mat_t zones_in_mat_elem; ///< for accessing sub-zones mat lid with arbitrary-order FE From 87c0510c99229ffe4860fa52c4da00c1073b5d90 Mon Sep 17 00:00:00 2001 From: Jacob Moore Date: Fri, 9 Aug 2024 16:09:47 -0500 Subject: [PATCH 116/233] ENH: Cleaning up header dependency --- .../Solvers/SGH_solver/include/sgh_solver.h | 28 +++++++++++++------ .../src/Solvers/SGH_solver/src/boundary.cpp | 3 ++ .../src/Solvers/SGH_solver/src/energy_sgh.cpp | 2 ++ .../src/Solvers/SGH_solver/src/force_sgh.cpp | 6 +++- .../src/Solvers/SGH_solver/src/momentum.cpp | 2 ++ .../src/Solvers/SGH_solver/src/properties.cpp | 3 ++ .../Solvers/SGH_solver/src/sgh_execute.cpp | 8 ++++++ .../src/Solvers/SGH_solver/src/sgh_setup.cpp | 6 ++-- .../SGH_solver/src/time_integration.cpp | 2 ++ single-node-refactor/src/common/state.h | 2 +- single-node-refactor/src/driver.h | 2 ++ 11 files changed, 52 insertions(+), 12 deletions(-) diff --git a/single-node-refactor/src/Solvers/SGH_solver/include/sgh_solver.h b/single-node-refactor/src/Solvers/SGH_solver/include/sgh_solver.h index 32e59c8d3..09c41c8cc 100644 --- a/single-node-refactor/src/Solvers/SGH_solver/include/sgh_solver.h +++ b/single-node-refactor/src/Solvers/SGH_solver/include/sgh_solver.h @@ -36,14 +36,26 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #define SGH_SOLVER_H #include "solver.h" -#include "geometry_new.h" -#include "simulation_parameters.h" -#include "boundary_conditions.h" -#include "material.h" -#include "mesh.h" -#include "state.h" -#include "mesh_io.h" -#include "dynamic_options.h" +// #include "geometry_new.h" +// #include "simulation_parameters.h" +// #include "boundary_conditions.h" +// #include "material.h" +// #include "mesh.h" +// #include "state.h" +// #include "mesh_io.h" +// #include "dynamic_options.h" + + +// Forward declare structs +struct SimulationParameters_t; +struct Material_t; +struct mesh_t; +struct BoundaryCondition_t; +struct State_t; +struct reg_fill_t; +struct reg_fill_host_t; +struct corners_in_mat_t; + using namespace mtr; // matar namespace diff --git a/single-node-refactor/src/Solvers/SGH_solver/src/boundary.cpp b/single-node-refactor/src/Solvers/SGH_solver/src/boundary.cpp index 4253b4a1f..9343136a3 100644 --- a/single-node-refactor/src/Solvers/SGH_solver/src/boundary.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver/src/boundary.cpp @@ -33,6 +33,9 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. **********************************************************************************************/ #include "sgh_solver.h" +#include "mesh.h" +#include "boundary_conditions.h" + ///////////////////////////////////////////////////////////////////////////// /// diff --git a/single-node-refactor/src/Solvers/SGH_solver/src/energy_sgh.cpp b/single-node-refactor/src/Solvers/SGH_solver/src/energy_sgh.cpp index 0063e366f..626977b32 100644 --- a/single-node-refactor/src/Solvers/SGH_solver/src/energy_sgh.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver/src/energy_sgh.cpp @@ -33,6 +33,8 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. **********************************************************************************************/ #include "sgh_solver.h" +#include "mesh.h" +#include "state.h" ///////////////////////////////////////////////////////////////////////////// /// diff --git a/single-node-refactor/src/Solvers/SGH_solver/src/force_sgh.cpp b/single-node-refactor/src/Solvers/SGH_solver/src/force_sgh.cpp index dac1858f0..8e646ef04 100644 --- a/single-node-refactor/src/Solvers/SGH_solver/src/force_sgh.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver/src/force_sgh.cpp @@ -33,6 +33,10 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. **********************************************************************************************/ #include "sgh_solver.h" +#include "material.h" +#include "mesh.h" +#include "state.h" +#include "geometry_new.h" ///////////////////////////////////////////////////////////////////////////// /// @@ -492,7 +496,7 @@ void SGH::get_force_2D(const Material_t& Materials, // --- calculate the forces acting on the nodes from the element --- - FOR_ALL(mat_elem_lid, 0, num_mat_elems, { + FOR_ALL(mat_elem_lid, 0, num_mat_elems, { // get mesh elem gid size_t elem_gid = MaterialToMeshMaps_elem(mat_elem_lid); diff --git a/single-node-refactor/src/Solvers/SGH_solver/src/momentum.cpp b/single-node-refactor/src/Solvers/SGH_solver/src/momentum.cpp index 86f2b6800..51b0a53a5 100644 --- a/single-node-refactor/src/Solvers/SGH_solver/src/momentum.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver/src/momentum.cpp @@ -33,6 +33,8 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. **********************************************************************************************/ #include "sgh_solver.h" +#include "mesh.h" +#include "geometry_new.h" ///////////////////////////////////////////////////////////////////////////// /// diff --git a/single-node-refactor/src/Solvers/SGH_solver/src/properties.cpp b/single-node-refactor/src/Solvers/SGH_solver/src/properties.cpp index 1724ec12c..9434f0741 100644 --- a/single-node-refactor/src/Solvers/SGH_solver/src/properties.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver/src/properties.cpp @@ -33,6 +33,9 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. **********************************************************************************************/ #include "sgh_solver.h" +#include "material.h" +#include "mesh.h" +#include "geometry_new.h" ///////////////////////////////////////////////////////////////////////////// /// diff --git a/single-node-refactor/src/Solvers/SGH_solver/src/sgh_execute.cpp b/single-node-refactor/src/Solvers/SGH_solver/src/sgh_execute.cpp index 6d4c762e5..3913ec9ca 100644 --- a/single-node-refactor/src/Solvers/SGH_solver/src/sgh_execute.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver/src/sgh_execute.cpp @@ -34,6 +34,14 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "sgh_solver.h" +#include "simulation_parameters.h" +#include "material.h" +#include "boundary_conditions.h" +#include "mesh.h" +#include "state.h" +#include "geometry_new.h" +#include "mesh_io.h" + ///////////////////////////////////////////////////////////////////////////// /// /// \fn solve diff --git a/single-node-refactor/src/Solvers/SGH_solver/src/sgh_setup.cpp b/single-node-refactor/src/Solvers/SGH_solver/src/sgh_setup.cpp index 643b64e4f..2c25fd5e2 100644 --- a/single-node-refactor/src/Solvers/SGH_solver/src/sgh_setup.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver/src/sgh_setup.cpp @@ -33,9 +33,11 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. **********************************************************************************************/ #include "sgh_solver.h" +#include "mesh.h" #include "region_fill.h" - - +#include "material.h" +#include "boundary_conditions.h" +#include "state.h" ///////////////////////////////////////////////////////////////////////////// /// diff --git a/single-node-refactor/src/Solvers/SGH_solver/src/time_integration.cpp b/single-node-refactor/src/Solvers/SGH_solver/src/time_integration.cpp index 4714a9eb7..5b963c3a2 100644 --- a/single-node-refactor/src/Solvers/SGH_solver/src/time_integration.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver/src/time_integration.cpp @@ -33,6 +33,8 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. **********************************************************************************************/ #include "sgh_solver.h" +#include "mesh.h" + ///////////////////////////////////////////////////////////////////////////// /// diff --git a/single-node-refactor/src/common/state.h b/single-node-refactor/src/common/state.h index bdce7f43a..2d6babc37 100644 --- a/single-node-refactor/src/common/state.h +++ b/single-node-refactor/src/common/state.h @@ -418,4 +418,4 @@ struct State_t }; // end state_t -#endif +#endif \ No newline at end of file diff --git a/single-node-refactor/src/driver.h b/single-node-refactor/src/driver.h index 2229e2631..0b24a6b72 100644 --- a/single-node-refactor/src/driver.h +++ b/single-node-refactor/src/driver.h @@ -37,6 +37,8 @@ #include "solver.h" #include "simulation_parameters.h" +#include "geometry_new.h" + // Headers for SGH solver classes #include "sgh_solver.h" From 10f2f1a99a4cda985b7717e15d8d7cf384ab49b9 Mon Sep 17 00:00:00 2001 From: Jacob Moore Date: Fri, 9 Aug 2024 16:15:40 -0500 Subject: [PATCH 117/233] ENH: Standardize struct naming --- .../Solvers/SGH_solver/include/sgh_solver.h | 61 ++++++++----------- .../src/Solvers/SGH_solver/src/boundary.cpp | 4 +- .../src/Solvers/SGH_solver/src/energy_sgh.cpp | 2 +- .../src/Solvers/SGH_solver/src/force_sgh.cpp | 4 +- .../src/Solvers/SGH_solver/src/momentum.cpp | 6 +- .../src/Solvers/SGH_solver/src/properties.cpp | 4 +- .../Solvers/SGH_solver/src/sgh_execute.cpp | 10 +-- .../src/Solvers/SGH_solver/src/sgh_setup.cpp | 10 +-- .../SGH_solver/src/time_integration.cpp | 4 +- .../velocity/constant_velocity_bc.h | 2 +- .../velocity/no_velocity_bc.h | 2 +- .../velocity/piston_velocity_bc.h | 2 +- .../velocity/reflected_velocity_bc.h | 2 +- .../velocity/time_varying_velocity_bc.h | 2 +- .../velocity/user_defined_velocity_bc.h | 2 +- .../velocity/zero_velocity_bc.h | 2 +- .../src/common/boundary_conditions.h | 2 +- .../src/common/geometry_new.h | 6 +- single-node-refactor/src/common/mesh.h | 8 +-- single-node-refactor/src/common/mesh_io.h | 22 +++---- single-node-refactor/src/common/mesh_old.h | 12 ++-- single-node-refactor/src/common/region.h | 8 +-- single-node-refactor/src/common/region_fill.h | 16 ++--- .../src/common/simulation_parameters.h | 4 +- single-node-refactor/src/driver.h | 2 +- single-node-refactor/src/input/parse_yaml.cpp | 8 +-- single-node-refactor/src/input/parse_yaml.h | 8 +-- single-node-refactor/src/solver.h | 8 +-- 28 files changed, 107 insertions(+), 116 deletions(-) diff --git a/single-node-refactor/src/Solvers/SGH_solver/include/sgh_solver.h b/single-node-refactor/src/Solvers/SGH_solver/include/sgh_solver.h index 09c41c8cc..94f21671c 100644 --- a/single-node-refactor/src/Solvers/SGH_solver/include/sgh_solver.h +++ b/single-node-refactor/src/Solvers/SGH_solver/include/sgh_solver.h @@ -36,24 +36,15 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #define SGH_SOLVER_H #include "solver.h" -// #include "geometry_new.h" -// #include "simulation_parameters.h" -// #include "boundary_conditions.h" -// #include "material.h" -// #include "mesh.h" -// #include "state.h" -// #include "mesh_io.h" -// #include "dynamic_options.h" - // Forward declare structs struct SimulationParameters_t; struct Material_t; -struct mesh_t; +struct Mesh_t; struct BoundaryCondition_t; struct State_t; -struct reg_fill_t; -struct reg_fill_host_t; +struct RegionFill_t; +struct RegionFill_host_t; struct corners_in_mat_t; @@ -84,7 +75,7 @@ class SGH : public Solver // Initialize data specific to the SGH solver void initialize(SimulationParameters_t& SimulationParamaters, Material_t& Materials, - mesh_t& mesh, + Mesh_t& mesh, BoundaryCondition_t& Boundary, State_t& State) const override { @@ -100,7 +91,7 @@ class SGH : public Solver ///////////////////////////////////////////////////////////////////////////// void setup(SimulationParameters_t& SimulationParamaters, Material_t& Materials, - mesh_t& mesh, + Mesh_t& mesh, BoundaryCondition_t& Boundary, State_t& State) override; @@ -115,7 +106,7 @@ class SGH : public Solver void execute(SimulationParameters_t& SimulationParamaters, Material_t& Materials, BoundaryCondition_t& Boundary, - mesh_t& mesh, + Mesh_t& mesh, State_t& State) override; ///////////////////////////////////////////////////////////////////////////// @@ -144,34 +135,34 @@ class SGH : public Solver // **** Functions defined in sgh_setup.cpp **** // void fill_regions_sgh( const Material_t& Materials, - const mesh_t& mesh, + const Mesh_t& mesh, const DCArrayKokkos & node_coords, DCArrayKokkos & node_vel, DCArrayKokkos & GaussPoint_den, DCArrayKokkos & GaussPoint_sie, DCArrayKokkos & elem_mat_id, DCArrayKokkos & voxel_elem_mat_id, - const CArrayKokkos & region_fills, - const CArray & region_fills_host, + const CArrayKokkos & region_fills, + const CArray & region_fills_host, const size_t num_fills, const size_t num_elems, const size_t num_nodes, const size_t rk_num_bins) const; void init_corner_node_masses_zero( - const mesh_t& mesh, + const Mesh_t& mesh, const DCArrayKokkos& node_mass, const DCArrayKokkos& corner_mass) const; // **** Functions defined in boundary.cpp **** // void boundary_velocity( - const mesh_t& mesh, + const Mesh_t& mesh, const BoundaryCondition_t& Boundary, DCArrayKokkos& node_vel, const double time_value) const; void boundary_contact( - const mesh_t& mesh, + const Mesh_t& mesh, const BoundaryCondition_t& Boundary, DCArrayKokkos& node_vel, const double time_value) const; @@ -180,7 +171,7 @@ class SGH : public Solver void update_energy( const double rk_alpha, const double dt, - const mesh_t& mesh, + const Mesh_t& mesh, const DCArrayKokkos& node_vel, const DCArrayKokkos& node_coords, const DCArrayKokkos& MaterialPoints_sie, @@ -193,7 +184,7 @@ class SGH : public Solver // **** Functions defined in force_sgh.cpp **** // void get_force( const Material_t& Materials, - const mesh_t& mesh, + const Mesh_t& mesh, const DCArrayKokkos& GaussPoints_vol, const DCArrayKokkos& GaussPoints_div, const DCArrayKokkos& GaussPoints_eroded, @@ -218,7 +209,7 @@ class SGH : public Solver void get_force_2D( const Material_t& Materials, - const mesh_t& mesh, + const Mesh_t& mesh, const DCArrayKokkos& GaussPoints_vol, const DCArrayKokkos& GaussPoints_div, const DCArrayKokkos& corner_force, @@ -253,7 +244,7 @@ class SGH : public Solver void update_velocity( double rk_alpha, double dt, - const mesh_t& mesh, + const Mesh_t& mesh, DCArrayKokkos& node_vel, const DCArrayKokkos& node_mass, const DCArrayKokkos& corner_force) const; @@ -279,14 +270,14 @@ class SGH : public Solver void get_divergence( DCArrayKokkos& GaussPoints_div, - const mesh_t mesh, + const Mesh_t mesh, const DCArrayKokkos& node_coords, const DCArrayKokkos& node_vel, const DCArrayKokkos& GaussPoints_vol) const; void get_divergence2D( DCArrayKokkos& GaussPoints_div, - const mesh_t mesh, + const Mesh_t mesh, const DCArrayKokkos& node_coords, const DCArrayKokkos& node_vel, const DCArrayKokkos& GaussPoints_vol) const; @@ -300,7 +291,7 @@ class SGH : public Solver // **** Functions defined in properties.cpp **** // void update_state( const Material_t& Materials, - const mesh_t& mesh, + const Mesh_t& mesh, const DCArrayKokkos& node_coords, const DCArrayKokkos& node_vel, const DCArrayKokkos& MaterialPoints_den, @@ -320,7 +311,7 @@ class SGH : public Solver void update_state2D( const Material_t& Materials, - const mesh_t& mesh, + const Mesh_t& mesh, const DCArrayKokkos& node_coords, const DCArrayKokkos& node_vel, const DCArrayKokkos& MaterialPoints_den, @@ -351,7 +342,7 @@ class SGH : public Solver const size_t num_mat_points) const; void get_timestep( - mesh_t& mesh, + Mesh_t& mesh, DCArrayKokkos& node_coords, DCArrayKokkos& node_vel, DCArrayKokkos& GaussPoints_vol, @@ -369,7 +360,7 @@ class SGH : public Solver const double fuzz) const; void get_timestep2D( - mesh_t& mesh, + Mesh_t& mesh, DCArrayKokkos& node_coords, DCArrayKokkos& node_vel, DCArrayKokkos& GaussPoints_vol, @@ -424,7 +415,7 @@ void calc_extensive_node_mass(const CArrayKokkos& node_extensive_mass, const double num_dims, const double num_nodes); -void calc_node_areal_mass(const mesh_t& mesh, +void calc_node_areal_mass(const Mesh_t& mesh, const DCArrayKokkos& node_coords, const DCArrayKokkos& node_mass, CArrayKokkos node_extensive_mass, @@ -434,7 +425,7 @@ double sum_domain_internal_energy(const DCArrayKokkos& MaterialPoints_ma const DCArrayKokkos& MaterialPoints_sie, const size_t num_mat_points); -double sum_domain_kinetic_energy(const mesh_t& mesh, +double sum_domain_kinetic_energy(const Mesh_t& mesh, const DCArrayKokkos& node_vel, const DCArrayKokkos& node_coords, const DCArrayKokkos& node_mass); @@ -442,11 +433,11 @@ double sum_domain_kinetic_energy(const mesh_t& mesh, double sum_domain_material_mass(const DCArrayKokkos& MaterialPoints_mass, const size_t num_mat_points); -double sum_domain_node_mass(const mesh_t& mesh, +double sum_domain_node_mass(const Mesh_t& mesh, const DCArrayKokkos& node_coords, const DCArrayKokkos& node_mass); -void set_corner_force_zero(const mesh_t& mesh, +void set_corner_force_zero(const Mesh_t& mesh, const DCArrayKokkos& corner_force); #endif // end HEADER_H diff --git a/single-node-refactor/src/Solvers/SGH_solver/src/boundary.cpp b/single-node-refactor/src/Solvers/SGH_solver/src/boundary.cpp index 9343136a3..f77f2d0b4 100644 --- a/single-node-refactor/src/Solvers/SGH_solver/src/boundary.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver/src/boundary.cpp @@ -49,7 +49,7 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /// \param The current simulation time /// ///////////////////////////////////////////////////////////////////////////// -void SGH::boundary_velocity(const mesh_t& mesh, +void SGH::boundary_velocity(const Mesh_t& mesh, const BoundaryCondition_t& BoundaryConditions, DCArrayKokkos& node_vel, const double time_value) const @@ -95,7 +95,7 @@ void SGH::boundary_velocity(const mesh_t& mesh, /// \param The current simulation time /// ///////////////////////////////////////////////////////////////////////////// -void SGH::boundary_contact(const mesh_t& mesh, +void SGH::boundary_contact(const Mesh_t& mesh, const BoundaryCondition_t& BoundaryConditions, DCArrayKokkos& node_vel, const double time_value) const diff --git a/single-node-refactor/src/Solvers/SGH_solver/src/energy_sgh.cpp b/single-node-refactor/src/Solvers/SGH_solver/src/energy_sgh.cpp index 626977b32..ee9d99901 100644 --- a/single-node-refactor/src/Solvers/SGH_solver/src/energy_sgh.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver/src/energy_sgh.cpp @@ -54,7 +54,7 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ///////////////////////////////////////////////////////////////////////////// void SGH::update_energy(const double rk_alpha, const double dt, - const mesh_t& mesh, + const Mesh_t& mesh, const DCArrayKokkos& node_vel, const DCArrayKokkos& node_coords, const DCArrayKokkos& MaterialPoints_sie, diff --git a/single-node-refactor/src/Solvers/SGH_solver/src/force_sgh.cpp b/single-node-refactor/src/Solvers/SGH_solver/src/force_sgh.cpp index 8e646ef04..79dfb50b8 100644 --- a/single-node-refactor/src/Solvers/SGH_solver/src/force_sgh.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver/src/force_sgh.cpp @@ -64,7 +64,7 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /// ///////////////////////////////////////////////////////////////////////////// void SGH::get_force(const Material_t& Materials, - const mesh_t& mesh, + const Mesh_t& mesh, const DCArrayKokkos& GaussPoints_vol, const DCArrayKokkos& GaussPoints_div, const DCArrayKokkos& MaterialPoints_eroded, @@ -462,7 +462,7 @@ void SGH::get_force(const Material_t& Materials, /// ///////////////////////////////////////////////////////////////////////////// void SGH::get_force_2D(const Material_t& Materials, - const mesh_t& mesh, + const Mesh_t& mesh, const DCArrayKokkos& GaussPoints_vol, const DCArrayKokkos& GaussPoints_div, const DCArrayKokkos& corner_force, diff --git a/single-node-refactor/src/Solvers/SGH_solver/src/momentum.cpp b/single-node-refactor/src/Solvers/SGH_solver/src/momentum.cpp index 51b0a53a5..e5acc4501 100644 --- a/single-node-refactor/src/Solvers/SGH_solver/src/momentum.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver/src/momentum.cpp @@ -51,7 +51,7 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ///////////////////////////////////////////////////////////////////////////// void SGH::update_velocity(double rk_alpha, double dt, - const mesh_t& mesh, + const Mesh_t& mesh, DCArrayKokkos& node_vel, const DCArrayKokkos& node_mass, const DCArrayKokkos& corner_force) const @@ -266,7 +266,7 @@ void SGH::get_velgrad2D(ViewCArrayKokkos& vel_grad, /// ///////////////////////////////////////////////////////////////////////////// void SGH::get_divergence(DCArrayKokkos& elem_div, - const mesh_t mesh, + const Mesh_t mesh, const DCArrayKokkos& node_coords, const DCArrayKokkos& node_vel, const DCArrayKokkos& elem_vol) const @@ -342,7 +342,7 @@ void SGH::get_divergence(DCArrayKokkos& elem_div, /// ///////////////////////////////////////////////////////////////////////////// void SGH::get_divergence2D(DCArrayKokkos& elem_div, - const mesh_t mesh, + const Mesh_t mesh, const DCArrayKokkos& node_coords, const DCArrayKokkos& node_vel, const DCArrayKokkos& elem_vol) const diff --git a/single-node-refactor/src/Solvers/SGH_solver/src/properties.cpp b/single-node-refactor/src/Solvers/SGH_solver/src/properties.cpp index 9434f0741..5220cdd4e 100644 --- a/single-node-refactor/src/Solvers/SGH_solver/src/properties.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver/src/properties.cpp @@ -62,7 +62,7 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ///////////////////////////////////////////////////////////////////////////// void SGH::update_state( const Material_t& Materials, - const mesh_t& mesh, + const Mesh_t& mesh, const DCArrayKokkos& node_coords, const DCArrayKokkos& node_vel, const DCArrayKokkos& MaterialPoints_den, @@ -310,7 +310,7 @@ void SGH::update_state( ///////////////////////////////////////////////////////////////////////////// void SGH::update_state2D( const Material_t& Materials, - const mesh_t& mesh, + const Mesh_t& mesh, const DCArrayKokkos& node_coords, const DCArrayKokkos& node_vel, const DCArrayKokkos& MaterialPoints_den, diff --git a/single-node-refactor/src/Solvers/SGH_solver/src/sgh_execute.cpp b/single-node-refactor/src/Solvers/SGH_solver/src/sgh_execute.cpp index 3913ec9ca..4c30fa3e5 100644 --- a/single-node-refactor/src/Solvers/SGH_solver/src/sgh_execute.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver/src/sgh_execute.cpp @@ -52,7 +52,7 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. void SGH::execute(SimulationParameters_t& SimulationParamaters, Material_t& Materials, BoundaryCondition_t& BoundaryConditions, - mesh_t& mesh, + Mesh_t& mesh, State_t& State) { std::cout << "In execute function in sgh solver" << std::endl; @@ -700,7 +700,7 @@ double sum_domain_internal_energy(const DCArrayKokkos& MaterialPoints_ma return IE_sum; } // end function -double sum_domain_kinetic_energy(const mesh_t& mesh, +double sum_domain_kinetic_energy(const Mesh_t& mesh, const DCArrayKokkos& node_vel, const DCArrayKokkos& node_coords, const DCArrayKokkos& node_mass) @@ -750,7 +750,7 @@ double sum_domain_material_mass(const DCArrayKokkos& MaterialPoints_mass } // end function -double sum_domain_node_mass(const mesh_t& mesh, +double sum_domain_node_mass(const Mesh_t& mesh, const DCArrayKokkos& node_coords, const DCArrayKokkos& node_mass) { @@ -777,7 +777,7 @@ double sum_domain_node_mass(const mesh_t& mesh, // a function to calculate the 2D-RZ areal mass (rho A = m/R) // for R=0, it is interpolated from off-axis -void calc_node_areal_mass(const mesh_t& mesh, +void calc_node_areal_mass(const Mesh_t& mesh, const DCArrayKokkos& node_coords, const DCArrayKokkos& node_mass, CArrayKokkos node_extensive_mass, @@ -817,7 +817,7 @@ void calc_node_areal_mass(const mesh_t& mesh, // set the corner forces to zero -void set_corner_force_zero(const mesh_t& mesh, +void set_corner_force_zero(const Mesh_t& mesh, const DCArrayKokkos& corner_force) { diff --git a/single-node-refactor/src/Solvers/SGH_solver/src/sgh_setup.cpp b/single-node-refactor/src/Solvers/SGH_solver/src/sgh_setup.cpp index 2c25fd5e2..d73da1230 100644 --- a/single-node-refactor/src/Solvers/SGH_solver/src/sgh_setup.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver/src/sgh_setup.cpp @@ -50,7 +50,7 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /// \param corner_mass is the corner mass /// ///////////////////////////////////////////////////////////////////////////// -void SGH::init_corner_node_masses_zero(const mesh_t& mesh, +void SGH::init_corner_node_masses_zero(const Mesh_t& mesh, const DCArrayKokkos& node_mass, const DCArrayKokkos& corner_mass) const { @@ -93,15 +93,15 @@ void SGH::init_corner_node_masses_zero(const mesh_t& mesh, /// ///////////////////////////////////////////////////////////////////////////// void SGH::fill_regions_sgh(const Material_t& Materials, - const mesh_t& mesh, + const Mesh_t& mesh, const DCArrayKokkos & node_coords, DCArrayKokkos & node_vel, DCArrayKokkos & GaussPoint_den, DCArrayKokkos & GaussPoint_sie, DCArrayKokkos & elem_mat_id, DCArrayKokkos & voxel_elem_mat_id, - const CArrayKokkos & region_fills, - const CArray & region_fills_host, + const CArrayKokkos & region_fills, + const CArray & region_fills_host, const size_t num_fills, const size_t num_elems, const size_t num_nodes, @@ -275,7 +275,7 @@ void SGH::fill_regions_sgh(const Material_t& Materials, ///////////////////////////////////////////////////////////////////////////// void SGH::setup(SimulationParameters_t& SimulationParamaters, Material_t& Materials, - mesh_t& mesh, + Mesh_t& mesh, BoundaryCondition_t& Boundary, State_t& State) { diff --git a/single-node-refactor/src/Solvers/SGH_solver/src/time_integration.cpp b/single-node-refactor/src/Solvers/SGH_solver/src/time_integration.cpp index 5b963c3a2..54dff578c 100644 --- a/single-node-refactor/src/Solvers/SGH_solver/src/time_integration.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver/src/time_integration.cpp @@ -104,7 +104,7 @@ void SGH::rk_init(DCArrayKokkos& node_coords, /// REMOVE EXCESS TIME RELATED VARIABLES /// ///////////////////////////////////////////////////////////////////////////// -void SGH::get_timestep(mesh_t& mesh, +void SGH::get_timestep(Mesh_t& mesh, DCArrayKokkos& node_coords, DCArrayKokkos& node_vel, DCArrayKokkos& GaussPoints_vol, @@ -224,7 +224,7 @@ void SGH::get_timestep(mesh_t& mesh, /// \param View of element volume /// ///////////////////////////////////////////////////////////////////////////// -void SGH::get_timestep2D(mesh_t& mesh, +void SGH::get_timestep2D(Mesh_t& mesh, DCArrayKokkos& node_coords, DCArrayKokkos& node_vel, DCArrayKokkos& GaussPoints_vol, diff --git a/single-node-refactor/src/boundary_conditions/velocity/constant_velocity_bc.h b/single-node-refactor/src/boundary_conditions/velocity/constant_velocity_bc.h index e729022b8..da0540e3c 100644 --- a/single-node-refactor/src/boundary_conditions/velocity/constant_velocity_bc.h +++ b/single-node-refactor/src/boundary_conditions/velocity/constant_velocity_bc.h @@ -61,7 +61,7 @@ namespace ConstantVelocityBC { KOKKOS_FUNCTION - static void velocity(const mesh_t& mesh, + static void velocity(const Mesh_t& mesh, const DCArrayKokkos & BoundaryConditionEnums, const DCArrayKokkos& bc_global_vars, const DCArrayKokkos& bc_state_vars, diff --git a/single-node-refactor/src/boundary_conditions/velocity/no_velocity_bc.h b/single-node-refactor/src/boundary_conditions/velocity/no_velocity_bc.h index 63b92ef6e..97703c09c 100644 --- a/single-node-refactor/src/boundary_conditions/velocity/no_velocity_bc.h +++ b/single-node-refactor/src/boundary_conditions/velocity/no_velocity_bc.h @@ -59,7 +59,7 @@ namespace NoVelocityBC { KOKKOS_FUNCTION - static void velocity(const mesh_t& mesh, + static void velocity(const Mesh_t& mesh, const DCArrayKokkos & BoundaryConditionEnums, const DCArrayKokkos& bc_global_vars, const DCArrayKokkos& bc_state_vars, diff --git a/single-node-refactor/src/boundary_conditions/velocity/piston_velocity_bc.h b/single-node-refactor/src/boundary_conditions/velocity/piston_velocity_bc.h index 35d374e5e..17338916e 100644 --- a/single-node-refactor/src/boundary_conditions/velocity/piston_velocity_bc.h +++ b/single-node-refactor/src/boundary_conditions/velocity/piston_velocity_bc.h @@ -63,7 +63,7 @@ namespace PistonVelocityBC { KOKKOS_FUNCTION - static void velocity(const mesh_t& mesh, + static void velocity(const Mesh_t& mesh, const DCArrayKokkos & BoundaryConditionEnums, const DCArrayKokkos& bc_global_vars, const DCArrayKokkos& bc_state_vars, diff --git a/single-node-refactor/src/boundary_conditions/velocity/reflected_velocity_bc.h b/single-node-refactor/src/boundary_conditions/velocity/reflected_velocity_bc.h index 3535f81b6..a88d30e97 100644 --- a/single-node-refactor/src/boundary_conditions/velocity/reflected_velocity_bc.h +++ b/single-node-refactor/src/boundary_conditions/velocity/reflected_velocity_bc.h @@ -60,7 +60,7 @@ struct BoundaryConditionEnums_t; namespace ReflectedVelocityBC { KOKKOS_FUNCTION - static void velocity(const mesh_t& mesh, + static void velocity(const Mesh_t& mesh, const DCArrayKokkos & BoundaryConditionEnums, const DCArrayKokkos& bc_global_vars, const DCArrayKokkos& bc_state_vars, diff --git a/single-node-refactor/src/boundary_conditions/velocity/time_varying_velocity_bc.h b/single-node-refactor/src/boundary_conditions/velocity/time_varying_velocity_bc.h index 279e69db0..0ad507264 100644 --- a/single-node-refactor/src/boundary_conditions/velocity/time_varying_velocity_bc.h +++ b/single-node-refactor/src/boundary_conditions/velocity/time_varying_velocity_bc.h @@ -71,7 +71,7 @@ namespace TimeVaryingVelocityBC { }; KOKKOS_FUNCTION - static void velocity(const mesh_t& mesh, + static void velocity(const Mesh_t& mesh, const DCArrayKokkos & BoundaryConditionEnums, const DCArrayKokkos& bc_global_vars, const DCArrayKokkos& bc_state_vars, diff --git a/single-node-refactor/src/boundary_conditions/velocity/user_defined_velocity_bc.h b/single-node-refactor/src/boundary_conditions/velocity/user_defined_velocity_bc.h index 3f8ecdfb3..7420d3824 100644 --- a/single-node-refactor/src/boundary_conditions/velocity/user_defined_velocity_bc.h +++ b/single-node-refactor/src/boundary_conditions/velocity/user_defined_velocity_bc.h @@ -61,7 +61,7 @@ namespace UserDefinedVelocityBC { KOKKOS_FUNCTION - static void velocity(const mesh_t& mesh, + static void velocity(const Mesh_t& mesh, const DCArrayKokkos & BoundaryConditionEnums, const DCArrayKokkos& bc_global_vars, const DCArrayKokkos& bc_state_vars, diff --git a/single-node-refactor/src/boundary_conditions/velocity/zero_velocity_bc.h b/single-node-refactor/src/boundary_conditions/velocity/zero_velocity_bc.h index 10a893aeb..f571231fe 100644 --- a/single-node-refactor/src/boundary_conditions/velocity/zero_velocity_bc.h +++ b/single-node-refactor/src/boundary_conditions/velocity/zero_velocity_bc.h @@ -62,7 +62,7 @@ namespace ZeroVelocityBC { KOKKOS_FUNCTION - static void velocity(const mesh_t& mesh, + static void velocity(const Mesh_t& mesh, const DCArrayKokkos & BoundaryConditionEnums, const DCArrayKokkos& bc_global_vars, const DCArrayKokkos& bc_state_vars, diff --git a/single-node-refactor/src/common/boundary_conditions.h b/single-node-refactor/src/common/boundary_conditions.h index d26272fea..4e98d14a9 100644 --- a/single-node-refactor/src/common/boundary_conditions.h +++ b/single-node-refactor/src/common/boundary_conditions.h @@ -185,7 +185,7 @@ struct BoundaryConditionFunctions_t { // function pointer for velocity BC's - void (*velocity) (const mesh_t& mesh, + void (*velocity) (const Mesh_t& mesh, const DCArrayKokkos & BoundaryConditionEnums, const DCArrayKokkos& bc_global_vars, const DCArrayKokkos& bc_state_vars, diff --git a/single-node-refactor/src/common/geometry_new.h b/single-node-refactor/src/common/geometry_new.h index 76fdf6916..5740d659a 100644 --- a/single-node-refactor/src/common/geometry_new.h +++ b/single-node-refactor/src/common/geometry_new.h @@ -372,7 +372,7 @@ void get_vol_hex(const DCArrayKokkos& elem_vol, ///////////////////////////////////////////////////////////////////////////// inline void get_vol(const DCArrayKokkos& elem_vol, const DCArrayKokkos& node_coords, - const mesh_t& mesh) + const Mesh_t& mesh) { const size_t num_dims = mesh.num_dims; @@ -629,7 +629,7 @@ KOKKOS_INLINE_FUNCTION size_t check_bdy(const size_t patch_gid, const int this_bc_tag, const double val, - const mesh_t& mesh, + const Mesh_t& mesh, const DCArrayKokkos& node_coords) { size_t num_dims = mesh.num_dims; @@ -711,7 +711,7 @@ size_t check_bdy(const size_t patch_gid, /// ///////////////////////////////////////////////////////////////////////////// inline void tag_bdys(const BoundaryCondition_t& boundary, - mesh_t& mesh, + Mesh_t& mesh, const DCArrayKokkos& node_coords) { // if (bdy_set == mesh.num_bdy_sets){ diff --git a/single-node-refactor/src/common/mesh.h b/single-node-refactor/src/common/mesh.h index 6ef4448a4..3e71b2b11 100644 --- a/single-node-refactor/src/common/mesh.h +++ b/single-node-refactor/src/common/mesh.h @@ -213,7 +213,7 @@ struct lobatto_in_elem_t // }; // mesh sizes and connectivity data structures -struct mesh_t +struct Mesh_t { // ******* Entity Definitions **********// // Element: A hexahedral volume @@ -1279,7 +1279,7 @@ struct mesh_t num_bdy_nodes_saved.update_host(); Kokkos::fence(); - // save the number of bdy_nodes to mesh_t + // save the number of bdy_nodes to Mesh_t num_bdy_nodes = num_bdy_nodes_saved.host(0); bdy_nodes = CArrayKokkos(num_bdy_nodes, "mesh.bdy_nodes"); @@ -1459,7 +1459,7 @@ struct mesh_t /// \brief Build sets of boundary nodes /// ///////////////////////////////////////////////////////////////////////////// - void build_boundry_node_sets(mesh_t& mesh) + void build_boundry_node_sets(Mesh_t& mesh) { // build boundary nodes in each boundary set @@ -1528,7 +1528,7 @@ struct mesh_t return; } // end method to build boundary nodes -}; // end mesh_t +}; // end Mesh_t KOKKOS_FUNCTION void decompose_vel_grad(ViewCArrayKokkos& D_tensor, diff --git a/single-node-refactor/src/common/mesh_io.h b/single-node-refactor/src/common/mesh_io.h index 1792abefe..580e84dca 100644 --- a/single-node-refactor/src/common/mesh_io.h +++ b/single-node-refactor/src/common/mesh_io.h @@ -146,7 +146,7 @@ class MeshReader /// /// ///////////////////////////////////////////////////////////////////////////// - void read_mesh(mesh_t& mesh, + void read_mesh(Mesh_t& mesh, GaussPoint_t& GaussPoints, node_t& node, corner_t& corner, @@ -177,7 +177,7 @@ class MeshReader /// \param Number of RK bins /// ///////////////////////////////////////////////////////////////////////////// - void read_ensight_mesh(mesh_t& mesh, + void read_ensight_mesh(Mesh_t& mesh, GaussPoint_t& GaussPoints, node_t& node, corner_t& corner, @@ -328,7 +328,7 @@ class MeshBuilder /// \param Simulation parameters /// ///////////////////////////////////////////////////////////////////////////// - void build_mesh(mesh_t& mesh, + void build_mesh(Mesh_t& mesh, GaussPoint_t& GaussPoints, node_t& node, corner_t& corner, @@ -372,7 +372,7 @@ class MeshBuilder /// \param Simulation parameters /// ///////////////////////////////////////////////////////////////////////////// - void build_2d_box(mesh_t& mesh, + void build_2d_box(Mesh_t& mesh, GaussPoint_t& GaussPoints, node_t& node, corner_t& corner, @@ -503,7 +503,7 @@ class MeshBuilder /// \param Simulation parameters /// ///////////////////////////////////////////////////////////////////////////// - void build_2d_polar(mesh_t& mesh, + void build_2d_polar(Mesh_t& mesh, GaussPoint_t& GaussPoints, node_t& node, corner_t& corner, @@ -637,7 +637,7 @@ class MeshBuilder /// \param Simulation parameters /// ///////////////////////////////////////////////////////////////////////////// - void build_3d_box(mesh_t& mesh, + void build_3d_box(Mesh_t& mesh, GaussPoint_t& GaussPoints, node_t& node, corner_t& corner, @@ -788,7 +788,7 @@ class MeshBuilder /// \param Simulation parameters /// ///////////////////////////////////////////////////////////////////////////// - void build_3d_HexN_box(mesh_t& mesh, + void build_3d_HexN_box(Mesh_t& mesh, GaussPoint_t& GaussPoints, node_t& node, corner_t& corner, @@ -904,7 +904,7 @@ class MeshWriter /// \param Simulation input parameters /// ///////////////////////////////////////////////////////////////////////////// - void write_mesh(mesh_t& mesh, + void write_mesh(Mesh_t& mesh, State_t& State, SimulationParameters_t& SimulationParamaters, double time_value, @@ -956,7 +956,7 @@ class MeshWriter /// \param Vector of all graphics output times /// ///////////////////////////////////////////////////////////////////////////// - void write_ensight(mesh_t& mesh, + void write_ensight(Mesh_t& mesh, State_t& State, SimulationParameters_t& SimulationParamaters, double time_value, @@ -1337,7 +1337,7 @@ class MeshWriter /// \param Vector of all graphics output times /// ///////////////////////////////////////////////////////////////////////////// - void write_vtk(mesh_t& mesh, + void write_vtk(Mesh_t& mesh, State_t& State, SimulationParameters_t& SimulationParamaters, double time_value, @@ -1361,7 +1361,7 @@ class MeshWriter /// \param Vector of all graphics output times /// ///////////////////////////////////////////////////////////////////////////// - void write_material_point_state(mesh_t& mesh, + void write_material_point_state(Mesh_t& mesh, State_t& State, SimulationParameters_t& SimulationParamaters, double time_value, diff --git a/single-node-refactor/src/common/mesh_old.h b/single-node-refactor/src/common/mesh_old.h index e79041ea9..5dc3c5de1 100644 --- a/single-node-refactor/src/common/mesh_old.h +++ b/single-node-refactor/src/common/mesh_old.h @@ -98,7 +98,7 @@ void bubble_sort(size_t arr[], const size_t num) } // end function // mesh sizes and connectivity data structures -struct mesh_t +struct Mesh_t { size_t num_dims; @@ -666,7 +666,7 @@ struct mesh_t num_bdy_nodes_saved.update_host(); Kokkos::fence(); - // save the number of bdy_nodes to mesh_t + // save the number of bdy_nodes to Mesh_t num_bdy_nodes = num_bdy_nodes_saved.host(0); bdy_nodes = CArrayKokkos(num_bdy_nodes, "mesh.bdy_nodes"); @@ -847,7 +847,7 @@ struct mesh_t /// ///////////////////////////////////////////////////////////////////////////// void build_boundry_node_sets(const CArrayKokkos& boundary, - mesh_t& mesh) + Mesh_t& mesh) { // build boundary nodes in each boundary set mesh.num_bdy_nodes_in_set = DCArrayKokkos(mesh.num_bdy_sets, "mesh.num_bdy_nodes_in_set"); @@ -915,9 +915,9 @@ struct mesh_t return; } // end method to build boundary nodes -}; // end mesh_t +}; // end Mesh_t -void ensight(const mesh_t& mesh, +void ensight(const Mesh_t& mesh, const DCArrayKokkos& node_coords, const DCArrayKokkos& node_vel, const DCArrayKokkos& node_mass, @@ -933,7 +933,7 @@ void ensight(const mesh_t& mesh, size_t& graphics_id, const double time_value); -void state_file(const mesh_t& mesh, +void state_file(const Mesh_t& mesh, const DCArrayKokkos& node_coords, const DCArrayKokkos& node_vel, const DCArrayKokkos& node_mass, diff --git a/single-node-refactor/src/common/region.h b/single-node-refactor/src/common/region.h index d589a440d..90b55c18c 100644 --- a/single-node-refactor/src/common/region.h +++ b/single-node-refactor/src/common/region.h @@ -70,12 +70,12 @@ static std::map region_type_map ///////////////////////////////////////////////////////////////////////////// /// -/// \struct reg_fill_t +/// \struct RegionFill_t /// /// \brief Geometry data for regions of materials/states /// ///////////////////////////////////////////////////////////////////////////// -struct reg_fill_t +struct RegionFill_t { // type region::vol_tag volume; ///< Type of volume for this region eg. global, box, sphere, planes, etc. @@ -115,12 +115,12 @@ struct reg_fill_t ///////////////////////////////////////////////////////////////////////////// /// -/// \struct reg_fill_host_t +/// \struct RegionFill_host_t /// /// \brief Geometry data, on the cpu only, for regions of materials/states /// ///////////////////////////////////////////////////////////////////////////// -struct reg_fill_host_t +struct RegionFill_host_t { std::string file_path; ///< path of mesh file diff --git a/single-node-refactor/src/common/region_fill.h b/single-node-refactor/src/common/region_fill.h index 49698482f..832513def 100644 --- a/single-node-refactor/src/common/region_fill.h +++ b/single-node-refactor/src/common/region_fill.h @@ -379,9 +379,9 @@ void user_voxel_init(DCArrayKokkos& elem_values, /// ///////////////////////////////////////////////////////////////////////////// KOKKOS_FUNCTION -size_t fill_geometric_region(const mesh_t& mesh, +size_t fill_geometric_region(const Mesh_t& mesh, const DCArrayKokkos& voxel_elem_mat_id, - const CArrayKokkos& region_fills, + const CArrayKokkos& region_fills, const ViewCArrayKokkos & mesh_coords, const double voxel_dx, const double voxel_dy, @@ -529,12 +529,12 @@ size_t fill_geometric_region(const mesh_t& mesh, ///////////////////////////////////////////////////////////////////////////// KOKKOS_FUNCTION void paint_gauss_den_sie(const Material_t& Materials, - const mesh_t& mesh, + const Mesh_t& mesh, const DCArrayKokkos & node_coords, const DCArrayKokkos & GaussPoint_den, const DCArrayKokkos & GaussPoint_sie, const DCArrayKokkos & elem_mat_id, - const CArrayKokkos& region_fills, + const CArrayKokkos& region_fills, const ViewCArrayKokkos elem_coords, const double elem_gid, const size_t f_id) @@ -599,7 +599,7 @@ void paint_gauss_den_sie(const Material_t& Materials, /// ///////////////////////////////////////////////////////////////////////////// KOKKOS_FUNCTION -void paint_node_vel(const CArrayKokkos& region_fills, +void paint_node_vel(const CArrayKokkos& region_fills, const DCArrayKokkos& node_vel, const DCArrayKokkos& node_coords, const double node_gid, @@ -762,7 +762,7 @@ void paint_node_vel(const CArrayKokkos& region_fills, /// ///////////////////////////////////////////////////////////////////////////// void init_press_sspd_stress(const Material_t& Materials, - const mesh_t& mesh, + const Mesh_t& mesh, const DCArrayKokkos& MaterialPoints_den, const DCArrayKokkos& MaterialPoints_pres, const DCArrayKokkos& MaterialPoints_stress, @@ -845,7 +845,7 @@ void init_press_sspd_stress(const Material_t& Materials, /// ///////////////////////////////////////////////////////////////////////////// void calc_corner_mass(const Material_t& Materials, - const mesh_t& mesh, + const Mesh_t& mesh, const DCArrayKokkos& node_coords, const DCArrayKokkos& node_mass, const DCArrayKokkos& corner_mass, @@ -890,7 +890,7 @@ void calc_corner_mass(const Material_t& Materials, /// \param num_mat_elems is the number of material elements for mat_id /// ///////////////////////////////////////////////////////////////////////////// -void calc_node_mass(const mesh_t& mesh, +void calc_node_mass(const Mesh_t& mesh, const DCArrayKokkos& node_coords, const DCArrayKokkos& node_mass, const DCArrayKokkos& corner_mass) diff --git a/single-node-refactor/src/common/simulation_parameters.h b/single-node-refactor/src/common/simulation_parameters.h index f5330a5fe..4e82a7cbb 100644 --- a/single-node-refactor/src/common/simulation_parameters.h +++ b/single-node-refactor/src/common/simulation_parameters.h @@ -62,9 +62,9 @@ struct SimulationParameters_t std::vector solver_inputs; ///< Solvers to use during the simulation - CArrayKokkos region_fills; ///< Region data for simulation mesh, set the initial conditions + CArrayKokkos region_fills; ///< Region data for simulation mesh, set the initial conditions - CArray region_fills_host; ///< Region data on CPU, set the initial conditions + CArray region_fills_host; ///< Region data on CPU, set the initial conditions }; // simulation_parameters_t diff --git a/single-node-refactor/src/driver.h b/single-node-refactor/src/driver.h index 0b24a6b72..15d92ff18 100644 --- a/single-node-refactor/src/driver.h +++ b/single-node-refactor/src/driver.h @@ -76,7 +76,7 @@ class Driver // --------------------------------------------------------------------- // mesh data type declarations // --------------------------------------------------------------------- - mesh_t mesh; + Mesh_t mesh; // --------------------------------------------------------------------- // state data type declaration diff --git a/single-node-refactor/src/input/parse_yaml.cpp b/single-node-refactor/src/input/parse_yaml.cpp index c4736d64f..748a962a5 100644 --- a/single-node-refactor/src/input/parse_yaml.cpp +++ b/single-node-refactor/src/input/parse_yaml.cpp @@ -895,16 +895,16 @@ void parse_output_options(Yaml::Node& root, // Parse Fill regions // ================================================================================= void parse_regions(Yaml::Node& root, - CArrayKokkos& region_fills, - CArray& region_fills_host) + CArrayKokkos& region_fills, + CArray& region_fills_host) { Yaml::Node& region_yaml = root["regions"]; size_t num_regions = region_yaml.Size(); - region_fills = CArrayKokkos(num_regions , "sim_param.region_fills"); - region_fills_host = CArray(num_regions); + region_fills = CArrayKokkos(num_regions , "sim_param.region_fills"); + region_fills_host = CArray(num_regions); // loop over the fill regions specified for (int reg_id = 0; reg_id < num_regions; reg_id++) { diff --git a/single-node-refactor/src/input/parse_yaml.h b/single-node-refactor/src/input/parse_yaml.h index 2e65d8b9d..24f6e263d 100644 --- a/single-node-refactor/src/input/parse_yaml.h +++ b/single-node-refactor/src/input/parse_yaml.h @@ -49,8 +49,8 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. struct SimulationParameters_t; struct solver_input_t; struct mesh_input_t; -struct reg_fill_t; -struct reg_fill_host_t; +struct RegionFill_t; +struct RegionFill_host_t; struct output_options_t; struct Material_t; @@ -101,8 +101,8 @@ void parse_output_options(Yaml::Node& root, output_options_t& output_options); // parse the region text void parse_regions(Yaml::Node& root, - CArrayKokkos& region_fills, - CArray& region_fills_host); + CArrayKokkos& region_fills, + CArray& region_fills_host); // parse the region text void parse_materials(Yaml::Node& root, Material_t& Materials); diff --git a/single-node-refactor/src/solver.h b/single-node-refactor/src/solver.h index 1fc3d7e0f..e72af3326 100644 --- a/single-node-refactor/src/solver.h +++ b/single-node-refactor/src/solver.h @@ -42,7 +42,7 @@ struct SimulationParameters_t; struct Material_t; -struct mesh_t; +struct Mesh_t; struct State_t; struct BoundaryCondition_t; @@ -56,20 +56,20 @@ class Solver virtual void initialize(SimulationParameters_t& SimulationParamaters, Material_t& Materials, - mesh_t& mesh, + Mesh_t& mesh, BoundaryCondition_t& Boundary, State_t& State) const = 0; virtual void setup(SimulationParameters_t& SimulationParamaters, Material_t& Materials, - mesh_t& mesh, + Mesh_t& mesh, BoundaryCondition_t& Boundary, State_t& State) = 0; virtual void execute(SimulationParameters_t& SimulationParamaters, Material_t& Materials, BoundaryCondition_t& BoundaryConditions, - mesh_t& mesh, + Mesh_t& mesh, State_t& State) = 0; virtual void finalize(SimulationParameters_t& SimulationParamaters, From aad6a32e5ee925304089108073179e064da43204 Mon Sep 17 00:00:00 2001 From: Jacob Moore Date: Fri, 9 Aug 2024 16:24:44 -0500 Subject: [PATCH 118/233] ENH: Break driver into cpp and h files --- single-node-refactor/src/CMakeLists.txt | 3 +- single-node-refactor/src/driver.cpp | 179 +++++++++++++++++++++++ single-node-refactor/src/driver.h | 185 +++++------------------- 3 files changed, 220 insertions(+), 147 deletions(-) create mode 100644 single-node-refactor/src/driver.cpp diff --git a/single-node-refactor/src/CMakeLists.txt b/single-node-refactor/src/CMakeLists.txt index 71b573cf8..178bd425f 100755 --- a/single-node-refactor/src/CMakeLists.txt +++ b/single-node-refactor/src/CMakeLists.txt @@ -74,10 +74,11 @@ elseif (THREADS) endif() include_directories(common) +# add_subdirectory(Solvers/SGH_solver) # Add SGH Solver include_directories(Solvers/SGH_solver/include) add_subdirectory(Solvers/SGH_solver) -add_executable(Fierro main.cpp solver.cpp ${YAML_SRC_Files} ${SGH_SRC_Files} ) +add_executable(Fierro main.cpp driver.cpp solver.cpp ${YAML_SRC_Files} ${SGH_SRC_Files} ) target_link_libraries(Fierro PRIVATE matar Kokkos::kokkos) #sgh_solver parse_yaml diff --git a/single-node-refactor/src/driver.cpp b/single-node-refactor/src/driver.cpp new file mode 100644 index 000000000..8b0b4bbbe --- /dev/null +++ b/single-node-refactor/src/driver.cpp @@ -0,0 +1,179 @@ +/********************************************************************************************** +© 2020. Triad National Security, LLC. All rights reserved. +This program was produced under U.S. Government contract 89233218CNA000001 for Los Alamos +National Laboratory (LANL), which is operated by Triad National Security, LLC for the U.S. +Department of Energy/National Nuclear Security Administration. All rights in the program are +reserved by Triad National Security, LLC, and the U.S. Department of Energy/National Nuclear +Security Administration. The Government is granted for itself and others acting on its behalf a +nonexclusive, paid-up, irrevocable worldwide license in this material to reproduce, prepare +derivative works, distribute copies to the public, perform publicly and display publicly, and +to permit others to do so. +This program is open source under the BSD-3 License. +Redistribution and use in source and binary forms, with or without modification, are permitted +provided that the following conditions are met: +1. Redistributions of source code must retain the above copyright notice, this list of +conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, this list of +conditions and the following disclaimer in the documentation and/or other materials +provided with the distribution. +3. Neither the name of the copyright holder nor the names of its contributors may be used +to endorse or promote products derived from this software without specific prior +written permission. +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +**********************************************************************************************/ + +#include "driver.h" + + +// Initialize driver data. Solver type, number of solvers +// Will be parsed from YAML input +void Driver::initialize() +{ + std::cout << "Initializing Driver" << std::endl; + Yaml::Node root; + try + { + Yaml::Parse(root, yaml_file); + } + catch (const Yaml::Exception e) + { + std::cout << "Exception " << e.Type() << ": " << e.what() << std::endl; + exit(0); + } + + parse_yaml(root, SimulationParamaters, Materials, BoundaryConditions); + std::cout << "Finished parsing YAML file" << std::endl; + + if (SimulationParamaters.mesh_input.source == mesh_input::file) { + // Create and/or read mesh + std::cout << "Mesh file path: " << SimulationParamaters.mesh_input.file_path << std::endl; + mesh_reader.set_mesh_file(SimulationParamaters.mesh_input.file_path.data()); + mesh_reader.read_mesh(mesh, + State.GaussPoints, + State.node, + State.corner, + num_dims, + SimulationParamaters.dynamic_options.rk_num_bins); + } + else if (SimulationParamaters.mesh_input.source == mesh_input::generate) { + mesh_builder.build_mesh(mesh, + State.GaussPoints, + State.node, + State.corner, + SimulationParamaters); + } + else{ + throw std::runtime_error("**** NO MESH INPUT OPTIONS PROVIDED IN YAML ****"); + return; + } + + // Build boundary conditions + int num_bcs = BoundaryConditions.num_bcs; + printf("Num BC's = %d\n", num_bcs); + + // --- calculate bdy sets ---// + mesh.init_bdy_sets(num_bcs); + tag_bdys(BoundaryConditions, mesh, State.node.coords); + mesh.build_boundry_node_sets(mesh); + + // Calculate element volume + geometry::get_vol(State.GaussPoints.vol, State.node.coords, mesh); + + + for (int solver_id = 0; solver_id < SimulationParamaters.solver_inputs.size(); solver_id++) { + + if (SimulationParamaters.solver_inputs[solver_id].method == solver_input::SGH) { + + SGH* sgh_solver = new SGH(); + + sgh_solver->initialize(SimulationParamaters, + Materials, + mesh, + BoundaryConditions, + State); + + solvers.push_back(sgh_solver); + } // end if SGH solver + + } // end for loop over solvers + +} + +///////////////////////////////////////////////////////////////////////////// +/// +/// \fn setup +/// +/// \brief Calls the setup function for each of the created solvers +/// +///////////////////////////////////////////////////////////////////////////// +void Driver::setup() +{ + std::cout << "Inside driver setup" << std::endl; + + // allocate state, setup models, and apply fill instructions + for (auto& solver : solvers) { + solver->setup(SimulationParamaters, + Materials, + mesh, + BoundaryConditions, + State); + } // end for over solvers + +} // end setup function of driver + + +///////////////////////////////////////////////////////////////////////////// +/// +/// \fn run +/// +/// \brief Calls the execute function for each of the created solvers +/// +///////////////////////////////////////////////////////////////////////////// +void Driver::run() +{ + std::cout << "Inside driver run" << std::endl; + for (auto& solver : solvers) { + solver->execute(SimulationParamaters, + Materials, + BoundaryConditions, + mesh, + State); + } // loop over solvers +} + + +///////////////////////////////////////////////////////////////////////////// +/// +/// \fn finalize +/// +/// \brief Calls the finalize function of each of the solvers assuming the +/// finalize function exists and deletes the solver +/// +/// +///////////////////////////////////////////////////////////////////////////// +void Driver::finalize() +{ + std::cout << "Inside driver finalize" << std::endl; + for (auto& solver : solvers) { + if (solver->finalize_flag) { + solver->finalize(SimulationParamaters, + Materials, + BoundaryConditions); + } + } + // destroy FEA modules + for (auto& solver : solvers) { + std::cout << "Deleting solver" << std::endl; + delete solver; + } +} \ No newline at end of file diff --git a/single-node-refactor/src/driver.h b/single-node-refactor/src/driver.h index 15d92ff18..32374fea9 100644 --- a/single-node-refactor/src/driver.h +++ b/single-node-refactor/src/driver.h @@ -1,36 +1,36 @@ /********************************************************************************************** - © 2020. Triad National Security, LLC. All rights reserved. - This program was produced under U.S. Government contract 89233218CNA000001 for Los Alamos - National Laboratory (LANL), which is operated by Triad National Security, LLC for the U.S. - Department of Energy/National Nuclear Security Administration. All rights in the program are - reserved by Triad National Security, LLC, and the U.S. Department of Energy/National Nuclear - Security Administration. The Government is granted for itself and others acting on its behalf a - nonexclusive, paid-up, irrevocable worldwide license in this material to reproduce, prepare - derivative works, distribute copies to the public, perform publicly and display publicly, and - to permit others to do so. - This program is open source under the BSD-3 License. - Redistribution and use in source and binary forms, with or without modification, are permitted - provided that the following conditions are met: - 1. Redistributions of source code must retain the above copyright notice, this list of - conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above copyright notice, this list of - conditions and the following disclaimer in the documentation and/or other materials - provided with the distribution. - 3. Neither the name of the copyright holder nor the names of its contributors may be used - to endorse or promote products derived from this software without specific prior - written permission. - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS - IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; - OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR - OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - **********************************************************************************************/ +© 2020. Triad National Security, LLC. All rights reserved. +This program was produced under U.S. Government contract 89233218CNA000001 for Los Alamos +National Laboratory (LANL), which is operated by Triad National Security, LLC for the U.S. +Department of Energy/National Nuclear Security Administration. All rights in the program are +reserved by Triad National Security, LLC, and the U.S. Department of Energy/National Nuclear +Security Administration. The Government is granted for itself and others acting on its behalf a +nonexclusive, paid-up, irrevocable worldwide license in this material to reproduce, prepare +derivative works, distribute copies to the public, perform publicly and display publicly, and +to permit others to do so. +This program is open source under the BSD-3 License. +Redistribution and use in source and binary forms, with or without modification, are permitted +provided that the following conditions are met: +1. Redistributions of source code must retain the above copyright notice, this list of +conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, this list of +conditions and the following disclaimer in the documentation and/or other materials +provided with the distribution. +3. Neither the name of the copyright holder nor the names of its contributors may be used +to endorse or promote products derived from this software without specific prior +written permission. +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +**********************************************************************************************/ #include "mesh_io.h" #include "parse_yaml.h" @@ -96,77 +96,7 @@ class Driver // Initialize driver data. Solver type, number of solvers // Will be parsed from YAML input - void initialize() - { - std::cout << "Initializing Driver" << std::endl; - Yaml::Node root; - try - { - Yaml::Parse(root, yaml_file); - } - catch (const Yaml::Exception e) - { - std::cout << "Exception " << e.Type() << ": " << e.what() << std::endl; - exit(0); - } - - parse_yaml(root, SimulationParamaters, Materials, BoundaryConditions); - std::cout << "Finished parsing YAML file" << std::endl; - - if (SimulationParamaters.mesh_input.source == mesh_input::file) { - // Create and/or read mesh - std::cout << "Mesh file path: " << SimulationParamaters.mesh_input.file_path << std::endl; - mesh_reader.set_mesh_file(SimulationParamaters.mesh_input.file_path.data()); - mesh_reader.read_mesh(mesh, - State.GaussPoints, - State.node, - State.corner, - num_dims, - SimulationParamaters.dynamic_options.rk_num_bins); - } - else if (SimulationParamaters.mesh_input.source == mesh_input::generate) { - mesh_builder.build_mesh(mesh, - State.GaussPoints, - State.node, - State.corner, - SimulationParamaters); - } - else{ - throw std::runtime_error("**** NO MESH INPUT OPTIONS PROVIDED IN YAML ****"); - return; - } - - // Build boundary conditions - int num_bcs = BoundaryConditions.num_bcs; - printf("Num BC's = %d\n", num_bcs); - - // --- calculate bdy sets ---// - mesh.init_bdy_sets(num_bcs); - tag_bdys(BoundaryConditions, mesh, State.node.coords); - mesh.build_boundry_node_sets(mesh); - - // Calculate element volume - geometry::get_vol(State.GaussPoints.vol, State.node.coords, mesh); - - - for (int solver_id = 0; solver_id < SimulationParamaters.solver_inputs.size(); solver_id++) { - - if (SimulationParamaters.solver_inputs[solver_id].method == solver_input::SGH) { - - SGH* sgh_solver = new SGH(); - - sgh_solver->initialize(SimulationParamaters, - Materials, - mesh, - BoundaryConditions, - State); - - solvers.push_back(sgh_solver); - } // end if SGH solver - - } // end for loop over solvers - - } // end initialize + void initialize(); ///////////////////////////////////////////////////////////////////////////// /// @@ -175,39 +105,18 @@ class Driver /// \brief Calls the setup function for each of the created solvers /// ///////////////////////////////////////////////////////////////////////////// - void setup() - { - std::cout << "Inside driver setup" << std::endl; + void setup(); - // allocate state, setup models, and apply fill instructions - for (auto& solver : solvers) { - solver->setup(SimulationParamaters, - Materials, - mesh, - BoundaryConditions, - State); - } // end for over solvers - - } // end setup function of driver ///////////////////////////////////////////////////////////////////////////// /// /// \fn run /// - /// \brief Calls the exectue function for each of the created solvers + /// \brief Calls the execute function for each of the created solvers /// ///////////////////////////////////////////////////////////////////////////// - void run() - { - std::cout << "Inside driver run" << std::endl; - for (auto& solver : solvers) { - solver->execute(SimulationParamaters, - Materials, - BoundaryConditions, - mesh, - State); - } // loop over solvers - } + void run(); + ///////////////////////////////////////////////////////////////////////////// /// @@ -218,23 +127,7 @@ class Driver /// /// ///////////////////////////////////////////////////////////////////////////// - void finalize() - { - std::cout << "Inside driver finalize" << std::endl; - for (auto& solver : solvers) { - if (solver->finalize_flag) { - solver->finalize(SimulationParamaters, - Materials, - BoundaryConditions); - } - } - // destroy FEA modules - for (auto& solver : solvers) { - std::cout << "Deleting solver" << std::endl; - delete solver; - } - } - - + void finalize(); + }; // end driver class From d63eecb8306f8b89cd2074de9e3ea1f9aa8ab44b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CAdrian-Diaz=E2=80=9D?= <“adriandiaz1117@gmail.com”> Date: Mon, 12 Aug 2024 22:56:28 -0600 Subject: [PATCH 119/233] ENH: refactor dynamic objective calls --- .../Fierro_Optimization_Objective.hpp | 14 ++- .../SGH_Solver/include/FEA_Module_SGH.h | 1 - .../SGH_Solver/src/FEA_Module_SGH.cpp | 90 ++----------------- .../Kinetic_Energy_Minimize.h | 85 ++++++++++++++++++ 4 files changed, 105 insertions(+), 85 deletions(-) diff --git a/src/Parallel-Solvers/Optimization_Modules/Fierro_Optimization_Objective.hpp b/src/Parallel-Solvers/Optimization_Modules/Fierro_Optimization_Objective.hpp index d765f13c5..6aad228bf 100644 --- a/src/Parallel-Solvers/Optimization_Modules/Fierro_Optimization_Objective.hpp +++ b/src/Parallel-Solvers/Optimization_Modules/Fierro_Optimization_Objective.hpp @@ -118,13 +118,23 @@ class FierroOptimizationObjective : public ROL::Objective { public: bool time_accumulation; - real_t objective_accumulation; + real_t objective_accumulation, global_objective_accumulation; FierroOptimizationObjective(){ - objective_accumulation = 0; + global_objective_accumulation = objective_accumulation = 0; time_accumulation = false; } + virtual void step_accumulation(const real_t& dt, const size_t& cycle, const size_t& rk_level) {} + + // collect local objective values + virtual void global_reduction() { + + MPI_Allreduce(&objective_accumulation, &global_objective_accumulation, 1, MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD); + + objective_accumulation = global_objective_accumulation; + } + }; // class ObjectiveMMA diff --git a/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/include/FEA_Module_SGH.h b/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/include/FEA_Module_SGH.h index 4d0f4ffac..f0aa4ba94 100644 --- a/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/include/FEA_Module_SGH.h +++ b/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/include/FEA_Module_SGH.h @@ -701,7 +701,6 @@ class FEA_Module_SGH : public FEA_Module int rk_num_bins; // optimization flags and data - bool kinetic_energy_objective; Teuchos::RCP> dynamic_checkpoint_set; Teuchos::RCP> cached_dynamic_checkpoints; int num_active_checkpoints; diff --git a/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/FEA_Module_SGH.cpp b/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/FEA_Module_SGH.cpp index 2036ce050..7d4a5d69b 100644 --- a/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/FEA_Module_SGH.cpp +++ b/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/FEA_Module_SGH.cpp @@ -67,7 +67,7 @@ // optimization #include "ROL_Solver.hpp" -#include "Kinetic_Energy_Minimize.h" +#include "Fierro_Optimization_Objective.hpp" #define MAX_ELEM_NODES 8 #define STRAIN_EPSILON 0.000000001 @@ -137,9 +137,6 @@ FEA_Module_SGH::FEA_Module_SGH( noutput = 0; init_output(); - // optimization flags - kinetic_energy_objective = false; - // set parameters Dynamic_Options dynamic_options = simparam->dynamic_options; time_value = dynamic_options.time_value; @@ -929,6 +926,7 @@ void FEA_Module_SGH::sgh_solve() std::vector> FEA_Module_My_TO_Modules = simparam->FEA_Module_My_TO_Modules; problem = Explicit_Solver_Pointer_->problem; // Pointer to ROL optimization problem object ROL::Ptr> obj_pointer; + FierroOptimizationObjective* objective_function; bool topology_optimization_on = simparam->topology_optimization_on; bool shape_optimization_on = simparam->shape_optimization_on; bool use_solve_checkpoints = simparam->optimization_options.use_solve_checkpoints; @@ -938,6 +936,7 @@ void FEA_Module_SGH::sgh_solve() bool dispensable_found = false; bool optimization_on = simparam->topology_optimization_on||simparam->shape_optimization_on; num_active_checkpoints = 0; + bool time_accumulation; if(simparam->optimization_options.disable_forward_solve_output){ @@ -958,10 +957,8 @@ void FEA_Module_SGH::sgh_solve() // simple setup to just request KE for now; above loop to be expanded and used later for scanning modules if (topology_optimization_on||shape_optimization_on) { obj_pointer = problem->getObjective(); - KineticEnergyMinimize_TopOpt& kinetic_energy_minimize_function = dynamic_cast(*obj_pointer); - kinetic_energy_minimize_function.objective_accumulation = 0; - global_objective_accumulation = objective_accumulation = 0; - kinetic_energy_objective = true; + objective_function = dynamic_cast(obj_pointer.getRawPtr()); + time_accumulation = objective_function->time_accumulation; if(!use_solve_checkpoints){ if (max_time_steps + 1 > forward_solve_velocity_data->size()) { old_max_forward_buffer = forward_solve_velocity_data->size(); @@ -1722,71 +1719,8 @@ void FEA_Module_SGH::sgh_solve() } // kinetic energy accumulation - if (kinetic_energy_objective) { - const_vec_array node_velocities_interface; - const_vec_array previous_node_velocities_interface; - if(use_solve_checkpoints){ - node_velocities_interface = all_node_velocities_distributed->getLocalView(Tpetra::Access::ReadOnly); - previous_node_velocities_interface = previous_node_velocities_distributed->getLocalView(Tpetra::Access::ReadOnly); - } - else{ - node_velocities_interface = (*forward_solve_velocity_data)[cycle + 1]->getLocalView(Tpetra::Access::ReadOnly); - previous_node_velocities_interface = (*forward_solve_velocity_data)[cycle]->getLocalView(Tpetra::Access::ReadOnly); - } - KE_loc_sum = 0.0; - KE_sum = 0.0; - // extensive KE - if(simparam->optimization_options.optimization_objective_regions.size()){ - int nobj_volumes = simparam->optimization_options.optimization_objective_regions.size(); - const_vec_array all_initial_node_coords = all_initial_node_coords_distributed->getLocalView(Tpetra::Access::ReadOnly); - REDUCE_SUM_CLASS(node_gid, 0, nlocal_nodes, KE_loc_sum, { - double ke = 0; - double current_node_coords[3]; - bool contained = false; - current_node_coords[0] = all_initial_node_coords(node_gid, 0); - current_node_coords[1] = all_initial_node_coords(node_gid, 1); - current_node_coords[2] = all_initial_node_coords(node_gid, 2); - for(int ivolume = 0; ivolume < nobj_volumes; ivolume++){ - if(simparam->optimization_options.optimization_objective_regions(ivolume).contains(current_node_coords)){ - contained = true; - } - } - if(contained){ - for (size_t dim = 0; dim < num_dim; dim++) { - // midpoint integration approximation - ke += (node_velocities_interface(node_gid, dim) + previous_node_velocities_interface(node_gid, dim)) * - (node_velocities_interface(node_gid, dim) + previous_node_velocities_interface(node_gid, dim)) / 4; // 1/2 at end - } // end for - } - - if (num_dim == 2) { - KE_loc_sum += node_mass(node_gid) * node_coords(rk_level, node_gid, 1) * ke; - } - else{ - KE_loc_sum += node_mass(node_gid) * ke; - } - }, KE_sum); - } - else{ - REDUCE_SUM_CLASS(node_gid, 0, nlocal_nodes, KE_loc_sum, { - double ke = 0; - for (size_t dim = 0; dim < num_dim; dim++) { - // midpoint integration approximation - ke += (node_velocities_interface(node_gid, dim) + previous_node_velocities_interface(node_gid, dim)) * - (node_velocities_interface(node_gid, dim) + previous_node_velocities_interface(node_gid, dim)) / 4; // 1/2 at end - } // end for - - if (num_dim == 2) { - KE_loc_sum += node_mass(node_gid) * node_coords(rk_level, node_gid, 1) * ke; - } - else{ - KE_loc_sum += node_mass(node_gid) * ke; - } - }, KE_sum); - } - Kokkos::fence(); - KE_sum = 0.5 * KE_sum; - objective_accumulation += KE_sum * dt; + if (time_accumulation) { + objective_function->step_accumulation(dt, cycle, rk_level); } } @@ -1850,15 +1784,7 @@ void FEA_Module_SGH::sgh_solve() // simple setup to just calculate KE minimize objective for now if (topology_optimization_on) { - KineticEnergyMinimize_TopOpt& kinetic_energy_minimize_function = dynamic_cast(*obj_pointer); - - // collect local objective values - MPI_Allreduce(&objective_accumulation, &global_objective_accumulation, 1, MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD); - kinetic_energy_minimize_function.objective_accumulation = global_objective_accumulation; - - // if (myrank == 0) { - // std::cout << "CURRENT TIME INTEGRAL OF KINETIC ENERGY " << global_objective_accumulation << std::endl; - // } + objective_function->global_reduction(); } auto time_2 = std::chrono::high_resolution_clock::now(); diff --git a/src/Parallel-Solvers/Parallel-Explicit/Topology_Optimization/Kinetic_Energy_Minimize.h b/src/Parallel-Solvers/Parallel-Explicit/Topology_Optimization/Kinetic_Energy_Minimize.h index fc7937718..0b6c81581 100644 --- a/src/Parallel-Solvers/Parallel-Explicit/Topology_Optimization/Kinetic_Energy_Minimize.h +++ b/src/Parallel-Solvers/Parallel-Explicit/Topology_Optimization/Kinetic_Energy_Minimize.h @@ -137,7 +137,10 @@ typedef MV::dual_view_type dual_vec_array; public: bool nodal_density_flag_; int last_comm_step, last_solve_step, current_step; + int num_dim; size_t nvalid_modules; + size_t nlocal_nodes; + DViewCArrayKokkos node_mass, node_coords; std::vector valid_fea_modules; // modules that may interface with this objective function FEA_MODULE_TYPE set_module_type; // std::string my_fea_module = "SGH"; @@ -151,16 +154,23 @@ typedef MV::dual_view_type dual_vec_array; valid_fea_modules.push_back(FEA_MODULE_TYPE::Dynamic_Elasticity); nvalid_modules = valid_fea_modules.size(); objective_sign = 1; + num_dim = Explicit_Solver_Pointer_->simparam.num_dims; const Simulation_Parameters& simparam = Explicit_Solver_Pointer_->simparam; for (const auto& fea_module : Explicit_Solver_Pointer_->fea_modules) { for (int ivalid = 0; ivalid < nvalid_modules; ivalid++) { if (fea_module->Module_Type == FEA_MODULE_TYPE::SGH) { FEM_SGH_ = dynamic_cast(fea_module); set_module_type = FEA_MODULE_TYPE::SGH; + node_mass = FEM_SGH_->node_mass; + node_coords = FEM_SGH_->node_coords; + nlocal_nodes = FEM_SGH_->nlocal_nodes; } if (fea_module->Module_Type == FEA_MODULE_TYPE::Dynamic_Elasticity) { FEM_Dynamic_Elasticity_ = dynamic_cast(fea_module); set_module_type = FEA_MODULE_TYPE::Dynamic_Elasticity; + node_mass = FEM_Dynamic_Elasticity_->node_mass; + node_coords = FEM_Dynamic_Elasticity_->node_coords; + nlocal_nodes = FEM_Dynamic_Elasticity_->nlocal_nodes; } } } @@ -355,6 +365,81 @@ typedef MV::dual_view_type dual_vec_array; } } + /* -------------------------------------------------------------------------------------- + Compute time integral contribution for this objective function form + ----------------------------------------------------------------------------------------- */ + void step_accumulation(const real_t& dt, const size_t& cycle, const size_t& rk_level) { + + const_vec_array node_velocities_interface; + const_vec_array previous_node_velocities_interface; + bool use_solve_checkpoints = FEM_SGH_->simparam->optimization_options.use_solve_checkpoints; + if(use_solve_checkpoints){ + node_velocities_interface = FEM_SGH_->all_node_velocities_distributed->getLocalView(Tpetra::Access::ReadOnly); + previous_node_velocities_interface = FEM_SGH_->previous_node_velocities_distributed->getLocalView(Tpetra::Access::ReadOnly); + } + else{ + auto forward_solve_velocity_data = FEM_SGH_->forward_solve_velocity_data; + node_velocities_interface = (*forward_solve_velocity_data)[cycle + 1]->getLocalView(Tpetra::Access::ReadOnly); + previous_node_velocities_interface = (*forward_solve_velocity_data)[cycle]->getLocalView(Tpetra::Access::ReadOnly); + } + + double KE_sum = 0.0; + double KE_loc_sum = 0.0; + + // extensive KE + if(FEM_SGH_->simparam->optimization_options.optimization_objective_regions.size()){ + int nobj_volumes = FEM_SGH_->simparam->optimization_options.optimization_objective_regions.size(); + const_vec_array all_initial_node_coords = FEM_SGH_->all_initial_node_coords_distributed->getLocalView(Tpetra::Access::ReadOnly); + REDUCE_SUM_CLASS(node_gid, 0, nlocal_nodes, KE_loc_sum, { + double ke = 0; + double current_node_coords[3]; + bool contained = false; + current_node_coords[0] = all_initial_node_coords(node_gid, 0); + current_node_coords[1] = all_initial_node_coords(node_gid, 1); + current_node_coords[2] = all_initial_node_coords(node_gid, 2); + for(int ivolume = 0; ivolume < nobj_volumes; ivolume++){ + if(FEM_SGH_->simparam->optimization_options.optimization_objective_regions(ivolume).contains(current_node_coords)){ + contained = true; + } + } + if(contained){ + for (size_t dim = 0; dim < num_dim; dim++) { + // midpoint integration approximation + ke += (node_velocities_interface(node_gid, dim) + previous_node_velocities_interface(node_gid, dim)) * + (node_velocities_interface(node_gid, dim) + previous_node_velocities_interface(node_gid, dim)) / 4; // 1/2 at end + } // end for + } + + if (num_dim == 2) { + KE_loc_sum += node_mass(node_gid) * node_coords(rk_level, node_gid, 1) * ke; + } + else{ + KE_loc_sum += node_mass(node_gid) * ke; + } + }, KE_sum); + } + else{ + REDUCE_SUM_CLASS(node_gid, 0, nlocal_nodes, KE_loc_sum, { + double ke = 0; + for (size_t dim = 0; dim < num_dim; dim++) { + // midpoint integration approximation + ke += (node_velocities_interface(node_gid, dim) + previous_node_velocities_interface(node_gid, dim)) * + (node_velocities_interface(node_gid, dim) + previous_node_velocities_interface(node_gid, dim)) / 4; // 1/2 at end + } // end for + + if (num_dim == 2) { + KE_loc_sum += node_mass(node_gid) * node_coords(rk_level, node_gid, 1) * ke; + } + else{ + KE_loc_sum += node_mass(node_gid) * ke; + } + }, KE_sum); + } + Kokkos::fence(); + KE_sum = 0.5 * KE_sum; + objective_accumulation += KE_sum * dt; + } + /* -------------------------------------------------------------------------------------- Update objective value with the current design variable vector, z ----------------------------------------------------------------------------------------- */ From 7651f0af2775463a7274f7e3bb23b80e77b1913a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CAdrian-Diaz=E2=80=9D?= <“adriandiaz1117@gmail.com”> Date: Tue, 13 Aug 2024 14:12:16 -0600 Subject: [PATCH 120/233] BUG: dont use host class pointer in device kernel --- .../Topology_Optimization/Kinetic_Energy_Minimize.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Parallel-Solvers/Parallel-Explicit/Topology_Optimization/Kinetic_Energy_Minimize.h b/src/Parallel-Solvers/Parallel-Explicit/Topology_Optimization/Kinetic_Energy_Minimize.h index 0b6c81581..49eed273e 100644 --- a/src/Parallel-Solvers/Parallel-Explicit/Topology_Optimization/Kinetic_Energy_Minimize.h +++ b/src/Parallel-Solvers/Parallel-Explicit/Topology_Optimization/Kinetic_Energy_Minimize.h @@ -385,10 +385,10 @@ typedef MV::dual_view_type dual_vec_array; double KE_sum = 0.0; double KE_loc_sum = 0.0; - // extensive KE if(FEM_SGH_->simparam->optimization_options.optimization_objective_regions.size()){ int nobj_volumes = FEM_SGH_->simparam->optimization_options.optimization_objective_regions.size(); + auto optimization_objective_regions = FEM_SGH_->simparam->optimization_options.optimization_objective_regions; const_vec_array all_initial_node_coords = FEM_SGH_->all_initial_node_coords_distributed->getLocalView(Tpetra::Access::ReadOnly); REDUCE_SUM_CLASS(node_gid, 0, nlocal_nodes, KE_loc_sum, { double ke = 0; @@ -398,7 +398,7 @@ typedef MV::dual_view_type dual_vec_array; current_node_coords[1] = all_initial_node_coords(node_gid, 1); current_node_coords[2] = all_initial_node_coords(node_gid, 2); for(int ivolume = 0; ivolume < nobj_volumes; ivolume++){ - if(FEM_SGH_->simparam->optimization_options.optimization_objective_regions(ivolume).contains(current_node_coords)){ + if(optimization_objective_regions(ivolume).contains(current_node_coords)){ contained = true; } } From a2bc65b9a8a2313d4bc02dfdda94b8af24c1267a Mon Sep 17 00:00:00 2001 From: Jacob Moore <133793250+jacob-moore22@users.noreply.github.com> Date: Wed, 14 Aug 2024 12:33:34 -0500 Subject: [PATCH 121/233] Mesh readers (#218) * ENH: Adding vtk writer WIP * ENH: Add serial vtk writer to refactor branch * BUG: fix t=0 time dump * BUG: Added missing host to mesh reader * STYLE: Cleaning up commented out code * ENH: Clean up BCs and add RK stage * STYLE: Uncrustify common * STYLE: Uncrustify solvers * ENH: Adding high order mesh builder WIP * ENH: Adding high order mesh generator, WIP * ENH: HO mesh builder builds * ENH: Adding test for reading ensight mesh * BUG: Fix wrong GPU memory access in state writer --- docs/formatting/uncrustify.cfg | 8 +- .../standard_inputs/Sedov_Read_Ensight.yaml | 92 + .../standard_inputs/meshes/mesh_Sedov_16.geo | 18846 ++++++++++++++++ .../state/mat_pt_state_t_1.0000e+00.txt | 4098 ++++ .../regression_tests/test_refactor.py | 2 +- .../Solvers/SGH_solver/include/sgh_solver.h | 112 +- .../src/Solvers/SGH_solver/src/boundary.cpp | 42 +- .../src/Solvers/SGH_solver/src/energy_sgh.cpp | 18 +- .../src/Solvers/SGH_solver/src/force_sgh.cpp | 172 +- .../src/Solvers/SGH_solver/src/momentum.cpp | 100 +- .../src/Solvers/SGH_solver/src/properties.cpp | 125 +- .../Solvers/SGH_solver/src/sgh_execute.cpp | 216 +- .../src/Solvers/SGH_solver/src/sgh_setup.cpp | 231 +- .../SGH_solver/src/time_integration.cpp | 80 +- .../velocity/constant_velocity_bc.h | 47 +- .../velocity/no_velocity_bc.h | 38 +- .../velocity/piston_velocity_bc.h | 56 +- .../velocity/reflected_velocity_bc.h | 52 +- .../velocity/time_varying_velocity_bc.h | 90 +- .../velocity/user_defined_velocity_bc.h | 40 +- .../velocity/zero_velocity_bc.h | 47 +- .../src/common/boundary_conditions.h | 106 +- .../src/common/geometry_new.h | 258 +- single-node-refactor/src/common/material.h | 217 +- single-node-refactor/src/common/mesh.h | 19 +- single-node-refactor/src/common/mesh_inputs.h | 16 +- single-node-refactor/src/common/mesh_io.h | 812 +- single-node-refactor/src/common/mesh_old.h | 76 +- .../src/common/output_options.h | 2 +- single-node-refactor/src/common/region.h | 31 +- single-node-refactor/src/common/region_fill.h | 649 +- .../src/common/simulation_parameters.h | 3 +- single-node-refactor/src/common/state.h | 60 +- .../src/common/string_utils.h | 70 +- single-node-refactor/src/driver.cpp | 4 +- 35 files changed, 24989 insertions(+), 1846 deletions(-) create mode 100644 single-node-refactor/regression_tests/standard_inputs/Sedov_Read_Ensight.yaml create mode 100644 single-node-refactor/regression_tests/standard_inputs/meshes/mesh_Sedov_16.geo create mode 100644 single-node-refactor/regression_tests/standard_results/Sedov_Read_Ensight/state/mat_pt_state_t_1.0000e+00.txt diff --git a/docs/formatting/uncrustify.cfg b/docs/formatting/uncrustify.cfg index 2d050b858..e099130e5 100755 --- a/docs/formatting/uncrustify.cfg +++ b/docs/formatting/uncrustify.cfg @@ -7,7 +7,7 @@ indent_columns = 4 # number # The continuation indent. If non-zero, this overrides the indent of '(' and '=' continuation indents. # For FreeBSD, this is set to 4. Negative value is absolute and not increased for each ( level -indent_continue = 0 # number +indent_continue = 4 # number # How to use tabs when indenting code # 0=spaces only @@ -21,16 +21,16 @@ indent_access_spec_body = true # false/true # True: indent continued function call parameters one indent level # False: align parameters under the open paren -indent_func_call_param = true # false/true +indent_func_call_param = false # false/true # Same as indent_func_call_param, but for function defs -indent_func_def_param = false # false/true +indent_func_def_param = false # false/true # for function definitions, only if indent_func_def_param is false # Allows to align params when appropriate and indent them when not # behave as if it was true if paren position is more than this value # if paren position is more than the option value -indent_func_def_param_paren_pos_threshold = 6 # unsigned number +indent_func_def_param_paren_pos_threshold = 28 # unsigned number # Same as indent_func_call_param, but for function protos indent_func_proto_param = false # false/true diff --git a/single-node-refactor/regression_tests/standard_inputs/Sedov_Read_Ensight.yaml b/single-node-refactor/regression_tests/standard_inputs/Sedov_Read_Ensight.yaml new file mode 100644 index 000000000..c748d2c1e --- /dev/null +++ b/single-node-refactor/regression_tests/standard_inputs/Sedov_Read_Ensight.yaml @@ -0,0 +1,92 @@ +# Sedov Test Problem + +dynamic_options: + time_final: 1.0 + dt_min: 1.e-8 + dt_max: 1.e-2 + dt_start: 1.e-5 + cycle_stop: 300000 + +mesh_options: + source: file + file_path: standard_inputs/meshes/mesh_Sedov_16.geo + num_dims: 3 + + +output_options: + timer_output_level: thorough + output_file_format: state + graphics_time_step: 1.0 + +solver_options: + - solver: + method: SGH + +boundary_conditions: + # Tag X plane + - boundary_condition: + solver: SGH + geometry: x_plane + direction: x_dir + value: 0.0 + type: reflected_velocity + + + # Tag Y plane + - boundary_condition: + solver: SGH + geometry: y_plane + direction: y_dir + value: 0.0 + type: reflected_velocity + + # Tag z plane + - boundary_condition: + solver: SGH + geometry: z_plane + direction: z_dir + value: 0.0 + type: reflected_velocity + +materials: + - material: + id: 0 + eos_model_type: decoupled + eos_model: gamma_law_gas + q1: 1.0 + q2: 1.333 + q1ex: 1.0 + q2ex: 1.333 + eos_global_vars: + - 1.666666666666667 + - 1.0E-14 + - 1.0 + +regions: + - fill_volume: + type: global + material_id: 0 + den: 1.0 + sie: 1.e-14 + velocity: cartesian + u: 0.0 + v: 0.0 + w: 0.0 + + + + # energy source initial conditions + - fill_volume: + type: sphere + origin: [0.0, 0.0, 0.0] + radius1: 0.0 + radius2: 0.1 + material_id: 0 + den: 1.0 + sie: 61.67375002 + velocity: cartesian + u: 0.0 + v: 0.0 + w: 0.0 + + diff --git a/single-node-refactor/regression_tests/standard_inputs/meshes/mesh_Sedov_16.geo b/single-node-refactor/regression_tests/standard_inputs/meshes/mesh_Sedov_16.geo new file mode 100644 index 000000000..506431765 --- /dev/null +++ b/single-node-refactor/regression_tests/standard_inputs/meshes/mesh_Sedov_16.geo @@ -0,0 +1,18846 @@ +This is the 1st description line of the EnSight Gold geometry example +This is the 2nd description line of the EnSight Gold geometry example +node id assign +element id assign +part + 1 +Mesh +coordinates + 4913 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 7.50000e-02 + 1.50000e-01 + 2.25000e-01 + 3.00000e-01 + 3.75000e-01 + 4.50000e-01 + 5.25000e-01 + 6.00000e-01 + 6.75000e-01 + 7.50000e-01 + 8.25000e-01 + 9.00000e-01 + 9.75000e-01 + 1.05000e+00 + 1.12500e+00 + 1.20000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 0.00000e+00 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 7.50000e-02 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 1.50000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 2.25000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.00000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 3.75000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 4.50000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 5.25000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.00000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 6.75000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 7.50000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 8.25000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.00000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 9.75000e-01 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.05000e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.12500e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 + 1.20000e+00 +hexa8 + 4096 + 1 2 19 18 290 291 308 307 + 2 3 20 19 291 292 309 308 + 3 4 21 20 292 293 310 309 + 4 5 22 21 293 294 311 310 + 5 6 23 22 294 295 312 311 + 6 7 24 23 295 296 313 312 + 7 8 25 24 296 297 314 313 + 8 9 26 25 297 298 315 314 + 9 10 27 26 298 299 316 315 + 10 11 28 27 299 300 317 316 + 11 12 29 28 300 301 318 317 + 12 13 30 29 301 302 319 318 + 13 14 31 30 302 303 320 319 + 14 15 32 31 303 304 321 320 + 15 16 33 32 304 305 322 321 + 16 17 34 33 305 306 323 322 + 18 19 36 35 307 308 325 324 + 19 20 37 36 308 309 326 325 + 20 21 38 37 309 310 327 326 + 21 22 39 38 310 311 328 327 + 22 23 40 39 311 312 329 328 + 23 24 41 40 312 313 330 329 + 24 25 42 41 313 314 331 330 + 25 26 43 42 314 315 332 331 + 26 27 44 43 315 316 333 332 + 27 28 45 44 316 317 334 333 + 28 29 46 45 317 318 335 334 + 29 30 47 46 318 319 336 335 + 30 31 48 47 319 320 337 336 + 31 32 49 48 320 321 338 337 + 32 33 50 49 321 322 339 338 + 33 34 51 50 322 323 340 339 + 35 36 53 52 324 325 342 341 + 36 37 54 53 325 326 343 342 + 37 38 55 54 326 327 344 343 + 38 39 56 55 327 328 345 344 + 39 40 57 56 328 329 346 345 + 40 41 58 57 329 330 347 346 + 41 42 59 58 330 331 348 347 + 42 43 60 59 331 332 349 348 + 43 44 61 60 332 333 350 349 + 44 45 62 61 333 334 351 350 + 45 46 63 62 334 335 352 351 + 46 47 64 63 335 336 353 352 + 47 48 65 64 336 337 354 353 + 48 49 66 65 337 338 355 354 + 49 50 67 66 338 339 356 355 + 50 51 68 67 339 340 357 356 + 52 53 70 69 341 342 359 358 + 53 54 71 70 342 343 360 359 + 54 55 72 71 343 344 361 360 + 55 56 73 72 344 345 362 361 + 56 57 74 73 345 346 363 362 + 57 58 75 74 346 347 364 363 + 58 59 76 75 347 348 365 364 + 59 60 77 76 348 349 366 365 + 60 61 78 77 349 350 367 366 + 61 62 79 78 350 351 368 367 + 62 63 80 79 351 352 369 368 + 63 64 81 80 352 353 370 369 + 64 65 82 81 353 354 371 370 + 65 66 83 82 354 355 372 371 + 66 67 84 83 355 356 373 372 + 67 68 85 84 356 357 374 373 + 69 70 87 86 358 359 376 375 + 70 71 88 87 359 360 377 376 + 71 72 89 88 360 361 378 377 + 72 73 90 89 361 362 379 378 + 73 74 91 90 362 363 380 379 + 74 75 92 91 363 364 381 380 + 75 76 93 92 364 365 382 381 + 76 77 94 93 365 366 383 382 + 77 78 95 94 366 367 384 383 + 78 79 96 95 367 368 385 384 + 79 80 97 96 368 369 386 385 + 80 81 98 97 369 370 387 386 + 81 82 99 98 370 371 388 387 + 82 83 100 99 371 372 389 388 + 83 84 101 100 372 373 390 389 + 84 85 102 101 373 374 391 390 + 86 87 104 103 375 376 393 392 + 87 88 105 104 376 377 394 393 + 88 89 106 105 377 378 395 394 + 89 90 107 106 378 379 396 395 + 90 91 108 107 379 380 397 396 + 91 92 109 108 380 381 398 397 + 92 93 110 109 381 382 399 398 + 93 94 111 110 382 383 400 399 + 94 95 112 111 383 384 401 400 + 95 96 113 112 384 385 402 401 + 96 97 114 113 385 386 403 402 + 97 98 115 114 386 387 404 403 + 98 99 116 115 387 388 405 404 + 99 100 117 116 388 389 406 405 + 100 101 118 117 389 390 407 406 + 101 102 119 118 390 391 408 407 + 103 104 121 120 392 393 410 409 + 104 105 122 121 393 394 411 410 + 105 106 123 122 394 395 412 411 + 106 107 124 123 395 396 413 412 + 107 108 125 124 396 397 414 413 + 108 109 126 125 397 398 415 414 + 109 110 127 126 398 399 416 415 + 110 111 128 127 399 400 417 416 + 111 112 129 128 400 401 418 417 + 112 113 130 129 401 402 419 418 + 113 114 131 130 402 403 420 419 + 114 115 132 131 403 404 421 420 + 115 116 133 132 404 405 422 421 + 116 117 134 133 405 406 423 422 + 117 118 135 134 406 407 424 423 + 118 119 136 135 407 408 425 424 + 120 121 138 137 409 410 427 426 + 121 122 139 138 410 411 428 427 + 122 123 140 139 411 412 429 428 + 123 124 141 140 412 413 430 429 + 124 125 142 141 413 414 431 430 + 125 126 143 142 414 415 432 431 + 126 127 144 143 415 416 433 432 + 127 128 145 144 416 417 434 433 + 128 129 146 145 417 418 435 434 + 129 130 147 146 418 419 436 435 + 130 131 148 147 419 420 437 436 + 131 132 149 148 420 421 438 437 + 132 133 150 149 421 422 439 438 + 133 134 151 150 422 423 440 439 + 134 135 152 151 423 424 441 440 + 135 136 153 152 424 425 442 441 + 137 138 155 154 426 427 444 443 + 138 139 156 155 427 428 445 444 + 139 140 157 156 428 429 446 445 + 140 141 158 157 429 430 447 446 + 141 142 159 158 430 431 448 447 + 142 143 160 159 431 432 449 448 + 143 144 161 160 432 433 450 449 + 144 145 162 161 433 434 451 450 + 145 146 163 162 434 435 452 451 + 146 147 164 163 435 436 453 452 + 147 148 165 164 436 437 454 453 + 148 149 166 165 437 438 455 454 + 149 150 167 166 438 439 456 455 + 150 151 168 167 439 440 457 456 + 151 152 169 168 440 441 458 457 + 152 153 170 169 441 442 459 458 + 154 155 172 171 443 444 461 460 + 155 156 173 172 444 445 462 461 + 156 157 174 173 445 446 463 462 + 157 158 175 174 446 447 464 463 + 158 159 176 175 447 448 465 464 + 159 160 177 176 448 449 466 465 + 160 161 178 177 449 450 467 466 + 161 162 179 178 450 451 468 467 + 162 163 180 179 451 452 469 468 + 163 164 181 180 452 453 470 469 + 164 165 182 181 453 454 471 470 + 165 166 183 182 454 455 472 471 + 166 167 184 183 455 456 473 472 + 167 168 185 184 456 457 474 473 + 168 169 186 185 457 458 475 474 + 169 170 187 186 458 459 476 475 + 171 172 189 188 460 461 478 477 + 172 173 190 189 461 462 479 478 + 173 174 191 190 462 463 480 479 + 174 175 192 191 463 464 481 480 + 175 176 193 192 464 465 482 481 + 176 177 194 193 465 466 483 482 + 177 178 195 194 466 467 484 483 + 178 179 196 195 467 468 485 484 + 179 180 197 196 468 469 486 485 + 180 181 198 197 469 470 487 486 + 181 182 199 198 470 471 488 487 + 182 183 200 199 471 472 489 488 + 183 184 201 200 472 473 490 489 + 184 185 202 201 473 474 491 490 + 185 186 203 202 474 475 492 491 + 186 187 204 203 475 476 493 492 + 188 189 206 205 477 478 495 494 + 189 190 207 206 478 479 496 495 + 190 191 208 207 479 480 497 496 + 191 192 209 208 480 481 498 497 + 192 193 210 209 481 482 499 498 + 193 194 211 210 482 483 500 499 + 194 195 212 211 483 484 501 500 + 195 196 213 212 484 485 502 501 + 196 197 214 213 485 486 503 502 + 197 198 215 214 486 487 504 503 + 198 199 216 215 487 488 505 504 + 199 200 217 216 488 489 506 505 + 200 201 218 217 489 490 507 506 + 201 202 219 218 490 491 508 507 + 202 203 220 219 491 492 509 508 + 203 204 221 220 492 493 510 509 + 205 206 223 222 494 495 512 511 + 206 207 224 223 495 496 513 512 + 207 208 225 224 496 497 514 513 + 208 209 226 225 497 498 515 514 + 209 210 227 226 498 499 516 515 + 210 211 228 227 499 500 517 516 + 211 212 229 228 500 501 518 517 + 212 213 230 229 501 502 519 518 + 213 214 231 230 502 503 520 519 + 214 215 232 231 503 504 521 520 + 215 216 233 232 504 505 522 521 + 216 217 234 233 505 506 523 522 + 217 218 235 234 506 507 524 523 + 218 219 236 235 507 508 525 524 + 219 220 237 236 508 509 526 525 + 220 221 238 237 509 510 527 526 + 222 223 240 239 511 512 529 528 + 223 224 241 240 512 513 530 529 + 224 225 242 241 513 514 531 530 + 225 226 243 242 514 515 532 531 + 226 227 244 243 515 516 533 532 + 227 228 245 244 516 517 534 533 + 228 229 246 245 517 518 535 534 + 229 230 247 246 518 519 536 535 + 230 231 248 247 519 520 537 536 + 231 232 249 248 520 521 538 537 + 232 233 250 249 521 522 539 538 + 233 234 251 250 522 523 540 539 + 234 235 252 251 523 524 541 540 + 235 236 253 252 524 525 542 541 + 236 237 254 253 525 526 543 542 + 237 238 255 254 526 527 544 543 + 239 240 257 256 528 529 546 545 + 240 241 258 257 529 530 547 546 + 241 242 259 258 530 531 548 547 + 242 243 260 259 531 532 549 548 + 243 244 261 260 532 533 550 549 + 244 245 262 261 533 534 551 550 + 245 246 263 262 534 535 552 551 + 246 247 264 263 535 536 553 552 + 247 248 265 264 536 537 554 553 + 248 249 266 265 537 538 555 554 + 249 250 267 266 538 539 556 555 + 250 251 268 267 539 540 557 556 + 251 252 269 268 540 541 558 557 + 252 253 270 269 541 542 559 558 + 253 254 271 270 542 543 560 559 + 254 255 272 271 543 544 561 560 + 256 257 274 273 545 546 563 562 + 257 258 275 274 546 547 564 563 + 258 259 276 275 547 548 565 564 + 259 260 277 276 548 549 566 565 + 260 261 278 277 549 550 567 566 + 261 262 279 278 550 551 568 567 + 262 263 280 279 551 552 569 568 + 263 264 281 280 552 553 570 569 + 264 265 282 281 553 554 571 570 + 265 266 283 282 554 555 572 571 + 266 267 284 283 555 556 573 572 + 267 268 285 284 556 557 574 573 + 268 269 286 285 557 558 575 574 + 269 270 287 286 558 559 576 575 + 270 271 288 287 559 560 577 576 + 271 272 289 288 560 561 578 577 + 290 291 308 307 579 580 597 596 + 291 292 309 308 580 581 598 597 + 292 293 310 309 581 582 599 598 + 293 294 311 310 582 583 600 599 + 294 295 312 311 583 584 601 600 + 295 296 313 312 584 585 602 601 + 296 297 314 313 585 586 603 602 + 297 298 315 314 586 587 604 603 + 298 299 316 315 587 588 605 604 + 299 300 317 316 588 589 606 605 + 300 301 318 317 589 590 607 606 + 301 302 319 318 590 591 608 607 + 302 303 320 319 591 592 609 608 + 303 304 321 320 592 593 610 609 + 304 305 322 321 593 594 611 610 + 305 306 323 322 594 595 612 611 + 307 308 325 324 596 597 614 613 + 308 309 326 325 597 598 615 614 + 309 310 327 326 598 599 616 615 + 310 311 328 327 599 600 617 616 + 311 312 329 328 600 601 618 617 + 312 313 330 329 601 602 619 618 + 313 314 331 330 602 603 620 619 + 314 315 332 331 603 604 621 620 + 315 316 333 332 604 605 622 621 + 316 317 334 333 605 606 623 622 + 317 318 335 334 606 607 624 623 + 318 319 336 335 607 608 625 624 + 319 320 337 336 608 609 626 625 + 320 321 338 337 609 610 627 626 + 321 322 339 338 610 611 628 627 + 322 323 340 339 611 612 629 628 + 324 325 342 341 613 614 631 630 + 325 326 343 342 614 615 632 631 + 326 327 344 343 615 616 633 632 + 327 328 345 344 616 617 634 633 + 328 329 346 345 617 618 635 634 + 329 330 347 346 618 619 636 635 + 330 331 348 347 619 620 637 636 + 331 332 349 348 620 621 638 637 + 332 333 350 349 621 622 639 638 + 333 334 351 350 622 623 640 639 + 334 335 352 351 623 624 641 640 + 335 336 353 352 624 625 642 641 + 336 337 354 353 625 626 643 642 + 337 338 355 354 626 627 644 643 + 338 339 356 355 627 628 645 644 + 339 340 357 356 628 629 646 645 + 341 342 359 358 630 631 648 647 + 342 343 360 359 631 632 649 648 + 343 344 361 360 632 633 650 649 + 344 345 362 361 633 634 651 650 + 345 346 363 362 634 635 652 651 + 346 347 364 363 635 636 653 652 + 347 348 365 364 636 637 654 653 + 348 349 366 365 637 638 655 654 + 349 350 367 366 638 639 656 655 + 350 351 368 367 639 640 657 656 + 351 352 369 368 640 641 658 657 + 352 353 370 369 641 642 659 658 + 353 354 371 370 642 643 660 659 + 354 355 372 371 643 644 661 660 + 355 356 373 372 644 645 662 661 + 356 357 374 373 645 646 663 662 + 358 359 376 375 647 648 665 664 + 359 360 377 376 648 649 666 665 + 360 361 378 377 649 650 667 666 + 361 362 379 378 650 651 668 667 + 362 363 380 379 651 652 669 668 + 363 364 381 380 652 653 670 669 + 364 365 382 381 653 654 671 670 + 365 366 383 382 654 655 672 671 + 366 367 384 383 655 656 673 672 + 367 368 385 384 656 657 674 673 + 368 369 386 385 657 658 675 674 + 369 370 387 386 658 659 676 675 + 370 371 388 387 659 660 677 676 + 371 372 389 388 660 661 678 677 + 372 373 390 389 661 662 679 678 + 373 374 391 390 662 663 680 679 + 375 376 393 392 664 665 682 681 + 376 377 394 393 665 666 683 682 + 377 378 395 394 666 667 684 683 + 378 379 396 395 667 668 685 684 + 379 380 397 396 668 669 686 685 + 380 381 398 397 669 670 687 686 + 381 382 399 398 670 671 688 687 + 382 383 400 399 671 672 689 688 + 383 384 401 400 672 673 690 689 + 384 385 402 401 673 674 691 690 + 385 386 403 402 674 675 692 691 + 386 387 404 403 675 676 693 692 + 387 388 405 404 676 677 694 693 + 388 389 406 405 677 678 695 694 + 389 390 407 406 678 679 696 695 + 390 391 408 407 679 680 697 696 + 392 393 410 409 681 682 699 698 + 393 394 411 410 682 683 700 699 + 394 395 412 411 683 684 701 700 + 395 396 413 412 684 685 702 701 + 396 397 414 413 685 686 703 702 + 397 398 415 414 686 687 704 703 + 398 399 416 415 687 688 705 704 + 399 400 417 416 688 689 706 705 + 400 401 418 417 689 690 707 706 + 401 402 419 418 690 691 708 707 + 402 403 420 419 691 692 709 708 + 403 404 421 420 692 693 710 709 + 404 405 422 421 693 694 711 710 + 405 406 423 422 694 695 712 711 + 406 407 424 423 695 696 713 712 + 407 408 425 424 696 697 714 713 + 409 410 427 426 698 699 716 715 + 410 411 428 427 699 700 717 716 + 411 412 429 428 700 701 718 717 + 412 413 430 429 701 702 719 718 + 413 414 431 430 702 703 720 719 + 414 415 432 431 703 704 721 720 + 415 416 433 432 704 705 722 721 + 416 417 434 433 705 706 723 722 + 417 418 435 434 706 707 724 723 + 418 419 436 435 707 708 725 724 + 419 420 437 436 708 709 726 725 + 420 421 438 437 709 710 727 726 + 421 422 439 438 710 711 728 727 + 422 423 440 439 711 712 729 728 + 423 424 441 440 712 713 730 729 + 424 425 442 441 713 714 731 730 + 426 427 444 443 715 716 733 732 + 427 428 445 444 716 717 734 733 + 428 429 446 445 717 718 735 734 + 429 430 447 446 718 719 736 735 + 430 431 448 447 719 720 737 736 + 431 432 449 448 720 721 738 737 + 432 433 450 449 721 722 739 738 + 433 434 451 450 722 723 740 739 + 434 435 452 451 723 724 741 740 + 435 436 453 452 724 725 742 741 + 436 437 454 453 725 726 743 742 + 437 438 455 454 726 727 744 743 + 438 439 456 455 727 728 745 744 + 439 440 457 456 728 729 746 745 + 440 441 458 457 729 730 747 746 + 441 442 459 458 730 731 748 747 + 443 444 461 460 732 733 750 749 + 444 445 462 461 733 734 751 750 + 445 446 463 462 734 735 752 751 + 446 447 464 463 735 736 753 752 + 447 448 465 464 736 737 754 753 + 448 449 466 465 737 738 755 754 + 449 450 467 466 738 739 756 755 + 450 451 468 467 739 740 757 756 + 451 452 469 468 740 741 758 757 + 452 453 470 469 741 742 759 758 + 453 454 471 470 742 743 760 759 + 454 455 472 471 743 744 761 760 + 455 456 473 472 744 745 762 761 + 456 457 474 473 745 746 763 762 + 457 458 475 474 746 747 764 763 + 458 459 476 475 747 748 765 764 + 460 461 478 477 749 750 767 766 + 461 462 479 478 750 751 768 767 + 462 463 480 479 751 752 769 768 + 463 464 481 480 752 753 770 769 + 464 465 482 481 753 754 771 770 + 465 466 483 482 754 755 772 771 + 466 467 484 483 755 756 773 772 + 467 468 485 484 756 757 774 773 + 468 469 486 485 757 758 775 774 + 469 470 487 486 758 759 776 775 + 470 471 488 487 759 760 777 776 + 471 472 489 488 760 761 778 777 + 472 473 490 489 761 762 779 778 + 473 474 491 490 762 763 780 779 + 474 475 492 491 763 764 781 780 + 475 476 493 492 764 765 782 781 + 477 478 495 494 766 767 784 783 + 478 479 496 495 767 768 785 784 + 479 480 497 496 768 769 786 785 + 480 481 498 497 769 770 787 786 + 481 482 499 498 770 771 788 787 + 482 483 500 499 771 772 789 788 + 483 484 501 500 772 773 790 789 + 484 485 502 501 773 774 791 790 + 485 486 503 502 774 775 792 791 + 486 487 504 503 775 776 793 792 + 487 488 505 504 776 777 794 793 + 488 489 506 505 777 778 795 794 + 489 490 507 506 778 779 796 795 + 490 491 508 507 779 780 797 796 + 491 492 509 508 780 781 798 797 + 492 493 510 509 781 782 799 798 + 494 495 512 511 783 784 801 800 + 495 496 513 512 784 785 802 801 + 496 497 514 513 785 786 803 802 + 497 498 515 514 786 787 804 803 + 498 499 516 515 787 788 805 804 + 499 500 517 516 788 789 806 805 + 500 501 518 517 789 790 807 806 + 501 502 519 518 790 791 808 807 + 502 503 520 519 791 792 809 808 + 503 504 521 520 792 793 810 809 + 504 505 522 521 793 794 811 810 + 505 506 523 522 794 795 812 811 + 506 507 524 523 795 796 813 812 + 507 508 525 524 796 797 814 813 + 508 509 526 525 797 798 815 814 + 509 510 527 526 798 799 816 815 + 511 512 529 528 800 801 818 817 + 512 513 530 529 801 802 819 818 + 513 514 531 530 802 803 820 819 + 514 515 532 531 803 804 821 820 + 515 516 533 532 804 805 822 821 + 516 517 534 533 805 806 823 822 + 517 518 535 534 806 807 824 823 + 518 519 536 535 807 808 825 824 + 519 520 537 536 808 809 826 825 + 520 521 538 537 809 810 827 826 + 521 522 539 538 810 811 828 827 + 522 523 540 539 811 812 829 828 + 523 524 541 540 812 813 830 829 + 524 525 542 541 813 814 831 830 + 525 526 543 542 814 815 832 831 + 526 527 544 543 815 816 833 832 + 528 529 546 545 817 818 835 834 + 529 530 547 546 818 819 836 835 + 530 531 548 547 819 820 837 836 + 531 532 549 548 820 821 838 837 + 532 533 550 549 821 822 839 838 + 533 534 551 550 822 823 840 839 + 534 535 552 551 823 824 841 840 + 535 536 553 552 824 825 842 841 + 536 537 554 553 825 826 843 842 + 537 538 555 554 826 827 844 843 + 538 539 556 555 827 828 845 844 + 539 540 557 556 828 829 846 845 + 540 541 558 557 829 830 847 846 + 541 542 559 558 830 831 848 847 + 542 543 560 559 831 832 849 848 + 543 544 561 560 832 833 850 849 + 545 546 563 562 834 835 852 851 + 546 547 564 563 835 836 853 852 + 547 548 565 564 836 837 854 853 + 548 549 566 565 837 838 855 854 + 549 550 567 566 838 839 856 855 + 550 551 568 567 839 840 857 856 + 551 552 569 568 840 841 858 857 + 552 553 570 569 841 842 859 858 + 553 554 571 570 842 843 860 859 + 554 555 572 571 843 844 861 860 + 555 556 573 572 844 845 862 861 + 556 557 574 573 845 846 863 862 + 557 558 575 574 846 847 864 863 + 558 559 576 575 847 848 865 864 + 559 560 577 576 848 849 866 865 + 560 561 578 577 849 850 867 866 + 579 580 597 596 868 869 886 885 + 580 581 598 597 869 870 887 886 + 581 582 599 598 870 871 888 887 + 582 583 600 599 871 872 889 888 + 583 584 601 600 872 873 890 889 + 584 585 602 601 873 874 891 890 + 585 586 603 602 874 875 892 891 + 586 587 604 603 875 876 893 892 + 587 588 605 604 876 877 894 893 + 588 589 606 605 877 878 895 894 + 589 590 607 606 878 879 896 895 + 590 591 608 607 879 880 897 896 + 591 592 609 608 880 881 898 897 + 592 593 610 609 881 882 899 898 + 593 594 611 610 882 883 900 899 + 594 595 612 611 883 884 901 900 + 596 597 614 613 885 886 903 902 + 597 598 615 614 886 887 904 903 + 598 599 616 615 887 888 905 904 + 599 600 617 616 888 889 906 905 + 600 601 618 617 889 890 907 906 + 601 602 619 618 890 891 908 907 + 602 603 620 619 891 892 909 908 + 603 604 621 620 892 893 910 909 + 604 605 622 621 893 894 911 910 + 605 606 623 622 894 895 912 911 + 606 607 624 623 895 896 913 912 + 607 608 625 624 896 897 914 913 + 608 609 626 625 897 898 915 914 + 609 610 627 626 898 899 916 915 + 610 611 628 627 899 900 917 916 + 611 612 629 628 900 901 918 917 + 613 614 631 630 902 903 920 919 + 614 615 632 631 903 904 921 920 + 615 616 633 632 904 905 922 921 + 616 617 634 633 905 906 923 922 + 617 618 635 634 906 907 924 923 + 618 619 636 635 907 908 925 924 + 619 620 637 636 908 909 926 925 + 620 621 638 637 909 910 927 926 + 621 622 639 638 910 911 928 927 + 622 623 640 639 911 912 929 928 + 623 624 641 640 912 913 930 929 + 624 625 642 641 913 914 931 930 + 625 626 643 642 914 915 932 931 + 626 627 644 643 915 916 933 932 + 627 628 645 644 916 917 934 933 + 628 629 646 645 917 918 935 934 + 630 631 648 647 919 920 937 936 + 631 632 649 648 920 921 938 937 + 632 633 650 649 921 922 939 938 + 633 634 651 650 922 923 940 939 + 634 635 652 651 923 924 941 940 + 635 636 653 652 924 925 942 941 + 636 637 654 653 925 926 943 942 + 637 638 655 654 926 927 944 943 + 638 639 656 655 927 928 945 944 + 639 640 657 656 928 929 946 945 + 640 641 658 657 929 930 947 946 + 641 642 659 658 930 931 948 947 + 642 643 660 659 931 932 949 948 + 643 644 661 660 932 933 950 949 + 644 645 662 661 933 934 951 950 + 645 646 663 662 934 935 952 951 + 647 648 665 664 936 937 954 953 + 648 649 666 665 937 938 955 954 + 649 650 667 666 938 939 956 955 + 650 651 668 667 939 940 957 956 + 651 652 669 668 940 941 958 957 + 652 653 670 669 941 942 959 958 + 653 654 671 670 942 943 960 959 + 654 655 672 671 943 944 961 960 + 655 656 673 672 944 945 962 961 + 656 657 674 673 945 946 963 962 + 657 658 675 674 946 947 964 963 + 658 659 676 675 947 948 965 964 + 659 660 677 676 948 949 966 965 + 660 661 678 677 949 950 967 966 + 661 662 679 678 950 951 968 967 + 662 663 680 679 951 952 969 968 + 664 665 682 681 953 954 971 970 + 665 666 683 682 954 955 972 971 + 666 667 684 683 955 956 973 972 + 667 668 685 684 956 957 974 973 + 668 669 686 685 957 958 975 974 + 669 670 687 686 958 959 976 975 + 670 671 688 687 959 960 977 976 + 671 672 689 688 960 961 978 977 + 672 673 690 689 961 962 979 978 + 673 674 691 690 962 963 980 979 + 674 675 692 691 963 964 981 980 + 675 676 693 692 964 965 982 981 + 676 677 694 693 965 966 983 982 + 677 678 695 694 966 967 984 983 + 678 679 696 695 967 968 985 984 + 679 680 697 696 968 969 986 985 + 681 682 699 698 970 971 988 987 + 682 683 700 699 971 972 989 988 + 683 684 701 700 972 973 990 989 + 684 685 702 701 973 974 991 990 + 685 686 703 702 974 975 992 991 + 686 687 704 703 975 976 993 992 + 687 688 705 704 976 977 994 993 + 688 689 706 705 977 978 995 994 + 689 690 707 706 978 979 996 995 + 690 691 708 707 979 980 997 996 + 691 692 709 708 980 981 998 997 + 692 693 710 709 981 982 999 998 + 693 694 711 710 982 983 1000 999 + 694 695 712 711 983 984 1001 1000 + 695 696 713 712 984 985 1002 1001 + 696 697 714 713 985 986 1003 1002 + 698 699 716 715 987 988 1005 1004 + 699 700 717 716 988 989 1006 1005 + 700 701 718 717 989 990 1007 1006 + 701 702 719 718 990 991 1008 1007 + 702 703 720 719 991 992 1009 1008 + 703 704 721 720 992 993 1010 1009 + 704 705 722 721 993 994 1011 1010 + 705 706 723 722 994 995 1012 1011 + 706 707 724 723 995 996 1013 1012 + 707 708 725 724 996 997 1014 1013 + 708 709 726 725 997 998 1015 1014 + 709 710 727 726 998 999 1016 1015 + 710 711 728 727 999 1000 1017 1016 + 711 712 729 728 1000 1001 1018 1017 + 712 713 730 729 1001 1002 1019 1018 + 713 714 731 730 1002 1003 1020 1019 + 715 716 733 732 1004 1005 1022 1021 + 716 717 734 733 1005 1006 1023 1022 + 717 718 735 734 1006 1007 1024 1023 + 718 719 736 735 1007 1008 1025 1024 + 719 720 737 736 1008 1009 1026 1025 + 720 721 738 737 1009 1010 1027 1026 + 721 722 739 738 1010 1011 1028 1027 + 722 723 740 739 1011 1012 1029 1028 + 723 724 741 740 1012 1013 1030 1029 + 724 725 742 741 1013 1014 1031 1030 + 725 726 743 742 1014 1015 1032 1031 + 726 727 744 743 1015 1016 1033 1032 + 727 728 745 744 1016 1017 1034 1033 + 728 729 746 745 1017 1018 1035 1034 + 729 730 747 746 1018 1019 1036 1035 + 730 731 748 747 1019 1020 1037 1036 + 732 733 750 749 1021 1022 1039 1038 + 733 734 751 750 1022 1023 1040 1039 + 734 735 752 751 1023 1024 1041 1040 + 735 736 753 752 1024 1025 1042 1041 + 736 737 754 753 1025 1026 1043 1042 + 737 738 755 754 1026 1027 1044 1043 + 738 739 756 755 1027 1028 1045 1044 + 739 740 757 756 1028 1029 1046 1045 + 740 741 758 757 1029 1030 1047 1046 + 741 742 759 758 1030 1031 1048 1047 + 742 743 760 759 1031 1032 1049 1048 + 743 744 761 760 1032 1033 1050 1049 + 744 745 762 761 1033 1034 1051 1050 + 745 746 763 762 1034 1035 1052 1051 + 746 747 764 763 1035 1036 1053 1052 + 747 748 765 764 1036 1037 1054 1053 + 749 750 767 766 1038 1039 1056 1055 + 750 751 768 767 1039 1040 1057 1056 + 751 752 769 768 1040 1041 1058 1057 + 752 753 770 769 1041 1042 1059 1058 + 753 754 771 770 1042 1043 1060 1059 + 754 755 772 771 1043 1044 1061 1060 + 755 756 773 772 1044 1045 1062 1061 + 756 757 774 773 1045 1046 1063 1062 + 757 758 775 774 1046 1047 1064 1063 + 758 759 776 775 1047 1048 1065 1064 + 759 760 777 776 1048 1049 1066 1065 + 760 761 778 777 1049 1050 1067 1066 + 761 762 779 778 1050 1051 1068 1067 + 762 763 780 779 1051 1052 1069 1068 + 763 764 781 780 1052 1053 1070 1069 + 764 765 782 781 1053 1054 1071 1070 + 766 767 784 783 1055 1056 1073 1072 + 767 768 785 784 1056 1057 1074 1073 + 768 769 786 785 1057 1058 1075 1074 + 769 770 787 786 1058 1059 1076 1075 + 770 771 788 787 1059 1060 1077 1076 + 771 772 789 788 1060 1061 1078 1077 + 772 773 790 789 1061 1062 1079 1078 + 773 774 791 790 1062 1063 1080 1079 + 774 775 792 791 1063 1064 1081 1080 + 775 776 793 792 1064 1065 1082 1081 + 776 777 794 793 1065 1066 1083 1082 + 777 778 795 794 1066 1067 1084 1083 + 778 779 796 795 1067 1068 1085 1084 + 779 780 797 796 1068 1069 1086 1085 + 780 781 798 797 1069 1070 1087 1086 + 781 782 799 798 1070 1071 1088 1087 + 783 784 801 800 1072 1073 1090 1089 + 784 785 802 801 1073 1074 1091 1090 + 785 786 803 802 1074 1075 1092 1091 + 786 787 804 803 1075 1076 1093 1092 + 787 788 805 804 1076 1077 1094 1093 + 788 789 806 805 1077 1078 1095 1094 + 789 790 807 806 1078 1079 1096 1095 + 790 791 808 807 1079 1080 1097 1096 + 791 792 809 808 1080 1081 1098 1097 + 792 793 810 809 1081 1082 1099 1098 + 793 794 811 810 1082 1083 1100 1099 + 794 795 812 811 1083 1084 1101 1100 + 795 796 813 812 1084 1085 1102 1101 + 796 797 814 813 1085 1086 1103 1102 + 797 798 815 814 1086 1087 1104 1103 + 798 799 816 815 1087 1088 1105 1104 + 800 801 818 817 1089 1090 1107 1106 + 801 802 819 818 1090 1091 1108 1107 + 802 803 820 819 1091 1092 1109 1108 + 803 804 821 820 1092 1093 1110 1109 + 804 805 822 821 1093 1094 1111 1110 + 805 806 823 822 1094 1095 1112 1111 + 806 807 824 823 1095 1096 1113 1112 + 807 808 825 824 1096 1097 1114 1113 + 808 809 826 825 1097 1098 1115 1114 + 809 810 827 826 1098 1099 1116 1115 + 810 811 828 827 1099 1100 1117 1116 + 811 812 829 828 1100 1101 1118 1117 + 812 813 830 829 1101 1102 1119 1118 + 813 814 831 830 1102 1103 1120 1119 + 814 815 832 831 1103 1104 1121 1120 + 815 816 833 832 1104 1105 1122 1121 + 817 818 835 834 1106 1107 1124 1123 + 818 819 836 835 1107 1108 1125 1124 + 819 820 837 836 1108 1109 1126 1125 + 820 821 838 837 1109 1110 1127 1126 + 821 822 839 838 1110 1111 1128 1127 + 822 823 840 839 1111 1112 1129 1128 + 823 824 841 840 1112 1113 1130 1129 + 824 825 842 841 1113 1114 1131 1130 + 825 826 843 842 1114 1115 1132 1131 + 826 827 844 843 1115 1116 1133 1132 + 827 828 845 844 1116 1117 1134 1133 + 828 829 846 845 1117 1118 1135 1134 + 829 830 847 846 1118 1119 1136 1135 + 830 831 848 847 1119 1120 1137 1136 + 831 832 849 848 1120 1121 1138 1137 + 832 833 850 849 1121 1122 1139 1138 + 834 835 852 851 1123 1124 1141 1140 + 835 836 853 852 1124 1125 1142 1141 + 836 837 854 853 1125 1126 1143 1142 + 837 838 855 854 1126 1127 1144 1143 + 838 839 856 855 1127 1128 1145 1144 + 839 840 857 856 1128 1129 1146 1145 + 840 841 858 857 1129 1130 1147 1146 + 841 842 859 858 1130 1131 1148 1147 + 842 843 860 859 1131 1132 1149 1148 + 843 844 861 860 1132 1133 1150 1149 + 844 845 862 861 1133 1134 1151 1150 + 845 846 863 862 1134 1135 1152 1151 + 846 847 864 863 1135 1136 1153 1152 + 847 848 865 864 1136 1137 1154 1153 + 848 849 866 865 1137 1138 1155 1154 + 849 850 867 866 1138 1139 1156 1155 + 868 869 886 885 1157 1158 1175 1174 + 869 870 887 886 1158 1159 1176 1175 + 870 871 888 887 1159 1160 1177 1176 + 871 872 889 888 1160 1161 1178 1177 + 872 873 890 889 1161 1162 1179 1178 + 873 874 891 890 1162 1163 1180 1179 + 874 875 892 891 1163 1164 1181 1180 + 875 876 893 892 1164 1165 1182 1181 + 876 877 894 893 1165 1166 1183 1182 + 877 878 895 894 1166 1167 1184 1183 + 878 879 896 895 1167 1168 1185 1184 + 879 880 897 896 1168 1169 1186 1185 + 880 881 898 897 1169 1170 1187 1186 + 881 882 899 898 1170 1171 1188 1187 + 882 883 900 899 1171 1172 1189 1188 + 883 884 901 900 1172 1173 1190 1189 + 885 886 903 902 1174 1175 1192 1191 + 886 887 904 903 1175 1176 1193 1192 + 887 888 905 904 1176 1177 1194 1193 + 888 889 906 905 1177 1178 1195 1194 + 889 890 907 906 1178 1179 1196 1195 + 890 891 908 907 1179 1180 1197 1196 + 891 892 909 908 1180 1181 1198 1197 + 892 893 910 909 1181 1182 1199 1198 + 893 894 911 910 1182 1183 1200 1199 + 894 895 912 911 1183 1184 1201 1200 + 895 896 913 912 1184 1185 1202 1201 + 896 897 914 913 1185 1186 1203 1202 + 897 898 915 914 1186 1187 1204 1203 + 898 899 916 915 1187 1188 1205 1204 + 899 900 917 916 1188 1189 1206 1205 + 900 901 918 917 1189 1190 1207 1206 + 902 903 920 919 1191 1192 1209 1208 + 903 904 921 920 1192 1193 1210 1209 + 904 905 922 921 1193 1194 1211 1210 + 905 906 923 922 1194 1195 1212 1211 + 906 907 924 923 1195 1196 1213 1212 + 907 908 925 924 1196 1197 1214 1213 + 908 909 926 925 1197 1198 1215 1214 + 909 910 927 926 1198 1199 1216 1215 + 910 911 928 927 1199 1200 1217 1216 + 911 912 929 928 1200 1201 1218 1217 + 912 913 930 929 1201 1202 1219 1218 + 913 914 931 930 1202 1203 1220 1219 + 914 915 932 931 1203 1204 1221 1220 + 915 916 933 932 1204 1205 1222 1221 + 916 917 934 933 1205 1206 1223 1222 + 917 918 935 934 1206 1207 1224 1223 + 919 920 937 936 1208 1209 1226 1225 + 920 921 938 937 1209 1210 1227 1226 + 921 922 939 938 1210 1211 1228 1227 + 922 923 940 939 1211 1212 1229 1228 + 923 924 941 940 1212 1213 1230 1229 + 924 925 942 941 1213 1214 1231 1230 + 925 926 943 942 1214 1215 1232 1231 + 926 927 944 943 1215 1216 1233 1232 + 927 928 945 944 1216 1217 1234 1233 + 928 929 946 945 1217 1218 1235 1234 + 929 930 947 946 1218 1219 1236 1235 + 930 931 948 947 1219 1220 1237 1236 + 931 932 949 948 1220 1221 1238 1237 + 932 933 950 949 1221 1222 1239 1238 + 933 934 951 950 1222 1223 1240 1239 + 934 935 952 951 1223 1224 1241 1240 + 936 937 954 953 1225 1226 1243 1242 + 937 938 955 954 1226 1227 1244 1243 + 938 939 956 955 1227 1228 1245 1244 + 939 940 957 956 1228 1229 1246 1245 + 940 941 958 957 1229 1230 1247 1246 + 941 942 959 958 1230 1231 1248 1247 + 942 943 960 959 1231 1232 1249 1248 + 943 944 961 960 1232 1233 1250 1249 + 944 945 962 961 1233 1234 1251 1250 + 945 946 963 962 1234 1235 1252 1251 + 946 947 964 963 1235 1236 1253 1252 + 947 948 965 964 1236 1237 1254 1253 + 948 949 966 965 1237 1238 1255 1254 + 949 950 967 966 1238 1239 1256 1255 + 950 951 968 967 1239 1240 1257 1256 + 951 952 969 968 1240 1241 1258 1257 + 953 954 971 970 1242 1243 1260 1259 + 954 955 972 971 1243 1244 1261 1260 + 955 956 973 972 1244 1245 1262 1261 + 956 957 974 973 1245 1246 1263 1262 + 957 958 975 974 1246 1247 1264 1263 + 958 959 976 975 1247 1248 1265 1264 + 959 960 977 976 1248 1249 1266 1265 + 960 961 978 977 1249 1250 1267 1266 + 961 962 979 978 1250 1251 1268 1267 + 962 963 980 979 1251 1252 1269 1268 + 963 964 981 980 1252 1253 1270 1269 + 964 965 982 981 1253 1254 1271 1270 + 965 966 983 982 1254 1255 1272 1271 + 966 967 984 983 1255 1256 1273 1272 + 967 968 985 984 1256 1257 1274 1273 + 968 969 986 985 1257 1258 1275 1274 + 970 971 988 987 1259 1260 1277 1276 + 971 972 989 988 1260 1261 1278 1277 + 972 973 990 989 1261 1262 1279 1278 + 973 974 991 990 1262 1263 1280 1279 + 974 975 992 991 1263 1264 1281 1280 + 975 976 993 992 1264 1265 1282 1281 + 976 977 994 993 1265 1266 1283 1282 + 977 978 995 994 1266 1267 1284 1283 + 978 979 996 995 1267 1268 1285 1284 + 979 980 997 996 1268 1269 1286 1285 + 980 981 998 997 1269 1270 1287 1286 + 981 982 999 998 1270 1271 1288 1287 + 982 983 1000 999 1271 1272 1289 1288 + 983 984 1001 1000 1272 1273 1290 1289 + 984 985 1002 1001 1273 1274 1291 1290 + 985 986 1003 1002 1274 1275 1292 1291 + 987 988 1005 1004 1276 1277 1294 1293 + 988 989 1006 1005 1277 1278 1295 1294 + 989 990 1007 1006 1278 1279 1296 1295 + 990 991 1008 1007 1279 1280 1297 1296 + 991 992 1009 1008 1280 1281 1298 1297 + 992 993 1010 1009 1281 1282 1299 1298 + 993 994 1011 1010 1282 1283 1300 1299 + 994 995 1012 1011 1283 1284 1301 1300 + 995 996 1013 1012 1284 1285 1302 1301 + 996 997 1014 1013 1285 1286 1303 1302 + 997 998 1015 1014 1286 1287 1304 1303 + 998 999 1016 1015 1287 1288 1305 1304 + 999 1000 1017 1016 1288 1289 1306 1305 + 1000 1001 1018 1017 1289 1290 1307 1306 + 1001 1002 1019 1018 1290 1291 1308 1307 + 1002 1003 1020 1019 1291 1292 1309 1308 + 1004 1005 1022 1021 1293 1294 1311 1310 + 1005 1006 1023 1022 1294 1295 1312 1311 + 1006 1007 1024 1023 1295 1296 1313 1312 + 1007 1008 1025 1024 1296 1297 1314 1313 + 1008 1009 1026 1025 1297 1298 1315 1314 + 1009 1010 1027 1026 1298 1299 1316 1315 + 1010 1011 1028 1027 1299 1300 1317 1316 + 1011 1012 1029 1028 1300 1301 1318 1317 + 1012 1013 1030 1029 1301 1302 1319 1318 + 1013 1014 1031 1030 1302 1303 1320 1319 + 1014 1015 1032 1031 1303 1304 1321 1320 + 1015 1016 1033 1032 1304 1305 1322 1321 + 1016 1017 1034 1033 1305 1306 1323 1322 + 1017 1018 1035 1034 1306 1307 1324 1323 + 1018 1019 1036 1035 1307 1308 1325 1324 + 1019 1020 1037 1036 1308 1309 1326 1325 + 1021 1022 1039 1038 1310 1311 1328 1327 + 1022 1023 1040 1039 1311 1312 1329 1328 + 1023 1024 1041 1040 1312 1313 1330 1329 + 1024 1025 1042 1041 1313 1314 1331 1330 + 1025 1026 1043 1042 1314 1315 1332 1331 + 1026 1027 1044 1043 1315 1316 1333 1332 + 1027 1028 1045 1044 1316 1317 1334 1333 + 1028 1029 1046 1045 1317 1318 1335 1334 + 1029 1030 1047 1046 1318 1319 1336 1335 + 1030 1031 1048 1047 1319 1320 1337 1336 + 1031 1032 1049 1048 1320 1321 1338 1337 + 1032 1033 1050 1049 1321 1322 1339 1338 + 1033 1034 1051 1050 1322 1323 1340 1339 + 1034 1035 1052 1051 1323 1324 1341 1340 + 1035 1036 1053 1052 1324 1325 1342 1341 + 1036 1037 1054 1053 1325 1326 1343 1342 + 1038 1039 1056 1055 1327 1328 1345 1344 + 1039 1040 1057 1056 1328 1329 1346 1345 + 1040 1041 1058 1057 1329 1330 1347 1346 + 1041 1042 1059 1058 1330 1331 1348 1347 + 1042 1043 1060 1059 1331 1332 1349 1348 + 1043 1044 1061 1060 1332 1333 1350 1349 + 1044 1045 1062 1061 1333 1334 1351 1350 + 1045 1046 1063 1062 1334 1335 1352 1351 + 1046 1047 1064 1063 1335 1336 1353 1352 + 1047 1048 1065 1064 1336 1337 1354 1353 + 1048 1049 1066 1065 1337 1338 1355 1354 + 1049 1050 1067 1066 1338 1339 1356 1355 + 1050 1051 1068 1067 1339 1340 1357 1356 + 1051 1052 1069 1068 1340 1341 1358 1357 + 1052 1053 1070 1069 1341 1342 1359 1358 + 1053 1054 1071 1070 1342 1343 1360 1359 + 1055 1056 1073 1072 1344 1345 1362 1361 + 1056 1057 1074 1073 1345 1346 1363 1362 + 1057 1058 1075 1074 1346 1347 1364 1363 + 1058 1059 1076 1075 1347 1348 1365 1364 + 1059 1060 1077 1076 1348 1349 1366 1365 + 1060 1061 1078 1077 1349 1350 1367 1366 + 1061 1062 1079 1078 1350 1351 1368 1367 + 1062 1063 1080 1079 1351 1352 1369 1368 + 1063 1064 1081 1080 1352 1353 1370 1369 + 1064 1065 1082 1081 1353 1354 1371 1370 + 1065 1066 1083 1082 1354 1355 1372 1371 + 1066 1067 1084 1083 1355 1356 1373 1372 + 1067 1068 1085 1084 1356 1357 1374 1373 + 1068 1069 1086 1085 1357 1358 1375 1374 + 1069 1070 1087 1086 1358 1359 1376 1375 + 1070 1071 1088 1087 1359 1360 1377 1376 + 1072 1073 1090 1089 1361 1362 1379 1378 + 1073 1074 1091 1090 1362 1363 1380 1379 + 1074 1075 1092 1091 1363 1364 1381 1380 + 1075 1076 1093 1092 1364 1365 1382 1381 + 1076 1077 1094 1093 1365 1366 1383 1382 + 1077 1078 1095 1094 1366 1367 1384 1383 + 1078 1079 1096 1095 1367 1368 1385 1384 + 1079 1080 1097 1096 1368 1369 1386 1385 + 1080 1081 1098 1097 1369 1370 1387 1386 + 1081 1082 1099 1098 1370 1371 1388 1387 + 1082 1083 1100 1099 1371 1372 1389 1388 + 1083 1084 1101 1100 1372 1373 1390 1389 + 1084 1085 1102 1101 1373 1374 1391 1390 + 1085 1086 1103 1102 1374 1375 1392 1391 + 1086 1087 1104 1103 1375 1376 1393 1392 + 1087 1088 1105 1104 1376 1377 1394 1393 + 1089 1090 1107 1106 1378 1379 1396 1395 + 1090 1091 1108 1107 1379 1380 1397 1396 + 1091 1092 1109 1108 1380 1381 1398 1397 + 1092 1093 1110 1109 1381 1382 1399 1398 + 1093 1094 1111 1110 1382 1383 1400 1399 + 1094 1095 1112 1111 1383 1384 1401 1400 + 1095 1096 1113 1112 1384 1385 1402 1401 + 1096 1097 1114 1113 1385 1386 1403 1402 + 1097 1098 1115 1114 1386 1387 1404 1403 + 1098 1099 1116 1115 1387 1388 1405 1404 + 1099 1100 1117 1116 1388 1389 1406 1405 + 1100 1101 1118 1117 1389 1390 1407 1406 + 1101 1102 1119 1118 1390 1391 1408 1407 + 1102 1103 1120 1119 1391 1392 1409 1408 + 1103 1104 1121 1120 1392 1393 1410 1409 + 1104 1105 1122 1121 1393 1394 1411 1410 + 1106 1107 1124 1123 1395 1396 1413 1412 + 1107 1108 1125 1124 1396 1397 1414 1413 + 1108 1109 1126 1125 1397 1398 1415 1414 + 1109 1110 1127 1126 1398 1399 1416 1415 + 1110 1111 1128 1127 1399 1400 1417 1416 + 1111 1112 1129 1128 1400 1401 1418 1417 + 1112 1113 1130 1129 1401 1402 1419 1418 + 1113 1114 1131 1130 1402 1403 1420 1419 + 1114 1115 1132 1131 1403 1404 1421 1420 + 1115 1116 1133 1132 1404 1405 1422 1421 + 1116 1117 1134 1133 1405 1406 1423 1422 + 1117 1118 1135 1134 1406 1407 1424 1423 + 1118 1119 1136 1135 1407 1408 1425 1424 + 1119 1120 1137 1136 1408 1409 1426 1425 + 1120 1121 1138 1137 1409 1410 1427 1426 + 1121 1122 1139 1138 1410 1411 1428 1427 + 1123 1124 1141 1140 1412 1413 1430 1429 + 1124 1125 1142 1141 1413 1414 1431 1430 + 1125 1126 1143 1142 1414 1415 1432 1431 + 1126 1127 1144 1143 1415 1416 1433 1432 + 1127 1128 1145 1144 1416 1417 1434 1433 + 1128 1129 1146 1145 1417 1418 1435 1434 + 1129 1130 1147 1146 1418 1419 1436 1435 + 1130 1131 1148 1147 1419 1420 1437 1436 + 1131 1132 1149 1148 1420 1421 1438 1437 + 1132 1133 1150 1149 1421 1422 1439 1438 + 1133 1134 1151 1150 1422 1423 1440 1439 + 1134 1135 1152 1151 1423 1424 1441 1440 + 1135 1136 1153 1152 1424 1425 1442 1441 + 1136 1137 1154 1153 1425 1426 1443 1442 + 1137 1138 1155 1154 1426 1427 1444 1443 + 1138 1139 1156 1155 1427 1428 1445 1444 + 1157 1158 1175 1174 1446 1447 1464 1463 + 1158 1159 1176 1175 1447 1448 1465 1464 + 1159 1160 1177 1176 1448 1449 1466 1465 + 1160 1161 1178 1177 1449 1450 1467 1466 + 1161 1162 1179 1178 1450 1451 1468 1467 + 1162 1163 1180 1179 1451 1452 1469 1468 + 1163 1164 1181 1180 1452 1453 1470 1469 + 1164 1165 1182 1181 1453 1454 1471 1470 + 1165 1166 1183 1182 1454 1455 1472 1471 + 1166 1167 1184 1183 1455 1456 1473 1472 + 1167 1168 1185 1184 1456 1457 1474 1473 + 1168 1169 1186 1185 1457 1458 1475 1474 + 1169 1170 1187 1186 1458 1459 1476 1475 + 1170 1171 1188 1187 1459 1460 1477 1476 + 1171 1172 1189 1188 1460 1461 1478 1477 + 1172 1173 1190 1189 1461 1462 1479 1478 + 1174 1175 1192 1191 1463 1464 1481 1480 + 1175 1176 1193 1192 1464 1465 1482 1481 + 1176 1177 1194 1193 1465 1466 1483 1482 + 1177 1178 1195 1194 1466 1467 1484 1483 + 1178 1179 1196 1195 1467 1468 1485 1484 + 1179 1180 1197 1196 1468 1469 1486 1485 + 1180 1181 1198 1197 1469 1470 1487 1486 + 1181 1182 1199 1198 1470 1471 1488 1487 + 1182 1183 1200 1199 1471 1472 1489 1488 + 1183 1184 1201 1200 1472 1473 1490 1489 + 1184 1185 1202 1201 1473 1474 1491 1490 + 1185 1186 1203 1202 1474 1475 1492 1491 + 1186 1187 1204 1203 1475 1476 1493 1492 + 1187 1188 1205 1204 1476 1477 1494 1493 + 1188 1189 1206 1205 1477 1478 1495 1494 + 1189 1190 1207 1206 1478 1479 1496 1495 + 1191 1192 1209 1208 1480 1481 1498 1497 + 1192 1193 1210 1209 1481 1482 1499 1498 + 1193 1194 1211 1210 1482 1483 1500 1499 + 1194 1195 1212 1211 1483 1484 1501 1500 + 1195 1196 1213 1212 1484 1485 1502 1501 + 1196 1197 1214 1213 1485 1486 1503 1502 + 1197 1198 1215 1214 1486 1487 1504 1503 + 1198 1199 1216 1215 1487 1488 1505 1504 + 1199 1200 1217 1216 1488 1489 1506 1505 + 1200 1201 1218 1217 1489 1490 1507 1506 + 1201 1202 1219 1218 1490 1491 1508 1507 + 1202 1203 1220 1219 1491 1492 1509 1508 + 1203 1204 1221 1220 1492 1493 1510 1509 + 1204 1205 1222 1221 1493 1494 1511 1510 + 1205 1206 1223 1222 1494 1495 1512 1511 + 1206 1207 1224 1223 1495 1496 1513 1512 + 1208 1209 1226 1225 1497 1498 1515 1514 + 1209 1210 1227 1226 1498 1499 1516 1515 + 1210 1211 1228 1227 1499 1500 1517 1516 + 1211 1212 1229 1228 1500 1501 1518 1517 + 1212 1213 1230 1229 1501 1502 1519 1518 + 1213 1214 1231 1230 1502 1503 1520 1519 + 1214 1215 1232 1231 1503 1504 1521 1520 + 1215 1216 1233 1232 1504 1505 1522 1521 + 1216 1217 1234 1233 1505 1506 1523 1522 + 1217 1218 1235 1234 1506 1507 1524 1523 + 1218 1219 1236 1235 1507 1508 1525 1524 + 1219 1220 1237 1236 1508 1509 1526 1525 + 1220 1221 1238 1237 1509 1510 1527 1526 + 1221 1222 1239 1238 1510 1511 1528 1527 + 1222 1223 1240 1239 1511 1512 1529 1528 + 1223 1224 1241 1240 1512 1513 1530 1529 + 1225 1226 1243 1242 1514 1515 1532 1531 + 1226 1227 1244 1243 1515 1516 1533 1532 + 1227 1228 1245 1244 1516 1517 1534 1533 + 1228 1229 1246 1245 1517 1518 1535 1534 + 1229 1230 1247 1246 1518 1519 1536 1535 + 1230 1231 1248 1247 1519 1520 1537 1536 + 1231 1232 1249 1248 1520 1521 1538 1537 + 1232 1233 1250 1249 1521 1522 1539 1538 + 1233 1234 1251 1250 1522 1523 1540 1539 + 1234 1235 1252 1251 1523 1524 1541 1540 + 1235 1236 1253 1252 1524 1525 1542 1541 + 1236 1237 1254 1253 1525 1526 1543 1542 + 1237 1238 1255 1254 1526 1527 1544 1543 + 1238 1239 1256 1255 1527 1528 1545 1544 + 1239 1240 1257 1256 1528 1529 1546 1545 + 1240 1241 1258 1257 1529 1530 1547 1546 + 1242 1243 1260 1259 1531 1532 1549 1548 + 1243 1244 1261 1260 1532 1533 1550 1549 + 1244 1245 1262 1261 1533 1534 1551 1550 + 1245 1246 1263 1262 1534 1535 1552 1551 + 1246 1247 1264 1263 1535 1536 1553 1552 + 1247 1248 1265 1264 1536 1537 1554 1553 + 1248 1249 1266 1265 1537 1538 1555 1554 + 1249 1250 1267 1266 1538 1539 1556 1555 + 1250 1251 1268 1267 1539 1540 1557 1556 + 1251 1252 1269 1268 1540 1541 1558 1557 + 1252 1253 1270 1269 1541 1542 1559 1558 + 1253 1254 1271 1270 1542 1543 1560 1559 + 1254 1255 1272 1271 1543 1544 1561 1560 + 1255 1256 1273 1272 1544 1545 1562 1561 + 1256 1257 1274 1273 1545 1546 1563 1562 + 1257 1258 1275 1274 1546 1547 1564 1563 + 1259 1260 1277 1276 1548 1549 1566 1565 + 1260 1261 1278 1277 1549 1550 1567 1566 + 1261 1262 1279 1278 1550 1551 1568 1567 + 1262 1263 1280 1279 1551 1552 1569 1568 + 1263 1264 1281 1280 1552 1553 1570 1569 + 1264 1265 1282 1281 1553 1554 1571 1570 + 1265 1266 1283 1282 1554 1555 1572 1571 + 1266 1267 1284 1283 1555 1556 1573 1572 + 1267 1268 1285 1284 1556 1557 1574 1573 + 1268 1269 1286 1285 1557 1558 1575 1574 + 1269 1270 1287 1286 1558 1559 1576 1575 + 1270 1271 1288 1287 1559 1560 1577 1576 + 1271 1272 1289 1288 1560 1561 1578 1577 + 1272 1273 1290 1289 1561 1562 1579 1578 + 1273 1274 1291 1290 1562 1563 1580 1579 + 1274 1275 1292 1291 1563 1564 1581 1580 + 1276 1277 1294 1293 1565 1566 1583 1582 + 1277 1278 1295 1294 1566 1567 1584 1583 + 1278 1279 1296 1295 1567 1568 1585 1584 + 1279 1280 1297 1296 1568 1569 1586 1585 + 1280 1281 1298 1297 1569 1570 1587 1586 + 1281 1282 1299 1298 1570 1571 1588 1587 + 1282 1283 1300 1299 1571 1572 1589 1588 + 1283 1284 1301 1300 1572 1573 1590 1589 + 1284 1285 1302 1301 1573 1574 1591 1590 + 1285 1286 1303 1302 1574 1575 1592 1591 + 1286 1287 1304 1303 1575 1576 1593 1592 + 1287 1288 1305 1304 1576 1577 1594 1593 + 1288 1289 1306 1305 1577 1578 1595 1594 + 1289 1290 1307 1306 1578 1579 1596 1595 + 1290 1291 1308 1307 1579 1580 1597 1596 + 1291 1292 1309 1308 1580 1581 1598 1597 + 1293 1294 1311 1310 1582 1583 1600 1599 + 1294 1295 1312 1311 1583 1584 1601 1600 + 1295 1296 1313 1312 1584 1585 1602 1601 + 1296 1297 1314 1313 1585 1586 1603 1602 + 1297 1298 1315 1314 1586 1587 1604 1603 + 1298 1299 1316 1315 1587 1588 1605 1604 + 1299 1300 1317 1316 1588 1589 1606 1605 + 1300 1301 1318 1317 1589 1590 1607 1606 + 1301 1302 1319 1318 1590 1591 1608 1607 + 1302 1303 1320 1319 1591 1592 1609 1608 + 1303 1304 1321 1320 1592 1593 1610 1609 + 1304 1305 1322 1321 1593 1594 1611 1610 + 1305 1306 1323 1322 1594 1595 1612 1611 + 1306 1307 1324 1323 1595 1596 1613 1612 + 1307 1308 1325 1324 1596 1597 1614 1613 + 1308 1309 1326 1325 1597 1598 1615 1614 + 1310 1311 1328 1327 1599 1600 1617 1616 + 1311 1312 1329 1328 1600 1601 1618 1617 + 1312 1313 1330 1329 1601 1602 1619 1618 + 1313 1314 1331 1330 1602 1603 1620 1619 + 1314 1315 1332 1331 1603 1604 1621 1620 + 1315 1316 1333 1332 1604 1605 1622 1621 + 1316 1317 1334 1333 1605 1606 1623 1622 + 1317 1318 1335 1334 1606 1607 1624 1623 + 1318 1319 1336 1335 1607 1608 1625 1624 + 1319 1320 1337 1336 1608 1609 1626 1625 + 1320 1321 1338 1337 1609 1610 1627 1626 + 1321 1322 1339 1338 1610 1611 1628 1627 + 1322 1323 1340 1339 1611 1612 1629 1628 + 1323 1324 1341 1340 1612 1613 1630 1629 + 1324 1325 1342 1341 1613 1614 1631 1630 + 1325 1326 1343 1342 1614 1615 1632 1631 + 1327 1328 1345 1344 1616 1617 1634 1633 + 1328 1329 1346 1345 1617 1618 1635 1634 + 1329 1330 1347 1346 1618 1619 1636 1635 + 1330 1331 1348 1347 1619 1620 1637 1636 + 1331 1332 1349 1348 1620 1621 1638 1637 + 1332 1333 1350 1349 1621 1622 1639 1638 + 1333 1334 1351 1350 1622 1623 1640 1639 + 1334 1335 1352 1351 1623 1624 1641 1640 + 1335 1336 1353 1352 1624 1625 1642 1641 + 1336 1337 1354 1353 1625 1626 1643 1642 + 1337 1338 1355 1354 1626 1627 1644 1643 + 1338 1339 1356 1355 1627 1628 1645 1644 + 1339 1340 1357 1356 1628 1629 1646 1645 + 1340 1341 1358 1357 1629 1630 1647 1646 + 1341 1342 1359 1358 1630 1631 1648 1647 + 1342 1343 1360 1359 1631 1632 1649 1648 + 1344 1345 1362 1361 1633 1634 1651 1650 + 1345 1346 1363 1362 1634 1635 1652 1651 + 1346 1347 1364 1363 1635 1636 1653 1652 + 1347 1348 1365 1364 1636 1637 1654 1653 + 1348 1349 1366 1365 1637 1638 1655 1654 + 1349 1350 1367 1366 1638 1639 1656 1655 + 1350 1351 1368 1367 1639 1640 1657 1656 + 1351 1352 1369 1368 1640 1641 1658 1657 + 1352 1353 1370 1369 1641 1642 1659 1658 + 1353 1354 1371 1370 1642 1643 1660 1659 + 1354 1355 1372 1371 1643 1644 1661 1660 + 1355 1356 1373 1372 1644 1645 1662 1661 + 1356 1357 1374 1373 1645 1646 1663 1662 + 1357 1358 1375 1374 1646 1647 1664 1663 + 1358 1359 1376 1375 1647 1648 1665 1664 + 1359 1360 1377 1376 1648 1649 1666 1665 + 1361 1362 1379 1378 1650 1651 1668 1667 + 1362 1363 1380 1379 1651 1652 1669 1668 + 1363 1364 1381 1380 1652 1653 1670 1669 + 1364 1365 1382 1381 1653 1654 1671 1670 + 1365 1366 1383 1382 1654 1655 1672 1671 + 1366 1367 1384 1383 1655 1656 1673 1672 + 1367 1368 1385 1384 1656 1657 1674 1673 + 1368 1369 1386 1385 1657 1658 1675 1674 + 1369 1370 1387 1386 1658 1659 1676 1675 + 1370 1371 1388 1387 1659 1660 1677 1676 + 1371 1372 1389 1388 1660 1661 1678 1677 + 1372 1373 1390 1389 1661 1662 1679 1678 + 1373 1374 1391 1390 1662 1663 1680 1679 + 1374 1375 1392 1391 1663 1664 1681 1680 + 1375 1376 1393 1392 1664 1665 1682 1681 + 1376 1377 1394 1393 1665 1666 1683 1682 + 1378 1379 1396 1395 1667 1668 1685 1684 + 1379 1380 1397 1396 1668 1669 1686 1685 + 1380 1381 1398 1397 1669 1670 1687 1686 + 1381 1382 1399 1398 1670 1671 1688 1687 + 1382 1383 1400 1399 1671 1672 1689 1688 + 1383 1384 1401 1400 1672 1673 1690 1689 + 1384 1385 1402 1401 1673 1674 1691 1690 + 1385 1386 1403 1402 1674 1675 1692 1691 + 1386 1387 1404 1403 1675 1676 1693 1692 + 1387 1388 1405 1404 1676 1677 1694 1693 + 1388 1389 1406 1405 1677 1678 1695 1694 + 1389 1390 1407 1406 1678 1679 1696 1695 + 1390 1391 1408 1407 1679 1680 1697 1696 + 1391 1392 1409 1408 1680 1681 1698 1697 + 1392 1393 1410 1409 1681 1682 1699 1698 + 1393 1394 1411 1410 1682 1683 1700 1699 + 1395 1396 1413 1412 1684 1685 1702 1701 + 1396 1397 1414 1413 1685 1686 1703 1702 + 1397 1398 1415 1414 1686 1687 1704 1703 + 1398 1399 1416 1415 1687 1688 1705 1704 + 1399 1400 1417 1416 1688 1689 1706 1705 + 1400 1401 1418 1417 1689 1690 1707 1706 + 1401 1402 1419 1418 1690 1691 1708 1707 + 1402 1403 1420 1419 1691 1692 1709 1708 + 1403 1404 1421 1420 1692 1693 1710 1709 + 1404 1405 1422 1421 1693 1694 1711 1710 + 1405 1406 1423 1422 1694 1695 1712 1711 + 1406 1407 1424 1423 1695 1696 1713 1712 + 1407 1408 1425 1424 1696 1697 1714 1713 + 1408 1409 1426 1425 1697 1698 1715 1714 + 1409 1410 1427 1426 1698 1699 1716 1715 + 1410 1411 1428 1427 1699 1700 1717 1716 + 1412 1413 1430 1429 1701 1702 1719 1718 + 1413 1414 1431 1430 1702 1703 1720 1719 + 1414 1415 1432 1431 1703 1704 1721 1720 + 1415 1416 1433 1432 1704 1705 1722 1721 + 1416 1417 1434 1433 1705 1706 1723 1722 + 1417 1418 1435 1434 1706 1707 1724 1723 + 1418 1419 1436 1435 1707 1708 1725 1724 + 1419 1420 1437 1436 1708 1709 1726 1725 + 1420 1421 1438 1437 1709 1710 1727 1726 + 1421 1422 1439 1438 1710 1711 1728 1727 + 1422 1423 1440 1439 1711 1712 1729 1728 + 1423 1424 1441 1440 1712 1713 1730 1729 + 1424 1425 1442 1441 1713 1714 1731 1730 + 1425 1426 1443 1442 1714 1715 1732 1731 + 1426 1427 1444 1443 1715 1716 1733 1732 + 1427 1428 1445 1444 1716 1717 1734 1733 + 1446 1447 1464 1463 1735 1736 1753 1752 + 1447 1448 1465 1464 1736 1737 1754 1753 + 1448 1449 1466 1465 1737 1738 1755 1754 + 1449 1450 1467 1466 1738 1739 1756 1755 + 1450 1451 1468 1467 1739 1740 1757 1756 + 1451 1452 1469 1468 1740 1741 1758 1757 + 1452 1453 1470 1469 1741 1742 1759 1758 + 1453 1454 1471 1470 1742 1743 1760 1759 + 1454 1455 1472 1471 1743 1744 1761 1760 + 1455 1456 1473 1472 1744 1745 1762 1761 + 1456 1457 1474 1473 1745 1746 1763 1762 + 1457 1458 1475 1474 1746 1747 1764 1763 + 1458 1459 1476 1475 1747 1748 1765 1764 + 1459 1460 1477 1476 1748 1749 1766 1765 + 1460 1461 1478 1477 1749 1750 1767 1766 + 1461 1462 1479 1478 1750 1751 1768 1767 + 1463 1464 1481 1480 1752 1753 1770 1769 + 1464 1465 1482 1481 1753 1754 1771 1770 + 1465 1466 1483 1482 1754 1755 1772 1771 + 1466 1467 1484 1483 1755 1756 1773 1772 + 1467 1468 1485 1484 1756 1757 1774 1773 + 1468 1469 1486 1485 1757 1758 1775 1774 + 1469 1470 1487 1486 1758 1759 1776 1775 + 1470 1471 1488 1487 1759 1760 1777 1776 + 1471 1472 1489 1488 1760 1761 1778 1777 + 1472 1473 1490 1489 1761 1762 1779 1778 + 1473 1474 1491 1490 1762 1763 1780 1779 + 1474 1475 1492 1491 1763 1764 1781 1780 + 1475 1476 1493 1492 1764 1765 1782 1781 + 1476 1477 1494 1493 1765 1766 1783 1782 + 1477 1478 1495 1494 1766 1767 1784 1783 + 1478 1479 1496 1495 1767 1768 1785 1784 + 1480 1481 1498 1497 1769 1770 1787 1786 + 1481 1482 1499 1498 1770 1771 1788 1787 + 1482 1483 1500 1499 1771 1772 1789 1788 + 1483 1484 1501 1500 1772 1773 1790 1789 + 1484 1485 1502 1501 1773 1774 1791 1790 + 1485 1486 1503 1502 1774 1775 1792 1791 + 1486 1487 1504 1503 1775 1776 1793 1792 + 1487 1488 1505 1504 1776 1777 1794 1793 + 1488 1489 1506 1505 1777 1778 1795 1794 + 1489 1490 1507 1506 1778 1779 1796 1795 + 1490 1491 1508 1507 1779 1780 1797 1796 + 1491 1492 1509 1508 1780 1781 1798 1797 + 1492 1493 1510 1509 1781 1782 1799 1798 + 1493 1494 1511 1510 1782 1783 1800 1799 + 1494 1495 1512 1511 1783 1784 1801 1800 + 1495 1496 1513 1512 1784 1785 1802 1801 + 1497 1498 1515 1514 1786 1787 1804 1803 + 1498 1499 1516 1515 1787 1788 1805 1804 + 1499 1500 1517 1516 1788 1789 1806 1805 + 1500 1501 1518 1517 1789 1790 1807 1806 + 1501 1502 1519 1518 1790 1791 1808 1807 + 1502 1503 1520 1519 1791 1792 1809 1808 + 1503 1504 1521 1520 1792 1793 1810 1809 + 1504 1505 1522 1521 1793 1794 1811 1810 + 1505 1506 1523 1522 1794 1795 1812 1811 + 1506 1507 1524 1523 1795 1796 1813 1812 + 1507 1508 1525 1524 1796 1797 1814 1813 + 1508 1509 1526 1525 1797 1798 1815 1814 + 1509 1510 1527 1526 1798 1799 1816 1815 + 1510 1511 1528 1527 1799 1800 1817 1816 + 1511 1512 1529 1528 1800 1801 1818 1817 + 1512 1513 1530 1529 1801 1802 1819 1818 + 1514 1515 1532 1531 1803 1804 1821 1820 + 1515 1516 1533 1532 1804 1805 1822 1821 + 1516 1517 1534 1533 1805 1806 1823 1822 + 1517 1518 1535 1534 1806 1807 1824 1823 + 1518 1519 1536 1535 1807 1808 1825 1824 + 1519 1520 1537 1536 1808 1809 1826 1825 + 1520 1521 1538 1537 1809 1810 1827 1826 + 1521 1522 1539 1538 1810 1811 1828 1827 + 1522 1523 1540 1539 1811 1812 1829 1828 + 1523 1524 1541 1540 1812 1813 1830 1829 + 1524 1525 1542 1541 1813 1814 1831 1830 + 1525 1526 1543 1542 1814 1815 1832 1831 + 1526 1527 1544 1543 1815 1816 1833 1832 + 1527 1528 1545 1544 1816 1817 1834 1833 + 1528 1529 1546 1545 1817 1818 1835 1834 + 1529 1530 1547 1546 1818 1819 1836 1835 + 1531 1532 1549 1548 1820 1821 1838 1837 + 1532 1533 1550 1549 1821 1822 1839 1838 + 1533 1534 1551 1550 1822 1823 1840 1839 + 1534 1535 1552 1551 1823 1824 1841 1840 + 1535 1536 1553 1552 1824 1825 1842 1841 + 1536 1537 1554 1553 1825 1826 1843 1842 + 1537 1538 1555 1554 1826 1827 1844 1843 + 1538 1539 1556 1555 1827 1828 1845 1844 + 1539 1540 1557 1556 1828 1829 1846 1845 + 1540 1541 1558 1557 1829 1830 1847 1846 + 1541 1542 1559 1558 1830 1831 1848 1847 + 1542 1543 1560 1559 1831 1832 1849 1848 + 1543 1544 1561 1560 1832 1833 1850 1849 + 1544 1545 1562 1561 1833 1834 1851 1850 + 1545 1546 1563 1562 1834 1835 1852 1851 + 1546 1547 1564 1563 1835 1836 1853 1852 + 1548 1549 1566 1565 1837 1838 1855 1854 + 1549 1550 1567 1566 1838 1839 1856 1855 + 1550 1551 1568 1567 1839 1840 1857 1856 + 1551 1552 1569 1568 1840 1841 1858 1857 + 1552 1553 1570 1569 1841 1842 1859 1858 + 1553 1554 1571 1570 1842 1843 1860 1859 + 1554 1555 1572 1571 1843 1844 1861 1860 + 1555 1556 1573 1572 1844 1845 1862 1861 + 1556 1557 1574 1573 1845 1846 1863 1862 + 1557 1558 1575 1574 1846 1847 1864 1863 + 1558 1559 1576 1575 1847 1848 1865 1864 + 1559 1560 1577 1576 1848 1849 1866 1865 + 1560 1561 1578 1577 1849 1850 1867 1866 + 1561 1562 1579 1578 1850 1851 1868 1867 + 1562 1563 1580 1579 1851 1852 1869 1868 + 1563 1564 1581 1580 1852 1853 1870 1869 + 1565 1566 1583 1582 1854 1855 1872 1871 + 1566 1567 1584 1583 1855 1856 1873 1872 + 1567 1568 1585 1584 1856 1857 1874 1873 + 1568 1569 1586 1585 1857 1858 1875 1874 + 1569 1570 1587 1586 1858 1859 1876 1875 + 1570 1571 1588 1587 1859 1860 1877 1876 + 1571 1572 1589 1588 1860 1861 1878 1877 + 1572 1573 1590 1589 1861 1862 1879 1878 + 1573 1574 1591 1590 1862 1863 1880 1879 + 1574 1575 1592 1591 1863 1864 1881 1880 + 1575 1576 1593 1592 1864 1865 1882 1881 + 1576 1577 1594 1593 1865 1866 1883 1882 + 1577 1578 1595 1594 1866 1867 1884 1883 + 1578 1579 1596 1595 1867 1868 1885 1884 + 1579 1580 1597 1596 1868 1869 1886 1885 + 1580 1581 1598 1597 1869 1870 1887 1886 + 1582 1583 1600 1599 1871 1872 1889 1888 + 1583 1584 1601 1600 1872 1873 1890 1889 + 1584 1585 1602 1601 1873 1874 1891 1890 + 1585 1586 1603 1602 1874 1875 1892 1891 + 1586 1587 1604 1603 1875 1876 1893 1892 + 1587 1588 1605 1604 1876 1877 1894 1893 + 1588 1589 1606 1605 1877 1878 1895 1894 + 1589 1590 1607 1606 1878 1879 1896 1895 + 1590 1591 1608 1607 1879 1880 1897 1896 + 1591 1592 1609 1608 1880 1881 1898 1897 + 1592 1593 1610 1609 1881 1882 1899 1898 + 1593 1594 1611 1610 1882 1883 1900 1899 + 1594 1595 1612 1611 1883 1884 1901 1900 + 1595 1596 1613 1612 1884 1885 1902 1901 + 1596 1597 1614 1613 1885 1886 1903 1902 + 1597 1598 1615 1614 1886 1887 1904 1903 + 1599 1600 1617 1616 1888 1889 1906 1905 + 1600 1601 1618 1617 1889 1890 1907 1906 + 1601 1602 1619 1618 1890 1891 1908 1907 + 1602 1603 1620 1619 1891 1892 1909 1908 + 1603 1604 1621 1620 1892 1893 1910 1909 + 1604 1605 1622 1621 1893 1894 1911 1910 + 1605 1606 1623 1622 1894 1895 1912 1911 + 1606 1607 1624 1623 1895 1896 1913 1912 + 1607 1608 1625 1624 1896 1897 1914 1913 + 1608 1609 1626 1625 1897 1898 1915 1914 + 1609 1610 1627 1626 1898 1899 1916 1915 + 1610 1611 1628 1627 1899 1900 1917 1916 + 1611 1612 1629 1628 1900 1901 1918 1917 + 1612 1613 1630 1629 1901 1902 1919 1918 + 1613 1614 1631 1630 1902 1903 1920 1919 + 1614 1615 1632 1631 1903 1904 1921 1920 + 1616 1617 1634 1633 1905 1906 1923 1922 + 1617 1618 1635 1634 1906 1907 1924 1923 + 1618 1619 1636 1635 1907 1908 1925 1924 + 1619 1620 1637 1636 1908 1909 1926 1925 + 1620 1621 1638 1637 1909 1910 1927 1926 + 1621 1622 1639 1638 1910 1911 1928 1927 + 1622 1623 1640 1639 1911 1912 1929 1928 + 1623 1624 1641 1640 1912 1913 1930 1929 + 1624 1625 1642 1641 1913 1914 1931 1930 + 1625 1626 1643 1642 1914 1915 1932 1931 + 1626 1627 1644 1643 1915 1916 1933 1932 + 1627 1628 1645 1644 1916 1917 1934 1933 + 1628 1629 1646 1645 1917 1918 1935 1934 + 1629 1630 1647 1646 1918 1919 1936 1935 + 1630 1631 1648 1647 1919 1920 1937 1936 + 1631 1632 1649 1648 1920 1921 1938 1937 + 1633 1634 1651 1650 1922 1923 1940 1939 + 1634 1635 1652 1651 1923 1924 1941 1940 + 1635 1636 1653 1652 1924 1925 1942 1941 + 1636 1637 1654 1653 1925 1926 1943 1942 + 1637 1638 1655 1654 1926 1927 1944 1943 + 1638 1639 1656 1655 1927 1928 1945 1944 + 1639 1640 1657 1656 1928 1929 1946 1945 + 1640 1641 1658 1657 1929 1930 1947 1946 + 1641 1642 1659 1658 1930 1931 1948 1947 + 1642 1643 1660 1659 1931 1932 1949 1948 + 1643 1644 1661 1660 1932 1933 1950 1949 + 1644 1645 1662 1661 1933 1934 1951 1950 + 1645 1646 1663 1662 1934 1935 1952 1951 + 1646 1647 1664 1663 1935 1936 1953 1952 + 1647 1648 1665 1664 1936 1937 1954 1953 + 1648 1649 1666 1665 1937 1938 1955 1954 + 1650 1651 1668 1667 1939 1940 1957 1956 + 1651 1652 1669 1668 1940 1941 1958 1957 + 1652 1653 1670 1669 1941 1942 1959 1958 + 1653 1654 1671 1670 1942 1943 1960 1959 + 1654 1655 1672 1671 1943 1944 1961 1960 + 1655 1656 1673 1672 1944 1945 1962 1961 + 1656 1657 1674 1673 1945 1946 1963 1962 + 1657 1658 1675 1674 1946 1947 1964 1963 + 1658 1659 1676 1675 1947 1948 1965 1964 + 1659 1660 1677 1676 1948 1949 1966 1965 + 1660 1661 1678 1677 1949 1950 1967 1966 + 1661 1662 1679 1678 1950 1951 1968 1967 + 1662 1663 1680 1679 1951 1952 1969 1968 + 1663 1664 1681 1680 1952 1953 1970 1969 + 1664 1665 1682 1681 1953 1954 1971 1970 + 1665 1666 1683 1682 1954 1955 1972 1971 + 1667 1668 1685 1684 1956 1957 1974 1973 + 1668 1669 1686 1685 1957 1958 1975 1974 + 1669 1670 1687 1686 1958 1959 1976 1975 + 1670 1671 1688 1687 1959 1960 1977 1976 + 1671 1672 1689 1688 1960 1961 1978 1977 + 1672 1673 1690 1689 1961 1962 1979 1978 + 1673 1674 1691 1690 1962 1963 1980 1979 + 1674 1675 1692 1691 1963 1964 1981 1980 + 1675 1676 1693 1692 1964 1965 1982 1981 + 1676 1677 1694 1693 1965 1966 1983 1982 + 1677 1678 1695 1694 1966 1967 1984 1983 + 1678 1679 1696 1695 1967 1968 1985 1984 + 1679 1680 1697 1696 1968 1969 1986 1985 + 1680 1681 1698 1697 1969 1970 1987 1986 + 1681 1682 1699 1698 1970 1971 1988 1987 + 1682 1683 1700 1699 1971 1972 1989 1988 + 1684 1685 1702 1701 1973 1974 1991 1990 + 1685 1686 1703 1702 1974 1975 1992 1991 + 1686 1687 1704 1703 1975 1976 1993 1992 + 1687 1688 1705 1704 1976 1977 1994 1993 + 1688 1689 1706 1705 1977 1978 1995 1994 + 1689 1690 1707 1706 1978 1979 1996 1995 + 1690 1691 1708 1707 1979 1980 1997 1996 + 1691 1692 1709 1708 1980 1981 1998 1997 + 1692 1693 1710 1709 1981 1982 1999 1998 + 1693 1694 1711 1710 1982 1983 2000 1999 + 1694 1695 1712 1711 1983 1984 2001 2000 + 1695 1696 1713 1712 1984 1985 2002 2001 + 1696 1697 1714 1713 1985 1986 2003 2002 + 1697 1698 1715 1714 1986 1987 2004 2003 + 1698 1699 1716 1715 1987 1988 2005 2004 + 1699 1700 1717 1716 1988 1989 2006 2005 + 1701 1702 1719 1718 1990 1991 2008 2007 + 1702 1703 1720 1719 1991 1992 2009 2008 + 1703 1704 1721 1720 1992 1993 2010 2009 + 1704 1705 1722 1721 1993 1994 2011 2010 + 1705 1706 1723 1722 1994 1995 2012 2011 + 1706 1707 1724 1723 1995 1996 2013 2012 + 1707 1708 1725 1724 1996 1997 2014 2013 + 1708 1709 1726 1725 1997 1998 2015 2014 + 1709 1710 1727 1726 1998 1999 2016 2015 + 1710 1711 1728 1727 1999 2000 2017 2016 + 1711 1712 1729 1728 2000 2001 2018 2017 + 1712 1713 1730 1729 2001 2002 2019 2018 + 1713 1714 1731 1730 2002 2003 2020 2019 + 1714 1715 1732 1731 2003 2004 2021 2020 + 1715 1716 1733 1732 2004 2005 2022 2021 + 1716 1717 1734 1733 2005 2006 2023 2022 + 1735 1736 1753 1752 2024 2025 2042 2041 + 1736 1737 1754 1753 2025 2026 2043 2042 + 1737 1738 1755 1754 2026 2027 2044 2043 + 1738 1739 1756 1755 2027 2028 2045 2044 + 1739 1740 1757 1756 2028 2029 2046 2045 + 1740 1741 1758 1757 2029 2030 2047 2046 + 1741 1742 1759 1758 2030 2031 2048 2047 + 1742 1743 1760 1759 2031 2032 2049 2048 + 1743 1744 1761 1760 2032 2033 2050 2049 + 1744 1745 1762 1761 2033 2034 2051 2050 + 1745 1746 1763 1762 2034 2035 2052 2051 + 1746 1747 1764 1763 2035 2036 2053 2052 + 1747 1748 1765 1764 2036 2037 2054 2053 + 1748 1749 1766 1765 2037 2038 2055 2054 + 1749 1750 1767 1766 2038 2039 2056 2055 + 1750 1751 1768 1767 2039 2040 2057 2056 + 1752 1753 1770 1769 2041 2042 2059 2058 + 1753 1754 1771 1770 2042 2043 2060 2059 + 1754 1755 1772 1771 2043 2044 2061 2060 + 1755 1756 1773 1772 2044 2045 2062 2061 + 1756 1757 1774 1773 2045 2046 2063 2062 + 1757 1758 1775 1774 2046 2047 2064 2063 + 1758 1759 1776 1775 2047 2048 2065 2064 + 1759 1760 1777 1776 2048 2049 2066 2065 + 1760 1761 1778 1777 2049 2050 2067 2066 + 1761 1762 1779 1778 2050 2051 2068 2067 + 1762 1763 1780 1779 2051 2052 2069 2068 + 1763 1764 1781 1780 2052 2053 2070 2069 + 1764 1765 1782 1781 2053 2054 2071 2070 + 1765 1766 1783 1782 2054 2055 2072 2071 + 1766 1767 1784 1783 2055 2056 2073 2072 + 1767 1768 1785 1784 2056 2057 2074 2073 + 1769 1770 1787 1786 2058 2059 2076 2075 + 1770 1771 1788 1787 2059 2060 2077 2076 + 1771 1772 1789 1788 2060 2061 2078 2077 + 1772 1773 1790 1789 2061 2062 2079 2078 + 1773 1774 1791 1790 2062 2063 2080 2079 + 1774 1775 1792 1791 2063 2064 2081 2080 + 1775 1776 1793 1792 2064 2065 2082 2081 + 1776 1777 1794 1793 2065 2066 2083 2082 + 1777 1778 1795 1794 2066 2067 2084 2083 + 1778 1779 1796 1795 2067 2068 2085 2084 + 1779 1780 1797 1796 2068 2069 2086 2085 + 1780 1781 1798 1797 2069 2070 2087 2086 + 1781 1782 1799 1798 2070 2071 2088 2087 + 1782 1783 1800 1799 2071 2072 2089 2088 + 1783 1784 1801 1800 2072 2073 2090 2089 + 1784 1785 1802 1801 2073 2074 2091 2090 + 1786 1787 1804 1803 2075 2076 2093 2092 + 1787 1788 1805 1804 2076 2077 2094 2093 + 1788 1789 1806 1805 2077 2078 2095 2094 + 1789 1790 1807 1806 2078 2079 2096 2095 + 1790 1791 1808 1807 2079 2080 2097 2096 + 1791 1792 1809 1808 2080 2081 2098 2097 + 1792 1793 1810 1809 2081 2082 2099 2098 + 1793 1794 1811 1810 2082 2083 2100 2099 + 1794 1795 1812 1811 2083 2084 2101 2100 + 1795 1796 1813 1812 2084 2085 2102 2101 + 1796 1797 1814 1813 2085 2086 2103 2102 + 1797 1798 1815 1814 2086 2087 2104 2103 + 1798 1799 1816 1815 2087 2088 2105 2104 + 1799 1800 1817 1816 2088 2089 2106 2105 + 1800 1801 1818 1817 2089 2090 2107 2106 + 1801 1802 1819 1818 2090 2091 2108 2107 + 1803 1804 1821 1820 2092 2093 2110 2109 + 1804 1805 1822 1821 2093 2094 2111 2110 + 1805 1806 1823 1822 2094 2095 2112 2111 + 1806 1807 1824 1823 2095 2096 2113 2112 + 1807 1808 1825 1824 2096 2097 2114 2113 + 1808 1809 1826 1825 2097 2098 2115 2114 + 1809 1810 1827 1826 2098 2099 2116 2115 + 1810 1811 1828 1827 2099 2100 2117 2116 + 1811 1812 1829 1828 2100 2101 2118 2117 + 1812 1813 1830 1829 2101 2102 2119 2118 + 1813 1814 1831 1830 2102 2103 2120 2119 + 1814 1815 1832 1831 2103 2104 2121 2120 + 1815 1816 1833 1832 2104 2105 2122 2121 + 1816 1817 1834 1833 2105 2106 2123 2122 + 1817 1818 1835 1834 2106 2107 2124 2123 + 1818 1819 1836 1835 2107 2108 2125 2124 + 1820 1821 1838 1837 2109 2110 2127 2126 + 1821 1822 1839 1838 2110 2111 2128 2127 + 1822 1823 1840 1839 2111 2112 2129 2128 + 1823 1824 1841 1840 2112 2113 2130 2129 + 1824 1825 1842 1841 2113 2114 2131 2130 + 1825 1826 1843 1842 2114 2115 2132 2131 + 1826 1827 1844 1843 2115 2116 2133 2132 + 1827 1828 1845 1844 2116 2117 2134 2133 + 1828 1829 1846 1845 2117 2118 2135 2134 + 1829 1830 1847 1846 2118 2119 2136 2135 + 1830 1831 1848 1847 2119 2120 2137 2136 + 1831 1832 1849 1848 2120 2121 2138 2137 + 1832 1833 1850 1849 2121 2122 2139 2138 + 1833 1834 1851 1850 2122 2123 2140 2139 + 1834 1835 1852 1851 2123 2124 2141 2140 + 1835 1836 1853 1852 2124 2125 2142 2141 + 1837 1838 1855 1854 2126 2127 2144 2143 + 1838 1839 1856 1855 2127 2128 2145 2144 + 1839 1840 1857 1856 2128 2129 2146 2145 + 1840 1841 1858 1857 2129 2130 2147 2146 + 1841 1842 1859 1858 2130 2131 2148 2147 + 1842 1843 1860 1859 2131 2132 2149 2148 + 1843 1844 1861 1860 2132 2133 2150 2149 + 1844 1845 1862 1861 2133 2134 2151 2150 + 1845 1846 1863 1862 2134 2135 2152 2151 + 1846 1847 1864 1863 2135 2136 2153 2152 + 1847 1848 1865 1864 2136 2137 2154 2153 + 1848 1849 1866 1865 2137 2138 2155 2154 + 1849 1850 1867 1866 2138 2139 2156 2155 + 1850 1851 1868 1867 2139 2140 2157 2156 + 1851 1852 1869 1868 2140 2141 2158 2157 + 1852 1853 1870 1869 2141 2142 2159 2158 + 1854 1855 1872 1871 2143 2144 2161 2160 + 1855 1856 1873 1872 2144 2145 2162 2161 + 1856 1857 1874 1873 2145 2146 2163 2162 + 1857 1858 1875 1874 2146 2147 2164 2163 + 1858 1859 1876 1875 2147 2148 2165 2164 + 1859 1860 1877 1876 2148 2149 2166 2165 + 1860 1861 1878 1877 2149 2150 2167 2166 + 1861 1862 1879 1878 2150 2151 2168 2167 + 1862 1863 1880 1879 2151 2152 2169 2168 + 1863 1864 1881 1880 2152 2153 2170 2169 + 1864 1865 1882 1881 2153 2154 2171 2170 + 1865 1866 1883 1882 2154 2155 2172 2171 + 1866 1867 1884 1883 2155 2156 2173 2172 + 1867 1868 1885 1884 2156 2157 2174 2173 + 1868 1869 1886 1885 2157 2158 2175 2174 + 1869 1870 1887 1886 2158 2159 2176 2175 + 1871 1872 1889 1888 2160 2161 2178 2177 + 1872 1873 1890 1889 2161 2162 2179 2178 + 1873 1874 1891 1890 2162 2163 2180 2179 + 1874 1875 1892 1891 2163 2164 2181 2180 + 1875 1876 1893 1892 2164 2165 2182 2181 + 1876 1877 1894 1893 2165 2166 2183 2182 + 1877 1878 1895 1894 2166 2167 2184 2183 + 1878 1879 1896 1895 2167 2168 2185 2184 + 1879 1880 1897 1896 2168 2169 2186 2185 + 1880 1881 1898 1897 2169 2170 2187 2186 + 1881 1882 1899 1898 2170 2171 2188 2187 + 1882 1883 1900 1899 2171 2172 2189 2188 + 1883 1884 1901 1900 2172 2173 2190 2189 + 1884 1885 1902 1901 2173 2174 2191 2190 + 1885 1886 1903 1902 2174 2175 2192 2191 + 1886 1887 1904 1903 2175 2176 2193 2192 + 1888 1889 1906 1905 2177 2178 2195 2194 + 1889 1890 1907 1906 2178 2179 2196 2195 + 1890 1891 1908 1907 2179 2180 2197 2196 + 1891 1892 1909 1908 2180 2181 2198 2197 + 1892 1893 1910 1909 2181 2182 2199 2198 + 1893 1894 1911 1910 2182 2183 2200 2199 + 1894 1895 1912 1911 2183 2184 2201 2200 + 1895 1896 1913 1912 2184 2185 2202 2201 + 1896 1897 1914 1913 2185 2186 2203 2202 + 1897 1898 1915 1914 2186 2187 2204 2203 + 1898 1899 1916 1915 2187 2188 2205 2204 + 1899 1900 1917 1916 2188 2189 2206 2205 + 1900 1901 1918 1917 2189 2190 2207 2206 + 1901 1902 1919 1918 2190 2191 2208 2207 + 1902 1903 1920 1919 2191 2192 2209 2208 + 1903 1904 1921 1920 2192 2193 2210 2209 + 1905 1906 1923 1922 2194 2195 2212 2211 + 1906 1907 1924 1923 2195 2196 2213 2212 + 1907 1908 1925 1924 2196 2197 2214 2213 + 1908 1909 1926 1925 2197 2198 2215 2214 + 1909 1910 1927 1926 2198 2199 2216 2215 + 1910 1911 1928 1927 2199 2200 2217 2216 + 1911 1912 1929 1928 2200 2201 2218 2217 + 1912 1913 1930 1929 2201 2202 2219 2218 + 1913 1914 1931 1930 2202 2203 2220 2219 + 1914 1915 1932 1931 2203 2204 2221 2220 + 1915 1916 1933 1932 2204 2205 2222 2221 + 1916 1917 1934 1933 2205 2206 2223 2222 + 1917 1918 1935 1934 2206 2207 2224 2223 + 1918 1919 1936 1935 2207 2208 2225 2224 + 1919 1920 1937 1936 2208 2209 2226 2225 + 1920 1921 1938 1937 2209 2210 2227 2226 + 1922 1923 1940 1939 2211 2212 2229 2228 + 1923 1924 1941 1940 2212 2213 2230 2229 + 1924 1925 1942 1941 2213 2214 2231 2230 + 1925 1926 1943 1942 2214 2215 2232 2231 + 1926 1927 1944 1943 2215 2216 2233 2232 + 1927 1928 1945 1944 2216 2217 2234 2233 + 1928 1929 1946 1945 2217 2218 2235 2234 + 1929 1930 1947 1946 2218 2219 2236 2235 + 1930 1931 1948 1947 2219 2220 2237 2236 + 1931 1932 1949 1948 2220 2221 2238 2237 + 1932 1933 1950 1949 2221 2222 2239 2238 + 1933 1934 1951 1950 2222 2223 2240 2239 + 1934 1935 1952 1951 2223 2224 2241 2240 + 1935 1936 1953 1952 2224 2225 2242 2241 + 1936 1937 1954 1953 2225 2226 2243 2242 + 1937 1938 1955 1954 2226 2227 2244 2243 + 1939 1940 1957 1956 2228 2229 2246 2245 + 1940 1941 1958 1957 2229 2230 2247 2246 + 1941 1942 1959 1958 2230 2231 2248 2247 + 1942 1943 1960 1959 2231 2232 2249 2248 + 1943 1944 1961 1960 2232 2233 2250 2249 + 1944 1945 1962 1961 2233 2234 2251 2250 + 1945 1946 1963 1962 2234 2235 2252 2251 + 1946 1947 1964 1963 2235 2236 2253 2252 + 1947 1948 1965 1964 2236 2237 2254 2253 + 1948 1949 1966 1965 2237 2238 2255 2254 + 1949 1950 1967 1966 2238 2239 2256 2255 + 1950 1951 1968 1967 2239 2240 2257 2256 + 1951 1952 1969 1968 2240 2241 2258 2257 + 1952 1953 1970 1969 2241 2242 2259 2258 + 1953 1954 1971 1970 2242 2243 2260 2259 + 1954 1955 1972 1971 2243 2244 2261 2260 + 1956 1957 1974 1973 2245 2246 2263 2262 + 1957 1958 1975 1974 2246 2247 2264 2263 + 1958 1959 1976 1975 2247 2248 2265 2264 + 1959 1960 1977 1976 2248 2249 2266 2265 + 1960 1961 1978 1977 2249 2250 2267 2266 + 1961 1962 1979 1978 2250 2251 2268 2267 + 1962 1963 1980 1979 2251 2252 2269 2268 + 1963 1964 1981 1980 2252 2253 2270 2269 + 1964 1965 1982 1981 2253 2254 2271 2270 + 1965 1966 1983 1982 2254 2255 2272 2271 + 1966 1967 1984 1983 2255 2256 2273 2272 + 1967 1968 1985 1984 2256 2257 2274 2273 + 1968 1969 1986 1985 2257 2258 2275 2274 + 1969 1970 1987 1986 2258 2259 2276 2275 + 1970 1971 1988 1987 2259 2260 2277 2276 + 1971 1972 1989 1988 2260 2261 2278 2277 + 1973 1974 1991 1990 2262 2263 2280 2279 + 1974 1975 1992 1991 2263 2264 2281 2280 + 1975 1976 1993 1992 2264 2265 2282 2281 + 1976 1977 1994 1993 2265 2266 2283 2282 + 1977 1978 1995 1994 2266 2267 2284 2283 + 1978 1979 1996 1995 2267 2268 2285 2284 + 1979 1980 1997 1996 2268 2269 2286 2285 + 1980 1981 1998 1997 2269 2270 2287 2286 + 1981 1982 1999 1998 2270 2271 2288 2287 + 1982 1983 2000 1999 2271 2272 2289 2288 + 1983 1984 2001 2000 2272 2273 2290 2289 + 1984 1985 2002 2001 2273 2274 2291 2290 + 1985 1986 2003 2002 2274 2275 2292 2291 + 1986 1987 2004 2003 2275 2276 2293 2292 + 1987 1988 2005 2004 2276 2277 2294 2293 + 1988 1989 2006 2005 2277 2278 2295 2294 + 1990 1991 2008 2007 2279 2280 2297 2296 + 1991 1992 2009 2008 2280 2281 2298 2297 + 1992 1993 2010 2009 2281 2282 2299 2298 + 1993 1994 2011 2010 2282 2283 2300 2299 + 1994 1995 2012 2011 2283 2284 2301 2300 + 1995 1996 2013 2012 2284 2285 2302 2301 + 1996 1997 2014 2013 2285 2286 2303 2302 + 1997 1998 2015 2014 2286 2287 2304 2303 + 1998 1999 2016 2015 2287 2288 2305 2304 + 1999 2000 2017 2016 2288 2289 2306 2305 + 2000 2001 2018 2017 2289 2290 2307 2306 + 2001 2002 2019 2018 2290 2291 2308 2307 + 2002 2003 2020 2019 2291 2292 2309 2308 + 2003 2004 2021 2020 2292 2293 2310 2309 + 2004 2005 2022 2021 2293 2294 2311 2310 + 2005 2006 2023 2022 2294 2295 2312 2311 + 2024 2025 2042 2041 2313 2314 2331 2330 + 2025 2026 2043 2042 2314 2315 2332 2331 + 2026 2027 2044 2043 2315 2316 2333 2332 + 2027 2028 2045 2044 2316 2317 2334 2333 + 2028 2029 2046 2045 2317 2318 2335 2334 + 2029 2030 2047 2046 2318 2319 2336 2335 + 2030 2031 2048 2047 2319 2320 2337 2336 + 2031 2032 2049 2048 2320 2321 2338 2337 + 2032 2033 2050 2049 2321 2322 2339 2338 + 2033 2034 2051 2050 2322 2323 2340 2339 + 2034 2035 2052 2051 2323 2324 2341 2340 + 2035 2036 2053 2052 2324 2325 2342 2341 + 2036 2037 2054 2053 2325 2326 2343 2342 + 2037 2038 2055 2054 2326 2327 2344 2343 + 2038 2039 2056 2055 2327 2328 2345 2344 + 2039 2040 2057 2056 2328 2329 2346 2345 + 2041 2042 2059 2058 2330 2331 2348 2347 + 2042 2043 2060 2059 2331 2332 2349 2348 + 2043 2044 2061 2060 2332 2333 2350 2349 + 2044 2045 2062 2061 2333 2334 2351 2350 + 2045 2046 2063 2062 2334 2335 2352 2351 + 2046 2047 2064 2063 2335 2336 2353 2352 + 2047 2048 2065 2064 2336 2337 2354 2353 + 2048 2049 2066 2065 2337 2338 2355 2354 + 2049 2050 2067 2066 2338 2339 2356 2355 + 2050 2051 2068 2067 2339 2340 2357 2356 + 2051 2052 2069 2068 2340 2341 2358 2357 + 2052 2053 2070 2069 2341 2342 2359 2358 + 2053 2054 2071 2070 2342 2343 2360 2359 + 2054 2055 2072 2071 2343 2344 2361 2360 + 2055 2056 2073 2072 2344 2345 2362 2361 + 2056 2057 2074 2073 2345 2346 2363 2362 + 2058 2059 2076 2075 2347 2348 2365 2364 + 2059 2060 2077 2076 2348 2349 2366 2365 + 2060 2061 2078 2077 2349 2350 2367 2366 + 2061 2062 2079 2078 2350 2351 2368 2367 + 2062 2063 2080 2079 2351 2352 2369 2368 + 2063 2064 2081 2080 2352 2353 2370 2369 + 2064 2065 2082 2081 2353 2354 2371 2370 + 2065 2066 2083 2082 2354 2355 2372 2371 + 2066 2067 2084 2083 2355 2356 2373 2372 + 2067 2068 2085 2084 2356 2357 2374 2373 + 2068 2069 2086 2085 2357 2358 2375 2374 + 2069 2070 2087 2086 2358 2359 2376 2375 + 2070 2071 2088 2087 2359 2360 2377 2376 + 2071 2072 2089 2088 2360 2361 2378 2377 + 2072 2073 2090 2089 2361 2362 2379 2378 + 2073 2074 2091 2090 2362 2363 2380 2379 + 2075 2076 2093 2092 2364 2365 2382 2381 + 2076 2077 2094 2093 2365 2366 2383 2382 + 2077 2078 2095 2094 2366 2367 2384 2383 + 2078 2079 2096 2095 2367 2368 2385 2384 + 2079 2080 2097 2096 2368 2369 2386 2385 + 2080 2081 2098 2097 2369 2370 2387 2386 + 2081 2082 2099 2098 2370 2371 2388 2387 + 2082 2083 2100 2099 2371 2372 2389 2388 + 2083 2084 2101 2100 2372 2373 2390 2389 + 2084 2085 2102 2101 2373 2374 2391 2390 + 2085 2086 2103 2102 2374 2375 2392 2391 + 2086 2087 2104 2103 2375 2376 2393 2392 + 2087 2088 2105 2104 2376 2377 2394 2393 + 2088 2089 2106 2105 2377 2378 2395 2394 + 2089 2090 2107 2106 2378 2379 2396 2395 + 2090 2091 2108 2107 2379 2380 2397 2396 + 2092 2093 2110 2109 2381 2382 2399 2398 + 2093 2094 2111 2110 2382 2383 2400 2399 + 2094 2095 2112 2111 2383 2384 2401 2400 + 2095 2096 2113 2112 2384 2385 2402 2401 + 2096 2097 2114 2113 2385 2386 2403 2402 + 2097 2098 2115 2114 2386 2387 2404 2403 + 2098 2099 2116 2115 2387 2388 2405 2404 + 2099 2100 2117 2116 2388 2389 2406 2405 + 2100 2101 2118 2117 2389 2390 2407 2406 + 2101 2102 2119 2118 2390 2391 2408 2407 + 2102 2103 2120 2119 2391 2392 2409 2408 + 2103 2104 2121 2120 2392 2393 2410 2409 + 2104 2105 2122 2121 2393 2394 2411 2410 + 2105 2106 2123 2122 2394 2395 2412 2411 + 2106 2107 2124 2123 2395 2396 2413 2412 + 2107 2108 2125 2124 2396 2397 2414 2413 + 2109 2110 2127 2126 2398 2399 2416 2415 + 2110 2111 2128 2127 2399 2400 2417 2416 + 2111 2112 2129 2128 2400 2401 2418 2417 + 2112 2113 2130 2129 2401 2402 2419 2418 + 2113 2114 2131 2130 2402 2403 2420 2419 + 2114 2115 2132 2131 2403 2404 2421 2420 + 2115 2116 2133 2132 2404 2405 2422 2421 + 2116 2117 2134 2133 2405 2406 2423 2422 + 2117 2118 2135 2134 2406 2407 2424 2423 + 2118 2119 2136 2135 2407 2408 2425 2424 + 2119 2120 2137 2136 2408 2409 2426 2425 + 2120 2121 2138 2137 2409 2410 2427 2426 + 2121 2122 2139 2138 2410 2411 2428 2427 + 2122 2123 2140 2139 2411 2412 2429 2428 + 2123 2124 2141 2140 2412 2413 2430 2429 + 2124 2125 2142 2141 2413 2414 2431 2430 + 2126 2127 2144 2143 2415 2416 2433 2432 + 2127 2128 2145 2144 2416 2417 2434 2433 + 2128 2129 2146 2145 2417 2418 2435 2434 + 2129 2130 2147 2146 2418 2419 2436 2435 + 2130 2131 2148 2147 2419 2420 2437 2436 + 2131 2132 2149 2148 2420 2421 2438 2437 + 2132 2133 2150 2149 2421 2422 2439 2438 + 2133 2134 2151 2150 2422 2423 2440 2439 + 2134 2135 2152 2151 2423 2424 2441 2440 + 2135 2136 2153 2152 2424 2425 2442 2441 + 2136 2137 2154 2153 2425 2426 2443 2442 + 2137 2138 2155 2154 2426 2427 2444 2443 + 2138 2139 2156 2155 2427 2428 2445 2444 + 2139 2140 2157 2156 2428 2429 2446 2445 + 2140 2141 2158 2157 2429 2430 2447 2446 + 2141 2142 2159 2158 2430 2431 2448 2447 + 2143 2144 2161 2160 2432 2433 2450 2449 + 2144 2145 2162 2161 2433 2434 2451 2450 + 2145 2146 2163 2162 2434 2435 2452 2451 + 2146 2147 2164 2163 2435 2436 2453 2452 + 2147 2148 2165 2164 2436 2437 2454 2453 + 2148 2149 2166 2165 2437 2438 2455 2454 + 2149 2150 2167 2166 2438 2439 2456 2455 + 2150 2151 2168 2167 2439 2440 2457 2456 + 2151 2152 2169 2168 2440 2441 2458 2457 + 2152 2153 2170 2169 2441 2442 2459 2458 + 2153 2154 2171 2170 2442 2443 2460 2459 + 2154 2155 2172 2171 2443 2444 2461 2460 + 2155 2156 2173 2172 2444 2445 2462 2461 + 2156 2157 2174 2173 2445 2446 2463 2462 + 2157 2158 2175 2174 2446 2447 2464 2463 + 2158 2159 2176 2175 2447 2448 2465 2464 + 2160 2161 2178 2177 2449 2450 2467 2466 + 2161 2162 2179 2178 2450 2451 2468 2467 + 2162 2163 2180 2179 2451 2452 2469 2468 + 2163 2164 2181 2180 2452 2453 2470 2469 + 2164 2165 2182 2181 2453 2454 2471 2470 + 2165 2166 2183 2182 2454 2455 2472 2471 + 2166 2167 2184 2183 2455 2456 2473 2472 + 2167 2168 2185 2184 2456 2457 2474 2473 + 2168 2169 2186 2185 2457 2458 2475 2474 + 2169 2170 2187 2186 2458 2459 2476 2475 + 2170 2171 2188 2187 2459 2460 2477 2476 + 2171 2172 2189 2188 2460 2461 2478 2477 + 2172 2173 2190 2189 2461 2462 2479 2478 + 2173 2174 2191 2190 2462 2463 2480 2479 + 2174 2175 2192 2191 2463 2464 2481 2480 + 2175 2176 2193 2192 2464 2465 2482 2481 + 2177 2178 2195 2194 2466 2467 2484 2483 + 2178 2179 2196 2195 2467 2468 2485 2484 + 2179 2180 2197 2196 2468 2469 2486 2485 + 2180 2181 2198 2197 2469 2470 2487 2486 + 2181 2182 2199 2198 2470 2471 2488 2487 + 2182 2183 2200 2199 2471 2472 2489 2488 + 2183 2184 2201 2200 2472 2473 2490 2489 + 2184 2185 2202 2201 2473 2474 2491 2490 + 2185 2186 2203 2202 2474 2475 2492 2491 + 2186 2187 2204 2203 2475 2476 2493 2492 + 2187 2188 2205 2204 2476 2477 2494 2493 + 2188 2189 2206 2205 2477 2478 2495 2494 + 2189 2190 2207 2206 2478 2479 2496 2495 + 2190 2191 2208 2207 2479 2480 2497 2496 + 2191 2192 2209 2208 2480 2481 2498 2497 + 2192 2193 2210 2209 2481 2482 2499 2498 + 2194 2195 2212 2211 2483 2484 2501 2500 + 2195 2196 2213 2212 2484 2485 2502 2501 + 2196 2197 2214 2213 2485 2486 2503 2502 + 2197 2198 2215 2214 2486 2487 2504 2503 + 2198 2199 2216 2215 2487 2488 2505 2504 + 2199 2200 2217 2216 2488 2489 2506 2505 + 2200 2201 2218 2217 2489 2490 2507 2506 + 2201 2202 2219 2218 2490 2491 2508 2507 + 2202 2203 2220 2219 2491 2492 2509 2508 + 2203 2204 2221 2220 2492 2493 2510 2509 + 2204 2205 2222 2221 2493 2494 2511 2510 + 2205 2206 2223 2222 2494 2495 2512 2511 + 2206 2207 2224 2223 2495 2496 2513 2512 + 2207 2208 2225 2224 2496 2497 2514 2513 + 2208 2209 2226 2225 2497 2498 2515 2514 + 2209 2210 2227 2226 2498 2499 2516 2515 + 2211 2212 2229 2228 2500 2501 2518 2517 + 2212 2213 2230 2229 2501 2502 2519 2518 + 2213 2214 2231 2230 2502 2503 2520 2519 + 2214 2215 2232 2231 2503 2504 2521 2520 + 2215 2216 2233 2232 2504 2505 2522 2521 + 2216 2217 2234 2233 2505 2506 2523 2522 + 2217 2218 2235 2234 2506 2507 2524 2523 + 2218 2219 2236 2235 2507 2508 2525 2524 + 2219 2220 2237 2236 2508 2509 2526 2525 + 2220 2221 2238 2237 2509 2510 2527 2526 + 2221 2222 2239 2238 2510 2511 2528 2527 + 2222 2223 2240 2239 2511 2512 2529 2528 + 2223 2224 2241 2240 2512 2513 2530 2529 + 2224 2225 2242 2241 2513 2514 2531 2530 + 2225 2226 2243 2242 2514 2515 2532 2531 + 2226 2227 2244 2243 2515 2516 2533 2532 + 2228 2229 2246 2245 2517 2518 2535 2534 + 2229 2230 2247 2246 2518 2519 2536 2535 + 2230 2231 2248 2247 2519 2520 2537 2536 + 2231 2232 2249 2248 2520 2521 2538 2537 + 2232 2233 2250 2249 2521 2522 2539 2538 + 2233 2234 2251 2250 2522 2523 2540 2539 + 2234 2235 2252 2251 2523 2524 2541 2540 + 2235 2236 2253 2252 2524 2525 2542 2541 + 2236 2237 2254 2253 2525 2526 2543 2542 + 2237 2238 2255 2254 2526 2527 2544 2543 + 2238 2239 2256 2255 2527 2528 2545 2544 + 2239 2240 2257 2256 2528 2529 2546 2545 + 2240 2241 2258 2257 2529 2530 2547 2546 + 2241 2242 2259 2258 2530 2531 2548 2547 + 2242 2243 2260 2259 2531 2532 2549 2548 + 2243 2244 2261 2260 2532 2533 2550 2549 + 2245 2246 2263 2262 2534 2535 2552 2551 + 2246 2247 2264 2263 2535 2536 2553 2552 + 2247 2248 2265 2264 2536 2537 2554 2553 + 2248 2249 2266 2265 2537 2538 2555 2554 + 2249 2250 2267 2266 2538 2539 2556 2555 + 2250 2251 2268 2267 2539 2540 2557 2556 + 2251 2252 2269 2268 2540 2541 2558 2557 + 2252 2253 2270 2269 2541 2542 2559 2558 + 2253 2254 2271 2270 2542 2543 2560 2559 + 2254 2255 2272 2271 2543 2544 2561 2560 + 2255 2256 2273 2272 2544 2545 2562 2561 + 2256 2257 2274 2273 2545 2546 2563 2562 + 2257 2258 2275 2274 2546 2547 2564 2563 + 2258 2259 2276 2275 2547 2548 2565 2564 + 2259 2260 2277 2276 2548 2549 2566 2565 + 2260 2261 2278 2277 2549 2550 2567 2566 + 2262 2263 2280 2279 2551 2552 2569 2568 + 2263 2264 2281 2280 2552 2553 2570 2569 + 2264 2265 2282 2281 2553 2554 2571 2570 + 2265 2266 2283 2282 2554 2555 2572 2571 + 2266 2267 2284 2283 2555 2556 2573 2572 + 2267 2268 2285 2284 2556 2557 2574 2573 + 2268 2269 2286 2285 2557 2558 2575 2574 + 2269 2270 2287 2286 2558 2559 2576 2575 + 2270 2271 2288 2287 2559 2560 2577 2576 + 2271 2272 2289 2288 2560 2561 2578 2577 + 2272 2273 2290 2289 2561 2562 2579 2578 + 2273 2274 2291 2290 2562 2563 2580 2579 + 2274 2275 2292 2291 2563 2564 2581 2580 + 2275 2276 2293 2292 2564 2565 2582 2581 + 2276 2277 2294 2293 2565 2566 2583 2582 + 2277 2278 2295 2294 2566 2567 2584 2583 + 2279 2280 2297 2296 2568 2569 2586 2585 + 2280 2281 2298 2297 2569 2570 2587 2586 + 2281 2282 2299 2298 2570 2571 2588 2587 + 2282 2283 2300 2299 2571 2572 2589 2588 + 2283 2284 2301 2300 2572 2573 2590 2589 + 2284 2285 2302 2301 2573 2574 2591 2590 + 2285 2286 2303 2302 2574 2575 2592 2591 + 2286 2287 2304 2303 2575 2576 2593 2592 + 2287 2288 2305 2304 2576 2577 2594 2593 + 2288 2289 2306 2305 2577 2578 2595 2594 + 2289 2290 2307 2306 2578 2579 2596 2595 + 2290 2291 2308 2307 2579 2580 2597 2596 + 2291 2292 2309 2308 2580 2581 2598 2597 + 2292 2293 2310 2309 2581 2582 2599 2598 + 2293 2294 2311 2310 2582 2583 2600 2599 + 2294 2295 2312 2311 2583 2584 2601 2600 + 2313 2314 2331 2330 2602 2603 2620 2619 + 2314 2315 2332 2331 2603 2604 2621 2620 + 2315 2316 2333 2332 2604 2605 2622 2621 + 2316 2317 2334 2333 2605 2606 2623 2622 + 2317 2318 2335 2334 2606 2607 2624 2623 + 2318 2319 2336 2335 2607 2608 2625 2624 + 2319 2320 2337 2336 2608 2609 2626 2625 + 2320 2321 2338 2337 2609 2610 2627 2626 + 2321 2322 2339 2338 2610 2611 2628 2627 + 2322 2323 2340 2339 2611 2612 2629 2628 + 2323 2324 2341 2340 2612 2613 2630 2629 + 2324 2325 2342 2341 2613 2614 2631 2630 + 2325 2326 2343 2342 2614 2615 2632 2631 + 2326 2327 2344 2343 2615 2616 2633 2632 + 2327 2328 2345 2344 2616 2617 2634 2633 + 2328 2329 2346 2345 2617 2618 2635 2634 + 2330 2331 2348 2347 2619 2620 2637 2636 + 2331 2332 2349 2348 2620 2621 2638 2637 + 2332 2333 2350 2349 2621 2622 2639 2638 + 2333 2334 2351 2350 2622 2623 2640 2639 + 2334 2335 2352 2351 2623 2624 2641 2640 + 2335 2336 2353 2352 2624 2625 2642 2641 + 2336 2337 2354 2353 2625 2626 2643 2642 + 2337 2338 2355 2354 2626 2627 2644 2643 + 2338 2339 2356 2355 2627 2628 2645 2644 + 2339 2340 2357 2356 2628 2629 2646 2645 + 2340 2341 2358 2357 2629 2630 2647 2646 + 2341 2342 2359 2358 2630 2631 2648 2647 + 2342 2343 2360 2359 2631 2632 2649 2648 + 2343 2344 2361 2360 2632 2633 2650 2649 + 2344 2345 2362 2361 2633 2634 2651 2650 + 2345 2346 2363 2362 2634 2635 2652 2651 + 2347 2348 2365 2364 2636 2637 2654 2653 + 2348 2349 2366 2365 2637 2638 2655 2654 + 2349 2350 2367 2366 2638 2639 2656 2655 + 2350 2351 2368 2367 2639 2640 2657 2656 + 2351 2352 2369 2368 2640 2641 2658 2657 + 2352 2353 2370 2369 2641 2642 2659 2658 + 2353 2354 2371 2370 2642 2643 2660 2659 + 2354 2355 2372 2371 2643 2644 2661 2660 + 2355 2356 2373 2372 2644 2645 2662 2661 + 2356 2357 2374 2373 2645 2646 2663 2662 + 2357 2358 2375 2374 2646 2647 2664 2663 + 2358 2359 2376 2375 2647 2648 2665 2664 + 2359 2360 2377 2376 2648 2649 2666 2665 + 2360 2361 2378 2377 2649 2650 2667 2666 + 2361 2362 2379 2378 2650 2651 2668 2667 + 2362 2363 2380 2379 2651 2652 2669 2668 + 2364 2365 2382 2381 2653 2654 2671 2670 + 2365 2366 2383 2382 2654 2655 2672 2671 + 2366 2367 2384 2383 2655 2656 2673 2672 + 2367 2368 2385 2384 2656 2657 2674 2673 + 2368 2369 2386 2385 2657 2658 2675 2674 + 2369 2370 2387 2386 2658 2659 2676 2675 + 2370 2371 2388 2387 2659 2660 2677 2676 + 2371 2372 2389 2388 2660 2661 2678 2677 + 2372 2373 2390 2389 2661 2662 2679 2678 + 2373 2374 2391 2390 2662 2663 2680 2679 + 2374 2375 2392 2391 2663 2664 2681 2680 + 2375 2376 2393 2392 2664 2665 2682 2681 + 2376 2377 2394 2393 2665 2666 2683 2682 + 2377 2378 2395 2394 2666 2667 2684 2683 + 2378 2379 2396 2395 2667 2668 2685 2684 + 2379 2380 2397 2396 2668 2669 2686 2685 + 2381 2382 2399 2398 2670 2671 2688 2687 + 2382 2383 2400 2399 2671 2672 2689 2688 + 2383 2384 2401 2400 2672 2673 2690 2689 + 2384 2385 2402 2401 2673 2674 2691 2690 + 2385 2386 2403 2402 2674 2675 2692 2691 + 2386 2387 2404 2403 2675 2676 2693 2692 + 2387 2388 2405 2404 2676 2677 2694 2693 + 2388 2389 2406 2405 2677 2678 2695 2694 + 2389 2390 2407 2406 2678 2679 2696 2695 + 2390 2391 2408 2407 2679 2680 2697 2696 + 2391 2392 2409 2408 2680 2681 2698 2697 + 2392 2393 2410 2409 2681 2682 2699 2698 + 2393 2394 2411 2410 2682 2683 2700 2699 + 2394 2395 2412 2411 2683 2684 2701 2700 + 2395 2396 2413 2412 2684 2685 2702 2701 + 2396 2397 2414 2413 2685 2686 2703 2702 + 2398 2399 2416 2415 2687 2688 2705 2704 + 2399 2400 2417 2416 2688 2689 2706 2705 + 2400 2401 2418 2417 2689 2690 2707 2706 + 2401 2402 2419 2418 2690 2691 2708 2707 + 2402 2403 2420 2419 2691 2692 2709 2708 + 2403 2404 2421 2420 2692 2693 2710 2709 + 2404 2405 2422 2421 2693 2694 2711 2710 + 2405 2406 2423 2422 2694 2695 2712 2711 + 2406 2407 2424 2423 2695 2696 2713 2712 + 2407 2408 2425 2424 2696 2697 2714 2713 + 2408 2409 2426 2425 2697 2698 2715 2714 + 2409 2410 2427 2426 2698 2699 2716 2715 + 2410 2411 2428 2427 2699 2700 2717 2716 + 2411 2412 2429 2428 2700 2701 2718 2717 + 2412 2413 2430 2429 2701 2702 2719 2718 + 2413 2414 2431 2430 2702 2703 2720 2719 + 2415 2416 2433 2432 2704 2705 2722 2721 + 2416 2417 2434 2433 2705 2706 2723 2722 + 2417 2418 2435 2434 2706 2707 2724 2723 + 2418 2419 2436 2435 2707 2708 2725 2724 + 2419 2420 2437 2436 2708 2709 2726 2725 + 2420 2421 2438 2437 2709 2710 2727 2726 + 2421 2422 2439 2438 2710 2711 2728 2727 + 2422 2423 2440 2439 2711 2712 2729 2728 + 2423 2424 2441 2440 2712 2713 2730 2729 + 2424 2425 2442 2441 2713 2714 2731 2730 + 2425 2426 2443 2442 2714 2715 2732 2731 + 2426 2427 2444 2443 2715 2716 2733 2732 + 2427 2428 2445 2444 2716 2717 2734 2733 + 2428 2429 2446 2445 2717 2718 2735 2734 + 2429 2430 2447 2446 2718 2719 2736 2735 + 2430 2431 2448 2447 2719 2720 2737 2736 + 2432 2433 2450 2449 2721 2722 2739 2738 + 2433 2434 2451 2450 2722 2723 2740 2739 + 2434 2435 2452 2451 2723 2724 2741 2740 + 2435 2436 2453 2452 2724 2725 2742 2741 + 2436 2437 2454 2453 2725 2726 2743 2742 + 2437 2438 2455 2454 2726 2727 2744 2743 + 2438 2439 2456 2455 2727 2728 2745 2744 + 2439 2440 2457 2456 2728 2729 2746 2745 + 2440 2441 2458 2457 2729 2730 2747 2746 + 2441 2442 2459 2458 2730 2731 2748 2747 + 2442 2443 2460 2459 2731 2732 2749 2748 + 2443 2444 2461 2460 2732 2733 2750 2749 + 2444 2445 2462 2461 2733 2734 2751 2750 + 2445 2446 2463 2462 2734 2735 2752 2751 + 2446 2447 2464 2463 2735 2736 2753 2752 + 2447 2448 2465 2464 2736 2737 2754 2753 + 2449 2450 2467 2466 2738 2739 2756 2755 + 2450 2451 2468 2467 2739 2740 2757 2756 + 2451 2452 2469 2468 2740 2741 2758 2757 + 2452 2453 2470 2469 2741 2742 2759 2758 + 2453 2454 2471 2470 2742 2743 2760 2759 + 2454 2455 2472 2471 2743 2744 2761 2760 + 2455 2456 2473 2472 2744 2745 2762 2761 + 2456 2457 2474 2473 2745 2746 2763 2762 + 2457 2458 2475 2474 2746 2747 2764 2763 + 2458 2459 2476 2475 2747 2748 2765 2764 + 2459 2460 2477 2476 2748 2749 2766 2765 + 2460 2461 2478 2477 2749 2750 2767 2766 + 2461 2462 2479 2478 2750 2751 2768 2767 + 2462 2463 2480 2479 2751 2752 2769 2768 + 2463 2464 2481 2480 2752 2753 2770 2769 + 2464 2465 2482 2481 2753 2754 2771 2770 + 2466 2467 2484 2483 2755 2756 2773 2772 + 2467 2468 2485 2484 2756 2757 2774 2773 + 2468 2469 2486 2485 2757 2758 2775 2774 + 2469 2470 2487 2486 2758 2759 2776 2775 + 2470 2471 2488 2487 2759 2760 2777 2776 + 2471 2472 2489 2488 2760 2761 2778 2777 + 2472 2473 2490 2489 2761 2762 2779 2778 + 2473 2474 2491 2490 2762 2763 2780 2779 + 2474 2475 2492 2491 2763 2764 2781 2780 + 2475 2476 2493 2492 2764 2765 2782 2781 + 2476 2477 2494 2493 2765 2766 2783 2782 + 2477 2478 2495 2494 2766 2767 2784 2783 + 2478 2479 2496 2495 2767 2768 2785 2784 + 2479 2480 2497 2496 2768 2769 2786 2785 + 2480 2481 2498 2497 2769 2770 2787 2786 + 2481 2482 2499 2498 2770 2771 2788 2787 + 2483 2484 2501 2500 2772 2773 2790 2789 + 2484 2485 2502 2501 2773 2774 2791 2790 + 2485 2486 2503 2502 2774 2775 2792 2791 + 2486 2487 2504 2503 2775 2776 2793 2792 + 2487 2488 2505 2504 2776 2777 2794 2793 + 2488 2489 2506 2505 2777 2778 2795 2794 + 2489 2490 2507 2506 2778 2779 2796 2795 + 2490 2491 2508 2507 2779 2780 2797 2796 + 2491 2492 2509 2508 2780 2781 2798 2797 + 2492 2493 2510 2509 2781 2782 2799 2798 + 2493 2494 2511 2510 2782 2783 2800 2799 + 2494 2495 2512 2511 2783 2784 2801 2800 + 2495 2496 2513 2512 2784 2785 2802 2801 + 2496 2497 2514 2513 2785 2786 2803 2802 + 2497 2498 2515 2514 2786 2787 2804 2803 + 2498 2499 2516 2515 2787 2788 2805 2804 + 2500 2501 2518 2517 2789 2790 2807 2806 + 2501 2502 2519 2518 2790 2791 2808 2807 + 2502 2503 2520 2519 2791 2792 2809 2808 + 2503 2504 2521 2520 2792 2793 2810 2809 + 2504 2505 2522 2521 2793 2794 2811 2810 + 2505 2506 2523 2522 2794 2795 2812 2811 + 2506 2507 2524 2523 2795 2796 2813 2812 + 2507 2508 2525 2524 2796 2797 2814 2813 + 2508 2509 2526 2525 2797 2798 2815 2814 + 2509 2510 2527 2526 2798 2799 2816 2815 + 2510 2511 2528 2527 2799 2800 2817 2816 + 2511 2512 2529 2528 2800 2801 2818 2817 + 2512 2513 2530 2529 2801 2802 2819 2818 + 2513 2514 2531 2530 2802 2803 2820 2819 + 2514 2515 2532 2531 2803 2804 2821 2820 + 2515 2516 2533 2532 2804 2805 2822 2821 + 2517 2518 2535 2534 2806 2807 2824 2823 + 2518 2519 2536 2535 2807 2808 2825 2824 + 2519 2520 2537 2536 2808 2809 2826 2825 + 2520 2521 2538 2537 2809 2810 2827 2826 + 2521 2522 2539 2538 2810 2811 2828 2827 + 2522 2523 2540 2539 2811 2812 2829 2828 + 2523 2524 2541 2540 2812 2813 2830 2829 + 2524 2525 2542 2541 2813 2814 2831 2830 + 2525 2526 2543 2542 2814 2815 2832 2831 + 2526 2527 2544 2543 2815 2816 2833 2832 + 2527 2528 2545 2544 2816 2817 2834 2833 + 2528 2529 2546 2545 2817 2818 2835 2834 + 2529 2530 2547 2546 2818 2819 2836 2835 + 2530 2531 2548 2547 2819 2820 2837 2836 + 2531 2532 2549 2548 2820 2821 2838 2837 + 2532 2533 2550 2549 2821 2822 2839 2838 + 2534 2535 2552 2551 2823 2824 2841 2840 + 2535 2536 2553 2552 2824 2825 2842 2841 + 2536 2537 2554 2553 2825 2826 2843 2842 + 2537 2538 2555 2554 2826 2827 2844 2843 + 2538 2539 2556 2555 2827 2828 2845 2844 + 2539 2540 2557 2556 2828 2829 2846 2845 + 2540 2541 2558 2557 2829 2830 2847 2846 + 2541 2542 2559 2558 2830 2831 2848 2847 + 2542 2543 2560 2559 2831 2832 2849 2848 + 2543 2544 2561 2560 2832 2833 2850 2849 + 2544 2545 2562 2561 2833 2834 2851 2850 + 2545 2546 2563 2562 2834 2835 2852 2851 + 2546 2547 2564 2563 2835 2836 2853 2852 + 2547 2548 2565 2564 2836 2837 2854 2853 + 2548 2549 2566 2565 2837 2838 2855 2854 + 2549 2550 2567 2566 2838 2839 2856 2855 + 2551 2552 2569 2568 2840 2841 2858 2857 + 2552 2553 2570 2569 2841 2842 2859 2858 + 2553 2554 2571 2570 2842 2843 2860 2859 + 2554 2555 2572 2571 2843 2844 2861 2860 + 2555 2556 2573 2572 2844 2845 2862 2861 + 2556 2557 2574 2573 2845 2846 2863 2862 + 2557 2558 2575 2574 2846 2847 2864 2863 + 2558 2559 2576 2575 2847 2848 2865 2864 + 2559 2560 2577 2576 2848 2849 2866 2865 + 2560 2561 2578 2577 2849 2850 2867 2866 + 2561 2562 2579 2578 2850 2851 2868 2867 + 2562 2563 2580 2579 2851 2852 2869 2868 + 2563 2564 2581 2580 2852 2853 2870 2869 + 2564 2565 2582 2581 2853 2854 2871 2870 + 2565 2566 2583 2582 2854 2855 2872 2871 + 2566 2567 2584 2583 2855 2856 2873 2872 + 2568 2569 2586 2585 2857 2858 2875 2874 + 2569 2570 2587 2586 2858 2859 2876 2875 + 2570 2571 2588 2587 2859 2860 2877 2876 + 2571 2572 2589 2588 2860 2861 2878 2877 + 2572 2573 2590 2589 2861 2862 2879 2878 + 2573 2574 2591 2590 2862 2863 2880 2879 + 2574 2575 2592 2591 2863 2864 2881 2880 + 2575 2576 2593 2592 2864 2865 2882 2881 + 2576 2577 2594 2593 2865 2866 2883 2882 + 2577 2578 2595 2594 2866 2867 2884 2883 + 2578 2579 2596 2595 2867 2868 2885 2884 + 2579 2580 2597 2596 2868 2869 2886 2885 + 2580 2581 2598 2597 2869 2870 2887 2886 + 2581 2582 2599 2598 2870 2871 2888 2887 + 2582 2583 2600 2599 2871 2872 2889 2888 + 2583 2584 2601 2600 2872 2873 2890 2889 + 2602 2603 2620 2619 2891 2892 2909 2908 + 2603 2604 2621 2620 2892 2893 2910 2909 + 2604 2605 2622 2621 2893 2894 2911 2910 + 2605 2606 2623 2622 2894 2895 2912 2911 + 2606 2607 2624 2623 2895 2896 2913 2912 + 2607 2608 2625 2624 2896 2897 2914 2913 + 2608 2609 2626 2625 2897 2898 2915 2914 + 2609 2610 2627 2626 2898 2899 2916 2915 + 2610 2611 2628 2627 2899 2900 2917 2916 + 2611 2612 2629 2628 2900 2901 2918 2917 + 2612 2613 2630 2629 2901 2902 2919 2918 + 2613 2614 2631 2630 2902 2903 2920 2919 + 2614 2615 2632 2631 2903 2904 2921 2920 + 2615 2616 2633 2632 2904 2905 2922 2921 + 2616 2617 2634 2633 2905 2906 2923 2922 + 2617 2618 2635 2634 2906 2907 2924 2923 + 2619 2620 2637 2636 2908 2909 2926 2925 + 2620 2621 2638 2637 2909 2910 2927 2926 + 2621 2622 2639 2638 2910 2911 2928 2927 + 2622 2623 2640 2639 2911 2912 2929 2928 + 2623 2624 2641 2640 2912 2913 2930 2929 + 2624 2625 2642 2641 2913 2914 2931 2930 + 2625 2626 2643 2642 2914 2915 2932 2931 + 2626 2627 2644 2643 2915 2916 2933 2932 + 2627 2628 2645 2644 2916 2917 2934 2933 + 2628 2629 2646 2645 2917 2918 2935 2934 + 2629 2630 2647 2646 2918 2919 2936 2935 + 2630 2631 2648 2647 2919 2920 2937 2936 + 2631 2632 2649 2648 2920 2921 2938 2937 + 2632 2633 2650 2649 2921 2922 2939 2938 + 2633 2634 2651 2650 2922 2923 2940 2939 + 2634 2635 2652 2651 2923 2924 2941 2940 + 2636 2637 2654 2653 2925 2926 2943 2942 + 2637 2638 2655 2654 2926 2927 2944 2943 + 2638 2639 2656 2655 2927 2928 2945 2944 + 2639 2640 2657 2656 2928 2929 2946 2945 + 2640 2641 2658 2657 2929 2930 2947 2946 + 2641 2642 2659 2658 2930 2931 2948 2947 + 2642 2643 2660 2659 2931 2932 2949 2948 + 2643 2644 2661 2660 2932 2933 2950 2949 + 2644 2645 2662 2661 2933 2934 2951 2950 + 2645 2646 2663 2662 2934 2935 2952 2951 + 2646 2647 2664 2663 2935 2936 2953 2952 + 2647 2648 2665 2664 2936 2937 2954 2953 + 2648 2649 2666 2665 2937 2938 2955 2954 + 2649 2650 2667 2666 2938 2939 2956 2955 + 2650 2651 2668 2667 2939 2940 2957 2956 + 2651 2652 2669 2668 2940 2941 2958 2957 + 2653 2654 2671 2670 2942 2943 2960 2959 + 2654 2655 2672 2671 2943 2944 2961 2960 + 2655 2656 2673 2672 2944 2945 2962 2961 + 2656 2657 2674 2673 2945 2946 2963 2962 + 2657 2658 2675 2674 2946 2947 2964 2963 + 2658 2659 2676 2675 2947 2948 2965 2964 + 2659 2660 2677 2676 2948 2949 2966 2965 + 2660 2661 2678 2677 2949 2950 2967 2966 + 2661 2662 2679 2678 2950 2951 2968 2967 + 2662 2663 2680 2679 2951 2952 2969 2968 + 2663 2664 2681 2680 2952 2953 2970 2969 + 2664 2665 2682 2681 2953 2954 2971 2970 + 2665 2666 2683 2682 2954 2955 2972 2971 + 2666 2667 2684 2683 2955 2956 2973 2972 + 2667 2668 2685 2684 2956 2957 2974 2973 + 2668 2669 2686 2685 2957 2958 2975 2974 + 2670 2671 2688 2687 2959 2960 2977 2976 + 2671 2672 2689 2688 2960 2961 2978 2977 + 2672 2673 2690 2689 2961 2962 2979 2978 + 2673 2674 2691 2690 2962 2963 2980 2979 + 2674 2675 2692 2691 2963 2964 2981 2980 + 2675 2676 2693 2692 2964 2965 2982 2981 + 2676 2677 2694 2693 2965 2966 2983 2982 + 2677 2678 2695 2694 2966 2967 2984 2983 + 2678 2679 2696 2695 2967 2968 2985 2984 + 2679 2680 2697 2696 2968 2969 2986 2985 + 2680 2681 2698 2697 2969 2970 2987 2986 + 2681 2682 2699 2698 2970 2971 2988 2987 + 2682 2683 2700 2699 2971 2972 2989 2988 + 2683 2684 2701 2700 2972 2973 2990 2989 + 2684 2685 2702 2701 2973 2974 2991 2990 + 2685 2686 2703 2702 2974 2975 2992 2991 + 2687 2688 2705 2704 2976 2977 2994 2993 + 2688 2689 2706 2705 2977 2978 2995 2994 + 2689 2690 2707 2706 2978 2979 2996 2995 + 2690 2691 2708 2707 2979 2980 2997 2996 + 2691 2692 2709 2708 2980 2981 2998 2997 + 2692 2693 2710 2709 2981 2982 2999 2998 + 2693 2694 2711 2710 2982 2983 3000 2999 + 2694 2695 2712 2711 2983 2984 3001 3000 + 2695 2696 2713 2712 2984 2985 3002 3001 + 2696 2697 2714 2713 2985 2986 3003 3002 + 2697 2698 2715 2714 2986 2987 3004 3003 + 2698 2699 2716 2715 2987 2988 3005 3004 + 2699 2700 2717 2716 2988 2989 3006 3005 + 2700 2701 2718 2717 2989 2990 3007 3006 + 2701 2702 2719 2718 2990 2991 3008 3007 + 2702 2703 2720 2719 2991 2992 3009 3008 + 2704 2705 2722 2721 2993 2994 3011 3010 + 2705 2706 2723 2722 2994 2995 3012 3011 + 2706 2707 2724 2723 2995 2996 3013 3012 + 2707 2708 2725 2724 2996 2997 3014 3013 + 2708 2709 2726 2725 2997 2998 3015 3014 + 2709 2710 2727 2726 2998 2999 3016 3015 + 2710 2711 2728 2727 2999 3000 3017 3016 + 2711 2712 2729 2728 3000 3001 3018 3017 + 2712 2713 2730 2729 3001 3002 3019 3018 + 2713 2714 2731 2730 3002 3003 3020 3019 + 2714 2715 2732 2731 3003 3004 3021 3020 + 2715 2716 2733 2732 3004 3005 3022 3021 + 2716 2717 2734 2733 3005 3006 3023 3022 + 2717 2718 2735 2734 3006 3007 3024 3023 + 2718 2719 2736 2735 3007 3008 3025 3024 + 2719 2720 2737 2736 3008 3009 3026 3025 + 2721 2722 2739 2738 3010 3011 3028 3027 + 2722 2723 2740 2739 3011 3012 3029 3028 + 2723 2724 2741 2740 3012 3013 3030 3029 + 2724 2725 2742 2741 3013 3014 3031 3030 + 2725 2726 2743 2742 3014 3015 3032 3031 + 2726 2727 2744 2743 3015 3016 3033 3032 + 2727 2728 2745 2744 3016 3017 3034 3033 + 2728 2729 2746 2745 3017 3018 3035 3034 + 2729 2730 2747 2746 3018 3019 3036 3035 + 2730 2731 2748 2747 3019 3020 3037 3036 + 2731 2732 2749 2748 3020 3021 3038 3037 + 2732 2733 2750 2749 3021 3022 3039 3038 + 2733 2734 2751 2750 3022 3023 3040 3039 + 2734 2735 2752 2751 3023 3024 3041 3040 + 2735 2736 2753 2752 3024 3025 3042 3041 + 2736 2737 2754 2753 3025 3026 3043 3042 + 2738 2739 2756 2755 3027 3028 3045 3044 + 2739 2740 2757 2756 3028 3029 3046 3045 + 2740 2741 2758 2757 3029 3030 3047 3046 + 2741 2742 2759 2758 3030 3031 3048 3047 + 2742 2743 2760 2759 3031 3032 3049 3048 + 2743 2744 2761 2760 3032 3033 3050 3049 + 2744 2745 2762 2761 3033 3034 3051 3050 + 2745 2746 2763 2762 3034 3035 3052 3051 + 2746 2747 2764 2763 3035 3036 3053 3052 + 2747 2748 2765 2764 3036 3037 3054 3053 + 2748 2749 2766 2765 3037 3038 3055 3054 + 2749 2750 2767 2766 3038 3039 3056 3055 + 2750 2751 2768 2767 3039 3040 3057 3056 + 2751 2752 2769 2768 3040 3041 3058 3057 + 2752 2753 2770 2769 3041 3042 3059 3058 + 2753 2754 2771 2770 3042 3043 3060 3059 + 2755 2756 2773 2772 3044 3045 3062 3061 + 2756 2757 2774 2773 3045 3046 3063 3062 + 2757 2758 2775 2774 3046 3047 3064 3063 + 2758 2759 2776 2775 3047 3048 3065 3064 + 2759 2760 2777 2776 3048 3049 3066 3065 + 2760 2761 2778 2777 3049 3050 3067 3066 + 2761 2762 2779 2778 3050 3051 3068 3067 + 2762 2763 2780 2779 3051 3052 3069 3068 + 2763 2764 2781 2780 3052 3053 3070 3069 + 2764 2765 2782 2781 3053 3054 3071 3070 + 2765 2766 2783 2782 3054 3055 3072 3071 + 2766 2767 2784 2783 3055 3056 3073 3072 + 2767 2768 2785 2784 3056 3057 3074 3073 + 2768 2769 2786 2785 3057 3058 3075 3074 + 2769 2770 2787 2786 3058 3059 3076 3075 + 2770 2771 2788 2787 3059 3060 3077 3076 + 2772 2773 2790 2789 3061 3062 3079 3078 + 2773 2774 2791 2790 3062 3063 3080 3079 + 2774 2775 2792 2791 3063 3064 3081 3080 + 2775 2776 2793 2792 3064 3065 3082 3081 + 2776 2777 2794 2793 3065 3066 3083 3082 + 2777 2778 2795 2794 3066 3067 3084 3083 + 2778 2779 2796 2795 3067 3068 3085 3084 + 2779 2780 2797 2796 3068 3069 3086 3085 + 2780 2781 2798 2797 3069 3070 3087 3086 + 2781 2782 2799 2798 3070 3071 3088 3087 + 2782 2783 2800 2799 3071 3072 3089 3088 + 2783 2784 2801 2800 3072 3073 3090 3089 + 2784 2785 2802 2801 3073 3074 3091 3090 + 2785 2786 2803 2802 3074 3075 3092 3091 + 2786 2787 2804 2803 3075 3076 3093 3092 + 2787 2788 2805 2804 3076 3077 3094 3093 + 2789 2790 2807 2806 3078 3079 3096 3095 + 2790 2791 2808 2807 3079 3080 3097 3096 + 2791 2792 2809 2808 3080 3081 3098 3097 + 2792 2793 2810 2809 3081 3082 3099 3098 + 2793 2794 2811 2810 3082 3083 3100 3099 + 2794 2795 2812 2811 3083 3084 3101 3100 + 2795 2796 2813 2812 3084 3085 3102 3101 + 2796 2797 2814 2813 3085 3086 3103 3102 + 2797 2798 2815 2814 3086 3087 3104 3103 + 2798 2799 2816 2815 3087 3088 3105 3104 + 2799 2800 2817 2816 3088 3089 3106 3105 + 2800 2801 2818 2817 3089 3090 3107 3106 + 2801 2802 2819 2818 3090 3091 3108 3107 + 2802 2803 2820 2819 3091 3092 3109 3108 + 2803 2804 2821 2820 3092 3093 3110 3109 + 2804 2805 2822 2821 3093 3094 3111 3110 + 2806 2807 2824 2823 3095 3096 3113 3112 + 2807 2808 2825 2824 3096 3097 3114 3113 + 2808 2809 2826 2825 3097 3098 3115 3114 + 2809 2810 2827 2826 3098 3099 3116 3115 + 2810 2811 2828 2827 3099 3100 3117 3116 + 2811 2812 2829 2828 3100 3101 3118 3117 + 2812 2813 2830 2829 3101 3102 3119 3118 + 2813 2814 2831 2830 3102 3103 3120 3119 + 2814 2815 2832 2831 3103 3104 3121 3120 + 2815 2816 2833 2832 3104 3105 3122 3121 + 2816 2817 2834 2833 3105 3106 3123 3122 + 2817 2818 2835 2834 3106 3107 3124 3123 + 2818 2819 2836 2835 3107 3108 3125 3124 + 2819 2820 2837 2836 3108 3109 3126 3125 + 2820 2821 2838 2837 3109 3110 3127 3126 + 2821 2822 2839 2838 3110 3111 3128 3127 + 2823 2824 2841 2840 3112 3113 3130 3129 + 2824 2825 2842 2841 3113 3114 3131 3130 + 2825 2826 2843 2842 3114 3115 3132 3131 + 2826 2827 2844 2843 3115 3116 3133 3132 + 2827 2828 2845 2844 3116 3117 3134 3133 + 2828 2829 2846 2845 3117 3118 3135 3134 + 2829 2830 2847 2846 3118 3119 3136 3135 + 2830 2831 2848 2847 3119 3120 3137 3136 + 2831 2832 2849 2848 3120 3121 3138 3137 + 2832 2833 2850 2849 3121 3122 3139 3138 + 2833 2834 2851 2850 3122 3123 3140 3139 + 2834 2835 2852 2851 3123 3124 3141 3140 + 2835 2836 2853 2852 3124 3125 3142 3141 + 2836 2837 2854 2853 3125 3126 3143 3142 + 2837 2838 2855 2854 3126 3127 3144 3143 + 2838 2839 2856 2855 3127 3128 3145 3144 + 2840 2841 2858 2857 3129 3130 3147 3146 + 2841 2842 2859 2858 3130 3131 3148 3147 + 2842 2843 2860 2859 3131 3132 3149 3148 + 2843 2844 2861 2860 3132 3133 3150 3149 + 2844 2845 2862 2861 3133 3134 3151 3150 + 2845 2846 2863 2862 3134 3135 3152 3151 + 2846 2847 2864 2863 3135 3136 3153 3152 + 2847 2848 2865 2864 3136 3137 3154 3153 + 2848 2849 2866 2865 3137 3138 3155 3154 + 2849 2850 2867 2866 3138 3139 3156 3155 + 2850 2851 2868 2867 3139 3140 3157 3156 + 2851 2852 2869 2868 3140 3141 3158 3157 + 2852 2853 2870 2869 3141 3142 3159 3158 + 2853 2854 2871 2870 3142 3143 3160 3159 + 2854 2855 2872 2871 3143 3144 3161 3160 + 2855 2856 2873 2872 3144 3145 3162 3161 + 2857 2858 2875 2874 3146 3147 3164 3163 + 2858 2859 2876 2875 3147 3148 3165 3164 + 2859 2860 2877 2876 3148 3149 3166 3165 + 2860 2861 2878 2877 3149 3150 3167 3166 + 2861 2862 2879 2878 3150 3151 3168 3167 + 2862 2863 2880 2879 3151 3152 3169 3168 + 2863 2864 2881 2880 3152 3153 3170 3169 + 2864 2865 2882 2881 3153 3154 3171 3170 + 2865 2866 2883 2882 3154 3155 3172 3171 + 2866 2867 2884 2883 3155 3156 3173 3172 + 2867 2868 2885 2884 3156 3157 3174 3173 + 2868 2869 2886 2885 3157 3158 3175 3174 + 2869 2870 2887 2886 3158 3159 3176 3175 + 2870 2871 2888 2887 3159 3160 3177 3176 + 2871 2872 2889 2888 3160 3161 3178 3177 + 2872 2873 2890 2889 3161 3162 3179 3178 + 2891 2892 2909 2908 3180 3181 3198 3197 + 2892 2893 2910 2909 3181 3182 3199 3198 + 2893 2894 2911 2910 3182 3183 3200 3199 + 2894 2895 2912 2911 3183 3184 3201 3200 + 2895 2896 2913 2912 3184 3185 3202 3201 + 2896 2897 2914 2913 3185 3186 3203 3202 + 2897 2898 2915 2914 3186 3187 3204 3203 + 2898 2899 2916 2915 3187 3188 3205 3204 + 2899 2900 2917 2916 3188 3189 3206 3205 + 2900 2901 2918 2917 3189 3190 3207 3206 + 2901 2902 2919 2918 3190 3191 3208 3207 + 2902 2903 2920 2919 3191 3192 3209 3208 + 2903 2904 2921 2920 3192 3193 3210 3209 + 2904 2905 2922 2921 3193 3194 3211 3210 + 2905 2906 2923 2922 3194 3195 3212 3211 + 2906 2907 2924 2923 3195 3196 3213 3212 + 2908 2909 2926 2925 3197 3198 3215 3214 + 2909 2910 2927 2926 3198 3199 3216 3215 + 2910 2911 2928 2927 3199 3200 3217 3216 + 2911 2912 2929 2928 3200 3201 3218 3217 + 2912 2913 2930 2929 3201 3202 3219 3218 + 2913 2914 2931 2930 3202 3203 3220 3219 + 2914 2915 2932 2931 3203 3204 3221 3220 + 2915 2916 2933 2932 3204 3205 3222 3221 + 2916 2917 2934 2933 3205 3206 3223 3222 + 2917 2918 2935 2934 3206 3207 3224 3223 + 2918 2919 2936 2935 3207 3208 3225 3224 + 2919 2920 2937 2936 3208 3209 3226 3225 + 2920 2921 2938 2937 3209 3210 3227 3226 + 2921 2922 2939 2938 3210 3211 3228 3227 + 2922 2923 2940 2939 3211 3212 3229 3228 + 2923 2924 2941 2940 3212 3213 3230 3229 + 2925 2926 2943 2942 3214 3215 3232 3231 + 2926 2927 2944 2943 3215 3216 3233 3232 + 2927 2928 2945 2944 3216 3217 3234 3233 + 2928 2929 2946 2945 3217 3218 3235 3234 + 2929 2930 2947 2946 3218 3219 3236 3235 + 2930 2931 2948 2947 3219 3220 3237 3236 + 2931 2932 2949 2948 3220 3221 3238 3237 + 2932 2933 2950 2949 3221 3222 3239 3238 + 2933 2934 2951 2950 3222 3223 3240 3239 + 2934 2935 2952 2951 3223 3224 3241 3240 + 2935 2936 2953 2952 3224 3225 3242 3241 + 2936 2937 2954 2953 3225 3226 3243 3242 + 2937 2938 2955 2954 3226 3227 3244 3243 + 2938 2939 2956 2955 3227 3228 3245 3244 + 2939 2940 2957 2956 3228 3229 3246 3245 + 2940 2941 2958 2957 3229 3230 3247 3246 + 2942 2943 2960 2959 3231 3232 3249 3248 + 2943 2944 2961 2960 3232 3233 3250 3249 + 2944 2945 2962 2961 3233 3234 3251 3250 + 2945 2946 2963 2962 3234 3235 3252 3251 + 2946 2947 2964 2963 3235 3236 3253 3252 + 2947 2948 2965 2964 3236 3237 3254 3253 + 2948 2949 2966 2965 3237 3238 3255 3254 + 2949 2950 2967 2966 3238 3239 3256 3255 + 2950 2951 2968 2967 3239 3240 3257 3256 + 2951 2952 2969 2968 3240 3241 3258 3257 + 2952 2953 2970 2969 3241 3242 3259 3258 + 2953 2954 2971 2970 3242 3243 3260 3259 + 2954 2955 2972 2971 3243 3244 3261 3260 + 2955 2956 2973 2972 3244 3245 3262 3261 + 2956 2957 2974 2973 3245 3246 3263 3262 + 2957 2958 2975 2974 3246 3247 3264 3263 + 2959 2960 2977 2976 3248 3249 3266 3265 + 2960 2961 2978 2977 3249 3250 3267 3266 + 2961 2962 2979 2978 3250 3251 3268 3267 + 2962 2963 2980 2979 3251 3252 3269 3268 + 2963 2964 2981 2980 3252 3253 3270 3269 + 2964 2965 2982 2981 3253 3254 3271 3270 + 2965 2966 2983 2982 3254 3255 3272 3271 + 2966 2967 2984 2983 3255 3256 3273 3272 + 2967 2968 2985 2984 3256 3257 3274 3273 + 2968 2969 2986 2985 3257 3258 3275 3274 + 2969 2970 2987 2986 3258 3259 3276 3275 + 2970 2971 2988 2987 3259 3260 3277 3276 + 2971 2972 2989 2988 3260 3261 3278 3277 + 2972 2973 2990 2989 3261 3262 3279 3278 + 2973 2974 2991 2990 3262 3263 3280 3279 + 2974 2975 2992 2991 3263 3264 3281 3280 + 2976 2977 2994 2993 3265 3266 3283 3282 + 2977 2978 2995 2994 3266 3267 3284 3283 + 2978 2979 2996 2995 3267 3268 3285 3284 + 2979 2980 2997 2996 3268 3269 3286 3285 + 2980 2981 2998 2997 3269 3270 3287 3286 + 2981 2982 2999 2998 3270 3271 3288 3287 + 2982 2983 3000 2999 3271 3272 3289 3288 + 2983 2984 3001 3000 3272 3273 3290 3289 + 2984 2985 3002 3001 3273 3274 3291 3290 + 2985 2986 3003 3002 3274 3275 3292 3291 + 2986 2987 3004 3003 3275 3276 3293 3292 + 2987 2988 3005 3004 3276 3277 3294 3293 + 2988 2989 3006 3005 3277 3278 3295 3294 + 2989 2990 3007 3006 3278 3279 3296 3295 + 2990 2991 3008 3007 3279 3280 3297 3296 + 2991 2992 3009 3008 3280 3281 3298 3297 + 2993 2994 3011 3010 3282 3283 3300 3299 + 2994 2995 3012 3011 3283 3284 3301 3300 + 2995 2996 3013 3012 3284 3285 3302 3301 + 2996 2997 3014 3013 3285 3286 3303 3302 + 2997 2998 3015 3014 3286 3287 3304 3303 + 2998 2999 3016 3015 3287 3288 3305 3304 + 2999 3000 3017 3016 3288 3289 3306 3305 + 3000 3001 3018 3017 3289 3290 3307 3306 + 3001 3002 3019 3018 3290 3291 3308 3307 + 3002 3003 3020 3019 3291 3292 3309 3308 + 3003 3004 3021 3020 3292 3293 3310 3309 + 3004 3005 3022 3021 3293 3294 3311 3310 + 3005 3006 3023 3022 3294 3295 3312 3311 + 3006 3007 3024 3023 3295 3296 3313 3312 + 3007 3008 3025 3024 3296 3297 3314 3313 + 3008 3009 3026 3025 3297 3298 3315 3314 + 3010 3011 3028 3027 3299 3300 3317 3316 + 3011 3012 3029 3028 3300 3301 3318 3317 + 3012 3013 3030 3029 3301 3302 3319 3318 + 3013 3014 3031 3030 3302 3303 3320 3319 + 3014 3015 3032 3031 3303 3304 3321 3320 + 3015 3016 3033 3032 3304 3305 3322 3321 + 3016 3017 3034 3033 3305 3306 3323 3322 + 3017 3018 3035 3034 3306 3307 3324 3323 + 3018 3019 3036 3035 3307 3308 3325 3324 + 3019 3020 3037 3036 3308 3309 3326 3325 + 3020 3021 3038 3037 3309 3310 3327 3326 + 3021 3022 3039 3038 3310 3311 3328 3327 + 3022 3023 3040 3039 3311 3312 3329 3328 + 3023 3024 3041 3040 3312 3313 3330 3329 + 3024 3025 3042 3041 3313 3314 3331 3330 + 3025 3026 3043 3042 3314 3315 3332 3331 + 3027 3028 3045 3044 3316 3317 3334 3333 + 3028 3029 3046 3045 3317 3318 3335 3334 + 3029 3030 3047 3046 3318 3319 3336 3335 + 3030 3031 3048 3047 3319 3320 3337 3336 + 3031 3032 3049 3048 3320 3321 3338 3337 + 3032 3033 3050 3049 3321 3322 3339 3338 + 3033 3034 3051 3050 3322 3323 3340 3339 + 3034 3035 3052 3051 3323 3324 3341 3340 + 3035 3036 3053 3052 3324 3325 3342 3341 + 3036 3037 3054 3053 3325 3326 3343 3342 + 3037 3038 3055 3054 3326 3327 3344 3343 + 3038 3039 3056 3055 3327 3328 3345 3344 + 3039 3040 3057 3056 3328 3329 3346 3345 + 3040 3041 3058 3057 3329 3330 3347 3346 + 3041 3042 3059 3058 3330 3331 3348 3347 + 3042 3043 3060 3059 3331 3332 3349 3348 + 3044 3045 3062 3061 3333 3334 3351 3350 + 3045 3046 3063 3062 3334 3335 3352 3351 + 3046 3047 3064 3063 3335 3336 3353 3352 + 3047 3048 3065 3064 3336 3337 3354 3353 + 3048 3049 3066 3065 3337 3338 3355 3354 + 3049 3050 3067 3066 3338 3339 3356 3355 + 3050 3051 3068 3067 3339 3340 3357 3356 + 3051 3052 3069 3068 3340 3341 3358 3357 + 3052 3053 3070 3069 3341 3342 3359 3358 + 3053 3054 3071 3070 3342 3343 3360 3359 + 3054 3055 3072 3071 3343 3344 3361 3360 + 3055 3056 3073 3072 3344 3345 3362 3361 + 3056 3057 3074 3073 3345 3346 3363 3362 + 3057 3058 3075 3074 3346 3347 3364 3363 + 3058 3059 3076 3075 3347 3348 3365 3364 + 3059 3060 3077 3076 3348 3349 3366 3365 + 3061 3062 3079 3078 3350 3351 3368 3367 + 3062 3063 3080 3079 3351 3352 3369 3368 + 3063 3064 3081 3080 3352 3353 3370 3369 + 3064 3065 3082 3081 3353 3354 3371 3370 + 3065 3066 3083 3082 3354 3355 3372 3371 + 3066 3067 3084 3083 3355 3356 3373 3372 + 3067 3068 3085 3084 3356 3357 3374 3373 + 3068 3069 3086 3085 3357 3358 3375 3374 + 3069 3070 3087 3086 3358 3359 3376 3375 + 3070 3071 3088 3087 3359 3360 3377 3376 + 3071 3072 3089 3088 3360 3361 3378 3377 + 3072 3073 3090 3089 3361 3362 3379 3378 + 3073 3074 3091 3090 3362 3363 3380 3379 + 3074 3075 3092 3091 3363 3364 3381 3380 + 3075 3076 3093 3092 3364 3365 3382 3381 + 3076 3077 3094 3093 3365 3366 3383 3382 + 3078 3079 3096 3095 3367 3368 3385 3384 + 3079 3080 3097 3096 3368 3369 3386 3385 + 3080 3081 3098 3097 3369 3370 3387 3386 + 3081 3082 3099 3098 3370 3371 3388 3387 + 3082 3083 3100 3099 3371 3372 3389 3388 + 3083 3084 3101 3100 3372 3373 3390 3389 + 3084 3085 3102 3101 3373 3374 3391 3390 + 3085 3086 3103 3102 3374 3375 3392 3391 + 3086 3087 3104 3103 3375 3376 3393 3392 + 3087 3088 3105 3104 3376 3377 3394 3393 + 3088 3089 3106 3105 3377 3378 3395 3394 + 3089 3090 3107 3106 3378 3379 3396 3395 + 3090 3091 3108 3107 3379 3380 3397 3396 + 3091 3092 3109 3108 3380 3381 3398 3397 + 3092 3093 3110 3109 3381 3382 3399 3398 + 3093 3094 3111 3110 3382 3383 3400 3399 + 3095 3096 3113 3112 3384 3385 3402 3401 + 3096 3097 3114 3113 3385 3386 3403 3402 + 3097 3098 3115 3114 3386 3387 3404 3403 + 3098 3099 3116 3115 3387 3388 3405 3404 + 3099 3100 3117 3116 3388 3389 3406 3405 + 3100 3101 3118 3117 3389 3390 3407 3406 + 3101 3102 3119 3118 3390 3391 3408 3407 + 3102 3103 3120 3119 3391 3392 3409 3408 + 3103 3104 3121 3120 3392 3393 3410 3409 + 3104 3105 3122 3121 3393 3394 3411 3410 + 3105 3106 3123 3122 3394 3395 3412 3411 + 3106 3107 3124 3123 3395 3396 3413 3412 + 3107 3108 3125 3124 3396 3397 3414 3413 + 3108 3109 3126 3125 3397 3398 3415 3414 + 3109 3110 3127 3126 3398 3399 3416 3415 + 3110 3111 3128 3127 3399 3400 3417 3416 + 3112 3113 3130 3129 3401 3402 3419 3418 + 3113 3114 3131 3130 3402 3403 3420 3419 + 3114 3115 3132 3131 3403 3404 3421 3420 + 3115 3116 3133 3132 3404 3405 3422 3421 + 3116 3117 3134 3133 3405 3406 3423 3422 + 3117 3118 3135 3134 3406 3407 3424 3423 + 3118 3119 3136 3135 3407 3408 3425 3424 + 3119 3120 3137 3136 3408 3409 3426 3425 + 3120 3121 3138 3137 3409 3410 3427 3426 + 3121 3122 3139 3138 3410 3411 3428 3427 + 3122 3123 3140 3139 3411 3412 3429 3428 + 3123 3124 3141 3140 3412 3413 3430 3429 + 3124 3125 3142 3141 3413 3414 3431 3430 + 3125 3126 3143 3142 3414 3415 3432 3431 + 3126 3127 3144 3143 3415 3416 3433 3432 + 3127 3128 3145 3144 3416 3417 3434 3433 + 3129 3130 3147 3146 3418 3419 3436 3435 + 3130 3131 3148 3147 3419 3420 3437 3436 + 3131 3132 3149 3148 3420 3421 3438 3437 + 3132 3133 3150 3149 3421 3422 3439 3438 + 3133 3134 3151 3150 3422 3423 3440 3439 + 3134 3135 3152 3151 3423 3424 3441 3440 + 3135 3136 3153 3152 3424 3425 3442 3441 + 3136 3137 3154 3153 3425 3426 3443 3442 + 3137 3138 3155 3154 3426 3427 3444 3443 + 3138 3139 3156 3155 3427 3428 3445 3444 + 3139 3140 3157 3156 3428 3429 3446 3445 + 3140 3141 3158 3157 3429 3430 3447 3446 + 3141 3142 3159 3158 3430 3431 3448 3447 + 3142 3143 3160 3159 3431 3432 3449 3448 + 3143 3144 3161 3160 3432 3433 3450 3449 + 3144 3145 3162 3161 3433 3434 3451 3450 + 3146 3147 3164 3163 3435 3436 3453 3452 + 3147 3148 3165 3164 3436 3437 3454 3453 + 3148 3149 3166 3165 3437 3438 3455 3454 + 3149 3150 3167 3166 3438 3439 3456 3455 + 3150 3151 3168 3167 3439 3440 3457 3456 + 3151 3152 3169 3168 3440 3441 3458 3457 + 3152 3153 3170 3169 3441 3442 3459 3458 + 3153 3154 3171 3170 3442 3443 3460 3459 + 3154 3155 3172 3171 3443 3444 3461 3460 + 3155 3156 3173 3172 3444 3445 3462 3461 + 3156 3157 3174 3173 3445 3446 3463 3462 + 3157 3158 3175 3174 3446 3447 3464 3463 + 3158 3159 3176 3175 3447 3448 3465 3464 + 3159 3160 3177 3176 3448 3449 3466 3465 + 3160 3161 3178 3177 3449 3450 3467 3466 + 3161 3162 3179 3178 3450 3451 3468 3467 + 3180 3181 3198 3197 3469 3470 3487 3486 + 3181 3182 3199 3198 3470 3471 3488 3487 + 3182 3183 3200 3199 3471 3472 3489 3488 + 3183 3184 3201 3200 3472 3473 3490 3489 + 3184 3185 3202 3201 3473 3474 3491 3490 + 3185 3186 3203 3202 3474 3475 3492 3491 + 3186 3187 3204 3203 3475 3476 3493 3492 + 3187 3188 3205 3204 3476 3477 3494 3493 + 3188 3189 3206 3205 3477 3478 3495 3494 + 3189 3190 3207 3206 3478 3479 3496 3495 + 3190 3191 3208 3207 3479 3480 3497 3496 + 3191 3192 3209 3208 3480 3481 3498 3497 + 3192 3193 3210 3209 3481 3482 3499 3498 + 3193 3194 3211 3210 3482 3483 3500 3499 + 3194 3195 3212 3211 3483 3484 3501 3500 + 3195 3196 3213 3212 3484 3485 3502 3501 + 3197 3198 3215 3214 3486 3487 3504 3503 + 3198 3199 3216 3215 3487 3488 3505 3504 + 3199 3200 3217 3216 3488 3489 3506 3505 + 3200 3201 3218 3217 3489 3490 3507 3506 + 3201 3202 3219 3218 3490 3491 3508 3507 + 3202 3203 3220 3219 3491 3492 3509 3508 + 3203 3204 3221 3220 3492 3493 3510 3509 + 3204 3205 3222 3221 3493 3494 3511 3510 + 3205 3206 3223 3222 3494 3495 3512 3511 + 3206 3207 3224 3223 3495 3496 3513 3512 + 3207 3208 3225 3224 3496 3497 3514 3513 + 3208 3209 3226 3225 3497 3498 3515 3514 + 3209 3210 3227 3226 3498 3499 3516 3515 + 3210 3211 3228 3227 3499 3500 3517 3516 + 3211 3212 3229 3228 3500 3501 3518 3517 + 3212 3213 3230 3229 3501 3502 3519 3518 + 3214 3215 3232 3231 3503 3504 3521 3520 + 3215 3216 3233 3232 3504 3505 3522 3521 + 3216 3217 3234 3233 3505 3506 3523 3522 + 3217 3218 3235 3234 3506 3507 3524 3523 + 3218 3219 3236 3235 3507 3508 3525 3524 + 3219 3220 3237 3236 3508 3509 3526 3525 + 3220 3221 3238 3237 3509 3510 3527 3526 + 3221 3222 3239 3238 3510 3511 3528 3527 + 3222 3223 3240 3239 3511 3512 3529 3528 + 3223 3224 3241 3240 3512 3513 3530 3529 + 3224 3225 3242 3241 3513 3514 3531 3530 + 3225 3226 3243 3242 3514 3515 3532 3531 + 3226 3227 3244 3243 3515 3516 3533 3532 + 3227 3228 3245 3244 3516 3517 3534 3533 + 3228 3229 3246 3245 3517 3518 3535 3534 + 3229 3230 3247 3246 3518 3519 3536 3535 + 3231 3232 3249 3248 3520 3521 3538 3537 + 3232 3233 3250 3249 3521 3522 3539 3538 + 3233 3234 3251 3250 3522 3523 3540 3539 + 3234 3235 3252 3251 3523 3524 3541 3540 + 3235 3236 3253 3252 3524 3525 3542 3541 + 3236 3237 3254 3253 3525 3526 3543 3542 + 3237 3238 3255 3254 3526 3527 3544 3543 + 3238 3239 3256 3255 3527 3528 3545 3544 + 3239 3240 3257 3256 3528 3529 3546 3545 + 3240 3241 3258 3257 3529 3530 3547 3546 + 3241 3242 3259 3258 3530 3531 3548 3547 + 3242 3243 3260 3259 3531 3532 3549 3548 + 3243 3244 3261 3260 3532 3533 3550 3549 + 3244 3245 3262 3261 3533 3534 3551 3550 + 3245 3246 3263 3262 3534 3535 3552 3551 + 3246 3247 3264 3263 3535 3536 3553 3552 + 3248 3249 3266 3265 3537 3538 3555 3554 + 3249 3250 3267 3266 3538 3539 3556 3555 + 3250 3251 3268 3267 3539 3540 3557 3556 + 3251 3252 3269 3268 3540 3541 3558 3557 + 3252 3253 3270 3269 3541 3542 3559 3558 + 3253 3254 3271 3270 3542 3543 3560 3559 + 3254 3255 3272 3271 3543 3544 3561 3560 + 3255 3256 3273 3272 3544 3545 3562 3561 + 3256 3257 3274 3273 3545 3546 3563 3562 + 3257 3258 3275 3274 3546 3547 3564 3563 + 3258 3259 3276 3275 3547 3548 3565 3564 + 3259 3260 3277 3276 3548 3549 3566 3565 + 3260 3261 3278 3277 3549 3550 3567 3566 + 3261 3262 3279 3278 3550 3551 3568 3567 + 3262 3263 3280 3279 3551 3552 3569 3568 + 3263 3264 3281 3280 3552 3553 3570 3569 + 3265 3266 3283 3282 3554 3555 3572 3571 + 3266 3267 3284 3283 3555 3556 3573 3572 + 3267 3268 3285 3284 3556 3557 3574 3573 + 3268 3269 3286 3285 3557 3558 3575 3574 + 3269 3270 3287 3286 3558 3559 3576 3575 + 3270 3271 3288 3287 3559 3560 3577 3576 + 3271 3272 3289 3288 3560 3561 3578 3577 + 3272 3273 3290 3289 3561 3562 3579 3578 + 3273 3274 3291 3290 3562 3563 3580 3579 + 3274 3275 3292 3291 3563 3564 3581 3580 + 3275 3276 3293 3292 3564 3565 3582 3581 + 3276 3277 3294 3293 3565 3566 3583 3582 + 3277 3278 3295 3294 3566 3567 3584 3583 + 3278 3279 3296 3295 3567 3568 3585 3584 + 3279 3280 3297 3296 3568 3569 3586 3585 + 3280 3281 3298 3297 3569 3570 3587 3586 + 3282 3283 3300 3299 3571 3572 3589 3588 + 3283 3284 3301 3300 3572 3573 3590 3589 + 3284 3285 3302 3301 3573 3574 3591 3590 + 3285 3286 3303 3302 3574 3575 3592 3591 + 3286 3287 3304 3303 3575 3576 3593 3592 + 3287 3288 3305 3304 3576 3577 3594 3593 + 3288 3289 3306 3305 3577 3578 3595 3594 + 3289 3290 3307 3306 3578 3579 3596 3595 + 3290 3291 3308 3307 3579 3580 3597 3596 + 3291 3292 3309 3308 3580 3581 3598 3597 + 3292 3293 3310 3309 3581 3582 3599 3598 + 3293 3294 3311 3310 3582 3583 3600 3599 + 3294 3295 3312 3311 3583 3584 3601 3600 + 3295 3296 3313 3312 3584 3585 3602 3601 + 3296 3297 3314 3313 3585 3586 3603 3602 + 3297 3298 3315 3314 3586 3587 3604 3603 + 3299 3300 3317 3316 3588 3589 3606 3605 + 3300 3301 3318 3317 3589 3590 3607 3606 + 3301 3302 3319 3318 3590 3591 3608 3607 + 3302 3303 3320 3319 3591 3592 3609 3608 + 3303 3304 3321 3320 3592 3593 3610 3609 + 3304 3305 3322 3321 3593 3594 3611 3610 + 3305 3306 3323 3322 3594 3595 3612 3611 + 3306 3307 3324 3323 3595 3596 3613 3612 + 3307 3308 3325 3324 3596 3597 3614 3613 + 3308 3309 3326 3325 3597 3598 3615 3614 + 3309 3310 3327 3326 3598 3599 3616 3615 + 3310 3311 3328 3327 3599 3600 3617 3616 + 3311 3312 3329 3328 3600 3601 3618 3617 + 3312 3313 3330 3329 3601 3602 3619 3618 + 3313 3314 3331 3330 3602 3603 3620 3619 + 3314 3315 3332 3331 3603 3604 3621 3620 + 3316 3317 3334 3333 3605 3606 3623 3622 + 3317 3318 3335 3334 3606 3607 3624 3623 + 3318 3319 3336 3335 3607 3608 3625 3624 + 3319 3320 3337 3336 3608 3609 3626 3625 + 3320 3321 3338 3337 3609 3610 3627 3626 + 3321 3322 3339 3338 3610 3611 3628 3627 + 3322 3323 3340 3339 3611 3612 3629 3628 + 3323 3324 3341 3340 3612 3613 3630 3629 + 3324 3325 3342 3341 3613 3614 3631 3630 + 3325 3326 3343 3342 3614 3615 3632 3631 + 3326 3327 3344 3343 3615 3616 3633 3632 + 3327 3328 3345 3344 3616 3617 3634 3633 + 3328 3329 3346 3345 3617 3618 3635 3634 + 3329 3330 3347 3346 3618 3619 3636 3635 + 3330 3331 3348 3347 3619 3620 3637 3636 + 3331 3332 3349 3348 3620 3621 3638 3637 + 3333 3334 3351 3350 3622 3623 3640 3639 + 3334 3335 3352 3351 3623 3624 3641 3640 + 3335 3336 3353 3352 3624 3625 3642 3641 + 3336 3337 3354 3353 3625 3626 3643 3642 + 3337 3338 3355 3354 3626 3627 3644 3643 + 3338 3339 3356 3355 3627 3628 3645 3644 + 3339 3340 3357 3356 3628 3629 3646 3645 + 3340 3341 3358 3357 3629 3630 3647 3646 + 3341 3342 3359 3358 3630 3631 3648 3647 + 3342 3343 3360 3359 3631 3632 3649 3648 + 3343 3344 3361 3360 3632 3633 3650 3649 + 3344 3345 3362 3361 3633 3634 3651 3650 + 3345 3346 3363 3362 3634 3635 3652 3651 + 3346 3347 3364 3363 3635 3636 3653 3652 + 3347 3348 3365 3364 3636 3637 3654 3653 + 3348 3349 3366 3365 3637 3638 3655 3654 + 3350 3351 3368 3367 3639 3640 3657 3656 + 3351 3352 3369 3368 3640 3641 3658 3657 + 3352 3353 3370 3369 3641 3642 3659 3658 + 3353 3354 3371 3370 3642 3643 3660 3659 + 3354 3355 3372 3371 3643 3644 3661 3660 + 3355 3356 3373 3372 3644 3645 3662 3661 + 3356 3357 3374 3373 3645 3646 3663 3662 + 3357 3358 3375 3374 3646 3647 3664 3663 + 3358 3359 3376 3375 3647 3648 3665 3664 + 3359 3360 3377 3376 3648 3649 3666 3665 + 3360 3361 3378 3377 3649 3650 3667 3666 + 3361 3362 3379 3378 3650 3651 3668 3667 + 3362 3363 3380 3379 3651 3652 3669 3668 + 3363 3364 3381 3380 3652 3653 3670 3669 + 3364 3365 3382 3381 3653 3654 3671 3670 + 3365 3366 3383 3382 3654 3655 3672 3671 + 3367 3368 3385 3384 3656 3657 3674 3673 + 3368 3369 3386 3385 3657 3658 3675 3674 + 3369 3370 3387 3386 3658 3659 3676 3675 + 3370 3371 3388 3387 3659 3660 3677 3676 + 3371 3372 3389 3388 3660 3661 3678 3677 + 3372 3373 3390 3389 3661 3662 3679 3678 + 3373 3374 3391 3390 3662 3663 3680 3679 + 3374 3375 3392 3391 3663 3664 3681 3680 + 3375 3376 3393 3392 3664 3665 3682 3681 + 3376 3377 3394 3393 3665 3666 3683 3682 + 3377 3378 3395 3394 3666 3667 3684 3683 + 3378 3379 3396 3395 3667 3668 3685 3684 + 3379 3380 3397 3396 3668 3669 3686 3685 + 3380 3381 3398 3397 3669 3670 3687 3686 + 3381 3382 3399 3398 3670 3671 3688 3687 + 3382 3383 3400 3399 3671 3672 3689 3688 + 3384 3385 3402 3401 3673 3674 3691 3690 + 3385 3386 3403 3402 3674 3675 3692 3691 + 3386 3387 3404 3403 3675 3676 3693 3692 + 3387 3388 3405 3404 3676 3677 3694 3693 + 3388 3389 3406 3405 3677 3678 3695 3694 + 3389 3390 3407 3406 3678 3679 3696 3695 + 3390 3391 3408 3407 3679 3680 3697 3696 + 3391 3392 3409 3408 3680 3681 3698 3697 + 3392 3393 3410 3409 3681 3682 3699 3698 + 3393 3394 3411 3410 3682 3683 3700 3699 + 3394 3395 3412 3411 3683 3684 3701 3700 + 3395 3396 3413 3412 3684 3685 3702 3701 + 3396 3397 3414 3413 3685 3686 3703 3702 + 3397 3398 3415 3414 3686 3687 3704 3703 + 3398 3399 3416 3415 3687 3688 3705 3704 + 3399 3400 3417 3416 3688 3689 3706 3705 + 3401 3402 3419 3418 3690 3691 3708 3707 + 3402 3403 3420 3419 3691 3692 3709 3708 + 3403 3404 3421 3420 3692 3693 3710 3709 + 3404 3405 3422 3421 3693 3694 3711 3710 + 3405 3406 3423 3422 3694 3695 3712 3711 + 3406 3407 3424 3423 3695 3696 3713 3712 + 3407 3408 3425 3424 3696 3697 3714 3713 + 3408 3409 3426 3425 3697 3698 3715 3714 + 3409 3410 3427 3426 3698 3699 3716 3715 + 3410 3411 3428 3427 3699 3700 3717 3716 + 3411 3412 3429 3428 3700 3701 3718 3717 + 3412 3413 3430 3429 3701 3702 3719 3718 + 3413 3414 3431 3430 3702 3703 3720 3719 + 3414 3415 3432 3431 3703 3704 3721 3720 + 3415 3416 3433 3432 3704 3705 3722 3721 + 3416 3417 3434 3433 3705 3706 3723 3722 + 3418 3419 3436 3435 3707 3708 3725 3724 + 3419 3420 3437 3436 3708 3709 3726 3725 + 3420 3421 3438 3437 3709 3710 3727 3726 + 3421 3422 3439 3438 3710 3711 3728 3727 + 3422 3423 3440 3439 3711 3712 3729 3728 + 3423 3424 3441 3440 3712 3713 3730 3729 + 3424 3425 3442 3441 3713 3714 3731 3730 + 3425 3426 3443 3442 3714 3715 3732 3731 + 3426 3427 3444 3443 3715 3716 3733 3732 + 3427 3428 3445 3444 3716 3717 3734 3733 + 3428 3429 3446 3445 3717 3718 3735 3734 + 3429 3430 3447 3446 3718 3719 3736 3735 + 3430 3431 3448 3447 3719 3720 3737 3736 + 3431 3432 3449 3448 3720 3721 3738 3737 + 3432 3433 3450 3449 3721 3722 3739 3738 + 3433 3434 3451 3450 3722 3723 3740 3739 + 3435 3436 3453 3452 3724 3725 3742 3741 + 3436 3437 3454 3453 3725 3726 3743 3742 + 3437 3438 3455 3454 3726 3727 3744 3743 + 3438 3439 3456 3455 3727 3728 3745 3744 + 3439 3440 3457 3456 3728 3729 3746 3745 + 3440 3441 3458 3457 3729 3730 3747 3746 + 3441 3442 3459 3458 3730 3731 3748 3747 + 3442 3443 3460 3459 3731 3732 3749 3748 + 3443 3444 3461 3460 3732 3733 3750 3749 + 3444 3445 3462 3461 3733 3734 3751 3750 + 3445 3446 3463 3462 3734 3735 3752 3751 + 3446 3447 3464 3463 3735 3736 3753 3752 + 3447 3448 3465 3464 3736 3737 3754 3753 + 3448 3449 3466 3465 3737 3738 3755 3754 + 3449 3450 3467 3466 3738 3739 3756 3755 + 3450 3451 3468 3467 3739 3740 3757 3756 + 3469 3470 3487 3486 3758 3759 3776 3775 + 3470 3471 3488 3487 3759 3760 3777 3776 + 3471 3472 3489 3488 3760 3761 3778 3777 + 3472 3473 3490 3489 3761 3762 3779 3778 + 3473 3474 3491 3490 3762 3763 3780 3779 + 3474 3475 3492 3491 3763 3764 3781 3780 + 3475 3476 3493 3492 3764 3765 3782 3781 + 3476 3477 3494 3493 3765 3766 3783 3782 + 3477 3478 3495 3494 3766 3767 3784 3783 + 3478 3479 3496 3495 3767 3768 3785 3784 + 3479 3480 3497 3496 3768 3769 3786 3785 + 3480 3481 3498 3497 3769 3770 3787 3786 + 3481 3482 3499 3498 3770 3771 3788 3787 + 3482 3483 3500 3499 3771 3772 3789 3788 + 3483 3484 3501 3500 3772 3773 3790 3789 + 3484 3485 3502 3501 3773 3774 3791 3790 + 3486 3487 3504 3503 3775 3776 3793 3792 + 3487 3488 3505 3504 3776 3777 3794 3793 + 3488 3489 3506 3505 3777 3778 3795 3794 + 3489 3490 3507 3506 3778 3779 3796 3795 + 3490 3491 3508 3507 3779 3780 3797 3796 + 3491 3492 3509 3508 3780 3781 3798 3797 + 3492 3493 3510 3509 3781 3782 3799 3798 + 3493 3494 3511 3510 3782 3783 3800 3799 + 3494 3495 3512 3511 3783 3784 3801 3800 + 3495 3496 3513 3512 3784 3785 3802 3801 + 3496 3497 3514 3513 3785 3786 3803 3802 + 3497 3498 3515 3514 3786 3787 3804 3803 + 3498 3499 3516 3515 3787 3788 3805 3804 + 3499 3500 3517 3516 3788 3789 3806 3805 + 3500 3501 3518 3517 3789 3790 3807 3806 + 3501 3502 3519 3518 3790 3791 3808 3807 + 3503 3504 3521 3520 3792 3793 3810 3809 + 3504 3505 3522 3521 3793 3794 3811 3810 + 3505 3506 3523 3522 3794 3795 3812 3811 + 3506 3507 3524 3523 3795 3796 3813 3812 + 3507 3508 3525 3524 3796 3797 3814 3813 + 3508 3509 3526 3525 3797 3798 3815 3814 + 3509 3510 3527 3526 3798 3799 3816 3815 + 3510 3511 3528 3527 3799 3800 3817 3816 + 3511 3512 3529 3528 3800 3801 3818 3817 + 3512 3513 3530 3529 3801 3802 3819 3818 + 3513 3514 3531 3530 3802 3803 3820 3819 + 3514 3515 3532 3531 3803 3804 3821 3820 + 3515 3516 3533 3532 3804 3805 3822 3821 + 3516 3517 3534 3533 3805 3806 3823 3822 + 3517 3518 3535 3534 3806 3807 3824 3823 + 3518 3519 3536 3535 3807 3808 3825 3824 + 3520 3521 3538 3537 3809 3810 3827 3826 + 3521 3522 3539 3538 3810 3811 3828 3827 + 3522 3523 3540 3539 3811 3812 3829 3828 + 3523 3524 3541 3540 3812 3813 3830 3829 + 3524 3525 3542 3541 3813 3814 3831 3830 + 3525 3526 3543 3542 3814 3815 3832 3831 + 3526 3527 3544 3543 3815 3816 3833 3832 + 3527 3528 3545 3544 3816 3817 3834 3833 + 3528 3529 3546 3545 3817 3818 3835 3834 + 3529 3530 3547 3546 3818 3819 3836 3835 + 3530 3531 3548 3547 3819 3820 3837 3836 + 3531 3532 3549 3548 3820 3821 3838 3837 + 3532 3533 3550 3549 3821 3822 3839 3838 + 3533 3534 3551 3550 3822 3823 3840 3839 + 3534 3535 3552 3551 3823 3824 3841 3840 + 3535 3536 3553 3552 3824 3825 3842 3841 + 3537 3538 3555 3554 3826 3827 3844 3843 + 3538 3539 3556 3555 3827 3828 3845 3844 + 3539 3540 3557 3556 3828 3829 3846 3845 + 3540 3541 3558 3557 3829 3830 3847 3846 + 3541 3542 3559 3558 3830 3831 3848 3847 + 3542 3543 3560 3559 3831 3832 3849 3848 + 3543 3544 3561 3560 3832 3833 3850 3849 + 3544 3545 3562 3561 3833 3834 3851 3850 + 3545 3546 3563 3562 3834 3835 3852 3851 + 3546 3547 3564 3563 3835 3836 3853 3852 + 3547 3548 3565 3564 3836 3837 3854 3853 + 3548 3549 3566 3565 3837 3838 3855 3854 + 3549 3550 3567 3566 3838 3839 3856 3855 + 3550 3551 3568 3567 3839 3840 3857 3856 + 3551 3552 3569 3568 3840 3841 3858 3857 + 3552 3553 3570 3569 3841 3842 3859 3858 + 3554 3555 3572 3571 3843 3844 3861 3860 + 3555 3556 3573 3572 3844 3845 3862 3861 + 3556 3557 3574 3573 3845 3846 3863 3862 + 3557 3558 3575 3574 3846 3847 3864 3863 + 3558 3559 3576 3575 3847 3848 3865 3864 + 3559 3560 3577 3576 3848 3849 3866 3865 + 3560 3561 3578 3577 3849 3850 3867 3866 + 3561 3562 3579 3578 3850 3851 3868 3867 + 3562 3563 3580 3579 3851 3852 3869 3868 + 3563 3564 3581 3580 3852 3853 3870 3869 + 3564 3565 3582 3581 3853 3854 3871 3870 + 3565 3566 3583 3582 3854 3855 3872 3871 + 3566 3567 3584 3583 3855 3856 3873 3872 + 3567 3568 3585 3584 3856 3857 3874 3873 + 3568 3569 3586 3585 3857 3858 3875 3874 + 3569 3570 3587 3586 3858 3859 3876 3875 + 3571 3572 3589 3588 3860 3861 3878 3877 + 3572 3573 3590 3589 3861 3862 3879 3878 + 3573 3574 3591 3590 3862 3863 3880 3879 + 3574 3575 3592 3591 3863 3864 3881 3880 + 3575 3576 3593 3592 3864 3865 3882 3881 + 3576 3577 3594 3593 3865 3866 3883 3882 + 3577 3578 3595 3594 3866 3867 3884 3883 + 3578 3579 3596 3595 3867 3868 3885 3884 + 3579 3580 3597 3596 3868 3869 3886 3885 + 3580 3581 3598 3597 3869 3870 3887 3886 + 3581 3582 3599 3598 3870 3871 3888 3887 + 3582 3583 3600 3599 3871 3872 3889 3888 + 3583 3584 3601 3600 3872 3873 3890 3889 + 3584 3585 3602 3601 3873 3874 3891 3890 + 3585 3586 3603 3602 3874 3875 3892 3891 + 3586 3587 3604 3603 3875 3876 3893 3892 + 3588 3589 3606 3605 3877 3878 3895 3894 + 3589 3590 3607 3606 3878 3879 3896 3895 + 3590 3591 3608 3607 3879 3880 3897 3896 + 3591 3592 3609 3608 3880 3881 3898 3897 + 3592 3593 3610 3609 3881 3882 3899 3898 + 3593 3594 3611 3610 3882 3883 3900 3899 + 3594 3595 3612 3611 3883 3884 3901 3900 + 3595 3596 3613 3612 3884 3885 3902 3901 + 3596 3597 3614 3613 3885 3886 3903 3902 + 3597 3598 3615 3614 3886 3887 3904 3903 + 3598 3599 3616 3615 3887 3888 3905 3904 + 3599 3600 3617 3616 3888 3889 3906 3905 + 3600 3601 3618 3617 3889 3890 3907 3906 + 3601 3602 3619 3618 3890 3891 3908 3907 + 3602 3603 3620 3619 3891 3892 3909 3908 + 3603 3604 3621 3620 3892 3893 3910 3909 + 3605 3606 3623 3622 3894 3895 3912 3911 + 3606 3607 3624 3623 3895 3896 3913 3912 + 3607 3608 3625 3624 3896 3897 3914 3913 + 3608 3609 3626 3625 3897 3898 3915 3914 + 3609 3610 3627 3626 3898 3899 3916 3915 + 3610 3611 3628 3627 3899 3900 3917 3916 + 3611 3612 3629 3628 3900 3901 3918 3917 + 3612 3613 3630 3629 3901 3902 3919 3918 + 3613 3614 3631 3630 3902 3903 3920 3919 + 3614 3615 3632 3631 3903 3904 3921 3920 + 3615 3616 3633 3632 3904 3905 3922 3921 + 3616 3617 3634 3633 3905 3906 3923 3922 + 3617 3618 3635 3634 3906 3907 3924 3923 + 3618 3619 3636 3635 3907 3908 3925 3924 + 3619 3620 3637 3636 3908 3909 3926 3925 + 3620 3621 3638 3637 3909 3910 3927 3926 + 3622 3623 3640 3639 3911 3912 3929 3928 + 3623 3624 3641 3640 3912 3913 3930 3929 + 3624 3625 3642 3641 3913 3914 3931 3930 + 3625 3626 3643 3642 3914 3915 3932 3931 + 3626 3627 3644 3643 3915 3916 3933 3932 + 3627 3628 3645 3644 3916 3917 3934 3933 + 3628 3629 3646 3645 3917 3918 3935 3934 + 3629 3630 3647 3646 3918 3919 3936 3935 + 3630 3631 3648 3647 3919 3920 3937 3936 + 3631 3632 3649 3648 3920 3921 3938 3937 + 3632 3633 3650 3649 3921 3922 3939 3938 + 3633 3634 3651 3650 3922 3923 3940 3939 + 3634 3635 3652 3651 3923 3924 3941 3940 + 3635 3636 3653 3652 3924 3925 3942 3941 + 3636 3637 3654 3653 3925 3926 3943 3942 + 3637 3638 3655 3654 3926 3927 3944 3943 + 3639 3640 3657 3656 3928 3929 3946 3945 + 3640 3641 3658 3657 3929 3930 3947 3946 + 3641 3642 3659 3658 3930 3931 3948 3947 + 3642 3643 3660 3659 3931 3932 3949 3948 + 3643 3644 3661 3660 3932 3933 3950 3949 + 3644 3645 3662 3661 3933 3934 3951 3950 + 3645 3646 3663 3662 3934 3935 3952 3951 + 3646 3647 3664 3663 3935 3936 3953 3952 + 3647 3648 3665 3664 3936 3937 3954 3953 + 3648 3649 3666 3665 3937 3938 3955 3954 + 3649 3650 3667 3666 3938 3939 3956 3955 + 3650 3651 3668 3667 3939 3940 3957 3956 + 3651 3652 3669 3668 3940 3941 3958 3957 + 3652 3653 3670 3669 3941 3942 3959 3958 + 3653 3654 3671 3670 3942 3943 3960 3959 + 3654 3655 3672 3671 3943 3944 3961 3960 + 3656 3657 3674 3673 3945 3946 3963 3962 + 3657 3658 3675 3674 3946 3947 3964 3963 + 3658 3659 3676 3675 3947 3948 3965 3964 + 3659 3660 3677 3676 3948 3949 3966 3965 + 3660 3661 3678 3677 3949 3950 3967 3966 + 3661 3662 3679 3678 3950 3951 3968 3967 + 3662 3663 3680 3679 3951 3952 3969 3968 + 3663 3664 3681 3680 3952 3953 3970 3969 + 3664 3665 3682 3681 3953 3954 3971 3970 + 3665 3666 3683 3682 3954 3955 3972 3971 + 3666 3667 3684 3683 3955 3956 3973 3972 + 3667 3668 3685 3684 3956 3957 3974 3973 + 3668 3669 3686 3685 3957 3958 3975 3974 + 3669 3670 3687 3686 3958 3959 3976 3975 + 3670 3671 3688 3687 3959 3960 3977 3976 + 3671 3672 3689 3688 3960 3961 3978 3977 + 3673 3674 3691 3690 3962 3963 3980 3979 + 3674 3675 3692 3691 3963 3964 3981 3980 + 3675 3676 3693 3692 3964 3965 3982 3981 + 3676 3677 3694 3693 3965 3966 3983 3982 + 3677 3678 3695 3694 3966 3967 3984 3983 + 3678 3679 3696 3695 3967 3968 3985 3984 + 3679 3680 3697 3696 3968 3969 3986 3985 + 3680 3681 3698 3697 3969 3970 3987 3986 + 3681 3682 3699 3698 3970 3971 3988 3987 + 3682 3683 3700 3699 3971 3972 3989 3988 + 3683 3684 3701 3700 3972 3973 3990 3989 + 3684 3685 3702 3701 3973 3974 3991 3990 + 3685 3686 3703 3702 3974 3975 3992 3991 + 3686 3687 3704 3703 3975 3976 3993 3992 + 3687 3688 3705 3704 3976 3977 3994 3993 + 3688 3689 3706 3705 3977 3978 3995 3994 + 3690 3691 3708 3707 3979 3980 3997 3996 + 3691 3692 3709 3708 3980 3981 3998 3997 + 3692 3693 3710 3709 3981 3982 3999 3998 + 3693 3694 3711 3710 3982 3983 4000 3999 + 3694 3695 3712 3711 3983 3984 4001 4000 + 3695 3696 3713 3712 3984 3985 4002 4001 + 3696 3697 3714 3713 3985 3986 4003 4002 + 3697 3698 3715 3714 3986 3987 4004 4003 + 3698 3699 3716 3715 3987 3988 4005 4004 + 3699 3700 3717 3716 3988 3989 4006 4005 + 3700 3701 3718 3717 3989 3990 4007 4006 + 3701 3702 3719 3718 3990 3991 4008 4007 + 3702 3703 3720 3719 3991 3992 4009 4008 + 3703 3704 3721 3720 3992 3993 4010 4009 + 3704 3705 3722 3721 3993 3994 4011 4010 + 3705 3706 3723 3722 3994 3995 4012 4011 + 3707 3708 3725 3724 3996 3997 4014 4013 + 3708 3709 3726 3725 3997 3998 4015 4014 + 3709 3710 3727 3726 3998 3999 4016 4015 + 3710 3711 3728 3727 3999 4000 4017 4016 + 3711 3712 3729 3728 4000 4001 4018 4017 + 3712 3713 3730 3729 4001 4002 4019 4018 + 3713 3714 3731 3730 4002 4003 4020 4019 + 3714 3715 3732 3731 4003 4004 4021 4020 + 3715 3716 3733 3732 4004 4005 4022 4021 + 3716 3717 3734 3733 4005 4006 4023 4022 + 3717 3718 3735 3734 4006 4007 4024 4023 + 3718 3719 3736 3735 4007 4008 4025 4024 + 3719 3720 3737 3736 4008 4009 4026 4025 + 3720 3721 3738 3737 4009 4010 4027 4026 + 3721 3722 3739 3738 4010 4011 4028 4027 + 3722 3723 3740 3739 4011 4012 4029 4028 + 3724 3725 3742 3741 4013 4014 4031 4030 + 3725 3726 3743 3742 4014 4015 4032 4031 + 3726 3727 3744 3743 4015 4016 4033 4032 + 3727 3728 3745 3744 4016 4017 4034 4033 + 3728 3729 3746 3745 4017 4018 4035 4034 + 3729 3730 3747 3746 4018 4019 4036 4035 + 3730 3731 3748 3747 4019 4020 4037 4036 + 3731 3732 3749 3748 4020 4021 4038 4037 + 3732 3733 3750 3749 4021 4022 4039 4038 + 3733 3734 3751 3750 4022 4023 4040 4039 + 3734 3735 3752 3751 4023 4024 4041 4040 + 3735 3736 3753 3752 4024 4025 4042 4041 + 3736 3737 3754 3753 4025 4026 4043 4042 + 3737 3738 3755 3754 4026 4027 4044 4043 + 3738 3739 3756 3755 4027 4028 4045 4044 + 3739 3740 3757 3756 4028 4029 4046 4045 + 3758 3759 3776 3775 4047 4048 4065 4064 + 3759 3760 3777 3776 4048 4049 4066 4065 + 3760 3761 3778 3777 4049 4050 4067 4066 + 3761 3762 3779 3778 4050 4051 4068 4067 + 3762 3763 3780 3779 4051 4052 4069 4068 + 3763 3764 3781 3780 4052 4053 4070 4069 + 3764 3765 3782 3781 4053 4054 4071 4070 + 3765 3766 3783 3782 4054 4055 4072 4071 + 3766 3767 3784 3783 4055 4056 4073 4072 + 3767 3768 3785 3784 4056 4057 4074 4073 + 3768 3769 3786 3785 4057 4058 4075 4074 + 3769 3770 3787 3786 4058 4059 4076 4075 + 3770 3771 3788 3787 4059 4060 4077 4076 + 3771 3772 3789 3788 4060 4061 4078 4077 + 3772 3773 3790 3789 4061 4062 4079 4078 + 3773 3774 3791 3790 4062 4063 4080 4079 + 3775 3776 3793 3792 4064 4065 4082 4081 + 3776 3777 3794 3793 4065 4066 4083 4082 + 3777 3778 3795 3794 4066 4067 4084 4083 + 3778 3779 3796 3795 4067 4068 4085 4084 + 3779 3780 3797 3796 4068 4069 4086 4085 + 3780 3781 3798 3797 4069 4070 4087 4086 + 3781 3782 3799 3798 4070 4071 4088 4087 + 3782 3783 3800 3799 4071 4072 4089 4088 + 3783 3784 3801 3800 4072 4073 4090 4089 + 3784 3785 3802 3801 4073 4074 4091 4090 + 3785 3786 3803 3802 4074 4075 4092 4091 + 3786 3787 3804 3803 4075 4076 4093 4092 + 3787 3788 3805 3804 4076 4077 4094 4093 + 3788 3789 3806 3805 4077 4078 4095 4094 + 3789 3790 3807 3806 4078 4079 4096 4095 + 3790 3791 3808 3807 4079 4080 4097 4096 + 3792 3793 3810 3809 4081 4082 4099 4098 + 3793 3794 3811 3810 4082 4083 4100 4099 + 3794 3795 3812 3811 4083 4084 4101 4100 + 3795 3796 3813 3812 4084 4085 4102 4101 + 3796 3797 3814 3813 4085 4086 4103 4102 + 3797 3798 3815 3814 4086 4087 4104 4103 + 3798 3799 3816 3815 4087 4088 4105 4104 + 3799 3800 3817 3816 4088 4089 4106 4105 + 3800 3801 3818 3817 4089 4090 4107 4106 + 3801 3802 3819 3818 4090 4091 4108 4107 + 3802 3803 3820 3819 4091 4092 4109 4108 + 3803 3804 3821 3820 4092 4093 4110 4109 + 3804 3805 3822 3821 4093 4094 4111 4110 + 3805 3806 3823 3822 4094 4095 4112 4111 + 3806 3807 3824 3823 4095 4096 4113 4112 + 3807 3808 3825 3824 4096 4097 4114 4113 + 3809 3810 3827 3826 4098 4099 4116 4115 + 3810 3811 3828 3827 4099 4100 4117 4116 + 3811 3812 3829 3828 4100 4101 4118 4117 + 3812 3813 3830 3829 4101 4102 4119 4118 + 3813 3814 3831 3830 4102 4103 4120 4119 + 3814 3815 3832 3831 4103 4104 4121 4120 + 3815 3816 3833 3832 4104 4105 4122 4121 + 3816 3817 3834 3833 4105 4106 4123 4122 + 3817 3818 3835 3834 4106 4107 4124 4123 + 3818 3819 3836 3835 4107 4108 4125 4124 + 3819 3820 3837 3836 4108 4109 4126 4125 + 3820 3821 3838 3837 4109 4110 4127 4126 + 3821 3822 3839 3838 4110 4111 4128 4127 + 3822 3823 3840 3839 4111 4112 4129 4128 + 3823 3824 3841 3840 4112 4113 4130 4129 + 3824 3825 3842 3841 4113 4114 4131 4130 + 3826 3827 3844 3843 4115 4116 4133 4132 + 3827 3828 3845 3844 4116 4117 4134 4133 + 3828 3829 3846 3845 4117 4118 4135 4134 + 3829 3830 3847 3846 4118 4119 4136 4135 + 3830 3831 3848 3847 4119 4120 4137 4136 + 3831 3832 3849 3848 4120 4121 4138 4137 + 3832 3833 3850 3849 4121 4122 4139 4138 + 3833 3834 3851 3850 4122 4123 4140 4139 + 3834 3835 3852 3851 4123 4124 4141 4140 + 3835 3836 3853 3852 4124 4125 4142 4141 + 3836 3837 3854 3853 4125 4126 4143 4142 + 3837 3838 3855 3854 4126 4127 4144 4143 + 3838 3839 3856 3855 4127 4128 4145 4144 + 3839 3840 3857 3856 4128 4129 4146 4145 + 3840 3841 3858 3857 4129 4130 4147 4146 + 3841 3842 3859 3858 4130 4131 4148 4147 + 3843 3844 3861 3860 4132 4133 4150 4149 + 3844 3845 3862 3861 4133 4134 4151 4150 + 3845 3846 3863 3862 4134 4135 4152 4151 + 3846 3847 3864 3863 4135 4136 4153 4152 + 3847 3848 3865 3864 4136 4137 4154 4153 + 3848 3849 3866 3865 4137 4138 4155 4154 + 3849 3850 3867 3866 4138 4139 4156 4155 + 3850 3851 3868 3867 4139 4140 4157 4156 + 3851 3852 3869 3868 4140 4141 4158 4157 + 3852 3853 3870 3869 4141 4142 4159 4158 + 3853 3854 3871 3870 4142 4143 4160 4159 + 3854 3855 3872 3871 4143 4144 4161 4160 + 3855 3856 3873 3872 4144 4145 4162 4161 + 3856 3857 3874 3873 4145 4146 4163 4162 + 3857 3858 3875 3874 4146 4147 4164 4163 + 3858 3859 3876 3875 4147 4148 4165 4164 + 3860 3861 3878 3877 4149 4150 4167 4166 + 3861 3862 3879 3878 4150 4151 4168 4167 + 3862 3863 3880 3879 4151 4152 4169 4168 + 3863 3864 3881 3880 4152 4153 4170 4169 + 3864 3865 3882 3881 4153 4154 4171 4170 + 3865 3866 3883 3882 4154 4155 4172 4171 + 3866 3867 3884 3883 4155 4156 4173 4172 + 3867 3868 3885 3884 4156 4157 4174 4173 + 3868 3869 3886 3885 4157 4158 4175 4174 + 3869 3870 3887 3886 4158 4159 4176 4175 + 3870 3871 3888 3887 4159 4160 4177 4176 + 3871 3872 3889 3888 4160 4161 4178 4177 + 3872 3873 3890 3889 4161 4162 4179 4178 + 3873 3874 3891 3890 4162 4163 4180 4179 + 3874 3875 3892 3891 4163 4164 4181 4180 + 3875 3876 3893 3892 4164 4165 4182 4181 + 3877 3878 3895 3894 4166 4167 4184 4183 + 3878 3879 3896 3895 4167 4168 4185 4184 + 3879 3880 3897 3896 4168 4169 4186 4185 + 3880 3881 3898 3897 4169 4170 4187 4186 + 3881 3882 3899 3898 4170 4171 4188 4187 + 3882 3883 3900 3899 4171 4172 4189 4188 + 3883 3884 3901 3900 4172 4173 4190 4189 + 3884 3885 3902 3901 4173 4174 4191 4190 + 3885 3886 3903 3902 4174 4175 4192 4191 + 3886 3887 3904 3903 4175 4176 4193 4192 + 3887 3888 3905 3904 4176 4177 4194 4193 + 3888 3889 3906 3905 4177 4178 4195 4194 + 3889 3890 3907 3906 4178 4179 4196 4195 + 3890 3891 3908 3907 4179 4180 4197 4196 + 3891 3892 3909 3908 4180 4181 4198 4197 + 3892 3893 3910 3909 4181 4182 4199 4198 + 3894 3895 3912 3911 4183 4184 4201 4200 + 3895 3896 3913 3912 4184 4185 4202 4201 + 3896 3897 3914 3913 4185 4186 4203 4202 + 3897 3898 3915 3914 4186 4187 4204 4203 + 3898 3899 3916 3915 4187 4188 4205 4204 + 3899 3900 3917 3916 4188 4189 4206 4205 + 3900 3901 3918 3917 4189 4190 4207 4206 + 3901 3902 3919 3918 4190 4191 4208 4207 + 3902 3903 3920 3919 4191 4192 4209 4208 + 3903 3904 3921 3920 4192 4193 4210 4209 + 3904 3905 3922 3921 4193 4194 4211 4210 + 3905 3906 3923 3922 4194 4195 4212 4211 + 3906 3907 3924 3923 4195 4196 4213 4212 + 3907 3908 3925 3924 4196 4197 4214 4213 + 3908 3909 3926 3925 4197 4198 4215 4214 + 3909 3910 3927 3926 4198 4199 4216 4215 + 3911 3912 3929 3928 4200 4201 4218 4217 + 3912 3913 3930 3929 4201 4202 4219 4218 + 3913 3914 3931 3930 4202 4203 4220 4219 + 3914 3915 3932 3931 4203 4204 4221 4220 + 3915 3916 3933 3932 4204 4205 4222 4221 + 3916 3917 3934 3933 4205 4206 4223 4222 + 3917 3918 3935 3934 4206 4207 4224 4223 + 3918 3919 3936 3935 4207 4208 4225 4224 + 3919 3920 3937 3936 4208 4209 4226 4225 + 3920 3921 3938 3937 4209 4210 4227 4226 + 3921 3922 3939 3938 4210 4211 4228 4227 + 3922 3923 3940 3939 4211 4212 4229 4228 + 3923 3924 3941 3940 4212 4213 4230 4229 + 3924 3925 3942 3941 4213 4214 4231 4230 + 3925 3926 3943 3942 4214 4215 4232 4231 + 3926 3927 3944 3943 4215 4216 4233 4232 + 3928 3929 3946 3945 4217 4218 4235 4234 + 3929 3930 3947 3946 4218 4219 4236 4235 + 3930 3931 3948 3947 4219 4220 4237 4236 + 3931 3932 3949 3948 4220 4221 4238 4237 + 3932 3933 3950 3949 4221 4222 4239 4238 + 3933 3934 3951 3950 4222 4223 4240 4239 + 3934 3935 3952 3951 4223 4224 4241 4240 + 3935 3936 3953 3952 4224 4225 4242 4241 + 3936 3937 3954 3953 4225 4226 4243 4242 + 3937 3938 3955 3954 4226 4227 4244 4243 + 3938 3939 3956 3955 4227 4228 4245 4244 + 3939 3940 3957 3956 4228 4229 4246 4245 + 3940 3941 3958 3957 4229 4230 4247 4246 + 3941 3942 3959 3958 4230 4231 4248 4247 + 3942 3943 3960 3959 4231 4232 4249 4248 + 3943 3944 3961 3960 4232 4233 4250 4249 + 3945 3946 3963 3962 4234 4235 4252 4251 + 3946 3947 3964 3963 4235 4236 4253 4252 + 3947 3948 3965 3964 4236 4237 4254 4253 + 3948 3949 3966 3965 4237 4238 4255 4254 + 3949 3950 3967 3966 4238 4239 4256 4255 + 3950 3951 3968 3967 4239 4240 4257 4256 + 3951 3952 3969 3968 4240 4241 4258 4257 + 3952 3953 3970 3969 4241 4242 4259 4258 + 3953 3954 3971 3970 4242 4243 4260 4259 + 3954 3955 3972 3971 4243 4244 4261 4260 + 3955 3956 3973 3972 4244 4245 4262 4261 + 3956 3957 3974 3973 4245 4246 4263 4262 + 3957 3958 3975 3974 4246 4247 4264 4263 + 3958 3959 3976 3975 4247 4248 4265 4264 + 3959 3960 3977 3976 4248 4249 4266 4265 + 3960 3961 3978 3977 4249 4250 4267 4266 + 3962 3963 3980 3979 4251 4252 4269 4268 + 3963 3964 3981 3980 4252 4253 4270 4269 + 3964 3965 3982 3981 4253 4254 4271 4270 + 3965 3966 3983 3982 4254 4255 4272 4271 + 3966 3967 3984 3983 4255 4256 4273 4272 + 3967 3968 3985 3984 4256 4257 4274 4273 + 3968 3969 3986 3985 4257 4258 4275 4274 + 3969 3970 3987 3986 4258 4259 4276 4275 + 3970 3971 3988 3987 4259 4260 4277 4276 + 3971 3972 3989 3988 4260 4261 4278 4277 + 3972 3973 3990 3989 4261 4262 4279 4278 + 3973 3974 3991 3990 4262 4263 4280 4279 + 3974 3975 3992 3991 4263 4264 4281 4280 + 3975 3976 3993 3992 4264 4265 4282 4281 + 3976 3977 3994 3993 4265 4266 4283 4282 + 3977 3978 3995 3994 4266 4267 4284 4283 + 3979 3980 3997 3996 4268 4269 4286 4285 + 3980 3981 3998 3997 4269 4270 4287 4286 + 3981 3982 3999 3998 4270 4271 4288 4287 + 3982 3983 4000 3999 4271 4272 4289 4288 + 3983 3984 4001 4000 4272 4273 4290 4289 + 3984 3985 4002 4001 4273 4274 4291 4290 + 3985 3986 4003 4002 4274 4275 4292 4291 + 3986 3987 4004 4003 4275 4276 4293 4292 + 3987 3988 4005 4004 4276 4277 4294 4293 + 3988 3989 4006 4005 4277 4278 4295 4294 + 3989 3990 4007 4006 4278 4279 4296 4295 + 3990 3991 4008 4007 4279 4280 4297 4296 + 3991 3992 4009 4008 4280 4281 4298 4297 + 3992 3993 4010 4009 4281 4282 4299 4298 + 3993 3994 4011 4010 4282 4283 4300 4299 + 3994 3995 4012 4011 4283 4284 4301 4300 + 3996 3997 4014 4013 4285 4286 4303 4302 + 3997 3998 4015 4014 4286 4287 4304 4303 + 3998 3999 4016 4015 4287 4288 4305 4304 + 3999 4000 4017 4016 4288 4289 4306 4305 + 4000 4001 4018 4017 4289 4290 4307 4306 + 4001 4002 4019 4018 4290 4291 4308 4307 + 4002 4003 4020 4019 4291 4292 4309 4308 + 4003 4004 4021 4020 4292 4293 4310 4309 + 4004 4005 4022 4021 4293 4294 4311 4310 + 4005 4006 4023 4022 4294 4295 4312 4311 + 4006 4007 4024 4023 4295 4296 4313 4312 + 4007 4008 4025 4024 4296 4297 4314 4313 + 4008 4009 4026 4025 4297 4298 4315 4314 + 4009 4010 4027 4026 4298 4299 4316 4315 + 4010 4011 4028 4027 4299 4300 4317 4316 + 4011 4012 4029 4028 4300 4301 4318 4317 + 4013 4014 4031 4030 4302 4303 4320 4319 + 4014 4015 4032 4031 4303 4304 4321 4320 + 4015 4016 4033 4032 4304 4305 4322 4321 + 4016 4017 4034 4033 4305 4306 4323 4322 + 4017 4018 4035 4034 4306 4307 4324 4323 + 4018 4019 4036 4035 4307 4308 4325 4324 + 4019 4020 4037 4036 4308 4309 4326 4325 + 4020 4021 4038 4037 4309 4310 4327 4326 + 4021 4022 4039 4038 4310 4311 4328 4327 + 4022 4023 4040 4039 4311 4312 4329 4328 + 4023 4024 4041 4040 4312 4313 4330 4329 + 4024 4025 4042 4041 4313 4314 4331 4330 + 4025 4026 4043 4042 4314 4315 4332 4331 + 4026 4027 4044 4043 4315 4316 4333 4332 + 4027 4028 4045 4044 4316 4317 4334 4333 + 4028 4029 4046 4045 4317 4318 4335 4334 + 4047 4048 4065 4064 4336 4337 4354 4353 + 4048 4049 4066 4065 4337 4338 4355 4354 + 4049 4050 4067 4066 4338 4339 4356 4355 + 4050 4051 4068 4067 4339 4340 4357 4356 + 4051 4052 4069 4068 4340 4341 4358 4357 + 4052 4053 4070 4069 4341 4342 4359 4358 + 4053 4054 4071 4070 4342 4343 4360 4359 + 4054 4055 4072 4071 4343 4344 4361 4360 + 4055 4056 4073 4072 4344 4345 4362 4361 + 4056 4057 4074 4073 4345 4346 4363 4362 + 4057 4058 4075 4074 4346 4347 4364 4363 + 4058 4059 4076 4075 4347 4348 4365 4364 + 4059 4060 4077 4076 4348 4349 4366 4365 + 4060 4061 4078 4077 4349 4350 4367 4366 + 4061 4062 4079 4078 4350 4351 4368 4367 + 4062 4063 4080 4079 4351 4352 4369 4368 + 4064 4065 4082 4081 4353 4354 4371 4370 + 4065 4066 4083 4082 4354 4355 4372 4371 + 4066 4067 4084 4083 4355 4356 4373 4372 + 4067 4068 4085 4084 4356 4357 4374 4373 + 4068 4069 4086 4085 4357 4358 4375 4374 + 4069 4070 4087 4086 4358 4359 4376 4375 + 4070 4071 4088 4087 4359 4360 4377 4376 + 4071 4072 4089 4088 4360 4361 4378 4377 + 4072 4073 4090 4089 4361 4362 4379 4378 + 4073 4074 4091 4090 4362 4363 4380 4379 + 4074 4075 4092 4091 4363 4364 4381 4380 + 4075 4076 4093 4092 4364 4365 4382 4381 + 4076 4077 4094 4093 4365 4366 4383 4382 + 4077 4078 4095 4094 4366 4367 4384 4383 + 4078 4079 4096 4095 4367 4368 4385 4384 + 4079 4080 4097 4096 4368 4369 4386 4385 + 4081 4082 4099 4098 4370 4371 4388 4387 + 4082 4083 4100 4099 4371 4372 4389 4388 + 4083 4084 4101 4100 4372 4373 4390 4389 + 4084 4085 4102 4101 4373 4374 4391 4390 + 4085 4086 4103 4102 4374 4375 4392 4391 + 4086 4087 4104 4103 4375 4376 4393 4392 + 4087 4088 4105 4104 4376 4377 4394 4393 + 4088 4089 4106 4105 4377 4378 4395 4394 + 4089 4090 4107 4106 4378 4379 4396 4395 + 4090 4091 4108 4107 4379 4380 4397 4396 + 4091 4092 4109 4108 4380 4381 4398 4397 + 4092 4093 4110 4109 4381 4382 4399 4398 + 4093 4094 4111 4110 4382 4383 4400 4399 + 4094 4095 4112 4111 4383 4384 4401 4400 + 4095 4096 4113 4112 4384 4385 4402 4401 + 4096 4097 4114 4113 4385 4386 4403 4402 + 4098 4099 4116 4115 4387 4388 4405 4404 + 4099 4100 4117 4116 4388 4389 4406 4405 + 4100 4101 4118 4117 4389 4390 4407 4406 + 4101 4102 4119 4118 4390 4391 4408 4407 + 4102 4103 4120 4119 4391 4392 4409 4408 + 4103 4104 4121 4120 4392 4393 4410 4409 + 4104 4105 4122 4121 4393 4394 4411 4410 + 4105 4106 4123 4122 4394 4395 4412 4411 + 4106 4107 4124 4123 4395 4396 4413 4412 + 4107 4108 4125 4124 4396 4397 4414 4413 + 4108 4109 4126 4125 4397 4398 4415 4414 + 4109 4110 4127 4126 4398 4399 4416 4415 + 4110 4111 4128 4127 4399 4400 4417 4416 + 4111 4112 4129 4128 4400 4401 4418 4417 + 4112 4113 4130 4129 4401 4402 4419 4418 + 4113 4114 4131 4130 4402 4403 4420 4419 + 4115 4116 4133 4132 4404 4405 4422 4421 + 4116 4117 4134 4133 4405 4406 4423 4422 + 4117 4118 4135 4134 4406 4407 4424 4423 + 4118 4119 4136 4135 4407 4408 4425 4424 + 4119 4120 4137 4136 4408 4409 4426 4425 + 4120 4121 4138 4137 4409 4410 4427 4426 + 4121 4122 4139 4138 4410 4411 4428 4427 + 4122 4123 4140 4139 4411 4412 4429 4428 + 4123 4124 4141 4140 4412 4413 4430 4429 + 4124 4125 4142 4141 4413 4414 4431 4430 + 4125 4126 4143 4142 4414 4415 4432 4431 + 4126 4127 4144 4143 4415 4416 4433 4432 + 4127 4128 4145 4144 4416 4417 4434 4433 + 4128 4129 4146 4145 4417 4418 4435 4434 + 4129 4130 4147 4146 4418 4419 4436 4435 + 4130 4131 4148 4147 4419 4420 4437 4436 + 4132 4133 4150 4149 4421 4422 4439 4438 + 4133 4134 4151 4150 4422 4423 4440 4439 + 4134 4135 4152 4151 4423 4424 4441 4440 + 4135 4136 4153 4152 4424 4425 4442 4441 + 4136 4137 4154 4153 4425 4426 4443 4442 + 4137 4138 4155 4154 4426 4427 4444 4443 + 4138 4139 4156 4155 4427 4428 4445 4444 + 4139 4140 4157 4156 4428 4429 4446 4445 + 4140 4141 4158 4157 4429 4430 4447 4446 + 4141 4142 4159 4158 4430 4431 4448 4447 + 4142 4143 4160 4159 4431 4432 4449 4448 + 4143 4144 4161 4160 4432 4433 4450 4449 + 4144 4145 4162 4161 4433 4434 4451 4450 + 4145 4146 4163 4162 4434 4435 4452 4451 + 4146 4147 4164 4163 4435 4436 4453 4452 + 4147 4148 4165 4164 4436 4437 4454 4453 + 4149 4150 4167 4166 4438 4439 4456 4455 + 4150 4151 4168 4167 4439 4440 4457 4456 + 4151 4152 4169 4168 4440 4441 4458 4457 + 4152 4153 4170 4169 4441 4442 4459 4458 + 4153 4154 4171 4170 4442 4443 4460 4459 + 4154 4155 4172 4171 4443 4444 4461 4460 + 4155 4156 4173 4172 4444 4445 4462 4461 + 4156 4157 4174 4173 4445 4446 4463 4462 + 4157 4158 4175 4174 4446 4447 4464 4463 + 4158 4159 4176 4175 4447 4448 4465 4464 + 4159 4160 4177 4176 4448 4449 4466 4465 + 4160 4161 4178 4177 4449 4450 4467 4466 + 4161 4162 4179 4178 4450 4451 4468 4467 + 4162 4163 4180 4179 4451 4452 4469 4468 + 4163 4164 4181 4180 4452 4453 4470 4469 + 4164 4165 4182 4181 4453 4454 4471 4470 + 4166 4167 4184 4183 4455 4456 4473 4472 + 4167 4168 4185 4184 4456 4457 4474 4473 + 4168 4169 4186 4185 4457 4458 4475 4474 + 4169 4170 4187 4186 4458 4459 4476 4475 + 4170 4171 4188 4187 4459 4460 4477 4476 + 4171 4172 4189 4188 4460 4461 4478 4477 + 4172 4173 4190 4189 4461 4462 4479 4478 + 4173 4174 4191 4190 4462 4463 4480 4479 + 4174 4175 4192 4191 4463 4464 4481 4480 + 4175 4176 4193 4192 4464 4465 4482 4481 + 4176 4177 4194 4193 4465 4466 4483 4482 + 4177 4178 4195 4194 4466 4467 4484 4483 + 4178 4179 4196 4195 4467 4468 4485 4484 + 4179 4180 4197 4196 4468 4469 4486 4485 + 4180 4181 4198 4197 4469 4470 4487 4486 + 4181 4182 4199 4198 4470 4471 4488 4487 + 4183 4184 4201 4200 4472 4473 4490 4489 + 4184 4185 4202 4201 4473 4474 4491 4490 + 4185 4186 4203 4202 4474 4475 4492 4491 + 4186 4187 4204 4203 4475 4476 4493 4492 + 4187 4188 4205 4204 4476 4477 4494 4493 + 4188 4189 4206 4205 4477 4478 4495 4494 + 4189 4190 4207 4206 4478 4479 4496 4495 + 4190 4191 4208 4207 4479 4480 4497 4496 + 4191 4192 4209 4208 4480 4481 4498 4497 + 4192 4193 4210 4209 4481 4482 4499 4498 + 4193 4194 4211 4210 4482 4483 4500 4499 + 4194 4195 4212 4211 4483 4484 4501 4500 + 4195 4196 4213 4212 4484 4485 4502 4501 + 4196 4197 4214 4213 4485 4486 4503 4502 + 4197 4198 4215 4214 4486 4487 4504 4503 + 4198 4199 4216 4215 4487 4488 4505 4504 + 4200 4201 4218 4217 4489 4490 4507 4506 + 4201 4202 4219 4218 4490 4491 4508 4507 + 4202 4203 4220 4219 4491 4492 4509 4508 + 4203 4204 4221 4220 4492 4493 4510 4509 + 4204 4205 4222 4221 4493 4494 4511 4510 + 4205 4206 4223 4222 4494 4495 4512 4511 + 4206 4207 4224 4223 4495 4496 4513 4512 + 4207 4208 4225 4224 4496 4497 4514 4513 + 4208 4209 4226 4225 4497 4498 4515 4514 + 4209 4210 4227 4226 4498 4499 4516 4515 + 4210 4211 4228 4227 4499 4500 4517 4516 + 4211 4212 4229 4228 4500 4501 4518 4517 + 4212 4213 4230 4229 4501 4502 4519 4518 + 4213 4214 4231 4230 4502 4503 4520 4519 + 4214 4215 4232 4231 4503 4504 4521 4520 + 4215 4216 4233 4232 4504 4505 4522 4521 + 4217 4218 4235 4234 4506 4507 4524 4523 + 4218 4219 4236 4235 4507 4508 4525 4524 + 4219 4220 4237 4236 4508 4509 4526 4525 + 4220 4221 4238 4237 4509 4510 4527 4526 + 4221 4222 4239 4238 4510 4511 4528 4527 + 4222 4223 4240 4239 4511 4512 4529 4528 + 4223 4224 4241 4240 4512 4513 4530 4529 + 4224 4225 4242 4241 4513 4514 4531 4530 + 4225 4226 4243 4242 4514 4515 4532 4531 + 4226 4227 4244 4243 4515 4516 4533 4532 + 4227 4228 4245 4244 4516 4517 4534 4533 + 4228 4229 4246 4245 4517 4518 4535 4534 + 4229 4230 4247 4246 4518 4519 4536 4535 + 4230 4231 4248 4247 4519 4520 4537 4536 + 4231 4232 4249 4248 4520 4521 4538 4537 + 4232 4233 4250 4249 4521 4522 4539 4538 + 4234 4235 4252 4251 4523 4524 4541 4540 + 4235 4236 4253 4252 4524 4525 4542 4541 + 4236 4237 4254 4253 4525 4526 4543 4542 + 4237 4238 4255 4254 4526 4527 4544 4543 + 4238 4239 4256 4255 4527 4528 4545 4544 + 4239 4240 4257 4256 4528 4529 4546 4545 + 4240 4241 4258 4257 4529 4530 4547 4546 + 4241 4242 4259 4258 4530 4531 4548 4547 + 4242 4243 4260 4259 4531 4532 4549 4548 + 4243 4244 4261 4260 4532 4533 4550 4549 + 4244 4245 4262 4261 4533 4534 4551 4550 + 4245 4246 4263 4262 4534 4535 4552 4551 + 4246 4247 4264 4263 4535 4536 4553 4552 + 4247 4248 4265 4264 4536 4537 4554 4553 + 4248 4249 4266 4265 4537 4538 4555 4554 + 4249 4250 4267 4266 4538 4539 4556 4555 + 4251 4252 4269 4268 4540 4541 4558 4557 + 4252 4253 4270 4269 4541 4542 4559 4558 + 4253 4254 4271 4270 4542 4543 4560 4559 + 4254 4255 4272 4271 4543 4544 4561 4560 + 4255 4256 4273 4272 4544 4545 4562 4561 + 4256 4257 4274 4273 4545 4546 4563 4562 + 4257 4258 4275 4274 4546 4547 4564 4563 + 4258 4259 4276 4275 4547 4548 4565 4564 + 4259 4260 4277 4276 4548 4549 4566 4565 + 4260 4261 4278 4277 4549 4550 4567 4566 + 4261 4262 4279 4278 4550 4551 4568 4567 + 4262 4263 4280 4279 4551 4552 4569 4568 + 4263 4264 4281 4280 4552 4553 4570 4569 + 4264 4265 4282 4281 4553 4554 4571 4570 + 4265 4266 4283 4282 4554 4555 4572 4571 + 4266 4267 4284 4283 4555 4556 4573 4572 + 4268 4269 4286 4285 4557 4558 4575 4574 + 4269 4270 4287 4286 4558 4559 4576 4575 + 4270 4271 4288 4287 4559 4560 4577 4576 + 4271 4272 4289 4288 4560 4561 4578 4577 + 4272 4273 4290 4289 4561 4562 4579 4578 + 4273 4274 4291 4290 4562 4563 4580 4579 + 4274 4275 4292 4291 4563 4564 4581 4580 + 4275 4276 4293 4292 4564 4565 4582 4581 + 4276 4277 4294 4293 4565 4566 4583 4582 + 4277 4278 4295 4294 4566 4567 4584 4583 + 4278 4279 4296 4295 4567 4568 4585 4584 + 4279 4280 4297 4296 4568 4569 4586 4585 + 4280 4281 4298 4297 4569 4570 4587 4586 + 4281 4282 4299 4298 4570 4571 4588 4587 + 4282 4283 4300 4299 4571 4572 4589 4588 + 4283 4284 4301 4300 4572 4573 4590 4589 + 4285 4286 4303 4302 4574 4575 4592 4591 + 4286 4287 4304 4303 4575 4576 4593 4592 + 4287 4288 4305 4304 4576 4577 4594 4593 + 4288 4289 4306 4305 4577 4578 4595 4594 + 4289 4290 4307 4306 4578 4579 4596 4595 + 4290 4291 4308 4307 4579 4580 4597 4596 + 4291 4292 4309 4308 4580 4581 4598 4597 + 4292 4293 4310 4309 4581 4582 4599 4598 + 4293 4294 4311 4310 4582 4583 4600 4599 + 4294 4295 4312 4311 4583 4584 4601 4600 + 4295 4296 4313 4312 4584 4585 4602 4601 + 4296 4297 4314 4313 4585 4586 4603 4602 + 4297 4298 4315 4314 4586 4587 4604 4603 + 4298 4299 4316 4315 4587 4588 4605 4604 + 4299 4300 4317 4316 4588 4589 4606 4605 + 4300 4301 4318 4317 4589 4590 4607 4606 + 4302 4303 4320 4319 4591 4592 4609 4608 + 4303 4304 4321 4320 4592 4593 4610 4609 + 4304 4305 4322 4321 4593 4594 4611 4610 + 4305 4306 4323 4322 4594 4595 4612 4611 + 4306 4307 4324 4323 4595 4596 4613 4612 + 4307 4308 4325 4324 4596 4597 4614 4613 + 4308 4309 4326 4325 4597 4598 4615 4614 + 4309 4310 4327 4326 4598 4599 4616 4615 + 4310 4311 4328 4327 4599 4600 4617 4616 + 4311 4312 4329 4328 4600 4601 4618 4617 + 4312 4313 4330 4329 4601 4602 4619 4618 + 4313 4314 4331 4330 4602 4603 4620 4619 + 4314 4315 4332 4331 4603 4604 4621 4620 + 4315 4316 4333 4332 4604 4605 4622 4621 + 4316 4317 4334 4333 4605 4606 4623 4622 + 4317 4318 4335 4334 4606 4607 4624 4623 + 4336 4337 4354 4353 4625 4626 4643 4642 + 4337 4338 4355 4354 4626 4627 4644 4643 + 4338 4339 4356 4355 4627 4628 4645 4644 + 4339 4340 4357 4356 4628 4629 4646 4645 + 4340 4341 4358 4357 4629 4630 4647 4646 + 4341 4342 4359 4358 4630 4631 4648 4647 + 4342 4343 4360 4359 4631 4632 4649 4648 + 4343 4344 4361 4360 4632 4633 4650 4649 + 4344 4345 4362 4361 4633 4634 4651 4650 + 4345 4346 4363 4362 4634 4635 4652 4651 + 4346 4347 4364 4363 4635 4636 4653 4652 + 4347 4348 4365 4364 4636 4637 4654 4653 + 4348 4349 4366 4365 4637 4638 4655 4654 + 4349 4350 4367 4366 4638 4639 4656 4655 + 4350 4351 4368 4367 4639 4640 4657 4656 + 4351 4352 4369 4368 4640 4641 4658 4657 + 4353 4354 4371 4370 4642 4643 4660 4659 + 4354 4355 4372 4371 4643 4644 4661 4660 + 4355 4356 4373 4372 4644 4645 4662 4661 + 4356 4357 4374 4373 4645 4646 4663 4662 + 4357 4358 4375 4374 4646 4647 4664 4663 + 4358 4359 4376 4375 4647 4648 4665 4664 + 4359 4360 4377 4376 4648 4649 4666 4665 + 4360 4361 4378 4377 4649 4650 4667 4666 + 4361 4362 4379 4378 4650 4651 4668 4667 + 4362 4363 4380 4379 4651 4652 4669 4668 + 4363 4364 4381 4380 4652 4653 4670 4669 + 4364 4365 4382 4381 4653 4654 4671 4670 + 4365 4366 4383 4382 4654 4655 4672 4671 + 4366 4367 4384 4383 4655 4656 4673 4672 + 4367 4368 4385 4384 4656 4657 4674 4673 + 4368 4369 4386 4385 4657 4658 4675 4674 + 4370 4371 4388 4387 4659 4660 4677 4676 + 4371 4372 4389 4388 4660 4661 4678 4677 + 4372 4373 4390 4389 4661 4662 4679 4678 + 4373 4374 4391 4390 4662 4663 4680 4679 + 4374 4375 4392 4391 4663 4664 4681 4680 + 4375 4376 4393 4392 4664 4665 4682 4681 + 4376 4377 4394 4393 4665 4666 4683 4682 + 4377 4378 4395 4394 4666 4667 4684 4683 + 4378 4379 4396 4395 4667 4668 4685 4684 + 4379 4380 4397 4396 4668 4669 4686 4685 + 4380 4381 4398 4397 4669 4670 4687 4686 + 4381 4382 4399 4398 4670 4671 4688 4687 + 4382 4383 4400 4399 4671 4672 4689 4688 + 4383 4384 4401 4400 4672 4673 4690 4689 + 4384 4385 4402 4401 4673 4674 4691 4690 + 4385 4386 4403 4402 4674 4675 4692 4691 + 4387 4388 4405 4404 4676 4677 4694 4693 + 4388 4389 4406 4405 4677 4678 4695 4694 + 4389 4390 4407 4406 4678 4679 4696 4695 + 4390 4391 4408 4407 4679 4680 4697 4696 + 4391 4392 4409 4408 4680 4681 4698 4697 + 4392 4393 4410 4409 4681 4682 4699 4698 + 4393 4394 4411 4410 4682 4683 4700 4699 + 4394 4395 4412 4411 4683 4684 4701 4700 + 4395 4396 4413 4412 4684 4685 4702 4701 + 4396 4397 4414 4413 4685 4686 4703 4702 + 4397 4398 4415 4414 4686 4687 4704 4703 + 4398 4399 4416 4415 4687 4688 4705 4704 + 4399 4400 4417 4416 4688 4689 4706 4705 + 4400 4401 4418 4417 4689 4690 4707 4706 + 4401 4402 4419 4418 4690 4691 4708 4707 + 4402 4403 4420 4419 4691 4692 4709 4708 + 4404 4405 4422 4421 4693 4694 4711 4710 + 4405 4406 4423 4422 4694 4695 4712 4711 + 4406 4407 4424 4423 4695 4696 4713 4712 + 4407 4408 4425 4424 4696 4697 4714 4713 + 4408 4409 4426 4425 4697 4698 4715 4714 + 4409 4410 4427 4426 4698 4699 4716 4715 + 4410 4411 4428 4427 4699 4700 4717 4716 + 4411 4412 4429 4428 4700 4701 4718 4717 + 4412 4413 4430 4429 4701 4702 4719 4718 + 4413 4414 4431 4430 4702 4703 4720 4719 + 4414 4415 4432 4431 4703 4704 4721 4720 + 4415 4416 4433 4432 4704 4705 4722 4721 + 4416 4417 4434 4433 4705 4706 4723 4722 + 4417 4418 4435 4434 4706 4707 4724 4723 + 4418 4419 4436 4435 4707 4708 4725 4724 + 4419 4420 4437 4436 4708 4709 4726 4725 + 4421 4422 4439 4438 4710 4711 4728 4727 + 4422 4423 4440 4439 4711 4712 4729 4728 + 4423 4424 4441 4440 4712 4713 4730 4729 + 4424 4425 4442 4441 4713 4714 4731 4730 + 4425 4426 4443 4442 4714 4715 4732 4731 + 4426 4427 4444 4443 4715 4716 4733 4732 + 4427 4428 4445 4444 4716 4717 4734 4733 + 4428 4429 4446 4445 4717 4718 4735 4734 + 4429 4430 4447 4446 4718 4719 4736 4735 + 4430 4431 4448 4447 4719 4720 4737 4736 + 4431 4432 4449 4448 4720 4721 4738 4737 + 4432 4433 4450 4449 4721 4722 4739 4738 + 4433 4434 4451 4450 4722 4723 4740 4739 + 4434 4435 4452 4451 4723 4724 4741 4740 + 4435 4436 4453 4452 4724 4725 4742 4741 + 4436 4437 4454 4453 4725 4726 4743 4742 + 4438 4439 4456 4455 4727 4728 4745 4744 + 4439 4440 4457 4456 4728 4729 4746 4745 + 4440 4441 4458 4457 4729 4730 4747 4746 + 4441 4442 4459 4458 4730 4731 4748 4747 + 4442 4443 4460 4459 4731 4732 4749 4748 + 4443 4444 4461 4460 4732 4733 4750 4749 + 4444 4445 4462 4461 4733 4734 4751 4750 + 4445 4446 4463 4462 4734 4735 4752 4751 + 4446 4447 4464 4463 4735 4736 4753 4752 + 4447 4448 4465 4464 4736 4737 4754 4753 + 4448 4449 4466 4465 4737 4738 4755 4754 + 4449 4450 4467 4466 4738 4739 4756 4755 + 4450 4451 4468 4467 4739 4740 4757 4756 + 4451 4452 4469 4468 4740 4741 4758 4757 + 4452 4453 4470 4469 4741 4742 4759 4758 + 4453 4454 4471 4470 4742 4743 4760 4759 + 4455 4456 4473 4472 4744 4745 4762 4761 + 4456 4457 4474 4473 4745 4746 4763 4762 + 4457 4458 4475 4474 4746 4747 4764 4763 + 4458 4459 4476 4475 4747 4748 4765 4764 + 4459 4460 4477 4476 4748 4749 4766 4765 + 4460 4461 4478 4477 4749 4750 4767 4766 + 4461 4462 4479 4478 4750 4751 4768 4767 + 4462 4463 4480 4479 4751 4752 4769 4768 + 4463 4464 4481 4480 4752 4753 4770 4769 + 4464 4465 4482 4481 4753 4754 4771 4770 + 4465 4466 4483 4482 4754 4755 4772 4771 + 4466 4467 4484 4483 4755 4756 4773 4772 + 4467 4468 4485 4484 4756 4757 4774 4773 + 4468 4469 4486 4485 4757 4758 4775 4774 + 4469 4470 4487 4486 4758 4759 4776 4775 + 4470 4471 4488 4487 4759 4760 4777 4776 + 4472 4473 4490 4489 4761 4762 4779 4778 + 4473 4474 4491 4490 4762 4763 4780 4779 + 4474 4475 4492 4491 4763 4764 4781 4780 + 4475 4476 4493 4492 4764 4765 4782 4781 + 4476 4477 4494 4493 4765 4766 4783 4782 + 4477 4478 4495 4494 4766 4767 4784 4783 + 4478 4479 4496 4495 4767 4768 4785 4784 + 4479 4480 4497 4496 4768 4769 4786 4785 + 4480 4481 4498 4497 4769 4770 4787 4786 + 4481 4482 4499 4498 4770 4771 4788 4787 + 4482 4483 4500 4499 4771 4772 4789 4788 + 4483 4484 4501 4500 4772 4773 4790 4789 + 4484 4485 4502 4501 4773 4774 4791 4790 + 4485 4486 4503 4502 4774 4775 4792 4791 + 4486 4487 4504 4503 4775 4776 4793 4792 + 4487 4488 4505 4504 4776 4777 4794 4793 + 4489 4490 4507 4506 4778 4779 4796 4795 + 4490 4491 4508 4507 4779 4780 4797 4796 + 4491 4492 4509 4508 4780 4781 4798 4797 + 4492 4493 4510 4509 4781 4782 4799 4798 + 4493 4494 4511 4510 4782 4783 4800 4799 + 4494 4495 4512 4511 4783 4784 4801 4800 + 4495 4496 4513 4512 4784 4785 4802 4801 + 4496 4497 4514 4513 4785 4786 4803 4802 + 4497 4498 4515 4514 4786 4787 4804 4803 + 4498 4499 4516 4515 4787 4788 4805 4804 + 4499 4500 4517 4516 4788 4789 4806 4805 + 4500 4501 4518 4517 4789 4790 4807 4806 + 4501 4502 4519 4518 4790 4791 4808 4807 + 4502 4503 4520 4519 4791 4792 4809 4808 + 4503 4504 4521 4520 4792 4793 4810 4809 + 4504 4505 4522 4521 4793 4794 4811 4810 + 4506 4507 4524 4523 4795 4796 4813 4812 + 4507 4508 4525 4524 4796 4797 4814 4813 + 4508 4509 4526 4525 4797 4798 4815 4814 + 4509 4510 4527 4526 4798 4799 4816 4815 + 4510 4511 4528 4527 4799 4800 4817 4816 + 4511 4512 4529 4528 4800 4801 4818 4817 + 4512 4513 4530 4529 4801 4802 4819 4818 + 4513 4514 4531 4530 4802 4803 4820 4819 + 4514 4515 4532 4531 4803 4804 4821 4820 + 4515 4516 4533 4532 4804 4805 4822 4821 + 4516 4517 4534 4533 4805 4806 4823 4822 + 4517 4518 4535 4534 4806 4807 4824 4823 + 4518 4519 4536 4535 4807 4808 4825 4824 + 4519 4520 4537 4536 4808 4809 4826 4825 + 4520 4521 4538 4537 4809 4810 4827 4826 + 4521 4522 4539 4538 4810 4811 4828 4827 + 4523 4524 4541 4540 4812 4813 4830 4829 + 4524 4525 4542 4541 4813 4814 4831 4830 + 4525 4526 4543 4542 4814 4815 4832 4831 + 4526 4527 4544 4543 4815 4816 4833 4832 + 4527 4528 4545 4544 4816 4817 4834 4833 + 4528 4529 4546 4545 4817 4818 4835 4834 + 4529 4530 4547 4546 4818 4819 4836 4835 + 4530 4531 4548 4547 4819 4820 4837 4836 + 4531 4532 4549 4548 4820 4821 4838 4837 + 4532 4533 4550 4549 4821 4822 4839 4838 + 4533 4534 4551 4550 4822 4823 4840 4839 + 4534 4535 4552 4551 4823 4824 4841 4840 + 4535 4536 4553 4552 4824 4825 4842 4841 + 4536 4537 4554 4553 4825 4826 4843 4842 + 4537 4538 4555 4554 4826 4827 4844 4843 + 4538 4539 4556 4555 4827 4828 4845 4844 + 4540 4541 4558 4557 4829 4830 4847 4846 + 4541 4542 4559 4558 4830 4831 4848 4847 + 4542 4543 4560 4559 4831 4832 4849 4848 + 4543 4544 4561 4560 4832 4833 4850 4849 + 4544 4545 4562 4561 4833 4834 4851 4850 + 4545 4546 4563 4562 4834 4835 4852 4851 + 4546 4547 4564 4563 4835 4836 4853 4852 + 4547 4548 4565 4564 4836 4837 4854 4853 + 4548 4549 4566 4565 4837 4838 4855 4854 + 4549 4550 4567 4566 4838 4839 4856 4855 + 4550 4551 4568 4567 4839 4840 4857 4856 + 4551 4552 4569 4568 4840 4841 4858 4857 + 4552 4553 4570 4569 4841 4842 4859 4858 + 4553 4554 4571 4570 4842 4843 4860 4859 + 4554 4555 4572 4571 4843 4844 4861 4860 + 4555 4556 4573 4572 4844 4845 4862 4861 + 4557 4558 4575 4574 4846 4847 4864 4863 + 4558 4559 4576 4575 4847 4848 4865 4864 + 4559 4560 4577 4576 4848 4849 4866 4865 + 4560 4561 4578 4577 4849 4850 4867 4866 + 4561 4562 4579 4578 4850 4851 4868 4867 + 4562 4563 4580 4579 4851 4852 4869 4868 + 4563 4564 4581 4580 4852 4853 4870 4869 + 4564 4565 4582 4581 4853 4854 4871 4870 + 4565 4566 4583 4582 4854 4855 4872 4871 + 4566 4567 4584 4583 4855 4856 4873 4872 + 4567 4568 4585 4584 4856 4857 4874 4873 + 4568 4569 4586 4585 4857 4858 4875 4874 + 4569 4570 4587 4586 4858 4859 4876 4875 + 4570 4571 4588 4587 4859 4860 4877 4876 + 4571 4572 4589 4588 4860 4861 4878 4877 + 4572 4573 4590 4589 4861 4862 4879 4878 + 4574 4575 4592 4591 4863 4864 4881 4880 + 4575 4576 4593 4592 4864 4865 4882 4881 + 4576 4577 4594 4593 4865 4866 4883 4882 + 4577 4578 4595 4594 4866 4867 4884 4883 + 4578 4579 4596 4595 4867 4868 4885 4884 + 4579 4580 4597 4596 4868 4869 4886 4885 + 4580 4581 4598 4597 4869 4870 4887 4886 + 4581 4582 4599 4598 4870 4871 4888 4887 + 4582 4583 4600 4599 4871 4872 4889 4888 + 4583 4584 4601 4600 4872 4873 4890 4889 + 4584 4585 4602 4601 4873 4874 4891 4890 + 4585 4586 4603 4602 4874 4875 4892 4891 + 4586 4587 4604 4603 4875 4876 4893 4892 + 4587 4588 4605 4604 4876 4877 4894 4893 + 4588 4589 4606 4605 4877 4878 4895 4894 + 4589 4590 4607 4606 4878 4879 4896 4895 + 4591 4592 4609 4608 4880 4881 4898 4897 + 4592 4593 4610 4609 4881 4882 4899 4898 + 4593 4594 4611 4610 4882 4883 4900 4899 + 4594 4595 4612 4611 4883 4884 4901 4900 + 4595 4596 4613 4612 4884 4885 4902 4901 + 4596 4597 4614 4613 4885 4886 4903 4902 + 4597 4598 4615 4614 4886 4887 4904 4903 + 4598 4599 4616 4615 4887 4888 4905 4904 + 4599 4600 4617 4616 4888 4889 4906 4905 + 4600 4601 4618 4617 4889 4890 4907 4906 + 4601 4602 4619 4618 4890 4891 4908 4907 + 4602 4603 4620 4619 4891 4892 4909 4908 + 4603 4604 4621 4620 4892 4893 4910 4909 + 4604 4605 4622 4621 4893 4894 4911 4910 + 4605 4606 4623 4622 4894 4895 4912 4911 + 4606 4607 4624 4623 4895 4896 4913 4912 diff --git a/single-node-refactor/regression_tests/standard_results/Sedov_Read_Ensight/state/mat_pt_state_t_1.0000e+00.txt b/single-node-refactor/regression_tests/standard_results/Sedov_Read_Ensight/state/mat_pt_state_t_1.0000e+00.txt new file mode 100644 index 000000000..0bf5cc9fe --- /dev/null +++ b/single-node-refactor/regression_tests/standard_results/Sedov_Read_Ensight/state/mat_pt_state_t_1.0000e+00.txt @@ -0,0 +1,4098 @@ +# state dump file +# x y z radius_2D radius_3D den pres sie sspd vol mass +1.717681365521e-01 1.717681365521e-01 1.717681365521e-01 2.429168282955e-01 2.975111396297e-01 1.081758982789e-02 3.737278864936e-02 5.182224863946e+00 2.399589053694e+00 3.899898283373e-02 4.218750000000e-04 +4.055062932508e-01 1.266898790538e-01 1.266898790538e-01 4.248360616999e-01 4.433238148073e-01 6.365290081693e-02 3.726183719198e-02 8.780865454776e-01 9.877508376090e-01 6.627741934548e-03 4.218750000000e-04 +4.987160449565e-01 9.287007960711e-02 9.287007960711e-02 5.072894096896e-01 5.157202699812e-01 2.050452519898e-01 3.826622189108e-02 2.799349523074e-01 5.577085582068e-01 2.057472659845e-03 4.218750000000e-04 +5.552469511893e-01 7.396085053276e-02 7.396085053276e-02 5.601512154914e-01 5.650129127976e-01 3.910858591352e-01 4.010146816322e-02 1.538081749564e-01 4.133980795477e-01 1.078727318172e-03 4.218750000000e-04 +6.032602598474e-01 6.193828463115e-02 6.193828463115e-02 6.064316055535e-01 6.095864527016e-01 6.126856345665e-01 4.294268987497e-02 1.051339074696e-01 3.417827566510e-01 6.885668215455e-04 4.218750000000e-04 +6.461867329303e-01 5.421361881294e-02 5.421361881294e-02 6.484569455869e-01 6.507192380318e-01 8.954535007798e-01 4.861241610130e-02 8.143206106007e-02 3.007990489422e-01 4.711299912643e-04 4.218750000000e-04 +6.842855824350e-01 4.895116532488e-02 4.895116532488e-02 6.860342374219e-01 6.877784465231e-01 1.237798726193e+00 5.461859201229e-02 6.618837641757e-02 2.711874636925e-01 3.408268170526e-04 4.218750000000e-04 +7.169509609813e-01 4.513448200408e-02 4.513448200408e-02 7.183702401393e-01 7.197867207608e-01 1.764367867498e+00 6.775387438503e-02 5.760182638198e-02 2.529862235643e-01 2.391082992224e-04 4.218750000000e-04 +7.440808850441e-01 4.210039745389e-02 4.210039745389e-02 7.452709621029e-01 7.464591418286e-01 2.424554873156e+00 8.166504832773e-02 5.052373689203e-02 2.369335042487e-01 1.740010113489e-04 4.218750000000e-04 +7.672810291516e-01 3.960576492450e-02 3.960576492450e-02 7.683025408725e-01 7.693226962247e-01 3.119099760374e+00 8.971756034856e-02 4.314589171932e-02 2.189517748001e-01 1.352553725147e-04 4.218750000000e-04 +8.026205045019e-01 3.802378088111e-02 3.802378088111e-02 8.035206793602e-01 8.044198468909e-01 1.489573987084e+00 6.676759301296e-03 6.723492111693e-03 8.643232491823e-02 2.832185602447e-04 4.218750000000e-04 +8.635638511212e-01 3.753257489503e-02 3.753257489503e-02 8.643790945769e-01 8.651935698558e-01 1.027166444206e+00 6.824622705535e-06 9.966188163612e-06 3.327693255697e-03 4.107172721420e-04 4.218750000000e-04 +9.375044053516e-01 3.750009902818e-02 3.750009902818e-02 9.382541060293e-01 9.390032081457e-01 1.000112204375e+00 1.738669477317e-12 2.607711619322e-12 1.702191926547e-06 4.218276690899e-04 4.218750000000e-04 +1.012500000064e+00 3.750000000091e-02 3.750000000091e-02 1.013194206522e+00 1.013887937659e+00 1.000000001663e+00 6.666666685587e-15 1.000000001175e-14 1.054092554009e-07 4.218749992984e-04 4.218750000000e-04 +1.087500000000e+00 3.750000000000e-02 3.750000000000e-02 1.088146359641e+00 1.088792335572e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 3.750000000000e-02 3.750000000000e-02 1.163104681445e+00 1.163709048689e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.266898790538e-01 4.055062932508e-01 1.266898790538e-01 4.248360616999e-01 4.433238148073e-01 6.365290081693e-02 3.726183719198e-02 8.780865454776e-01 9.877508376090e-01 6.627741934548e-03 4.218750000000e-04 +3.386927717978e-01 3.386927717978e-01 1.109692981982e-01 4.789839113542e-01 4.916703900773e-01 8.821553842422e-02 3.789152043562e-02 6.443001048194e-01 8.461022428495e-01 4.782320751376e-03 4.218750000000e-04 +4.681902577391e-01 2.679769788166e-01 8.977377330050e-02 5.394569293442e-01 5.468757710761e-01 2.097728791291e-01 3.830482617702e-02 2.739021340798e-01 5.516662981669e-01 2.011103636235e-03 4.218750000000e-04 +5.412675823576e-01 2.171726577813e-01 7.268733309838e-02 5.832105614605e-01 5.877227300284e-01 4.109246309970e-01 4.041942818801e-02 1.475432176818e-01 4.048912304995e-01 1.026648120305e-03 4.218750000000e-04 +5.942484715349e-01 1.836545072027e-01 6.126162932497e-02 6.219808871158e-01 6.249905688608e-01 6.425571785475e-01 4.371122603501e-02 1.020404739711e-01 3.367169499926e-01 6.565563565154e-04 4.218750000000e-04 +6.391858186493e-01 1.612524738038e-01 5.378569813346e-02 6.592123110730e-01 6.614028820575e-01 9.349323386071e-01 4.905164748678e-02 7.869817760265e-02 2.957066444274e-01 4.512358622962e-04 4.218750000000e-04 +6.781511051953e-01 1.458882362481e-01 4.864214716210e-02 6.936658409877e-01 6.953692238183e-01 1.295854622235e+00 5.560295412388e-02 6.436249078773e-02 2.674207894930e-01 3.255573524695e-04 4.218750000000e-04 +7.110757175816e-01 1.345999256523e-01 4.486890944866e-02 7.237028507059e-01 7.250924321457e-01 1.858414552015e+00 7.006124491424e-02 5.654920601940e-02 2.506640204191e-01 2.270080158071e-04 4.218750000000e-04 +7.384639956202e-01 1.256200074540e-01 4.186955793615e-02 7.490723991045e-01 7.502416403945e-01 2.507811435527e+00 8.202572059914e-02 4.906213408061e-02 2.334812247522e-01 1.682243704704e-04 4.218750000000e-04 +7.627706410319e-01 1.183239484904e-01 3.943674509720e-02 7.718935208995e-01 7.729002940034e-01 2.993948406346e+00 7.965239082298e-02 3.990669511246e-02 2.105724871563e-01 1.409092418245e-04 4.218750000000e-04 +8.005920524102e-01 1.138683852438e-01 3.795483461785e-02 8.086492710319e-01 8.095395067637e-01 1.410681303046e+00 4.736183526788e-03 5.036059721526e-03 7.480388969035e-02 2.990576249143e-04 4.218750000000e-04 +8.633463760082e-01 1.125775062396e-01 3.752580000480e-02 8.706553048582e-01 8.714636226164e-01 1.021885614085e+00 4.127247548338e-06 6.058282098480e-06 2.594498902267e-03 4.128397485834e-04 4.218750000000e-04 +9.375031459148e-01 1.125002124347e-01 3.750007034088e-02 9.442290222176e-01 9.449733867542e-01 1.000081636658e+00 8.739736842992e-13 1.310853512749e-12 1.206857035052e-06 4.218405623461e-04 4.218750000000e-04 +1.012500000042e+00 1.125000000018e-01 3.750000000059e-02 1.018730828082e+00 1.019420791472e+00 1.000000001097e+00 6.666666679035e-15 1.000000000758e-14 1.054092553789e-07 4.218749995370e-04 4.218750000000e-04 +1.087500000000e+00 1.125000000000e-01 3.750000000000e-02 1.093303480283e+00 1.093946410936e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 1.125000000000e-01 3.750000000000e-02 1.167930862680e+00 1.168532733816e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +9.287007960711e-02 4.987160449565e-01 9.287007960711e-02 5.072894096896e-01 5.157202699812e-01 2.050452519898e-01 3.826622189108e-02 2.799349523074e-01 5.577085582068e-01 2.057472659845e-03 4.218750000000e-04 +2.679769788166e-01 4.681902577391e-01 8.977377330050e-02 5.394569293442e-01 5.468757710761e-01 2.097728791291e-01 3.830482617702e-02 2.739021340798e-01 5.516662981669e-01 2.011103636235e-03 4.218750000000e-04 +4.107215318056e-01 4.107215318056e-01 8.116700006499e-02 5.808479606381e-01 5.864916327425e-01 2.624613868136e-01 3.954369470601e-02 2.259972134535e-01 5.011067899643e-01 1.607379299187e-03 4.218750000000e-04 +5.091463904947e-01 3.485910661996e-01 6.989623459320e-02 6.170460099441e-01 6.209921593694e-01 4.442264927491e-01 4.054572281985e-02 1.369089534787e-01 3.900269983228e-01 9.496844670141e-04 4.218750000000e-04 +5.742634567455e-01 2.992782326149e-01 6.000582452885e-02 6.475692845328e-01 6.503435071158e-01 7.091590976384e-01 4.458727378093e-02 9.431016381813e-02 3.237114006473e-01 5.948947160163e-04 4.218750000000e-04 +6.238962233680e-01 2.646200229795e-01 5.295884217948e-02 6.776948089623e-01 6.797609087462e-01 1.008716087860e+00 4.896241459026e-02 7.280901213858e-02 2.844273235401e-01 4.182296734208e-04 4.218750000000e-04 +6.650434377606e-01 2.400644141640e-01 4.801636952264e-02 7.070457531563e-01 7.086743037521e-01 1.417815253743e+00 5.736395288813e-02 6.068909831873e-02 2.596773603248e-01 2.975528714946e-04 4.218750000000e-04 +6.990695284168e-01 2.217460791982e-01 4.433717608044e-02 7.333958884536e-01 7.347348599212e-01 2.006739392721e+00 7.134601473567e-02 5.332980579923e-02 2.434241971886e-01 2.102290917945e-04 4.218750000000e-04 +7.273349024846e-01 2.071354663353e-01 4.141271943991e-02 7.562546937284e-01 7.573877310319e-01 2.698142302634e+00 8.347627423107e-02 4.640763803465e-02 2.270771724783e-01 1.563575796533e-04 4.218750000000e-04 +7.542694714971e-01 1.956325809298e-01 3.911709259872e-02 7.792268875968e-01 7.802081063968e-01 2.655364825736e+00 5.706476336929e-02 3.223554979125e-02 1.892545311105e-01 1.588764737377e-04 4.218750000000e-04 +7.971472633109e-01 1.891952562990e-01 3.783683667367e-02 8.192915258992e-01 8.201647582161e-01 1.289745217446e+00 2.313266682337e-03 2.690376344545e-03 5.467455577775e-02 3.270994877852e-04 4.218750000000e-04 +8.630236485609e-01 1.875794452057e-01 3.751581324251e-02 8.831737463484e-01 8.839701932092e-01 1.013940257291e+00 1.390035593179e-06 2.056386828292e-06 1.511580052018e-03 4.160748100950e-04 4.218750000000e-04 +9.375015694569e-01 1.875001773281e-01 3.750003471599e-02 9.560677325547e-01 9.568028855705e-01 1.000042246986e+00 1.726535111232e-13 2.589693260112e-13 5.364174638917e-07 4.218571778056e-04 4.218750000000e-04 +1.012500000017e+00 1.875000000013e-01 3.750000000024e-02 1.029714766348e+00 1.030397374820e+00 1.000000000461e+00 6.666666671804e-15 1.000000000310e-14 1.054092553553e-07 4.218749998056e-04 4.218750000000e-04 +1.087500000000e+00 1.875000000000e-01 3.750000000000e-02 1.103545422717e+00 1.104182389825e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 1.875000000000e-01 3.750000000000e-02 1.177523885108e+00 1.178120855430e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +7.396085053276e-02 5.552469511893e-01 7.396085053276e-02 5.601512154914e-01 5.650129127976e-01 3.910858591352e-01 4.010146816322e-02 1.538081749564e-01 4.133980795477e-01 1.078727318172e-03 4.218750000000e-04 +2.171726577813e-01 5.412675823576e-01 7.268733309838e-02 5.832105614605e-01 5.877227300284e-01 4.109246309970e-01 4.041942818801e-02 1.475432176818e-01 4.048912304995e-01 1.026648120305e-03 4.218750000000e-04 +3.485910661996e-01 5.091463904947e-01 6.989623459320e-02 6.170460099441e-01 6.209921593694e-01 4.442264927491e-01 4.054572281985e-02 1.369089534787e-01 3.900269983228e-01 9.496844670141e-04 4.218750000000e-04 +4.591222156146e-01 4.591222156146e-01 6.459115467971e-02 6.492968641090e-01 6.525016743309e-01 5.423183923425e-01 4.315156542232e-02 1.193530388189e-01 3.641627212890e-01 7.779101833108e-04 4.218750000000e-04 +5.408108798203e-01 4.055733401327e-01 5.781882147404e-02 6.759927085098e-01 6.784608743878e-01 7.889555482479e-01 4.463294934452e-02 8.485829672592e-02 3.070618770902e-01 5.347259436060e-04 4.218750000000e-04 +5.993069122229e-01 3.618973716526e-01 5.169676168712e-02 7.000989091887e-01 7.020050126716e-01 1.133544541703e+00 4.985736442077e-02 6.597539300821e-02 2.707507935932e-01 3.721732887234e-04 4.218750000000e-04 +6.445175833589e-01 3.296369078171e-01 4.705717467082e-02 7.239222377121e-01 7.254500561321e-01 1.603878786859e+00 5.995818503914e-02 5.607485945670e-02 2.496104953650e-01 2.630342164610e-04 4.218750000000e-04 +6.809935872489e-01 3.050697664849e-01 4.354436998050e-02 7.462036104826e-01 7.474730366068e-01 2.200951549904e+00 7.158364248335e-02 4.878592794543e-02 2.328230800544e-01 1.916784583551e-04 4.218750000000e-04 +7.112162275495e-01 2.854553980787e-01 4.075020635208e-02 7.663636908296e-01 7.674463407560e-01 2.915324375055e+00 8.301693616749e-02 4.271408194462e-02 2.178533705261e-01 1.447094544984e-04 4.218750000000e-04 +7.431086253506e-01 2.709557351650e-01 3.869519734009e-02 7.909661430739e-01 7.919120896832e-01 2.138716094527e+00 2.986801847413e-02 2.094809489948e-02 1.525636293466e-01 1.972561954714e-04 4.218750000000e-04 +7.933483988505e-01 2.639521847021e-01 3.770536386587e-02 8.361055183215e-01 8.369552749293e-01 1.170935687426e+00 7.354696105387e-04 9.421562837779e-04 3.235491176481e-02 3.602887883001e-04 4.218750000000e-04 +8.627415290194e-01 2.625508987690e-01 3.750718541688e-02 9.018070305443e-01 9.025866768888e-01 1.006752676412e+00 2.165422966309e-07 3.226347965658e-07 5.987345883572e-04 4.190453225348e-04 4.218750000000e-04 +9.375005209301e-01 2.625000831528e-01 3.750001133441e-02 9.735571479885e-01 9.742791033628e-01 1.000014780974e+00 1.612223097348e-14 2.418298901210e-14 1.639206753013e-07 4.218687643689e-04 4.218750000000e-04 +1.012500000004e+00 2.625000000004e-01 3.750000000006e-02 1.045974426078e+00 1.046646430275e+00 1.000000000113e+00 6.666666667919e-15 1.000000000075e-14 1.054092553429e-07 4.218749999525e-04 4.218750000000e-04 +1.087500000000e+00 2.625000000000e-01 3.750000000000e-02 1.118732541763e+00 1.119360866745e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 2.625000000000e-01 3.750000000000e-02 1.191768643655e+00 1.192358482169e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +6.193828463115e-02 6.032602598474e-01 6.193828463115e-02 6.064316055535e-01 6.095864527016e-01 6.126856345665e-01 4.294268987497e-02 1.051339074696e-01 3.417827566510e-01 6.885668215455e-04 4.218750000000e-04 +1.836545072027e-01 5.942484715349e-01 6.126162932497e-02 6.219808871158e-01 6.249905688608e-01 6.425571785475e-01 4.371122603501e-02 1.020404739711e-01 3.367169499926e-01 6.565563565154e-04 4.218750000000e-04 +2.992782326149e-01 5.742634567455e-01 6.000582452885e-02 6.475692845328e-01 6.503435071158e-01 7.091590976384e-01 4.458727378093e-02 9.431016381813e-02 3.237114006473e-01 5.948947160163e-04 4.218750000000e-04 +4.055733401327e-01 5.408108798203e-01 5.781882147404e-02 6.759927085098e-01 6.784608743878e-01 7.889555482479e-01 4.463294934452e-02 8.485829672592e-02 3.070618770902e-01 5.347259436060e-04 4.218750000000e-04 +4.963253975895e-01 4.963253975895e-01 5.423671680445e-02 7.019101086213e-01 7.040024304180e-01 9.486544601522e-01 4.789004113598e-02 7.572310543129e-02 2.900634134332e-01 4.447088141369e-04 4.218750000000e-04 +5.657728051732e-01 4.506075785757e-01 4.982685275908e-02 7.232883636167e-01 7.250026015120e-01 1.305956537856e+00 5.183476419406e-02 5.953654967624e-02 2.571997703391e-01 3.230390811416e-04 4.218750000000e-04 +6.172337279524e-01 4.126117817726e-01 4.575823828388e-02 7.424459289265e-01 7.438546724666e-01 1.829077450959e+00 6.167930921681e-02 5.058231064884e-02 2.370708066962e-01 2.306490628807e-04 4.218750000000e-04 +6.575055945350e-01 3.830513630670e-01 4.249388302699e-02 7.609480623487e-01 7.621336389945e-01 2.478981883679e+00 7.297880692202e-02 4.415853585044e-02 2.215062975037e-01 1.701807515325e-04 4.218750000000e-04 +6.915076031792e-01 3.597393766194e-01 3.993096897254e-02 7.794839218003e-01 7.805060324099e-01 2.813321233438e+00 6.626973211795e-02 3.533353994398e-02 1.981400737525e-01 1.499562136687e-04 4.218750000000e-04 +7.314659404519e-01 3.443799375810e-01 3.825094752410e-02 8.084800328081e-01 8.093843947322e-01 1.644684811242e+00 1.063863261206e-02 9.702739886093e-03 1.038307377209e-01 2.565081145739e-04 4.218750000000e-04 +7.902669681370e-01 3.383909790227e-01 3.759760278757e-02 8.596687359748e-01 8.604905085751e-01 1.081957932813e+00 1.321518161540e-04 1.832120438506e-04 1.426775867513e-02 3.899181171520e-04 4.218750000000e-04 +8.625781317715e-01 3.375210140878e-01 3.750227592491e-02 9.262620948529e-01 9.270209755236e-01 1.002336410674e+00 1.226886366941e-08 1.836039807407e-08 1.428301169380e-04 4.208916243162e-04 4.218750000000e-04 +9.375001051632e-01 3.375000219852e-01 3.750000223625e-02 9.963998755626e-01 9.971052914255e-01 1.000003184102e+00 6.793519582755e-15 1.019024692734e-14 1.064072205536e-07 4.218736567111e-04 4.218750000000e-04 +1.012500000000e+00 3.375000000001e-01 3.750000000001e-02 1.067268710307e+00 1.067927314943e+00 1.000000000013e+00 6.666666666816e-15 1.000000000009e-14 1.054092553394e-07 4.218749999943e-04 4.218750000000e-04 +1.087500000000e+00 3.375000000000e-01 3.750000000000e-02 1.138666983802e+00 1.139284314822e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 3.375000000000e-01 3.750000000000e-02 1.210500929368e+00 1.211081644647e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +5.421361881294e-02 6.461867329303e-01 5.421361881294e-02 6.484569455869e-01 6.507192380318e-01 8.954535007798e-01 4.861241610130e-02 8.143206106007e-02 3.007990489422e-01 4.711299912644e-04 4.218750000000e-04 +1.612524738038e-01 6.391858186493e-01 5.378569813346e-02 6.592123110730e-01 6.614028820575e-01 9.349323386071e-01 4.905164748678e-02 7.869817760265e-02 2.957066444274e-01 4.512358622962e-04 4.218750000000e-04 +2.646200229795e-01 6.238962233680e-01 5.295884217948e-02 6.776948089623e-01 6.797609087462e-01 1.008716087860e+00 4.896241459026e-02 7.280901213858e-02 2.844273235401e-01 4.182296734208e-04 4.218750000000e-04 +3.618973716526e-01 5.993069122229e-01 5.169676168712e-02 7.000989091887e-01 7.020050126716e-01 1.133544541703e+00 4.985736442077e-02 6.597539300821e-02 2.707507935932e-01 3.721732887234e-04 4.218750000000e-04 +4.506075785757e-01 5.657728051732e-01 4.982685275908e-02 7.232883636167e-01 7.250026015120e-01 1.305956537856e+00 5.183476419406e-02 5.953654967624e-02 2.571997703391e-01 3.230390811416e-04 4.218750000000e-04 +5.261994080644e-01 5.261994080644e-01 4.716591662602e-02 7.441583393974e-01 7.456515659381e-01 1.610380054664e+00 5.899580018193e-02 5.495205930836e-02 2.470988540563e-01 2.619723206197e-04 4.218750000000e-04 +5.850085817363e-01 4.872224957326e-01 4.406778420106e-02 7.613283135764e-01 7.626026295899e-01 2.111981863191e+00 6.337257513101e-02 4.500931771871e-02 2.236299466100e-01 1.997531358355e-04 4.218750000000e-04 +6.302267016484e-01 4.544151095583e-01 4.121521519348e-02 7.769676874012e-01 7.780600755912e-01 2.731134135709e+00 7.050526147053e-02 3.872306776260e-02 2.074262057873e-01 1.544687953931e-04 4.218750000000e-04 +6.709987813268e-01 4.300716862624e-01 3.905568941958e-02 7.969949936271e-01 7.979513561256e-01 2.209199968700e+00 3.209784976778e-02 2.179376033578e-02 1.556126256509e-01 1.909627946664e-04 4.218750000000e-04 +7.218042618608e-01 4.167483580164e-01 3.787627058304e-02 8.334750064337e-01 8.343351833784e-01 1.301553777305e+00 2.364527344050e-03 2.725043773003e-03 5.502568867763e-02 3.241318240983e-04 4.218750000000e-04 +7.884478061942e-01 4.128762135480e-01 3.753345513575e-02 8.900093880438e-01 8.908004664685e-01 1.029839169949e+00 1.008997661345e-05 1.469643548412e-05 4.040961860762e-03 4.096513439288e-04 4.218750000000e-04 +8.625161835933e-01 4.125053153564e-01 3.750045874774e-02 9.560830519142e-01 9.568182097786e-01 1.000524175313e+00 1.936005094562e-10 2.902486230215e-10 1.795824239796e-05 4.216539793934e-04 4.218750000000e-04 +9.375000109980e-01 4.125000029067e-01 3.750000022638e-02 1.024237532518e+00 1.024923788892e+00 1.000000356604e+00 6.666928772152e-15 1.000038959205e-14 1.054113086493e-07 4.218748495577e-04 4.218750000000e-04 +1.012500000000e+00 4.125000000000e-01 3.750000000000e-02 1.093303480284e+00 1.093946410936e+00 1.000000000001e+00 6.666666666673e-15 1.000000000000e-14 1.054092553390e-07 4.218749999997e-04 4.218750000000e-04 +1.087500000000e+00 4.125000000000e-01 3.750000000000e-02 1.163104681445e+00 1.163709048689e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 4.125000000000e-01 3.750000000000e-02 1.233516315255e+00 1.234086200393e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +4.895116532488e-02 6.842855824350e-01 4.895116532488e-02 6.860342374219e-01 6.877784465231e-01 1.237798726193e+00 5.461859201229e-02 6.618837641757e-02 2.711874636925e-01 3.408268170526e-04 4.218750000000e-04 +1.458882362481e-01 6.781511051953e-01 4.864214716210e-02 6.936658409877e-01 6.953692238183e-01 1.295854622235e+00 5.560295412388e-02 6.436249078773e-02 2.674207894930e-01 3.255573524695e-04 4.218750000000e-04 +2.400644141640e-01 6.650434377606e-01 4.801636952264e-02 7.070457531563e-01 7.086743037521e-01 1.417815253743e+00 5.736395288813e-02 6.068909831873e-02 2.596773603248e-01 2.975528714946e-04 4.218750000000e-04 +3.296369078171e-01 6.445175833589e-01 4.705717467082e-02 7.239222377121e-01 7.254500561321e-01 1.603878786859e+00 5.995818503914e-02 5.607485945670e-02 2.496104953650e-01 2.630342164611e-04 4.218750000000e-04 +4.126117817726e-01 6.172337279524e-01 4.575823828388e-02 7.424459289265e-01 7.438546724666e-01 1.829077450959e+00 6.167930921681e-02 5.058231064884e-02 2.370708066962e-01 2.306490628807e-04 4.218750000000e-04 +4.872224957326e-01 5.850085817363e-01 4.406778420106e-02 7.613283135764e-01 7.626026295899e-01 2.111981863191e+00 6.337257513101e-02 4.500931771871e-02 2.236299466100e-01 1.997531358355e-04 4.218750000000e-04 +5.505180377070e-01 5.505180377070e-01 4.196471757961e-02 7.785500752562e-01 7.796802275311e-01 2.556052375256e+00 7.026524771347e-02 4.123462906727e-02 2.140473184116e-01 1.650494348567e-04 4.218750000000e-04 +6.025277972385e-01 5.191738187653e-01 3.981352251202e-02 7.953497347309e-01 7.963456015520e-01 2.436429559217e+00 4.532068219433e-02 2.790190384710e-02 1.760741758057e-01 1.731529641003e-04 4.218750000000e-04 +6.537006292023e-01 4.981156783101e-01 3.828380869224e-02 8.218538444260e-01 8.227450343854e-01 1.577187787922e+00 8.285077009071e-03 7.879604197279e-03 9.356877563992e-02 2.674855862001e-04 4.218750000000e-04 +7.157802520178e-01 4.893344268646e-01 3.763632694686e-02 8.670579856582e-01 8.678744399967e-01 1.110722269674e+00 2.481909221547e-04 3.351750418595e-04 1.929810128425e-02 3.798204209266e-04 4.218750000000e-04 +7.877115061338e-01 4.876003034451e-01 3.750741438121e-02 9.264143094832e-01 9.271732734224e-01 1.007353107040e+00 2.374385177664e-07 3.535580266348e-07 6.267712914743e-04 4.187955514820e-04 4.218750000000e-04 +8.625018457296e-01 4.875007285973e-01 3.750005051533e-02 9.907403263569e-01 9.914497708197e-01 1.000065018012e+00 5.280092662219e-13 7.919624075117e-13 9.380608885188e-07 4.218475723096e-04 4.218750000000e-04 +9.375000004791e-01 4.875000001553e-01 3.750000000932e-02 1.056675210767e+00 1.057340413987e+00 1.000000016536e+00 6.666666945465e-15 1.000000025284e-14 1.054092566715e-07 4.218749930240e-04 4.218750000000e-04 +1.012500000000e+00 4.875000000000e-01 3.750000000000e-02 1.123749304783e+00 1.124374826292e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 4.875000000000e-01 3.750000000000e-02 1.191768643655e+00 1.192358482169e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 4.875000000000e-01 3.750000000000e-02 1.260580223548e+00 1.261137879060e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +4.513448200408e-02 7.169509609813e-01 4.513448200408e-02 7.183702401393e-01 7.197867207608e-01 1.764367867498e+00 6.775387438503e-02 5.760182638198e-02 2.529862235643e-01 2.391082992224e-04 4.218750000000e-04 +1.345999256523e-01 7.110757175816e-01 4.486890944866e-02 7.237028507059e-01 7.250924321457e-01 1.858414552015e+00 7.006124491424e-02 5.654920601940e-02 2.506640204191e-01 2.270080158071e-04 4.218750000000e-04 +2.217460791982e-01 6.990695284168e-01 4.433717608044e-02 7.333958884536e-01 7.347348599212e-01 2.006739392721e+00 7.134601473567e-02 5.332980579923e-02 2.434241971886e-01 2.102290917945e-04 4.218750000000e-04 +3.050697664849e-01 6.809935872489e-01 4.354436998050e-02 7.462036104826e-01 7.474730366068e-01 2.200951549904e+00 7.158364248335e-02 4.878592794543e-02 2.328230800544e-01 1.916784583551e-04 4.218750000000e-04 +3.830513630670e-01 6.575055945350e-01 4.249388302699e-02 7.609480623487e-01 7.621336389945e-01 2.478981883679e+00 7.297880692202e-02 4.415853585044e-02 2.215062975037e-01 1.701807515325e-04 4.218750000000e-04 +4.544151095583e-01 6.302267016484e-01 4.121521519348e-02 7.769676874012e-01 7.780600755912e-01 2.731134135709e+00 7.050526147053e-02 3.872306776260e-02 2.074262057873e-01 1.544687953931e-04 4.218750000000e-04 +5.191738187653e-01 6.025277972385e-01 3.981352251202e-02 7.953497347309e-01 7.963456015520e-01 2.436429559217e+00 4.532068219433e-02 2.790190384710e-02 1.760741758057e-01 1.731529641003e-04 4.218750000000e-04 +5.797054107162e-01 5.797054107162e-01 3.854269830406e-02 8.198272540159e-01 8.207327616342e-01 1.733912851847e+00 1.351265875909e-02 1.168973868384e-02 1.139675328223e-01 2.433080760378e-04 4.218750000000e-04 +6.428822216772e-01 5.668623169978e-01 3.777266014672e-02 8.571058495780e-01 8.579377665282e-01 1.203801115032e+00 9.675869812686e-04 1.205664668174e-03 3.660092087752e-02 3.504524084019e-04 4.218750000000e-04 +7.132232051411e-01 5.629871961948e-01 3.753080899086e-02 9.086484047370e-01 9.094231606104e-01 1.027543454990e+00 7.170579865100e-06 1.046755710955e-05 3.410369336393e-03 4.105665779401e-04 4.218750000000e-04 +7.875255447675e-01 5.625143537242e-01 3.750088041264e-02 9.677907221125e-01 9.685170095764e-01 1.000992998832e+00 9.396318024873e-10 1.408049512210e-09 3.955375403184e-05 4.214564941937e-04 4.218750000000e-04 +8.625000919329e-01 5.625000431803e-01 3.750000237896e-02 1.029714866923e+00 1.030397475414e+00 1.000003498748e+00 6.782872759171e-15 1.017427354154e-14 1.063237902799e-07 4.218735239709e-04 4.218750000000e-04 +9.375000000064e-01 5.625000000025e-01 3.750000000012e-02 1.093303480290e+00 1.093946410943e+00 1.000000000234e+00 6.666666669270e-15 1.000000000156e-14 1.054092553472e-07 4.218749999012e-04 4.218750000000e-04 +1.012500000000e+00 5.625000000000e-01 3.750000000000e-02 1.158258390861e+00 1.158865285527e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 5.625000000000e-01 3.750000000000e-02 1.224362078799e+00 1.224936222830e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 5.625000000000e-01 3.750000000000e-02 1.291438151829e+00 1.291982488271e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +4.210039745389e-02 7.440808850441e-01 4.210039745389e-02 7.452709621029e-01 7.464591418286e-01 2.424554873156e+00 8.166504832773e-02 5.052373689203e-02 2.369335042487e-01 1.740010113489e-04 4.218750000000e-04 +1.256200074540e-01 7.384639956202e-01 4.186955793615e-02 7.490723991045e-01 7.502416403945e-01 2.507811435527e+00 8.202572059914e-02 4.906213408061e-02 2.334812247522e-01 1.682243704704e-04 4.218750000000e-04 +2.071354663353e-01 7.273349024846e-01 4.141271943991e-02 7.562546937284e-01 7.573877310319e-01 2.698142302634e+00 8.347627423107e-02 4.640763803465e-02 2.270771724783e-01 1.563575796533e-04 4.218750000000e-04 +2.854553980787e-01 7.112162275495e-01 4.075020635208e-02 7.663636908296e-01 7.674463407560e-01 2.915324375055e+00 8.301693616749e-02 4.271408194462e-02 2.178533705261e-01 1.447094544984e-04 4.218750000000e-04 +3.597393766194e-01 6.915076031792e-01 3.993096897254e-02 7.794839218003e-01 7.805060324099e-01 2.813321233438e+00 6.626973211795e-02 3.533353994398e-02 1.981400737525e-01 1.499562136687e-04 4.218750000000e-04 +4.300716862624e-01 6.709987813268e-01 3.905568941958e-02 7.969949936271e-01 7.979513561256e-01 2.209199968700e+00 3.209784976778e-02 2.179376033578e-02 1.556126256509e-01 1.909627946664e-04 4.218750000000e-04 +4.981156783101e-01 6.537006292023e-01 3.828380869224e-02 8.218538444260e-01 8.227450343854e-01 1.577187787922e+00 8.285077009071e-03 7.879604197279e-03 9.356877563992e-02 2.674855862001e-04 4.218750000000e-04 +5.668623169978e-01 6.428822216772e-01 3.777266014672e-02 8.571058495780e-01 8.579377665282e-01 1.203801115032e+00 9.675869812686e-04 1.205664668174e-03 3.660092087752e-02 3.504524084019e-04 4.218750000000e-04 +6.384977408779e-01 6.384977408779e-01 3.755278979645e-02 9.029721646941e-01 9.037526997104e-01 1.045446311394e+00 2.588080600519e-05 3.713362282185e-05 6.423362119106e-03 4.035357869670e-04 4.218750000000e-04 +7.125804887170e-01 6.375653742222e-01 3.750345727864e-02 9.561697335239e-01 9.569049423088e-01 1.003593053850e+00 2.960353258489e-08 4.424631946879e-08 2.217263565469e-04 4.203646073290e-04 4.218750000000e-04 +7.875012392764e-01 6.375008302832e-01 3.750004106526e-02 1.013195692092e+00 1.013889423731e+00 1.000053345394e+00 2.331979512473e-13 3.497782678114e-13 6.234119984332e-07 4.218524961123e-04 4.218750000000e-04 +8.625000013631e-01 6.375000007617e-01 3.750000003292e-02 1.072526225005e+00 1.073181603143e+00 1.000000055663e+00 6.666668566464e-15 1.000000229306e-14 1.054092674245e-07 4.218749765171e-04 4.218750000000e-04 +9.375000000000e-01 6.375000000000e-01 3.750000000000e-02 1.133716234337e+00 1.134336259669e+00 1.000000000001e+00 6.666666666674e-15 1.000000000000e-14 1.054092553390e-07 4.218749999997e-04 4.218750000000e-04 +1.012500000000e+00 6.375000000000e-01 3.750000000000e-02 1.196479210016e+00 1.197066727463e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 6.375000000000e-01 3.750000000000e-02 1.260580223548e+00 1.261137879060e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 6.375000000000e-01 3.750000000000e-02 1.325825214725e+00 1.326355438787e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.960576492450e-02 7.672810291516e-01 3.960576492450e-02 7.683025408725e-01 7.693226962247e-01 3.119099760374e+00 8.971756034856e-02 4.314589171932e-02 2.189517748001e-01 1.352553725147e-04 4.218750000000e-04 +1.183239484904e-01 7.627706410319e-01 3.943674509720e-02 7.718935208995e-01 7.729002940034e-01 2.993948406346e+00 7.965239082298e-02 3.990669511246e-02 2.105724871563e-01 1.409092418245e-04 4.218750000000e-04 +1.956325809298e-01 7.542694714971e-01 3.911709259872e-02 7.792268875968e-01 7.802081063968e-01 2.655364825735e+00 5.706476336929e-02 3.223554979125e-02 1.892545311105e-01 1.588764737377e-04 4.218750000000e-04 +2.709557351650e-01 7.431086253506e-01 3.869519734009e-02 7.909661430739e-01 7.919120896832e-01 2.138716094527e+00 2.986801847413e-02 2.094809489948e-02 1.525636293466e-01 1.972561954714e-04 4.218750000000e-04 +3.443799375810e-01 7.314659404519e-01 3.825094752410e-02 8.084800328081e-01 8.093843947322e-01 1.644684811242e+00 1.063863261206e-02 9.702739886093e-03 1.038307377209e-01 2.565081145739e-04 4.218750000000e-04 +4.167483580164e-01 7.218042618608e-01 3.787627058304e-02 8.334750064337e-01 8.343351833784e-01 1.301553777305e+00 2.364527344050e-03 2.725043773003e-03 5.502568867763e-02 3.241318240983e-04 4.218750000000e-04 +4.893344268646e-01 7.157802520178e-01 3.763632694686e-02 8.670579856582e-01 8.678744399967e-01 1.110722269674e+00 2.481909221547e-04 3.351750418595e-04 1.929810128425e-02 3.798204209266e-04 4.218750000000e-04 +5.629871961948e-01 7.132232051411e-01 3.753080899086e-02 9.086484047370e-01 9.094231606104e-01 1.027543454990e+00 7.170579865100e-06 1.046755710955e-05 3.410369336393e-03 4.105665779401e-04 4.218750000000e-04 +6.375653742222e-01 7.125804887170e-01 3.750345727864e-02 9.561697335239e-01 9.569049423088e-01 1.003593053850e+00 2.960353258488e-08 4.424631946879e-08 2.217263565469e-04 4.203646073290e-04 4.218750000000e-04 +7.125028623791e-01 7.125028623791e-01 3.750011908417e-02 1.007631211206e+00 1.008328774125e+00 1.000147830030e+00 3.825140723303e-12 5.736863004326e-12 2.524736070766e-06 4.218126434244e-04 4.218750000000e-04 +7.875000157268e-01 7.125000127339e-01 3.750000048611e-02 1.061985189593e+00 1.062647068858e+00 1.000000744700e+00 6.667793589957e-15 1.000168293668e-14 1.054181248209e-07 4.218746858300e-04 4.218750000000e-04 +8.625000000033e-01 7.125000000022e-01 3.750000000007e-02 1.118732541767e+00 1.119360866749e+00 1.000000000145e+00 6.666666668281e-15 1.000000000097e-14 1.054092553441e-07 4.218749999387e-04 4.218750000000e-04 +9.375000000000e-01 7.125000000000e-01 3.750000000000e-02 1.177523885108e+00 1.178120855430e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 7.125000000000e-01 3.750000000000e-02 1.238068051441e+00 1.238635842369e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 7.125000000000e-01 3.750000000000e-02 1.300120186752e+00 1.300660889702e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 7.125000000000e-01 3.750000000000e-02 1.363474422202e+00 1.363990010961e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.802378088111e-02 8.026205045019e-01 3.802378088111e-02 8.035206793602e-01 8.044198468909e-01 1.489573987084e+00 6.676759301296e-03 6.723492111693e-03 8.643232491823e-02 2.832185602447e-04 4.218750000000e-04 +1.138683852438e-01 8.005920524102e-01 3.795483461785e-02 8.086492710319e-01 8.095395067637e-01 1.410681303046e+00 4.736183526788e-03 5.036059721526e-03 7.480388969035e-02 2.990576249143e-04 4.218750000000e-04 +1.891952562990e-01 7.971472633109e-01 3.783683667367e-02 8.192915258992e-01 8.201647582161e-01 1.289745217446e+00 2.313266682337e-03 2.690376344545e-03 5.467455577775e-02 3.270994877852e-04 4.218750000000e-04 +2.639521847021e-01 7.933483988505e-01 3.770536386587e-02 8.361055183215e-01 8.369552749293e-01 1.170935687426e+00 7.354696105387e-04 9.421562837779e-04 3.235491176481e-02 3.602887883001e-04 4.218750000000e-04 +3.383909790227e-01 7.902669681370e-01 3.759760278757e-02 8.596687359748e-01 8.604905085751e-01 1.081957932813e+00 1.321518161540e-04 1.832120438506e-04 1.426775867513e-02 3.899181171520e-04 4.218750000000e-04 +4.128762135480e-01 7.884478061942e-01 3.753345513575e-02 8.900093880438e-01 8.908004664685e-01 1.029839169949e+00 1.008997661345e-05 1.469643548412e-05 4.040961860762e-03 4.096513439288e-04 4.218750000000e-04 +4.876003034451e-01 7.877115061338e-01 3.750741438121e-02 9.264143094832e-01 9.271732734224e-01 1.007353107040e+00 2.374385177664e-07 3.535580266348e-07 6.267712914743e-04 4.187955514820e-04 4.218750000000e-04 +5.625143537242e-01 7.875255447675e-01 3.750088041264e-02 9.677907221125e-01 9.685170095764e-01 1.000992998832e+00 9.396318024873e-10 1.408049512210e-09 3.955375403184e-05 4.214564941937e-04 4.218750000000e-04 +6.375008302832e-01 7.875012392764e-01 3.750004106526e-02 1.013195692092e+00 1.013889423731e+00 1.000053345394e+00 2.331979512473e-13 3.497782678114e-13 6.234119984332e-07 4.218524961123e-04 4.218750000000e-04 +7.125000127339e-01 7.875000157268e-01 3.750000048611e-02 1.061985189593e+00 1.062647068858e+00 1.000000744700e+00 6.667793589957e-15 1.000168293668e-14 1.054181248209e-07 4.218746858300e-04 4.218750000000e-04 +7.875000000209e-01 7.875000000209e-01 3.750000000058e-02 1.113693180398e+00 1.114324346887e+00 1.000000001099e+00 6.666666679000e-15 1.000000000751e-14 1.054092553785e-07 4.218749995362e-04 4.218750000000e-04 +8.625000000000e-01 7.875000000000e-01 3.750000000000e-02 1.167930862680e+00 1.168532733816e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 7.875000000000e-01 3.750000000000e-02 1.224362078799e+00 1.224936222830e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 7.875000000000e-01 3.750000000000e-02 1.282697353237e+00 1.283245397420e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 7.875000000000e-01 3.750000000000e-02 1.342688534248e+00 1.343212101643e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 7.875000000000e-01 3.750000000000e-02 1.404123392014e+00 1.404624060025e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.753257489503e-02 8.635638511212e-01 3.753257489503e-02 8.643790945769e-01 8.651935698558e-01 1.027166444206e+00 6.824622705535e-06 9.966188163612e-06 3.327693255697e-03 4.107172721420e-04 4.218750000000e-04 +1.125775062396e-01 8.633463760082e-01 3.752580000480e-02 8.706553048582e-01 8.714636226164e-01 1.021885614085e+00 4.127247548338e-06 6.058282098480e-06 2.594498902267e-03 4.128397485834e-04 4.218750000000e-04 +1.875794452057e-01 8.630236485609e-01 3.751581324251e-02 8.831737463484e-01 8.839701932092e-01 1.013940257291e+00 1.390035593179e-06 2.056386828292e-06 1.511580052018e-03 4.160748100950e-04 4.218750000000e-04 +2.625508987690e-01 8.627415290194e-01 3.750718541688e-02 9.018070305443e-01 9.025866768888e-01 1.006752676412e+00 2.165422966309e-07 3.226347965658e-07 5.987345883572e-04 4.190453225348e-04 4.218750000000e-04 +3.375210140878e-01 8.625781317715e-01 3.750227592491e-02 9.262620948529e-01 9.270209755236e-01 1.002336410674e+00 1.226886366941e-08 1.836039807407e-08 1.428301169380e-04 4.208916243162e-04 4.218750000000e-04 +4.125053153564e-01 8.625161835933e-01 3.750045874774e-02 9.560830519142e-01 9.568182097786e-01 1.000524175313e+00 1.936005094562e-10 2.902486230215e-10 1.795824239796e-05 4.216539793934e-04 4.218750000000e-04 +4.875007285973e-01 8.625018457296e-01 3.750005051533e-02 9.907403263569e-01 9.914497708197e-01 1.000065018012e+00 5.280092662219e-13 7.919624075117e-13 9.380608885188e-07 4.218475723096e-04 4.218750000000e-04 +5.625000431803e-01 8.625000919329e-01 3.750000237896e-02 1.029714866923e+00 1.030397475414e+00 1.000003498748e+00 6.782872759171e-15 1.017427354154e-14 1.063237902799e-07 4.218735239709e-04 4.218750000000e-04 +6.375000007617e-01 8.625000013631e-01 3.750000003292e-02 1.072526225005e+00 1.073181603143e+00 1.000000055663e+00 6.666668566464e-15 1.000000229306e-14 1.054092674245e-07 4.218749765171e-04 4.218750000000e-04 +7.125000000022e-01 8.625000000033e-01 3.750000000007e-02 1.118732541767e+00 1.119360866749e+00 1.000000000145e+00 6.666666668281e-15 1.000000000097e-14 1.054092553441e-07 4.218749999387e-04 4.218750000000e-04 +7.875000000000e-01 8.625000000000e-01 3.750000000000e-02 1.167930862680e+00 1.168532733816e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 8.625000000000e-01 3.750000000000e-02 1.219759197547e+00 1.220335507145e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 8.625000000000e-01 3.750000000000e-02 1.273896581360e+00 1.274448410097e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 8.625000000000e-01 3.750000000000e-02 1.330061088823e+00 1.330589624941e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 8.625000000000e-01 3.750000000000e-02 1.388006664249e+00 1.388513143618e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 8.625000000000e-01 3.750000000000e-02 1.447519429921e+00 1.448005093223e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750009902818e-02 9.375044053516e-01 3.750009902818e-02 9.382541060293e-01 9.390032081457e-01 1.000112204375e+00 1.738669477317e-12 2.607711619322e-12 1.702191926547e-06 4.218276690899e-04 4.218750000000e-04 +1.125002124347e-01 9.375031459148e-01 3.750007034088e-02 9.442290222176e-01 9.449733867542e-01 1.000081636658e+00 8.739736842992e-13 1.310853512748e-12 1.206857035052e-06 4.218405623461e-04 4.218750000000e-04 +1.875001773281e-01 9.375015694569e-01 3.750003471599e-02 9.560677325547e-01 9.568028855705e-01 1.000042246986e+00 1.726535111232e-13 2.589693260112e-13 5.364174638917e-07 4.218571778056e-04 4.218750000000e-04 +2.625000831528e-01 9.375005209301e-01 3.750001133441e-02 9.735571479885e-01 9.742791033628e-01 1.000014780974e+00 1.612223097348e-14 2.418298901210e-14 1.639206753013e-07 4.218687643689e-04 4.218750000000e-04 +3.375000219852e-01 9.375001051632e-01 3.750000223625e-02 9.963998755626e-01 9.971052914255e-01 1.000003184102e+00 6.793519582755e-15 1.019024692734e-14 1.064072205536e-07 4.218736567111e-04 4.218750000000e-04 +4.125000029067e-01 9.375000109980e-01 3.750000022638e-02 1.024237532518e+00 1.024923788892e+00 1.000000356604e+00 6.666928772152e-15 1.000038959205e-14 1.054113086493e-07 4.218748495577e-04 4.218750000000e-04 +4.875000001553e-01 9.375000004791e-01 3.750000000932e-02 1.056675210767e+00 1.057340413987e+00 1.000000016536e+00 6.666666945465e-15 1.000000025284e-14 1.054092566715e-07 4.218749930240e-04 4.218750000000e-04 +5.625000000025e-01 9.375000000064e-01 3.750000000012e-02 1.093303480290e+00 1.093946410943e+00 1.000000000234e+00 6.666666669270e-15 1.000000000156e-14 1.054092553472e-07 4.218749999012e-04 4.218750000000e-04 +6.375000000000e-01 9.375000000000e-01 3.750000000000e-02 1.133716234337e+00 1.134336259669e+00 1.000000000001e+00 6.666666666674e-15 1.000000000000e-14 1.054092553390e-07 4.218749999997e-04 4.218750000000e-04 +7.125000000000e-01 9.375000000000e-01 3.750000000000e-02 1.177523885108e+00 1.178120855430e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.875000000000e-01 9.375000000000e-01 3.750000000000e-02 1.224362078799e+00 1.224936222830e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 9.375000000000e-01 3.750000000000e-02 1.273896581360e+00 1.274448410097e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 9.375000000000e-01 3.750000000000e-02 1.325825214725e+00 1.326355438787e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 9.375000000000e-01 3.750000000000e-02 1.379877711973e+00 1.380387173948e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 9.375000000000e-01 3.750000000000e-02 1.435814228931e+00 1.436303850165e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 9.375000000000e-01 3.750000000000e-02 1.493423081381e+00 1.493893821528e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750000000091e-02 1.012500000064e+00 3.750000000091e-02 1.013194206522e+00 1.013887937659e+00 1.000000001663e+00 6.666666685587e-15 1.000000001175e-14 1.054092554009e-07 4.218749992984e-04 4.218750000000e-04 +1.125000000018e-01 1.012500000042e+00 3.750000000059e-02 1.018730828082e+00 1.019420791472e+00 1.000000001097e+00 6.666666679035e-15 1.000000000758e-14 1.054092553789e-07 4.218749995370e-04 4.218750000000e-04 +1.875000000013e-01 1.012500000017e+00 3.750000000024e-02 1.029714766348e+00 1.030397374820e+00 1.000000000461e+00 6.666666671804e-15 1.000000000310e-14 1.054092553553e-07 4.218749998056e-04 4.218750000000e-04 +2.625000000004e-01 1.012500000004e+00 3.750000000006e-02 1.045974426078e+00 1.046646430275e+00 1.000000000113e+00 6.666666667919e-15 1.000000000075e-14 1.054092553429e-07 4.218749999524e-04 4.218750000000e-04 +3.375000000001e-01 1.012500000000e+00 3.750000000001e-02 1.067268710307e+00 1.067927314943e+00 1.000000000013e+00 6.666666666816e-15 1.000000000009e-14 1.054092553394e-07 4.218749999943e-04 4.218750000000e-04 +4.125000000000e-01 1.012500000000e+00 3.750000000000e-02 1.093303480284e+00 1.093946410936e+00 1.000000000001e+00 6.666666666674e-15 1.000000000000e-14 1.054092553390e-07 4.218749999997e-04 4.218750000000e-04 +4.875000000000e-01 1.012500000000e+00 3.750000000000e-02 1.123749304783e+00 1.124374826292e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +5.625000000000e-01 1.012500000000e+00 3.750000000000e-02 1.158258390861e+00 1.158865285527e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +6.375000000000e-01 1.012500000000e+00 3.750000000000e-02 1.196479210016e+00 1.197066727463e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.125000000000e-01 1.012500000000e+00 3.750000000000e-02 1.238068051441e+00 1.238635842369e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.875000000000e-01 1.012500000000e+00 3.750000000000e-02 1.282697353237e+00 1.283245397420e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 1.012500000000e+00 3.750000000000e-02 1.330061088823e+00 1.330589624941e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 1.012500000000e+00 3.750000000000e-02 1.379877711973e+00 1.380387173948e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 1.012500000000e+00 3.750000000000e-02 1.431891231903e+00 1.432382194109e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 1.012500000000e+00 3.750000000000e-02 1.485870956712e+00 1.486344088695e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 1.012500000000e+00 3.750000000000e-02 1.541610359332e+00 1.542066389621e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750000000000e-02 1.087500000000e+00 3.750000000000e-02 1.088146359641e+00 1.088792335572e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.125000000000e-01 1.087500000000e+00 3.750000000000e-02 1.093303480283e+00 1.093946410936e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.875000000000e-01 1.087500000000e+00 3.750000000000e-02 1.103545422717e+00 1.104182389825e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +2.625000000000e-01 1.087500000000e+00 3.750000000000e-02 1.118732541763e+00 1.119360866745e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +3.375000000000e-01 1.087500000000e+00 3.750000000000e-02 1.138666983802e+00 1.139284314822e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.125000000000e-01 1.087500000000e+00 3.750000000000e-02 1.163104681445e+00 1.163709048689e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.875000000000e-01 1.087500000000e+00 3.750000000000e-02 1.191768643655e+00 1.192358482169e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +5.625000000000e-01 1.087500000000e+00 3.750000000000e-02 1.224362078799e+00 1.224936222830e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +6.375000000000e-01 1.087500000000e+00 3.750000000000e-02 1.260580223548e+00 1.261137879060e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.125000000000e-01 1.087500000000e+00 3.750000000000e-02 1.300120186752e+00 1.300660889702e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.875000000000e-01 1.087500000000e+00 3.750000000000e-02 1.342688534248e+00 1.343212101643e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 1.087500000000e+00 3.750000000000e-02 1.388006664249e+00 1.388513143618e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 1.087500000000e+00 3.750000000000e-02 1.435814228931e+00 1.436303850165e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 1.087500000000e+00 3.750000000000e-02 1.485870956712e+00 1.486344088695e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 1.087500000000e+00 3.750000000000e-02 1.537957249081e+00 1.538414362257e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 1.087500000000e+00 3.750000000000e-02 1.591873895759e+00 1.592315530917e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750000000000e-02 1.162500000000e+00 3.750000000000e-02 1.163104681445e+00 1.163709048689e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.125000000000e-01 1.162500000000e+00 3.750000000000e-02 1.167930862680e+00 1.168532733816e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.875000000000e-01 1.162500000000e+00 3.750000000000e-02 1.177523885108e+00 1.178120855430e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +2.625000000000e-01 1.162500000000e+00 3.750000000000e-02 1.191768643655e+00 1.192358482169e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.375000000000e-01 1.162500000000e+00 3.750000000000e-02 1.210500929368e+00 1.211081644647e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +4.125000000000e-01 1.162500000000e+00 3.750000000000e-02 1.233516315255e+00 1.234086200393e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +4.875000000000e-01 1.162500000000e+00 3.750000000000e-02 1.260580223548e+00 1.261137879060e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +5.625000000000e-01 1.162500000000e+00 3.750000000000e-02 1.291438151829e+00 1.291982488271e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +6.375000000000e-01 1.162500000000e+00 3.750000000000e-02 1.325825214725e+00 1.326355438787e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +7.125000000000e-01 1.162500000000e+00 3.750000000000e-02 1.363474422202e+00 1.363990010961e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +7.875000000000e-01 1.162500000000e+00 3.750000000000e-02 1.404123392014e+00 1.404624060025e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +8.625000000000e-01 1.162500000000e+00 3.750000000000e-02 1.447519429921e+00 1.448005093223e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +9.375000000000e-01 1.162500000000e+00 3.750000000000e-02 1.493423081381e+00 1.493893821528e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.012500000000e+00 1.162500000000e+00 3.750000000000e-02 1.541610359332e+00 1.542066389621e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.087500000000e+00 1.162500000000e+00 3.750000000000e-02 1.591873895759e+00 1.592315530917e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.162500000000e+00 1.162500000000e+00 3.750000000000e-02 1.644023266259e+00 1.644450896196e+00 9.999999999977e-01 6.666666666641e-15 9.999999999984e-15 1.054092553389e-07 4.218750000010e-04 4.218750000000e-04 +1.266898790538e-01 1.266898790538e-01 4.055062932508e-01 1.791665451733e-01 4.433238148073e-01 6.365290081693e-02 3.726183719198e-02 8.780865454776e-01 9.877508376090e-01 6.627741934548e-03 4.218750000000e-04 +3.386927717978e-01 1.109692981982e-01 3.386927717978e-01 3.564084437982e-01 4.916703900773e-01 8.821553842422e-02 3.789152043562e-02 6.443001048194e-01 8.461022428495e-01 4.782320751376e-03 4.218750000000e-04 +4.681902577391e-01 8.977377330050e-02 2.679769788166e-01 4.767194644803e-01 5.468757710761e-01 2.097728791291e-01 3.830482617702e-02 2.739021340798e-01 5.516662981669e-01 2.011103636235e-03 4.218750000000e-04 +5.412675823576e-01 7.268733309838e-02 2.171726577813e-01 5.461263993841e-01 5.877227300284e-01 4.109246309970e-01 4.041942818801e-02 1.475432176818e-01 4.048912304995e-01 1.026648120305e-03 4.218750000000e-04 +5.942484715349e-01 6.126162932497e-02 1.836545072027e-01 5.973978851227e-01 6.249905688608e-01 6.425571785475e-01 4.371122603501e-02 1.020404739711e-01 3.367169499926e-01 6.565563565154e-04 4.218750000000e-04 +6.391858186493e-01 5.378569813346e-02 1.612524738038e-01 6.414447849083e-01 6.614028820575e-01 9.349323386071e-01 4.905164748678e-02 7.869817760265e-02 2.957066444274e-01 4.512358622962e-04 4.218750000000e-04 +6.781511051953e-01 4.864214716210e-02 1.458882362481e-01 6.798933592543e-01 6.953692238183e-01 1.295854622235e+00 5.560295412388e-02 6.436249078773e-02 2.674207894930e-01 3.255573524695e-04 4.218750000000e-04 +7.110757175816e-01 4.486890944866e-02 1.345999256523e-01 7.124899263634e-01 7.250924321457e-01 1.858414552015e+00 7.006124491424e-02 5.654920601940e-02 2.506640204191e-01 2.270080158071e-04 4.218750000000e-04 +7.384639956202e-01 4.186955793615e-02 1.256200074540e-01 7.396500069013e-01 7.502416403945e-01 2.507811435527e+00 8.202572059914e-02 4.906213408061e-02 2.334812247522e-01 1.682243704704e-04 4.218750000000e-04 +7.627706410319e-01 3.943674509720e-02 1.183239484904e-01 7.637894393641e-01 7.729002940034e-01 2.993948406346e+00 7.965239082298e-02 3.990669511246e-02 2.105724871563e-01 1.409092418245e-04 4.218750000000e-04 +8.005920524102e-01 3.795483461785e-02 1.138683852438e-01 8.014912375399e-01 8.095395067637e-01 1.410681303046e+00 4.736183526788e-03 5.036059721526e-03 7.480388969035e-02 2.990576249143e-04 4.218750000000e-04 +8.633463760082e-01 3.752580000480e-02 1.125775062396e-01 8.641615304054e-01 8.714636226164e-01 1.021885614085e+00 4.127247548338e-06 6.058282098480e-06 2.594498902267e-03 4.128397485834e-04 4.218750000000e-04 +9.375031459148e-01 3.750007034088e-02 1.125002124347e-01 9.382528464523e-01 9.449733867542e-01 1.000081636658e+00 8.739736842992e-13 1.310853512749e-12 1.206857035052e-06 4.218405623461e-04 4.218750000000e-04 +1.012500000042e+00 3.750000000059e-02 1.125000000018e-01 1.013194206500e+00 1.019420791472e+00 1.000000001097e+00 6.666666679035e-15 1.000000000758e-14 1.054092553789e-07 4.218749995370e-04 4.218750000000e-04 +1.087500000000e+00 3.750000000000e-02 1.125000000000e-01 1.088146359641e+00 1.093946410936e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 3.750000000000e-02 1.125000000000e-01 1.163104681445e+00 1.168532733816e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.109692981982e-01 3.386927717978e-01 3.386927717978e-01 3.564084437982e-01 4.916703900773e-01 8.821553842422e-02 3.789152043562e-02 6.443001048194e-01 8.461022428495e-01 4.782320751376e-03 4.218750000000e-04 +3.063230428949e-01 3.063230428949e-01 3.063230428949e-01 4.332062017294e-01 5.305670738231e-01 1.236386210151e-01 3.822246729445e-02 4.637199968018e-01 7.178052945548e-01 3.412161964736e-03 4.218750000000e-04 +4.420211980168e-01 2.576822509962e-01 2.576822509962e-01 5.116472241444e-01 5.728726075256e-01 2.359991051485e-01 3.898662115126e-02 2.477972604603e-01 5.247192481703e-01 1.787612710372e-03 4.218750000000e-04 +5.261974407503e-01 2.135050057140e-01 2.135050057140e-01 5.678627775415e-01 6.066733236117e-01 4.316575403650e-01 4.061850875558e-02 1.411483813809e-01 3.960196142461e-01 9.773372651923e-04 4.218750000000e-04 +5.846633670054e-01 1.816330433661e-01 1.816330433661e-01 6.122269310971e-01 6.386018928902e-01 6.743987250459e-01 4.420766396760e-02 9.832684061923e-02 3.305329713243e-01 6.255572324388e-04 4.218750000000e-04 +6.318586229404e-01 1.600277866929e-01 1.600277866929e-01 6.518084165596e-01 6.711654821367e-01 9.724963240735e-01 4.914854102486e-02 7.580780483415e-02 2.902255920145e-01 4.338062669819e-04 4.218750000000e-04 +6.717894520660e-01 1.449691450988e-01 1.449691450988e-01 6.872533164254e-01 7.023768034100e-01 1.359986442156e+00 5.691970848743e-02 6.277971609468e-02 2.641121733378e-01 3.102052983200e-04 4.218750000000e-04 +7.051380359655e-01 1.338113543804e-01 1.338113543804e-01 7.177221804615e-01 7.300894512917e-01 1.937328051086e+00 7.128763726890e-02 5.519532731869e-02 2.476451926955e-01 2.177612613226e-04 4.218750000000e-04 +7.329074184128e-01 1.249362321867e-01 1.249362321867e-01 7.434798894910e-01 7.539041107400e-01 2.601717733500e+00 8.285507026493e-02 4.776944239459e-02 2.303848046556e-01 1.621524866314e-04 4.218750000000e-04 +7.584525710444e-01 1.178358077925e-01 1.178358077925e-01 7.675516791213e-01 7.765441762836e-01 2.831152357814e+00 6.841996781260e-02 3.625023974272e-02 2.006939066304e-01 1.490117615308e-04 4.218750000000e-04 +7.987863751225e-01 1.136825910994e-01 1.136825910994e-01 8.068354259701e-01 8.148049681485e-01 1.345319749911e+00 3.344270202044e-03 3.728782918261e-03 6.436685584524e-02 3.135871602480e-04 4.218750000000e-04 +8.631696333854e-01 1.125610454361e-01 1.125610454361e-01 8.704779175536e-01 8.777253522020e-01 1.017556747593e+00 2.468798165007e-06 3.639302924647e-06 2.010887842789e-03 4.145960419386e-04 4.218750000000e-04 +9.375022381863e-01 1.125001504027e-01 1.125001504027e-01 9.442281135641e-01 9.509064172070e-01 1.000059168748e+00 4.304706205896e-13 6.456677275333e-13 8.469997556955e-07 4.218500396613e-04 4.218750000000e-04 +1.012500000027e+00 1.125000000012e-01 1.125000000012e-01 1.018730828067e+00 1.024923777681e+00 1.000000000721e+00 6.666666674737e-15 1.000000000490e-14 1.054092553647e-07 4.218749996958e-04 4.218750000000e-04 +1.087500000000e+00 1.125000000000e-01 1.125000000000e-01 1.093303480283e+00 1.099076316731e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 1.125000000000e-01 1.125000000000e-01 1.167930862680e+00 1.173336588537e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +8.977377330050e-02 4.681902577391e-01 2.679769788166e-01 4.767194644803e-01 5.468757710761e-01 2.097728791291e-01 3.830482617702e-02 2.739021340798e-01 5.516662981669e-01 2.011103636235e-03 4.218750000000e-04 +2.576822509962e-01 4.420211980168e-01 2.576822509962e-01 5.116472241444e-01 5.728726075256e-01 2.359991051485e-01 3.898662115126e-02 2.477972604603e-01 5.247192481703e-01 1.787612710372e-03 4.218750000000e-04 +3.952319802353e-01 3.952319802353e-01 2.349379812617e-01 5.589424267323e-01 6.063105569267e-01 3.066668047087e-01 4.019081773671e-02 1.965854330479e-01 4.673630911209e-01 1.375678728582e-03 4.218750000000e-04 +4.949421831262e-01 3.417327685571e-01 2.049220289062e-01 6.014557753846e-01 6.354070252008e-01 4.843070405527e-01 4.170049349794e-02 1.291551330237e-01 3.788214663396e-01 8.710899587968e-04 4.218750000000e-04 +5.641395875848e-01 2.960324743901e-01 1.777130280900e-01 6.370939492523e-01 6.614156185991e-01 7.391919671038e-01 4.484605566122e-02 9.100353695049e-02 3.179859132982e-01 5.707245462271e-04 4.218750000000e-04 +6.162654384075e-01 2.625808393044e-01 1.575574105931e-01 6.698744567046e-01 6.881541436176e-01 1.050494771669e+00 4.952147552967e-02 7.071164492944e-02 2.803007213085e-01 4.015964775623e-04 4.218750000000e-04 +6.584891827673e-01 2.385236405180e-01 1.430993937692e-01 7.003581447428e-01 7.148279285287e-01 1.487611309321e+00 5.884026376340e-02 5.933028008867e-02 2.567538382028e-01 2.835922242299e-04 4.218750000000e-04 +6.931410406145e-01 2.204484790087e-01 1.322412101987e-01 7.273527576640e-01 7.392765191430e-01 2.071339659902e+00 7.155290295600e-02 5.181639521115e-02 2.399453530636e-01 2.036725353002e-04 4.218750000000e-04 +7.219464675608e-01 2.060305930202e-01 1.235898070358e-01 7.507698097844e-01 7.608743310737e-01 2.788770873171e+00 8.435064586788e-02 4.536979714578e-02 2.245236863174e-01 1.512763217870e-04 4.218750000000e-04 +7.503839673954e-01 1.948952522393e-01 1.169209236599e-01 7.752807606729e-01 7.840476772869e-01 2.472359941643e+00 4.674327377501e-02 2.835950764350e-02 1.775121518329e-01 1.706365618105e-04 4.218750000000e-04 +7.957427201446e-01 1.889510507492e-01 1.133672761909e-01 8.178685568246e-01 8.256882677823e-01 1.244148042387e+00 1.616798394324e-03 1.949283774006e-03 4.653891769268e-02 3.390874603560e-04 4.218750000000e-04 +8.629099387331e-01 1.875619216442e-01 1.125370242651e-01 8.830589090288e-01 8.902008866799e-01 1.011086194257e+00 8.117955180759e-07 1.204341710954e-06 1.156787558982e-03 4.172492932809e-04 4.218750000000e-04 +9.375011076905e-01 1.875001246548e-01 1.125000737060e-01 9.560672694253e-01 9.626634356047e-01 1.000030370654e+00 8.630185040165e-14 1.294488441565e-13 3.792519598667e-07 4.218621877696e-04 4.218750000000e-04 +1.012500000011e+00 1.875000000008e-01 1.125000000005e-01 1.029714766342e+00 1.035842048781e+00 1.000000000300e+00 6.666666670004e-15 1.000000000201e-14 1.054092553495e-07 4.218749998735e-04 4.218750000000e-04 +1.087500000000e+00 1.875000000000e-01 1.125000000000e-01 1.103545422717e+00 1.109264959331e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 1.875000000000e-01 1.125000000000e-01 1.177523885108e+00 1.182885772169e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +7.268733309838e-02 5.412675823576e-01 2.171726577813e-01 5.461263993841e-01 5.877227300284e-01 4.109246309970e-01 4.041942818801e-02 1.475432176818e-01 4.048912304995e-01 1.026648120305e-03 4.218750000000e-04 +2.135050057140e-01 5.261974407503e-01 2.135050057140e-01 5.678627775415e-01 6.066733236117e-01 4.316575403650e-01 4.061850875558e-02 1.411483813809e-01 3.960196142461e-01 9.773372651923e-04 4.218750000000e-04 +3.417327685571e-01 4.949421831262e-01 2.049220289062e-01 6.014557753846e-01 6.354070252008e-01 4.843070405527e-01 4.170049349794e-02 1.291551330237e-01 3.788214663396e-01 8.710899587968e-04 4.218750000000e-04 +4.494528356157e-01 4.494528356157e-01 1.897708839905e-01 6.356222957747e-01 6.633465845970e-01 5.995267199290e-01 4.373123086561e-02 1.094143832425e-01 3.486711013779e-01 7.036800629169e-04 4.218750000000e-04 +5.314326766515e-01 4.005074331571e-01 1.709752635799e-01 6.654523978671e-01 6.870658153214e-01 8.403596192844e-01 4.582330155169e-02 8.179230742436e-02 3.014636654435e-01 5.020172201506e-04 4.218750000000e-04 +5.916681073208e-01 3.590062233270e-01 1.536987424520e-01 6.920669170016e-01 7.089287136514e-01 1.185839004642e+00 5.105768601633e-02 6.458425530337e-02 2.678810998753e-01 3.557607722031e-04 4.218750000000e-04 +6.380004170738e-01 3.274610859066e-01 1.402236550874e-01 7.171299010427e-01 7.307105914215e-01 1.668826208055e+00 6.124613426806e-02 5.505019094179e-02 2.473193862685e-01 2.527974440740e-04 4.218750000000e-04 +6.752297927797e-01 3.032718863476e-01 1.298802489024e-01 7.402088287140e-01 7.515171249953e-01 2.269317655133e+00 7.199532459282e-02 4.758830772102e-02 2.299475972212e-01 1.859038989300e-04 4.218750000000e-04 +7.061916470317e-01 2.839907188670e-01 1.216438835878e-01 7.611552868765e-01 7.708142481521e-01 2.938291270583e+00 8.086782316446e-02 4.128308720143e-02 2.141730536050e-01 1.435783457629e-04 4.218750000000e-04 +7.399313280868e-01 2.701017565932e-01 1.157300761636e-01 7.876885991298e-01 7.961449489433e-01 1.992369633619e+00 2.354533315668e-02 1.772663020911e-02 1.403433496390e-01 2.117453472896e-04 4.218750000000e-04 +7.924281062424e-01 2.637249349063e-01 1.130208567819e-01 8.351605503460e-01 8.427733140779e-01 1.143792126595e+00 5.029659803463e-04 6.596032207056e-04 2.707198676586e-02 3.688388739448e-04 4.218750000000e-04 +8.626862418681e-01 2.625390954762e-01 1.125165764885e-01 9.017507020025e-01 9.087432577723e-01 1.005297898964e+00 1.225094471748e-07 1.827957374143e-07 4.506732462713e-04 4.196517275473e-04 4.218750000000e-04 +9.375003627328e-01 2.625000577539e-01 1.125000237780e-01 9.735569888019e-01 9.800354410913e-01 1.000010481469e+00 1.112672435054e-14 1.668991159102e-14 1.361776274292e-07 4.218705781765e-04 4.218750000000e-04 +1.012500000003e+00 2.625000000003e-01 1.125000000001e-01 1.045974426076e+00 1.052007010435e+00 1.000000000072e+00 6.666666667470e-15 1.000000000048e-14 1.054092553415e-07 4.218749999695e-04 4.218750000000e-04 +1.087500000000e+00 2.625000000000e-01 1.125000000000e-01 1.118732541763e+00 1.124374826292e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 2.625000000000e-01 1.125000000000e-01 1.191768643655e+00 1.197066727463e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +6.126162932497e-02 5.942484715349e-01 1.836545072027e-01 5.973978851227e-01 6.249905688608e-01 6.425571785475e-01 4.371122603501e-02 1.020404739711e-01 3.367169499926e-01 6.565563565154e-04 4.218750000000e-04 +1.816330433661e-01 5.846633670054e-01 1.816330433661e-01 6.122269310971e-01 6.386018928902e-01 6.743987250459e-01 4.420766396760e-02 9.832684061923e-02 3.305329713243e-01 6.255572324388e-04 4.218750000000e-04 +2.960324743901e-01 5.641395875848e-01 1.777130280900e-01 6.370939492523e-01 6.614156185991e-01 7.391919671038e-01 4.484605566122e-02 9.100353695049e-02 3.179859132982e-01 5.707245462271e-04 4.218750000000e-04 +4.005074331571e-01 5.314326766515e-01 1.709752635799e-01 6.654523978671e-01 6.870658153214e-01 8.403596192844e-01 4.582330155169e-02 8.179230742436e-02 3.014636654435e-01 5.020172201506e-04 4.218750000000e-04 +4.894429569983e-01 4.894429569983e-01 1.605378250392e-01 6.921768677951e-01 7.105499346133e-01 1.021745148232e+00 4.895419820814e-02 7.186850599610e-02 2.825843158267e-01 4.128965043093e-04 4.218750000000e-04 +5.587616585062e-01 4.463995369992e-01 1.480007710295e-01 7.151832895487e-01 7.303364744246e-01 1.385869000295e+00 5.418343914318e-02 5.864562862540e-02 2.552681131355e-01 3.044118887933e-04 4.218750000000e-04 +6.110918186474e-01 4.097877013356e-01 1.363033411712e-01 7.357711403580e-01 7.482898982334e-01 1.892708088720e+00 6.250654509346e-02 4.953738941518e-02 2.346093429398e-01 2.228949104800e-04 4.218750000000e-04 +6.521037683921e-01 3.807811267663e-01 1.267422491644e-01 7.551381272672e-01 7.657004564292e-01 2.554076086807e+00 7.387619665269e-02 4.338723327447e-02 2.195632869394e-01 1.651771465146e-04 4.218750000000e-04 +6.871639170439e-01 3.580608828827e-01 1.192548679406e-01 7.748560154880e-01 7.839793162230e-01 2.712780625828e+00 5.948151986467e-02 3.288960373263e-02 1.911648611732e-01 1.555138649928e-04 4.218750000000e-04 +7.292150425168e-01 3.435851278437e-01 1.144973867095e-01 8.061050293282e-01 8.141959038656e-01 1.557598873535e+00 8.143644820967e-03 7.842498758186e-03 9.334820570903e-02 2.708495795471e-04 4.218750000000e-04 +7.897871416024e-01 3.382367272118e-01 1.127424628782e-01 8.591669294587e-01 8.665325588870e-01 1.068344316136e+00 8.695704047596e-05 1.220913133939e-04 1.164718914082e-02 3.948867360721e-04 4.218750000000e-04 +8.625590639033e-01 3.375158417827e-01 1.125051514156e-01 9.262424532357e-01 9.330501011581e-01 1.001798508180e+00 6.706586493273e-09 1.004181944549e-08 1.056294332166e-04 4.211176165219e-04 4.218750000000e-04 +9.375000718346e-01 3.375000150082e-01 1.125000046112e-01 9.963998418409e-01 1.002730719514e+00 1.000002213574e+00 6.724204955861e-15 1.008628510705e-14 1.058630410119e-07 4.218740661505e-04 4.218750000000e-04 +1.012500000000e+00 3.375000000000e-01 1.125000000000e-01 1.067268710307e+00 1.073181601594e+00 1.000000000009e+00 6.666666666761e-15 1.000000000006e-14 1.054092553392e-07 4.218749999964e-04 4.218750000000e-04 +1.087500000000e+00 3.375000000000e-01 1.125000000000e-01 1.138666983802e+00 1.144210972679e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 3.375000000000e-01 1.125000000000e-01 1.210500929368e+00 1.215717380809e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +5.378569813346e-02 6.391858186493e-01 1.612524738038e-01 6.414447849083e-01 6.614028820575e-01 9.349323386071e-01 4.905164748678e-02 7.869817760265e-02 2.957066444274e-01 4.512358622962e-04 4.218750000000e-04 +1.600277866929e-01 6.318586229404e-01 1.600277866929e-01 6.518084165596e-01 6.711654821367e-01 9.724963240735e-01 4.914854102486e-02 7.580780483415e-02 2.902255920145e-01 4.338062669819e-04 4.218750000000e-04 +2.625808393044e-01 6.162654384075e-01 1.575574105931e-01 6.698744567046e-01 6.881541436176e-01 1.050494771669e+00 4.952147552967e-02 7.071164492944e-02 2.803007213085e-01 4.015964775623e-04 4.218750000000e-04 +3.590062233270e-01 5.916681073208e-01 1.536987424520e-01 6.920669170016e-01 7.089287136514e-01 1.185839004642e+00 5.105768601633e-02 6.458425530337e-02 2.678810998753e-01 3.557607722031e-04 4.218750000000e-04 +4.463995369992e-01 5.587616585062e-01 1.480007710295e-01 7.151832895487e-01 7.303364744246e-01 1.385869000295e+00 5.418343914318e-02 5.864562862540e-02 2.552681131355e-01 3.044118887933e-04 4.218750000000e-04 +5.207755874095e-01 5.207755874095e-01 1.401556710978e-01 7.364878986673e-01 7.497053001175e-01 1.693510660765e+00 5.958550315900e-02 5.277690705420e-02 2.421590548338e-01 2.491126922161e-04 4.218750000000e-04 +5.795478052352e-01 4.835112384987e-01 1.312037698371e-01 7.547574287859e-01 7.660765010931e-01 2.207915446422e+00 6.543655575786e-02 4.445588430293e-02 2.222508200283e-01 1.910738931075e-04 4.218750000000e-04 +6.254664687273e-01 4.517744020882e-01 1.229399338453e-01 7.715623201558e-01 7.812954890553e-01 2.738410935523e+00 6.862774905960e-02 3.759173696469e-02 2.043736691148e-01 1.540583243104e-04 4.218750000000e-04 +6.677280306509e-01 4.284489960969e-01 1.167411214037e-01 7.933657827089e-01 8.019088193803e-01 2.083750656572e+00 2.659079717296e-02 1.914153962406e-02 1.458368175739e-01 2.024594443051e-04 4.218750000000e-04 +7.205177650716e-01 4.161742013467e-01 1.134786874123e-01 8.320738042087e-01 8.397762964904e-01 1.259321501815e+00 1.739696670916e-03 2.072183316661e-03 4.798360040056e-02 3.350018239122e-04 4.218750000000e-04 +7.882638456557e-01 4.128031823094e-01 1.125809151375e-01 8.898125407594e-01 8.969062493627e-01 1.024427599860e+00 6.314974967222e-06 9.246590439506e-06 3.205306440456e-03 4.118153396664e-04 4.218750000000e-04 +8.625119321344e-01 4.125039148035e-01 1.125010139433e-01 9.560786122503e-01 9.626748105880e-01 1.000393524846e+00 1.005238370870e-10 1.507264410310e-10 1.294116777450e-05 4.217090470123e-04 4.218750000000e-04 +9.375000073838e-01 4.125000019477e-01 1.125000004590e-01 1.024237528824e+00 1.030397382350e+00 1.000000243321e+00 6.666784864604e-15 1.000017486365e-14 1.054101769473e-07 4.218748973489e-04 4.218750000000e-04 +1.012500000000e+00 4.125000000000e-01 1.125000000000e-01 1.093303480284e+00 1.099076316731e+00 1.000000000000e+00 6.666666666671e-15 1.000000000000e-14 1.054092553390e-07 4.218749999998e-04 4.218750000000e-04 +1.087500000000e+00 4.125000000000e-01 1.125000000000e-01 1.163104681445e+00 1.168532733816e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 4.125000000000e-01 1.125000000000e-01 1.233516315255e+00 1.238635842369e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +4.864214716210e-02 6.781511051953e-01 1.458882362481e-01 6.798933592543e-01 6.953692238183e-01 1.295854622235e+00 5.560295412388e-02 6.436249078773e-02 2.674207894930e-01 3.255573524695e-04 4.218750000000e-04 +1.449691450988e-01 6.717894520660e-01 1.449691450988e-01 6.872533164254e-01 7.023768034100e-01 1.359986442156e+00 5.691970848743e-02 6.277971609468e-02 2.641121733378e-01 3.102052983200e-04 4.218750000000e-04 +2.385236405180e-01 6.584891827673e-01 1.430993937692e-01 7.003581447428e-01 7.148279285287e-01 1.487611309321e+00 5.884026376340e-02 5.933028008867e-02 2.567538382028e-01 2.835922242299e-04 4.218750000000e-04 +3.274610859066e-01 6.380004170738e-01 1.402236550874e-01 7.171299010427e-01 7.307105914215e-01 1.668826208055e+00 6.124613426806e-02 5.505019094179e-02 2.473193862685e-01 2.527974440740e-04 4.218750000000e-04 +4.097877013356e-01 6.110918186474e-01 1.363033411712e-01 7.357711403580e-01 7.482898982334e-01 1.892708088720e+00 6.250654509346e-02 4.953738941518e-02 2.346093429398e-01 2.228949104800e-04 4.218750000000e-04 +4.835112384987e-01 5.795478052352e-01 1.312037698371e-01 7.547574287859e-01 7.660765010931e-01 2.207915446422e+00 6.543655575786e-02 4.445588430293e-02 2.222508200283e-01 1.910738931075e-04 4.218750000000e-04 +5.461980243499e-01 5.461980243499e-01 1.250024329546e-01 7.724406537771e-01 7.824897263556e-01 2.604460746540e+00 6.889124455926e-02 3.967687628857e-02 2.099652783162e-01 1.619817079449e-04 4.218750000000e-04 +5.988675357190e-01 5.164179271889e-01 1.188390030432e-01 7.907779719114e-01 7.996577452289e-01 2.337106095865e+00 3.979595208670e-02 2.554181354268e-02 1.684630310341e-01 1.805117023769e-04 4.218750000000e-04 +6.517391953554e-01 4.968789176846e-01 1.145791597245e-01 8.195441645219e-01 8.275149675052e-01 1.505743325274e+00 6.483992355518e-03 6.459260599085e-03 8.471691815220e-02 2.801772340072e-04 4.218750000000e-04 +7.152453972319e-01 4.890399869792e-01 1.128438031177e-01 8.664502796618e-01 8.737675955470e-01 1.093819921159e+00 1.711447864485e-04 2.346978462421e-04 1.614854125652e-02 3.856896293798e-04 4.218750000000e-04 +7.876650161727e-01 4.875782861272e-01 1.125173520862e-01 9.263631916291e-01 9.331714297629e-01 1.005842230148e+00 1.384898275312e-07 2.065281562758e-07 4.790362503979e-04 4.194246248120e-04 4.218750000000e-04 +8.625013227533e-01 4.875005217075e-01 1.125001086550e-01 9.907397692716e-01 9.971065965400e-01 1.000047398591e+00 2.606079770129e-13 3.908934377213e-13 6.590341735544e-07 4.218550046673e-04 4.218750000000e-04 +9.375000003146e-01 4.875000001019e-01 1.125000000185e-01 1.056675210597e+00 1.062647048974e+00 1.000000011025e+00 6.666666833974e-15 1.000000014071e-14 1.054092560806e-07 4.218749953489e-04 4.218750000000e-04 +1.012500000000e+00 4.875000000000e-01 1.125000000000e-01 1.123749304783e+00 1.129366525978e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 4.875000000000e-01 1.125000000000e-01 1.191768643655e+00 1.197066727463e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 4.875000000000e-01 1.125000000000e-01 1.260580223548e+00 1.265590277302e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +4.486890944866e-02 7.110757175816e-01 1.345999256523e-01 7.124899263634e-01 7.250924321457e-01 1.858414552015e+00 7.006124491424e-02 5.654920601940e-02 2.506640204191e-01 2.270080158071e-04 4.218750000000e-04 +1.338113543804e-01 7.051380359655e-01 1.338113543804e-01 7.177221804615e-01 7.300894512917e-01 1.937328051086e+00 7.128763726890e-02 5.519532731869e-02 2.476451926955e-01 2.177612613226e-04 4.218750000000e-04 +2.204484790087e-01 6.931410406145e-01 1.322412101987e-01 7.273527576640e-01 7.392765191430e-01 2.071339659902e+00 7.155290295600e-02 5.181639521115e-02 2.399453530636e-01 2.036725353002e-04 4.218750000000e-04 +3.032718863476e-01 6.752297927797e-01 1.298802489024e-01 7.402088287140e-01 7.515171249953e-01 2.269317655133e+00 7.199532459282e-02 4.758830772102e-02 2.299475972212e-01 1.859038989300e-04 4.218750000000e-04 +3.807811267663e-01 6.521037683921e-01 1.267422491644e-01 7.551381272672e-01 7.657004564292e-01 2.554076086807e+00 7.387619665269e-02 4.338723327447e-02 2.195632869394e-01 1.651771465146e-04 4.218750000000e-04 +4.517744020882e-01 6.254664687273e-01 1.229399338453e-01 7.715623201558e-01 7.812954890553e-01 2.738410935523e+00 6.862774905960e-02 3.759173696469e-02 2.043736691148e-01 1.540583243104e-04 4.218750000000e-04 +5.164179271889e-01 5.988675357190e-01 1.188390030432e-01 7.907779719114e-01 7.996577452289e-01 2.337106095865e+00 3.979595208670e-02 2.554181354268e-02 1.684630310341e-01 1.805117023769e-04 4.218750000000e-04 +5.776559881597e-01 5.776559881597e-01 1.152638001849e-01 8.169289328415e-01 8.250203785038e-01 1.640172484726e+00 1.046904027606e-02 9.574334748528e-03 1.031414064311e-01 2.572138015536e-04 4.218750000000e-04 +6.420606789279e-01 5.662081734256e-01 1.131961292620e-01 8.560570139187e-01 8.635085261648e-01 1.174908623356e+00 6.995460609376e-04 8.931069791702e-04 3.150144580756e-02 3.590704771534e-04 4.218750000000e-04 +7.130825929528e-01 5.628933648655e-01 1.125745891357e-01 9.084798977314e-01 9.154281854417e-01 1.022627510329e+00 4.529014479307e-06 6.643202583874e-06 2.716861462111e-03 4.125402414259e-04 4.218750000000e-04 +7.875191663087e-01 5.625107782388e-01 1.125019802511e-01 9.677834535362e-01 9.743005226822e-01 1.000758515197e+00 5.006420776219e-10 7.503939312325e-10 2.887509367435e-05 4.215552439412e-04 4.218750000000e-04 +8.625000637247e-01 5.625000299308e-01 1.125000049667e-01 1.029714836058e+00 1.035842118624e+00 1.000002464641e+00 6.719885991122e-15 1.007980414358e-14 1.058290242880e-07 4.218739602320e-04 4.218750000000e-04 +9.375000000041e-01 5.625000000016e-01 1.125000000002e-01 1.093303480288e+00 1.099076316736e+00 1.000000000152e+00 6.666666668359e-15 1.000000000102e-14 1.054092553443e-07 4.218749999358e-04 4.218750000000e-04 +1.012500000000e+00 5.625000000000e-01 1.125000000000e-01 1.158258390861e+00 1.163709048689e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 5.625000000000e-01 1.125000000000e-01 1.224362078799e+00 1.229519723307e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 5.625000000000e-01 1.125000000000e-01 1.291438151829e+00 1.296328951308e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +4.186955793615e-02 7.384639956202e-01 1.256200074540e-01 7.396500069013e-01 7.502416403945e-01 2.507811435527e+00 8.202572059914e-02 4.906213408061e-02 2.334812247522e-01 1.682243704704e-04 4.218750000000e-04 +1.249362321867e-01 7.329074184128e-01 1.249362321867e-01 7.434798894910e-01 7.539041107400e-01 2.601717733500e+00 8.285507026493e-02 4.776944239459e-02 2.303848046556e-01 1.621524866314e-04 4.218750000000e-04 +2.060305930202e-01 7.219464675608e-01 1.235898070358e-01 7.507698097844e-01 7.608743310737e-01 2.788770873171e+00 8.435064586789e-02 4.536979714578e-02 2.245236863174e-01 1.512763217870e-04 4.218750000000e-04 +2.839907188670e-01 7.061916470317e-01 1.216438835878e-01 7.611552868765e-01 7.708142481521e-01 2.938291270583e+00 8.086782316446e-02 4.128308720143e-02 2.141730536050e-01 1.435783457629e-04 4.218750000000e-04 +3.580608828827e-01 6.871639170439e-01 1.192548679406e-01 7.748560154880e-01 7.839793162230e-01 2.712780625828e+00 5.948151986467e-02 3.288960373263e-02 1.911648611732e-01 1.555138649928e-04 4.218750000000e-04 +4.284489960969e-01 6.677280306509e-01 1.167411214037e-01 7.933657827089e-01 8.019088193803e-01 2.083750656572e+00 2.659079717296e-02 1.914153962406e-02 1.458368175739e-01 2.024594443051e-04 4.218750000000e-04 +4.968789176846e-01 6.517391953554e-01 1.145791597245e-01 8.195441645219e-01 8.275149675052e-01 1.505743325274e+00 6.483992355518e-03 6.459260599085e-03 8.471691815220e-02 2.801772340072e-04 4.218750000000e-04 +5.662081734256e-01 6.420606789279e-01 1.131961292620e-01 8.560570139187e-01 8.635085261648e-01 1.174908623356e+00 6.995460609376e-04 8.931069791702e-04 3.150144580756e-02 3.590704771534e-04 4.218750000000e-04 +6.383048175242e-01 6.383048175242e-01 1.126277464877e-01 9.026993298708e-01 9.096983507889e-01 1.037280136724e+00 1.633802546914e-05 2.362624843190e-05 5.123610752834e-03 4.067126951187e-04 4.218750000000e-04 +7.125615369358e-01 6.375500627064e-01 1.125079255367e-01 9.561454002280e-01 9.627419486476e-01 1.002800752351e+00 1.647314415507e-08 2.464070372373e-08 1.654646780828e-04 4.206967326372e-04 4.218750000000e-04 +7.875008893743e-01 6.375005964975e-01 1.125000885026e-01 1.013195273035e+00 1.019421861259e+00 1.000038945031e+00 1.167838064920e-13 1.751688877803e-13 4.411712791351e-07 4.218585707049e-04 4.218750000000e-04 +8.625000009101e-01 6.375000005087e-01 1.125000000665e-01 1.072526224490e+00 1.078410289377e+00 1.000000037743e+00 6.666667685683e-15 1.000000115110e-14 1.054092614058e-07 4.218749840773e-04 4.218750000000e-04 +9.375000000000e-01 6.375000000000e-01 1.125000000000e-01 1.133716234337e+00 1.139284314822e+00 1.000000000000e+00 6.666666666671e-15 1.000000000000e-14 1.054092553390e-07 4.218749999998e-04 4.218750000000e-04 +1.012500000000e+00 6.375000000000e-01 1.125000000000e-01 1.196479210016e+00 1.201756526922e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 6.375000000000e-01 1.125000000000e-01 1.260580223548e+00 1.265590277301e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 6.375000000000e-01 1.125000000000e-01 1.325825214725e+00 1.330589624941e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.943674509720e-02 7.627706410319e-01 1.183239484904e-01 7.637894393641e-01 7.729002940034e-01 2.993948406346e+00 7.965239082298e-02 3.990669511246e-02 2.105724871563e-01 1.409092418245e-04 4.218750000000e-04 +1.178358077925e-01 7.584525710444e-01 1.178358077925e-01 7.675516791213e-01 7.765441762836e-01 2.831152357814e+00 6.841996781260e-02 3.625023974272e-02 2.006939066304e-01 1.490117615308e-04 4.218750000000e-04 +1.948952522393e-01 7.503839673954e-01 1.169209236599e-01 7.752807606729e-01 7.840476772869e-01 2.472359941643e+00 4.674327377501e-02 2.835950764350e-02 1.775121518329e-01 1.706365618105e-04 4.218750000000e-04 +2.701017565932e-01 7.399313280868e-01 1.157300761636e-01 7.876885991298e-01 7.961449489433e-01 1.992369633619e+00 2.354533315668e-02 1.772663020911e-02 1.403433496390e-01 2.117453472896e-04 4.218750000000e-04 +3.435851278437e-01 7.292150425168e-01 1.144973867095e-01 8.061050293282e-01 8.141959038656e-01 1.557598873535e+00 8.143644820967e-03 7.842498758186e-03 9.334820570903e-02 2.708495795471e-04 4.218750000000e-04 +4.161742013467e-01 7.205177650716e-01 1.134786874123e-01 8.320738042087e-01 8.397762964904e-01 1.259321501815e+00 1.739696670916e-03 2.072183316661e-03 4.798360040056e-02 3.350018239122e-04 4.218750000000e-04 +4.890399869792e-01 7.152453972319e-01 1.128438031177e-01 8.664502796618e-01 8.737675955470e-01 1.093819921159e+00 1.711447864485e-04 2.346978462421e-04 1.614854125652e-02 3.856896293798e-04 4.218750000000e-04 +5.628933648655e-01 7.130825929528e-01 1.125745891357e-01 9.084798977314e-01 9.154281854417e-01 1.022627510329e+00 4.529014479307e-06 6.643202583874e-06 2.716861462111e-03 4.125402414259e-04 4.218750000000e-04 +6.375500627064e-01 7.125615369358e-01 1.125079255367e-01 9.561454002280e-01 9.627419486476e-01 1.002800752351e+00 1.647314415507e-08 2.464070372373e-08 1.654646780828e-04 4.206967326372e-04 4.218750000000e-04 +7.125020549559e-01 7.125020549559e-01 1.125002564114e-01 1.007630069337e+00 1.013890854247e+00 1.000107983099e+00 1.862899038182e-12 2.794046847437e-12 1.761958142849e-06 4.218294495490e-04 4.218750000000e-04 +7.875000106904e-01 7.125000086631e-01 1.125000009972e-01 1.061985183127e+00 1.067927328710e+00 1.000000514596e+00 6.667175052051e-15 1.000075743173e-14 1.054132472791e-07 4.218747829050e-04 4.218750000000e-04 +8.625000000021e-01 7.125000000014e-01 1.125000000001e-01 1.118732541766e+00 1.124374826295e+00 1.000000000095e+00 6.666666667719e-15 1.000000000063e-14 1.054092553423e-07 4.218749999601e-04 4.218750000000e-04 +9.375000000000e-01 7.125000000000e-01 1.125000000000e-01 1.177523885108e+00 1.182885772169e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 7.125000000000e-01 1.125000000000e-01 1.238068051441e+00 1.243168834069e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 7.125000000000e-01 1.125000000000e-01 1.300120186752e+00 1.304978448098e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 7.125000000000e-01 1.125000000000e-01 1.363474422202e+00 1.368107726022e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.795483461785e-02 8.005920524102e-01 1.138683852438e-01 8.014912375399e-01 8.095395067637e-01 1.410681303046e+00 4.736183526788e-03 5.036059721526e-03 7.480388969035e-02 2.990576249143e-04 4.218750000000e-04 +1.136825910994e-01 7.987863751225e-01 1.136825910994e-01 8.068354259701e-01 8.148049681485e-01 1.345319749911e+00 3.344270202044e-03 3.728782918261e-03 6.436685584524e-02 3.135871602480e-04 4.218750000000e-04 +1.889510507492e-01 7.957427201446e-01 1.133672761909e-01 8.178685568246e-01 8.256882677823e-01 1.244148042387e+00 1.616798394324e-03 1.949283774006e-03 4.653891769268e-02 3.390874603560e-04 4.218750000000e-04 +2.637249349063e-01 7.924281062424e-01 1.130208567819e-01 8.351605503460e-01 8.427733140779e-01 1.143792126595e+00 5.029659803463e-04 6.596032207056e-04 2.707198676586e-02 3.688388739448e-04 4.218750000000e-04 +3.382367272118e-01 7.897871416024e-01 1.127424628782e-01 8.591669294587e-01 8.665325588870e-01 1.068344316136e+00 8.695704047596e-05 1.220913133939e-04 1.164718914082e-02 3.948867360721e-04 4.218750000000e-04 +4.128031823094e-01 7.882638456557e-01 1.125809151375e-01 8.898125407594e-01 8.969062493627e-01 1.024427599860e+00 6.314974967222e-06 9.246590439506e-06 3.205306440456e-03 4.118153396664e-04 4.218750000000e-04 +4.875782861272e-01 7.876650161727e-01 1.125173520862e-01 9.263631916291e-01 9.331714297629e-01 1.005842230148e+00 1.384898275312e-07 2.065281562758e-07 4.790362503979e-04 4.194246248120e-04 4.218750000000e-04 +5.625107782388e-01 7.875191663087e-01 1.125019802511e-01 9.677834535362e-01 9.743005226822e-01 1.000758515197e+00 5.006420776219e-10 7.503939312325e-10 2.887509367435e-05 4.215552439412e-04 4.218750000000e-04 +6.375005964975e-01 7.875008893743e-01 1.125000885026e-01 1.013195273035e+00 1.019421861259e+00 1.000038945031e+00 1.167838064920e-13 1.751688877803e-13 4.411712791351e-07 4.218585707049e-04 4.218750000000e-04 +7.125000086631e-01 7.875000106904e-01 1.125000009972e-01 1.061985183127e+00 1.067927328710e+00 1.000000514596e+00 6.667175052051e-15 1.000075743173e-14 1.054132472791e-07 4.218747829050e-04 4.218750000000e-04 +7.875000000134e-01 7.875000000134e-01 1.125000000011e-01 1.113693180388e+00 1.119360866764e+00 1.000000000716e+00 6.666666674664e-15 1.000000000483e-14 1.054092553644e-07 4.218749996978e-04 4.218750000000e-04 +8.625000000000e-01 7.875000000000e-01 1.125000000000e-01 1.167930862680e+00 1.173336588537e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 7.875000000000e-01 1.125000000000e-01 1.224362078799e+00 1.229519723307e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 7.875000000000e-01 1.125000000000e-01 1.282697353237e+00 1.287621353504e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 7.875000000000e-01 1.125000000000e-01 1.342688534248e+00 1.347393316742e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 7.875000000000e-01 1.125000000000e-01 1.404123392014e+00 1.408622997825e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.752580000480e-02 8.633463760082e-01 1.125775062396e-01 8.641615304054e-01 8.714636226164e-01 1.021885614085e+00 4.127247548338e-06 6.058282098480e-06 2.594498902267e-03 4.128397485834e-04 4.218750000000e-04 +1.125610454361e-01 8.631696333854e-01 1.125610454361e-01 8.704779175536e-01 8.777253522020e-01 1.017556747593e+00 2.468798165007e-06 3.639302924647e-06 2.010887842789e-03 4.145960419386e-04 4.218750000000e-04 +1.875619216442e-01 8.629099387331e-01 1.125370242651e-01 8.830589090288e-01 8.902008866799e-01 1.011086194257e+00 8.117955180758e-07 1.204341710954e-06 1.156787558982e-03 4.172492932809e-04 4.218750000000e-04 +2.625390954762e-01 8.626862418681e-01 1.125165764885e-01 9.017507020025e-01 9.087432577723e-01 1.005297898964e+00 1.225094471748e-07 1.827957374143e-07 4.506732462713e-04 4.196517275473e-04 4.218750000000e-04 +3.375158417827e-01 8.625590639033e-01 1.125051514156e-01 9.262424532357e-01 9.330501011581e-01 1.001798508180e+00 6.706586493273e-09 1.004181944549e-08 1.056294332166e-04 4.211176165219e-04 4.218750000000e-04 +4.125039148035e-01 8.625119321344e-01 1.125010139433e-01 9.560786122503e-01 9.626748105880e-01 1.000393524846e+00 1.005238370870e-10 1.507264410310e-10 1.294116777450e-05 4.217090470123e-04 4.218750000000e-04 +4.875005217075e-01 8.625013227533e-01 1.125001086550e-01 9.907397692716e-01 9.971065965400e-01 1.000047398591e+00 2.606079770129e-13 3.908934377213e-13 6.590341735544e-07 4.218550046673e-04 4.218750000000e-04 +5.625000299308e-01 8.625000637247e-01 1.125000049667e-01 1.029714836058e+00 1.035842118624e+00 1.000002464641e+00 6.719885991121e-15 1.007980414358e-14 1.058290242880e-07 4.218739602320e-04 4.218750000000e-04 +6.375000005087e-01 8.625000009101e-01 1.125000000665e-01 1.072526224490e+00 1.078410289377e+00 1.000000037743e+00 6.666667685682e-15 1.000000115110e-14 1.054092614058e-07 4.218749840773e-04 4.218750000000e-04 +7.125000000014e-01 8.625000000021e-01 1.125000000001e-01 1.118732541766e+00 1.124374826295e+00 1.000000000095e+00 6.666666667718e-15 1.000000000063e-14 1.054092553423e-07 4.218749999601e-04 4.218750000000e-04 +7.875000000000e-01 8.625000000000e-01 1.125000000000e-01 1.167930862680e+00 1.173336588537e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 8.625000000000e-01 1.125000000000e-01 1.219759197547e+00 1.224936222830e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 8.625000000000e-01 1.125000000000e-01 1.273896581360e+00 1.278854467873e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 8.625000000000e-01 1.125000000000e-01 1.330061088823e+00 1.334810379792e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 8.625000000000e-01 1.125000000000e-01 1.388006664249e+00 1.392558347072e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 8.625000000000e-01 1.125000000000e-01 1.447519429921e+00 1.451884551195e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750007034088e-02 9.375031459148e-01 1.125002124347e-01 9.382528464523e-01 9.449733867542e-01 1.000081636658e+00 8.739736842992e-13 1.310853512748e-12 1.206857035052e-06 4.218405623461e-04 4.218750000000e-04 +1.125001504027e-01 9.375022381863e-01 1.125001504027e-01 9.442281135641e-01 9.509064172070e-01 1.000059168748e+00 4.304706205896e-13 6.456677275333e-13 8.469997556954e-07 4.218500396613e-04 4.218750000000e-04 +1.875001246548e-01 9.375011076905e-01 1.125000737060e-01 9.560672694253e-01 9.626634356047e-01 1.000030370654e+00 8.630185040164e-14 1.294488441564e-13 3.792519598667e-07 4.218621877696e-04 4.218750000000e-04 +2.625000577539e-01 9.375003627328e-01 1.125000237780e-01 9.735569888019e-01 9.800354410913e-01 1.000010481469e+00 1.112672435054e-14 1.668991159102e-14 1.361776274292e-07 4.218705781765e-04 4.218750000000e-04 +3.375000150082e-01 9.375000718346e-01 1.125000046112e-01 9.963998418409e-01 1.002730719514e+00 1.000002213574e+00 6.724204955860e-15 1.008628510705e-14 1.058630410119e-07 4.218740661505e-04 4.218750000000e-04 +4.125000019477e-01 9.375000073838e-01 1.125000004590e-01 1.024237528824e+00 1.030397382350e+00 1.000000243321e+00 6.666784864604e-15 1.000017486365e-14 1.054101769473e-07 4.218748973489e-04 4.218750000000e-04 +4.875000001019e-01 9.375000003146e-01 1.125000000185e-01 1.056675210597e+00 1.062647048974e+00 1.000000011025e+00 6.666666833974e-15 1.000000014071e-14 1.054092560806e-07 4.218749953489e-04 4.218750000000e-04 +5.625000000016e-01 9.375000000041e-01 1.125000000002e-01 1.093303480288e+00 1.099076316736e+00 1.000000000152e+00 6.666666668359e-15 1.000000000102e-14 1.054092553443e-07 4.218749999358e-04 4.218750000000e-04 +6.375000000000e-01 9.375000000000e-01 1.125000000000e-01 1.133716234337e+00 1.139284314822e+00 1.000000000000e+00 6.666666666671e-15 1.000000000000e-14 1.054092553390e-07 4.218749999998e-04 4.218750000000e-04 +7.125000000000e-01 9.375000000000e-01 1.125000000000e-01 1.177523885108e+00 1.182885772169e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.875000000000e-01 9.375000000000e-01 1.125000000000e-01 1.224362078799e+00 1.229519723307e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 9.375000000000e-01 1.125000000000e-01 1.273896581360e+00 1.278854467873e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 9.375000000000e-01 1.125000000000e-01 1.325825214725e+00 1.330589624941e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 9.375000000000e-01 1.125000000000e-01 1.379877711973e+00 1.384456120648e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 9.375000000000e-01 1.125000000000e-01 1.435814228931e+00 1.440214827725e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 9.375000000000e-01 1.125000000000e-01 1.493423081381e+00 1.497654416079e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750000000059e-02 1.012500000042e+00 1.125000000018e-01 1.013194206500e+00 1.019420791472e+00 1.000000001097e+00 6.666666679035e-15 1.000000000758e-14 1.054092553789e-07 4.218749995370e-04 4.218750000000e-04 +1.125000000012e-01 1.012500000027e+00 1.125000000012e-01 1.018730828067e+00 1.024923777681e+00 1.000000000721e+00 6.666666674737e-15 1.000000000490e-14 1.054092553647e-07 4.218749996958e-04 4.218750000000e-04 +1.875000000008e-01 1.012500000011e+00 1.125000000005e-01 1.029714766342e+00 1.035842048781e+00 1.000000000300e+00 6.666666670004e-15 1.000000000201e-14 1.054092553495e-07 4.218749998735e-04 4.218750000000e-04 +2.625000000003e-01 1.012500000003e+00 1.125000000001e-01 1.045974426076e+00 1.052007010435e+00 1.000000000072e+00 6.666666667470e-15 1.000000000048e-14 1.054092553415e-07 4.218749999695e-04 4.218750000000e-04 +3.375000000000e-01 1.012500000000e+00 1.125000000000e-01 1.067268710307e+00 1.073181601594e+00 1.000000000009e+00 6.666666666761e-15 1.000000000006e-14 1.054092553392e-07 4.218749999964e-04 4.218750000000e-04 +4.125000000000e-01 1.012500000000e+00 1.125000000000e-01 1.093303480284e+00 1.099076316731e+00 1.000000000000e+00 6.666666666671e-15 1.000000000000e-14 1.054092553390e-07 4.218749999998e-04 4.218750000000e-04 +4.875000000000e-01 1.012500000000e+00 1.125000000000e-01 1.123749304783e+00 1.129366525978e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +5.625000000000e-01 1.012500000000e+00 1.125000000000e-01 1.158258390861e+00 1.163709048689e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +6.375000000000e-01 1.012500000000e+00 1.125000000000e-01 1.196479210016e+00 1.201756526922e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.125000000000e-01 1.012500000000e+00 1.125000000000e-01 1.238068051441e+00 1.243168834069e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.875000000000e-01 1.012500000000e+00 1.125000000000e-01 1.282697353237e+00 1.287621353504e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 1.012500000000e+00 1.125000000000e-01 1.330061088823e+00 1.334810379792e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 1.012500000000e+00 1.125000000000e-01 1.379877711973e+00 1.384456120648e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 1.012500000000e+00 1.125000000000e-01 1.431891231903e+00 1.436303850165e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 1.012500000000e+00 1.125000000000e-01 1.485870956712e+00 1.490123736473e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 1.012500000000e+00 1.125000000000e-01 1.541610359332e+00 1.545709788414e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750000000000e-02 1.087500000000e+00 1.125000000000e-01 1.088146359641e+00 1.093946410936e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.125000000000e-01 1.087500000000e+00 1.125000000000e-01 1.093303480283e+00 1.099076316731e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.875000000000e-01 1.087500000000e+00 1.125000000000e-01 1.103545422717e+00 1.109264959331e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +2.625000000000e-01 1.087500000000e+00 1.125000000000e-01 1.118732541763e+00 1.124374826292e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +3.375000000000e-01 1.087500000000e+00 1.125000000000e-01 1.138666983802e+00 1.144210972679e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.125000000000e-01 1.087500000000e+00 1.125000000000e-01 1.163104681445e+00 1.168532733816e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.875000000000e-01 1.087500000000e+00 1.125000000000e-01 1.191768643655e+00 1.197066727463e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +5.625000000000e-01 1.087500000000e+00 1.125000000000e-01 1.224362078799e+00 1.229519723307e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +6.375000000000e-01 1.087500000000e+00 1.125000000000e-01 1.260580223548e+00 1.265590277301e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.125000000000e-01 1.087500000000e+00 1.125000000000e-01 1.300120186752e+00 1.304978448098e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.875000000000e-01 1.087500000000e+00 1.125000000000e-01 1.342688534248e+00 1.347393316742e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 1.087500000000e+00 1.125000000000e-01 1.388006664249e+00 1.392558347072e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 1.087500000000e+00 1.125000000000e-01 1.435814228931e+00 1.440214827725e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 1.087500000000e+00 1.125000000000e-01 1.485870956712e+00 1.490123736473e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 1.087500000000e+00 1.125000000000e-01 1.537957249081e+00 1.542066389621e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 1.087500000000e+00 1.125000000000e-01 1.591873895759e+00 1.595844212322e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750000000000e-02 1.162500000000e+00 1.125000000000e-01 1.163104681445e+00 1.168532733816e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.125000000000e-01 1.162500000000e+00 1.125000000000e-01 1.167930862680e+00 1.173336588537e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.875000000000e-01 1.162500000000e+00 1.125000000000e-01 1.177523885108e+00 1.182885772169e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +2.625000000000e-01 1.162500000000e+00 1.125000000000e-01 1.191768643655e+00 1.197066727463e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.375000000000e-01 1.162500000000e+00 1.125000000000e-01 1.210500929368e+00 1.215717380809e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +4.125000000000e-01 1.162500000000e+00 1.125000000000e-01 1.233516315255e+00 1.238635842369e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +4.875000000000e-01 1.162500000000e+00 1.125000000000e-01 1.260580223548e+00 1.265590277302e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +5.625000000000e-01 1.162500000000e+00 1.125000000000e-01 1.291438151829e+00 1.296328951308e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +6.375000000000e-01 1.162500000000e+00 1.125000000000e-01 1.325825214725e+00 1.330589624941e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +7.125000000000e-01 1.162500000000e+00 1.125000000000e-01 1.363474422202e+00 1.368107726022e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +7.875000000000e-01 1.162500000000e+00 1.125000000000e-01 1.404123392014e+00 1.408622997825e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +8.625000000000e-01 1.162500000000e+00 1.125000000000e-01 1.447519429921e+00 1.451884551195e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +9.375000000000e-01 1.162500000000e+00 1.125000000000e-01 1.493423081381e+00 1.497654416079e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.012500000000e+00 1.162500000000e+00 1.125000000000e-01 1.541610359332e+00 1.545709788414e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.087500000000e+00 1.162500000000e+00 1.125000000000e-01 1.591873895759e+00 1.595844212322e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.162500000000e+00 1.162500000000e+00 1.125000000000e-01 1.644023266259e+00 1.647867940704e+00 9.999999999977e-01 6.666666666641e-15 9.999999999984e-15 1.054092553389e-07 4.218750000010e-04 4.218750000000e-04 +9.287007960711e-02 9.287007960711e-02 4.987160449565e-01 1.313381261190e-01 5.157202699812e-01 2.050452519898e-01 3.826622189108e-02 2.799349523074e-01 5.577085582068e-01 2.057472659845e-03 4.218750000000e-04 +2.679769788166e-01 8.977377330050e-02 4.681902577391e-01 2.826145635813e-01 5.468757710761e-01 2.097728791291e-01 3.830482617702e-02 2.739021340798e-01 5.516662981669e-01 2.011103636235e-03 4.218750000000e-04 +4.107215318056e-01 8.116700006499e-02 4.107215318056e-01 4.186648523441e-01 5.864916327425e-01 2.624613868136e-01 3.954369470601e-02 2.259972134535e-01 5.011067899643e-01 1.607379299187e-03 4.218750000000e-04 +5.091463904947e-01 6.989623459320e-02 3.485910661996e-01 5.139217163772e-01 6.209921593694e-01 4.442264927491e-01 4.054572281985e-02 1.369089534787e-01 3.900269983228e-01 9.496844670141e-04 4.218750000000e-04 +5.742634567455e-01 6.000582452885e-02 2.992782326149e-01 5.773900040100e-01 6.503435071158e-01 7.091590976384e-01 4.458727378093e-02 9.431016381813e-02 3.237114006473e-01 5.948947160163e-04 4.218750000000e-04 +6.238962233680e-01 5.295884217948e-02 2.646200229795e-01 6.261398697558e-01 6.797609087462e-01 1.008716087860e+00 4.896241459026e-02 7.280901213858e-02 2.844273235401e-01 4.182296734208e-04 4.218750000000e-04 +6.650434377606e-01 4.801636952264e-02 2.400644141640e-01 6.667745839866e-01 7.086743037521e-01 1.417815253743e+00 5.736395288813e-02 6.068909831873e-02 2.596773603248e-01 2.975528714946e-04 4.218750000000e-04 +6.990695284168e-01 4.433717608044e-02 2.217460791982e-01 7.004741185395e-01 7.347348599212e-01 2.006739392721e+00 7.134601473567e-02 5.332980579923e-02 2.434241971886e-01 2.102290917945e-04 4.218750000000e-04 +7.273349024846e-01 4.141271943991e-02 2.071354663353e-01 7.285129193800e-01 7.573877310319e-01 2.698142302634e+00 8.347627423107e-02 4.640763803465e-02 2.270771724783e-01 1.563575796533e-04 4.218750000000e-04 +7.542694714971e-01 3.911709259872e-02 1.956325809298e-01 7.552831141803e-01 7.802081063968e-01 2.655364825735e+00 5.706476336929e-02 3.223554979125e-02 1.892545311105e-01 1.588764737377e-04 4.218750000000e-04 +7.971472633109e-01 3.783683667367e-02 1.891952562990e-01 7.980447265746e-01 8.201647582161e-01 1.289745217446e+00 2.313266682337e-03 2.690376344545e-03 5.467455577775e-02 3.270994877852e-04 4.218750000000e-04 +8.630236485609e-01 3.751581324251e-02 1.875794452057e-01 8.638386737225e-01 8.839701932092e-01 1.013940257291e+00 1.390035593179e-06 2.056386828292e-06 1.511580052018e-03 4.160748100950e-04 4.218750000000e-04 +9.375015694569e-01 3.750003471599e-02 1.875001773281e-01 9.382512698302e-01 9.568028855705e-01 1.000042246986e+00 1.726535111232e-13 2.589693260112e-13 5.364174638917e-07 4.218571778056e-04 4.218750000000e-04 +1.012500000017e+00 3.750000000024e-02 1.875000000013e-01 1.013194206475e+00 1.030397374820e+00 1.000000000461e+00 6.666666671804e-15 1.000000000310e-14 1.054092553553e-07 4.218749998056e-04 4.218750000000e-04 +1.087500000000e+00 3.750000000000e-02 1.875000000000e-01 1.088146359641e+00 1.104182389825e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 3.750000000000e-02 1.875000000000e-01 1.163104681445e+00 1.178120855430e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +8.977377330050e-02 2.679769788166e-01 4.681902577391e-01 2.826145635813e-01 5.468757710761e-01 2.097728791291e-01 3.830482617702e-02 2.739021340798e-01 5.516662981669e-01 2.011103636235e-03 4.218750000000e-04 +2.576822509962e-01 2.576822509962e-01 4.420211980168e-01 3.644177341417e-01 5.728726075256e-01 2.359991051485e-01 3.898662115126e-02 2.477972604603e-01 5.247192481703e-01 1.787612710372e-03 4.218750000000e-04 +3.952319802353e-01 2.349379812617e-01 3.952319802353e-01 4.597870955562e-01 6.063105569267e-01 3.066668047087e-01 4.019081773671e-02 1.965854330479e-01 4.673630911209e-01 1.375678728582e-03 4.218750000000e-04 +4.949421831262e-01 2.049220289062e-01 3.417327685571e-01 5.356872245712e-01 6.354070252008e-01 4.843070405527e-01 4.170049349794e-02 1.291551330237e-01 3.788214663396e-01 8.710899587968e-04 4.218750000000e-04 +5.641395875848e-01 1.777130280900e-01 2.960324743901e-01 5.914688450234e-01 6.614156185991e-01 7.391919671038e-01 4.484605566122e-02 9.100353695049e-02 3.179859132982e-01 5.707245462271e-04 4.218750000000e-04 +6.162654384075e-01 1.575574105931e-01 2.625808393044e-01 6.360875947606e-01 6.881541436176e-01 1.050494771669e+00 4.952147552967e-02 7.071164492944e-02 2.803007213085e-01 4.015964775623e-04 4.218750000000e-04 +6.584891827673e-01 1.430993937692e-01 2.385236405180e-01 6.738586204232e-01 7.148279285287e-01 1.487611309321e+00 5.884026376340e-02 5.933028008867e-02 2.567538382028e-01 2.835922242299e-04 4.218750000000e-04 +6.931410406145e-01 1.322412101987e-01 2.204484790087e-01 7.056431391709e-01 7.392765191430e-01 2.071339659902e+00 7.155290295600e-02 5.181639521115e-02 2.399453530636e-01 2.036725353002e-04 4.218750000000e-04 +7.219464675608e-01 1.235898070358e-01 2.060305930202e-01 7.324487302376e-01 7.608743310737e-01 2.788770873171e+00 8.435064586789e-02 4.536979714578e-02 2.245236863174e-01 1.512763217870e-04 4.218750000000e-04 +7.503839673954e-01 1.169209236599e-01 1.948952522393e-01 7.594383456961e-01 7.840476772869e-01 2.472359941643e+00 4.674327377501e-02 2.835950764350e-02 1.775121518329e-01 1.706365618105e-04 4.218750000000e-04 +7.957427201446e-01 1.133672761909e-01 1.889510507492e-01 8.037777155247e-01 8.256882677823e-01 1.244148042387e+00 1.616798394324e-03 1.949283774006e-03 4.653891769268e-02 3.390874603560e-04 4.218750000000e-04 +8.629099387331e-01 1.125370242651e-01 1.875619216442e-01 8.702172971131e-01 8.902008866799e-01 1.011086194257e+00 8.117955180759e-07 1.204341710954e-06 1.156787558982e-03 4.172492932809e-04 4.218750000000e-04 +9.375011076905e-01 1.125000737060e-01 1.875001246548e-01 9.442269819830e-01 9.626634356047e-01 1.000030370654e+00 8.630185040165e-14 1.294488441565e-13 3.792519598667e-07 4.218621877696e-04 4.218750000000e-04 +1.012500000011e+00 1.125000000005e-01 1.875000000008e-01 1.018730828051e+00 1.035842048781e+00 1.000000000300e+00 6.666666670004e-15 1.000000000201e-14 1.054092553495e-07 4.218749998735e-04 4.218750000000e-04 +1.087500000000e+00 1.125000000000e-01 1.875000000000e-01 1.093303480283e+00 1.109264959331e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 1.125000000000e-01 1.875000000000e-01 1.167930862680e+00 1.182885772169e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +8.116700006499e-02 4.107215318056e-01 4.107215318056e-01 4.186648523441e-01 5.864916327425e-01 2.624613868136e-01 3.954369470601e-02 2.259972134535e-01 5.011067899643e-01 1.607379299187e-03 4.218750000000e-04 +2.349379812617e-01 3.952319802353e-01 3.952319802353e-01 4.597870955562e-01 6.063105569267e-01 3.066668047087e-01 4.019081773671e-02 1.965854330479e-01 4.673630911209e-01 1.375678728582e-03 4.218750000000e-04 +3.657815617493e-01 3.657815617493e-01 3.657815617493e-01 5.172932454919e-01 6.335522494217e-01 4.211167130390e-01 4.084426334215e-02 1.454855462066e-01 4.020579645975e-01 1.001800657484e-03 4.218750000000e-04 +4.677942784999e-01 3.270552237372e-01 3.270552237372e-01 5.707859549525e-01 6.578462782025e-01 5.709208899749e-01 4.350009381295e-02 1.142892857227e-01 3.563538904621e-01 7.389377537378e-04 4.218750000000e-04 +5.436126647237e-01 2.890847651964e-01 2.890847651964e-01 6.156985713128e-01 6.801872772886e-01 8.098844067153e-01 4.552185107052e-02 8.431175614644e-02 3.060714443583e-01 5.209076708997e-04 4.218750000000e-04 +6.004748903567e-01 2.583909352344e-01 2.583909352344e-01 6.537093921309e-01 7.029237830459e-01 1.141066749267e+00 5.064923700771e-02 6.658142966691e-02 2.719914820294e-01 3.697198260058e-04 4.218750000000e-04 +6.451175741251e-01 2.353919086533e-01 2.353919086533e-01 6.867212208055e-01 7.259444784307e-01 1.615400638830e+00 6.089808864353e-02 5.654766425713e-02 2.506606033334e-01 2.611581237864e-04 4.218750000000e-04 +6.813080314875e-01 2.178538187818e-01 2.178538187818e-01 7.152907941021e-01 7.477307045220e-01 2.203511602412e+00 7.169824329133e-02 4.880726056504e-02 2.328739777577e-01 1.914557652151e-04 4.218750000000e-04 +7.114117472899e-01 2.038619642450e-01 2.038619642450e-01 7.400448463762e-01 7.676106272804e-01 2.918467008610e+00 8.323761738407e-02 4.278151019276e-02 2.180252538705e-01 1.445536299555e-04 4.218750000000e-04 +7.432399499305e-01 1.935347825237e-01 1.935347825237e-01 7.680243063986e-01 7.920334887273e-01 2.137759349064e+00 2.990434138122e-02 2.098295680076e-02 1.526905250672e-01 1.973444766759e-04 4.218750000000e-04 +7.934099285729e-01 1.885433704587e-01 1.885433704587e-01 8.155047009686e-01 8.370164394119e-01 1.172608389336e+00 7.629881505155e-04 9.760140181338e-04 3.293114058378e-02 3.597748437046e-04 4.218750000000e-04 +8.627458839410e-01 1.875368119247e-01 1.875368119247e-01 8.828932642647e-01 9.025910324787e-01 1.006876970631e+00 2.539094756885e-07 3.782629106058e-07 6.482994083719e-04 4.189935933640e-04 4.218750000000e-04 +9.375005389556e-01 1.875000601742e-01 1.875000601742e-01 9.560666990892e-01 9.742791210288e-01 1.000015321809e+00 2.117667381164e-14 3.176452402749e-14 1.878667495490e-07 4.218685362108e-04 4.218750000000e-04 +1.012500000004e+00 1.875000000003e-01 1.875000000003e-01 1.029714766335e+00 1.046646430276e+00 1.000000000122e+00 6.666666668026e-15 1.000000000082e-14 1.054092553432e-07 4.218749999484e-04 4.218750000000e-04 +1.087500000000e+00 1.875000000000e-01 1.875000000000e-01 1.103545422717e+00 1.119360866745e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 1.875000000000e-01 1.875000000000e-01 1.177523885108e+00 1.192358482169e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +6.989623459320e-02 5.091463904947e-01 3.485910661996e-01 5.139217163772e-01 6.209921593694e-01 4.442264927491e-01 4.054572281985e-02 1.369089534787e-01 3.900269983228e-01 9.496844670141e-04 4.218750000000e-04 +2.049220289062e-01 4.949421831262e-01 3.417327685571e-01 5.356872245712e-01 6.354070252008e-01 4.843070405527e-01 4.170049349794e-02 1.291551330237e-01 3.788214663396e-01 8.710899587968e-04 4.218750000000e-04 +3.270552237372e-01 4.677942784999e-01 3.270552237372e-01 5.707859549525e-01 6.578462782025e-01 5.709208899749e-01 4.350009381295e-02 1.142892857227e-01 3.563538904621e-01 7.389377537378e-04 4.218750000000e-04 +4.306079514080e-01 4.306079514080e-01 3.044018263962e-01 6.089716049468e-01 6.808134014140e-01 7.190957464299e-01 4.452257865593e-02 9.287201087678e-02 3.212337516458e-01 5.866743088031e-04 4.218750000000e-04 +5.131088111329e-01 3.898750624646e-01 2.773886684017e-01 6.444247173984e-01 7.015894025366e-01 9.467379264237e-01 4.784196040311e-02 7.580021735873e-02 2.902110675559e-01 4.456090626829e-04 4.218750000000e-04 +5.763170639743e-01 3.528652959065e-01 2.516826801555e-01 6.757627359386e-01 7.211098714991e-01 1.299161952159e+00 5.337130613688e-02 6.162200106945e-02 2.616656073640e-01 3.247285677501e-04 4.218750000000e-04 +6.249900842775e-01 3.230327581326e-01 2.305761647044e-01 7.035359040390e-01 7.403567626501e-01 1.789416108259e+00 6.244854103876e-02 5.234825545930e-02 2.411736475822e-01 2.357612620412e-04 4.218750000000e-04 +6.638252046893e-01 2.996700199942e-01 2.139507874357e-01 7.283309846932e-01 7.591053699642e-01 2.419216488874e+00 7.324202911458e-02 4.541265495549e-02 2.246297075324e-01 1.743849721347e-04 4.218750000000e-04 +6.965155723329e-01 2.811498886857e-01 2.007625490502e-01 7.511186340453e-01 7.774862079235e-01 2.885717381705e+00 7.219861895645e-02 3.752894483752e-02 2.042029079059e-01 1.461941500837e-04 4.218750000000e-04 +7.342184170226e-01 2.685595703446e-01 1.918064066518e-01 7.817934041157e-01 8.049786483824e-01 1.748377875476e+00 1.415938565576e-02 1.214787648686e-02 1.161793464474e-01 2.412950918205e-04 4.218750000000e-04 +7.909330106114e-01 2.633545533248e-01 1.881077137024e-01 8.336250044424e-01 8.545847880614e-01 1.100811283649e+00 2.259412839682e-04 3.078746838684e-04 1.849548545121e-02 3.832400759933e-04 4.218750000000e-04 +8.626084424299e-01 2.625225893542e-01 1.875160156460e-01 9.016714672610e-01 9.209634580136e-01 1.003196761164e+00 3.581502868952e-08 5.355135215144e-08 2.439292979338e-04 4.205306639053e-04 4.218750000000e-04 +9.375001717462e-01 2.625000272042e-01 1.875000189447e-01 9.735567966515e-01 9.914479781666e-01 1.000005142715e+00 7.425786644295e-15 1.113862268368e-14 1.112485839294e-07 4.218728304281e-04 4.218750000000e-04 +1.012500000001e+00 2.625000000001e-01 1.875000000001e-01 1.045974426075e+00 1.062647048649e+00 1.000000000029e+00 6.666666666985e-15 1.000000000019e-14 1.054092553400e-07 4.218749999879e-04 4.218750000000e-04 +1.087500000000e+00 2.625000000000e-01 1.875000000000e-01 1.118732541763e+00 1.134336259669e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 2.625000000000e-01 1.875000000000e-01 1.191768643655e+00 1.206428095661e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +6.000582452885e-02 5.742634567455e-01 2.992782326149e-01 5.773900040100e-01 6.503435071158e-01 7.091590976384e-01 4.458727378093e-02 9.431016381813e-02 3.237114006473e-01 5.948947160163e-04 4.218750000000e-04 +1.777130280900e-01 5.641395875848e-01 2.960324743901e-01 5.914688450234e-01 6.614156185991e-01 7.391919671038e-01 4.484605566122e-02 9.100353695049e-02 3.179859132982e-01 5.707245462271e-04 4.218750000000e-04 +2.890847651964e-01 5.436126647237e-01 2.890847651964e-01 6.156985713128e-01 6.801872772886e-01 8.098844067153e-01 4.552185107052e-02 8.431175614644e-02 3.060714443583e-01 5.209076708997e-04 4.218750000000e-04 +3.898750624646e-01 5.131088111329e-01 2.773886684017e-01 6.444247173984e-01 7.015894025366e-01 9.467379264237e-01 4.784196040311e-02 7.580021735873e-02 2.902110675559e-01 4.456090626829e-04 4.218750000000e-04 +4.758901694434e-01 4.758901694434e-01 2.608902543128e-01 6.730103318268e-01 7.218078910216e-01 1.170646287196e+00 5.088051875421e-02 6.519542150868e-02 2.691456060051e-01 3.603778567568e-04 4.218750000000e-04 +5.450992386002e-01 4.377661460123e-01 2.419324465319e-01 6.991225776050e-01 7.397997615584e-01 1.536036497398e+00 5.751706085099e-02 5.616767011893e-02 2.498169777144e-01 2.746516770367e-04 4.218750000000e-04 +5.990101020776e-01 4.039758023072e-01 2.239455315927e-01 7.225022845921e-01 7.564133475562e-01 2.032064826258e+00 6.432415448542e-02 4.748186695686e-02 2.296902913753e-01 2.076090263207e-04 4.218750000000e-04 +6.415091414620e-01 3.762417706426e-01 2.087810694225e-01 7.437014512260e-01 7.724515412017e-01 2.685933849407e+00 7.423185301739e-02 4.145589049063e-02 2.146208297094e-01 1.570682763066e-04 4.218750000000e-04 +6.789894969509e-01 3.548694817475e-01 1.970399943130e-01 7.661325512243e-01 7.910650070659e-01 2.470845373904e+00 4.508816531075e-02 2.737210862340e-02 1.743945355394e-01 1.707411578465e-04 4.218750000000e-04 +7.252822006383e-01 3.421882527840e-01 1.900745629013e-01 8.019520377841e-01 8.241695276872e-01 1.415732928517e+00 4.602068952600e-03 4.875992703037e-03 7.360550027030e-02 2.979905259686e-04 4.218750000000e-04 +7.890313469961e-01 3.379934335567e-01 1.877713508104e-01 8.583763904430e-01 8.786740623548e-01 1.046849204224e+00 3.597505695647e-05 5.154762043755e-05 7.568033682503e-03 4.029950047224e-04 4.218750000000e-04 +8.625330667307e-01 3.375088212344e-01 1.875047942523e-01 9.262156852564e-01 9.450045203504e-01 1.001044161532e+00 1.778481556111e-09 2.664939706640e-09 5.441547682864e-05 4.214349538330e-04 4.218750000000e-04 +9.375000327927e-01 3.375000068324e-01 1.875000035520e-01 9.963998023375e-01 1.013887970848e+00 1.000001045283e+00 6.675478719414e-15 1.001320761248e-14 1.054788425993e-07 4.218745590215e-04 4.218750000000e-04 +1.012500000000e+00 3.375000000000e-01 1.875000000000e-01 1.067268710307e+00 1.083613745760e+00 1.000000000003e+00 6.666666666704e-15 1.000000000002e-14 1.054092553391e-07 4.218749999986e-04 4.218750000000e-04 +1.087500000000e+00 3.375000000000e-01 1.875000000000e-01 1.138666983802e+00 1.154001191507e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 3.375000000000e-01 1.875000000000e-01 1.210500929368e+00 1.224936222830e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +5.295884217948e-02 6.238962233680e-01 2.646200229795e-01 6.261398697558e-01 6.797609087462e-01 1.008716087860e+00 4.896241459026e-02 7.280901213858e-02 2.844273235401e-01 4.182296734208e-04 4.218750000000e-04 +1.575574105931e-01 6.162654384075e-01 2.625808393044e-01 6.360875947606e-01 6.881541436176e-01 1.050494771669e+00 4.952147552967e-02 7.071164492944e-02 2.803007213085e-01 4.015964775623e-04 4.218750000000e-04 +2.583909352344e-01 6.004748903567e-01 2.583909352344e-01 6.537093921309e-01 7.029237830459e-01 1.141066749267e+00 5.064923700771e-02 6.658142966691e-02 2.719914820294e-01 3.697198260058e-04 4.218750000000e-04 +3.528652959065e-01 5.763170639743e-01 2.516826801555e-01 6.757627359386e-01 7.211098714991e-01 1.299161952159e+00 5.337130613688e-02 6.162200106945e-02 2.616656073640e-01 3.247285677501e-04 4.218750000000e-04 +4.377661460123e-01 5.450992386002e-01 2.419324465319e-01 6.991225776050e-01 7.397997615584e-01 1.536036497398e+00 5.751706085099e-02 5.616767011893e-02 2.498169777144e-01 2.746516770367e-04 4.218750000000e-04 +5.102071387003e-01 5.102071387003e-01 2.293012671709e-01 7.215418551696e-01 7.571008650687e-01 1.864536855744e+00 6.085998932320e-02 4.896121184387e-02 2.332409622969e-01 2.262626231819e-04 4.218750000000e-04 +5.689413467002e-01 4.760712865650e-01 2.153981807600e-01 7.418477781032e-01 7.724859235943e-01 2.395571387416e+00 6.867141351817e-02 4.299897753762e-02 2.185786853938e-01 1.761062109091e-04 4.218750000000e-04 +6.163226973657e-01 4.465621132607e-01 2.025979323713e-01 7.610988032365e-01 7.876022539894e-01 2.685125058848e+00 6.142666525674e-02 3.431497448563e-02 1.952632823356e-01 1.571155870785e-04 4.218750000000e-04 +6.617658374297e-01 4.254503370901e-01 1.932559234890e-01 7.867286780835e-01 8.101171920671e-01 1.857827753986e+00 1.751470134039e-02 1.414127437499e-02 1.253496193984e-01 2.270797166717e-04 4.218750000000e-04 +7.183502349100e-01 4.151998706423e-01 1.887033284483e-01 8.297095832739e-01 8.508977251962e-01 1.190317692526e+00 9.079361580739e-04 1.144151889586e-03 3.565501195229e-02 3.544221871598e-04 4.218750000000e-04 +7.879860262308e-01 4.126928809289e-01 1.875859176426e-01 8.895152564765e-01 9.090796818774e-01 1.016082378279e+00 2.328920026704e-06 3.438087417648e-06 1.954506876611e-03 4.151976345801e-04 4.218750000000e-04 +8.625063595632e-01 4.125020814656e-01 1.875009005935e-01 9.560727940384e-01 9.742852637825e-01 1.000217300928e+00 2.315471655028e-11 3.472452915301e-11 6.211506272235e-06 4.217833460874e-04 4.218750000000e-04 +9.375000032520e-01 4.125000008545e-01 1.875000003418e-01 1.024237524602e+00 1.041258256597e+00 1.000000110551e+00 6.666685521146e-15 1.000002717621e-14 1.054093985700e-07 4.218749533613e-04 4.218750000000e-04 +1.012500000000e+00 4.125000000000e-01 1.875000000000e-01 1.093303480283e+00 1.109264959331e+00 1.000000000000e+00 6.666666666668e-15 1.000000000000e-14 1.054092553390e-07 4.218749999999e-04 4.218750000000e-04 +1.087500000000e+00 4.125000000000e-01 1.875000000000e-01 1.163104681445e+00 1.178120855430e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 4.125000000000e-01 1.875000000000e-01 1.233516315255e+00 1.247685356971e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +4.801636952264e-02 6.650434377606e-01 2.400644141640e-01 6.667745839866e-01 7.086743037521e-01 1.417815253743e+00 5.736395288813e-02 6.068909831873e-02 2.596773603248e-01 2.975528714946e-04 4.218750000000e-04 +1.430993937692e-01 6.584891827673e-01 2.385236405180e-01 6.738586204232e-01 7.148279285287e-01 1.487611309321e+00 5.884026376340e-02 5.933028008867e-02 2.567538382028e-01 2.835922242299e-04 4.218750000000e-04 +2.353919086533e-01 6.451175741251e-01 2.353919086533e-01 6.867212208055e-01 7.259444784307e-01 1.615400638830e+00 6.089808864353e-02 5.654766425713e-02 2.506606033334e-01 2.611581237864e-04 4.218750000000e-04 +3.230327581326e-01 6.249900842775e-01 2.305761647044e-01 7.035359040390e-01 7.403567626501e-01 1.789416108259e+00 6.244854103876e-02 5.234825545930e-02 2.411736475822e-01 2.357612620412e-04 4.218750000000e-04 +4.039758023072e-01 5.990101020776e-01 2.239455315927e-01 7.225022845921e-01 7.564133475562e-01 2.032064826258e+00 6.432415448542e-02 4.748186695686e-02 2.296902913753e-01 2.076090263207e-04 4.218750000000e-04 +4.760712865650e-01 5.689413467002e-01 2.153981807600e-01 7.418477781032e-01 7.724859235943e-01 2.395571387416e+00 6.867141351817e-02 4.299897753762e-02 2.185786853938e-01 1.761062109091e-04 4.218750000000e-04 +5.379161727032e-01 5.379161727032e-01 2.054800544060e-01 7.607283468567e-01 7.879909076062e-01 2.633068196197e+00 6.348624244988e-02 3.616669093962e-02 2.004624956323e-01 1.602218281354e-04 4.218750000000e-04 +5.921272785598e-01 5.112674125667e-01 1.961945942638e-01 7.823100927172e-01 8.065366699572e-01 2.122765701553e+00 2.892017847296e-02 2.043573046131e-02 1.506863204781e-01 1.987383721583e-04 4.218750000000e-04 +6.483178810461e-01 4.946948619777e-01 1.901645402908e-01 8.154992834768e-01 8.373778321255e-01 1.385213175220e+00 3.798155800202e-03 4.112893092716e-03 6.760089654826e-02 3.045560117005e-04 4.218750000000e-04 +7.143851867622e-01 4.885634836624e-01 1.878966520530e-01 8.654712431004e-01 8.856328948760e-01 1.066394125101e+00 7.779372103853e-05 1.094253792393e-04 1.102650237883e-02 3.956088936254e-04 4.218750000000e-04 +7.875984362688e-01 4.875467341755e-01 1.875172593956e-01 9.262899733984e-01 9.450798047729e-01 1.003616873949e+00 4.326128408414e-08 6.465806605151e-08 2.680341314325e-04 4.203546302883e-04 4.218750000000e-04 +8.625006668447e-01 4.875002625589e-01 1.875000915179e-01 9.907390707459e-01 1.008325438845e+00 1.000024697944e+00 5.603376791463e-14 8.404857604495e-14 3.055933682471e-07 4.218645808124e-04 4.218750000000e-04 +9.375000001323e-01 4.875000000428e-01 1.875000000133e-01 1.056675210407e+00 1.073181601731e+00 1.000000004772e+00 6.666666728096e-15 1.000000004442e-14 1.054092555731e-07 4.218749979869e-04 4.218750000000e-04 +1.012500000000e+00 4.875000000000e-01 1.875000000000e-01 1.123749304783e+00 1.139284314822e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 4.875000000000e-01 1.875000000000e-01 1.191768643655e+00 1.206428095661e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 4.875000000000e-01 1.875000000000e-01 1.260580223548e+00 1.274448410098e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +4.433717608044e-02 6.990695284168e-01 2.217460791982e-01 7.004741185395e-01 7.347348599212e-01 2.006739392721e+00 7.134601473567e-02 5.332980579923e-02 2.434241971886e-01 2.102290917945e-04 4.218750000000e-04 +1.322412101987e-01 6.931410406145e-01 2.204484790087e-01 7.056431391709e-01 7.392765191430e-01 2.071339659902e+00 7.155290295600e-02 5.181639521115e-02 2.399453530636e-01 2.036725353002e-04 4.218750000000e-04 +2.178538187818e-01 6.813080314875e-01 2.178538187818e-01 7.152907941021e-01 7.477307045220e-01 2.203511602412e+00 7.169824329133e-02 4.880726056504e-02 2.328739777577e-01 1.914557652151e-04 4.218750000000e-04 +2.996700199942e-01 6.638252046893e-01 2.139507874357e-01 7.283309846932e-01 7.591053699642e-01 2.419216488874e+00 7.324202911458e-02 4.541265495549e-02 2.246297075324e-01 1.743849721347e-04 4.218750000000e-04 +3.762417706426e-01 6.415091414620e-01 2.087810694225e-01 7.437014512260e-01 7.724515412017e-01 2.685933849407e+00 7.423185301739e-02 4.145589049063e-02 2.146208297094e-01 1.570682763066e-04 4.218750000000e-04 +4.465621132607e-01 6.163226973657e-01 2.025979323713e-01 7.610988032365e-01 7.876022539894e-01 2.685125058848e+00 6.142666525674e-02 3.431497448563e-02 1.952632823356e-01 1.571155870785e-04 4.218750000000e-04 +5.112674125667e-01 5.921272785598e-01 1.961945942638e-01 7.823100927172e-01 8.065366699572e-01 2.122765701553e+00 2.892017847296e-02 2.043573046131e-02 1.506863204781e-01 1.987383721583e-04 4.218750000000e-04 +5.740803958516e-01 5.740803958516e-01 1.910379649538e-01 8.118722817059e-01 8.340456257640e-01 1.485809425617e+00 6.106895081638e-03 6.165220427681e-03 8.276620638670e-02 2.839361446538e-04 4.218750000000e-04 +6.407131371607e-01 5.651272718548e-01 1.883239949981e-01 8.543314096557e-01 8.748417483273e-01 1.127089160637e+00 3.497077074428e-04 4.654126572097e-04 2.274038642322e-02 3.743049039364e-04 4.218750000000e-04 +7.128701329277e-01 5.627509769238e-01 1.875792954359e-01 9.082249107181e-01 9.273933795996e-01 1.014972972197e+00 1.693257264891e-06 2.502417273080e-06 1.667472229681e-03 4.156514622126e-04 4.218750000000e-04 +7.875105870116e-01 5.625059625707e-01 1.875018227896e-01 9.677736732227e-01 9.857701639492e-01 1.000434064710e+00 1.252041937315e-10 1.877248058838e-10 1.444240692020e-05 4.216919584023e-04 4.218750000000e-04 +8.625000300126e-01 5.625000140968e-01 1.875000039342e-01 1.029714799170e+00 1.046646463284e+00 1.000001197468e+00 6.675379008520e-15 1.001305652246e-14 1.054780468074e-07 4.218744948188e-04 4.218750000000e-04 +9.375000000016e-01 5.625000000006e-01 1.875000000002e-01 1.093303480285e+00 1.109264959333e+00 1.000000000062e+00 6.666666667361e-15 1.000000000042e-14 1.054092553411e-07 4.218749999737e-04 4.218750000000e-04 +1.012500000000e+00 5.625000000000e-01 1.875000000000e-01 1.158258390861e+00 1.173336588537e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 5.625000000000e-01 1.875000000000e-01 1.224362078799e+00 1.238635842369e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 5.625000000000e-01 1.875000000000e-01 1.291438151829e+00 1.304978448098e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +4.141271943991e-02 7.273349024846e-01 2.071354663353e-01 7.285129193800e-01 7.573877310319e-01 2.698142302634e+00 8.347627423107e-02 4.640763803465e-02 2.270771724783e-01 1.563575796533e-04 4.218750000000e-04 +1.235898070358e-01 7.219464675608e-01 2.060305930202e-01 7.324487302376e-01 7.608743310737e-01 2.788770873171e+00 8.435064586788e-02 4.536979714578e-02 2.245236863174e-01 1.512763217870e-04 4.218750000000e-04 +2.038619642450e-01 7.114117472899e-01 2.038619642450e-01 7.400448463762e-01 7.676106272804e-01 2.918467008610e+00 8.323761738406e-02 4.278151019276e-02 2.180252538705e-01 1.445536299555e-04 4.218750000000e-04 +2.811498886857e-01 6.965155723329e-01 2.007625490502e-01 7.511186340453e-01 7.774862079235e-01 2.885717381705e+00 7.219861895645e-02 3.752894483752e-02 2.042029079059e-01 1.461941500837e-04 4.218750000000e-04 +3.548694817475e-01 6.789894969509e-01 1.970399943130e-01 7.661325512243e-01 7.910650070659e-01 2.470845373904e+00 4.508816531075e-02 2.737210862340e-02 1.743945355394e-01 1.707411578465e-04 4.218750000000e-04 +4.254503370901e-01 6.617658374297e-01 1.932559234890e-01 7.867286780835e-01 8.101171920671e-01 1.857827753986e+00 1.751470134039e-02 1.414127437499e-02 1.253496193984e-01 2.270797166717e-04 4.218750000000e-04 +4.946948619777e-01 6.483178810461e-01 1.901645402908e-01 8.154992834768e-01 8.373778321255e-01 1.385213175220e+00 3.798155800202e-03 4.112893092716e-03 6.760089654826e-02 3.045560117005e-04 4.218750000000e-04 +5.651272718548e-01 6.407131371607e-01 1.883239949981e-01 8.543314096557e-01 8.748417483273e-01 1.127089160637e+00 3.497077074428e-04 4.654126572097e-04 2.274038642322e-02 3.743049039364e-04 4.218750000000e-04 +6.380130794248e-01 6.380130794248e-01 1.876358409602e-01 9.022867498940e-01 9.215902494315e-01 1.024650939317e+00 6.124015455340e-06 8.965026850152e-06 3.156127523503e-03 4.117255777673e-04 4.218750000000e-04 +7.125352512003e-01 6.375287644859e-01 1.875075656036e-01 9.561116094630e-01 9.743246363038e-01 1.001667392320e+00 4.599765542496e-09 6.888163043588e-09 8.748436713422e-05 4.211727398083e-04 4.218750000000e-04 +7.875004494282e-01 6.375003020690e-01 1.875000748037e-01 1.013194745835e+00 1.030397918786e+00 1.000020345453e+00 2.816443910373e-14 4.224579914568e-14 2.166558949776e-07 4.218664169367e-04 4.218750000000e-04 +8.625000003965e-01 6.375000002218e-01 1.875000000491e-01 1.072526223906e+00 1.088792336024e+00 1.000000016937e+00 6.666666964132e-15 1.000000027683e-14 1.054092567980e-07 4.218749928547e-04 4.218750000000e-04 +9.375000000000e-01 6.375000000000e-01 1.875000000000e-01 1.133716234337e+00 1.149116508453e+00 1.000000000000e+00 6.666666666669e-15 1.000000000000e-14 1.054092553390e-07 4.218749999999e-04 4.218750000000e-04 +1.012500000000e+00 6.375000000000e-01 1.875000000000e-01 1.196479210016e+00 1.211081644647e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 6.375000000000e-01 1.875000000000e-01 1.260580223548e+00 1.274448410097e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 6.375000000000e-01 1.875000000000e-01 1.325825214725e+00 1.339017830352e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.911709259872e-02 7.542694714971e-01 1.956325809298e-01 7.552831141803e-01 7.802081063968e-01 2.655364825735e+00 5.706476336929e-02 3.223554979125e-02 1.892545311105e-01 1.588764737377e-04 4.218750000000e-04 +1.169209236599e-01 7.503839673954e-01 1.948952522393e-01 7.594383456961e-01 7.840476772869e-01 2.472359941643e+00 4.674327377501e-02 2.835950764350e-02 1.775121518329e-01 1.706365618105e-04 4.218750000000e-04 +1.935347825237e-01 7.432399499305e-01 1.935347825237e-01 7.680243063986e-01 7.920334887273e-01 2.137759349064e+00 2.990434138122e-02 2.098295680076e-02 1.526905250672e-01 1.973444766759e-04 4.218750000000e-04 +2.685595703446e-01 7.342184170226e-01 1.918064066518e-01 7.817934041157e-01 8.049786483824e-01 1.748377875476e+00 1.415938565576e-02 1.214787648686e-02 1.161793464474e-01 2.412950918205e-04 4.218750000000e-04 +3.421882527840e-01 7.252822006383e-01 1.900745629013e-01 8.019520377841e-01 8.241695276872e-01 1.415732928517e+00 4.602068952600e-03 4.875992703036e-03 7.360550027030e-02 2.979905259686e-04 4.218750000000e-04 +4.151998706423e-01 7.183502349100e-01 1.887033284483e-01 8.297095832739e-01 8.508977251962e-01 1.190317692526e+00 9.079361580739e-04 1.144151889586e-03 3.565501195229e-02 3.544221871598e-04 4.218750000000e-04 +4.885634836624e-01 7.143851867622e-01 1.878966520530e-01 8.654712431004e-01 8.856328948760e-01 1.066394125101e+00 7.779372103853e-05 1.094253792393e-04 1.102650237883e-02 3.956088936254e-04 4.218750000000e-04 +5.627509769238e-01 7.128701329277e-01 1.875792954359e-01 9.082249107181e-01 9.273933795996e-01 1.014972972197e+00 1.693257264891e-06 2.502417273080e-06 1.667472229681e-03 4.156514622126e-04 4.218750000000e-04 +6.375287644859e-01 7.125352512003e-01 1.875075656036e-01 9.561116094630e-01 9.743246363038e-01 1.001667392320e+00 4.599765542496e-09 6.888163043588e-09 8.748436713422e-05 4.211727398083e-04 4.218750000000e-04 +7.125010393169e-01 7.125010393169e-01 1.875002163854e-01 1.007628633007e+00 1.024925262251e+00 1.000056471844e+00 3.696931107582e-13 5.545083520280e-13 7.849333673263e-07 4.218511772860e-04 4.218750000000e-04 +7.875000048336e-01 7.125000039237e-01 1.875000007613e-01 1.061985175605e+00 1.078410294596e+00 1.000000240157e+00 6.666748253051e-15 1.000011997798e-14 1.054098876765e-07 4.218748986840e-04 4.218750000000e-04 +8.625000000009e-01 7.125000000006e-01 1.875000000001e-01 1.118732541764e+00 1.134336259670e+00 1.000000000039e+00 6.666666667100e-15 1.000000000026e-14 1.054092553403e-07 4.218749999835e-04 4.218750000000e-04 +9.375000000000e-01 7.125000000000e-01 1.875000000000e-01 1.177523885108e+00 1.192358482169e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 7.125000000000e-01 1.875000000000e-01 1.238068051441e+00 1.252185589280e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 7.125000000000e-01 1.875000000000e-01 1.300120186752e+00 1.313570991610e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 7.125000000000e-01 1.875000000000e-01 1.363474422202e+00 1.376306197763e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.783683667367e-02 7.971472633109e-01 1.891952562990e-01 7.980447265746e-01 8.201647582161e-01 1.289745217446e+00 2.313266682337e-03 2.690376344545e-03 5.467455577775e-02 3.270994877852e-04 4.218750000000e-04 +1.133672761909e-01 7.957427201446e-01 1.889510507492e-01 8.037777155247e-01 8.256882677823e-01 1.244148042387e+00 1.616798394324e-03 1.949283774006e-03 4.653891769268e-02 3.390874603560e-04 4.218750000000e-04 +1.885433704587e-01 7.934099285729e-01 1.885433704587e-01 8.155047009686e-01 8.370164394119e-01 1.172608389336e+00 7.629881505154e-04 9.760140181338e-04 3.293114058378e-02 3.597748437046e-04 4.218750000000e-04 +2.633545533248e-01 7.909330106114e-01 1.881077137024e-01 8.336250044424e-01 8.545847880614e-01 1.100811283649e+00 2.259412839682e-04 3.078746838684e-04 1.849548545121e-02 3.832400759933e-04 4.218750000000e-04 +3.379934335567e-01 7.890313469961e-01 1.877713508104e-01 8.583763904430e-01 8.786740623548e-01 1.046849204224e+00 3.597505695647e-05 5.154762043755e-05 7.568033682503e-03 4.029950047224e-04 4.218750000000e-04 +4.126928809289e-01 7.879860262308e-01 1.875859176426e-01 8.895152564765e-01 9.090796818774e-01 1.016082378279e+00 2.328920026704e-06 3.438087417648e-06 1.954506876611e-03 4.151976345801e-04 4.218750000000e-04 +4.875467341755e-01 7.875984362688e-01 1.875172593956e-01 9.262899733984e-01 9.450798047729e-01 1.003616873949e+00 4.326128408414e-08 6.465806605151e-08 2.680341314325e-04 4.203546302883e-04 4.218750000000e-04 +5.625059625707e-01 7.875105870116e-01 1.875018227896e-01 9.677736732227e-01 9.857701639492e-01 1.000434064710e+00 1.252041937315e-10 1.877248058838e-10 1.444240692020e-05 4.216919584023e-04 4.218750000000e-04 +6.375003020690e-01 7.875004494282e-01 1.875000748037e-01 1.013194745835e+00 1.030397918786e+00 1.000020345453e+00 2.816443910373e-14 4.224579914568e-14 2.166558949776e-07 4.218664169367e-04 4.218750000000e-04 +7.125000039237e-01 7.875000048336e-01 1.875000007613e-01 1.061985175605e+00 1.078410294596e+00 1.000000240157e+00 6.666748253051e-15 1.000011997798e-14 1.054098876765e-07 4.218748986840e-04 4.218750000000e-04 +7.875000000054e-01 7.875000000054e-01 1.875000000008e-01 1.113693180376e+00 1.129366525986e+00 1.000000000295e+00 6.666666669950e-15 1.000000000197e-14 1.054092553493e-07 4.218749998755e-04 4.218750000000e-04 +8.625000000000e-01 7.875000000000e-01 1.875000000000e-01 1.167930862680e+00 1.182885772169e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 7.875000000000e-01 1.875000000000e-01 1.224362078799e+00 1.238635842369e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 7.875000000000e-01 1.875000000000e-01 1.282697353237e+00 1.296328951308e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 7.875000000000e-01 1.875000000000e-01 1.342688534248e+00 1.355717061189e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 7.875000000000e-01 1.875000000000e-01 1.404123392014e+00 1.416587007564e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.751581324251e-02 8.630236485609e-01 1.875794452057e-01 8.638386737225e-01 8.839701932092e-01 1.013940257291e+00 1.390035593179e-06 2.056386828292e-06 1.511580052018e-03 4.160748100950e-04 4.218750000000e-04 +1.125370242651e-01 8.629099387331e-01 1.875619216442e-01 8.702172971131e-01 8.902008866799e-01 1.011086194257e+00 8.117955180758e-07 1.204341710954e-06 1.156787558982e-03 4.172492932809e-04 4.218750000000e-04 +1.875368119247e-01 8.627458839410e-01 1.875368119247e-01 8.828932642647e-01 9.025910324787e-01 1.006876970631e+00 2.539094756885e-07 3.782629106058e-07 6.482994083719e-04 4.189935933640e-04 4.218750000000e-04 +2.625225893542e-01 8.626084424299e-01 1.875160156460e-01 9.016714672610e-01 9.209634580136e-01 1.003196761164e+00 3.581502868952e-08 5.355135215144e-08 2.439292979338e-04 4.205306639053e-04 4.218750000000e-04 +3.375088212344e-01 8.625330667307e-01 1.875047942523e-01 9.262156852564e-01 9.450045203504e-01 1.001044161532e+00 1.778481556111e-09 2.664939706640e-09 5.441547682864e-05 4.214349538330e-04 4.218750000000e-04 +4.125020814656e-01 8.625063595632e-01 1.875009005935e-01 9.560727940384e-01 9.742852637825e-01 1.000217300928e+00 2.315471655028e-11 3.472452915301e-11 6.211506272235e-06 4.217833460874e-04 4.218750000000e-04 +4.875002625589e-01 8.625006668447e-01 1.875000915179e-01 9.907390707459e-01 1.008325438845e+00 1.000024697944e+00 5.603376791463e-14 8.404857604495e-14 3.055933682471e-07 4.218645808124e-04 4.218750000000e-04 +5.625000140968e-01 8.625000300126e-01 1.875000039342e-01 1.029714799170e+00 1.046646463284e+00 1.000001197468e+00 6.675379008520e-15 1.001305652246e-14 1.054780468074e-07 4.218744948188e-04 4.218750000000e-04 +6.375000002218e-01 8.625000003965e-01 1.875000000491e-01 1.072526223906e+00 1.088792336024e+00 1.000000016937e+00 6.666666964132e-15 1.000000027683e-14 1.054092567980e-07 4.218749928547e-04 4.218750000000e-04 +7.125000000006e-01 8.625000000009e-01 1.875000000001e-01 1.118732541764e+00 1.134336259670e+00 1.000000000039e+00 6.666666667100e-15 1.000000000026e-14 1.054092553403e-07 4.218749999835e-04 4.218750000000e-04 +7.875000000000e-01 8.625000000000e-01 1.875000000000e-01 1.167930862680e+00 1.182885772169e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 8.625000000000e-01 1.875000000000e-01 1.219759197547e+00 1.234086200393e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 8.625000000000e-01 1.875000000000e-01 1.273896581360e+00 1.287621353504e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 8.625000000000e-01 1.875000000000e-01 1.330061088823e+00 1.343212101643e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 8.625000000000e-01 1.875000000000e-01 1.388006664249e+00 1.400613704774e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 8.625000000000e-01 1.875000000000e-01 1.447519429921e+00 1.459612534202e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750003471599e-02 9.375015694569e-01 1.875001773281e-01 9.382512698302e-01 9.568028855705e-01 1.000042246986e+00 1.726535111232e-13 2.589693260112e-13 5.364174638917e-07 4.218571778056e-04 4.218750000000e-04 +1.125000737060e-01 9.375011076905e-01 1.875001246548e-01 9.442269819830e-01 9.626634356047e-01 1.000030370654e+00 8.630185040164e-14 1.294488441564e-13 3.792519598667e-07 4.218621877696e-04 4.218750000000e-04 +1.875000601742e-01 9.375005389556e-01 1.875000601742e-01 9.560666990892e-01 9.742791210288e-01 1.000015321809e+00 2.117667381164e-14 3.176452402749e-14 1.878667495490e-07 4.218685362108e-04 4.218750000000e-04 +2.625000272042e-01 9.375001717462e-01 1.875000189447e-01 9.735567966515e-01 9.914479781666e-01 1.000005142715e+00 7.425786644295e-15 1.113862268368e-14 1.112485839294e-07 4.218728304281e-04 4.218750000000e-04 +3.375000068324e-01 9.375000327927e-01 1.875000035520e-01 9.963998023375e-01 1.013887970848e+00 1.000001045283e+00 6.675478719414e-15 1.001320761248e-14 1.054788425993e-07 4.218745590215e-04 4.218750000000e-04 +4.125000008545e-01 9.375000032520e-01 1.875000003418e-01 1.024237524602e+00 1.041258256597e+00 1.000000110551e+00 6.666685521146e-15 1.000002717621e-14 1.054093985700e-07 4.218749533613e-04 4.218750000000e-04 +4.875000000428e-01 9.375000001323e-01 1.875000000133e-01 1.056675210407e+00 1.073181601731e+00 1.000000004772e+00 6.666666728096e-15 1.000000004442e-14 1.054092555731e-07 4.218749979869e-04 4.218750000000e-04 +5.625000000006e-01 9.375000000016e-01 1.875000000002e-01 1.093303480285e+00 1.109264959333e+00 1.000000000062e+00 6.666666667361e-15 1.000000000042e-14 1.054092553411e-07 4.218749999737e-04 4.218750000000e-04 +6.375000000000e-01 9.375000000000e-01 1.875000000000e-01 1.133716234337e+00 1.149116508453e+00 1.000000000000e+00 6.666666666668e-15 1.000000000000e-14 1.054092553390e-07 4.218749999999e-04 4.218750000000e-04 +7.125000000000e-01 9.375000000000e-01 1.875000000000e-01 1.177523885108e+00 1.192358482169e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.875000000000e-01 9.375000000000e-01 1.875000000000e-01 1.224362078799e+00 1.238635842369e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 9.375000000000e-01 1.875000000000e-01 1.273896581360e+00 1.287621353504e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 9.375000000000e-01 1.875000000000e-01 1.325825214725e+00 1.339017830352e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 9.375000000000e-01 1.875000000000e-01 1.379877711973e+00 1.392558347072e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 9.375000000000e-01 1.875000000000e-01 1.435814228931e+00 1.448005093223e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 9.375000000000e-01 1.875000000000e-01 1.493423081381e+00 1.505147418029e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750000000024e-02 1.012500000017e+00 1.875000000013e-01 1.013194206475e+00 1.030397374820e+00 1.000000000461e+00 6.666666671804e-15 1.000000000310e-14 1.054092553553e-07 4.218749998056e-04 4.218750000000e-04 +1.125000000005e-01 1.012500000011e+00 1.875000000008e-01 1.018730828051e+00 1.035842048781e+00 1.000000000300e+00 6.666666670004e-15 1.000000000201e-14 1.054092553495e-07 4.218749998735e-04 4.218750000000e-04 +1.875000000003e-01 1.012500000004e+00 1.875000000003e-01 1.029714766335e+00 1.046646430276e+00 1.000000000122e+00 6.666666668026e-15 1.000000000082e-14 1.054092553432e-07 4.218749999484e-04 4.218750000000e-04 +2.625000000001e-01 1.012500000001e+00 1.875000000001e-01 1.045974426075e+00 1.062647048649e+00 1.000000000029e+00 6.666666666985e-15 1.000000000019e-14 1.054092553400e-07 4.218749999879e-04 4.218750000000e-04 +3.375000000000e-01 1.012500000000e+00 1.875000000000e-01 1.067268710307e+00 1.083613745760e+00 1.000000000003e+00 6.666666666704e-15 1.000000000002e-14 1.054092553391e-07 4.218749999986e-04 4.218750000000e-04 +4.125000000000e-01 1.012500000000e+00 1.875000000000e-01 1.093303480283e+00 1.109264959331e+00 1.000000000000e+00 6.666666666668e-15 1.000000000000e-14 1.054092553390e-07 4.218749999999e-04 4.218750000000e-04 +4.875000000000e-01 1.012500000000e+00 1.875000000000e-01 1.123749304783e+00 1.139284314822e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +5.625000000000e-01 1.012500000000e+00 1.875000000000e-01 1.158258390861e+00 1.173336588537e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +6.375000000000e-01 1.012500000000e+00 1.875000000000e-01 1.196479210016e+00 1.211081644647e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.125000000000e-01 1.012500000000e+00 1.875000000000e-01 1.238068051441e+00 1.252185589280e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.875000000000e-01 1.012500000000e+00 1.875000000000e-01 1.282697353237e+00 1.296328951308e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 1.012500000000e+00 1.875000000000e-01 1.330061088823e+00 1.343212101643e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 1.012500000000e+00 1.875000000000e-01 1.379877711973e+00 1.392558347072e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 1.012500000000e+00 1.875000000000e-01 1.431891231903e+00 1.444115213548e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 1.012500000000e+00 1.875000000000e-01 1.485870956712e+00 1.497654416079e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 1.012500000000e+00 1.875000000000e-01 1.541610359332e+00 1.552970943064e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750000000000e-02 1.087500000000e+00 1.875000000000e-01 1.088146359641e+00 1.104182389825e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.125000000000e-01 1.087500000000e+00 1.875000000000e-01 1.093303480283e+00 1.109264959331e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.875000000000e-01 1.087500000000e+00 1.875000000000e-01 1.103545422717e+00 1.119360866745e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +2.625000000000e-01 1.087500000000e+00 1.875000000000e-01 1.118732541763e+00 1.134336259669e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +3.375000000000e-01 1.087500000000e+00 1.875000000000e-01 1.138666983802e+00 1.154001191507e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.125000000000e-01 1.087500000000e+00 1.875000000000e-01 1.163104681445e+00 1.178120855430e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.875000000000e-01 1.087500000000e+00 1.875000000000e-01 1.191768643655e+00 1.206428095661e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +5.625000000000e-01 1.087500000000e+00 1.875000000000e-01 1.224362078799e+00 1.238635842369e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +6.375000000000e-01 1.087500000000e+00 1.875000000000e-01 1.260580223548e+00 1.274448410097e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.125000000000e-01 1.087500000000e+00 1.875000000000e-01 1.300120186752e+00 1.313570991610e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.875000000000e-01 1.087500000000e+00 1.875000000000e-01 1.342688534248e+00 1.355717061189e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 1.087500000000e+00 1.875000000000e-01 1.388006664249e+00 1.400613704774e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 1.087500000000e+00 1.875000000000e-01 1.435814228931e+00 1.448005093223e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 1.087500000000e+00 1.875000000000e-01 1.485870956712e+00 1.497654416079e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 1.087500000000e+00 1.875000000000e-01 1.537957249081e+00 1.549344619509e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 1.087500000000e+00 1.875000000000e-01 1.591873895759e+00 1.602878270487e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750000000000e-02 1.162500000000e+00 1.875000000000e-01 1.163104681445e+00 1.178120855430e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.125000000000e-01 1.162500000000e+00 1.875000000000e-01 1.167930862680e+00 1.182885772169e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.875000000000e-01 1.162500000000e+00 1.875000000000e-01 1.177523885108e+00 1.192358482169e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +2.625000000000e-01 1.162500000000e+00 1.875000000000e-01 1.191768643655e+00 1.206428095661e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.375000000000e-01 1.162500000000e+00 1.875000000000e-01 1.210500929368e+00 1.224936222830e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +4.125000000000e-01 1.162500000000e+00 1.875000000000e-01 1.233516315255e+00 1.247685356971e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +4.875000000000e-01 1.162500000000e+00 1.875000000000e-01 1.260580223548e+00 1.274448410098e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +5.625000000000e-01 1.162500000000e+00 1.875000000000e-01 1.291438151829e+00 1.304978448098e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +6.375000000000e-01 1.162500000000e+00 1.875000000000e-01 1.325825214725e+00 1.339017830352e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +7.125000000000e-01 1.162500000000e+00 1.875000000000e-01 1.363474422202e+00 1.376306197763e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +7.875000000000e-01 1.162500000000e+00 1.875000000000e-01 1.404123392014e+00 1.416587007564e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +8.625000000000e-01 1.162500000000e+00 1.875000000000e-01 1.447519429921e+00 1.459612534202e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +9.375000000000e-01 1.162500000000e+00 1.875000000000e-01 1.493423081381e+00 1.505147418029e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.012500000000e+00 1.162500000000e+00 1.875000000000e-01 1.541610359332e+00 1.552970943064e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.087500000000e+00 1.162500000000e+00 1.875000000000e-01 1.591873895759e+00 1.602878270487e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.162500000000e+00 1.162500000000e+00 1.875000000000e-01 1.644023266259e+00 1.654680860468e+00 9.999999999976e-01 6.666666666640e-15 9.999999999984e-15 1.054092553389e-07 4.218750000010e-04 4.218750000000e-04 +7.396085053276e-02 7.396085053276e-02 5.552469511893e-01 1.045964379081e-01 5.650129127976e-01 3.910858591352e-01 4.010146816322e-02 1.538081749564e-01 4.133980795477e-01 1.078727318172e-03 4.218750000000e-04 +2.171726577813e-01 7.268733309838e-02 5.412675823576e-01 2.290139988751e-01 5.877227300284e-01 4.109246309970e-01 4.041942818801e-02 1.475432176818e-01 4.048912304995e-01 1.026648120305e-03 4.218750000000e-04 +3.485910661996e-01 6.989623459320e-02 5.091463904947e-01 3.555294854783e-01 6.209921593694e-01 4.442264927491e-01 4.054572281985e-02 1.369089534787e-01 3.900269983228e-01 9.496844670141e-04 4.218750000000e-04 +4.591222156146e-01 6.459115467971e-02 4.591222156146e-01 4.636434256341e-01 6.525016743309e-01 5.423183923425e-01 4.315156542232e-02 1.193530388189e-01 3.641627212890e-01 7.779101833108e-04 4.218750000000e-04 +5.408108798203e-01 5.781882147404e-02 4.055733401327e-01 5.438928422481e-01 6.784608743878e-01 7.889555482479e-01 4.463294934452e-02 8.485829672592e-02 3.070618770902e-01 5.347259436060e-04 4.218750000000e-04 +5.993069122229e-01 5.169676168712e-02 3.618973716526e-01 6.015324847480e-01 7.020050126716e-01 1.133544541703e+00 4.985736442077e-02 6.597539300821e-02 2.707507935932e-01 3.721732887234e-04 4.218750000000e-04 +6.445175833589e-01 4.705717467082e-02 3.296369078171e-01 6.462331567993e-01 7.254500561321e-01 1.603878786859e+00 5.995818503914e-02 5.607485945670e-02 2.496104953650e-01 2.630342164610e-04 4.218750000000e-04 +6.809935872489e-01 4.354436998050e-02 3.050697664849e-01 6.823843330786e-01 7.474730366068e-01 2.200951549904e+00 7.158364248335e-02 4.878592794543e-02 2.328230800544e-01 1.916784583551e-04 4.218750000000e-04 +7.112162275495e-01 4.075020635208e-02 2.854553980787e-01 7.123826932538e-01 7.674463407560e-01 2.915324375055e+00 8.301693616749e-02 4.271408194462e-02 2.178533705261e-01 1.447094544984e-04 4.218750000000e-04 +7.431086253506e-01 3.869519734009e-02 2.709557351650e-01 7.441154126664e-01 7.919120896832e-01 2.138716094527e+00 2.986801847413e-02 2.094809489948e-02 1.525636293466e-01 1.972561954714e-04 4.218750000000e-04 +7.933483988505e-01 3.770536386587e-02 2.639521847021e-01 7.942439023517e-01 8.369552749293e-01 1.170935687426e+00 7.354696105387e-04 9.421562837779e-04 3.235491176481e-02 3.602887883001e-04 4.218750000000e-04 +8.627415290194e-01 3.750718541688e-02 2.625508987690e-01 8.635564456668e-01 9.025866768888e-01 1.006752676412e+00 2.165422966309e-07 3.226347965658e-07 5.987345883572e-04 4.190453225348e-04 4.218750000000e-04 +9.375005209301e-01 3.750001133441e-02 2.625000831528e-01 9.382502212066e-01 9.742791033628e-01 1.000014780974e+00 1.612223097348e-14 2.418298901210e-14 1.639206753013e-07 4.218687643689e-04 4.218750000000e-04 +1.012500000004e+00 3.750000000006e-02 2.625000000004e-01 1.013194206462e+00 1.046646430275e+00 1.000000000113e+00 6.666666667919e-15 1.000000000075e-14 1.054092553429e-07 4.218749999524e-04 4.218750000000e-04 +1.087500000000e+00 3.750000000000e-02 2.625000000000e-01 1.088146359641e+00 1.119360866745e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 3.750000000000e-02 2.625000000000e-01 1.163104681445e+00 1.192358482169e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +7.268733309838e-02 2.171726577813e-01 5.412675823576e-01 2.290139988751e-01 5.877227300284e-01 4.109246309970e-01 4.041942818801e-02 1.475432176818e-01 4.048912304995e-01 1.026648120305e-03 4.218750000000e-04 +2.135050057140e-01 2.135050057140e-01 5.261974407503e-01 3.019416747153e-01 6.066733236117e-01 4.316575403650e-01 4.061850875558e-02 1.411483813809e-01 3.960196142461e-01 9.773372651923e-04 4.218750000000e-04 +3.417327685571e-01 2.049220289062e-01 4.949421831262e-01 3.984649583548e-01 6.354070252008e-01 4.843070405527e-01 4.170049349794e-02 1.291551330237e-01 3.788214663396e-01 8.710899587968e-04 4.218750000000e-04 +4.494528356157e-01 1.897708839905e-01 4.494528356157e-01 4.878737950059e-01 6.633465845970e-01 5.995267199290e-01 4.373123086561e-02 1.094143832425e-01 3.486711013779e-01 7.036800629169e-04 4.218750000000e-04 +5.314326766515e-01 1.709752635799e-01 4.005074331571e-01 5.582591070186e-01 6.870658153214e-01 8.403596192844e-01 4.582330155169e-02 8.179230742436e-02 3.014636654435e-01 5.020172201506e-04 4.218750000000e-04 +5.916681073208e-01 1.536987424520e-01 3.590062233270e-01 6.113055313441e-01 7.089287136514e-01 1.185839004642e+00 5.105768601633e-02 6.458425530337e-02 2.678810998753e-01 3.557607722031e-04 4.218750000000e-04 +6.380004170738e-01 1.402236550874e-01 3.274610859066e-01 6.532282951866e-01 7.307105914215e-01 1.668826208055e+00 6.124613426806e-02 5.505019094179e-02 2.473193862685e-01 2.527974440740e-04 4.218750000000e-04 +6.752297927797e-01 1.298802489024e-01 3.032718863476e-01 6.876075567592e-01 7.515171249953e-01 2.269317655133e+00 7.199532459282e-02 4.758830772102e-02 2.299475972212e-01 1.859038989300e-04 4.218750000000e-04 +7.061916470317e-01 1.216438835878e-01 2.839907188670e-01 7.165918480919e-01 7.708142481521e-01 2.938291270583e+00 8.086782316446e-02 4.128308720143e-02 2.141730536050e-01 1.435783457629e-04 4.218750000000e-04 +7.399313280868e-01 1.157300761636e-01 2.701017565932e-01 7.489271131513e-01 7.961449489433e-01 1.992369633619e+00 2.354533315668e-02 1.772663020911e-02 1.403433496390e-01 2.117453472896e-04 4.218750000000e-04 +7.924281062424e-01 1.130208567819e-01 2.637249349063e-01 8.004473859228e-01 8.427733140779e-01 1.143792126595e+00 5.029659803463e-04 6.596032207056e-04 2.707198676586e-02 3.688388739448e-04 4.218750000000e-04 +8.626862418681e-01 1.125165764885e-01 2.625390954762e-01 8.699928343919e-01 9.087432577723e-01 1.005297898964e+00 1.225094471748e-07 1.827957374143e-07 4.506732462713e-04 4.196517275473e-04 4.218750000000e-04 +9.375003627328e-01 1.125000237780e-01 2.625000577539e-01 9.442262363831e-01 9.800354410913e-01 1.000010481469e+00 1.112672435054e-14 1.668991159102e-14 1.361776274292e-07 4.218705781765e-04 4.218750000000e-04 +1.012500000003e+00 1.125000000001e-01 2.625000000003e-01 1.018730828043e+00 1.052007010435e+00 1.000000000072e+00 6.666666667470e-15 1.000000000048e-14 1.054092553415e-07 4.218749999695e-04 4.218750000000e-04 +1.087500000000e+00 1.125000000000e-01 2.625000000000e-01 1.093303480283e+00 1.124374826292e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 1.125000000000e-01 2.625000000000e-01 1.167930862680e+00 1.197066727463e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +6.989623459320e-02 3.485910661996e-01 5.091463904947e-01 3.555294854783e-01 6.209921593694e-01 4.442264927491e-01 4.054572281985e-02 1.369089534787e-01 3.900269983228e-01 9.496844670141e-04 4.218750000000e-04 +2.049220289062e-01 3.417327685571e-01 4.949421831262e-01 3.984649583548e-01 6.354070252008e-01 4.843070405527e-01 4.170049349794e-02 1.291551330237e-01 3.788214663396e-01 8.710899587968e-04 4.218750000000e-04 +3.270552237372e-01 3.270552237372e-01 4.677942784999e-01 4.625259330542e-01 6.578462782025e-01 5.709208899749e-01 4.350009381295e-02 1.142892857227e-01 3.563538904621e-01 7.389377537378e-04 4.218750000000e-04 +4.306079514080e-01 3.044018263962e-01 4.306079514080e-01 5.273364009142e-01 6.808134014140e-01 7.190957464299e-01 4.452257865593e-02 9.287201087678e-02 3.212337516458e-01 5.866743088031e-04 4.218750000000e-04 +5.131088111329e-01 2.773886684017e-01 3.898750624646e-01 5.832882009949e-01 7.015894025366e-01 9.467379264237e-01 4.784196040311e-02 7.580021735873e-02 2.902110675559e-01 4.456090626829e-04 4.218750000000e-04 +5.763170639743e-01 2.516826801555e-01 3.528652959065e-01 6.288764025770e-01 7.211098714991e-01 1.299161952159e+00 5.337130613688e-02 6.162200106945e-02 2.616656073640e-01 3.247285677501e-04 4.218750000000e-04 +6.249900842775e-01 2.305761647044e-01 3.230327581326e-01 6.661666256838e-01 7.403567626501e-01 1.789416108259e+00 6.244854103876e-02 5.234825545930e-02 2.411736475822e-01 2.357612620412e-04 4.218750000000e-04 +6.638252046893e-01 2.139507874357e-01 2.996700199942e-01 6.974516770538e-01 7.591053699642e-01 2.419216488874e+00 7.324202911458e-02 4.541265495549e-02 2.246297075324e-01 1.743849721347e-04 4.218750000000e-04 +6.965155723329e-01 2.007625490502e-01 2.811498886857e-01 7.248720877529e-01 7.774862079235e-01 2.885717381705e+00 7.219861895645e-02 3.752894483752e-02 2.042029079059e-01 1.461941500837e-04 4.218750000000e-04 +7.342184170226e-01 1.918064066518e-01 2.685595703446e-01 7.588586044368e-01 8.049786483824e-01 1.748377875476e+00 1.415938565576e-02 1.214787648686e-02 1.161793464474e-01 2.412950918205e-04 4.218750000000e-04 +7.909330106114e-01 1.881077137024e-01 2.633545533248e-01 8.129941815469e-01 8.545847880614e-01 1.100811283649e+00 2.259412839682e-04 3.078746838684e-04 1.849548545121e-02 3.832400759933e-04 4.218750000000e-04 +8.626084424299e-01 1.875160156460e-01 2.625225893542e-01 8.827545418037e-01 9.209634580136e-01 1.003196761164e+00 3.581502868952e-08 5.355135215144e-08 2.439292979338e-04 4.205306639053e-04 4.218750000000e-04 +9.375001717462e-01 1.875000189447e-01 2.625000272042e-01 9.560663309250e-01 9.914479781666e-01 1.000005142715e+00 7.425786644295e-15 1.113862268368e-14 1.112485839294e-07 4.218728304281e-04 4.218750000000e-04 +1.012500000001e+00 1.875000000001e-01 2.625000000001e-01 1.029714766332e+00 1.062647048649e+00 1.000000000029e+00 6.666666666985e-15 1.000000000019e-14 1.054092553400e-07 4.218749999879e-04 4.218750000000e-04 +1.087500000000e+00 1.875000000000e-01 2.625000000000e-01 1.103545422717e+00 1.134336259669e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 1.875000000000e-01 2.625000000000e-01 1.177523885108e+00 1.206428095661e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +6.459115467971e-02 4.591222156146e-01 4.591222156146e-01 4.636434256341e-01 6.525016743309e-01 5.423183923425e-01 4.315156542232e-02 1.193530388189e-01 3.641627212890e-01 7.779101833108e-04 4.218750000000e-04 +1.897708839905e-01 4.494528356157e-01 4.494528356157e-01 4.878737950059e-01 6.633465845970e-01 5.995267199290e-01 4.373123086561e-02 1.094143832425e-01 3.486711013779e-01 7.036800629169e-04 4.218750000000e-04 +3.044018263962e-01 4.306079514080e-01 4.306079514080e-01 5.273364009142e-01 6.808134014140e-01 7.190957464299e-01 4.452257865593e-02 9.287201087678e-02 3.212337516458e-01 5.866743088031e-04 4.218750000000e-04 +4.041341303766e-01 4.041341303766e-01 4.041341303766e-01 5.715319681964e-01 6.999808468849e-01 9.031594925838e-01 4.670580809132e-02 7.757069788035e-02 2.935807628430e-01 4.671101875850e-04 4.218750000000e-04 +4.871905771406e-01 3.734576869459e-01 3.734576869459e-01 6.138609796962e-01 7.185373659961e-01 1.127632276422e+00 5.080762136834e-02 6.758535884971e-02 2.740343831827e-01 3.741246227347e-04 4.218750000000e-04 +5.537376750515e-01 3.429465154748e-01 3.429465154748e-01 6.513353400882e-01 7.361046377548e-01 1.486149271228e+00 5.704235155757e-02 5.757397927173e-02 2.529250641587e-01 2.838712154745e-04 4.218750000000e-04 +6.058356560779e-01 3.161819630869e-01 3.161819630869e-01 6.833797450589e-01 7.529800194815e-01 1.976566655554e+00 6.417115238521e-02 4.869895397019e-02 2.326154527450e-01 2.134382864421e-04 4.218750000000e-04 +6.471752935958e-01 2.942719720514e-01 2.942719720514e-01 7.109373067830e-01 7.694334589234e-01 2.638654158434e+00 7.490995120157e-02 4.258418119829e-02 2.175218538147e-01 1.598826426918e-04 4.218750000000e-04 +6.832001322498e-01 2.771830646688e-01 2.771830646688e-01 7.372875097581e-01 7.876695521502e-01 2.597449676226e+00 5.207184323687e-02 3.007094442299e-02 1.827899353630e-01 1.624189311005e-04 4.218750000000e-04 +7.272622673347e-01 2.666652224851e-01 2.666652224851e-01 7.746100608511e-01 8.192259073386e-01 1.483880726826e+00 6.212198269581e-03 6.279680863774e-03 8.353097139368e-02 2.843051954064e-04 4.218750000000e-04 +7.894066242108e-01 2.629750429285e-01 2.629750429285e-01 8.320569040343e-01 8.726250997733e-01 1.057568556525e+00 6.109761078677e-05 8.665765979399e-05 9.812557702250e-03 3.989103093101e-04 4.218750000000e-04 +8.625457729587e-01 2.625094263820e-01 2.625094263820e-01 9.016076804177e-01 9.390461161879e-01 1.001423799321e+00 4.480421750331e-09 6.711077398055e-09 8.635249078345e-05 4.212751886725e-04 4.218750000000e-04 +9.375000525529e-01 2.625000082509e-01 2.625000082509e-01 9.735566767623e-01 1.008324777639e+00 1.000001654813e+00 6.701685181235e-15 1.005251113682e-14 1.056856509593e-07 4.218743018768e-04 4.218750000000e-04 +1.012500000000e+00 2.625000000000e-01 2.625000000000e-01 1.045974426074e+00 1.078410288341e+00 1.000000000007e+00 6.666666666739e-15 1.000000000004e-14 1.054092553392e-07 4.218749999973e-04 4.218750000000e-04 +1.087500000000e+00 2.625000000000e-01 2.625000000000e-01 1.118732541763e+00 1.149116508453e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 2.625000000000e-01 2.625000000000e-01 1.191768643655e+00 1.220335507146e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +5.781882147404e-02 5.408108798203e-01 4.055733401327e-01 5.438928422481e-01 6.784608743878e-01 7.889555482479e-01 4.463294934452e-02 8.485829672592e-02 3.070618770902e-01 5.347259436060e-04 4.218750000000e-04 +1.709752635799e-01 5.314326766515e-01 4.005074331571e-01 5.582591070186e-01 6.870658153214e-01 8.403596192844e-01 4.582330155169e-02 8.179230742436e-02 3.014636654435e-01 5.020172201506e-04 4.218750000000e-04 +2.773886684017e-01 5.131088111329e-01 3.898750624646e-01 5.832882009949e-01 7.015894025366e-01 9.467379264237e-01 4.784196040311e-02 7.580021735873e-02 2.902110675559e-01 4.456090626829e-04 4.218750000000e-04 +3.734576869459e-01 4.871905771406e-01 3.734576869459e-01 6.138609796962e-01 7.185373659961e-01 1.127632276422e+00 5.080762136834e-02 6.758535884971e-02 2.740343831827e-01 3.741246227347e-04 4.218750000000e-04 +4.565127205901e-01 4.565127205901e-01 3.523937651817e-01 6.456064808543e-01 7.355196080732e-01 1.400326988857e+00 5.455599179636e-02 5.843919909117e-02 2.548184519116e-01 3.012689203001e-04 4.218750000000e-04 +5.257048120963e-01 4.246863517372e-01 3.291883959455e-01 6.758136183986e-01 7.517240496606e-01 1.753353452617e+00 6.040163388013e-02 5.167380865790e-02 2.396149889995e-01 2.406103568966e-04 4.218750000000e-04 +5.815180389925e-01 3.949713097927e-01 3.067441695035e-01 7.029691068838e-01 7.669794982641e-01 2.269864476439e+00 6.786053437277e-02 4.484444010456e-02 2.232199714894e-01 1.858591137837e-04 4.218750000000e-04 +6.263686379438e-01 3.695256639199e-01 2.872175042399e-01 7.272460978891e-01 7.819084227943e-01 2.761070867145e+00 6.958329392553e-02 3.780234043621e-02 2.049453597540e-01 1.527939775180e-04 4.218750000000e-04 +6.682033330669e-01 3.505801642747e-01 2.726025399100e-01 7.545874011038e-01 8.023180732540e-01 2.087772894383e+00 2.656826632129e-02 1.908847441652e-02 1.456345289358e-01 2.020693922864e-04 4.218750000000e-04 +7.207222615117e-01 3.405506132978e-01 2.648572764876e-01 7.971294113605e-01 8.399789731680e-01 1.264316413675e+00 1.850018302616e-03 2.194883673034e-03 4.938379933444e-02 3.336783382995e-04 4.218750000000e-04 +7.883002365201e-01 3.377577969427e-01 2.626992570527e-01 8.576115625930e-01 8.969439736959e-01 1.025621262063e+00 8.403201437859e-06 1.228991892332e-05 3.695330224804e-03 4.113360512352e-04 4.218750000000e-04 +8.625131665003e-01 3.375034845468e-01 2.625026703271e-01 9.261952086184e-01 9.626760703354e-01 1.000438430694e+00 1.847916125997e-10 2.770659446853e-10 1.754568464467e-05 4.216901181090e-04 4.218750000000e-04 +9.375000095324e-01 3.375000019721e-01 2.625000014733e-01 9.963997788059e-01 1.030397384497e+00 1.000000318414e+00 6.667031335148e-15 1.000054381841e-14 1.054121214747e-07 4.218748656693e-04 4.218750000000e-04 +1.012500000000e+00 3.375000000000e-01 2.625000000000e-01 1.067268710307e+00 1.099076316731e+00 1.000000000001e+00 6.666666666675e-15 1.000000000000e-14 1.054092553390e-07 4.218749999997e-04 4.218750000000e-04 +1.087500000000e+00 3.375000000000e-01 2.625000000000e-01 1.138666983802e+00 1.168532733816e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 3.375000000000e-01 2.625000000000e-01 1.210500929368e+00 1.238635842369e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +5.169676168712e-02 5.993069122229e-01 3.618973716526e-01 6.015324847480e-01 7.020050126716e-01 1.133544541703e+00 4.985736442077e-02 6.597539300821e-02 2.707507935932e-01 3.721732887234e-04 4.218750000000e-04 +1.536987424520e-01 5.916681073208e-01 3.590062233270e-01 6.113055313441e-01 7.089287136514e-01 1.185839004642e+00 5.105768601633e-02 6.458425530337e-02 2.678810998753e-01 3.557607722031e-04 4.218750000000e-04 +2.516826801555e-01 5.763170639743e-01 3.528652959065e-01 6.288764025770e-01 7.211098714991e-01 1.299161952159e+00 5.337130613688e-02 6.162200106945e-02 2.616656073640e-01 3.247285677501e-04 4.218750000000e-04 +3.429465154748e-01 5.537376750515e-01 3.429465154748e-01 6.513353400882e-01 7.361046377548e-01 1.486149271228e+00 5.704235155757e-02 5.757397927173e-02 2.529250641587e-01 2.838712154745e-04 4.218750000000e-04 +4.246863517372e-01 5.257048120963e-01 3.291883959455e-01 6.758136183986e-01 7.517240496606e-01 1.753353452617e+00 6.040163388013e-02 5.167380865790e-02 2.396149889995e-01 2.406103568966e-04 4.218750000000e-04 +4.951187828577e-01 4.951187828577e-01 3.125534963895e-01 7.002036977030e-01 7.667952180225e-01 2.135794845263e+00 6.431586255991e-02 4.516997222549e-02 2.240286991176e-01 1.975259940980e-04 4.218750000000e-04 +5.539217208960e-01 4.650987355997e-01 2.949461647258e-01 7.232883980383e-01 7.811141701591e-01 2.608816393441e+00 6.977628694975e-02 4.011950809867e-02 2.111332072904e-01 1.617112653311e-04 4.218750000000e-04 +6.038061875378e-01 4.391511482379e-01 2.790896619723e-01 7.466161283468e-01 7.970738250171e-01 2.449219149196e+00 4.527414447836e-02 2.772770118992e-02 1.755236647227e-01 1.722487757531e-04 4.218750000000e-04 +6.543442903260e-01 4.216382827073e-01 2.682129391096e-01 7.784248786663e-01 8.233367916184e-01 1.587931454621e+00 8.739906031128e-03 8.255935108874e-03 9.577714357864e-02 2.656758254724e-04 4.218750000000e-04 +7.159943742828e-01 4.141287378647e-01 2.635213069732e-01 8.271339405018e-01 8.680979407641e-01 1.116946772925e+00 3.140234575919e-04 4.217167709380e-04 2.164657455421e-02 3.777037637121e-04 4.218750000000e-04 +7.877351530361e-01 4.125932744012e-01 2.625583484675e-01 8.892468056788e-01 9.271983432685e-01 1.008221569871e+00 4.399221157605e-07 6.545021385776e-07 8.527746469141e-04 4.184348089814e-04 4.218750000000e-04 +8.625023561252e-01 4.125007677788e-01 2.625004684105e-01 9.560686156022e-01 9.914502981266e-01 1.000084658709e+00 1.880956037614e-12 2.821195217677e-12 1.770497487424e-06 4.218392876306e-04 4.218750000000e-04 +9.375000008923e-01 4.125000002331e-01 2.625000001344e-01 1.024237522192e+00 1.057340414406e+00 1.000000031677e+00 6.666667836804e-15 1.000000143844e-14 1.054092629202e-07 4.218749866364e-04 4.218750000000e-04 +1.012500000000e+00 4.125000000000e-01 2.625000000000e-01 1.093303480283e+00 1.124374826292e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 4.125000000000e-01 2.625000000000e-01 1.163104681445e+00 1.192358482169e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 4.125000000000e-01 2.625000000000e-01 1.233516315255e+00 1.261137879060e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +4.705717467082e-02 6.445175833589e-01 3.296369078171e-01 6.462331567993e-01 7.254500561321e-01 1.603878786859e+00 5.995818503914e-02 5.607485945670e-02 2.496104953650e-01 2.630342164610e-04 4.218750000000e-04 +1.402236550874e-01 6.380004170738e-01 3.274610859066e-01 6.532282951866e-01 7.307105914215e-01 1.668826208055e+00 6.124613426806e-02 5.505019094179e-02 2.473193862685e-01 2.527974440740e-04 4.218750000000e-04 +2.305761647044e-01 6.249900842775e-01 3.230327581326e-01 6.661666256838e-01 7.403567626501e-01 1.789416108259e+00 6.244854103876e-02 5.234825545930e-02 2.411736475822e-01 2.357612620412e-04 4.218750000000e-04 +3.161819630869e-01 6.058356560779e-01 3.161819630869e-01 6.833797450589e-01 7.529800194815e-01 1.976566655554e+00 6.417115238521e-02 4.869895397019e-02 2.326154527450e-01 2.134382864421e-04 4.218750000000e-04 +3.949713097927e-01 5.815180389925e-01 3.067441695035e-01 7.029691068838e-01 7.669794982641e-01 2.269864476439e+00 6.786053437277e-02 4.484444010456e-02 2.232199714894e-01 1.858591137837e-04 4.218750000000e-04 +4.650987355997e-01 5.539217208960e-01 2.949461647258e-01 7.232883980383e-01 7.811141701591e-01 2.608816393441e+00 6.977628694975e-02 4.011950809867e-02 2.111332072904e-01 1.617112653311e-04 4.218750000000e-04 +5.265680172969e-01 5.265680172969e-01 2.821854394160e-01 7.446796315732e-01 7.963519171185e-01 2.496767146024e+00 4.960099240544e-02 2.979912993754e-02 1.819619311149e-01 1.689685001951e-04 4.218750000000e-04 +5.835632930195e-01 5.045850721614e-01 2.712898721001e-01 7.714610891081e-01 8.177716103607e-01 1.814173680515e+00 1.609273837577e-02 1.330584156463e-02 1.215905769587e-01 2.325438873527e-04 4.218750000000e-04 +6.443756334852e-01 4.921326232838e-01 2.649129818624e-01 8.108109988954e-01 8.529908345867e-01 1.250548242143e+00 1.612937440684e-03 1.934676391917e-03 4.636421503124e-02 3.373520395161e-04 4.218750000000e-04 +7.135236497626e-01 4.880819050059e-01 2.628048507451e-01 8.644882560016e-01 9.035520650964e-01 1.038086110396e+00 2.105832181296e-05 3.042857659217e-05 5.814596249685e-03 4.063969219655e-04 4.218750000000e-04 +7.875432239591e-01 4.875205377128e-01 2.625106315765e-01 9.262292396031e-01 9.627109825833e-01 1.001678708274e+00 6.049876815039e-09 9.059606785688e-09 1.003306023199e-04 4.211679818242e-04 4.218750000000e-04 +8.625002273867e-01 4.875000892980e-01 2.625000440024e-01 9.907386029158e-01 1.024924022749e+00 1.000008822868e+00 9.692276443810e-15 1.453828639633e-14 1.270970162965e-07 4.218712778854e-04 4.218750000000e-04 +9.375000000336e-01 4.875000000108e-01 2.625000000049e-01 1.056675210305e+00 1.088792335607e+00 1.000000001263e+00 6.666666681086e-15 1.000000000900e-14 1.054092553864e-07 4.218749994672e-04 4.218750000000e-04 +1.012500000000e+00 4.875000000000e-01 2.625000000000e-01 1.123749304783e+00 1.154001191507e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 4.875000000000e-01 2.625000000000e-01 1.191768643655e+00 1.220335507145e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 4.875000000000e-01 2.625000000000e-01 1.260580223548e+00 1.287621353504e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +4.354436998050e-02 6.809935872489e-01 3.050697664849e-01 6.823843330786e-01 7.474730366068e-01 2.200951549904e+00 7.158364248335e-02 4.878592794543e-02 2.328230800544e-01 1.916784583551e-04 4.218750000000e-04 +1.298802489024e-01 6.752297927797e-01 3.032718863476e-01 6.876075567592e-01 7.515171249953e-01 2.269317655133e+00 7.199532459282e-02 4.758830772102e-02 2.299475972212e-01 1.859038989300e-04 4.218750000000e-04 +2.139507874357e-01 6.638252046893e-01 2.996700199942e-01 6.974516770538e-01 7.591053699642e-01 2.419216488874e+00 7.324202911458e-02 4.541265495549e-02 2.246297075324e-01 1.743849721347e-04 4.218750000000e-04 +2.942719720514e-01 6.471752935958e-01 2.942719720514e-01 7.109373067830e-01 7.694334589234e-01 2.638654158434e+00 7.490995120157e-02 4.258418119829e-02 2.175218538147e-01 1.598826426918e-04 4.218750000000e-04 +3.695256639199e-01 6.263686379438e-01 2.872175042399e-01 7.272460978891e-01 7.819084227943e-01 2.761070867145e+00 6.958329392553e-02 3.780234043621e-02 2.049453597540e-01 1.527939775180e-04 4.218750000000e-04 +4.391511482379e-01 6.038061875378e-01 2.790896619723e-01 7.466161283468e-01 7.970738250171e-01 2.449219149196e+00 4.527414447836e-02 2.772770118992e-02 1.755236647227e-01 1.722487757531e-04 4.218750000000e-04 +5.045850721614e-01 5.835632930195e-01 2.712898721001e-01 7.714610891081e-01 8.177716103607e-01 1.814173680515e+00 1.609273837577e-02 1.330584156463e-02 1.215905769587e-01 2.325438873527e-04 4.218750000000e-04 +5.699440894979e-01 5.699440894979e-01 2.657101546314e-01 8.060226611623e-01 8.486898235406e-01 1.316592054025e+00 2.597902757333e-03 2.959803778312e-03 5.734693422312e-02 3.204295504520e-04 4.218750000000e-04 +6.393158522766e-01 5.639952687011e-01 2.631591386351e-01 8.525347043314e-01 8.922265151499e-01 1.075974914480e+00 1.101315605464e-04 1.535327065682e-04 1.306108327004e-02 3.920862785205e-04 4.218750000000e-04 +7.126784249823e-01 5.626216567136e-01 2.625538444266e-01 9.079943094747e-01 9.451921430384e-01 1.007683628097e+00 3.224729068307e-07 4.800210569653e-07 7.303127617408e-04 4.186581861973e-04 4.218750000000e-04 +7.875041470900e-01 5.625023405442e-01 2.625010022555e-01 9.677663275820e-01 1.002735479070e+00 1.000178913644e+00 1.195884487609e-11 1.793505848747e-11 4.464061241052e-06 4.217995343085e-04 4.218750000000e-04 +8.625000091926e-01 5.625000043182e-01 2.625000017148e-01 1.029714776390e+00 1.062647058818e+00 1.000000383160e+00 6.667083117545e-15 1.000062084448e-14 1.054125274259e-07 4.218748383546e-04 4.218750000000e-04 +9.375000000004e-01 5.625000000001e-01 2.625000000001e-01 1.093303480284e+00 1.124374826293e+00 1.000000000015e+00 6.666666666835e-15 1.000000000010e-14 1.054092553395e-07 4.218749999936e-04 4.218750000000e-04 +1.012500000000e+00 5.625000000000e-01 2.625000000000e-01 1.158258390861e+00 1.187631571658e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 5.625000000000e-01 2.625000000000e-01 1.224362078799e+00 1.252185589280e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 5.625000000000e-01 2.625000000000e-01 1.291438151829e+00 1.317846254310e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +4.075020635208e-02 7.112162275495e-01 2.854553980787e-01 7.123826932538e-01 7.674463407560e-01 2.915324375055e+00 8.301693616749e-02 4.271408194462e-02 2.178533705261e-01 1.447094544984e-04 4.218750000000e-04 +1.216438835878e-01 7.061916470317e-01 2.839907188670e-01 7.165918480919e-01 7.708142481521e-01 2.938291270583e+00 8.086782316446e-02 4.128308720143e-02 2.141730536050e-01 1.435783457629e-04 4.218750000000e-04 +2.007625490502e-01 6.965155723329e-01 2.811498886857e-01 7.248720877529e-01 7.774862079235e-01 2.885717381705e+00 7.219861895645e-02 3.752894483752e-02 2.042029079059e-01 1.461941500837e-04 4.218750000000e-04 +2.771830646688e-01 6.832001322498e-01 2.771830646688e-01 7.372875097581e-01 7.876695521502e-01 2.597449676226e+00 5.207184323687e-02 3.007094442299e-02 1.827899353630e-01 1.624189311005e-04 4.218750000000e-04 +3.505801642747e-01 6.682033330669e-01 2.726025399100e-01 7.545874011038e-01 8.023180732540e-01 2.087772894383e+00 2.656826632129e-02 1.908847441652e-02 1.456345289358e-01 2.020693922864e-04 4.218750000000e-04 +4.216382827073e-01 6.543442903260e-01 2.682129391096e-01 7.784248786663e-01 8.233367916184e-01 1.587931454621e+00 8.739906031128e-03 8.255935108875e-03 9.577714357864e-02 2.656758254724e-04 4.218750000000e-04 +4.921326232838e-01 6.443756334852e-01 2.649129818624e-01 8.108109988954e-01 8.529908345867e-01 1.250548242142e+00 1.612937440684e-03 1.934676391917e-03 4.636421503124e-02 3.373520395161e-04 4.218750000000e-04 +5.639952687011e-01 6.393158522766e-01 2.631591386351e-01 8.525347043314e-01 8.922265151499e-01 1.075974914480e+00 1.101315605464e-04 1.535327065682e-04 1.306108327004e-02 3.920862785205e-04 4.218750000000e-04 +6.377493596282e-01 6.377493596282e-01 2.625926384571e-01 9.019137937809e-01 9.393632871175e-01 1.012705914856e+00 1.186823892428e-06 1.757900109525e-06 1.397577312322e-03 4.165819452729e-04 4.218750000000e-04 +7.125145564077e-01 6.375119256287e-01 2.625043805712e-01 9.560849587833e-01 9.914670938719e-01 1.000728004900e+00 5.293133740334e-10 7.933924674462e-10 2.969086031174e-05 4.215680963601e-04 4.218750000000e-04 +7.875001535907e-01 6.375001035585e-01 2.625000361066e-01 1.013194390994e+00 1.046646617965e+00 1.000007288283e+00 7.999074632138e-15 1.199852449957e-14 1.154629546149e-07 4.218719252780e-04 4.218750000000e-04 +8.625000001070e-01 6.375000000599e-01 2.625000000191e-01 1.072526223577e+00 1.104182389948e+00 1.000000004766e+00 6.666666726826e-15 1.000000004258e-14 1.054092555634e-07 4.218749979894e-04 4.218750000000e-04 +9.375000000000e-01 6.375000000000e-01 2.625000000000e-01 1.133716234337e+00 1.163709048689e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 6.375000000000e-01 2.625000000000e-01 1.196479210016e+00 1.224936222830e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 6.375000000000e-01 2.625000000000e-01 1.260580223548e+00 1.287621353504e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 6.375000000000e-01 2.625000000000e-01 1.325825214725e+00 1.351561596821e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.869519734009e-02 7.431086253506e-01 2.709557351650e-01 7.441154126664e-01 7.919120896832e-01 2.138716094527e+00 2.986801847413e-02 2.094809489948e-02 1.525636293466e-01 1.972561954714e-04 4.218750000000e-04 +1.157300761636e-01 7.399313280868e-01 2.701017565932e-01 7.489271131513e-01 7.961449489433e-01 1.992369633619e+00 2.354533315668e-02 1.772663020911e-02 1.403433496390e-01 2.117453472896e-04 4.218750000000e-04 +1.918064066518e-01 7.342184170226e-01 2.685595703446e-01 7.588586044368e-01 8.049786483824e-01 1.748377875476e+00 1.415938565576e-02 1.214787648686e-02 1.161793464474e-01 2.412950918205e-04 4.218750000000e-04 +2.666652224851e-01 7.272622673347e-01 2.666652224851e-01 7.746100608511e-01 8.192259073386e-01 1.483880726826e+00 6.212198269581e-03 6.279680863774e-03 8.353097139368e-02 2.843051954064e-04 4.218750000000e-04 +3.405506132978e-01 7.207222615117e-01 2.648572764876e-01 7.971294113605e-01 8.399789731680e-01 1.264316413675e+00 1.850018302616e-03 2.194883673034e-03 4.938379933444e-02 3.336783382995e-04 4.218750000000e-04 +4.141287378647e-01 7.159943742828e-01 2.635213069732e-01 8.271339405018e-01 8.680979407641e-01 1.116946772925e+00 3.140234575919e-04 4.217167709380e-04 2.164657455421e-02 3.777037637121e-04 4.218750000000e-04 +4.880819050059e-01 7.135236497626e-01 2.628048507451e-01 8.644882560016e-01 9.035520650964e-01 1.038086110396e+00 2.105832181296e-05 3.042857659217e-05 5.814596249685e-03 4.063969219655e-04 4.218750000000e-04 +5.626216567136e-01 7.126784249823e-01 2.625538444266e-01 9.079943094747e-01 9.451921430384e-01 1.007683628097e+00 3.224729068307e-07 4.800210569653e-07 7.303127617408e-04 4.186581861973e-04 4.218750000000e-04 +6.375119256287e-01 7.125145564077e-01 2.625043805712e-01 9.560849587833e-01 9.914670938719e-01 1.000728004900e+00 5.293133740334e-10 7.933924674462e-10 2.969086031174e-05 4.215680963601e-04 4.218750000000e-04 +7.125003560824e-01 7.125003560824e-01 2.625001043595e-01 1.007627666767e+00 1.041258766889e+00 1.000020277240e+00 2.923664481359e-14 4.385407798074e-14 2.207413719989e-07 4.218664457130e-04 4.218750000000e-04 +7.875000013855e-01 7.125000011276e-01 2.625000003121e-01 1.061985171172e+00 1.093946412743e+00 1.000000071954e+00 6.666671251810e-15 1.000000615817e-14 1.054092877954e-07 4.218749696443e-04 4.218750000000e-04 +8.625000000002e-01 7.125000000001e-01 2.625000000000e-01 1.118732541763e+00 1.149116508454e+00 1.000000000010e+00 6.666666666772e-15 1.000000000006e-14 1.054092553393e-07 4.218749999960e-04 4.218750000000e-04 +9.375000000000e-01 7.125000000000e-01 2.625000000000e-01 1.177523885108e+00 1.206428095661e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 7.125000000000e-01 2.625000000000e-01 1.238068051441e+00 1.265590277301e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 7.125000000000e-01 2.625000000000e-01 1.300120186752e+00 1.326355438787e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 7.125000000000e-01 2.625000000000e-01 1.363474422202e+00 1.388513143618e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.770536386587e-02 7.933483988505e-01 2.639521847021e-01 7.942439023517e-01 8.369552749293e-01 1.170935687426e+00 7.354696105387e-04 9.421562837779e-04 3.235491176481e-02 3.602887883001e-04 4.218750000000e-04 +1.130208567819e-01 7.924281062424e-01 2.637249349063e-01 8.004473859228e-01 8.427733140779e-01 1.143792126595e+00 5.029659803463e-04 6.596032207056e-04 2.707198676586e-02 3.688388739448e-04 4.218750000000e-04 +1.881077137024e-01 7.909330106114e-01 2.633545533248e-01 8.129941815469e-01 8.545847880614e-01 1.100811283649e+00 2.259412839682e-04 3.078746838684e-04 1.849548545121e-02 3.832400759933e-04 4.218750000000e-04 +2.629750429285e-01 7.894066242108e-01 2.629750429285e-01 8.320569040343e-01 8.726250997733e-01 1.057568556525e+00 6.109761078677e-05 8.665765979399e-05 9.812557702250e-03 3.989103093101e-04 4.218750000000e-04 +3.377577969427e-01 7.883002365201e-01 2.626992570527e-01 8.576115625930e-01 8.969439736959e-01 1.025621262063e+00 8.403201437859e-06 1.228991892332e-05 3.695330224804e-03 4.113360512352e-04 4.218750000000e-04 +4.125932744012e-01 7.877351530361e-01 2.625583484675e-01 8.892468056788e-01 9.271983432685e-01 1.008221569871e+00 4.399221157605e-07 6.545021385776e-07 8.527746469141e-04 4.184348089814e-04 4.218750000000e-04 +4.875205377128e-01 7.875432239591e-01 2.625106315765e-01 9.262292396031e-01 9.627109825833e-01 1.001678708274e+00 6.049876815039e-09 9.059606785688e-09 1.003306023199e-04 4.211679818242e-04 4.218750000000e-04 +5.625023405442e-01 7.875041470900e-01 2.625010022555e-01 9.677663275820e-01 1.002735479070e+00 1.000178913644e+00 1.195884487609e-11 1.793505848747e-11 4.464061241052e-06 4.217995343085e-04 4.218750000000e-04 +6.375001035585e-01 7.875001535907e-01 2.625000361066e-01 1.013194390994e+00 1.046646617965e+00 1.000007288283e+00 7.999074632138e-15 1.199852449957e-14 1.154629546149e-07 4.218719252780e-04 4.218750000000e-04 +7.125000011276e-01 7.875000013855e-01 2.625000003121e-01 1.061985171172e+00 1.093946412743e+00 1.000000071954e+00 6.666671251810e-15 1.000000615817e-14 1.054092877954e-07 4.218749696443e-04 4.218750000000e-04 +7.875000000013e-01 7.875000000013e-01 2.625000000003e-01 1.113693180371e+00 1.144210972681e+00 1.000000000072e+00 6.666666667466e-15 1.000000000048e-14 1.054092553415e-07 4.218749999697e-04 4.218750000000e-04 +8.625000000000e-01 7.875000000000e-01 2.625000000000e-01 1.167930862680e+00 1.197066727463e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 7.875000000000e-01 2.625000000000e-01 1.224362078799e+00 1.252185589280e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 7.875000000000e-01 2.625000000000e-01 1.282697353237e+00 1.309281768757e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 7.875000000000e-01 2.625000000000e-01 1.342688534248e+00 1.368107726022e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 7.875000000000e-01 2.625000000000e-01 1.404123392014e+00 1.428449771606e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750718541688e-02 8.627415290194e-01 2.625508987690e-01 8.635564456668e-01 9.025866768888e-01 1.006752676412e+00 2.165422966309e-07 3.226347965658e-07 5.987345883572e-04 4.190453225348e-04 4.218750000000e-04 +1.125165764885e-01 8.626862418681e-01 2.625390954762e-01 8.699928343919e-01 9.087432577723e-01 1.005297898964e+00 1.225094471748e-07 1.827957374143e-07 4.506732462713e-04 4.196517275473e-04 4.218750000000e-04 +1.875160156460e-01 8.626084424299e-01 2.625225893542e-01 8.827545418037e-01 9.209634580136e-01 1.003196761164e+00 3.581502868952e-08 5.355135215144e-08 2.439292979338e-04 4.205306639053e-04 4.218750000000e-04 +2.625094263820e-01 8.625457729587e-01 2.625094263820e-01 9.016076804177e-01 9.390461161879e-01 1.001423799321e+00 4.480421750331e-09 6.711077398055e-09 8.635249078345e-05 4.212751886725e-04 4.218750000000e-04 +3.375034845468e-01 8.625131665003e-01 2.625026703271e-01 9.261952086184e-01 9.626760703354e-01 1.000438430694e+00 1.847916125997e-10 2.770659446853e-10 1.754568464467e-05 4.216901181090e-04 4.218750000000e-04 +4.125007677788e-01 8.625023561252e-01 2.625004684105e-01 9.560686156022e-01 9.914502981266e-01 1.000084658709e+00 1.880956037614e-12 2.821195217677e-12 1.770497487424e-06 4.218392876306e-04 4.218750000000e-04 +4.875000892980e-01 8.625002273867e-01 2.625000440024e-01 9.907386029158e-01 1.024924022749e+00 1.000008822868e+00 9.692276443810e-15 1.453828639633e-14 1.270970162965e-07 4.218712778854e-04 4.218750000000e-04 +5.625000043182e-01 8.625000091926e-01 2.625000017148e-01 1.029714776390e+00 1.062647058818e+00 1.000000383160e+00 6.667083117545e-15 1.000062084448e-14 1.054125274259e-07 4.218748383546e-04 4.218750000000e-04 +6.375000000599e-01 8.625000001070e-01 2.625000000191e-01 1.072526223577e+00 1.104182389948e+00 1.000000004766e+00 6.666666726826e-15 1.000000004258e-14 1.054092555634e-07 4.218749979894e-04 4.218750000000e-04 +7.125000000001e-01 8.625000000002e-01 2.625000000000e-01 1.118732541763e+00 1.149116508454e+00 1.000000000010e+00 6.666666666772e-15 1.000000000006e-14 1.054092553393e-07 4.218749999960e-04 4.218750000000e-04 +7.875000000000e-01 8.625000000000e-01 2.625000000000e-01 1.167930862680e+00 1.197066727463e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 8.625000000000e-01 2.625000000000e-01 1.219759197547e+00 1.247685356971e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 8.625000000000e-01 2.625000000000e-01 1.273896581360e+00 1.300660889702e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 8.625000000000e-01 2.625000000000e-01 1.330061088823e+00 1.355717061189e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 8.625000000000e-01 2.625000000000e-01 1.388006664249e+00 1.412610615138e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 8.625000000000e-01 2.625000000000e-01 1.447519429921e+00 1.471128393445e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750001133441e-02 9.375005209301e-01 2.625000831528e-01 9.382502212066e-01 9.742791033628e-01 1.000014780974e+00 1.612223097348e-14 2.418298901210e-14 1.639206753013e-07 4.218687643689e-04 4.218750000000e-04 +1.125000237780e-01 9.375003627328e-01 2.625000577539e-01 9.442262363831e-01 9.800354410913e-01 1.000010481469e+00 1.112672435054e-14 1.668991159102e-14 1.361776274292e-07 4.218705781765e-04 4.218750000000e-04 +1.875000189447e-01 9.375001717462e-01 2.625000272042e-01 9.560663309250e-01 9.914479781666e-01 1.000005142715e+00 7.425786644295e-15 1.113862268368e-14 1.112485839294e-07 4.218728304281e-04 4.218750000000e-04 +2.625000082509e-01 9.375000525529e-01 2.625000082509e-01 9.735566767623e-01 1.008324777639e+00 1.000001654813e+00 6.701685181235e-15 1.005251113682e-14 1.056856509593e-07 4.218743018768e-04 4.218750000000e-04 +3.375000019721e-01 9.375000095324e-01 2.625000014733e-01 9.963997788059e-01 1.030397384497e+00 1.000000318414e+00 6.667031335148e-15 1.000054381841e-14 1.054121214747e-07 4.218748656693e-04 4.218750000000e-04 +4.125000002331e-01 9.375000008923e-01 2.625000001344e-01 1.024237522192e+00 1.057340414406e+00 1.000000031677e+00 6.666667836804e-15 1.000000143844e-14 1.054092629202e-07 4.218749866364e-04 4.218750000000e-04 +4.875000000108e-01 9.375000000336e-01 2.625000000049e-01 1.056675210305e+00 1.088792335607e+00 1.000000001263e+00 6.666666681086e-15 1.000000000900e-14 1.054092553864e-07 4.218749994672e-04 4.218750000000e-04 +5.625000000001e-01 9.375000000004e-01 2.625000000001e-01 1.093303480284e+00 1.124374826293e+00 1.000000000015e+00 6.666666666835e-15 1.000000000010e-14 1.054092553395e-07 4.218749999936e-04 4.218750000000e-04 +6.375000000000e-01 9.375000000000e-01 2.625000000000e-01 1.133716234337e+00 1.163709048689e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.125000000000e-01 9.375000000000e-01 2.625000000000e-01 1.177523885108e+00 1.206428095661e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.875000000000e-01 9.375000000000e-01 2.625000000000e-01 1.224362078799e+00 1.252185589280e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 9.375000000000e-01 2.625000000000e-01 1.273896581360e+00 1.300660889702e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 9.375000000000e-01 2.625000000000e-01 1.325825214725e+00 1.351561596821e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 9.375000000000e-01 2.625000000000e-01 1.379877711973e+00 1.404624060025e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 9.375000000000e-01 2.625000000000e-01 1.435814228931e+00 1.459612534202e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 9.375000000000e-01 2.625000000000e-01 1.493423081381e+00 1.516317496437e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750000000006e-02 1.012500000004e+00 2.625000000004e-01 1.013194206462e+00 1.046646430275e+00 1.000000000113e+00 6.666666667919e-15 1.000000000075e-14 1.054092553429e-07 4.218749999524e-04 4.218750000000e-04 +1.125000000001e-01 1.012500000003e+00 2.625000000003e-01 1.018730828043e+00 1.052007010435e+00 1.000000000072e+00 6.666666667470e-15 1.000000000048e-14 1.054092553415e-07 4.218749999695e-04 4.218750000000e-04 +1.875000000001e-01 1.012500000001e+00 2.625000000001e-01 1.029714766332e+00 1.062647048649e+00 1.000000000029e+00 6.666666666985e-15 1.000000000019e-14 1.054092553400e-07 4.218749999879e-04 4.218750000000e-04 +2.625000000000e-01 1.012500000000e+00 2.625000000000e-01 1.045974426074e+00 1.078410288341e+00 1.000000000007e+00 6.666666666739e-15 1.000000000004e-14 1.054092553392e-07 4.218749999973e-04 4.218750000000e-04 +3.375000000000e-01 1.012500000000e+00 2.625000000000e-01 1.067268710307e+00 1.099076316731e+00 1.000000000001e+00 6.666666666675e-15 1.000000000000e-14 1.054092553390e-07 4.218749999997e-04 4.218750000000e-04 +4.125000000000e-01 1.012500000000e+00 2.625000000000e-01 1.093303480283e+00 1.124374826292e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.875000000000e-01 1.012500000000e+00 2.625000000000e-01 1.123749304783e+00 1.154001191507e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +5.625000000000e-01 1.012500000000e+00 2.625000000000e-01 1.158258390861e+00 1.187631571658e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +6.375000000000e-01 1.012500000000e+00 2.625000000000e-01 1.196479210016e+00 1.224936222830e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.125000000000e-01 1.012500000000e+00 2.625000000000e-01 1.238068051441e+00 1.265590277301e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.875000000000e-01 1.012500000000e+00 2.625000000000e-01 1.282697353237e+00 1.309281768757e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 1.012500000000e+00 2.625000000000e-01 1.330061088823e+00 1.355717061189e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 1.012500000000e+00 2.625000000000e-01 1.379877711973e+00 1.404624060025e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 1.012500000000e+00 2.625000000000e-01 1.431891231903e+00 1.455753670784e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 1.012500000000e+00 2.625000000000e-01 1.485870956712e+00 1.508879965405e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 1.012500000000e+00 2.625000000000e-01 1.541610359332e+00 1.563799459650e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750000000000e-02 1.087500000000e+00 2.625000000000e-01 1.088146359641e+00 1.119360866745e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.125000000000e-01 1.087500000000e+00 2.625000000000e-01 1.093303480283e+00 1.124374826292e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.875000000000e-01 1.087500000000e+00 2.625000000000e-01 1.103545422717e+00 1.134336259669e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +2.625000000000e-01 1.087500000000e+00 2.625000000000e-01 1.118732541763e+00 1.149116508453e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +3.375000000000e-01 1.087500000000e+00 2.625000000000e-01 1.138666983802e+00 1.168532733816e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.125000000000e-01 1.087500000000e+00 2.625000000000e-01 1.163104681445e+00 1.192358482169e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.875000000000e-01 1.087500000000e+00 2.625000000000e-01 1.191768643655e+00 1.220335507145e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +5.625000000000e-01 1.087500000000e+00 2.625000000000e-01 1.224362078799e+00 1.252185589280e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +6.375000000000e-01 1.087500000000e+00 2.625000000000e-01 1.260580223548e+00 1.287621353504e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.125000000000e-01 1.087500000000e+00 2.625000000000e-01 1.300120186752e+00 1.326355438787e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.875000000000e-01 1.087500000000e+00 2.625000000000e-01 1.342688534248e+00 1.368107726022e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 1.087500000000e+00 2.625000000000e-01 1.388006664249e+00 1.412610615138e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 1.087500000000e+00 2.625000000000e-01 1.435814228931e+00 1.459612534202e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 1.087500000000e+00 2.625000000000e-01 1.485870956712e+00 1.508879965405e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 1.087500000000e+00 2.625000000000e-01 1.537957249081e+00 1.560198304704e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 1.087500000000e+00 2.625000000000e-01 1.591873895759e+00 1.613371857322e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750000000000e-02 1.162500000000e+00 2.625000000000e-01 1.163104681445e+00 1.192358482169e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.125000000000e-01 1.162500000000e+00 2.625000000000e-01 1.167930862680e+00 1.197066727463e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.875000000000e-01 1.162500000000e+00 2.625000000000e-01 1.177523885108e+00 1.206428095661e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +2.625000000000e-01 1.162500000000e+00 2.625000000000e-01 1.191768643655e+00 1.220335507146e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.375000000000e-01 1.162500000000e+00 2.625000000000e-01 1.210500929368e+00 1.238635842369e+00 9.999999999988e-01 6.666666666653e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +4.125000000000e-01 1.162500000000e+00 2.625000000000e-01 1.233516315255e+00 1.261137879060e+00 9.999999999988e-01 6.666666666653e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +4.875000000000e-01 1.162500000000e+00 2.625000000000e-01 1.260580223548e+00 1.287621353504e+00 9.999999999988e-01 6.666666666653e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +5.625000000000e-01 1.162500000000e+00 2.625000000000e-01 1.291438151829e+00 1.317846254310e+00 9.999999999988e-01 6.666666666653e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +6.375000000000e-01 1.162500000000e+00 2.625000000000e-01 1.325825214725e+00 1.351561596821e+00 9.999999999988e-01 6.666666666653e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +7.125000000000e-01 1.162500000000e+00 2.625000000000e-01 1.363474422202e+00 1.388513143618e+00 9.999999999988e-01 6.666666666653e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +7.875000000000e-01 1.162500000000e+00 2.625000000000e-01 1.404123392014e+00 1.428449771606e+00 9.999999999988e-01 6.666666666653e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +8.625000000000e-01 1.162500000000e+00 2.625000000000e-01 1.447519429921e+00 1.471128393445e+00 9.999999999988e-01 6.666666666653e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +9.375000000000e-01 1.162500000000e+00 2.625000000000e-01 1.493423081381e+00 1.516317496437e+00 9.999999999988e-01 6.666666666653e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.012500000000e+00 1.162500000000e+00 2.625000000000e-01 1.541610359332e+00 1.563799459650e+00 9.999999999988e-01 6.666666666653e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.087500000000e+00 1.162500000000e+00 2.625000000000e-01 1.591873895759e+00 1.613371857322e+00 9.999999999988e-01 6.666666666653e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.162500000000e+00 1.162500000000e+00 2.625000000000e-01 1.644023266259e+00 1.664847966032e+00 9.999999999976e-01 6.666666666640e-15 9.999999999984e-15 1.054092553389e-07 4.218750000010e-04 4.218750000000e-04 +6.193828463115e-02 6.193828463115e-02 6.032602598474e-01 8.759396215550e-02 6.095864527016e-01 6.126856345665e-01 4.294268987497e-02 1.051339074696e-01 3.417827566510e-01 6.885668215455e-04 4.218750000000e-04 +1.836545072027e-01 6.126162932497e-02 5.942484715349e-01 1.936025961691e-01 6.249905688608e-01 6.425571785475e-01 4.371122603501e-02 1.020404739711e-01 3.367169499926e-01 6.565563565154e-04 4.218750000000e-04 +2.992782326149e-01 6.000582452885e-02 5.742634567455e-01 3.052345974729e-01 6.503435071158e-01 7.091590976384e-01 4.458727378093e-02 9.431016381813e-02 3.237114006473e-01 5.948947160163e-04 4.218750000000e-04 +4.055733401327e-01 5.781882147404e-02 5.408108798203e-01 4.096739561444e-01 6.784608743878e-01 7.889555482479e-01 4.463294934452e-02 8.485829672592e-02 3.070618770902e-01 5.347259436060e-04 4.218750000000e-04 +4.963253975895e-01 5.423671680445e-02 4.963253975895e-01 4.992800033469e-01 7.040024304180e-01 9.486544601522e-01 4.789004113598e-02 7.572310543129e-02 2.900634134332e-01 4.447088141369e-04 4.218750000000e-04 +5.657728051732e-01 4.982685275908e-02 4.506075785757e-01 5.679626592738e-01 7.250026015120e-01 1.305956537856e+00 5.183476419406e-02 5.953654967624e-02 2.571997703391e-01 3.230390811416e-04 4.218750000000e-04 +6.172337279524e-01 4.575823828388e-02 4.126117817726e-01 6.189275331514e-01 7.438546724666e-01 1.829077450959e+00 6.167930921681e-02 5.058231064884e-02 2.370708066962e-01 2.306490628807e-04 4.218750000000e-04 +6.575055945350e-01 4.249388302699e-02 3.830513630670e-01 6.588773307221e-01 7.621336389945e-01 2.478981883679e+00 7.297880692202e-02 4.415853585044e-02 2.215062975037e-01 1.701807515325e-04 4.218750000000e-04 +6.915076031792e-01 3.993096897254e-02 3.597393766194e-01 6.926595466301e-01 7.805060324099e-01 2.813321233438e+00 6.626973211795e-02 3.533353994398e-02 1.981400737525e-01 1.499562136687e-04 4.218750000000e-04 +7.314659404519e-01 3.825094752410e-02 3.443799375810e-01 7.324653964712e-01 8.093843947322e-01 1.644684811242e+00 1.063863261206e-02 9.702739886093e-03 1.038307377209e-01 2.565081145739e-04 4.218750000000e-04 +7.902669681370e-01 3.759760278757e-02 3.383909790227e-01 7.911608310981e-01 8.604905085751e-01 1.081957932813e+00 1.321518161540e-04 1.832120438506e-04 1.426775867513e-02 3.899181171520e-04 4.218750000000e-04 +8.625781317715e-01 3.750227592491e-02 3.375210140878e-01 8.633929893796e-01 9.270209755236e-01 1.002336410674e+00 1.226886366941e-08 1.836039807407e-08 1.428301169380e-04 4.208916243162e-04 4.218750000000e-04 +9.375001051632e-01 3.750000223625e-02 3.375000219852e-01 9.382498054083e-01 9.971052914255e-01 1.000003184102e+00 6.793519582755e-15 1.019024692734e-14 1.064072205536e-07 4.218736567111e-04 4.218750000000e-04 +1.012500000000e+00 3.750000000001e-02 3.375000000001e-01 1.013194206458e+00 1.067927314943e+00 1.000000000013e+00 6.666666666816e-15 1.000000000009e-14 1.054092553394e-07 4.218749999943e-04 4.218750000000e-04 +1.087500000000e+00 3.750000000000e-02 3.375000000000e-01 1.088146359641e+00 1.139284314822e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 3.750000000000e-02 3.375000000000e-01 1.163104681445e+00 1.211081644647e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +6.126162932497e-02 1.836545072027e-01 5.942484715349e-01 1.936025961691e-01 6.249905688608e-01 6.425571785475e-01 4.371122603501e-02 1.020404739711e-01 3.367169499926e-01 6.565563565154e-04 4.218750000000e-04 +1.816330433661e-01 1.816330433661e-01 5.846633670054e-01 2.568679133034e-01 6.386018928902e-01 6.743987250459e-01 4.420766396760e-02 9.832684061923e-02 3.305329713243e-01 6.255572324388e-04 4.218750000000e-04 +2.960324743901e-01 1.777130280900e-01 5.641395875848e-01 3.452783605245e-01 6.614156185991e-01 7.391919671038e-01 4.484605566122e-02 9.100353695049e-02 3.179859132982e-01 5.707245462271e-04 4.218750000000e-04 +4.005074331571e-01 1.709752635799e-01 5.314326766515e-01 4.354753090249e-01 6.870658153214e-01 8.403596192844e-01 4.582330155169e-02 8.179230742436e-02 3.014636654435e-01 5.020172201506e-04 4.218750000000e-04 +4.894429569983e-01 1.605378250392e-01 4.894429569983e-01 5.150988268513e-01 7.105499346133e-01 1.021745148232e+00 4.895419820814e-02 7.186850599610e-02 2.825843158267e-01 4.128965043093e-04 4.218750000000e-04 +5.587616585062e-01 1.480007710295e-01 4.463995369992e-01 5.780301196667e-01 7.303364744246e-01 1.385869000295e+00 5.418343914318e-02 5.864562862540e-02 2.552681131355e-01 3.044118887933e-04 4.218750000000e-04 +6.110918186474e-01 1.363033411712e-01 4.097877013356e-01 6.261084663477e-01 7.482898982334e-01 1.892708088720e+00 6.250654509346e-02 4.953738941518e-02 2.346093429398e-01 2.228949104800e-04 4.218750000000e-04 +6.521037683921e-01 1.267422491644e-01 3.807811267663e-01 6.643063468570e-01 7.657004564292e-01 2.554076086807e+00 7.387619665269e-02 4.338723327447e-02 2.195632869394e-01 1.651771465146e-04 4.218750000000e-04 +6.871639170439e-01 1.192548679406e-01 3.580608828827e-01 6.974352818826e-01 7.839793162230e-01 2.712780625828e+00 5.948151986467e-02 3.288960373263e-02 1.911648611732e-01 1.555138649928e-04 4.218750000000e-04 +7.292150425168e-01 1.144973867095e-01 3.435851278437e-01 7.381491920988e-01 8.141959038656e-01 1.557598873535e+00 8.143644820967e-03 7.842498758186e-03 9.334820570903e-02 2.708495795471e-04 4.218750000000e-04 +7.897871416024e-01 1.127424628782e-01 3.382367272118e-01 7.977935772970e-01 8.665325588870e-01 1.068344316136e+00 8.695704047596e-05 1.220913133939e-04 1.164718914082e-02 3.948867360721e-04 4.218750000000e-04 +8.625590639033e-01 1.125051514156e-01 3.375158417827e-01 8.698652469301e-01 9.330501011581e-01 1.001798508180e+00 6.706586493273e-09 1.004181944549e-08 1.056294332166e-04 4.211176165219e-04 4.218750000000e-04 +9.375000718346e-01 1.125000046112e-01 3.375000150082e-01 9.442259452734e-01 1.002730719514e+00 1.000002213574e+00 6.724204955861e-15 1.008628510705e-14 1.058630410119e-07 4.218740661505e-04 4.218750000000e-04 +1.012500000000e+00 1.125000000000e-01 3.375000000000e-01 1.018730828041e+00 1.073181601594e+00 1.000000000009e+00 6.666666666761e-15 1.000000000006e-14 1.054092553392e-07 4.218749999964e-04 4.218750000000e-04 +1.087500000000e+00 1.125000000000e-01 3.375000000000e-01 1.093303480283e+00 1.144210972679e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 1.125000000000e-01 3.375000000000e-01 1.167930862680e+00 1.215717380809e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +6.000582452885e-02 2.992782326149e-01 5.742634567455e-01 3.052345974729e-01 6.503435071158e-01 7.091590976384e-01 4.458727378093e-02 9.431016381813e-02 3.237114006473e-01 5.948947160163e-04 4.218750000000e-04 +1.777130280900e-01 2.960324743901e-01 5.641395875848e-01 3.452783605245e-01 6.614156185991e-01 7.391919671038e-01 4.484605566122e-02 9.100353695049e-02 3.179859132982e-01 5.707245462271e-04 4.218750000000e-04 +2.890847651964e-01 2.890847651964e-01 5.436126647237e-01 4.088275956162e-01 6.801872772886e-01 8.098844067153e-01 4.552185107052e-02 8.431175614644e-02 3.060714443583e-01 5.209076708997e-04 4.218750000000e-04 +3.898750624646e-01 2.773886684017e-01 5.131088111329e-01 4.784841039046e-01 7.015894025366e-01 9.467379264237e-01 4.784196040311e-02 7.580021735873e-02 2.902110675559e-01 4.456090626829e-04 4.218750000000e-04 +4.758901694434e-01 2.608902543128e-01 4.758901694434e-01 5.427109526886e-01 7.218078910216e-01 1.170646287196e+00 5.088051875421e-02 6.519542150868e-02 2.691456060051e-01 3.603778567568e-04 4.218750000000e-04 +5.450992386002e-01 2.419324465319e-01 4.377661460123e-01 5.963761301456e-01 7.397997615584e-01 1.536036497398e+00 5.751706085099e-02 5.616767011893e-02 2.498169777144e-01 2.746516770367e-04 4.218750000000e-04 +5.990101020776e-01 2.239455315927e-01 4.039758023072e-01 6.395034820166e-01 7.564133475562e-01 2.032064826258e+00 6.432415448542e-02 4.748186695686e-02 2.296902913753e-01 2.076090263207e-04 4.218750000000e-04 +6.415091414620e-01 2.087810694225e-01 3.762417706426e-01 6.746284262678e-01 7.724515412017e-01 2.685933849407e+00 7.423185301739e-02 4.145589049063e-02 2.146208297094e-01 1.570682763066e-04 4.218750000000e-04 +6.789894969509e-01 1.970399943130e-01 3.548694817475e-01 7.070017654352e-01 7.910650070659e-01 2.470845373904e+00 4.508816531076e-02 2.737210862340e-02 1.743945355394e-01 1.707411578465e-04 4.218750000000e-04 +7.252822006383e-01 1.900745629013e-01 3.421882527840e-01 7.497750396118e-01 8.241695276872e-01 1.415732928517e+00 4.602068952600e-03 4.875992703037e-03 7.360550027030e-02 2.979905259686e-04 4.218750000000e-04 +7.890313469961e-01 1.877713508104e-01 3.379934335567e-01 8.110663023007e-01 8.786740623548e-01 1.046849204224e+00 3.597505695647e-05 5.154762043755e-05 7.568033682503e-03 4.029950047224e-04 4.218750000000e-04 +8.625330667307e-01 1.875047942523e-01 3.375088212344e-01 8.826785026676e-01 9.450045203504e-01 1.001044161532e+00 1.778481556111e-09 2.664939706640e-09 5.441547682864e-05 4.214349538330e-04 4.218750000000e-04 +9.375000327927e-01 1.875000035520e-01 3.375000068324e-01 9.560661916512e-01 1.013887970848e+00 1.000001045283e+00 6.675478719414e-15 1.001320761248e-14 1.054788425993e-07 4.218745590215e-04 4.218750000000e-04 +1.012500000000e+00 1.875000000000e-01 3.375000000000e-01 1.029714766331e+00 1.083613745760e+00 1.000000000003e+00 6.666666666704e-15 1.000000000002e-14 1.054092553391e-07 4.218749999986e-04 4.218750000000e-04 +1.087500000000e+00 1.875000000000e-01 3.375000000000e-01 1.103545422717e+00 1.154001191507e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 1.875000000000e-01 3.375000000000e-01 1.177523885108e+00 1.224936222830e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +5.781882147404e-02 4.055733401327e-01 5.408108798203e-01 4.096739561444e-01 6.784608743878e-01 7.889555482479e-01 4.463294934452e-02 8.485829672592e-02 3.070618770902e-01 5.347259436060e-04 4.218750000000e-04 +1.709752635799e-01 4.005074331571e-01 5.314326766515e-01 4.354753090249e-01 6.870658153214e-01 8.403596192844e-01 4.582330155169e-02 8.179230742436e-02 3.014636654435e-01 5.020172201506e-04 4.218750000000e-04 +2.773886684017e-01 3.898750624646e-01 5.131088111329e-01 4.784841039046e-01 7.015894025366e-01 9.467379264237e-01 4.784196040311e-02 7.580021735873e-02 2.902110675559e-01 4.456090626829e-04 4.218750000000e-04 +3.734576869459e-01 3.734576869459e-01 4.871905771406e-01 5.281489258514e-01 7.185373659961e-01 1.127632276422e+00 5.080762136834e-02 6.758535884971e-02 2.740343831827e-01 3.741246227347e-04 4.218750000000e-04 +4.565127205901e-01 3.523937651817e-01 4.565127205901e-01 5.767020286071e-01 7.355196080732e-01 1.400326988857e+00 5.455599179636e-02 5.843919909117e-02 2.548184519116e-01 3.012689203001e-04 4.218750000000e-04 +5.257048120963e-01 3.291883959455e-01 4.246863517372e-01 6.202665148840e-01 7.517240496606e-01 1.753353452617e+00 6.040163388013e-02 5.167380865790e-02 2.396149889995e-01 2.406103568966e-04 4.218750000000e-04 +5.815180389925e-01 3.067441695035e-01 3.949713097927e-01 6.574611891192e-01 7.669794982641e-01 2.269864476439e+00 6.786053437277e-02 4.484444010456e-02 2.232199714894e-01 1.858591137837e-04 4.218750000000e-04 +6.263686379438e-01 2.872175042399e-01 3.695256639199e-01 6.890802314254e-01 7.819084227943e-01 2.761070867145e+00 6.958329392553e-02 3.780234043621e-02 2.049453597540e-01 1.527939775180e-04 4.218750000000e-04 +6.682033330669e-01 2.726025399100e-01 3.505801642747e-01 7.216701733390e-01 8.023180732540e-01 2.087772894383e+00 2.656826632129e-02 1.908847441652e-02 1.456345289358e-01 2.020693922864e-04 4.218750000000e-04 +7.207222615117e-01 2.648572764876e-01 3.405506132978e-01 7.678476119302e-01 8.399789731680e-01 1.264316413675e+00 1.850018302616e-03 2.194883673034e-03 4.938379933444e-02 3.336783382995e-04 4.218750000000e-04 +7.883002365201e-01 2.626992570527e-01 3.377577969427e-01 8.309200698947e-01 8.969439736959e-01 1.025621262063e+00 8.403201437860e-06 1.228991892332e-05 3.695330224804e-03 4.113360512352e-04 4.218750000000e-04 +8.625131665003e-01 2.625026703271e-01 3.375034845468e-01 9.015745195574e-01 9.626760703354e-01 1.000438430694e+00 1.847916125997e-10 2.770659446853e-10 1.754568464467e-05 4.216901181090e-04 4.218750000000e-04 +9.375000095324e-01 2.625000014733e-01 3.375000019721e-01 9.735566335077e-01 1.030397384497e+00 1.000000318414e+00 6.667031335148e-15 1.000054381841e-14 1.054121214747e-07 4.218748656693e-04 4.218750000000e-04 +1.012500000000e+00 2.625000000000e-01 3.375000000000e-01 1.045974426074e+00 1.099076316731e+00 1.000000000001e+00 6.666666666675e-15 1.000000000000e-14 1.054092553390e-07 4.218749999997e-04 4.218750000000e-04 +1.087500000000e+00 2.625000000000e-01 3.375000000000e-01 1.118732541763e+00 1.168532733816e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 2.625000000000e-01 3.375000000000e-01 1.191768643655e+00 1.238635842369e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +5.423671680445e-02 4.963253975895e-01 4.963253975895e-01 4.992800033469e-01 7.040024304180e-01 9.486544601522e-01 4.789004113598e-02 7.572310543129e-02 2.900634134332e-01 4.447088141369e-04 4.218750000000e-04 +1.605378250392e-01 4.894429569983e-01 4.894429569983e-01 5.150988268513e-01 7.105499346133e-01 1.021745148232e+00 4.895419820814e-02 7.186850599610e-02 2.825843158267e-01 4.128965043093e-04 4.218750000000e-04 +2.608902543128e-01 4.758901694434e-01 4.758901694434e-01 5.427109526886e-01 7.218078910216e-01 1.170646287196e+00 5.088051875421e-02 6.519542150868e-02 2.691456060051e-01 3.603778567568e-04 4.218750000000e-04 +3.523937651817e-01 4.565127205901e-01 4.565127205901e-01 5.767020286071e-01 7.355196080732e-01 1.400326988857e+00 5.455599179636e-02 5.843919909117e-02 2.548184519116e-01 3.012689203001e-04 4.218750000000e-04 +4.330688292577e-01 4.330688292577e-01 4.330688292577e-01 6.124518117772e-01 7.500972154487e-01 1.695277554523e+00 5.942531284892e-02 5.258016248463e-02 2.417072666692e-01 2.488530558753e-04 4.218750000000e-04 +5.021863669679e-01 4.077877999472e-01 4.077877999472e-01 6.469018758314e-01 7.647044701974e-01 2.065985810900e+00 6.400329781496e-02 4.646931562449e-02 2.272280196545e-01 2.042003375697e-04 4.218750000000e-04 +5.597555029301e-01 3.828899629484e-01 3.828899629484e-01 6.781820896980e-01 7.788040000628e-01 2.570188005349e+00 7.074487683656e-02 4.128776378770e-02 2.141851841222e-01 1.641416889045e-04 4.218750000000e-04 +6.082088289033e-01 3.610729299663e-01 3.610729299663e-01 7.073129719653e-01 7.941443830090e-01 2.547028297734e+00 5.104645967388e-02 3.006236309935e-02 1.827638521862e-01 1.656342021701e-04 4.218750000000e-04 +6.568041215502e-01 3.459171346805e-01 3.459171346805e-01 7.423276353140e-01 8.189682424957e-01 1.672092689195e+00 1.120233491950e-02 1.004938451549e-02 1.056692140360e-01 2.523035969993e-04 4.218750000000e-04 +7.167345316892e-01 3.390943063278e-01 3.390943063278e-01 7.929018460690e-01 8.623678368791e-01 1.139700355789e+00 4.759446531935e-04 6.264076133381e-04 2.638197223986e-02 3.701630852857e-04 4.218750000000e-04 +7.878093979930e-01 3.375995233065e-01 3.375995233065e-01 8.570980607275e-01 9.211897328127e-01 1.010634462497e+00 9.128671521033e-07 1.354892178099e-06 1.226962001630e-03 4.174357946963e-04 4.218750000000e-04 +8.625035066863e-01 3.375009178493e-01 3.375009178493e-01 9.261852776822e-01 9.857616538212e-01 1.000124656241e+00 5.776376177515e-12 8.663484308888e-12 3.102594668426e-06 4.218224172033e-04 4.218750000000e-04 +9.375000016193e-01 3.375000003308e-01 3.375000003308e-01 9.963997708046e-01 1.052007012088e+00 1.000000057139e+00 6.666671165896e-15 1.000000617745e-14 1.054092878970e-07 4.218749758943e-04 4.218750000000e-04 +1.012500000000e+00 3.375000000000e-01 3.375000000000e-01 1.067268710307e+00 1.119360866745e+00 1.000000000000e+00 6.666666666668e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 3.375000000000e-01 3.375000000000e-01 1.138666983802e+00 1.187631571658e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 3.375000000000e-01 3.375000000000e-01 1.210500929368e+00 1.256669706009e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +4.982685275908e-02 5.657728051732e-01 4.506075785757e-01 5.679626592738e-01 7.250026015120e-01 1.305956537856e+00 5.183476419406e-02 5.953654967624e-02 2.571997703391e-01 3.230390811416e-04 4.218750000000e-04 +1.480007710295e-01 5.587616585062e-01 4.463995369992e-01 5.780301196667e-01 7.303364744246e-01 1.385869000295e+00 5.418343914318e-02 5.864562862540e-02 2.552681131355e-01 3.044118887933e-04 4.218750000000e-04 +2.419324465319e-01 5.450992386002e-01 4.377661460123e-01 5.963761301456e-01 7.397997615584e-01 1.536036497398e+00 5.751706085099e-02 5.616767011893e-02 2.498169777144e-01 2.746516770367e-04 4.218750000000e-04 +3.291883959455e-01 5.257048120963e-01 4.246863517372e-01 6.202665148840e-01 7.517240496606e-01 1.753353452617e+00 6.040163388013e-02 5.167380865790e-02 2.396149889995e-01 2.406103568966e-04 4.218750000000e-04 +4.077877999472e-01 5.021863669679e-01 4.077877999472e-01 6.469018758314e-01 7.647044701974e-01 2.065985810900e+00 6.400329781496e-02 4.646931562449e-02 2.272280196545e-01 2.042003375697e-04 4.218750000000e-04 +4.765650002131e-01 4.765650002131e-01 3.884049776878e-01 6.739646866537e-01 7.778732708796e-01 2.488658244211e+00 6.919795838796e-02 4.170799177565e-02 2.152724159851e-01 1.695190575007e-04 4.218750000000e-04 +5.359382756040e-01 4.514191841730e-01 3.687138204727e-01 7.007204257739e-01 7.918074238755e-01 2.625514428583e+00 5.959457221262e-02 3.404736890635e-02 1.945004110431e-01 1.606827962578e-04 4.218750000000e-04 +5.898421735704e-01 4.305314396874e-01 3.520439046911e-01 7.302541408863e-01 8.106824415958e-01 2.019034742766e+00 2.400150827691e-02 1.783142293333e-02 1.407575651542e-01 2.089488561361e-04 4.218750000000e-04 +6.471516224119e-01 4.178427365020e-01 3.418245763719e-01 7.703231625999e-01 8.427584564095e-01 1.341176708665e+00 3.049002488209e-03 3.410067967008e-03 6.155456447565e-02 3.145558652149e-04 4.218750000000e-04 +7.141220007036e-01 4.132649200445e-01 3.381204404485e-01 8.250806784966e-01 8.916745809304e-01 1.057895168824e+00 6.261096340321e-05 8.877670290266e-05 9.931806532699e-03 3.987871505918e-04 4.218750000000e-04 +7.875819149654e-01 4.125324489012e-01 3.375262448505e-01 8.890828387597e-01 9.509954048995e-01 1.003086502052e+00 3.415241199807e-08 5.107098729003e-08 2.382132268229e-04 4.205768885704e-04 4.218750000000e-04 +8.625005708965e-01 4.125001847146e-01 3.375001471222e-01 9.560667535200e-01 1.013888547373e+00 1.000021797130e+00 4.839889986203e-14 7.259676739184e-14 2.840124555012e-07 4.218658045360e-04 4.218750000000e-04 +9.375000001391e-01 4.125000000360e-01 3.375000000279e-01 1.024237521423e+00 1.078410288485e+00 1.000000005196e+00 6.666666736956e-15 1.000000005347e-14 1.054092556208e-07 4.218749978080e-04 4.218750000000e-04 +1.012500000000e+00 4.125000000000e-01 3.375000000000e-01 1.093303480283e+00 1.144210972679e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 4.125000000000e-01 3.375000000000e-01 1.163104681445e+00 1.211081644647e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 4.125000000000e-01 3.375000000000e-01 1.233516315255e+00 1.278854467874e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +4.575823828388e-02 6.172337279524e-01 4.126117817726e-01 6.189275331514e-01 7.438546724666e-01 1.829077450959e+00 6.167930921681e-02 5.058231064884e-02 2.370708066962e-01 2.306490628807e-04 4.218750000000e-04 +1.363033411712e-01 6.110918186474e-01 4.097877013356e-01 6.261084663477e-01 7.482898982334e-01 1.892708088720e+00 6.250654509346e-02 4.953738941518e-02 2.346093429398e-01 2.228949104800e-04 4.218750000000e-04 +2.239455315927e-01 5.990101020776e-01 4.039758023072e-01 6.395034820166e-01 7.564133475562e-01 2.032064826258e+00 6.432415448542e-02 4.748186695686e-02 2.296902913753e-01 2.076090263207e-04 4.218750000000e-04 +3.067441695035e-01 5.815180389925e-01 3.949713097927e-01 6.574611891192e-01 7.669794982641e-01 2.269864476439e+00 6.786053437277e-02 4.484444010456e-02 2.232199714894e-01 1.858591137837e-04 4.218750000000e-04 +3.828899629484e-01 5.597555029301e-01 3.828899629484e-01 6.781820896980e-01 7.788040000628e-01 2.570188005349e+00 7.074487683656e-02 4.128776378770e-02 2.141851841222e-01 1.641416889045e-04 4.218750000000e-04 +4.514191841730e-01 5.359382756040e-01 3.687138204727e-01 7.007204257739e-01 7.918074238755e-01 2.625514428583e+00 5.959457221262e-02 3.404736890635e-02 1.945004110431e-01 1.606827962578e-04 4.218750000000e-04 +5.138077920398e-01 5.138077920398e-01 3.548072437660e-01 7.266339479556e-01 8.086316062030e-01 2.119965181361e+00 2.850115610050e-02 2.016624354335e-02 1.496894694706e-01 1.990009098778e-04 4.218750000000e-04 +5.750062478958e-01 4.977602119226e-01 3.443521980907e-01 7.605244333304e-01 8.348507950660e-01 1.495266038155e+00 6.336207710085e-03 6.356267929990e-03 8.403880009978e-02 2.821404280141e-04 4.218750000000e-04 +6.409747695987e-01 4.898755256181e-01 3.391021471216e-01 8.067383007281e-01 8.751096800082e-01 1.134548923648e+00 4.351874941751e-04 5.753663219419e-04 2.528430171606e-02 3.718438149352e-04 4.218750000000e-04 +7.129165262765e-01 4.877388313082e-01 3.376615989073e-01 8.637934596905e-01 9.274451446747e-01 1.016841694213e+00 2.796313485389e-06 4.124998268615e-06 2.140871647150e-03 4.148875900753e-04 4.218750000000e-04 +7.875132236559e-01 4.875062848794e-01 3.375042024393e-01 9.261962293326e-01 9.857730681521e-01 1.000550757873e+00 2.966037037068e-10 4.446606552034e-10 2.222762683398e-05 4.216427769209e-04 4.218750000000e-04 +8.625000491041e-01 4.875000192186e-01 3.375000124013e-01 9.907384132265e-01 1.046646483687e+00 1.000002015596e+00 6.713706167496e-15 1.007053895311e-14 1.057803749553e-07 4.218741496723e-04 4.218750000000e-04 +9.375000000047e-01 4.875000000015e-01 3.375000000009e-01 1.056675210275e+00 1.109264959336e+00 1.000000000184e+00 6.666666668708e-15 1.000000000123e-14 1.054092553454e-07 4.218749999225e-04 4.218750000000e-04 +1.012500000000e+00 4.875000000000e-01 3.375000000000e-01 1.123749304783e+00 1.173336588537e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 4.875000000000e-01 3.375000000000e-01 1.191768643655e+00 1.238635842369e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 4.875000000000e-01 3.375000000000e-01 1.260580223548e+00 1.304978448098e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +4.249388302699e-02 6.575055945350e-01 3.830513630670e-01 6.588773307221e-01 7.621336389945e-01 2.478981883679e+00 7.297880692202e-02 4.415853585044e-02 2.215062975037e-01 1.701807515325e-04 4.218750000000e-04 +1.267422491644e-01 6.521037683921e-01 3.807811267663e-01 6.643063468570e-01 7.657004564292e-01 2.554076086807e+00 7.387619665269e-02 4.338723327447e-02 2.195632869394e-01 1.651771465146e-04 4.218750000000e-04 +2.087810694225e-01 6.415091414620e-01 3.762417706426e-01 6.746284262678e-01 7.724515412017e-01 2.685933849407e+00 7.423185301739e-02 4.145589049063e-02 2.146208297094e-01 1.570682763066e-04 4.218750000000e-04 +2.872175042399e-01 6.263686379438e-01 3.695256639199e-01 6.890802314254e-01 7.819084227943e-01 2.761070867145e+00 6.958329392553e-02 3.780234043621e-02 2.049453597540e-01 1.527939775180e-04 4.218750000000e-04 +3.610729299663e-01 6.082088289033e-01 3.610729299663e-01 7.073129719653e-01 7.941443830090e-01 2.547028297734e+00 5.104645967388e-02 3.006236309935e-02 1.827638521862e-01 1.656342021701e-04 4.218750000000e-04 +4.305314396874e-01 5.898421735704e-01 3.520439046911e-01 7.302541408863e-01 8.106824415958e-01 2.019034742766e+00 2.400150827691e-02 1.783142293333e-02 1.407575651542e-01 2.089488561361e-04 4.218750000000e-04 +4.977602119226e-01 5.750062478958e-01 3.443521980907e-01 7.605244333304e-01 8.348507950660e-01 1.495266038155e+00 6.336207710085e-03 6.356267929990e-03 8.403880009978e-02 2.821404280141e-04 4.218750000000e-04 +5.663364700638e-01 5.663364700638e-01 3.396531375705e-01 8.009207168307e-01 8.699645099141e-01 1.172096378514e+00 7.405092377297e-04 9.476727997424e-04 3.244949579719e-02 3.599320053652e-04 4.218750000000e-04 +6.382802394090e-01 5.631472384690e-01 3.378689849991e-01 8.511970842380e-01 9.158012487650e-01 1.035605346384e+00 1.819229290126e-05 2.635023027561e-05 5.410918003404e-03 4.073704345703e-04 4.218750000000e-04 +7.125617559243e-01 5.625423538575e-01 3.375241484056e-01 9.078535982687e-01 9.685663150484e-01 1.002885108987e+00 2.481448699341e-08 3.711465067787e-08 2.030726489540e-04 4.206613461695e-04 4.218750000000e-04 +7.875010870285e-01 5.625006152171e-01 3.375003405545e-01 9.677628346815e-01 1.024925062658e+00 1.000049932585e+00 3.492600289159e-13 5.238638854957e-13 7.629357665519e-07 4.218539357424e-04 4.218750000000e-04 +8.625000016962e-01 5.625000007970e-01 3.375000004176e-01 1.029714768187e+00 1.083613747654e+00 1.000000074505e+00 6.666672917832e-15 1.000000863169e-14 1.054093008320e-07 4.218749685681e-04 4.218750000000e-04 +9.375000000000e-01 5.625000000000e-01 3.375000000000e-01 1.093303480284e+00 1.144210972679e+00 1.000000000002e+00 6.666666666688e-15 1.000000000001e-14 1.054092553390e-07 4.218749999992e-04 4.218750000000e-04 +1.012500000000e+00 5.625000000000e-01 3.375000000000e-01 1.158258390861e+00 1.206428095661e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 5.625000000000e-01 3.375000000000e-01 1.224362078799e+00 1.270027066641e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 5.625000000000e-01 3.375000000000e-01 1.291438151829e+00 1.334810379792e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.993096897254e-02 6.915076031792e-01 3.597393766194e-01 6.926595466301e-01 7.805060324099e-01 2.813321233438e+00 6.626973211795e-02 3.533353994398e-02 1.981400737525e-01 1.499562136687e-04 4.218750000000e-04 +1.192548679406e-01 6.871639170439e-01 3.580608828827e-01 6.974352818826e-01 7.839793162230e-01 2.712780625828e+00 5.948151986467e-02 3.288960373263e-02 1.911648611732e-01 1.555138649928e-04 4.218750000000e-04 +1.970399943130e-01 6.789894969509e-01 3.548694817475e-01 7.070017654352e-01 7.910650070659e-01 2.470845373904e+00 4.508816531075e-02 2.737210862340e-02 1.743945355394e-01 1.707411578465e-04 4.218750000000e-04 +2.726025399100e-01 6.682033330669e-01 3.505801642747e-01 7.216701733390e-01 8.023180732540e-01 2.087772894383e+00 2.656826632129e-02 1.908847441652e-02 1.456345289358e-01 2.020693922864e-04 4.218750000000e-04 +3.459171346805e-01 6.568041215502e-01 3.459171346805e-01 7.423276353140e-01 8.189682424957e-01 1.672092689195e+00 1.120233491950e-02 1.004938451549e-02 1.056692140360e-01 2.523035969993e-04 4.218750000000e-04 +4.178427365020e-01 6.471516224119e-01 3.418245763719e-01 7.703231625999e-01 8.427584564095e-01 1.341176708665e+00 3.049002488209e-03 3.410067967008e-03 6.155456447565e-02 3.145558652149e-04 4.218750000000e-04 +4.898755256181e-01 6.409747695987e-01 3.391021471216e-01 8.067383007281e-01 8.751096800082e-01 1.134548923648e+00 4.351874941751e-04 5.753663219419e-04 2.528430171606e-02 3.718438149352e-04 4.218750000000e-04 +5.631472384690e-01 6.382802394090e-01 3.378689849991e-01 8.511970842380e-01 9.158012487650e-01 1.035605346384e+00 1.819229290126e-05 2.635023027561e-05 5.410918003404e-03 4.073704345703e-04 4.218750000000e-04 +6.375878157310e-01 6.375878157310e-01 3.375420946241e-01 9.016853362106e-01 9.627933896639e-01 1.004845964824e+00 9.666735798155e-08 1.443017557400e-07 4.004188858627e-04 4.198404678611e-04 4.218750000000e-04 +7.125040896385e-01 6.375033663441e-01 3.375015905715e-01 9.560714512272e-01 1.013893457662e+00 1.000219007780e+00 1.956552722524e-11 2.934186474122e-11 5.709822408332e-06 4.217826263235e-04 4.218750000000e-04 +7.875000331613e-01 6.375000224540e-01 3.375000101992e-01 1.013194246360e+00 1.067927356023e+00 1.000001666308e+00 6.687610179886e-15 1.003139855443e-14 1.055746105549e-07 4.218742970275e-04 4.218750000000e-04 +8.625000000163e-01 6.375000000092e-01 3.375000000039e-01 1.072526223474e+00 1.124374826311e+00 1.000000000764e+00 6.666666675220e-15 1.000000000519e-14 1.054092553663e-07 4.218749996777e-04 4.218750000000e-04 +9.375000000000e-01 6.375000000000e-01 3.375000000000e-01 1.133716234337e+00 1.182885772169e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 6.375000000000e-01 3.375000000000e-01 1.196479210016e+00 1.243168834069e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 6.375000000000e-01 3.375000000000e-01 1.260580223548e+00 1.304978448098e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 6.375000000000e-01 3.375000000000e-01 1.325825214725e+00 1.368107726022e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.825094752410e-02 7.314659404519e-01 3.443799375810e-01 7.324653964712e-01 8.093843947322e-01 1.644684811242e+00 1.063863261206e-02 9.702739886093e-03 1.038307377209e-01 2.565081145739e-04 4.218750000000e-04 +1.144973867095e-01 7.292150425168e-01 3.435851278437e-01 7.381491920988e-01 8.141959038656e-01 1.557598873535e+00 8.143644820967e-03 7.842498758186e-03 9.334820570903e-02 2.708495795471e-04 4.218750000000e-04 +1.900745629013e-01 7.252822006383e-01 3.421882527840e-01 7.497750396118e-01 8.241695276872e-01 1.415732928517e+00 4.602068952600e-03 4.875992703036e-03 7.360550027030e-02 2.979905259686e-04 4.218750000000e-04 +2.648572764876e-01 7.207222615117e-01 3.405506132978e-01 7.678476119302e-01 8.399789731680e-01 1.264316413675e+00 1.850018302616e-03 2.194883673034e-03 4.938379933444e-02 3.336783382995e-04 4.218750000000e-04 +3.390943063278e-01 7.167345316892e-01 3.390943063278e-01 7.929018460690e-01 8.623678368791e-01 1.139700355789e+00 4.759446531935e-04 6.264076133381e-04 2.638197223986e-02 3.701630852857e-04 4.218750000000e-04 +4.132649200445e-01 7.141220007036e-01 3.381204404485e-01 8.250806784966e-01 8.916745809304e-01 1.057895168824e+00 6.261096340321e-05 8.877670290266e-05 9.931806532699e-03 3.987871505918e-04 4.218750000000e-04 +4.877388313082e-01 7.129165262765e-01 3.376615989073e-01 8.637934596905e-01 9.274451446747e-01 1.016841694213e+00 2.796313485389e-06 4.124998268615e-06 2.140871647150e-03 4.148875900753e-04 4.218750000000e-04 +5.625423538575e-01 7.125617559243e-01 3.375241484056e-01 9.078535982687e-01 9.685663150484e-01 1.002885108987e+00 2.481448699341e-08 3.711465067787e-08 2.030726489540e-04 4.206613461695e-04 4.218750000000e-04 +6.375033663441e-01 7.125040896385e-01 3.375015905715e-01 9.560714512272e-01 1.013893457662e+00 1.000219007780e+00 1.956552722524e-11 2.934186474122e-11 5.709822408332e-06 4.217826263235e-04 4.218750000000e-04 +7.125000775374e-01 7.125000775374e-01 3.375000296007e-01 1.007627272845e+00 1.062647162026e+00 1.000004670744e+00 7.022570315448e-15 1.053380627246e-14 1.081860859428e-07 4.218730295390e-04 4.218750000000e-04 +7.875000002311e-01 7.125000001888e-01 3.375000000691e-01 1.061985169686e+00 1.114324347163e+00 1.000000012654e+00 6.666666866188e-15 1.000000017274e-14 1.054092562494e-07 4.218749946616e-04 4.218750000000e-04 +8.625000000000e-01 7.125000000000e-01 3.375000000000e-01 1.118732541763e+00 1.168532733816e+00 1.000000000001e+00 6.666666666680e-15 1.000000000001e-14 1.054092553390e-07 4.218749999995e-04 4.218750000000e-04 +9.375000000000e-01 7.125000000000e-01 3.375000000000e-01 1.177523885108e+00 1.224936222830e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 7.125000000000e-01 3.375000000000e-01 1.238068051441e+00 1.283245397420e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 7.125000000000e-01 3.375000000000e-01 1.300120186752e+00 1.343212101643e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 7.125000000000e-01 3.375000000000e-01 1.363474422202e+00 1.404624060025e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.759760278757e-02 7.902669681370e-01 3.383909790227e-01 7.911608310981e-01 8.604905085751e-01 1.081957932813e+00 1.321518161540e-04 1.832120438506e-04 1.426775867513e-02 3.899181171520e-04 4.218750000000e-04 +1.127424628782e-01 7.897871416024e-01 3.382367272118e-01 7.977935772970e-01 8.665325588870e-01 1.068344316136e+00 8.695704047596e-05 1.220913133939e-04 1.164718914082e-02 3.948867360721e-04 4.218750000000e-04 +1.877713508104e-01 7.890313469961e-01 3.379934335567e-01 8.110663023007e-01 8.786740623548e-01 1.046849204224e+00 3.597505695647e-05 5.154762043755e-05 7.568033682503e-03 4.029950047224e-04 4.218750000000e-04 +2.626992570527e-01 7.883002365201e-01 3.377577969427e-01 8.309200698947e-01 8.969439736959e-01 1.025621262063e+00 8.403201437859e-06 1.228991892332e-05 3.695330224804e-03 4.113360512352e-04 4.218750000000e-04 +3.375995233065e-01 7.878093979930e-01 3.375995233065e-01 8.570980607275e-01 9.211897328127e-01 1.010634462497e+00 9.128671521033e-07 1.354892178099e-06 1.226962001630e-03 4.174357946963e-04 4.218750000000e-04 +4.125324489012e-01 7.875819149654e-01 3.375262448505e-01 8.890828387597e-01 9.509954048995e-01 1.003086502052e+00 3.415241199807e-08 5.107098729003e-08 2.382132268229e-04 4.205768885704e-04 4.218750000000e-04 +4.875062848794e-01 7.875132236559e-01 3.375042024393e-01 9.261962293326e-01 9.857730681521e-01 1.000550757873e+00 2.966037037068e-10 4.446606552034e-10 2.222762683398e-05 4.216427769209e-04 4.218750000000e-04 +5.625006152171e-01 7.875010870285e-01 3.375003405545e-01 9.677628346815e-01 1.024925062658e+00 1.000049932585e+00 3.492600289159e-13 5.238638854957e-13 7.629357665519e-07 4.218539357424e-04 4.218750000000e-04 +6.375000224540e-01 7.875000331613e-01 3.375000101992e-01 1.013194246360e+00 1.067927356023e+00 1.000001666308e+00 6.687610179886e-15 1.003139855443e-14 1.055746105549e-07 4.218742970275e-04 4.218750000000e-04 +7.125000001888e-01 7.875000002311e-01 3.375000000691e-01 1.061985169686e+00 1.114324347163e+00 1.000000012654e+00 6.666666866188e-15 1.000000017274e-14 1.054092562494e-07 4.218749946616e-04 4.218750000000e-04 +7.875000000002e-01 7.875000000002e-01 3.375000000000e-01 1.113693180369e+00 1.163709048689e+00 1.000000000009e+00 6.666666666769e-15 1.000000000006e-14 1.054092553393e-07 4.218749999961e-04 4.218750000000e-04 +8.625000000000e-01 7.875000000000e-01 3.375000000000e-01 1.167930862680e+00 1.215717380809e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 7.875000000000e-01 3.375000000000e-01 1.224362078799e+00 1.270027066641e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 7.875000000000e-01 3.375000000000e-01 1.282697353237e+00 1.326355438787e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 7.875000000000e-01 3.375000000000e-01 1.342688534248e+00 1.384456120648e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 7.875000000000e-01 3.375000000000e-01 1.404123392014e+00 1.444115213548e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750227592491e-02 8.625781317715e-01 3.375210140878e-01 8.633929893796e-01 9.270209755236e-01 1.002336410674e+00 1.226886366941e-08 1.836039807407e-08 1.428301169380e-04 4.208916243162e-04 4.218750000000e-04 +1.125051514156e-01 8.625590639033e-01 3.375158417827e-01 8.698652469301e-01 9.330501011581e-01 1.001798508180e+00 6.706586493273e-09 1.004181944549e-08 1.056294332166e-04 4.211176165219e-04 4.218750000000e-04 +1.875047942523e-01 8.625330667307e-01 3.375088212344e-01 8.826785026676e-01 9.450045203504e-01 1.001044161532e+00 1.778481556111e-09 2.664939706640e-09 5.441547682864e-05 4.214349538330e-04 4.218750000000e-04 +2.625026703271e-01 8.625131665003e-01 3.375034845468e-01 9.015745195574e-01 9.626760703354e-01 1.000438430694e+00 1.847916125997e-10 2.770659446853e-10 1.754568464467e-05 4.216901181090e-04 4.218750000000e-04 +3.375009178493e-01 8.625035066863e-01 3.375009178493e-01 9.261852776822e-01 9.857616538212e-01 1.000124656241e+00 5.776376177515e-12 8.663484308888e-12 3.102594668426e-06 4.218224172033e-04 4.218750000000e-04 +4.125001847146e-01 8.625005708965e-01 3.375001471222e-01 9.560667535200e-01 1.013888547373e+00 1.000021797130e+00 4.839889986203e-14 7.259676739183e-14 2.840124555012e-07 4.218658045360e-04 4.218750000000e-04 +4.875000192186e-01 8.625000491041e-01 3.375000124013e-01 9.907384132265e-01 1.046646483687e+00 1.000002015596e+00 6.713706167496e-15 1.007053895311e-14 1.057803749553e-07 4.218741496723e-04 4.218750000000e-04 +5.625000007970e-01 8.625000016962e-01 3.375000004176e-01 1.029714768187e+00 1.083613747654e+00 1.000000074505e+00 6.666672917832e-15 1.000000863169e-14 1.054093008320e-07 4.218749685681e-04 4.218750000000e-04 +6.375000000092e-01 8.625000000163e-01 3.375000000039e-01 1.072526223474e+00 1.124374826311e+00 1.000000000764e+00 6.666666675221e-15 1.000000000519e-14 1.054092553663e-07 4.218749996776e-04 4.218750000000e-04 +7.125000000000e-01 8.625000000000e-01 3.375000000000e-01 1.118732541763e+00 1.168532733816e+00 1.000000000001e+00 6.666666666680e-15 1.000000000001e-14 1.054092553390e-07 4.218749999995e-04 4.218750000000e-04 +7.875000000000e-01 8.625000000000e-01 3.375000000000e-01 1.167930862680e+00 1.215717380809e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 8.625000000000e-01 3.375000000000e-01 1.219759197547e+00 1.265590277301e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 8.625000000000e-01 3.375000000000e-01 1.273896581360e+00 1.317846254310e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 8.625000000000e-01 3.375000000000e-01 1.330061088823e+00 1.372213084765e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 8.625000000000e-01 3.375000000000e-01 1.388006664249e+00 1.428449771606e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 8.625000000000e-01 3.375000000000e-01 1.447519429921e+00 1.486344088696e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750000223625e-02 9.375001051632e-01 3.375000219852e-01 9.382498054083e-01 9.971052914255e-01 1.000003184102e+00 6.793519582755e-15 1.019024692734e-14 1.064072205536e-07 4.218736567111e-04 4.218750000000e-04 +1.125000046112e-01 9.375000718346e-01 3.375000150082e-01 9.442259452734e-01 1.002730719514e+00 1.000002213574e+00 6.724204955860e-15 1.008628510705e-14 1.058630410119e-07 4.218740661505e-04 4.218750000000e-04 +1.875000035520e-01 9.375000327927e-01 3.375000068324e-01 9.560661916512e-01 1.013887970848e+00 1.000001045283e+00 6.675478719414e-15 1.001320761248e-14 1.054788425993e-07 4.218745590215e-04 4.218750000000e-04 +2.625000014733e-01 9.375000095324e-01 3.375000019721e-01 9.735566335077e-01 1.030397384497e+00 1.000000318414e+00 6.667031335148e-15 1.000054381841e-14 1.054121214747e-07 4.218748656693e-04 4.218750000000e-04 +3.375000003308e-01 9.375000016193e-01 3.375000003308e-01 9.963997708046e-01 1.052007012088e+00 1.000000057139e+00 6.666671165896e-15 1.000000617745e-14 1.054092878970e-07 4.218749758943e-04 4.218750000000e-04 +4.125000000360e-01 9.375000001391e-01 3.375000000279e-01 1.024237521423e+00 1.078410288485e+00 1.000000005196e+00 6.666666736956e-15 1.000000005347e-14 1.054092556208e-07 4.218749978080e-04 4.218750000000e-04 +4.875000000015e-01 9.375000000047e-01 3.375000000009e-01 1.056675210275e+00 1.109264959336e+00 1.000000000184e+00 6.666666668708e-15 1.000000000123e-14 1.054092553454e-07 4.218749999225e-04 4.218750000000e-04 +5.625000000000e-01 9.375000000000e-01 3.375000000000e-01 1.093303480284e+00 1.144210972679e+00 1.000000000002e+00 6.666666666688e-15 1.000000000001e-14 1.054092553390e-07 4.218749999992e-04 4.218750000000e-04 +6.375000000000e-01 9.375000000000e-01 3.375000000000e-01 1.133716234337e+00 1.182885772169e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.125000000000e-01 9.375000000000e-01 3.375000000000e-01 1.177523885108e+00 1.224936222830e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.875000000000e-01 9.375000000000e-01 3.375000000000e-01 1.224362078799e+00 1.270027066641e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 9.375000000000e-01 3.375000000000e-01 1.273896581360e+00 1.317846254310e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 9.375000000000e-01 3.375000000000e-01 1.325825214725e+00 1.368107726022e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 9.375000000000e-01 3.375000000000e-01 1.379877711973e+00 1.420552269366e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 9.375000000000e-01 3.375000000000e-01 1.435814228931e+00 1.474947032947e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 9.375000000000e-01 3.375000000000e-01 1.493423081381e+00 1.531084174695e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750000000001e-02 1.012500000000e+00 3.375000000001e-01 1.013194206458e+00 1.067927314943e+00 1.000000000013e+00 6.666666666816e-15 1.000000000009e-14 1.054092553394e-07 4.218749999943e-04 4.218750000000e-04 +1.125000000000e-01 1.012500000000e+00 3.375000000000e-01 1.018730828041e+00 1.073181601594e+00 1.000000000009e+00 6.666666666761e-15 1.000000000006e-14 1.054092553392e-07 4.218749999964e-04 4.218750000000e-04 +1.875000000000e-01 1.012500000000e+00 3.375000000000e-01 1.029714766331e+00 1.083613745760e+00 1.000000000003e+00 6.666666666704e-15 1.000000000002e-14 1.054092553391e-07 4.218749999986e-04 4.218750000000e-04 +2.625000000000e-01 1.012500000000e+00 3.375000000000e-01 1.045974426074e+00 1.099076316731e+00 1.000000000001e+00 6.666666666675e-15 1.000000000000e-14 1.054092553390e-07 4.218749999997e-04 4.218750000000e-04 +3.375000000000e-01 1.012500000000e+00 3.375000000000e-01 1.067268710307e+00 1.119360866745e+00 1.000000000000e+00 6.666666666668e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.125000000000e-01 1.012500000000e+00 3.375000000000e-01 1.093303480283e+00 1.144210972679e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.875000000000e-01 1.012500000000e+00 3.375000000000e-01 1.123749304783e+00 1.173336588537e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +5.625000000000e-01 1.012500000000e+00 3.375000000000e-01 1.158258390861e+00 1.206428095661e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +6.375000000000e-01 1.012500000000e+00 3.375000000000e-01 1.196479210016e+00 1.243168834069e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.125000000000e-01 1.012500000000e+00 3.375000000000e-01 1.238068051441e+00 1.283245397420e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.875000000000e-01 1.012500000000e+00 3.375000000000e-01 1.282697353237e+00 1.326355438787e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 1.012500000000e+00 3.375000000000e-01 1.330061088823e+00 1.372213084765e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 1.012500000000e+00 3.375000000000e-01 1.379877711973e+00 1.420552269366e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 1.012500000000e+00 3.375000000000e-01 1.431891231903e+00 1.471128393445e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 1.012500000000e+00 3.375000000000e-01 1.485870956712e+00 1.523718724043e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 1.012500000000e+00 3.375000000000e-01 1.541610359332e+00 1.578121905938e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750000000000e-02 1.087500000000e+00 3.375000000000e-01 1.088146359641e+00 1.139284314822e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.125000000000e-01 1.087500000000e+00 3.375000000000e-01 1.093303480283e+00 1.144210972679e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.875000000000e-01 1.087500000000e+00 3.375000000000e-01 1.103545422717e+00 1.154001191507e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +2.625000000000e-01 1.087500000000e+00 3.375000000000e-01 1.118732541763e+00 1.168532733816e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +3.375000000000e-01 1.087500000000e+00 3.375000000000e-01 1.138666983802e+00 1.187631571658e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.125000000000e-01 1.087500000000e+00 3.375000000000e-01 1.163104681445e+00 1.211081644647e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.875000000000e-01 1.087500000000e+00 3.375000000000e-01 1.191768643655e+00 1.238635842369e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +5.625000000000e-01 1.087500000000e+00 3.375000000000e-01 1.224362078799e+00 1.270027066641e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +6.375000000000e-01 1.087500000000e+00 3.375000000000e-01 1.260580223548e+00 1.304978448098e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.125000000000e-01 1.087500000000e+00 3.375000000000e-01 1.300120186752e+00 1.343212101643e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.875000000000e-01 1.087500000000e+00 3.375000000000e-01 1.342688534248e+00 1.384456120648e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 1.087500000000e+00 3.375000000000e-01 1.388006664249e+00 1.428449771606e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 1.087500000000e+00 3.375000000000e-01 1.435814228931e+00 1.474947032947e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 1.087500000000e+00 3.375000000000e-01 1.485870956712e+00 1.523718724043e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 1.087500000000e+00 3.375000000000e-01 1.537957249081e+00 1.574553508141e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 1.087500000000e+00 3.375000000000e-01 1.591873895759e+00 1.627258046531e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750000000000e-02 1.162500000000e+00 3.375000000000e-01 1.163104681445e+00 1.211081644647e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.125000000000e-01 1.162500000000e+00 3.375000000000e-01 1.167930862680e+00 1.215717380809e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.875000000000e-01 1.162500000000e+00 3.375000000000e-01 1.177523885108e+00 1.224936222830e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +2.625000000000e-01 1.162500000000e+00 3.375000000000e-01 1.191768643655e+00 1.238635842369e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.375000000000e-01 1.162500000000e+00 3.375000000000e-01 1.210500929368e+00 1.256669706009e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +4.125000000000e-01 1.162500000000e+00 3.375000000000e-01 1.233516315255e+00 1.278854467874e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +4.875000000000e-01 1.162500000000e+00 3.375000000000e-01 1.260580223548e+00 1.304978448098e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +5.625000000000e-01 1.162500000000e+00 3.375000000000e-01 1.291438151829e+00 1.334810379792e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +6.375000000000e-01 1.162500000000e+00 3.375000000000e-01 1.325825214725e+00 1.368107726022e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +7.125000000000e-01 1.162500000000e+00 3.375000000000e-01 1.363474422202e+00 1.404624060025e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +7.875000000000e-01 1.162500000000e+00 3.375000000000e-01 1.404123392014e+00 1.444115213548e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +8.625000000000e-01 1.162500000000e+00 3.375000000000e-01 1.447519429921e+00 1.486344088696e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +9.375000000000e-01 1.162500000000e+00 3.375000000000e-01 1.493423081381e+00 1.531084174695e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.012500000000e+00 1.162500000000e+00 3.375000000000e-01 1.541610359332e+00 1.578121905938e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.087500000000e+00 1.162500000000e+00 3.375000000000e-01 1.591873895759e+00 1.627258046531e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.162500000000e+00 1.162500000000e+00 3.375000000000e-01 1.644023266259e+00 1.678308300045e+00 9.999999999976e-01 6.666666666640e-15 9.999999999984e-15 1.054092553389e-07 4.218750000010e-04 4.218750000000e-04 +5.421361881294e-02 5.421361881294e-02 6.461867329303e-01 7.666963499058e-02 6.507192380318e-01 8.954535007798e-01 4.861241610130e-02 8.143206106007e-02 3.007990489422e-01 4.711299912643e-04 4.218750000000e-04 +1.612524738038e-01 5.378569813346e-02 6.391858186493e-01 1.699860630509e-01 6.614028820575e-01 9.349323386071e-01 4.905164748678e-02 7.869817760265e-02 2.957066444274e-01 4.512358622962e-04 4.218750000000e-04 +2.646200229795e-01 5.295884217948e-02 6.238962233680e-01 2.698673665463e-01 6.797609087462e-01 1.008716087860e+00 4.896241459026e-02 7.280901213858e-02 2.844273235401e-01 4.182296734208e-04 4.218750000000e-04 +3.618973716526e-01 5.169676168712e-02 5.993069122229e-01 3.655711459866e-01 7.020050126716e-01 1.133544541703e+00 4.985736442077e-02 6.597539300821e-02 2.707507935932e-01 3.721732887234e-04 4.218750000000e-04 +4.506075785757e-01 4.982685275908e-02 5.657728051732e-01 4.533540615520e-01 7.250026015120e-01 1.305956537856e+00 5.183476419406e-02 5.953654967624e-02 2.571997703391e-01 3.230390811416e-04 4.218750000000e-04 +5.261994080644e-01 4.716591662602e-02 5.261994080644e-01 5.283090390468e-01 7.456515659381e-01 1.610380054664e+00 5.899580018193e-02 5.495205930836e-02 2.470988540563e-01 2.619723206197e-04 4.218750000000e-04 +5.850085817363e-01 4.406778420106e-02 4.872224957326e-01 5.866660125740e-01 7.626026295899e-01 2.111981863191e+00 6.337257513101e-02 4.500931771871e-02 2.236299466100e-01 1.997531358355e-04 4.218750000000e-04 +6.302267016484e-01 4.121521519348e-02 4.544151095583e-01 6.315729486244e-01 7.780600755912e-01 2.731134135709e+00 7.050526147053e-02 3.872306776260e-02 2.074262057873e-01 1.544687953931e-04 4.218750000000e-04 +6.709987813268e-01 3.905568941958e-02 4.300716862624e-01 6.721344444515e-01 7.979513561256e-01 2.209199968700e+00 3.209784976778e-02 2.179376033578e-02 1.556126256509e-01 1.909627946664e-04 4.218750000000e-04 +7.218042618608e-01 3.787627058304e-02 4.167483580164e-01 7.227973466426e-01 8.343351833784e-01 1.301553777305e+00 2.364527344050e-03 2.725043773003e-03 5.502568867763e-02 3.241318240983e-04 4.218750000000e-04 +7.884478061942e-01 3.753345513575e-02 4.128762135480e-01 7.893406763539e-01 8.908004664685e-01 1.029839169949e+00 1.008997661345e-05 1.469643548412e-05 4.040961860762e-03 4.096513439288e-04 4.218750000000e-04 +8.625161835933e-01 3.750045874774e-02 4.125053153564e-01 8.633310207369e-01 9.568182097786e-01 1.000524175313e+00 1.936005094562e-10 2.902486230215e-10 1.795824239796e-05 4.216539793934e-04 4.218750000000e-04 +9.375000109980e-01 3.750000022638e-02 4.125000029067e-01 9.382497112380e-01 1.024923788892e+00 1.000000356604e+00 6.666928772152e-15 1.000038959205e-14 1.054113086493e-07 4.218748495577e-04 4.218750000000e-04 +1.012500000000e+00 3.750000000000e-02 4.125000000000e-01 1.013194206458e+00 1.093946410936e+00 1.000000000001e+00 6.666666666674e-15 1.000000000000e-14 1.054092553390e-07 4.218749999997e-04 4.218750000000e-04 +1.087500000000e+00 3.750000000000e-02 4.125000000000e-01 1.088146359641e+00 1.163709048689e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 3.750000000000e-02 4.125000000000e-01 1.163104681445e+00 1.234086200393e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +5.378569813346e-02 1.612524738038e-01 6.391858186493e-01 1.699860630509e-01 6.614028820575e-01 9.349323386071e-01 4.905164748678e-02 7.869817760265e-02 2.957066444274e-01 4.512358622962e-04 4.218750000000e-04 +1.600277866929e-01 1.600277866929e-01 6.318586229404e-01 2.263134662976e-01 6.711654821367e-01 9.724963240735e-01 4.914854102486e-02 7.580780483415e-02 2.902255920145e-01 4.338062669819e-04 4.218750000000e-04 +2.625808393044e-01 1.575574105931e-01 6.162654384075e-01 3.062238312127e-01 6.881541436176e-01 1.050494771669e+00 4.952147552967e-02 7.071164492944e-02 2.803007213085e-01 4.015964775623e-04 4.218750000000e-04 +3.590062233270e-01 1.536987424520e-01 5.916681073208e-01 3.905237147970e-01 7.089287136514e-01 1.185839004642e+00 5.105768601633e-02 6.458425530337e-02 2.678810998753e-01 3.557607722031e-04 4.218750000000e-04 +4.463995369992e-01 1.480007710295e-01 5.587616585062e-01 4.702943491670e-01 7.303364744246e-01 1.385869000295e+00 5.418343914318e-02 5.864562862540e-02 2.552681131355e-01 3.044118887933e-04 4.218750000000e-04 +5.207755874095e-01 1.401556710978e-01 5.207755874095e-01 5.393058729353e-01 7.497053001175e-01 1.693510660765e+00 5.958550315900e-02 5.277690705420e-02 2.421590548338e-01 2.491126922161e-04 4.218750000000e-04 +5.795478052352e-01 1.312037698371e-01 4.835112384987e-01 5.942138401051e-01 7.660765010931e-01 2.207915446422e+00 6.543655575786e-02 4.445588430293e-02 2.222508200283e-01 1.910738931075e-04 4.218750000000e-04 +6.254664687273e-01 1.229399338453e-01 4.517744020882e-01 6.374343345287e-01 7.812954890553e-01 2.738410935523e+00 6.862774905960e-02 3.759173696469e-02 2.043736691148e-01 1.540583243104e-04 4.218750000000e-04 +6.677280306509e-01 1.167411214037e-01 4.284489960969e-01 6.778563360651e-01 8.019088193803e-01 2.083750656572e+00 2.659079717296e-02 1.914153962406e-02 1.458368175739e-01 2.024594443051e-04 4.218750000000e-04 +7.205177650716e-01 1.134786874123e-01 4.161742013467e-01 7.293992475186e-01 8.397762964904e-01 1.259321501815e+00 1.739696670916e-03 2.072183316661e-03 4.798360040056e-02 3.350018239122e-04 4.218750000000e-04 +7.882638456557e-01 1.125809151375e-01 4.128031823094e-01 7.962627410730e-01 8.969062493627e-01 1.024427599860e+00 6.314974967222e-06 9.246590439507e-06 3.205306440456e-03 4.118153396664e-04 4.218750000000e-04 +8.625119321344e-01 1.125010139433e-01 4.125039148035e-01 8.698179759079e-01 9.626748105880e-01 1.000393524846e+00 1.005238370870e-10 1.507264410311e-10 1.294116777450e-05 4.217090470123e-04 4.218750000000e-04 +9.375000073838e-01 1.125000004590e-01 4.125000019477e-01 9.442258807869e-01 1.030397382350e+00 1.000000243321e+00 6.666784864604e-15 1.000017486365e-14 1.054101769473e-07 4.218748973489e-04 4.218750000000e-04 +1.012500000000e+00 1.125000000000e-01 4.125000000000e-01 1.018730828040e+00 1.099076316731e+00 1.000000000000e+00 6.666666666671e-15 1.000000000000e-14 1.054092553390e-07 4.218749999998e-04 4.218750000000e-04 +1.087500000000e+00 1.125000000000e-01 4.125000000000e-01 1.093303480283e+00 1.168532733816e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 1.125000000000e-01 4.125000000000e-01 1.167930862680e+00 1.238635842369e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +5.295884217948e-02 2.646200229795e-01 6.238962233680e-01 2.698673665463e-01 6.797609087462e-01 1.008716087860e+00 4.896241459026e-02 7.280901213858e-02 2.844273235401e-01 4.182296734208e-04 4.218750000000e-04 +1.575574105931e-01 2.625808393044e-01 6.162654384075e-01 3.062238312127e-01 6.881541436176e-01 1.050494771669e+00 4.952147552967e-02 7.071164492944e-02 2.803007213085e-01 4.015964775623e-04 4.218750000000e-04 +2.583909352344e-01 2.583909352344e-01 6.004748903567e-01 3.654199650028e-01 7.029237830459e-01 1.141066749267e+00 5.064923700771e-02 6.658142966691e-02 2.719914820294e-01 3.697198260058e-04 4.218750000000e-04 +3.528652959065e-01 2.516826801555e-01 5.763170639743e-01 4.334259896977e-01 7.211098714991e-01 1.299161952159e+00 5.337130613688e-02 6.162200106945e-02 2.616656073640e-01 3.247285677501e-04 4.218750000000e-04 +4.377661460123e-01 2.419324465319e-01 5.450992386002e-01 5.001704782166e-01 7.397997615584e-01 1.536036497398e+00 5.751706085099e-02 5.616767011893e-02 2.498169777144e-01 2.746516770367e-04 4.218750000000e-04 +5.102071387003e-01 2.293012671709e-01 5.102071387003e-01 5.593660657449e-01 7.571008650687e-01 1.864536855744e+00 6.085998932320e-02 4.896121184387e-02 2.332409622969e-01 2.262626231819e-04 4.218750000000e-04 +5.689413467002e-01 2.153981807600e-01 4.760712865650e-01 6.083507477268e-01 7.724859235943e-01 2.395571387416e+00 6.867141351817e-02 4.299897753762e-02 2.185786853938e-01 1.761062109091e-04 4.218750000000e-04 +6.163226973657e-01 2.025979323713e-01 4.465621132607e-01 6.487677469552e-01 7.876022539894e-01 2.685125058848e+00 6.142666525674e-02 3.431497448563e-02 1.952632823356e-01 1.571155870785e-04 4.218750000000e-04 +6.617658374297e-01 1.932559234890e-01 4.254503370901e-01 6.894069012946e-01 8.101171920671e-01 1.857827753986e+00 1.751470134039e-02 1.414127437499e-02 1.253496193984e-01 2.270797166717e-04 4.218750000000e-04 +7.183502349100e-01 1.887033284483e-01 4.151998706423e-01 7.427220248267e-01 8.508977251962e-01 1.190317692526e+00 9.079361580739e-04 1.144151889586e-03 3.565501195229e-02 3.544221871598e-04 4.218750000000e-04 +7.879860262308e-01 1.875859176426e-01 4.126928809289e-01 8.100064530810e-01 9.090796818774e-01 1.016082378279e+00 2.328920026704e-06 3.438087417649e-06 1.954506876611e-03 4.151976345801e-04 4.218750000000e-04 +8.625063595632e-01 1.875009005935e-01 4.125020814656e-01 8.826515779232e-01 9.742852637825e-01 1.000217300928e+00 2.315471655029e-11 3.472452915301e-11 6.211506272235e-06 4.217833460874e-04 4.218750000000e-04 +9.375000032520e-01 1.875000003418e-01 4.125000008545e-01 9.560661620545e-01 1.041258256597e+00 1.000000110551e+00 6.666685521146e-15 1.000002717621e-14 1.054093985700e-07 4.218749533613e-04 4.218750000000e-04 +1.012500000000e+00 1.875000000000e-01 4.125000000000e-01 1.029714766331e+00 1.109264959331e+00 1.000000000000e+00 6.666666666668e-15 1.000000000000e-14 1.054092553390e-07 4.218749999999e-04 4.218750000000e-04 +1.087500000000e+00 1.875000000000e-01 4.125000000000e-01 1.103545422717e+00 1.178120855430e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 1.875000000000e-01 4.125000000000e-01 1.177523885108e+00 1.247685356971e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +5.169676168712e-02 3.618973716526e-01 5.993069122229e-01 3.655711459866e-01 7.020050126716e-01 1.133544541703e+00 4.985736442077e-02 6.597539300821e-02 2.707507935932e-01 3.721732887234e-04 4.218750000000e-04 +1.536987424520e-01 3.590062233270e-01 5.916681073208e-01 3.905237147970e-01 7.089287136514e-01 1.185839004642e+00 5.105768601633e-02 6.458425530337e-02 2.678810998753e-01 3.557607722031e-04 4.218750000000e-04 +2.516826801555e-01 3.528652959065e-01 5.763170639743e-01 4.334259896977e-01 7.211098714991e-01 1.299161952159e+00 5.337130613688e-02 6.162200106945e-02 2.616656073640e-01 3.247285677501e-04 4.218750000000e-04 +3.429465154748e-01 3.429465154748e-01 5.537376750515e-01 4.849996133531e-01 7.361046377548e-01 1.486149271228e+00 5.704235155757e-02 5.757397927173e-02 2.529250641587e-01 2.838712154745e-04 4.218750000000e-04 +4.246863517372e-01 3.291883959455e-01 5.257048120963e-01 5.373299706670e-01 7.517240496606e-01 1.753353452617e+00 6.040163388013e-02 5.167380865790e-02 2.396149889995e-01 2.406103568966e-04 4.218750000000e-04 +4.951187828577e-01 3.125534963895e-01 4.951187828577e-01 5.855188274033e-01 7.667952180225e-01 2.135794845263e+00 6.431586255991e-02 4.516997222549e-02 2.240286991176e-01 1.975259940980e-04 4.218750000000e-04 +5.539217208960e-01 2.949461647258e-01 4.650987355997e-01 6.275527969557e-01 7.811141701591e-01 2.608816393441e+00 6.977628694975e-02 4.011950809867e-02 2.111332072904e-01 1.617112653311e-04 4.218750000000e-04 +6.038061875378e-01 2.790896619723e-01 4.391511482379e-01 6.651864035959e-01 7.970738250171e-01 2.449219149196e+00 4.527414447836e-02 2.772770118992e-02 1.755236647227e-01 1.722487757531e-04 4.218750000000e-04 +6.543442903260e-01 2.682129391096e-01 4.216382827073e-01 7.071807625976e-01 8.233367916184e-01 1.587931454621e+00 8.739906031128e-03 8.255935108875e-03 9.577714357864e-02 2.656758254724e-04 4.218750000000e-04 +7.159943742828e-01 2.635213069732e-01 4.141287378647e-01 7.629491616311e-01 8.680979407641e-01 1.116946772925e+00 3.140234575919e-04 4.217167709380e-04 2.164657455421e-02 3.777037637121e-04 4.218750000000e-04 +7.877351530361e-01 2.625583484675e-01 4.125932744012e-01 8.303394231751e-01 9.271983432685e-01 1.008221569871e+00 4.399221157605e-07 6.545021385776e-07 8.527746469141e-04 4.184348089814e-04 4.218750000000e-04 +8.625023561252e-01 2.625004684105e-01 4.125007677788e-01 9.015635364395e-01 9.914502981266e-01 1.000084658709e+00 1.880956037614e-12 2.821195217677e-12 1.770497487424e-06 4.218392876306e-04 4.218750000000e-04 +9.375000008923e-01 2.625000001344e-01 4.125000002331e-01 9.735566248265e-01 1.057340414406e+00 1.000000031677e+00 6.666667836804e-15 1.000000143844e-14 1.054092629202e-07 4.218749866364e-04 4.218750000000e-04 +1.012500000000e+00 2.625000000000e-01 4.125000000000e-01 1.045974426074e+00 1.124374826292e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 2.625000000000e-01 4.125000000000e-01 1.118732541763e+00 1.192358482169e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 2.625000000000e-01 4.125000000000e-01 1.191768643655e+00 1.261137879060e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +4.982685275908e-02 4.506075785757e-01 5.657728051732e-01 4.533540615520e-01 7.250026015120e-01 1.305956537856e+00 5.183476419406e-02 5.953654967624e-02 2.571997703391e-01 3.230390811416e-04 4.218750000000e-04 +1.480007710295e-01 4.463995369992e-01 5.587616585062e-01 4.702943491670e-01 7.303364744246e-01 1.385869000295e+00 5.418343914318e-02 5.864562862540e-02 2.552681131355e-01 3.044118887933e-04 4.218750000000e-04 +2.419324465319e-01 4.377661460123e-01 5.450992386002e-01 5.001704782166e-01 7.397997615584e-01 1.536036497398e+00 5.751706085099e-02 5.616767011893e-02 2.498169777144e-01 2.746516770367e-04 4.218750000000e-04 +3.291883959455e-01 4.246863517372e-01 5.257048120963e-01 5.373299706670e-01 7.517240496606e-01 1.753353452617e+00 6.040163388013e-02 5.167380865790e-02 2.396149889995e-01 2.406103568966e-04 4.218750000000e-04 +4.077877999472e-01 4.077877999472e-01 5.021863669679e-01 5.766990372556e-01 7.647044701974e-01 2.065985810900e+00 6.400329781496e-02 4.646931562449e-02 2.272280196545e-01 2.042003375697e-04 4.218750000000e-04 +4.765650002131e-01 3.884049776878e-01 4.765650002131e-01 6.147947837456e-01 7.778732708796e-01 2.488658244211e+00 6.919795838796e-02 4.170799177565e-02 2.152724159851e-01 1.695190575007e-04 4.218750000000e-04 +5.359382756040e-01 3.687138204727e-01 4.514191841730e-01 6.505226488486e-01 7.918074238755e-01 2.625514428583e+00 5.959457221262e-02 3.404736890635e-02 1.945004110431e-01 1.606827962578e-04 4.218750000000e-04 +5.898421735704e-01 3.520439046911e-01 4.305314396874e-01 6.869124402371e-01 8.106824415958e-01 2.019034742766e+00 2.400150827691e-02 1.783142293333e-02 1.407575651542e-01 2.089488561361e-04 4.218750000000e-04 +6.471516224119e-01 3.418245763719e-01 4.178427365020e-01 7.318806346682e-01 8.427584564095e-01 1.341176708665e+00 3.049002488209e-03 3.410067967008e-03 6.155456447565e-02 3.145558652149e-04 4.218750000000e-04 +7.141220007036e-01 3.381204404485e-01 4.132649200445e-01 7.901238283573e-01 8.916745809304e-01 1.057895168824e+00 6.261096340321e-05 8.877670290266e-05 9.931806532699e-03 3.987871505918e-04 4.218750000000e-04 +7.875819149654e-01 3.375262448505e-01 4.125324489012e-01 8.568601045349e-01 9.509954048995e-01 1.003086502052e+00 3.415241199807e-08 5.107098729003e-08 2.382132268229e-04 4.205768885704e-04 4.218750000000e-04 +8.625005708965e-01 3.375001471222e-01 4.125001847146e-01 9.261822628966e-01 1.013888547373e+00 1.000021797130e+00 4.839889986203e-14 7.259676739184e-14 2.840124555012e-07 4.218658045360e-04 4.218750000000e-04 +9.375000001391e-01 3.375000000279e-01 4.125000000360e-01 9.963997693093e-01 1.078410288485e+00 1.000000005196e+00 6.666666736956e-15 1.000000005347e-14 1.054092556208e-07 4.218749978080e-04 4.218750000000e-04 +1.012500000000e+00 3.375000000000e-01 4.125000000000e-01 1.067268710307e+00 1.144210972679e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 3.375000000000e-01 4.125000000000e-01 1.138666983802e+00 1.211081644647e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 3.375000000000e-01 4.125000000000e-01 1.210500929368e+00 1.278854467874e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +4.716591662602e-02 5.261994080644e-01 5.261994080644e-01 5.283090390468e-01 7.456515659381e-01 1.610380054664e+00 5.899580018193e-02 5.495205930836e-02 2.470988540563e-01 2.619723206197e-04 4.218750000000e-04 +1.401556710978e-01 5.207755874095e-01 5.207755874095e-01 5.393058729353e-01 7.497053001175e-01 1.693510660765e+00 5.958550315900e-02 5.277690705420e-02 2.421590548338e-01 2.491126922161e-04 4.218750000000e-04 +2.293012671709e-01 5.102071387003e-01 5.102071387003e-01 5.593660657449e-01 7.571008650687e-01 1.864536855744e+00 6.085998932320e-02 4.896121184387e-02 2.332409622969e-01 2.262626231819e-04 4.218750000000e-04 +3.125534963895e-01 4.951187828577e-01 4.951187828577e-01 5.855188274033e-01 7.667952180225e-01 2.135794845263e+00 6.431586255991e-02 4.516997222549e-02 2.240286991176e-01 1.975259940980e-04 4.218750000000e-04 +3.884049776878e-01 4.765650002131e-01 4.765650002131e-01 6.147947837456e-01 7.778732708796e-01 2.488658244211e+00 6.919795838796e-02 4.170799177565e-02 2.152724159851e-01 1.695190575007e-04 4.218750000000e-04 +4.562156485937e-01 4.562156485937e-01 4.562156485937e-01 6.451863576080e-01 7.901886825722e-01 2.655863200995e+00 6.339729739391e-02 3.580604078374e-02 1.994604967399e-01 1.588466604161e-04 4.218750000000e-04 +5.174867980630e-01 4.369025996380e-01 4.369025996380e-01 6.772565745269e-01 8.059530689254e-01 2.226456804207e+00 3.364270464148e-02 2.266563486291e-02 1.586947974465e-01 1.894826790274e-04 4.218750000000e-04 +5.771581992088e-01 4.223785902563e-01 4.223785902563e-01 7.152029505118e-01 8.306135888172e-01 1.568104398407e+00 8.229767288935e-03 7.872339970440e-03 9.352563505051e-02 2.690350211559e-04 4.218750000000e-04 +6.417476847768e-01 4.149032134351e-01 4.149032134351e-01 7.641889605557e-01 8.695570389307e-01 1.160557244481e+00 6.518099022288e-04 8.424529319798e-04 3.059507825306e-02 3.635107203943e-04 4.218750000000e-04 +7.130425231550e-01 4.127588920620e-01 4.127588920620e-01 8.238929195007e-01 9.215039043757e-01 1.021462411264e+00 5.429148356452e-06 7.972611076894e-06 2.976315969803e-03 4.130107925144e-04 4.218750000000e-04 +7.875189764637e-01 4.125074947225e-01 4.125074947225e-01 8.890155068910e-01 9.800566334120e-01 1.000780315326e+00 7.864702977434e-10 1.178785622128e-09 3.619063141705e-05 4.215460611480e-04 4.218750000000e-04 +8.625000823540e-01 4.125000263845e-01 4.125000263845e-01 9.560662444767e-01 1.041258342389e+00 1.000003360081e+00 6.872127141819e-15 1.030815607648e-14 1.070210575151e-07 4.218735824704e-04 4.218750000000e-04 +9.375000000106e-01 4.125000000027e-01 4.125000000027e-01 1.024237521292e+00 1.104182389836e+00 1.000000000416e+00 6.666666671301e-15 1.000000000279e-14 1.054092553537e-07 4.218749998246e-04 4.218750000000e-04 +1.012500000000e+00 4.125000000000e-01 4.125000000000e-01 1.093303480283e+00 1.168532733816e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 4.125000000000e-01 4.125000000000e-01 1.163104681445e+00 1.234086200393e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 4.125000000000e-01 4.125000000000e-01 1.233516315255e+00 1.300660889702e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +4.406778420106e-02 5.850085817363e-01 4.872224957326e-01 5.866660125740e-01 7.626026295899e-01 2.111981863191e+00 6.337257513101e-02 4.500931771871e-02 2.236299466100e-01 1.997531358355e-04 4.218750000000e-04 +1.312037698371e-01 5.795478052352e-01 4.835112384987e-01 5.942138401051e-01 7.660765010931e-01 2.207915446422e+00 6.543655575786e-02 4.445588430293e-02 2.222508200283e-01 1.910738931075e-04 4.218750000000e-04 +2.153981807600e-01 5.689413467002e-01 4.760712865650e-01 6.083507477268e-01 7.724859235943e-01 2.395571387416e+00 6.867141351817e-02 4.299897753762e-02 2.185786853938e-01 1.761062109091e-04 4.218750000000e-04 +2.949461647258e-01 5.539217208960e-01 4.650987355997e-01 6.275527969557e-01 7.811141701591e-01 2.608816393441e+00 6.977628694975e-02 4.011950809867e-02 2.111332072904e-01 1.617112653311e-04 4.218750000000e-04 +3.687138204727e-01 5.359382756040e-01 4.514191841730e-01 6.505226488486e-01 7.918074238755e-01 2.625514428583e+00 5.959457221262e-02 3.404736890635e-02 1.945004110431e-01 1.606827962578e-04 4.218750000000e-04 +4.369025996380e-01 5.174867980630e-01 4.369025996380e-01 6.772565745269e-01 8.059530689254e-01 2.226456804207e+00 3.364270464147e-02 2.266563486291e-02 1.586947974465e-01 1.894826790274e-04 4.218750000000e-04 +5.019879484172e-01 5.019879484172e-01 4.244110167205e-01 7.099181647995e-01 8.271085248176e-01 1.653709964637e+00 1.065245191417e-02 9.662321817572e-03 1.036142515807e-01 2.551082166894e-04 4.218750000000e-04 +5.682955280275e-01 4.923038857130e-01 4.164801980740e-01 7.518795934617e-01 8.595223548297e-01 1.244969500124e+00 1.590018818873e-03 1.915732255346e-03 4.613665998779e-02 3.388637231339e-04 4.218750000000e-04 +6.387954532056e-01 4.883984850792e-01 4.132483100276e-01 8.041098875550e-01 9.040834458193e-01 1.055856357010e+00 5.802050259778e-05 8.242669878236e-05 9.570016764316e-03 3.995571908994e-04 4.218750000000e-04 +7.126177230270e-01 4.875680433206e-01 4.125567125404e-01 8.634504131909e-01 9.569480953018e-01 1.005290425382e+00 1.321170998734e-07 1.971327337916e-07 4.680132165650e-04 4.196548473439e-04 4.218750000000e-04 +7.875026042315e-01 4.875012370566e-01 4.125010225558e-01 9.261845430599e-01 1.013890971166e+00 1.000117322190e+00 3.879549620607e-12 5.818641775114e-12 2.542667404106e-06 4.218255105073e-04 4.218750000000e-04 +8.625000060331e-01 4.875000023523e-01 4.125000019097e-01 9.907383674314e-01 1.073181608245e+00 1.000000263317e+00 6.666831945794e-15 1.000024528546e-14 1.054105480989e-07 4.218748889132e-04 4.218750000000e-04 +9.375000000003e-01 4.875000000001e-01 4.125000000001e-01 1.056675210271e+00 1.134336259669e+00 1.000000000012e+00 6.666666666804e-15 1.000000000008e-14 1.054092553394e-07 4.218749999948e-04 4.218750000000e-04 +1.012500000000e+00 4.875000000000e-01 4.125000000000e-01 1.123749304783e+00 1.197066727463e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 4.875000000000e-01 4.125000000000e-01 1.191768643655e+00 1.261137879060e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 4.875000000000e-01 4.125000000000e-01 1.260580223548e+00 1.326355438787e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +4.121521519348e-02 6.302267016484e-01 4.544151095583e-01 6.315729486244e-01 7.780600755912e-01 2.731134135709e+00 7.050526147053e-02 3.872306776260e-02 2.074262057873e-01 1.544687953931e-04 4.218750000000e-04 +1.229399338453e-01 6.254664687273e-01 4.517744020882e-01 6.374343345287e-01 7.812954890553e-01 2.738410935523e+00 6.862774905960e-02 3.759173696469e-02 2.043736691148e-01 1.540583243104e-04 4.218750000000e-04 +2.025979323713e-01 6.163226973657e-01 4.465621132607e-01 6.487677469552e-01 7.876022539894e-01 2.685125058848e+00 6.142666525674e-02 3.431497448563e-02 1.952632823356e-01 1.571155870785e-04 4.218750000000e-04 +2.790896619723e-01 6.038061875378e-01 4.391511482379e-01 6.651864035959e-01 7.970738250171e-01 2.449219149196e+00 4.527414447836e-02 2.772770118992e-02 1.755236647227e-01 1.722487757531e-04 4.218750000000e-04 +3.520439046911e-01 5.898421735704e-01 4.305314396874e-01 6.869124402371e-01 8.106824415958e-01 2.019034742766e+00 2.400150827691e-02 1.783142293333e-02 1.407575651542e-01 2.089488561361e-04 4.218750000000e-04 +4.223785902563e-01 5.771581992088e-01 4.223785902563e-01 7.152029505118e-01 8.306135888172e-01 1.568104398407e+00 8.229767288935e-03 7.872339970440e-03 9.352563505051e-02 2.690350211559e-04 4.218750000000e-04 +4.923038857130e-01 5.682955280275e-01 4.164801980740e-01 7.518795934617e-01 8.595223548297e-01 1.244969500124e+00 1.590018818873e-03 1.915732255346e-03 4.613665998779e-02 3.388637231339e-04 4.218750000000e-04 +5.639752709546e-01 5.639752709546e-01 4.135282261679e-01 7.975814770270e-01 8.984107113866e-01 1.073387812901e+00 1.102773346983e-04 1.541064655844e-04 1.308546545618e-02 3.930312930048e-04 4.218750000000e-04 +6.377365285824e-01 5.626974803116e-01 4.126388821575e-01 8.504918190302e-01 9.453079822500e-01 1.012088323355e+00 1.143825601599e-06 1.695245723922e-06 1.372445394146e-03 4.168361498348e-04 4.218750000000e-04 +7.125141837662e-01 5.625097802936e-01 4.125068550147e-01 9.077960756656e-01 9.971236735872e-01 1.000726704227e+00 5.587134316329e-10 8.374615605934e-10 3.050430863179e-05 4.215686442843e-04 4.218750000000e-04 +7.875001744097e-01 5.625000991006e-01 4.125000679799e-01 9.677617920664e-01 1.052007220634e+00 1.000008592422e+00 8.966566355913e-15 1.344973396808e-14 1.222462631471e-07 4.218713751031e-04 4.218750000000e-04 +8.625000001663e-01 5.625000000782e-01 4.125000000519e-01 1.029714766513e+00 1.109264959519e+00 1.000000007725e+00 6.666666775488e-15 1.000000008598e-14 1.054092557921e-07 4.218749967409e-04 4.218750000000e-04 +9.375000000000e-01 5.625000000000e-01 4.125000000000e-01 1.093303480283e+00 1.168532733816e+00 1.000000000000e+00 6.666666666668e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 5.625000000000e-01 4.125000000000e-01 1.158258390861e+00 1.229519723307e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 5.625000000000e-01 4.125000000000e-01 1.224362078799e+00 1.291982488271e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 5.625000000000e-01 4.125000000000e-01 1.291438151829e+00 1.355717061189e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.905568941958e-02 6.709987813268e-01 4.300716862624e-01 6.721344444515e-01 7.979513561256e-01 2.209199968700e+00 3.209784976778e-02 2.179376033578e-02 1.556126256509e-01 1.909627946664e-04 4.218750000000e-04 +1.167411214037e-01 6.677280306509e-01 4.284489960969e-01 6.778563360651e-01 8.019088193803e-01 2.083750656572e+00 2.659079717296e-02 1.914153962406e-02 1.458368175739e-01 2.024594443051e-04 4.218750000000e-04 +1.932559234890e-01 6.617658374297e-01 4.254503370901e-01 6.894069012946e-01 8.101171920671e-01 1.857827753986e+00 1.751470134039e-02 1.414127437499e-02 1.253496193984e-01 2.270797166717e-04 4.218750000000e-04 +2.682129391096e-01 6.543442903260e-01 4.216382827073e-01 7.071807625976e-01 8.233367916184e-01 1.587931454621e+00 8.739906031128e-03 8.255935108874e-03 9.577714357864e-02 2.656758254724e-04 4.218750000000e-04 +3.418245763719e-01 6.471516224119e-01 4.178427365020e-01 7.318806346682e-01 8.427584564095e-01 1.341176708665e+00 3.049002488209e-03 3.410067967008e-03 6.155456447565e-02 3.145558652149e-04 4.218750000000e-04 +4.149032134351e-01 6.417476847768e-01 4.149032134351e-01 7.641889605557e-01 8.695570389307e-01 1.160557244481e+00 6.518099022288e-04 8.424529319798e-04 3.059507825306e-02 3.635107203943e-04 4.218750000000e-04 +4.883984850792e-01 6.387954532056e-01 4.132483100276e-01 8.041098875550e-01 9.040834458193e-01 1.055856357010e+00 5.802050259778e-05 8.242669878236e-05 9.570016764316e-03 3.995571908994e-04 4.218750000000e-04 +5.626974803116e-01 6.377365285824e-01 4.126388821575e-01 8.504918190302e-01 9.453079822500e-01 1.012088323355e+00 1.143825601599e-06 1.695245723922e-06 1.372445394146e-03 4.168361498348e-04 4.218750000000e-04 +6.375207932947e-01 6.375207932947e-01 4.125122593083e-01 9.015905521722e-01 9.914796457042e-01 1.001259072207e+00 2.453583708557e-09 3.675747531279e-09 6.390746375537e-05 4.213444968545e-04 4.218750000000e-04 +7.125007174457e-01 6.375005936328e-01 4.125003453857e-01 9.560670893001e-01 1.041259244466e+00 1.000041412335e+00 1.829758423436e-13 2.744523978008e-13 5.522201632207e-07 4.218575298946e-04 4.218750000000e-04 +7.875000040525e-01 6.375000027585e-01 4.125000015674e-01 1.013194211343e+00 1.093946416052e+00 1.000000216725e+00 6.666743038437e-15 1.000011239038e-14 1.054098476866e-07 4.218749085691e-04 4.218750000000e-04 +8.625000000012e-01 6.375000000007e-01 4.125000000004e-01 1.072526223457e+00 1.149116508455e+00 1.000000000060e+00 6.666666667332e-15 1.000000000040e-14 1.054092553410e-07 4.218749999748e-04 4.218750000000e-04 +9.375000000000e-01 6.375000000000e-01 4.125000000000e-01 1.133716234337e+00 1.206428095661e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 6.375000000000e-01 4.125000000000e-01 1.196479210016e+00 1.265590277301e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 6.375000000000e-01 4.125000000000e-01 1.260580223548e+00 1.326355438787e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 6.375000000000e-01 4.125000000000e-01 1.325825214725e+00 1.388513143618e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.787627058304e-02 7.218042618608e-01 4.167483580164e-01 7.227973466426e-01 8.343351833784e-01 1.301553777305e+00 2.364527344050e-03 2.725043773003e-03 5.502568867763e-02 3.241318240983e-04 4.218750000000e-04 +1.134786874123e-01 7.205177650716e-01 4.161742013467e-01 7.293992475186e-01 8.397762964904e-01 1.259321501815e+00 1.739696670916e-03 2.072183316661e-03 4.798360040056e-02 3.350018239122e-04 4.218750000000e-04 +1.887033284483e-01 7.183502349100e-01 4.151998706423e-01 7.427220248267e-01 8.508977251962e-01 1.190317692526e+00 9.079361580739e-04 1.144151889586e-03 3.565501195229e-02 3.544221871598e-04 4.218750000000e-04 +2.635213069732e-01 7.159943742828e-01 4.141287378647e-01 7.629491616311e-01 8.680979407641e-01 1.116946772925e+00 3.140234575919e-04 4.217167709380e-04 2.164657455421e-02 3.777037637121e-04 4.218750000000e-04 +3.381204404485e-01 7.141220007036e-01 4.132649200445e-01 7.901238283573e-01 8.916745809304e-01 1.057895168824e+00 6.261096340321e-05 8.877670290266e-05 9.931806532699e-03 3.987871505918e-04 4.218750000000e-04 +4.127588920620e-01 7.130425231550e-01 4.127588920620e-01 8.238929195007e-01 9.215039043757e-01 1.021462411264e+00 5.429148356452e-06 7.972611076894e-06 2.976315969803e-03 4.130107925144e-04 4.218750000000e-04 +4.875680433206e-01 7.126177230270e-01 4.125567125404e-01 8.634504131909e-01 9.569480953018e-01 1.005290425382e+00 1.321170998734e-07 1.971327337916e-07 4.680132165650e-04 4.196548473439e-04 4.218750000000e-04 +5.625097802936e-01 7.125141837662e-01 4.125068550147e-01 9.077960756656e-01 9.971236735872e-01 1.000726704227e+00 5.587134316329e-10 8.374615605934e-10 3.050430863179e-05 4.215686442843e-04 4.218750000000e-04 +6.375005936328e-01 7.125007174457e-01 4.125003453857e-01 9.560670893001e-01 1.041259244466e+00 1.000041412335e+00 1.829758423436e-13 2.744523978008e-13 5.522201632207e-07 4.218575298946e-04 4.218750000000e-04 +7.125000097116e-01 7.125000097116e-01 4.125000046342e-01 1.007627176925e+00 1.088792350038e+00 1.000000621602e+00 6.667884767281e-15 1.000182093377e-14 1.054188520657e-07 4.218747377619e-04 4.218750000000e-04 +7.875000000195e-01 7.125000000160e-01 4.125000000074e-01 1.061985169413e+00 1.139284314848e+00 1.000000001128e+00 6.666666679375e-15 1.000000000778e-14 1.054092553799e-07 4.218749995240e-04 4.218750000000e-04 +8.625000000000e-01 7.125000000000e-01 4.125000000000e-01 1.118732541763e+00 1.192358482169e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 7.125000000000e-01 4.125000000000e-01 1.177523885108e+00 1.247685356971e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 7.125000000000e-01 4.125000000000e-01 1.238068051441e+00 1.304978448098e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 7.125000000000e-01 4.125000000000e-01 1.300120186752e+00 1.363990010960e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 7.125000000000e-01 4.125000000000e-01 1.363474422202e+00 1.424506493492e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.753345513575e-02 7.884478061942e-01 4.128762135480e-01 7.893406763539e-01 8.908004664685e-01 1.029839169949e+00 1.008997661345e-05 1.469643548412e-05 4.040961860762e-03 4.096513439288e-04 4.218750000000e-04 +1.125809151375e-01 7.882638456557e-01 4.128031823094e-01 7.962627410730e-01 8.969062493627e-01 1.024427599860e+00 6.314974967222e-06 9.246590439507e-06 3.205306440456e-03 4.118153396664e-04 4.218750000000e-04 +1.875859176426e-01 7.879860262308e-01 4.126928809289e-01 8.100064530810e-01 9.090796818774e-01 1.016082378279e+00 2.328920026704e-06 3.438087417648e-06 1.954506876611e-03 4.151976345801e-04 4.218750000000e-04 +2.625583484675e-01 7.877351530361e-01 4.125932744012e-01 8.303394231751e-01 9.271983432685e-01 1.008221569871e+00 4.399221157605e-07 6.545021385776e-07 8.527746469141e-04 4.184348089814e-04 4.218750000000e-04 +3.375262448505e-01 7.875819149654e-01 4.125324489012e-01 8.568601045349e-01 9.509954048995e-01 1.003086502052e+00 3.415241199807e-08 5.107098729003e-08 2.382132268229e-04 4.205768885704e-04 4.218750000000e-04 +4.125074947225e-01 7.875189764637e-01 4.125074947225e-01 8.890155068910e-01 9.800566334120e-01 1.000780315326e+00 7.864702977434e-10 1.178785622128e-09 3.619063141705e-05 4.215460611480e-04 4.218750000000e-04 +4.875012370566e-01 7.875026042315e-01 4.125010225558e-01 9.261845430599e-01 1.013890971166e+00 1.000117322190e+00 3.879549620607e-12 5.818641775114e-12 2.542667404106e-06 4.218255105073e-04 4.218750000000e-04 +5.625000991006e-01 7.875001744097e-01 4.125000679799e-01 9.677617920664e-01 1.052007220634e+00 1.000008592422e+00 8.966566355913e-15 1.344973396808e-14 1.222462631471e-07 4.218713751031e-04 4.218750000000e-04 +6.375000027585e-01 7.875000040525e-01 4.125000015674e-01 1.013194211343e+00 1.093946416052e+00 1.000000216725e+00 6.666743038437e-15 1.000011239038e-14 1.054098476866e-07 4.218749085691e-04 4.218750000000e-04 +7.125000000160e-01 7.875000000195e-01 4.125000000074e-01 1.061985169413e+00 1.139284314848e+00 1.000000001128e+00 6.666666679375e-15 1.000000000778e-14 1.054092553799e-07 4.218749995240e-04 4.218750000000e-04 +7.875000000000e-01 7.875000000000e-01 4.125000000000e-01 1.113693180369e+00 1.187631571658e+00 1.000000000001e+00 6.666666666672e-15 1.000000000000e-14 1.054092553390e-07 4.218749999998e-04 4.218750000000e-04 +8.625000000000e-01 7.875000000000e-01 4.125000000000e-01 1.167930862680e+00 1.238635842369e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 7.875000000000e-01 4.125000000000e-01 1.224362078799e+00 1.291982488271e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 7.875000000000e-01 4.125000000000e-01 1.282697353237e+00 1.347393316742e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 7.875000000000e-01 4.125000000000e-01 1.342688534248e+00 1.404624060025e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 7.875000000000e-01 4.125000000000e-01 1.404123392014e+00 1.463461222582e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750045874774e-02 8.625161835933e-01 4.125053153564e-01 8.633310207369e-01 9.568182097786e-01 1.000524175313e+00 1.936005094562e-10 2.902486230215e-10 1.795824239796e-05 4.216539793934e-04 4.218750000000e-04 +1.125010139433e-01 8.625119321344e-01 4.125039148035e-01 8.698179759079e-01 9.626748105880e-01 1.000393524846e+00 1.005238370870e-10 1.507264410310e-10 1.294116777450e-05 4.217090470123e-04 4.218750000000e-04 +1.875009005935e-01 8.625063595632e-01 4.125020814656e-01 8.826515779232e-01 9.742852637825e-01 1.000217300928e+00 2.315471655028e-11 3.472452915301e-11 6.211506272235e-06 4.217833460874e-04 4.218750000000e-04 +2.625004684105e-01 8.625023561252e-01 4.125007677788e-01 9.015635364395e-01 9.914502981266e-01 1.000084658709e+00 1.880956037614e-12 2.821195217677e-12 1.770497487424e-06 4.218392876306e-04 4.218750000000e-04 +3.375001471222e-01 8.625005708965e-01 4.125001847146e-01 9.261822628966e-01 1.013888547373e+00 1.000021797130e+00 4.839889986203e-14 7.259676739184e-14 2.840124555012e-07 4.218658045360e-04 4.218750000000e-04 +4.125000263845e-01 8.625000823540e-01 4.125000263845e-01 9.560662444767e-01 1.041258342389e+00 1.000003360081e+00 6.872127141819e-15 1.030815607648e-14 1.070210575151e-07 4.218735824704e-04 4.218750000000e-04 +4.875000023523e-01 8.625000060331e-01 4.125000019097e-01 9.907383674314e-01 1.073181608245e+00 1.000000263317e+00 6.666831945794e-15 1.000024528546e-14 1.054105480989e-07 4.218748889132e-04 4.218750000000e-04 +5.625000000782e-01 8.625000001663e-01 4.125000000519e-01 1.029714766513e+00 1.109264959519e+00 1.000000007725e+00 6.666666775488e-15 1.000000008598e-14 1.054092557921e-07 4.218749967409e-04 4.218750000000e-04 +6.375000000007e-01 8.625000000012e-01 4.125000000004e-01 1.072526223457e+00 1.149116508455e+00 1.000000000060e+00 6.666666667332e-15 1.000000000040e-14 1.054092553410e-07 4.218749999748e-04 4.218750000000e-04 +7.125000000000e-01 8.625000000000e-01 4.125000000000e-01 1.118732541763e+00 1.192358482169e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.875000000000e-01 8.625000000000e-01 4.125000000000e-01 1.167930862680e+00 1.238635842369e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 8.625000000000e-01 4.125000000000e-01 1.219759197547e+00 1.287621353504e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 8.625000000000e-01 4.125000000000e-01 1.273896581360e+00 1.339017830352e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 8.625000000000e-01 4.125000000000e-01 1.330061088823e+00 1.392558347072e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 8.625000000000e-01 4.125000000000e-01 1.388006664249e+00 1.448005093223e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 8.625000000000e-01 4.125000000000e-01 1.447519429921e+00 1.505147418029e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750000022638e-02 9.375000109980e-01 4.125000029067e-01 9.382497112380e-01 1.024923788892e+00 1.000000356604e+00 6.666928772152e-15 1.000038959205e-14 1.054113086493e-07 4.218748495577e-04 4.218750000000e-04 +1.125000004590e-01 9.375000073838e-01 4.125000019477e-01 9.442258807869e-01 1.030397382350e+00 1.000000243321e+00 6.666784864604e-15 1.000017486365e-14 1.054101769473e-07 4.218748973489e-04 4.218750000000e-04 +1.875000003418e-01 9.375000032520e-01 4.125000008545e-01 9.560661620545e-01 1.041258256597e+00 1.000000110551e+00 6.666685521146e-15 1.000002717621e-14 1.054093985700e-07 4.218749533613e-04 4.218750000000e-04 +2.625000001344e-01 9.375000008923e-01 4.125000002331e-01 9.735566248265e-01 1.057340414406e+00 1.000000031677e+00 6.666667836804e-15 1.000000143844e-14 1.054092629202e-07 4.218749866364e-04 4.218750000000e-04 +3.375000000279e-01 9.375000001391e-01 4.125000000360e-01 9.963997693093e-01 1.078410288485e+00 1.000000005196e+00 6.666666736956e-15 1.000000005347e-14 1.054092556208e-07 4.218749978080e-04 4.218750000000e-04 +4.125000000027e-01 9.375000000106e-01 4.125000000027e-01 1.024237521292e+00 1.104182389836e+00 1.000000000416e+00 6.666666671301e-15 1.000000000279e-14 1.054092553537e-07 4.218749998246e-04 4.218750000000e-04 +4.875000000001e-01 9.375000000003e-01 4.125000000001e-01 1.056675210271e+00 1.134336259669e+00 1.000000000012e+00 6.666666666804e-15 1.000000000008e-14 1.054092553394e-07 4.218749999948e-04 4.218750000000e-04 +5.625000000000e-01 9.375000000000e-01 4.125000000000e-01 1.093303480283e+00 1.168532733816e+00 1.000000000000e+00 6.666666666668e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +6.375000000000e-01 9.375000000000e-01 4.125000000000e-01 1.133716234337e+00 1.206428095661e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.125000000000e-01 9.375000000000e-01 4.125000000000e-01 1.177523885108e+00 1.247685356971e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.875000000000e-01 9.375000000000e-01 4.125000000000e-01 1.224362078799e+00 1.291982488271e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 9.375000000000e-01 4.125000000000e-01 1.273896581360e+00 1.339017830352e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 9.375000000000e-01 4.125000000000e-01 1.325825214725e+00 1.388513143618e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 9.375000000000e-01 4.125000000000e-01 1.379877711973e+00 1.440214827725e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 9.375000000000e-01 4.125000000000e-01 1.435814228931e+00 1.493893821528e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 9.375000000000e-01 4.125000000000e-01 1.493423081381e+00 1.549344619509e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750000000000e-02 1.012500000000e+00 4.125000000000e-01 1.013194206458e+00 1.093946410936e+00 1.000000000001e+00 6.666666666674e-15 1.000000000000e-14 1.054092553390e-07 4.218749999997e-04 4.218750000000e-04 +1.125000000000e-01 1.012500000000e+00 4.125000000000e-01 1.018730828040e+00 1.099076316731e+00 1.000000000000e+00 6.666666666671e-15 1.000000000000e-14 1.054092553390e-07 4.218749999998e-04 4.218750000000e-04 +1.875000000000e-01 1.012500000000e+00 4.125000000000e-01 1.029714766331e+00 1.109264959331e+00 1.000000000000e+00 6.666666666668e-15 1.000000000000e-14 1.054092553390e-07 4.218749999999e-04 4.218750000000e-04 +2.625000000000e-01 1.012500000000e+00 4.125000000000e-01 1.045974426074e+00 1.124374826292e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +3.375000000000e-01 1.012500000000e+00 4.125000000000e-01 1.067268710307e+00 1.144210972679e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.125000000000e-01 1.012500000000e+00 4.125000000000e-01 1.093303480283e+00 1.168532733816e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.875000000000e-01 1.012500000000e+00 4.125000000000e-01 1.123749304783e+00 1.197066727463e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +5.625000000000e-01 1.012500000000e+00 4.125000000000e-01 1.158258390861e+00 1.229519723307e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +6.375000000000e-01 1.012500000000e+00 4.125000000000e-01 1.196479210016e+00 1.265590277301e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.125000000000e-01 1.012500000000e+00 4.125000000000e-01 1.238068051441e+00 1.304978448098e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.875000000000e-01 1.012500000000e+00 4.125000000000e-01 1.282697353237e+00 1.347393316742e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 1.012500000000e+00 4.125000000000e-01 1.330061088823e+00 1.392558347072e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 1.012500000000e+00 4.125000000000e-01 1.379877711973e+00 1.440214827725e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 1.012500000000e+00 4.125000000000e-01 1.431891231903e+00 1.490123736473e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 1.012500000000e+00 4.125000000000e-01 1.485870956712e+00 1.542066389621e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 1.012500000000e+00 4.125000000000e-01 1.541610359332e+00 1.595844212322e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750000000000e-02 1.087500000000e+00 4.125000000000e-01 1.088146359641e+00 1.163709048689e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.125000000000e-01 1.087500000000e+00 4.125000000000e-01 1.093303480283e+00 1.168532733816e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.875000000000e-01 1.087500000000e+00 4.125000000000e-01 1.103545422717e+00 1.178120855430e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +2.625000000000e-01 1.087500000000e+00 4.125000000000e-01 1.118732541763e+00 1.192358482169e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +3.375000000000e-01 1.087500000000e+00 4.125000000000e-01 1.138666983802e+00 1.211081644647e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.125000000000e-01 1.087500000000e+00 4.125000000000e-01 1.163104681445e+00 1.234086200393e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.875000000000e-01 1.087500000000e+00 4.125000000000e-01 1.191768643655e+00 1.261137879060e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +5.625000000000e-01 1.087500000000e+00 4.125000000000e-01 1.224362078799e+00 1.291982488271e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +6.375000000000e-01 1.087500000000e+00 4.125000000000e-01 1.260580223548e+00 1.326355438787e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.125000000000e-01 1.087500000000e+00 4.125000000000e-01 1.300120186752e+00 1.363990010960e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.875000000000e-01 1.087500000000e+00 4.125000000000e-01 1.342688534248e+00 1.404624060025e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 1.087500000000e+00 4.125000000000e-01 1.388006664249e+00 1.448005093223e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 1.087500000000e+00 4.125000000000e-01 1.435814228931e+00 1.493893821528e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 1.087500000000e+00 4.125000000000e-01 1.485870956712e+00 1.542066389621e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 1.087500000000e+00 4.125000000000e-01 1.537957249081e+00 1.592315530917e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 1.087500000000e+00 4.125000000000e-01 1.591873895759e+00 1.644450896196e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750000000000e-02 1.162500000000e+00 4.125000000000e-01 1.163104681445e+00 1.234086200393e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.125000000000e-01 1.162500000000e+00 4.125000000000e-01 1.167930862680e+00 1.238635842369e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.875000000000e-01 1.162500000000e+00 4.125000000000e-01 1.177523885108e+00 1.247685356971e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +2.625000000000e-01 1.162500000000e+00 4.125000000000e-01 1.191768643655e+00 1.261137879060e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.375000000000e-01 1.162500000000e+00 4.125000000000e-01 1.210500929368e+00 1.278854467874e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +4.125000000000e-01 1.162500000000e+00 4.125000000000e-01 1.233516315255e+00 1.300660889702e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +4.875000000000e-01 1.162500000000e+00 4.125000000000e-01 1.260580223548e+00 1.326355438787e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +5.625000000000e-01 1.162500000000e+00 4.125000000000e-01 1.291438151829e+00 1.355717061189e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +6.375000000000e-01 1.162500000000e+00 4.125000000000e-01 1.325825214725e+00 1.388513143618e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +7.125000000000e-01 1.162500000000e+00 4.125000000000e-01 1.363474422202e+00 1.424506493492e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +7.875000000000e-01 1.162500000000e+00 4.125000000000e-01 1.404123392014e+00 1.463461222582e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +8.625000000000e-01 1.162500000000e+00 4.125000000000e-01 1.447519429921e+00 1.505147418029e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +9.375000000000e-01 1.162500000000e+00 4.125000000000e-01 1.493423081381e+00 1.549344619509e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.012500000000e+00 1.162500000000e+00 4.125000000000e-01 1.541610359332e+00 1.595844212322e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.087500000000e+00 1.162500000000e+00 4.125000000000e-01 1.591873895759e+00 1.644450896196e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.162500000000e+00 1.162500000000e+00 4.125000000000e-01 1.644023266259e+00 1.694983406998e+00 9.999999999976e-01 6.666666666640e-15 9.999999999984e-15 1.054092553389e-07 4.218750000010e-04 4.218750000000e-04 +4.895116532488e-02 4.895116532488e-02 6.842855824350e-01 6.922740189642e-02 6.877784465231e-01 1.237798726193e+00 5.461859201229e-02 6.618837641757e-02 2.711874636925e-01 3.408268170526e-04 4.218750000000e-04 +1.458882362481e-01 4.864214716210e-02 6.781511051953e-01 1.537837311165e-01 6.953692238183e-01 1.295854622235e+00 5.560295412388e-02 6.436249078773e-02 2.674207894930e-01 3.255573524695e-04 4.218750000000e-04 +2.400644141640e-01 4.801636952264e-02 6.650434377606e-01 2.448193102883e-01 7.086743037521e-01 1.417815253743e+00 5.736395288813e-02 6.068909831873e-02 2.596773603248e-01 2.975528714946e-04 4.218750000000e-04 +3.296369078171e-01 4.705717467082e-02 6.445175833589e-01 3.329787811306e-01 7.254500561321e-01 1.603878786859e+00 5.995818503914e-02 5.607485945670e-02 2.496104953650e-01 2.630342164610e-04 4.218750000000e-04 +4.126117817726e-01 4.575823828388e-02 6.172337279524e-01 4.151412998346e-01 7.438546724666e-01 1.829077450959e+00 6.167930921681e-02 5.058231064884e-02 2.370708066962e-01 2.306490628807e-04 4.218750000000e-04 +4.872224957326e-01 4.406778420106e-02 5.850085817363e-01 4.892113346523e-01 7.626026295899e-01 2.111981863191e+00 6.337257513101e-02 4.500931771871e-02 2.236299466100e-01 1.997531358355e-04 4.218750000000e-04 +5.505180377070e-01 4.196471757961e-02 5.505180377070e-01 5.521151577002e-01 7.796802275311e-01 2.556052375256e+00 7.026524771347e-02 4.123462906727e-02 2.140473184116e-01 1.650494348567e-04 4.218750000000e-04 +6.025277972385e-01 3.981352251202e-02 5.191738187653e-01 6.038417532930e-01 7.963456015520e-01 2.436429559217e+00 4.532068219433e-02 2.790190384710e-02 1.760741758057e-01 1.731529641003e-04 4.218750000000e-04 +6.537006292023e-01 3.828380869224e-02 4.981156783101e-01 6.548207102921e-01 8.227450343854e-01 1.577187787922e+00 8.285077009071e-03 7.879604197279e-03 9.356877563992e-02 2.674855862001e-04 4.218750000000e-04 +7.157802520178e-01 3.763632694686e-02 4.893344268646e-01 7.167690438940e-01 8.678744399967e-01 1.110722269674e+00 2.481909221547e-04 3.351750418595e-04 1.929810128425e-02 3.798204209266e-04 4.218750000000e-04 +7.877115061338e-01 3.750741438121e-02 4.876003034451e-01 7.886039709697e-01 9.271732734224e-01 1.007353107040e+00 2.374385177664e-07 3.535580266348e-07 6.267712914743e-04 4.187955514820e-04 4.218750000000e-04 +8.625018457296e-01 3.750005051533e-02 4.875007285973e-01 8.633166786734e-01 9.914497708197e-01 1.000065018012e+00 5.280092662219e-13 7.919624075118e-13 9.380608885188e-07 4.218475723096e-04 4.218750000000e-04 +9.375000004791e-01 3.750000000932e-02 4.875000001553e-01 9.382497007189e-01 1.057340413987e+00 1.000000016536e+00 6.666666945465e-15 1.000000025284e-14 1.054092566715e-07 4.218749930240e-04 4.218750000000e-04 +1.012500000000e+00 3.750000000000e-02 4.875000000000e-01 1.013194206458e+00 1.124374826292e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 3.750000000000e-02 4.875000000000e-01 1.088146359641e+00 1.192358482169e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 3.750000000000e-02 4.875000000000e-01 1.163104681445e+00 1.261137879060e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +4.864214716210e-02 1.458882362481e-01 6.781511051953e-01 1.537837311165e-01 6.953692238183e-01 1.295854622235e+00 5.560295412388e-02 6.436249078773e-02 2.674207894930e-01 3.255573524695e-04 4.218750000000e-04 +1.449691450988e-01 1.449691450988e-01 6.717894520660e-01 2.050173311244e-01 7.023768034100e-01 1.359986442156e+00 5.691970848743e-02 6.277971609468e-02 2.641121733378e-01 3.102052983200e-04 4.218750000000e-04 +2.385236405180e-01 1.430993937692e-01 6.584891827673e-01 2.781563653470e-01 7.148279285287e-01 1.487611309321e+00 5.884026376340e-02 5.933028008867e-02 2.567538382028e-01 2.835922242299e-04 4.218750000000e-04 +3.274610859066e-01 1.402236550874e-01 6.380004170738e-01 3.562210496717e-01 7.307105914215e-01 1.668826208055e+00 6.124613426806e-02 5.505019094179e-02 2.473193862685e-01 2.527974440740e-04 4.218750000000e-04 +4.097877013356e-01 1.363033411712e-01 6.110918186474e-01 4.318617382686e-01 7.482898982334e-01 1.892708088720e+00 6.250654509346e-02 4.953738941518e-02 2.346093429398e-01 2.228949104800e-04 4.218750000000e-04 +4.835112384987e-01 1.312037698371e-01 5.795478052352e-01 5.009965538544e-01 7.660765010931e-01 2.207915446422e+00 6.543655575786e-02 4.445588430293e-02 2.222508200283e-01 1.910738931075e-04 4.218750000000e-04 +5.461980243499e-01 1.250024329546e-01 5.461980243499e-01 5.603194535694e-01 7.824897263556e-01 2.604460746540e+00 6.889124455926e-02 3.967687628857e-02 2.099652783162e-01 1.619817079449e-04 4.218750000000e-04 +5.988675357190e-01 1.188390030432e-01 5.164179271889e-01 6.105448664779e-01 7.996577452289e-01 2.337106095865e+00 3.979595208670e-02 2.554181354268e-02 1.684630310341e-01 1.805117023769e-04 4.218750000000e-04 +6.517391953554e-01 1.145791597245e-01 4.968789176846e-01 6.617343595475e-01 8.275149675052e-01 1.505743325274e+00 6.483992355518e-03 6.459260599085e-03 8.471691815220e-02 2.801772340072e-04 4.218750000000e-04 +7.152453972319e-01 1.128438031177e-01 4.890399869792e-01 7.240923298610e-01 8.737675955470e-01 1.093819921159e+00 1.711447864485e-04 2.346978462421e-04 1.614854125652e-02 3.856896293798e-04 4.218750000000e-04 +7.876650161727e-01 1.125173520862e-01 4.875782861272e-01 7.956609404909e-01 9.331714297629e-01 1.005842230148e+00 1.384898275312e-07 2.065281562758e-07 4.790362503979e-04 4.194246248120e-04 4.218750000000e-04 +8.625013227533e-01 1.125001086550e-01 4.875005217075e-01 8.698073385518e-01 9.971065965400e-01 1.000047398591e+00 2.606079770129e-13 3.908934377213e-13 6.590341735544e-07 4.218550046673e-04 4.218750000000e-04 +9.375000003146e-01 1.125000000185e-01 4.875000001019e-01 9.442258737157e-01 1.062647048974e+00 1.000000011025e+00 6.666666833974e-15 1.000000014071e-14 1.054092560806e-07 4.218749953489e-04 4.218750000000e-04 +1.012500000000e+00 1.125000000000e-01 4.875000000000e-01 1.018730828040e+00 1.129366525978e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 1.125000000000e-01 4.875000000000e-01 1.093303480283e+00 1.197066727463e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 1.125000000000e-01 4.875000000000e-01 1.167930862680e+00 1.265590277302e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +4.801636952264e-02 2.400644141640e-01 6.650434377606e-01 2.448193102883e-01 7.086743037521e-01 1.417815253743e+00 5.736395288813e-02 6.068909831873e-02 2.596773603248e-01 2.975528714946e-04 4.218750000000e-04 +1.430993937692e-01 2.385236405180e-01 6.584891827673e-01 2.781563653470e-01 7.148279285287e-01 1.487611309321e+00 5.884026376340e-02 5.933028008867e-02 2.567538382028e-01 2.835922242299e-04 4.218750000000e-04 +2.353919086533e-01 2.353919086533e-01 6.451175741251e-01 3.328944296904e-01 7.259444784307e-01 1.615400638830e+00 6.089808864353e-02 5.654766425713e-02 2.506606033334e-01 2.611581237864e-04 4.218750000000e-04 +3.230327581326e-01 2.305761647044e-01 6.249900842775e-01 3.968822628394e-01 7.403567626501e-01 1.789416108259e+00 6.244854103876e-02 5.234825545930e-02 2.411736475822e-01 2.357612620412e-04 4.218750000000e-04 +4.039758023072e-01 2.239455315927e-01 5.990101020776e-01 4.618961463036e-01 7.564133475562e-01 2.032064826258e+00 6.432415448542e-02 4.748186695686e-02 2.296902913753e-01 2.076090263207e-04 4.218750000000e-04 +4.760712865650e-01 2.153981807600e-01 5.689413467002e-01 5.225325312039e-01 7.724859235943e-01 2.395571387416e+00 6.867141351817e-02 4.299897753762e-02 2.185786853938e-01 1.761062109091e-04 4.218750000000e-04 +5.379161727032e-01 2.054800544060e-01 5.379161727032e-01 5.758262425544e-01 7.879909076062e-01 2.633068196197e+00 6.348624244988e-02 3.616669093962e-02 2.004624956323e-01 1.602218281354e-04 4.218750000000e-04 +5.921272785598e-01 1.961945942638e-01 5.112674125667e-01 6.237844442057e-01 8.065366699572e-01 2.122765701553e+00 2.892017847296e-02 2.043573046131e-02 1.506863204781e-01 1.987383721583e-04 4.218750000000e-04 +6.483178810461e-01 1.901645402908e-01 4.946948619777e-01 6.756320206059e-01 8.373778321255e-01 1.385213175220e+00 3.798155800202e-03 4.112893092716e-03 6.760089654826e-02 3.045560117005e-04 4.218750000000e-04 +7.143851867622e-01 1.878966520530e-01 4.885634836624e-01 7.386821690809e-01 8.856328948760e-01 1.066394125101e+00 7.779372103853e-05 1.094253792393e-04 1.102650237883e-02 3.956088936254e-04 4.218750000000e-04 +7.875984362688e-01 1.875172593956e-01 4.875467341755e-01 8.096135000013e-01 9.450798047729e-01 1.003616873949e+00 4.326128408414e-08 6.465806605151e-08 2.680341314325e-04 4.203546302883e-04 4.218750000000e-04 +8.625006668447e-01 1.875000915179e-01 4.875002625589e-01 8.826458432614e-01 1.008325438845e+00 1.000024697944e+00 5.603376791463e-14 8.404857604495e-14 3.055933682471e-07 4.218645808124e-04 4.218750000000e-04 +9.375000001323e-01 1.875000000133e-01 4.875000000428e-01 9.560661589309e-01 1.073181601731e+00 1.000000004772e+00 6.666666728096e-15 1.000000004442e-14 1.054092555731e-07 4.218749979869e-04 4.218750000000e-04 +1.012500000000e+00 1.875000000000e-01 4.875000000000e-01 1.029714766331e+00 1.139284314822e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 1.875000000000e-01 4.875000000000e-01 1.103545422717e+00 1.206428095661e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 1.875000000000e-01 4.875000000000e-01 1.177523885108e+00 1.274448410098e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +4.705717467082e-02 3.296369078171e-01 6.445175833589e-01 3.329787811306e-01 7.254500561321e-01 1.603878786859e+00 5.995818503914e-02 5.607485945670e-02 2.496104953650e-01 2.630342164610e-04 4.218750000000e-04 +1.402236550874e-01 3.274610859066e-01 6.380004170738e-01 3.562210496717e-01 7.307105914215e-01 1.668826208055e+00 6.124613426806e-02 5.505019094179e-02 2.473193862685e-01 2.527974440740e-04 4.218750000000e-04 +2.305761647044e-01 3.230327581326e-01 6.249900842775e-01 3.968822628394e-01 7.403567626501e-01 1.789416108259e+00 6.244854103876e-02 5.234825545930e-02 2.411736475822e-01 2.357612620412e-04 4.218750000000e-04 +3.161819630869e-01 3.161819630869e-01 6.058356560779e-01 4.471488203753e-01 7.529800194815e-01 1.976566655554e+00 6.417115238521e-02 4.869895397019e-02 2.326154527450e-01 2.134382864421e-04 4.218750000000e-04 +3.949713097927e-01 3.067441695035e-01 5.815180389925e-01 5.000943121890e-01 7.669794982641e-01 2.269864476439e+00 6.786053437277e-02 4.484444010456e-02 2.232199714894e-01 1.858591137837e-04 4.218750000000e-04 +4.650987355997e-01 2.949461647258e-01 5.539217208960e-01 5.507359384886e-01 7.811141701591e-01 2.608816393441e+00 6.977628694975e-02 4.011950809867e-02 2.111332072904e-01 1.617112653311e-04 4.218750000000e-04 +5.265680172969e-01 2.821854394160e-01 5.265680172969e-01 5.974131728196e-01 7.963519171185e-01 2.496767146024e+00 4.960099240544e-02 2.979912993754e-02 1.819619311149e-01 1.689685001951e-04 4.218750000000e-04 +5.835632930195e-01 2.712898721001e-01 5.045850721614e-01 6.435404506819e-01 8.177716103607e-01 1.814173680515e+00 1.609273837577e-02 1.330584156463e-02 1.215905769587e-01 2.325438873527e-04 4.218750000000e-04 +6.443756334852e-01 2.649129818624e-01 4.921326232838e-01 6.967057090255e-01 8.529908345867e-01 1.250548242142e+00 1.612937440684e-03 1.934676391917e-03 4.636421503124e-02 3.373520395161e-04 4.218750000000e-04 +7.135236497626e-01 2.628048507451e-01 4.880819050059e-01 7.603830536945e-01 9.035520650964e-01 1.038086110396e+00 2.105832181296e-05 3.042857659217e-05 5.814596249685e-03 4.063969219655e-04 4.218750000000e-04 +7.875432239591e-01 2.625106315765e-01 4.875205377128e-01 8.301422536498e-01 9.627109825833e-01 1.001678708274e+00 6.049876815039e-09 9.059606785688e-09 1.003306023199e-04 4.211679818242e-04 4.218750000000e-04 +8.625002273867e-01 2.625000440024e-01 4.875000892980e-01 9.015613763595e-01 1.024924022749e+00 1.000008822868e+00 9.692276443811e-15 1.453828639633e-14 1.270970162965e-07 4.218712778854e-04 4.218750000000e-04 +9.375000000336e-01 2.625000000049e-01 4.875000000108e-01 9.735566239647e-01 1.088792335607e+00 1.000000001263e+00 6.666666681086e-15 1.000000000900e-14 1.054092553864e-07 4.218749994672e-04 4.218750000000e-04 +1.012500000000e+00 2.625000000000e-01 4.875000000000e-01 1.045974426074e+00 1.154001191507e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 2.625000000000e-01 4.875000000000e-01 1.118732541763e+00 1.220335507145e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 2.625000000000e-01 4.875000000000e-01 1.191768643655e+00 1.287621353504e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +4.575823828388e-02 4.126117817726e-01 6.172337279524e-01 4.151412998346e-01 7.438546724666e-01 1.829077450959e+00 6.167930921681e-02 5.058231064884e-02 2.370708066962e-01 2.306490628807e-04 4.218750000000e-04 +1.363033411712e-01 4.097877013356e-01 6.110918186474e-01 4.318617382686e-01 7.482898982334e-01 1.892708088720e+00 6.250654509346e-02 4.953738941518e-02 2.346093429398e-01 2.228949104800e-04 4.218750000000e-04 +2.239455315927e-01 4.039758023072e-01 5.990101020776e-01 4.618961463036e-01 7.564133475562e-01 2.032064826258e+00 6.432415448542e-02 4.748186695686e-02 2.296902913753e-01 2.076090263207e-04 4.218750000000e-04 +3.067441695035e-01 3.949713097927e-01 5.815180389925e-01 5.000943121890e-01 7.669794982641e-01 2.269864476439e+00 6.786053437277e-02 4.484444010456e-02 2.232199714894e-01 1.858591137837e-04 4.218750000000e-04 +3.828899629484e-01 3.828899629484e-01 5.597555029301e-01 5.414881784982e-01 7.788040000628e-01 2.570188005349e+00 7.074487683656e-02 4.128776378770e-02 2.141851841222e-01 1.641416889045e-04 4.218750000000e-04 +4.514191841730e-01 3.687138204727e-01 5.359382756040e-01 5.828629009012e-01 7.918074238755e-01 2.625514428583e+00 5.959457221262e-02 3.404736890635e-02 1.945004110431e-01 1.606827962578e-04 4.218750000000e-04 +5.138077920398e-01 3.548072437660e-01 5.138077920398e-01 6.244090225082e-01 8.086316062030e-01 2.119965181361e+00 2.850115610050e-02 2.016624354335e-02 1.496894694706e-01 1.990009098778e-04 4.218750000000e-04 +5.750062478958e-01 3.443521980907e-01 4.977602119226e-01 6.702317669651e-01 8.348507950660e-01 1.495266038155e+00 6.336207710086e-03 6.356267929990e-03 8.403880009978e-02 2.821404280141e-04 4.218750000000e-04 +6.409747695987e-01 3.391021471216e-01 4.898755256181e-01 7.251475170229e-01 8.751096800082e-01 1.134548923648e+00 4.351874941751e-04 5.753663219419e-04 2.528430171606e-02 3.718438149352e-04 4.218750000000e-04 +7.129165262765e-01 3.376615989073e-01 4.877388313082e-01 7.888379610635e-01 9.274451446747e-01 1.016841694213e+00 2.796313485389e-06 4.124998268615e-06 2.140871647150e-03 4.148875900753e-04 4.218750000000e-04 +7.875132236559e-01 3.375042024393e-01 4.875062848794e-01 8.567882842903e-01 9.857730681521e-01 1.000550757873e+00 2.966037037068e-10 4.446606552034e-10 2.222762683398e-05 4.216427769209e-04 4.218750000000e-04 +8.625000491041e-01 3.375000124013e-01 4.875000192186e-01 9.261817278890e-01 1.046646483687e+00 1.000002015596e+00 6.713706167496e-15 1.007053895311e-14 1.057803749553e-07 4.218741496723e-04 4.218750000000e-04 +9.375000000047e-01 3.375000000009e-01 4.875000000015e-01 9.963997691737e-01 1.109264959336e+00 1.000000000184e+00 6.666666668708e-15 1.000000000123e-14 1.054092553454e-07 4.218749999225e-04 4.218750000000e-04 +1.012500000000e+00 3.375000000000e-01 4.875000000000e-01 1.067268710307e+00 1.173336588537e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 3.375000000000e-01 4.875000000000e-01 1.138666983802e+00 1.238635842369e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 3.375000000000e-01 4.875000000000e-01 1.210500929368e+00 1.304978448098e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +4.406778420106e-02 4.872224957326e-01 5.850085817363e-01 4.892113346523e-01 7.626026295899e-01 2.111981863191e+00 6.337257513101e-02 4.500931771871e-02 2.236299466100e-01 1.997531358355e-04 4.218750000000e-04 +1.312037698371e-01 4.835112384987e-01 5.795478052352e-01 5.009965538544e-01 7.660765010931e-01 2.207915446422e+00 6.543655575786e-02 4.445588430293e-02 2.222508200283e-01 1.910738931075e-04 4.218750000000e-04 +2.153981807600e-01 4.760712865650e-01 5.689413467002e-01 5.225325312039e-01 7.724859235943e-01 2.395571387416e+00 6.867141351817e-02 4.299897753762e-02 2.185786853938e-01 1.761062109091e-04 4.218750000000e-04 +2.949461647258e-01 4.650987355997e-01 5.539217208960e-01 5.507359384886e-01 7.811141701591e-01 2.608816393441e+00 6.977628694975e-02 4.011950809867e-02 2.111332072904e-01 1.617112653311e-04 4.218750000000e-04 +3.687138204727e-01 4.514191841730e-01 5.359382756040e-01 5.828629009012e-01 7.918074238755e-01 2.625514428583e+00 5.959457221262e-02 3.404736890635e-02 1.945004110431e-01 1.606827962578e-04 4.218750000000e-04 +4.369025996380e-01 4.369025996380e-01 5.174867980630e-01 6.178735818441e-01 8.059530689254e-01 2.226456804207e+00 3.364270464147e-02 2.266563486291e-02 1.586947974465e-01 1.894826790274e-04 4.218750000000e-04 +5.019879484172e-01 4.244110167205e-01 5.019879484172e-01 6.573557723713e-01 8.271085248176e-01 1.653709964637e+00 1.065245191417e-02 9.662321817572e-03 1.036142515807e-01 2.551082166894e-04 4.218750000000e-04 +5.682955280275e-01 4.164801980740e-01 4.923038857130e-01 7.045676422912e-01 8.595223548297e-01 1.244969500124e+00 1.590018818873e-03 1.915732255346e-03 4.613665998779e-02 3.388637231339e-04 4.218750000000e-04 +6.387954532056e-01 4.132483100276e-01 4.883984850792e-01 7.608112754007e-01 9.040834458193e-01 1.055856357010e+00 5.802050259778e-05 8.242669878236e-05 9.570016764316e-03 3.995571908994e-04 4.218750000000e-04 +7.126177230270e-01 4.125567125404e-01 4.875680433206e-01 8.234239857050e-01 9.569480953018e-01 1.005290425382e+00 1.321170998734e-07 1.971327337916e-07 4.680132165650e-04 4.196548473439e-04 4.218750000000e-04 +7.875026042315e-01 4.125010225558e-01 4.875012370566e-01 8.889980007182e-01 1.013890971166e+00 1.000117322190e+00 3.879549620607e-12 5.818641775114e-12 2.542667404106e-06 4.218255105073e-04 4.218750000000e-04 +8.625000060331e-01 4.125000019097e-01 4.875000023523e-01 9.560661650653e-01 1.073181608245e+00 1.000000263317e+00 6.666831945794e-15 1.000024528546e-14 1.054105480989e-07 4.218748889132e-04 4.218750000000e-04 +9.375000000003e-01 4.125000000001e-01 4.875000000001e-01 1.024237521281e+00 1.134336259669e+00 1.000000000012e+00 6.666666666804e-15 1.000000000008e-14 1.054092553394e-07 4.218749999948e-04 4.218750000000e-04 +1.012500000000e+00 4.125000000000e-01 4.875000000000e-01 1.093303480283e+00 1.197066727463e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 4.125000000000e-01 4.875000000000e-01 1.163104681445e+00 1.261137879060e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 4.125000000000e-01 4.875000000000e-01 1.233516315255e+00 1.326355438787e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +4.196471757961e-02 5.505180377070e-01 5.505180377070e-01 5.521151577002e-01 7.796802275311e-01 2.556052375256e+00 7.026524771347e-02 4.123462906727e-02 2.140473184116e-01 1.650494348567e-04 4.218750000000e-04 +1.250024329546e-01 5.461980243499e-01 5.461980243499e-01 5.603194535694e-01 7.824897263556e-01 2.604460746540e+00 6.889124455926e-02 3.967687628857e-02 2.099652783162e-01 1.619817079449e-04 4.218750000000e-04 +2.054800544060e-01 5.379161727032e-01 5.379161727032e-01 5.758262425544e-01 7.879909076062e-01 2.633068196197e+00 6.348624244988e-02 3.616669093962e-02 2.004624956323e-01 1.602218281354e-04 4.218750000000e-04 +2.821854394160e-01 5.265680172969e-01 5.265680172969e-01 5.974131728196e-01 7.963519171185e-01 2.496767146024e+00 4.960099240544e-02 2.979912993754e-02 1.819619311149e-01 1.689685001951e-04 4.218750000000e-04 +3.548072437660e-01 5.138077920398e-01 5.138077920398e-01 6.244090225082e-01 8.086316062030e-01 2.119965181361e+00 2.850115610050e-02 2.016624354335e-02 1.496894694706e-01 1.990009098778e-04 4.218750000000e-04 +4.244110167205e-01 5.019879484172e-01 5.019879484172e-01 6.573557723713e-01 8.271085248176e-01 1.653709964637e+00 1.065245191417e-02 9.662321817572e-03 1.036142515807e-01 2.551082166894e-04 4.218750000000e-04 +4.934448216545e-01 4.934448216545e-01 4.934448216545e-01 6.978363590666e-01 8.546715018374e-01 1.292290676191e+00 2.280829765544e-03 2.647426551432e-03 5.423638130579e-02 3.264551913688e-04 4.218750000000e-04 +5.643984718367e-01 4.890869473795e-01 4.890869473795e-01 7.468277425943e-01 8.927248843880e-01 1.091315942634e+00 1.873998296847e-04 2.575787025052e-04 1.691740400709e-02 3.865745780105e-04 4.218750000000e-04 +6.378209986291e-01 4.877254246166e-01 4.877254246166e-01 8.029269681046e-01 9.394508001631e-01 1.015968243426e+00 2.406236583702e-06 3.552625683831e-06 1.986796887184e-03 4.152442782829e-04 4.218750000000e-04 +7.125207659874e-01 4.875120671029e-01 4.875120671029e-01 8.633387849125e-01 9.914745952898e-01 1.001046557435e+00 1.538999537550e-09 2.306085855027e-09 5.061934034237e-05 4.214339451712e-04 4.218750000000e-04 +7.875002912298e-01 4.875001382727e-01 4.875001382727e-01 9.261819980451e-01 1.046646778201e+00 1.000014240062e+00 1.637613718687e-14 2.456385598948e-14 1.652064566585e-07 4.218689925595e-04 4.218750000000e-04 +8.625000003499e-01 4.875000001359e-01 4.875000001359e-01 9.907383613932e-01 1.104182390218e+00 1.000000016227e+00 6.666666975521e-15 1.000000030101e-14 1.054092569254e-07 4.218749931543e-04 4.218750000000e-04 +9.375000000000e-01 4.875000000000e-01 4.875000000000e-01 1.056675210270e+00 1.163709048689e+00 1.000000000000e+00 6.666666666670e-15 1.000000000000e-14 1.054092553390e-07 4.218749999999e-04 4.218750000000e-04 +1.012500000000e+00 4.875000000000e-01 4.875000000000e-01 1.123749304783e+00 1.224936222830e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 4.875000000000e-01 4.875000000000e-01 1.191768643655e+00 1.287621353504e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 4.875000000000e-01 4.875000000000e-01 1.260580223548e+00 1.351561596821e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.981352251202e-02 6.025277972385e-01 5.191738187653e-01 6.038417532930e-01 7.963456015520e-01 2.436429559217e+00 4.532068219433e-02 2.790190384710e-02 1.760741758057e-01 1.731529641003e-04 4.218750000000e-04 +1.188390030432e-01 5.988675357190e-01 5.164179271889e-01 6.105448664779e-01 7.996577452289e-01 2.337106095865e+00 3.979595208670e-02 2.554181354268e-02 1.684630310341e-01 1.805117023769e-04 4.218750000000e-04 +1.961945942638e-01 5.921272785598e-01 5.112674125667e-01 6.237844442057e-01 8.065366699572e-01 2.122765701553e+00 2.892017847296e-02 2.043573046131e-02 1.506863204781e-01 1.987383721583e-04 4.218750000000e-04 +2.712898721001e-01 5.835632930195e-01 5.045850721614e-01 6.435404506819e-01 8.177716103607e-01 1.814173680515e+00 1.609273837577e-02 1.330584156463e-02 1.215905769587e-01 2.325438873527e-04 4.218750000000e-04 +3.443521980907e-01 5.750062478958e-01 4.977602119226e-01 6.702317669651e-01 8.348507950660e-01 1.495266038155e+00 6.336207710086e-03 6.356267929990e-03 8.403880009978e-02 2.821404280141e-04 4.218750000000e-04 +4.164801980740e-01 5.682955280275e-01 4.923038857130e-01 7.045676422912e-01 8.595223548297e-01 1.244969500124e+00 1.590018818873e-03 1.915732255346e-03 4.613665998779e-02 3.388637231339e-04 4.218750000000e-04 +4.890869473795e-01 5.643984718367e-01 4.890869473795e-01 7.468277425943e-01 8.927248843880e-01 1.091315942634e+00 1.873998296847e-04 2.575787025052e-04 1.691740400709e-02 3.865745780105e-04 4.218750000000e-04 +5.628820324798e-01 5.628820324798e-01 4.878213575017e-01 7.960354043491e-01 9.336177171691e-01 1.021933559576e+00 5.449602577654e-06 7.998958239395e-06 2.981229843052e-03 4.128203796098e-04 4.218750000000e-04 +6.375457547436e-01 5.625383598273e-01 4.875323619092e-01 8.502434919885e-01 9.801029535603e-01 1.002651673294e+00 1.866557815350e-08 2.792432105386e-08 1.761448931794e-04 4.207592838439e-04 4.218750000000e-04 +7.125019260389e-01 5.625013349598e-01 4.875011216403e-01 9.077812216832e-01 1.030399966053e+00 1.000108509209e+00 2.679137446308e-12 4.018270150146e-12 2.112994228878e-06 4.218292276440e-04 4.218750000000e-04 +7.875000147536e-01 5.625000084296e-01 4.875000070129e-01 9.677616094474e-01 1.083613764013e+00 1.000000781250e+00 6.669211928077e-15 1.000381007664e-14 1.054293342936e-07 4.218746704104e-04 4.218750000000e-04 +8.625000000070e-01 5.625000000033e-01 4.875000000027e-01 1.029714766339e+00 1.139284314830e+00 1.000000000344e+00 6.666666670500e-15 1.000000000231e-14 1.054092553511e-07 4.218749998547e-04 4.218750000000e-04 +9.375000000000e-01 5.625000000000e-01 4.875000000000e-01 1.093303480283e+00 1.197066727463e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 5.625000000000e-01 4.875000000000e-01 1.158258390861e+00 1.256669706009e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 5.625000000000e-01 4.875000000000e-01 1.224362078799e+00 1.317846254310e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 5.625000000000e-01 4.875000000000e-01 1.291438151829e+00 1.380387173948e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.828380869224e-02 6.537006292023e-01 4.981156783101e-01 6.548207102921e-01 8.227450343854e-01 1.577187787922e+00 8.285077009071e-03 7.879604197279e-03 9.356877563992e-02 2.674855862001e-04 4.218750000000e-04 +1.145791597245e-01 6.517391953554e-01 4.968789176846e-01 6.617343595475e-01 8.275149675052e-01 1.505743325274e+00 6.483992355518e-03 6.459260599085e-03 8.471691815220e-02 2.801772340072e-04 4.218750000000e-04 +1.901645402908e-01 6.483178810461e-01 4.946948619777e-01 6.756320206059e-01 8.373778321255e-01 1.385213175220e+00 3.798155800202e-03 4.112893092716e-03 6.760089654826e-02 3.045560117005e-04 4.218750000000e-04 +2.649129818624e-01 6.443756334852e-01 4.921326232838e-01 6.967057090255e-01 8.529908345867e-01 1.250548242143e+00 1.612937440684e-03 1.934676391917e-03 4.636421503124e-02 3.373520395161e-04 4.218750000000e-04 +3.391021471216e-01 6.409747695987e-01 4.898755256181e-01 7.251475170229e-01 8.751096800082e-01 1.134548923648e+00 4.351874941751e-04 5.753663219419e-04 2.528430171606e-02 3.718438149352e-04 4.218750000000e-04 +4.132483100276e-01 6.387954532056e-01 4.883984850792e-01 7.608112754007e-01 9.040834458193e-01 1.055856357010e+00 5.802050259778e-05 8.242669878236e-05 9.570016764316e-03 3.995571908994e-04 4.218750000000e-04 +4.877254246166e-01 6.378209986291e-01 4.877254246166e-01 8.029269681046e-01 9.394508001631e-01 1.015968243426e+00 2.406236583702e-06 3.552625683831e-06 1.986796887184e-03 4.152442782829e-04 4.218750000000e-04 +5.625383598273e-01 6.375457547436e-01 4.875323619092e-01 8.502434919885e-01 9.801029535603e-01 1.002651673294e+00 1.866557815350e-08 2.792432105386e-08 1.761448931794e-04 4.207592838439e-04 4.218750000000e-04 +6.375029589416e-01 6.375029589416e-01 4.875020892685e-01 9.015653305881e-01 1.024928452312e+00 1.000197198698e+00 1.383288204930e-11 2.074523214118e-11 4.801068415951e-06 4.217918232016e-04 4.218750000000e-04 +7.125000684546e-01 6.375000569424e-01 4.875000399757e-01 9.560662477827e-01 1.073181699027e+00 1.000004262814e+00 6.936105406389e-15 1.040411375878e-14 1.075180282494e-07 4.218732016329e-04 4.218750000000e-04 +7.875000002337e-01 6.375000001600e-01 4.875000001111e-01 1.013194206740e+00 1.124374826595e+00 1.000000013287e+00 6.666666879329e-15 1.000000018612e-14 1.054092563199e-07 4.218749943945e-04 4.218750000000e-04 +8.625000000000e-01 6.375000000000e-01 4.875000000000e-01 1.072526223456e+00 1.178120855430e+00 1.000000000002e+00 6.666666666686e-15 1.000000000001e-14 1.054092553390e-07 4.218749999993e-04 4.218750000000e-04 +9.375000000000e-01 6.375000000000e-01 4.875000000000e-01 1.133716234337e+00 1.234086200393e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 6.375000000000e-01 4.875000000000e-01 1.196479210016e+00 1.291982488271e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 6.375000000000e-01 4.875000000000e-01 1.260580223548e+00 1.351561596821e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 6.375000000000e-01 4.875000000000e-01 1.325825214725e+00 1.412610615138e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.763632694686e-02 7.157802520178e-01 4.893344268646e-01 7.167690438940e-01 8.678744399967e-01 1.110722269674e+00 2.481909221547e-04 3.351750418595e-04 1.929810128425e-02 3.798204209266e-04 4.218750000000e-04 +1.128438031177e-01 7.152453972319e-01 4.890399869792e-01 7.240923298610e-01 8.737675955470e-01 1.093819921159e+00 1.711447864485e-04 2.346978462421e-04 1.614854125652e-02 3.856896293798e-04 4.218750000000e-04 +1.878966520530e-01 7.143851867622e-01 4.885634836624e-01 7.386821690809e-01 8.856328948760e-01 1.066394125101e+00 7.779372103853e-05 1.094253792393e-04 1.102650237883e-02 3.956088936254e-04 4.218750000000e-04 +2.628048507451e-01 7.135236497626e-01 4.880819050059e-01 7.603830536945e-01 9.035520650964e-01 1.038086110396e+00 2.105832181296e-05 3.042857659217e-05 5.814596249685e-03 4.063969219655e-04 4.218750000000e-04 +3.376615989073e-01 7.129165262765e-01 4.877388313082e-01 7.888379610635e-01 9.274451446747e-01 1.016841694213e+00 2.796313485389e-06 4.124998268615e-06 2.140871647150e-03 4.148875900753e-04 4.218750000000e-04 +4.125567125404e-01 7.126177230270e-01 4.875680433206e-01 8.234239857050e-01 9.569480953018e-01 1.005290425382e+00 1.321170998734e-07 1.971327337916e-07 4.680132165650e-04 4.196548473439e-04 4.218750000000e-04 +4.875120671029e-01 7.125207659874e-01 4.875120671029e-01 8.633387849125e-01 9.914745952898e-01 1.001046557435e+00 1.538999537550e-09 2.306085855027e-09 5.061934034237e-05 4.214339451712e-04 4.218750000000e-04 +5.625013349598e-01 7.125019260389e-01 4.875011216403e-01 9.077812216832e-01 1.030399966053e+00 1.000108509209e+00 2.679137446308e-12 4.018270150146e-12 2.112994228878e-06 4.218292276440e-04 4.218750000000e-04 +6.375000569424e-01 7.125000684546e-01 4.875000399757e-01 9.560662477827e-01 1.073181699027e+00 1.000004262814e+00 6.936105406389e-15 1.040411375878e-14 1.075180282494e-07 4.218732016329e-04 4.218750000000e-04 +7.125000005901e-01 7.125000005901e-01 4.875000003437e-01 1.007627164025e+00 1.119360867646e+00 1.000000040090e+00 6.666667962579e-15 1.000000154297e-14 1.054092634711e-07 4.218749830872e-04 4.218750000000e-04 +7.875000000007e-01 7.125000000005e-01 4.875000000003e-01 1.061985169389e+00 1.168532733817e+00 1.000000000040e+00 6.666666667111e-15 1.000000000027e-14 1.054092553404e-07 4.218749999831e-04 4.218750000000e-04 +8.625000000000e-01 7.125000000000e-01 4.875000000000e-01 1.118732541763e+00 1.220335507145e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 7.125000000000e-01 4.875000000000e-01 1.177523885108e+00 1.274448410097e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 7.125000000000e-01 4.875000000000e-01 1.238068051441e+00 1.330589624941e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 7.125000000000e-01 4.875000000000e-01 1.300120186752e+00 1.388513143618e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 7.125000000000e-01 4.875000000000e-01 1.363474422202e+00 1.448005093223e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750741438121e-02 7.877115061338e-01 4.876003034451e-01 7.886039709697e-01 9.271732734224e-01 1.007353107040e+00 2.374385177664e-07 3.535580266348e-07 6.267712914743e-04 4.187955514820e-04 4.218750000000e-04 +1.125173520862e-01 7.876650161727e-01 4.875782861272e-01 7.956609404909e-01 9.331714297629e-01 1.005842230148e+00 1.384898275312e-07 2.065281562758e-07 4.790362503979e-04 4.194246248120e-04 4.218750000000e-04 +1.875172593956e-01 7.875984362688e-01 4.875467341755e-01 8.096135000013e-01 9.450798047729e-01 1.003616873949e+00 4.326128408414e-08 6.465806605151e-08 2.680341314325e-04 4.203546302883e-04 4.218750000000e-04 +2.625106315765e-01 7.875432239591e-01 4.875205377128e-01 8.301422536498e-01 9.627109825833e-01 1.001678708274e+00 6.049876815039e-09 9.059606785688e-09 1.003306023199e-04 4.211679818242e-04 4.218750000000e-04 +3.375042024393e-01 7.875132236559e-01 4.875062848794e-01 8.567882842903e-01 9.857730681521e-01 1.000550757873e+00 2.966037037068e-10 4.446606552034e-10 2.222762683398e-05 4.216427769209e-04 4.218750000000e-04 +4.125010225558e-01 7.875026042315e-01 4.875012370566e-01 8.889980007182e-01 1.013890971166e+00 1.000117322190e+00 3.879549620607e-12 5.818641775114e-12 2.542667404106e-06 4.218255105073e-04 4.218750000000e-04 +4.875001382727e-01 7.875002912298e-01 4.875001382727e-01 9.261819980451e-01 1.046646778201e+00 1.000014240062e+00 1.637613718687e-14 2.456385598948e-14 1.652064566585e-07 4.218689925595e-04 4.218750000000e-04 +5.625000084296e-01 7.875000147536e-01 4.875000070129e-01 9.677616094474e-01 1.083613764013e+00 1.000000781250e+00 6.669211928077e-15 1.000381007664e-14 1.054293342936e-07 4.218746704103e-04 4.218750000000e-04 +6.375000001600e-01 7.875000002337e-01 4.875000001111e-01 1.013194206740e+00 1.124374826595e+00 1.000000013287e+00 6.666666879329e-15 1.000000018612e-14 1.054092563199e-07 4.218749943945e-04 4.218750000000e-04 +7.125000000005e-01 7.875000000007e-01 4.875000000003e-01 1.061985169389e+00 1.168532733817e+00 1.000000000040e+00 6.666666667111e-15 1.000000000027e-14 1.054092553404e-07 4.218749999831e-04 4.218750000000e-04 +7.875000000000e-01 7.875000000000e-01 4.875000000000e-01 1.113693180369e+00 1.215717380809e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 7.875000000000e-01 4.875000000000e-01 1.167930862680e+00 1.265590277301e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 7.875000000000e-01 4.875000000000e-01 1.224362078799e+00 1.317846254310e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 7.875000000000e-01 4.875000000000e-01 1.282697353237e+00 1.372213084765e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 7.875000000000e-01 4.875000000000e-01 1.342688534248e+00 1.428449771606e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 7.875000000000e-01 4.875000000000e-01 1.404123392014e+00 1.486344088696e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750005051533e-02 8.625018457296e-01 4.875007285973e-01 8.633166786734e-01 9.914497708197e-01 1.000065018012e+00 5.280092662219e-13 7.919624075117e-13 9.380608885188e-07 4.218475723096e-04 4.218750000000e-04 +1.125001086550e-01 8.625013227533e-01 4.875005217075e-01 8.698073385518e-01 9.971065965400e-01 1.000047398591e+00 2.606079770129e-13 3.908934377213e-13 6.590341735544e-07 4.218550046673e-04 4.218750000000e-04 +1.875000915179e-01 8.625006668447e-01 4.875002625589e-01 8.826458432614e-01 1.008325438845e+00 1.000024697944e+00 5.603376791463e-14 8.404857604495e-14 3.055933682471e-07 4.218645808124e-04 4.218750000000e-04 +2.625000440024e-01 8.625002273867e-01 4.875000892980e-01 9.015613763595e-01 1.024924022749e+00 1.000008822868e+00 9.692276443811e-15 1.453828639633e-14 1.270970162965e-07 4.218712778854e-04 4.218750000000e-04 +3.375000124013e-01 8.625000491041e-01 4.875000192186e-01 9.261817278890e-01 1.046646483687e+00 1.000002015596e+00 6.713706167496e-15 1.007053895311e-14 1.057803749553e-07 4.218741496723e-04 4.218750000000e-04 +4.125000019097e-01 8.625000060331e-01 4.875000023523e-01 9.560661650653e-01 1.073181608245e+00 1.000000263317e+00 6.666831945794e-15 1.000024528546e-14 1.054105480989e-07 4.218748889132e-04 4.218750000000e-04 +4.875000001359e-01 8.625000003499e-01 4.875000001359e-01 9.907383613932e-01 1.104182390218e+00 1.000000016227e+00 6.666666975521e-15 1.000000030101e-14 1.054092569254e-07 4.218749931543e-04 4.218750000000e-04 +5.625000000033e-01 8.625000000070e-01 4.875000000027e-01 1.029714766339e+00 1.139284314830e+00 1.000000000344e+00 6.666666670500e-15 1.000000000231e-14 1.054092553511e-07 4.218749998547e-04 4.218750000000e-04 +6.375000000000e-01 8.625000000000e-01 4.875000000000e-01 1.072526223456e+00 1.178120855430e+00 1.000000000002e+00 6.666666666686e-15 1.000000000001e-14 1.054092553390e-07 4.218749999992e-04 4.218750000000e-04 +7.125000000000e-01 8.625000000000e-01 4.875000000000e-01 1.118732541763e+00 1.220335507145e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.875000000000e-01 8.625000000000e-01 4.875000000000e-01 1.167930862680e+00 1.265590277301e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 8.625000000000e-01 4.875000000000e-01 1.219759197547e+00 1.313570991610e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 8.625000000000e-01 4.875000000000e-01 1.273896581360e+00 1.363990010960e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 8.625000000000e-01 4.875000000000e-01 1.330061088823e+00 1.416587007564e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 8.625000000000e-01 4.875000000000e-01 1.388006664249e+00 1.471128393445e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 8.625000000000e-01 4.875000000000e-01 1.447519429921e+00 1.527405889081e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750000000932e-02 9.375000004791e-01 4.875000001553e-01 9.382497007189e-01 1.057340413987e+00 1.000000016536e+00 6.666666945465e-15 1.000000025284e-14 1.054092566715e-07 4.218749930240e-04 4.218750000000e-04 +1.125000000185e-01 9.375000003146e-01 4.875000001019e-01 9.442258737157e-01 1.062647048974e+00 1.000000011025e+00 6.666666833974e-15 1.000000014071e-14 1.054092560806e-07 4.218749953489e-04 4.218750000000e-04 +1.875000000133e-01 9.375000001323e-01 4.875000000428e-01 9.560661589309e-01 1.073181601731e+00 1.000000004772e+00 6.666666728096e-15 1.000000004442e-14 1.054092555731e-07 4.218749979869e-04 4.218750000000e-04 +2.625000000049e-01 9.375000000336e-01 4.875000000108e-01 9.735566239647e-01 1.088792335607e+00 1.000000001263e+00 6.666666681086e-15 1.000000000900e-14 1.054092553864e-07 4.218749994672e-04 4.218750000000e-04 +3.375000000009e-01 9.375000000047e-01 4.875000000015e-01 9.963997691737e-01 1.109264959336e+00 1.000000000184e+00 6.666666668708e-15 1.000000000123e-14 1.054092553454e-07 4.218749999225e-04 4.218750000000e-04 +4.125000000001e-01 9.375000000003e-01 4.875000000001e-01 1.024237521281e+00 1.134336259669e+00 1.000000000012e+00 6.666666666804e-15 1.000000000008e-14 1.054092553394e-07 4.218749999948e-04 4.218750000000e-04 +4.875000000000e-01 9.375000000000e-01 4.875000000000e-01 1.056675210270e+00 1.163709048689e+00 1.000000000000e+00 6.666666666670e-15 1.000000000000e-14 1.054092553390e-07 4.218749999999e-04 4.218750000000e-04 +5.625000000000e-01 9.375000000000e-01 4.875000000000e-01 1.093303480283e+00 1.197066727463e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +6.375000000000e-01 9.375000000000e-01 4.875000000000e-01 1.133716234337e+00 1.234086200393e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.125000000000e-01 9.375000000000e-01 4.875000000000e-01 1.177523885108e+00 1.274448410097e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.875000000000e-01 9.375000000000e-01 4.875000000000e-01 1.224362078799e+00 1.317846254310e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 9.375000000000e-01 4.875000000000e-01 1.273896581360e+00 1.363990010960e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 9.375000000000e-01 4.875000000000e-01 1.325825214725e+00 1.412610615138e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 9.375000000000e-01 4.875000000000e-01 1.379877711973e+00 1.463461222582e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 9.375000000000e-01 4.875000000000e-01 1.435814228931e+00 1.516317496437e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 9.375000000000e-01 4.875000000000e-01 1.493423081381e+00 1.570977004924e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750000000000e-02 1.012500000000e+00 4.875000000000e-01 1.013194206458e+00 1.124374826292e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.125000000000e-01 1.012500000000e+00 4.875000000000e-01 1.018730828040e+00 1.129366525978e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.875000000000e-01 1.012500000000e+00 4.875000000000e-01 1.029714766331e+00 1.139284314822e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +2.625000000000e-01 1.012500000000e+00 4.875000000000e-01 1.045974426074e+00 1.154001191507e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +3.375000000000e-01 1.012500000000e+00 4.875000000000e-01 1.067268710307e+00 1.173336588537e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.125000000000e-01 1.012500000000e+00 4.875000000000e-01 1.093303480283e+00 1.197066727463e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.875000000000e-01 1.012500000000e+00 4.875000000000e-01 1.123749304783e+00 1.224936222830e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +5.625000000000e-01 1.012500000000e+00 4.875000000000e-01 1.158258390861e+00 1.256669706009e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +6.375000000000e-01 1.012500000000e+00 4.875000000000e-01 1.196479210016e+00 1.291982488271e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.125000000000e-01 1.012500000000e+00 4.875000000000e-01 1.238068051441e+00 1.330589624941e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.875000000000e-01 1.012500000000e+00 4.875000000000e-01 1.282697353237e+00 1.372213084765e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 1.012500000000e+00 4.875000000000e-01 1.330061088823e+00 1.416587007564e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 1.012500000000e+00 4.875000000000e-01 1.379877711973e+00 1.463461222582e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 1.012500000000e+00 4.875000000000e-01 1.431891231903e+00 1.512603302257e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 1.012500000000e+00 4.875000000000e-01 1.485870956712e+00 1.563799459649e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 1.012500000000e+00 4.875000000000e-01 1.541610359332e+00 1.616854585298e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750000000000e-02 1.087500000000e+00 4.875000000000e-01 1.088146359641e+00 1.192358482169e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.125000000000e-01 1.087500000000e+00 4.875000000000e-01 1.093303480283e+00 1.197066727463e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.875000000000e-01 1.087500000000e+00 4.875000000000e-01 1.103545422717e+00 1.206428095661e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +2.625000000000e-01 1.087500000000e+00 4.875000000000e-01 1.118732541763e+00 1.220335507145e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +3.375000000000e-01 1.087500000000e+00 4.875000000000e-01 1.138666983802e+00 1.238635842369e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.125000000000e-01 1.087500000000e+00 4.875000000000e-01 1.163104681445e+00 1.261137879060e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.875000000000e-01 1.087500000000e+00 4.875000000000e-01 1.191768643655e+00 1.287621353504e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +5.625000000000e-01 1.087500000000e+00 4.875000000000e-01 1.224362078799e+00 1.317846254310e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +6.375000000000e-01 1.087500000000e+00 4.875000000000e-01 1.260580223548e+00 1.351561596821e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.125000000000e-01 1.087500000000e+00 4.875000000000e-01 1.300120186752e+00 1.388513143618e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.875000000000e-01 1.087500000000e+00 4.875000000000e-01 1.342688534248e+00 1.428449771606e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 1.087500000000e+00 4.875000000000e-01 1.388006664249e+00 1.471128393445e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 1.087500000000e+00 4.875000000000e-01 1.435814228931e+00 1.516317496437e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 1.087500000000e+00 4.875000000000e-01 1.485870956712e+00 1.563799459649e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 1.087500000000e+00 4.875000000000e-01 1.537957249081e+00 1.613371857322e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 1.087500000000e+00 4.875000000000e-01 1.591873895759e+00 1.664847966032e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750000000000e-02 1.162500000000e+00 4.875000000000e-01 1.163104681445e+00 1.261137879060e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.125000000000e-01 1.162500000000e+00 4.875000000000e-01 1.167930862680e+00 1.265590277302e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.875000000000e-01 1.162500000000e+00 4.875000000000e-01 1.177523885108e+00 1.274448410098e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +2.625000000000e-01 1.162500000000e+00 4.875000000000e-01 1.191768643655e+00 1.287621353504e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.375000000000e-01 1.162500000000e+00 4.875000000000e-01 1.210500929368e+00 1.304978448098e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +4.125000000000e-01 1.162500000000e+00 4.875000000000e-01 1.233516315255e+00 1.326355438787e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +4.875000000000e-01 1.162500000000e+00 4.875000000000e-01 1.260580223548e+00 1.351561596821e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +5.625000000000e-01 1.162500000000e+00 4.875000000000e-01 1.291438151829e+00 1.380387173948e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +6.375000000000e-01 1.162500000000e+00 4.875000000000e-01 1.325825214725e+00 1.412610615138e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +7.125000000000e-01 1.162500000000e+00 4.875000000000e-01 1.363474422202e+00 1.448005093223e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +7.875000000000e-01 1.162500000000e+00 4.875000000000e-01 1.404123392014e+00 1.486344088696e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +8.625000000000e-01 1.162500000000e+00 4.875000000000e-01 1.447519429921e+00 1.527405889081e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +9.375000000000e-01 1.162500000000e+00 4.875000000000e-01 1.493423081381e+00 1.570977004924e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.012500000000e+00 1.162500000000e+00 4.875000000000e-01 1.541610359332e+00 1.616854585298e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.087500000000e+00 1.162500000000e+00 4.875000000000e-01 1.591873895759e+00 1.664847966032e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.162500000000e+00 1.162500000000e+00 4.875000000000e-01 1.644023266259e+00 1.714779504776e+00 9.999999999976e-01 6.666666666640e-15 9.999999999984e-15 1.054092553389e-07 4.218750000010e-04 4.218750000000e-04 +4.513448200408e-02 4.513448200408e-02 7.169509609813e-01 6.382979658085e-02 7.197867207608e-01 1.764367867498e+00 6.775387438503e-02 5.760182638198e-02 2.529862235643e-01 2.391082992224e-04 4.218750000000e-04 +1.345999256523e-01 4.486890944866e-02 7.110757175816e-01 1.418814964000e-01 7.250924321457e-01 1.858414552015e+00 7.006124491424e-02 5.654920601940e-02 2.506640204191e-01 2.270080158071e-04 4.218750000000e-04 +2.217460791982e-01 4.433717608044e-02 6.990695284168e-01 2.261351560960e-01 7.347348599212e-01 2.006739392721e+00 7.134601473567e-02 5.332980579923e-02 2.434241971886e-01 2.102290917945e-04 4.218750000000e-04 +3.050697664849e-01 4.354436998050e-02 6.809935872489e-01 3.081617669020e-01 7.474730366068e-01 2.200951549904e+00 7.158364248335e-02 4.878592794543e-02 2.328230800544e-01 1.916784583551e-04 4.218750000000e-04 +3.830513630670e-01 4.249388302699e-02 6.575055945350e-01 3.854011894665e-01 7.621336389945e-01 2.478981883679e+00 7.297880692202e-02 4.415853585044e-02 2.215062975037e-01 1.701807515325e-04 4.218750000000e-04 +4.544151095583e-01 4.121521519348e-02 6.302267016484e-01 4.562803806414e-01 7.780600755912e-01 2.731134135709e+00 7.050526147053e-02 3.872306776260e-02 2.074262057873e-01 1.544687953931e-04 4.218750000000e-04 +5.191738187653e-01 3.981352251202e-02 6.025277972385e-01 5.206981569644e-01 7.963456015520e-01 2.436429559217e+00 4.532068219433e-02 2.790190384710e-02 1.760741758057e-01 1.731529641003e-04 4.218750000000e-04 +5.797054107162e-01 3.854269830406e-02 5.797054107162e-01 5.809852862218e-01 8.207327616342e-01 1.733912851847e+00 1.351265875909e-02 1.168973868384e-02 1.139675328223e-01 2.433080760378e-04 4.218750000000e-04 +6.428822216772e-01 3.777266014672e-02 5.668623169978e-01 6.439909353424e-01 8.579377665282e-01 1.203801115032e+00 9.675869812686e-04 1.205664668174e-03 3.660092087752e-02 3.504524084019e-04 4.218750000000e-04 +7.132232051411e-01 3.753080899086e-02 5.629871961948e-01 7.142099845111e-01 9.094231606104e-01 1.027543454990e+00 7.170579865100e-06 1.046755710955e-05 3.410369336393e-03 4.105665779401e-04 4.218750000000e-04 +7.875255447675e-01 3.750088041264e-02 5.625143537242e-01 7.884179092924e-01 9.685170095764e-01 1.000992998832e+00 9.396318024873e-10 1.408049512210e-09 3.955375403184e-05 4.214564941937e-04 4.218750000000e-04 +8.625000919329e-01 3.750000237896e-02 5.625000431803e-01 8.633149244410e-01 1.030397475414e+00 1.000003498748e+00 6.782872759171e-15 1.017427354154e-14 1.063237902799e-07 4.218735239709e-04 4.218750000000e-04 +9.375000000064e-01 3.750000000012e-02 5.625000000025e-01 9.382497002462e-01 1.093946410943e+00 1.000000000234e+00 6.666666669270e-15 1.000000000156e-14 1.054092553472e-07 4.218749999012e-04 4.218750000000e-04 +1.012500000000e+00 3.750000000000e-02 5.625000000000e-01 1.013194206458e+00 1.158865285527e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 3.750000000000e-02 5.625000000000e-01 1.088146359641e+00 1.224936222830e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 3.750000000000e-02 5.625000000000e-01 1.163104681445e+00 1.291982488271e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +4.486890944866e-02 1.345999256523e-01 7.110757175816e-01 1.418814964000e-01 7.250924321457e-01 1.858414552015e+00 7.006124491424e-02 5.654920601940e-02 2.506640204191e-01 2.270080158071e-04 4.218750000000e-04 +1.338113543804e-01 1.338113543804e-01 7.051380359655e-01 1.892378321642e-01 7.300894512917e-01 1.937328051086e+00 7.128763726890e-02 5.519532731869e-02 2.476451926955e-01 2.177612613226e-04 4.218750000000e-04 +2.204484790087e-01 1.322412101987e-01 6.931410406145e-01 2.570705536853e-01 7.392765191430e-01 2.071339659902e+00 7.155290295600e-02 5.181639521115e-02 2.399453530636e-01 2.036725353002e-04 4.218750000000e-04 +3.032718863476e-01 1.298802489024e-01 6.752297927797e-01 3.299131948010e-01 7.515171249953e-01 2.269317655133e+00 7.199532459282e-02 4.758830772102e-02 2.299475972212e-01 1.859038989300e-04 4.218750000000e-04 +3.807811267663e-01 1.267422491644e-01 6.521037683921e-01 4.013201517799e-01 7.657004564292e-01 2.554076086807e+00 7.387619665269e-02 4.338723327447e-02 2.195632869394e-01 1.651771465146e-04 4.218750000000e-04 +4.517744020882e-01 1.229399338453e-01 6.254664687273e-01 4.682033081002e-01 7.812954890553e-01 2.738410935523e+00 6.862774905960e-02 3.759173696469e-02 2.043736691148e-01 1.540583243104e-04 4.218750000000e-04 +5.164179271889e-01 1.188390030432e-01 5.988675357190e-01 5.299152613073e-01 7.996577452289e-01 2.337106095865e+00 3.979595208670e-02 2.554181354268e-02 1.684630310341e-01 1.805117023769e-04 4.218750000000e-04 +5.776559881597e-01 1.152638001849e-01 5.776559881597e-01 5.890434485586e-01 8.250203785038e-01 1.640172484726e+00 1.046904027606e-02 9.574334748528e-03 1.031414064311e-01 2.572138015536e-04 4.218750000000e-04 +6.420606789279e-01 1.131961292620e-01 5.662081734256e-01 6.519626362801e-01 8.635085261648e-01 1.174908623356e+00 6.995460609376e-04 8.931069791702e-04 3.150144580756e-02 3.590704771534e-04 4.218750000000e-04 +7.130825929528e-01 1.125745891357e-01 5.628933648655e-01 7.219139993735e-01 9.154281854417e-01 1.022627510329e+00 4.529014479307e-06 6.643202583874e-06 2.716861462111e-03 4.125402414259e-04 4.218750000000e-04 +7.875191663087e-01 1.125019802511e-01 5.625107782388e-01 7.955143825626e-01 9.743005226822e-01 1.000758515197e+00 5.006420776219e-10 7.503939312325e-10 2.887509367435e-05 4.215552439412e-04 4.218750000000e-04 +8.625000637247e-01 1.125000049667e-01 5.625000299308e-01 8.698060766876e-01 1.035842118624e+00 1.000002464641e+00 6.719885991122e-15 1.007980414358e-14 1.058290242880e-07 4.218739602320e-04 4.218750000000e-04 +9.375000000041e-01 1.125000000002e-01 5.625000000016e-01 9.442258734052e-01 1.099076316736e+00 1.000000000152e+00 6.666666668359e-15 1.000000000102e-14 1.054092553443e-07 4.218749999358e-04 4.218750000000e-04 +1.012500000000e+00 1.125000000000e-01 5.625000000000e-01 1.018730828040e+00 1.163709048689e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 1.125000000000e-01 5.625000000000e-01 1.093303480283e+00 1.229519723307e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 1.125000000000e-01 5.625000000000e-01 1.167930862680e+00 1.296328951308e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +4.433717608044e-02 2.217460791982e-01 6.990695284168e-01 2.261351560960e-01 7.347348599212e-01 2.006739392721e+00 7.134601473567e-02 5.332980579923e-02 2.434241971886e-01 2.102290917945e-04 4.218750000000e-04 +1.322412101987e-01 2.204484790087e-01 6.931410406145e-01 2.570705536853e-01 7.392765191430e-01 2.071339659902e+00 7.155290295600e-02 5.181639521115e-02 2.399453530636e-01 2.036725353002e-04 4.218750000000e-04 +2.178538187818e-01 2.178538187818e-01 6.813080314875e-01 3.080918251360e-01 7.477307045220e-01 2.203511602412e+00 7.169824329133e-02 4.880726056504e-02 2.328739777577e-01 1.914557652151e-04 4.218750000000e-04 +2.996700199942e-01 2.139507874357e-01 6.638252046893e-01 3.682079036736e-01 7.591053699642e-01 2.419216488874e+00 7.324202911458e-02 4.541265495549e-02 2.246297075324e-01 1.743849721347e-04 4.218750000000e-04 +3.762417706426e-01 2.087810694225e-01 6.415091414620e-01 4.302875839779e-01 7.724515412017e-01 2.685933849407e+00 7.423185301739e-02 4.145589049063e-02 2.146208297094e-01 1.570682763066e-04 4.218750000000e-04 +4.465621132607e-01 2.025979323713e-01 6.163226973657e-01 4.903709240983e-01 7.876022539894e-01 2.685125058848e+00 6.142666525674e-02 3.431497448563e-02 1.952632823356e-01 1.571155870785e-04 4.218750000000e-04 +5.112674125667e-01 1.961945942638e-01 5.921272785598e-01 5.476191066526e-01 8.065366699572e-01 2.122765701553e+00 2.892017847296e-02 2.043573046131e-02 1.506863204781e-01 1.987383721583e-04 4.218750000000e-04 +5.740803958516e-01 1.910379649538e-01 5.740803958516e-01 6.050320693607e-01 8.340456257640e-01 1.485809425617e+00 6.106895081638e-03 6.165220427681e-03 8.276620638670e-02 2.839361446538e-04 4.218750000000e-04 +6.407131371607e-01 1.883239949981e-01 5.651272718548e-01 6.678167796801e-01 8.748417483273e-01 1.127089160637e+00 3.497077074428e-04 4.654126572097e-04 2.274038642322e-02 3.743049039364e-04 4.218750000000e-04 +7.128701329277e-01 1.875792954359e-01 5.627509769238e-01 7.371362279094e-01 9.273933795996e-01 1.014972972197e+00 1.693257264891e-06 2.502417273080e-06 1.667472229681e-03 4.156514622126e-04 4.218750000000e-04 +7.875105870116e-01 1.875018227896e-01 5.625059625707e-01 8.095244642411e-01 9.857701639492e-01 1.000434064710e+00 1.252041937315e-10 1.877248058838e-10 1.444240692020e-05 4.216919584023e-04 4.218750000000e-04 +8.625000300126e-01 1.875000039342e-01 5.625000140968e-01 8.826452023588e-01 1.046646463284e+00 1.000001197468e+00 6.675379008520e-15 1.001305652246e-14 1.054780468074e-07 4.218744948188e-04 4.218750000000e-04 +9.375000000016e-01 1.875000000002e-01 5.625000000006e-01 9.560661588003e-01 1.109264959333e+00 1.000000000062e+00 6.666666667361e-15 1.000000000042e-14 1.054092553411e-07 4.218749999736e-04 4.218750000000e-04 +1.012500000000e+00 1.875000000000e-01 5.625000000000e-01 1.029714766331e+00 1.173336588537e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 1.875000000000e-01 5.625000000000e-01 1.103545422717e+00 1.238635842369e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 1.875000000000e-01 5.625000000000e-01 1.177523885108e+00 1.304978448098e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +4.354436998050e-02 3.050697664849e-01 6.809935872489e-01 3.081617669020e-01 7.474730366068e-01 2.200951549904e+00 7.158364248335e-02 4.878592794543e-02 2.328230800544e-01 1.916784583551e-04 4.218750000000e-04 +1.298802489024e-01 3.032718863476e-01 6.752297927797e-01 3.299131948010e-01 7.515171249953e-01 2.269317655133e+00 7.199532459282e-02 4.758830772102e-02 2.299475972212e-01 1.859038989300e-04 4.218750000000e-04 +2.139507874357e-01 2.996700199942e-01 6.638252046893e-01 3.682079036736e-01 7.591053699642e-01 2.419216488874e+00 7.324202911458e-02 4.541265495549e-02 2.246297075324e-01 1.743849721347e-04 4.218750000000e-04 +2.942719720514e-01 2.942719720514e-01 6.471752935958e-01 4.161634139014e-01 7.694334589234e-01 2.638654158434e+00 7.490995120157e-02 4.258418119829e-02 2.175218538147e-01 1.598826426918e-04 4.218750000000e-04 +3.695256639199e-01 2.872175042399e-01 6.263686379438e-01 4.680204173294e-01 7.819084227943e-01 2.761070867145e+00 6.958329392553e-02 3.780234043621e-02 2.049453597540e-01 1.527939775180e-04 4.218750000000e-04 +4.391511482379e-01 2.790896619723e-01 6.038061875378e-01 5.203314044130e-01 7.970738250171e-01 2.449219149196e+00 4.527414447836e-02 2.772770118992e-02 1.755236647227e-01 1.722487757531e-04 4.218750000000e-04 +5.045850721614e-01 2.712898721001e-01 5.835632930195e-01 5.728911674587e-01 8.177716103607e-01 1.814173680515e+00 1.609273837577e-02 1.330584156463e-02 1.215905769587e-01 2.325438873527e-04 4.218750000000e-04 +5.699440894979e-01 2.657101546314e-01 5.699440894979e-01 6.288387324488e-01 8.486898235406e-01 1.316592054025e+00 2.597902757333e-03 2.959803778312e-03 5.734693422312e-02 3.204295504520e-04 4.218750000000e-04 +6.393158522766e-01 2.631591386351e-01 5.639952687011e-01 6.913591622445e-01 8.922265151499e-01 1.075974914480e+00 1.101315605464e-04 1.535327065682e-04 1.306108327004e-02 3.920862785205e-04 4.218750000000e-04 +7.126784249823e-01 2.625538444266e-01 5.626216567136e-01 7.595031656671e-01 9.451921430384e-01 1.007683628097e+00 3.224729068307e-07 4.800210569653e-07 7.303127617408e-04 4.186581861973e-04 4.218750000000e-04 +7.875041470900e-01 2.625010022555e-01 5.625023405442e-01 8.301021370103e-01 1.002735479070e+00 1.000178913644e+00 1.195884487609e-11 1.793505848747e-11 4.464061241052e-06 4.217995343085e-04 4.218750000000e-04 +8.625000091926e-01 2.625000017148e-01 5.625000043182e-01 9.015611553064e-01 1.062647058818e+00 1.000000383160e+00 6.667083117545e-15 1.000062084448e-14 1.054125274259e-07 4.218748383546e-04 4.218750000000e-04 +9.375000000004e-01 2.625000000001e-01 5.625000000001e-01 9.735566239314e-01 1.124374826293e+00 1.000000000015e+00 6.666666666835e-15 1.000000000010e-14 1.054092553395e-07 4.218749999936e-04 4.218750000000e-04 +1.012500000000e+00 2.625000000000e-01 5.625000000000e-01 1.045974426074e+00 1.187631571658e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 2.625000000000e-01 5.625000000000e-01 1.118732541763e+00 1.252185589280e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 2.625000000000e-01 5.625000000000e-01 1.191768643655e+00 1.317846254310e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +4.249388302699e-02 3.830513630670e-01 6.575055945350e-01 3.854011894665e-01 7.621336389945e-01 2.478981883679e+00 7.297880692202e-02 4.415853585044e-02 2.215062975037e-01 1.701807515325e-04 4.218750000000e-04 +1.267422491644e-01 3.807811267663e-01 6.521037683921e-01 4.013201517799e-01 7.657004564292e-01 2.554076086807e+00 7.387619665269e-02 4.338723327447e-02 2.195632869394e-01 1.651771465146e-04 4.218750000000e-04 +2.087810694225e-01 3.762417706426e-01 6.415091414620e-01 4.302875839779e-01 7.724515412017e-01 2.685933849407e+00 7.423185301739e-02 4.145589049063e-02 2.146208297094e-01 1.570682763066e-04 4.218750000000e-04 +2.872175042399e-01 3.695256639199e-01 6.263686379438e-01 4.680204173294e-01 7.819084227943e-01 2.761070867145e+00 6.958329392553e-02 3.780234043621e-02 2.049453597540e-01 1.527939775180e-04 4.218750000000e-04 +3.610729299663e-01 3.610729299663e-01 6.082088289033e-01 5.106342345641e-01 7.941443830090e-01 2.547028297734e+00 5.104645967388e-02 3.006236309935e-02 1.827638521862e-01 1.656342021701e-04 4.218750000000e-04 +4.305314396874e-01 3.520439046911e-01 5.898421735704e-01 5.561404781073e-01 8.106824415958e-01 2.019034742766e+00 2.400150827691e-02 1.783142293333e-02 1.407575651542e-01 2.089488561361e-04 4.218750000000e-04 +4.977602119226e-01 3.443521980907e-01 5.750062478958e-01 6.052633021282e-01 8.348507950660e-01 1.495266038155e+00 6.336207710085e-03 6.356267929990e-03 8.403880009978e-02 2.821404280141e-04 4.218750000000e-04 +5.663364700638e-01 3.396531375705e-01 5.663364700638e-01 6.603796265678e-01 8.699645099141e-01 1.172096378514e+00 7.405092377297e-04 9.476727997424e-04 3.244949579719e-02 3.599320053652e-04 4.218750000000e-04 +6.382802394090e-01 3.378689849991e-01 5.631472384690e-01 7.221891130752e-01 9.158012487650e-01 1.035605346384e+00 1.819229290126e-05 2.635023027561e-05 5.410918003404e-03 4.073704345703e-04 4.218750000000e-04 +7.125617559243e-01 3.375241484056e-01 5.625423538575e-01 7.884585003428e-01 9.685663150484e-01 1.002885108987e+00 2.481448699341e-08 3.711465067787e-08 2.030726489540e-04 4.206613461695e-04 4.218750000000e-04 +7.875010870285e-01 3.375003405545e-01 5.625006152171e-01 8.567756076975e-01 1.024925062658e+00 1.000049932585e+00 3.492600289159e-13 5.238638854957e-13 7.629357665519e-07 4.218539357424e-04 4.218750000000e-04 +8.625000016962e-01 3.375000004176e-01 5.625000007970e-01 9.261816793739e-01 1.083613747654e+00 1.000000074505e+00 6.666672917832e-15 1.000000863169e-14 1.054093008320e-07 4.218749685681e-04 4.218750000000e-04 +9.375000000000e-01 3.375000000000e-01 5.625000000000e-01 9.963997691690e-01 1.144210972679e+00 1.000000000002e+00 6.666666666688e-15 1.000000000001e-14 1.054092553390e-07 4.218749999992e-04 4.218750000000e-04 +1.012500000000e+00 3.375000000000e-01 5.625000000000e-01 1.067268710307e+00 1.206428095661e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 3.375000000000e-01 5.625000000000e-01 1.138666983802e+00 1.270027066641e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 3.375000000000e-01 5.625000000000e-01 1.210500929368e+00 1.334810379792e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +4.121521519348e-02 4.544151095583e-01 6.302267016484e-01 4.562803806414e-01 7.780600755912e-01 2.731134135709e+00 7.050526147053e-02 3.872306776260e-02 2.074262057873e-01 1.544687953931e-04 4.218750000000e-04 +1.229399338453e-01 4.517744020882e-01 6.254664687273e-01 4.682033081002e-01 7.812954890553e-01 2.738410935523e+00 6.862774905960e-02 3.759173696469e-02 2.043736691148e-01 1.540583243104e-04 4.218750000000e-04 +2.025979323713e-01 4.465621132607e-01 6.163226973657e-01 4.903709240983e-01 7.876022539894e-01 2.685125058848e+00 6.142666525674e-02 3.431497448563e-02 1.952632823356e-01 1.571155870785e-04 4.218750000000e-04 +2.790896619723e-01 4.391511482379e-01 6.038061875378e-01 5.203314044130e-01 7.970738250171e-01 2.449219149196e+00 4.527414447836e-02 2.772770118992e-02 1.755236647227e-01 1.722487757531e-04 4.218750000000e-04 +3.520439046911e-01 4.305314396874e-01 5.898421735704e-01 5.561404781073e-01 8.106824415958e-01 2.019034742766e+00 2.400150827691e-02 1.783142293333e-02 1.407575651542e-01 2.089488561361e-04 4.218750000000e-04 +4.223785902563e-01 4.223785902563e-01 5.771581992088e-01 5.973335307965e-01 8.306135888172e-01 1.568104398407e+00 8.229767288935e-03 7.872339970440e-03 9.352563505051e-02 2.690350211559e-04 4.218750000000e-04 +4.923038857130e-01 4.164801980740e-01 5.682955280275e-01 6.448401904937e-01 8.595223548297e-01 1.244969500124e+00 1.590018818873e-03 1.915732255346e-03 4.613665998779e-02 3.388637231339e-04 4.218750000000e-04 +5.639752709546e-01 4.135282261679e-01 5.639752709546e-01 6.993380442146e-01 8.984107113866e-01 1.073387812901e+00 1.102773346983e-04 1.541064655844e-04 1.308546545618e-02 3.930312930048e-04 4.218750000000e-04 +6.377365285824e-01 4.126388821575e-01 5.626974803116e-01 7.595911577661e-01 9.453079822500e-01 1.012088323355e+00 1.143825601599e-06 1.695245723922e-06 1.372445394146e-03 4.168361498348e-04 4.218750000000e-04 +7.125141837662e-01 4.125068550147e-01 5.625097802936e-01 8.233093996197e-01 9.971236735872e-01 1.000726704227e+00 5.587134316329e-10 8.374615605934e-10 3.050430863179e-05 4.215686442843e-04 4.218750000000e-04 +7.875001744097e-01 4.125000679799e-01 5.625000991006e-01 8.889954053755e-01 1.052007220634e+00 1.000008592422e+00 8.966566355913e-15 1.344973396808e-14 1.222462631471e-07 4.218713751031e-04 4.218750000000e-04 +8.625000001663e-01 4.125000000519e-01 5.625000000782e-01 9.560661589711e-01 1.109264959519e+00 1.000000007725e+00 6.666666775488e-15 1.000000008598e-14 1.054092557921e-07 4.218749967409e-04 4.218750000000e-04 +9.375000000000e-01 4.125000000000e-01 5.625000000000e-01 1.024237521281e+00 1.168532733816e+00 1.000000000000e+00 6.666666666668e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 4.125000000000e-01 5.625000000000e-01 1.093303480283e+00 1.229519723307e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 4.125000000000e-01 5.625000000000e-01 1.163104681445e+00 1.291982488271e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 4.125000000000e-01 5.625000000000e-01 1.233516315255e+00 1.355717061189e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.981352251202e-02 5.191738187653e-01 6.025277972385e-01 5.206981569644e-01 7.963456015520e-01 2.436429559217e+00 4.532068219433e-02 2.790190384710e-02 1.760741758057e-01 1.731529641003e-04 4.218750000000e-04 +1.188390030432e-01 5.164179271889e-01 5.988675357190e-01 5.299152613073e-01 7.996577452289e-01 2.337106095865e+00 3.979595208670e-02 2.554181354268e-02 1.684630310341e-01 1.805117023769e-04 4.218750000000e-04 +1.961945942638e-01 5.112674125667e-01 5.921272785598e-01 5.476191066526e-01 8.065366699572e-01 2.122765701553e+00 2.892017847296e-02 2.043573046131e-02 1.506863204781e-01 1.987383721583e-04 4.218750000000e-04 +2.712898721001e-01 5.045850721614e-01 5.835632930195e-01 5.728911674587e-01 8.177716103607e-01 1.814173680515e+00 1.609273837577e-02 1.330584156463e-02 1.215905769587e-01 2.325438873527e-04 4.218750000000e-04 +3.443521980907e-01 4.977602119226e-01 5.750062478958e-01 6.052633021282e-01 8.348507950660e-01 1.495266038155e+00 6.336207710085e-03 6.356267929990e-03 8.403880009978e-02 2.821404280141e-04 4.218750000000e-04 +4.164801980740e-01 4.923038857130e-01 5.682955280275e-01 6.448401904937e-01 8.595223548297e-01 1.244969500124e+00 1.590018818873e-03 1.915732255346e-03 4.613665998779e-02 3.388637231339e-04 4.218750000000e-04 +4.890869473795e-01 4.890869473795e-01 5.643984718367e-01 6.916733941637e-01 8.927248843880e-01 1.091315942634e+00 1.873998296847e-04 2.575787025052e-04 1.691740400709e-02 3.865745780105e-04 4.218750000000e-04 +5.628820324798e-01 4.878213575017e-01 5.628820324798e-01 7.448529112002e-01 9.336177171691e-01 1.021933559576e+00 5.449602577654e-06 7.998958239395e-06 2.981229843052e-03 4.128203796098e-04 4.218750000000e-04 +6.375457547436e-01 4.875323619092e-01 5.625383598273e-01 8.025910498507e-01 9.801029535603e-01 1.002651673294e+00 1.866557815350e-08 2.792432105386e-08 1.761448931794e-04 4.207592838439e-04 4.218750000000e-04 +7.125019260389e-01 4.875011216403e-01 5.625013349598e-01 8.633170554377e-01 1.030399966053e+00 1.000108509209e+00 2.679137446308e-12 4.018270150146e-12 2.112994228878e-06 4.218292276440e-04 4.218750000000e-04 +7.875000147536e-01 4.875000070129e-01 5.625000084296e-01 9.261816938778e-01 1.083613764013e+00 1.000000781250e+00 6.669211928077e-15 1.000381007664e-14 1.054293342936e-07 4.218746704104e-04 4.218750000000e-04 +8.625000000070e-01 4.875000000027e-01 5.625000000033e-01 9.907383610292e-01 1.139284314830e+00 1.000000000344e+00 6.666666670500e-15 1.000000000231e-14 1.054092553511e-07 4.218749998547e-04 4.218750000000e-04 +9.375000000000e-01 4.875000000000e-01 5.625000000000e-01 1.056675210270e+00 1.197066727463e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 4.875000000000e-01 5.625000000000e-01 1.123749304783e+00 1.256669706009e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 4.875000000000e-01 5.625000000000e-01 1.191768643655e+00 1.317846254310e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 4.875000000000e-01 5.625000000000e-01 1.260580223548e+00 1.380387173948e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.854269830406e-02 5.797054107162e-01 5.797054107162e-01 5.809852862218e-01 8.207327616342e-01 1.733912851847e+00 1.351265875909e-02 1.168973868384e-02 1.139675328223e-01 2.433080760378e-04 4.218750000000e-04 +1.152638001849e-01 5.776559881597e-01 5.776559881597e-01 5.890434485586e-01 8.250203785038e-01 1.640172484726e+00 1.046904027606e-02 9.574334748528e-03 1.031414064311e-01 2.572138015536e-04 4.218750000000e-04 +1.910379649538e-01 5.740803958516e-01 5.740803958516e-01 6.050320693607e-01 8.340456257640e-01 1.485809425617e+00 6.106895081638e-03 6.165220427681e-03 8.276620638670e-02 2.839361446538e-04 4.218750000000e-04 +2.657101546314e-01 5.699440894979e-01 5.699440894979e-01 6.288387324488e-01 8.486898235406e-01 1.316592054025e+00 2.597902757333e-03 2.959803778312e-03 5.734693422312e-02 3.204295504520e-04 4.218750000000e-04 +3.396531375705e-01 5.663364700638e-01 5.663364700638e-01 6.603796265678e-01 8.699645099141e-01 1.172096378514e+00 7.405092377297e-04 9.476727997424e-04 3.244949579719e-02 3.599320053652e-04 4.218750000000e-04 +4.135282261679e-01 5.639752709546e-01 5.639752709546e-01 6.993380442146e-01 8.984107113866e-01 1.073387812901e+00 1.102773346983e-04 1.541064655844e-04 1.308546545618e-02 3.930312930048e-04 4.218750000000e-04 +4.878213575017e-01 5.628820324798e-01 5.628820324798e-01 7.448529112002e-01 9.336177171691e-01 1.021933559575e+00 5.449602577654e-06 7.998958239395e-06 2.981229843052e-03 4.128203796098e-04 4.218750000000e-04 +5.625576870250e-01 5.625576870250e-01 5.625576870250e-01 7.955767106080e-01 9.743784961157e-01 1.003876774088e+00 5.182250421007e-08 7.743356388111e-08 2.933211434609e-04 4.202458019644e-04 4.218750000000e-04 +6.375048356109e-01 5.625040583112e-01 5.625040583112e-01 8.501901146472e-01 1.019428294026e+00 1.000316771440e+00 5.118720017822e-11 7.675648600470e-11 9.234986976150e-06 4.217414043679e-04 4.218750000000e-04 +7.125001264299e-01 5.625000882200e-01 5.625000882200e-01 9.077790366659e-01 1.067927492229e+00 1.000007802096e+00 8.176762514303e-15 1.226504807838e-14 1.167383021900e-07 4.218717085166e-04 4.218750000000e-04 +7.875000004983e-01 5.625000002863e-01 5.625000002863e-01 9.677615931142e-01 1.119360867383e+00 1.000000028212e+00 6.666667364766e-15 1.000000076503e-14 1.054092593710e-07 4.218749880982e-04 4.218750000000e-04 +8.625000000001e-01 5.625000000000e-01 5.625000000000e-01 1.029714766331e+00 1.173336588537e+00 1.000000000005e+00 6.666666666721e-15 1.000000000003e-14 1.054092553391e-07 4.218749999979e-04 4.218750000000e-04 +9.375000000000e-01 5.625000000000e-01 5.625000000000e-01 1.093303480283e+00 1.229519723307e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 5.625000000000e-01 5.625000000000e-01 1.158258390861e+00 1.287621353504e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 5.625000000000e-01 5.625000000000e-01 1.224362078799e+00 1.347393316742e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 5.625000000000e-01 5.625000000000e-01 1.291438151829e+00 1.408622997825e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.777266014672e-02 6.428822216772e-01 5.668623169978e-01 6.439909353424e-01 8.579377665282e-01 1.203801115032e+00 9.675869812686e-04 1.205664668174e-03 3.660092087752e-02 3.504524084019e-04 4.218750000000e-04 +1.131961292620e-01 6.420606789279e-01 5.662081734256e-01 6.519626362801e-01 8.635085261648e-01 1.174908623356e+00 6.995460609376e-04 8.931069791702e-04 3.150144580756e-02 3.590704771534e-04 4.218750000000e-04 +1.883239949981e-01 6.407131371607e-01 5.651272718548e-01 6.678167796801e-01 8.748417483273e-01 1.127089160637e+00 3.497077074428e-04 4.654126572097e-04 2.274038642322e-02 3.743049039364e-04 4.218750000000e-04 +2.631591386351e-01 6.393158522766e-01 5.639952687011e-01 6.913591622445e-01 8.922265151499e-01 1.075974914480e+00 1.101315605464e-04 1.535327065682e-04 1.306108327004e-02 3.920862785205e-04 4.218750000000e-04 +3.378689849991e-01 6.382802394090e-01 5.631472384690e-01 7.221891130752e-01 9.158012487650e-01 1.035605346384e+00 1.819229290126e-05 2.635023027561e-05 5.410918003404e-03 4.073704345703e-04 4.218750000000e-04 +4.126388821575e-01 6.377365285824e-01 5.626974803116e-01 7.595911577661e-01 9.453079822500e-01 1.012088323355e+00 1.143825601599e-06 1.695245723922e-06 1.372445394146e-03 4.168361498348e-04 4.218750000000e-04 +4.875323619092e-01 6.375457547436e-01 5.625383598273e-01 8.025910498507e-01 9.801029535603e-01 1.002651673294e+00 1.866557815350e-08 2.792432105386e-08 1.761448931794e-04 4.207592838439e-04 4.218750000000e-04 +5.625040583112e-01 6.375048356109e-01 5.625040583112e-01 8.501901146472e-01 1.019428294026e+00 1.000316771440e+00 5.118720017822e-11 7.675648600470e-11 9.234986976150e-06 4.217414043679e-04 4.218750000000e-04 +6.375002091061e-01 6.375002091061e-01 5.625001755427e-01 9.015614417335e-01 1.062647392462e+00 1.000015261254e+00 1.652225770154e-14 2.478300833254e-14 1.659417847471e-07 4.218685617569e-04 4.218750000000e-04 +7.125000027980e-01 6.375000023372e-01 5.625000019642e-01 9.560661624422e-01 1.109264963468e+00 1.000000186873e+00 6.666712199408e-15 1.000006643037e-14 1.054096054572e-07 4.218749211630e-04 4.218750000000e-04 +7.875000000046e-01 6.375000000032e-01 5.625000000027e-01 1.013194206464e+00 1.158865285533e+00 1.000000000279e+00 6.666666669774e-15 1.000000000187e-14 1.054092553488e-07 4.218749998821e-04 4.218750000000e-04 +8.625000000000e-01 6.375000000000e-01 5.625000000000e-01 1.072526223456e+00 1.211081644647e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 6.375000000000e-01 5.625000000000e-01 1.133716234337e+00 1.265590277301e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 6.375000000000e-01 5.625000000000e-01 1.196479210016e+00 1.322107692285e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 6.375000000000e-01 5.625000000000e-01 1.260580223548e+00 1.380387173948e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 6.375000000000e-01 5.625000000000e-01 1.325825214725e+00 1.440214827725e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.753080899086e-02 7.132232051411e-01 5.629871961948e-01 7.142099845111e-01 9.094231606104e-01 1.027543454990e+00 7.170579865100e-06 1.046755710955e-05 3.410369336393e-03 4.105665779401e-04 4.218750000000e-04 +1.125745891357e-01 7.130825929528e-01 5.628933648655e-01 7.219139993735e-01 9.154281854417e-01 1.022627510329e+00 4.529014479307e-06 6.643202583874e-06 2.716861462111e-03 4.125402414259e-04 4.218750000000e-04 +1.875792954359e-01 7.128701329277e-01 5.627509769238e-01 7.371362279094e-01 9.273933795996e-01 1.014972972197e+00 1.693257264891e-06 2.502417273080e-06 1.667472229681e-03 4.156514622126e-04 4.218750000000e-04 +2.625538444266e-01 7.126784249823e-01 5.626216567136e-01 7.595031656671e-01 9.451921430384e-01 1.007683628097e+00 3.224729068307e-07 4.800210569653e-07 7.303127617408e-04 4.186581861973e-04 4.218750000000e-04 +3.375241484056e-01 7.125617559243e-01 5.625423538575e-01 7.884585003428e-01 9.685663150484e-01 1.002885108987e+00 2.481448699341e-08 3.711465067787e-08 2.030726489540e-04 4.206613461695e-04 4.218750000000e-04 +4.125068550147e-01 7.125141837662e-01 5.625097802936e-01 8.233093996197e-01 9.971236735872e-01 1.000726704227e+00 5.587134316329e-10 8.374615605934e-10 3.050430863179e-05 4.215686442843e-04 4.218750000000e-04 +4.875011216403e-01 7.125019260389e-01 5.625013349598e-01 8.633170554377e-01 1.030399966053e+00 1.000108509209e+00 2.679137446308e-12 4.018270150146e-12 2.112994228878e-06 4.218292276440e-04 4.218750000000e-04 +5.625000882200e-01 7.125001264299e-01 5.625000882200e-01 9.077790366659e-01 1.067927492229e+00 1.000007802096e+00 8.176762514303e-15 1.226504807838e-14 1.167383021900e-07 4.218717085166e-04 4.218750000000e-04 +6.375000023372e-01 7.125000027980e-01 5.625000019642e-01 9.560661624422e-01 1.109264963468e+00 1.000000186873e+00 6.666712199408e-15 1.000006643037e-14 1.054096054572e-07 4.218749211630e-04 4.218750000000e-04 +7.125000000129e-01 7.125000000129e-01 5.625000000090e-01 1.007627163209e+00 1.154001191527e+00 1.000000000923e+00 6.666666677002e-15 1.000000000628e-14 1.054092553720e-07 4.218749996107e-04 4.218750000000e-04 +7.875000000000e-01 7.125000000000e-01 5.625000000000e-01 1.061985169388e+00 1.201756526922e+00 1.000000000000e+00 6.666666666671e-15 1.000000000000e-14 1.054092553390e-07 4.218749999998e-04 4.218750000000e-04 +8.625000000000e-01 7.125000000000e-01 5.625000000000e-01 1.118732541763e+00 1.252185589280e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 7.125000000000e-01 5.625000000000e-01 1.177523885108e+00 1.304978448098e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 7.125000000000e-01 5.625000000000e-01 1.238068051441e+00 1.359859827335e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 7.125000000000e-01 5.625000000000e-01 1.300120186752e+00 1.416587007564e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 7.125000000000e-01 5.625000000000e-01 1.363474422202e+00 1.474947032947e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750088041264e-02 7.875255447675e-01 5.625143537242e-01 7.884179092924e-01 9.685170095764e-01 1.000992998832e+00 9.396318024873e-10 1.408049512210e-09 3.955375403184e-05 4.214564941937e-04 4.218750000000e-04 +1.125019802511e-01 7.875191663087e-01 5.625107782388e-01 7.955143825626e-01 9.743005226822e-01 1.000758515197e+00 5.006420776219e-10 7.503939312325e-10 2.887509367435e-05 4.215552439412e-04 4.218750000000e-04 +1.875018227896e-01 7.875105870116e-01 5.625059625707e-01 8.095244642411e-01 9.857701639492e-01 1.000434064710e+00 1.252041937315e-10 1.877248058838e-10 1.444240692020e-05 4.216919584023e-04 4.218750000000e-04 +2.625010022555e-01 7.875041470900e-01 5.625023405442e-01 8.301021370103e-01 1.002735479070e+00 1.000178913644e+00 1.195884487609e-11 1.793505848747e-11 4.464061241052e-06 4.217995343085e-04 4.218750000000e-04 +3.375003405545e-01 7.875010870285e-01 5.625006152171e-01 8.567756076975e-01 1.024925062658e+00 1.000049932585e+00 3.492600289159e-13 5.238638854957e-13 7.629357665519e-07 4.218539357424e-04 4.218750000000e-04 +4.125000679799e-01 7.875001744097e-01 5.625000991006e-01 8.889954053755e-01 1.052007220634e+00 1.000008592422e+00 8.966566355913e-15 1.344973396808e-14 1.222462631471e-07 4.218713751031e-04 4.218750000000e-04 +4.875000070129e-01 7.875000147536e-01 5.625000084296e-01 9.261816938778e-01 1.083613764013e+00 1.000000781250e+00 6.669211928077e-15 1.000381007664e-14 1.054293342936e-07 4.218746704104e-04 4.218750000000e-04 +5.625000002863e-01 7.875000004983e-01 5.625000002863e-01 9.677615931142e-01 1.119360867383e+00 1.000000028212e+00 6.666667364766e-15 1.000000076503e-14 1.054092593710e-07 4.218749880982e-04 4.218750000000e-04 +6.375000000032e-01 7.875000000046e-01 5.625000000027e-01 1.013194206464e+00 1.158865285533e+00 1.000000000279e+00 6.666666669775e-15 1.000000000187e-14 1.054092553488e-07 4.218749998821e-04 4.218750000000e-04 +7.125000000000e-01 7.875000000000e-01 5.625000000000e-01 1.061985169388e+00 1.201756526922e+00 1.000000000000e+00 6.666666666671e-15 1.000000000000e-14 1.054092553390e-07 4.218749999998e-04 4.218750000000e-04 +7.875000000000e-01 7.875000000000e-01 5.625000000000e-01 1.113693180369e+00 1.247685356971e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 7.875000000000e-01 5.625000000000e-01 1.167930862680e+00 1.296328951308e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 7.875000000000e-01 5.625000000000e-01 1.224362078799e+00 1.347393316742e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 7.875000000000e-01 5.625000000000e-01 1.282697353237e+00 1.400613704774e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 7.875000000000e-01 5.625000000000e-01 1.342688534248e+00 1.455753670784e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 7.875000000000e-01 5.625000000000e-01 1.404123392014e+00 1.512603302257e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750000237896e-02 8.625000919329e-01 5.625000431803e-01 8.633149244410e-01 1.030397475414e+00 1.000003498748e+00 6.782872759171e-15 1.017427354154e-14 1.063237902799e-07 4.218735239709e-04 4.218750000000e-04 +1.125000049667e-01 8.625000637247e-01 5.625000299308e-01 8.698060766876e-01 1.035842118624e+00 1.000002464641e+00 6.719885991122e-15 1.007980414358e-14 1.058290242880e-07 4.218739602320e-04 4.218750000000e-04 +1.875000039342e-01 8.625000300126e-01 5.625000140968e-01 8.826452023588e-01 1.046646463284e+00 1.000001197468e+00 6.675379008520e-15 1.001305652246e-14 1.054780468074e-07 4.218744948188e-04 4.218750000000e-04 +2.625000017148e-01 8.625000091926e-01 5.625000043182e-01 9.015611553064e-01 1.062647058818e+00 1.000000383160e+00 6.667083117546e-15 1.000062084448e-14 1.054125274259e-07 4.218748383546e-04 4.218750000000e-04 +3.375000004176e-01 8.625000016962e-01 5.625000007970e-01 9.261816793739e-01 1.083613747654e+00 1.000000074505e+00 6.666672917832e-15 1.000000863169e-14 1.054093008320e-07 4.218749685681e-04 4.218750000000e-04 +4.125000000519e-01 8.625000001663e-01 5.625000000782e-01 9.560661589711e-01 1.109264959519e+00 1.000000007725e+00 6.666666775488e-15 1.000000008598e-14 1.054092557921e-07 4.218749967409e-04 4.218750000000e-04 +4.875000000027e-01 8.625000000070e-01 5.625000000033e-01 9.907383610292e-01 1.139284314830e+00 1.000000000344e+00 6.666666670500e-15 1.000000000231e-14 1.054092553511e-07 4.218749998547e-04 4.218750000000e-04 +5.625000000000e-01 8.625000000001e-01 5.625000000000e-01 1.029714766331e+00 1.173336588537e+00 1.000000000005e+00 6.666666666721e-15 1.000000000003e-14 1.054092553391e-07 4.218749999979e-04 4.218750000000e-04 +6.375000000000e-01 8.625000000000e-01 5.625000000000e-01 1.072526223456e+00 1.211081644647e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.125000000000e-01 8.625000000000e-01 5.625000000000e-01 1.118732541763e+00 1.252185589280e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.875000000000e-01 8.625000000000e-01 5.625000000000e-01 1.167930862680e+00 1.296328951308e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 8.625000000000e-01 5.625000000000e-01 1.219759197547e+00 1.343212101643e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 8.625000000000e-01 5.625000000000e-01 1.273896581360e+00 1.392558347072e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 8.625000000000e-01 5.625000000000e-01 1.330061088823e+00 1.444115213548e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 8.625000000000e-01 5.625000000000e-01 1.388006664249e+00 1.497654416079e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 8.625000000000e-01 5.625000000000e-01 1.447519429921e+00 1.552970943064e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750000000012e-02 9.375000000064e-01 5.625000000025e-01 9.382497002462e-01 1.093946410943e+00 1.000000000234e+00 6.666666669270e-15 1.000000000156e-14 1.054092553472e-07 4.218749999012e-04 4.218750000000e-04 +1.125000000002e-01 9.375000000041e-01 5.625000000016e-01 9.442258734052e-01 1.099076316736e+00 1.000000000152e+00 6.666666668359e-15 1.000000000102e-14 1.054092553443e-07 4.218749999358e-04 4.218750000000e-04 +1.875000000002e-01 9.375000000016e-01 5.625000000006e-01 9.560661588003e-01 1.109264959333e+00 1.000000000062e+00 6.666666667361e-15 1.000000000042e-14 1.054092553411e-07 4.218749999737e-04 4.218750000000e-04 +2.625000000001e-01 9.375000000004e-01 5.625000000001e-01 9.735566239314e-01 1.124374826293e+00 1.000000000015e+00 6.666666666835e-15 1.000000000010e-14 1.054092553395e-07 4.218749999936e-04 4.218750000000e-04 +3.375000000000e-01 9.375000000000e-01 5.625000000000e-01 9.963997691690e-01 1.144210972679e+00 1.000000000002e+00 6.666666666688e-15 1.000000000001e-14 1.054092553390e-07 4.218749999992e-04 4.218750000000e-04 +4.125000000000e-01 9.375000000000e-01 5.625000000000e-01 1.024237521281e+00 1.168532733816e+00 1.000000000000e+00 6.666666666668e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.875000000000e-01 9.375000000000e-01 5.625000000000e-01 1.056675210270e+00 1.197066727463e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +5.625000000000e-01 9.375000000000e-01 5.625000000000e-01 1.093303480283e+00 1.229519723307e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +6.375000000000e-01 9.375000000000e-01 5.625000000000e-01 1.133716234337e+00 1.265590277301e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.125000000000e-01 9.375000000000e-01 5.625000000000e-01 1.177523885108e+00 1.304978448098e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.875000000000e-01 9.375000000000e-01 5.625000000000e-01 1.224362078799e+00 1.347393316742e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 9.375000000000e-01 5.625000000000e-01 1.273896581360e+00 1.392558347072e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 9.375000000000e-01 5.625000000000e-01 1.325825214725e+00 1.440214827725e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 9.375000000000e-01 5.625000000000e-01 1.379877711973e+00 1.490123736473e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 9.375000000000e-01 5.625000000000e-01 1.435814228931e+00 1.542066389621e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 9.375000000000e-01 5.625000000000e-01 1.493423081381e+00 1.595844212322e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750000000000e-02 1.012500000000e+00 5.625000000000e-01 1.013194206458e+00 1.158865285527e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.125000000000e-01 1.012500000000e+00 5.625000000000e-01 1.018730828040e+00 1.163709048689e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.875000000000e-01 1.012500000000e+00 5.625000000000e-01 1.029714766331e+00 1.173336588537e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +2.625000000000e-01 1.012500000000e+00 5.625000000000e-01 1.045974426074e+00 1.187631571658e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +3.375000000000e-01 1.012500000000e+00 5.625000000000e-01 1.067268710307e+00 1.206428095661e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.125000000000e-01 1.012500000000e+00 5.625000000000e-01 1.093303480283e+00 1.229519723307e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.875000000000e-01 1.012500000000e+00 5.625000000000e-01 1.123749304783e+00 1.256669706009e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +5.625000000000e-01 1.012500000000e+00 5.625000000000e-01 1.158258390861e+00 1.287621353504e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +6.375000000000e-01 1.012500000000e+00 5.625000000000e-01 1.196479210016e+00 1.322107692285e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.125000000000e-01 1.012500000000e+00 5.625000000000e-01 1.238068051441e+00 1.359859827335e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.875000000000e-01 1.012500000000e+00 5.625000000000e-01 1.282697353237e+00 1.400613704774e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 1.012500000000e+00 5.625000000000e-01 1.330061088823e+00 1.444115213548e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 1.012500000000e+00 5.625000000000e-01 1.379877711973e+00 1.490123736473e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 1.012500000000e+00 5.625000000000e-01 1.431891231903e+00 1.538414362257e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 1.012500000000e+00 5.625000000000e-01 1.485870956712e+00 1.588779012324e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 1.012500000000e+00 5.625000000000e-01 1.541610359332e+00 1.641026736528e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750000000000e-02 1.087500000000e+00 5.625000000000e-01 1.088146359641e+00 1.224936222830e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.125000000000e-01 1.087500000000e+00 5.625000000000e-01 1.093303480283e+00 1.229519723307e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.875000000000e-01 1.087500000000e+00 5.625000000000e-01 1.103545422717e+00 1.238635842369e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +2.625000000000e-01 1.087500000000e+00 5.625000000000e-01 1.118732541763e+00 1.252185589280e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +3.375000000000e-01 1.087500000000e+00 5.625000000000e-01 1.138666983802e+00 1.270027066641e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.125000000000e-01 1.087500000000e+00 5.625000000000e-01 1.163104681445e+00 1.291982488271e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.875000000000e-01 1.087500000000e+00 5.625000000000e-01 1.191768643655e+00 1.317846254310e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +5.625000000000e-01 1.087500000000e+00 5.625000000000e-01 1.224362078799e+00 1.347393316742e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +6.375000000000e-01 1.087500000000e+00 5.625000000000e-01 1.260580223548e+00 1.380387173948e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.125000000000e-01 1.087500000000e+00 5.625000000000e-01 1.300120186752e+00 1.416587007564e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.875000000000e-01 1.087500000000e+00 5.625000000000e-01 1.342688534248e+00 1.455753670784e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 1.087500000000e+00 5.625000000000e-01 1.388006664249e+00 1.497654416079e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 1.087500000000e+00 5.625000000000e-01 1.435814228931e+00 1.542066389621e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 1.087500000000e+00 5.625000000000e-01 1.485870956712e+00 1.588779012324e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 1.087500000000e+00 5.625000000000e-01 1.537957249081e+00 1.637595417067e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 1.087500000000e+00 5.625000000000e-01 1.591873895759e+00 1.688333127674e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750000000000e-02 1.162500000000e+00 5.625000000000e-01 1.163104681445e+00 1.291982488271e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.125000000000e-01 1.162500000000e+00 5.625000000000e-01 1.167930862680e+00 1.296328951308e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.875000000000e-01 1.162500000000e+00 5.625000000000e-01 1.177523885108e+00 1.304978448098e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +2.625000000000e-01 1.162500000000e+00 5.625000000000e-01 1.191768643655e+00 1.317846254310e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.375000000000e-01 1.162500000000e+00 5.625000000000e-01 1.210500929368e+00 1.334810379792e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +4.125000000000e-01 1.162500000000e+00 5.625000000000e-01 1.233516315255e+00 1.355717061189e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +4.875000000000e-01 1.162500000000e+00 5.625000000000e-01 1.260580223548e+00 1.380387173948e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +5.625000000000e-01 1.162500000000e+00 5.625000000000e-01 1.291438151829e+00 1.408622997825e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +6.375000000000e-01 1.162500000000e+00 5.625000000000e-01 1.325825214725e+00 1.440214827725e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +7.125000000000e-01 1.162500000000e+00 5.625000000000e-01 1.363474422202e+00 1.474947032947e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +7.875000000000e-01 1.162500000000e+00 5.625000000000e-01 1.404123392014e+00 1.512603302257e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +8.625000000000e-01 1.162500000000e+00 5.625000000000e-01 1.447519429921e+00 1.552970943064e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +9.375000000000e-01 1.162500000000e+00 5.625000000000e-01 1.493423081381e+00 1.595844212322e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.012500000000e+00 1.162500000000e+00 5.625000000000e-01 1.541610359332e+00 1.641026736528e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.087500000000e+00 1.162500000000e+00 5.625000000000e-01 1.591873895759e+00 1.688333127674e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.162500000000e+00 1.162500000000e+00 5.625000000000e-01 1.644023266259e+00 1.737589925731e+00 9.999999999976e-01 6.666666666640e-15 9.999999999984e-15 1.054092553389e-07 4.218750000010e-04 4.218750000000e-04 +4.210039745389e-02 4.210039745389e-02 7.440808850441e-01 5.953895306059e-02 7.464591418286e-01 2.424554873156e+00 8.166504832773e-02 5.052373689203e-02 2.369335042487e-01 1.740010113489e-04 4.218750000000e-04 +1.256200074540e-01 4.186955793615e-02 7.384639956202e-01 1.324139197913e-01 7.502416403945e-01 2.507811435527e+00 8.202572059914e-02 4.906213408061e-02 2.334812247522e-01 1.682243704704e-04 4.218750000000e-04 +2.071354663353e-01 4.141271943991e-02 7.273349024846e-01 2.112347384910e-01 7.573877310319e-01 2.698142302634e+00 8.347627423107e-02 4.640763803465e-02 2.270771724783e-01 1.563575796533e-04 4.218750000000e-04 +2.854553980787e-01 4.075020635208e-02 7.112162275495e-01 2.883493776827e-01 7.674463407560e-01 2.915324375055e+00 8.301693616749e-02 4.271408194462e-02 2.178533705261e-01 1.447094544984e-04 4.218750000000e-04 +3.597393766194e-01 3.993096897254e-02 6.915076031792e-01 3.619487551762e-01 7.805060324099e-01 2.813321233438e+00 6.626973211795e-02 3.533353994398e-02 1.981400737525e-01 1.499562136687e-04 4.218750000000e-04 +4.300716862624e-01 3.905568941958e-02 6.709987813268e-01 4.318414086220e-01 7.979513561256e-01 2.209199968700e+00 3.209784976778e-02 2.179376033578e-02 1.556126256509e-01 1.909627946664e-04 4.218750000000e-04 +4.981156783101e-01 3.828380869224e-02 6.537006292023e-01 4.995847065177e-01 8.227450343854e-01 1.577187787922e+00 8.285077009071e-03 7.879604197279e-03 9.356877563992e-02 2.674855862001e-04 4.218750000000e-04 +5.668623169978e-01 3.777266014672e-02 6.428822216772e-01 5.681194067154e-01 8.579377665282e-01 1.203801115032e+00 9.675869812686e-04 1.205664668174e-03 3.660092087752e-02 3.504524084019e-04 4.218750000000e-04 +6.384977408779e-01 3.755278979645e-02 6.384977408779e-01 6.396011078224e-01 9.037526997104e-01 1.045446311394e+00 2.588080600519e-05 3.713362282185e-05 6.423362119106e-03 4.035357869670e-04 4.218750000000e-04 +7.125804887170e-01 3.750345727864e-02 6.375653742222e-01 7.135667188203e-01 9.569049423088e-01 1.003593053850e+00 2.960353258489e-08 4.424631946879e-08 2.217263565469e-04 4.203646073290e-04 4.218750000000e-04 +7.875012392764e-01 3.750004106526e-02 6.375008302832e-01 7.883935913881e-01 1.013889423731e+00 1.000053345394e+00 2.331979512473e-13 3.497782678114e-13 6.234119984332e-07 4.218524961123e-04 4.218750000000e-04 +8.625000013631e-01 3.750000003292e-02 6.375000007617e-01 8.633148338548e-01 1.073181603143e+00 1.000000055663e+00 6.666668566464e-15 1.000000229306e-14 1.054092674245e-07 4.218749765171e-04 4.218750000000e-04 +9.375000000000e-01 3.750000000000e-02 6.375000000000e-01 9.382497002398e-01 1.134336259669e+00 1.000000000001e+00 6.666666666674e-15 1.000000000000e-14 1.054092553390e-07 4.218749999997e-04 4.218750000000e-04 +1.012500000000e+00 3.750000000000e-02 6.375000000000e-01 1.013194206458e+00 1.197066727463e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 3.750000000000e-02 6.375000000000e-01 1.088146359641e+00 1.261137879060e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 3.750000000000e-02 6.375000000000e-01 1.163104681445e+00 1.326355438787e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +4.186955793615e-02 1.256200074540e-01 7.384639956202e-01 1.324139197913e-01 7.502416403945e-01 2.507811435527e+00 8.202572059914e-02 4.906213408061e-02 2.334812247522e-01 1.682243704704e-04 4.218750000000e-04 +1.249362321867e-01 1.249362321867e-01 7.329074184128e-01 1.766865139903e-01 7.539041107400e-01 2.601717733500e+00 8.285507026493e-02 4.776944239459e-02 2.303848046556e-01 1.621524866314e-04 4.218750000000e-04 +2.060305930202e-01 1.235898070358e-01 7.219464675608e-01 2.402562083763e-01 7.608743310737e-01 2.788770873171e+00 8.435064586789e-02 4.536979714578e-02 2.245236863174e-01 1.512763217870e-04 4.218750000000e-04 +2.839907188670e-01 1.216438835878e-01 7.061916470317e-01 3.089465371499e-01 7.708142481521e-01 2.938291270583e+00 8.086782316446e-02 4.128308720143e-02 2.141730536050e-01 1.435783457629e-04 4.218750000000e-04 +3.580608828827e-01 1.192548679406e-01 6.871639170439e-01 3.773980913814e-01 7.839793162230e-01 2.712780625828e+00 5.948151986467e-02 3.288960373263e-02 1.911648611732e-01 1.555138649928e-04 4.218750000000e-04 +4.284489960969e-01 1.167411214037e-01 6.677280306509e-01 4.440687240541e-01 8.019088193803e-01 2.083750656572e+00 2.659079717296e-02 1.914153962406e-02 1.458368175739e-01 2.024594443051e-04 4.218750000000e-04 +4.968789176846e-01 1.145791597245e-01 6.517391953554e-01 5.099186628106e-01 8.275149675052e-01 1.505743325274e+00 6.483992355518e-03 6.459260599085e-03 8.471691815220e-02 2.801772340072e-04 4.218750000000e-04 +5.662081734256e-01 1.131961292620e-01 6.420606789279e-01 5.774123823870e-01 8.635085261648e-01 1.174908623356e+00 6.995460609376e-04 8.931069791702e-04 3.150144580756e-02 3.590704771534e-04 4.218750000000e-04 +6.383048175242e-01 1.126277464877e-01 6.383048175242e-01 6.481651404955e-01 9.096983507889e-01 1.037280136724e+00 1.633802546914e-05 2.362624843190e-05 5.123610752834e-03 4.067126951187e-04 4.218750000000e-04 +7.125615369358e-01 1.125079255367e-01 6.375500627064e-01 7.213889223081e-01 9.627419486476e-01 1.002800752351e+00 1.647314415507e-08 2.464070372373e-08 1.654646780828e-04 4.206967326372e-04 4.218750000000e-04 +7.875008893743e-01 1.125000885026e-01 6.375005964975e-01 7.954960217867e-01 1.019421861259e+00 1.000038945031e+00 1.167838064920e-13 1.751688877803e-13 4.411712791351e-07 4.218585707049e-04 4.218750000000e-04 +8.625000009101e-01 1.125000000665e-01 6.375000005087e-01 8.698060137668e-01 1.078410289377e+00 1.000000037743e+00 6.666667685683e-15 1.000000115110e-14 1.054092614058e-07 4.218749840773e-04 4.218750000000e-04 +9.375000000000e-01 1.125000000000e-01 6.375000000000e-01 9.442258734011e-01 1.139284314822e+00 1.000000000000e+00 6.666666666671e-15 1.000000000000e-14 1.054092553390e-07 4.218749999998e-04 4.218750000000e-04 +1.012500000000e+00 1.125000000000e-01 6.375000000000e-01 1.018730828040e+00 1.201756526922e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 1.125000000000e-01 6.375000000000e-01 1.093303480283e+00 1.265590277301e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 1.125000000000e-01 6.375000000000e-01 1.167930862680e+00 1.330589624941e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +4.141271943991e-02 2.071354663353e-01 7.273349024846e-01 2.112347384910e-01 7.573877310319e-01 2.698142302634e+00 8.347627423107e-02 4.640763803465e-02 2.270771724783e-01 1.563575796533e-04 4.218750000000e-04 +1.235898070358e-01 2.060305930202e-01 7.219464675608e-01 2.402562083763e-01 7.608743310737e-01 2.788770873171e+00 8.435064586789e-02 4.536979714578e-02 2.245236863174e-01 1.512763217870e-04 4.218750000000e-04 +2.038619642450e-01 2.038619642450e-01 7.114117472899e-01 2.883043546873e-01 7.676106272804e-01 2.918467008610e+00 8.323761738407e-02 4.278151019276e-02 2.180252538705e-01 1.445536299555e-04 4.218750000000e-04 +2.811498886857e-01 2.007625490502e-01 6.965155723329e-01 3.454719395394e-01 7.774862079235e-01 2.885717381705e+00 7.219861895645e-02 3.752894483752e-02 2.042029079059e-01 1.461941500837e-04 4.218750000000e-04 +3.548694817475e-01 1.970399943130e-01 6.789894969509e-01 4.059028312720e-01 7.910650070659e-01 2.470845373904e+00 4.508816531075e-02 2.737210862340e-02 1.743945355394e-01 1.707411578465e-04 4.218750000000e-04 +4.254503370901e-01 1.932559234890e-01 6.617658374297e-01 4.672856099793e-01 8.101171920671e-01 1.857827753986e+00 1.751470134039e-02 1.414127437499e-02 1.253496193984e-01 2.270797166717e-04 4.218750000000e-04 +4.946948619777e-01 1.901645402908e-01 6.483178810461e-01 5.299863760995e-01 8.373778321255e-01 1.385213175220e+00 3.798155800202e-03 4.112893092716e-03 6.760089654826e-02 3.045560117005e-04 4.218750000000e-04 +5.651272718548e-01 1.883239949981e-01 6.407131371607e-01 5.956800823312e-01 8.748417483273e-01 1.127089160637e+00 3.497077074428e-04 4.654126572097e-04 2.274038642322e-02 3.743049039364e-04 4.218750000000e-04 +6.380130794248e-01 1.876358409602e-01 6.380130794248e-01 6.650322536013e-01 9.215902494315e-01 1.024650939317e+00 6.124015455340e-06 8.965026850152e-06 3.156127523503e-03 4.117255777673e-04 4.218750000000e-04 +7.125352512003e-01 1.875075656036e-01 6.375287644859e-01 7.367941173500e-01 9.743246363038e-01 1.001667392320e+00 4.599765542496e-09 6.888163043588e-09 8.748436713422e-05 4.211727398083e-04 4.218750000000e-04 +7.875004494282e-01 1.875000748037e-01 6.375003020690e-01 8.095141974672e-01 1.030397918786e+00 1.000020345453e+00 2.816443910373e-14 4.224579914568e-14 2.166558949776e-07 4.218664169367e-04 4.218750000000e-04 +8.625000003965e-01 1.875000000491e-01 6.375000002218e-01 8.826451725934e-01 1.088792336024e+00 1.000000016937e+00 6.666666964132e-15 1.000000027683e-14 1.054092567980e-07 4.218749928547e-04 4.218750000000e-04 +9.375000000000e-01 1.875000000000e-01 6.375000000000e-01 9.560661587987e-01 1.149116508453e+00 1.000000000000e+00 6.666666666668e-15 1.000000000000e-14 1.054092553390e-07 4.218749999999e-04 4.218750000000e-04 +1.012500000000e+00 1.875000000000e-01 6.375000000000e-01 1.029714766331e+00 1.211081644647e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 1.875000000000e-01 6.375000000000e-01 1.103545422717e+00 1.274448410097e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 1.875000000000e-01 6.375000000000e-01 1.177523885108e+00 1.339017830352e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +4.075020635208e-02 2.854553980787e-01 7.112162275495e-01 2.883493776827e-01 7.674463407560e-01 2.915324375055e+00 8.301693616749e-02 4.271408194462e-02 2.178533705261e-01 1.447094544984e-04 4.218750000000e-04 +1.216438835878e-01 2.839907188670e-01 7.061916470317e-01 3.089465371499e-01 7.708142481521e-01 2.938291270583e+00 8.086782316446e-02 4.128308720143e-02 2.141730536050e-01 1.435783457629e-04 4.218750000000e-04 +2.007625490502e-01 2.811498886857e-01 6.965155723329e-01 3.454719395394e-01 7.774862079235e-01 2.885717381705e+00 7.219861895645e-02 3.752894483752e-02 2.042029079059e-01 1.461941500837e-04 4.218750000000e-04 +2.771830646688e-01 2.771830646688e-01 6.832001322498e-01 3.919960493148e-01 7.876695521502e-01 2.597449676226e+00 5.207184323687e-02 3.007094442299e-02 1.827899353630e-01 1.624189311005e-04 4.218750000000e-04 +3.505801642747e-01 2.726025399100e-01 6.682033330669e-01 4.440930041649e-01 8.023180732540e-01 2.087772894383e+00 2.656826632129e-02 1.908847441652e-02 1.456345289358e-01 2.020693922864e-04 4.218750000000e-04 +4.216382827073e-01 2.682129391096e-01 6.543442903260e-01 4.997169420284e-01 8.233367916184e-01 1.587931454621e+00 8.739906031128e-03 8.255935108875e-03 9.577714357864e-02 2.656758254724e-04 4.218750000000e-04 +4.921326232838e-01 2.649129818624e-01 6.443756334852e-01 5.589037545584e-01 8.529908345867e-01 1.250548242142e+00 1.612937440684e-03 1.934676391917e-03 4.636421503124e-02 3.373520395161e-04 4.218750000000e-04 +5.639952687011e-01 2.631591386351e-01 6.393158522766e-01 6.223691793175e-01 8.922265151499e-01 1.075974914480e+00 1.101315605464e-04 1.535327065682e-04 1.306108327004e-02 3.920862785205e-04 4.218750000000e-04 +6.377493596282e-01 2.625926384571e-01 6.377493596282e-01 6.896949611807e-01 9.393632871175e-01 1.012705914856e+00 1.186823892428e-06 1.757900109525e-06 1.397577312322e-03 4.165819452729e-04 4.218750000000e-04 +7.125145564077e-01 2.625043805712e-01 6.375119256287e-01 7.593323007168e-01 9.914670938719e-01 1.000728004900e+00 5.293133740334e-10 7.933924674462e-10 2.969086031174e-05 4.215680963601e-04 4.218750000000e-04 +7.875001535907e-01 2.625000361066e-01 6.375001035585e-01 8.300980429210e-01 1.046646617965e+00 1.000007288283e+00 7.999074632138e-15 1.199852449957e-14 1.154629546149e-07 4.218719252780e-04 4.218750000000e-04 +8.625000001070e-01 2.625000000191e-01 6.375000000599e-01 9.015611461208e-01 1.104182389948e+00 1.000000004766e+00 6.666666726826e-15 1.000000004258e-14 1.054092555634e-07 4.218749979894e-04 4.218750000000e-04 +9.375000000000e-01 2.625000000000e-01 6.375000000000e-01 9.735566239310e-01 1.163709048689e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 2.625000000000e-01 6.375000000000e-01 1.045974426074e+00 1.224936222830e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 2.625000000000e-01 6.375000000000e-01 1.118732541763e+00 1.287621353504e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 2.625000000000e-01 6.375000000000e-01 1.191768643655e+00 1.351561596821e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.993096897254e-02 3.597393766194e-01 6.915076031792e-01 3.619487551762e-01 7.805060324099e-01 2.813321233438e+00 6.626973211795e-02 3.533353994398e-02 1.981400737525e-01 1.499562136687e-04 4.218750000000e-04 +1.192548679406e-01 3.580608828827e-01 6.871639170439e-01 3.773980913814e-01 7.839793162230e-01 2.712780625828e+00 5.948151986467e-02 3.288960373263e-02 1.911648611732e-01 1.555138649928e-04 4.218750000000e-04 +1.970399943130e-01 3.548694817475e-01 6.789894969509e-01 4.059028312720e-01 7.910650070659e-01 2.470845373904e+00 4.508816531075e-02 2.737210862340e-02 1.743945355394e-01 1.707411578465e-04 4.218750000000e-04 +2.726025399100e-01 3.505801642747e-01 6.682033330669e-01 4.440930041649e-01 8.023180732540e-01 2.087772894383e+00 2.656826632129e-02 1.908847441652e-02 1.456345289358e-01 2.020693922864e-04 4.218750000000e-04 +3.459171346805e-01 3.459171346805e-01 6.568041215502e-01 4.892007033224e-01 8.189682424957e-01 1.672092689195e+00 1.120233491950e-02 1.004938451549e-02 1.056692140360e-01 2.523035969993e-04 4.218750000000e-04 +4.178427365020e-01 3.418245763719e-01 6.471516224119e-01 5.398486764449e-01 8.427584564095e-01 1.341176708665e+00 3.049002488209e-03 3.410067967008e-03 6.155456447565e-02 3.145558652149e-04 4.218750000000e-04 +4.898755256181e-01 3.391021471216e-01 6.409747695987e-01 5.957921590471e-01 8.751096800082e-01 1.134548923648e+00 4.351874941751e-04 5.753663219419e-04 2.528430171606e-02 3.718438149352e-04 4.218750000000e-04 +5.631472384690e-01 3.378689849991e-01 6.382802394090e-01 6.567269320041e-01 9.158012487650e-01 1.035605346384e+00 1.819229290126e-05 2.635023027561e-05 5.410918003404e-03 4.073704345703e-04 4.218750000000e-04 +6.375878157310e-01 3.375420946241e-01 6.375878157310e-01 7.214242083628e-01 9.627933896639e-01 1.004845964824e+00 9.666735798155e-08 1.443017557400e-07 4.004188858627e-04 4.198404678611e-04 4.218750000000e-04 +7.125040896385e-01 3.375015905715e-01 6.375033663441e-01 7.883967284242e-01 1.013893457662e+00 1.000219007780e+00 1.956552722524e-11 2.934186474122e-11 5.709822408332e-06 4.217826263235e-04 4.218750000000e-04 +7.875000331613e-01 3.375000101992e-01 6.375000224540e-01 8.567745089074e-01 1.067927356023e+00 1.000001666308e+00 6.687610179886e-15 1.003139855443e-14 1.055746105549e-07 4.218742970275e-04 4.218750000000e-04 +8.625000000163e-01 3.375000000039e-01 6.375000000092e-01 9.261816776588e-01 1.124374826311e+00 1.000000000764e+00 6.666666675220e-15 1.000000000519e-14 1.054092553663e-07 4.218749996777e-04 4.218750000000e-04 +9.375000000000e-01 3.375000000000e-01 6.375000000000e-01 9.963997691690e-01 1.182885772169e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 3.375000000000e-01 6.375000000000e-01 1.067268710307e+00 1.243168834069e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 3.375000000000e-01 6.375000000000e-01 1.138666983802e+00 1.304978448098e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 3.375000000000e-01 6.375000000000e-01 1.210500929368e+00 1.368107726022e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.905568941958e-02 4.300716862624e-01 6.709987813268e-01 4.318414086220e-01 7.979513561256e-01 2.209199968700e+00 3.209784976778e-02 2.179376033578e-02 1.556126256509e-01 1.909627946664e-04 4.218750000000e-04 +1.167411214037e-01 4.284489960969e-01 6.677280306509e-01 4.440687240541e-01 8.019088193803e-01 2.083750656572e+00 2.659079717296e-02 1.914153962406e-02 1.458368175739e-01 2.024594443051e-04 4.218750000000e-04 +1.932559234890e-01 4.254503370901e-01 6.617658374297e-01 4.672856099793e-01 8.101171920671e-01 1.857827753986e+00 1.751470134039e-02 1.414127437499e-02 1.253496193984e-01 2.270797166717e-04 4.218750000000e-04 +2.682129391096e-01 4.216382827073e-01 6.543442903260e-01 4.997169420284e-01 8.233367916184e-01 1.587931454621e+00 8.739906031128e-03 8.255935108875e-03 9.577714357864e-02 2.656758254724e-04 4.218750000000e-04 +3.418245763719e-01 4.178427365020e-01 6.471516224119e-01 5.398486764449e-01 8.427584564095e-01 1.341176708665e+00 3.049002488209e-03 3.410067967008e-03 6.155456447565e-02 3.145558652149e-04 4.218750000000e-04 +4.149032134351e-01 4.149032134351e-01 6.417476847768e-01 5.867617515121e-01 8.695570389307e-01 1.160557244481e+00 6.518099022288e-04 8.424529319798e-04 3.059507825306e-02 3.635107203943e-04 4.218750000000e-04 +4.883984850792e-01 4.132483100276e-01 6.387954532056e-01 6.397712450308e-01 9.040834458193e-01 1.055856357010e+00 5.802050259778e-05 8.242669878236e-05 9.570016764316e-03 3.995571908994e-04 4.218750000000e-04 +5.626974803116e-01 4.126388821575e-01 6.377365285824e-01 6.977817004029e-01 9.453079822500e-01 1.012088323355e+00 1.143825601599e-06 1.695245723922e-06 1.372445394146e-03 4.168361498348e-04 4.218750000000e-04 +6.375207932947e-01 4.125122593083e-01 6.375207932947e-01 7.593412447396e-01 9.914796457042e-01 1.001259072207e+00 2.453583708557e-09 3.675747531279e-09 6.390746375537e-05 4.213444968545e-04 4.218750000000e-04 +7.125007174457e-01 4.125003453857e-01 6.375005936328e-01 8.232944839509e-01 1.041259244466e+00 1.000041412335e+00 1.829758423436e-13 2.744523978008e-13 5.522201632207e-07 4.218575298946e-04 4.218750000000e-04 +7.875000040525e-01 4.125000015674e-01 6.375000027585e-01 8.889952236519e-01 1.093946416052e+00 1.000000216725e+00 6.666743038437e-15 1.000011239038e-14 1.054098476866e-07 4.218749085691e-04 4.218750000000e-04 +8.625000000012e-01 4.125000000004e-01 6.375000000007e-01 9.560661587999e-01 1.149116508455e+00 1.000000000060e+00 6.666666667332e-15 1.000000000040e-14 1.054092553410e-07 4.218749999748e-04 4.218750000000e-04 +9.375000000000e-01 4.125000000000e-01 6.375000000000e-01 1.024237521281e+00 1.206428095661e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 4.125000000000e-01 6.375000000000e-01 1.093303480283e+00 1.265590277301e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 4.125000000000e-01 6.375000000000e-01 1.163104681445e+00 1.326355438787e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 4.125000000000e-01 6.375000000000e-01 1.233516315255e+00 1.388513143618e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.828380869224e-02 4.981156783101e-01 6.537006292023e-01 4.995847065177e-01 8.227450343854e-01 1.577187787922e+00 8.285077009071e-03 7.879604197279e-03 9.356877563992e-02 2.674855862001e-04 4.218750000000e-04 +1.145791597245e-01 4.968789176846e-01 6.517391953554e-01 5.099186628106e-01 8.275149675052e-01 1.505743325274e+00 6.483992355518e-03 6.459260599085e-03 8.471691815220e-02 2.801772340072e-04 4.218750000000e-04 +1.901645402908e-01 4.946948619777e-01 6.483178810461e-01 5.299863760995e-01 8.373778321255e-01 1.385213175220e+00 3.798155800202e-03 4.112893092716e-03 6.760089654826e-02 3.045560117005e-04 4.218750000000e-04 +2.649129818624e-01 4.921326232838e-01 6.443756334852e-01 5.589037545584e-01 8.529908345867e-01 1.250548242142e+00 1.612937440684e-03 1.934676391917e-03 4.636421503124e-02 3.373520395161e-04 4.218750000000e-04 +3.391021471216e-01 4.898755256181e-01 6.409747695987e-01 5.957921590471e-01 8.751096800082e-01 1.134548923648e+00 4.351874941751e-04 5.753663219419e-04 2.528430171606e-02 3.718438149352e-04 4.218750000000e-04 +4.132483100276e-01 4.883984850792e-01 6.387954532056e-01 6.397712450308e-01 9.040834458193e-01 1.055856357010e+00 5.802050259778e-05 8.242669878236e-05 9.570016764316e-03 3.995571908994e-04 4.218750000000e-04 +4.877254246166e-01 4.877254246166e-01 6.378209986291e-01 6.897479102070e-01 9.394508001631e-01 1.015968243426e+00 2.406236583702e-06 3.552625683831e-06 1.986796887184e-03 4.152442782829e-04 4.218750000000e-04 +5.625383598273e-01 4.875323619092e-01 6.375457547436e-01 7.444039294536e-01 9.801029535603e-01 1.002651673294e+00 1.866557815350e-08 2.792432105386e-08 1.761448931794e-04 4.207592838439e-04 4.218750000000e-04 +6.375029589416e-01 4.875020892685e-01 6.375029589416e-01 8.025386655485e-01 1.024928452312e+00 1.000197198698e+00 1.383288204930e-11 2.074523214118e-11 4.801068415951e-06 4.217918232016e-04 4.218750000000e-04 +7.125000684546e-01 4.875000399757e-01 6.375000569424e-01 8.633149115613e-01 1.073181699027e+00 1.000004262814e+00 6.936105406389e-15 1.040411375878e-14 1.075180282494e-07 4.218732016329e-04 4.218750000000e-04 +7.875000002337e-01 4.875000001111e-01 6.375000001600e-01 9.261816778993e-01 1.124374826595e+00 1.000000013287e+00 6.666666879329e-15 1.000000018612e-14 1.054092563199e-07 4.218749943945e-04 4.218750000000e-04 +8.625000000000e-01 4.875000000000e-01 6.375000000000e-01 9.907383610218e-01 1.178120855430e+00 1.000000000002e+00 6.666666666687e-15 1.000000000001e-14 1.054092553390e-07 4.218749999992e-04 4.218750000000e-04 +9.375000000000e-01 4.875000000000e-01 6.375000000000e-01 1.056675210270e+00 1.234086200393e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 4.875000000000e-01 6.375000000000e-01 1.123749304783e+00 1.291982488271e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 4.875000000000e-01 6.375000000000e-01 1.191768643655e+00 1.351561596821e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 4.875000000000e-01 6.375000000000e-01 1.260580223548e+00 1.412610615138e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.777266014672e-02 5.668623169978e-01 6.428822216772e-01 5.681194067154e-01 8.579377665282e-01 1.203801115032e+00 9.675869812686e-04 1.205664668174e-03 3.660092087752e-02 3.504524084019e-04 4.218750000000e-04 +1.131961292620e-01 5.662081734256e-01 6.420606789279e-01 5.774123823870e-01 8.635085261648e-01 1.174908623356e+00 6.995460609376e-04 8.931069791702e-04 3.150144580756e-02 3.590704771534e-04 4.218750000000e-04 +1.883239949981e-01 5.651272718548e-01 6.407131371607e-01 5.956800823312e-01 8.748417483273e-01 1.127089160637e+00 3.497077074428e-04 4.654126572097e-04 2.274038642322e-02 3.743049039364e-04 4.218750000000e-04 +2.631591386351e-01 5.639952687011e-01 6.393158522766e-01 6.223691793175e-01 8.922265151499e-01 1.075974914480e+00 1.101315605464e-04 1.535327065682e-04 1.306108327004e-02 3.920862785205e-04 4.218750000000e-04 +3.378689849991e-01 5.631472384690e-01 6.382802394090e-01 6.567269320041e-01 9.158012487650e-01 1.035605346384e+00 1.819229290126e-05 2.635023027561e-05 5.410918003404e-03 4.073704345703e-04 4.218750000000e-04 +4.126388821575e-01 5.626974803116e-01 6.377365285824e-01 6.977817004029e-01 9.453079822500e-01 1.012088323355e+00 1.143825601599e-06 1.695245723922e-06 1.372445394146e-03 4.168361498348e-04 4.218750000000e-04 +4.875323619092e-01 5.625383598273e-01 6.375457547436e-01 7.444039294536e-01 9.801029535603e-01 1.002651673294e+00 1.866557815350e-08 2.792432105386e-08 1.761448931794e-04 4.207592838439e-04 4.218750000000e-04 +5.625040583112e-01 5.625040583112e-01 6.375048356109e-01 7.955008681537e-01 1.019428294026e+00 1.000316771440e+00 5.118720017822e-11 7.675648600470e-11 9.234986976150e-06 4.217414043679e-04 4.218750000000e-04 +6.375002091061e-01 5.625001755427e-01 6.375002091061e-01 8.501840765951e-01 1.062647392462e+00 1.000015261254e+00 1.652225770154e-14 2.478300833254e-14 1.659417847471e-07 4.218685617569e-04 4.218750000000e-04 +7.125000027980e-01 5.625000019642e-01 6.375000023372e-01 9.077788861815e-01 1.109264963468e+00 1.000000186873e+00 6.666712199408e-15 1.000006643037e-14 1.054096054572e-07 4.218749211630e-04 4.218750000000e-04 +7.875000000046e-01 5.625000000027e-01 6.375000000032e-01 9.677615925476e-01 1.158865285533e+00 1.000000000279e+00 6.666666669775e-15 1.000000000187e-14 1.054092553488e-07 4.218749998821e-04 4.218750000000e-04 +8.625000000000e-01 5.625000000000e-01 6.375000000000e-01 1.029714766331e+00 1.211081644647e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 5.625000000000e-01 6.375000000000e-01 1.093303480283e+00 1.265590277301e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 5.625000000000e-01 6.375000000000e-01 1.158258390861e+00 1.322107692285e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 5.625000000000e-01 6.375000000000e-01 1.224362078799e+00 1.380387173948e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 5.625000000000e-01 6.375000000000e-01 1.291438151829e+00 1.440214827725e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.755278979645e-02 6.384977408779e-01 6.384977408779e-01 6.396011078224e-01 9.037526997104e-01 1.045446311394e+00 2.588080600519e-05 3.713362282185e-05 6.423362119106e-03 4.035357869670e-04 4.218750000000e-04 +1.126277464877e-01 6.383048175242e-01 6.383048175242e-01 6.481651404955e-01 9.096983507889e-01 1.037280136724e+00 1.633802546914e-05 2.362624843190e-05 5.123610752834e-03 4.067126951187e-04 4.218750000000e-04 +1.876358409602e-01 6.380130794248e-01 6.380130794248e-01 6.650322536013e-01 9.215902494315e-01 1.024650939317e+00 6.124015455340e-06 8.965026850152e-06 3.156127523503e-03 4.117255777673e-04 4.218750000000e-04 +2.625926384571e-01 6.377493596282e-01 6.377493596282e-01 6.896949611807e-01 9.393632871175e-01 1.012705914856e+00 1.186823892428e-06 1.757900109525e-06 1.397577312322e-03 4.165819452729e-04 4.218750000000e-04 +3.375420946241e-01 6.375878157310e-01 6.375878157310e-01 7.214242083628e-01 9.627933896639e-01 1.004845964824e+00 9.666735798155e-08 1.443017557400e-07 4.004188858627e-04 4.198404678611e-04 4.218750000000e-04 +4.125122593083e-01 6.375207932947e-01 6.375207932947e-01 7.593412447396e-01 9.914796457042e-01 1.001259072207e+00 2.453583708557e-09 3.675747531279e-09 6.390746375537e-05 4.213444968545e-04 4.218750000000e-04 +4.875020892685e-01 6.375029589416e-01 6.375029589416e-01 8.025386655485e-01 1.024928452312e+00 1.000197198698e+00 1.383288204930e-11 2.074523214118e-11 4.801068415951e-06 4.217918232016e-04 4.218750000000e-04 +5.625001755427e-01 6.375002091061e-01 6.375002091061e-01 8.501840765951e-01 1.062647392462e+00 1.000015261254e+00 1.652225770154e-14 2.478300833254e-14 1.659417847471e-07 4.218685617569e-04 4.218750000000e-04 +6.375000051805e-01 6.375000051805e-01 6.375000051805e-01 9.015611533392e-01 1.104182398798e+00 1.000000409017e+00 6.667021525669e-15 1.000052819811e-14 1.054120391507e-07 4.218748274459e-04 4.218750000000e-04 +7.125000000339e-01 6.375000000284e-01 6.375000000284e-01 9.560661588428e-01 1.149116508506e+00 1.000000002409e+00 6.666666694674e-15 1.000000001792e-14 1.054092554334e-07 4.218749989835e-04 4.218750000000e-04 +7.875000000000e-01 6.375000000000e-01 6.375000000000e-01 1.013194206458e+00 1.197066727463e+00 1.000000000001e+00 6.666666666682e-15 1.000000000001e-14 1.054092553390e-07 4.218749999994e-04 4.218750000000e-04 +8.625000000000e-01 6.375000000000e-01 6.375000000000e-01 1.072526223456e+00 1.247685356971e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 6.375000000000e-01 6.375000000000e-01 1.133716234337e+00 1.300660889702e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 6.375000000000e-01 6.375000000000e-01 1.196479210016e+00 1.355717061189e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 6.375000000000e-01 6.375000000000e-01 1.260580223548e+00 1.412610615138e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 6.375000000000e-01 6.375000000000e-01 1.325825214725e+00 1.471128393445e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750345727864e-02 7.125804887170e-01 6.375653742222e-01 7.135667188203e-01 9.569049423088e-01 1.003593053850e+00 2.960353258489e-08 4.424631946879e-08 2.217263565469e-04 4.203646073290e-04 4.218750000000e-04 +1.125079255367e-01 7.125615369358e-01 6.375500627064e-01 7.213889223081e-01 9.627419486476e-01 1.002800752351e+00 1.647314415507e-08 2.464070372373e-08 1.654646780828e-04 4.206967326372e-04 4.218750000000e-04 +1.875075656036e-01 7.125352512003e-01 6.375287644859e-01 7.367941173500e-01 9.743246363038e-01 1.001667392320e+00 4.599765542496e-09 6.888163043588e-09 8.748436713422e-05 4.211727398083e-04 4.218750000000e-04 +2.625043805712e-01 7.125145564077e-01 6.375119256287e-01 7.593323007168e-01 9.914670938719e-01 1.000728004900e+00 5.293133740334e-10 7.933924674462e-10 2.969086031174e-05 4.215680963601e-04 4.218750000000e-04 +3.375015905715e-01 7.125040896385e-01 6.375033663441e-01 7.883967284242e-01 1.013893457662e+00 1.000219007780e+00 1.956552722524e-11 2.934186474122e-11 5.709822408332e-06 4.217826263235e-04 4.218750000000e-04 +4.125003453857e-01 7.125007174457e-01 6.375005936328e-01 8.232944839509e-01 1.041259244466e+00 1.000041412335e+00 1.829758423436e-13 2.744523978008e-13 5.522201632207e-07 4.218575298946e-04 4.218750000000e-04 +4.875000399757e-01 7.125000684546e-01 6.375000569424e-01 8.633149115613e-01 1.073181699027e+00 1.000004262814e+00 6.936105406389e-15 1.040411375878e-14 1.075180282494e-07 4.218732016329e-04 4.218750000000e-04 +5.625000019642e-01 7.125000027980e-01 6.375000023372e-01 9.077788861815e-01 1.109264963468e+00 1.000000186873e+00 6.666712199408e-15 1.000006643037e-14 1.054096054572e-07 4.218749211630e-04 4.218750000000e-04 +6.375000000284e-01 7.125000000339e-01 6.375000000284e-01 9.560661588428e-01 1.149116508506e+00 1.000000002409e+00 6.666666694674e-15 1.000000001792e-14 1.054092554334e-07 4.218749989835e-04 4.218750000000e-04 +7.125000000001e-01 7.125000000001e-01 6.375000000001e-01 1.007627163191e+00 1.192358482169e+00 1.000000000005e+00 6.666666666725e-15 1.000000000004e-14 1.054092553391e-07 4.218749999978e-04 4.218750000000e-04 +7.875000000000e-01 7.125000000000e-01 6.375000000000e-01 1.061985169388e+00 1.238635842369e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 7.125000000000e-01 6.375000000000e-01 1.118732541763e+00 1.287621353504e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 7.125000000000e-01 6.375000000000e-01 1.177523885108e+00 1.339017830352e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 7.125000000000e-01 6.375000000000e-01 1.238068051441e+00 1.392558347072e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 7.125000000000e-01 6.375000000000e-01 1.300120186752e+00 1.448005093223e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 7.125000000000e-01 6.375000000000e-01 1.363474422202e+00 1.505147418029e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750004106526e-02 7.875012392764e-01 6.375008302832e-01 7.883935913881e-01 1.013889423731e+00 1.000053345394e+00 2.331979512473e-13 3.497782678114e-13 6.234119984332e-07 4.218524961123e-04 4.218750000000e-04 +1.125000885026e-01 7.875008893743e-01 6.375005964975e-01 7.954960217867e-01 1.019421861259e+00 1.000038945031e+00 1.167838064920e-13 1.751688877803e-13 4.411712791351e-07 4.218585707049e-04 4.218750000000e-04 +1.875000748037e-01 7.875004494282e-01 6.375003020690e-01 8.095141974672e-01 1.030397918786e+00 1.000020345453e+00 2.816443910373e-14 4.224579914568e-14 2.166558949776e-07 4.218664169367e-04 4.218750000000e-04 +2.625000361066e-01 7.875001535907e-01 6.375001035585e-01 8.300980429210e-01 1.046646617965e+00 1.000007288283e+00 7.999074632138e-15 1.199852449957e-14 1.154629546149e-07 4.218719252780e-04 4.218750000000e-04 +3.375000101992e-01 7.875000331613e-01 6.375000224540e-01 8.567745089074e-01 1.067927356023e+00 1.000001666308e+00 6.687610179886e-15 1.003139855443e-14 1.055746105549e-07 4.218742970275e-04 4.218750000000e-04 +4.125000015674e-01 7.875000040525e-01 6.375000027585e-01 8.889952236519e-01 1.093946416052e+00 1.000000216725e+00 6.666743038437e-15 1.000011239038e-14 1.054098476866e-07 4.218749085691e-04 4.218750000000e-04 +4.875000001111e-01 7.875000002337e-01 6.375000001600e-01 9.261816778993e-01 1.124374826595e+00 1.000000013287e+00 6.666666879329e-15 1.000000018612e-14 1.054092563199e-07 4.218749943945e-04 4.218750000000e-04 +5.625000000027e-01 7.875000000046e-01 6.375000000032e-01 9.677615925476e-01 1.158865285533e+00 1.000000000279e+00 6.666666669774e-15 1.000000000187e-14 1.054092553488e-07 4.218749998821e-04 4.218750000000e-04 +6.375000000000e-01 7.875000000000e-01 6.375000000000e-01 1.013194206458e+00 1.197066727463e+00 1.000000000001e+00 6.666666666682e-15 1.000000000001e-14 1.054092553390e-07 4.218749999994e-04 4.218750000000e-04 +7.125000000000e-01 7.875000000000e-01 6.375000000000e-01 1.061985169388e+00 1.238635842369e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.875000000000e-01 7.875000000000e-01 6.375000000000e-01 1.113693180369e+00 1.283245397420e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 7.875000000000e-01 6.375000000000e-01 1.167930862680e+00 1.330589624941e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 7.875000000000e-01 6.375000000000e-01 1.224362078799e+00 1.380387173948e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 7.875000000000e-01 6.375000000000e-01 1.282697353237e+00 1.432382194109e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 7.875000000000e-01 6.375000000000e-01 1.342688534248e+00 1.486344088695e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 7.875000000000e-01 6.375000000000e-01 1.404123392014e+00 1.542066389621e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750000003292e-02 8.625000013631e-01 6.375000007617e-01 8.633148338548e-01 1.073181603143e+00 1.000000055663e+00 6.666668566464e-15 1.000000229306e-14 1.054092674245e-07 4.218749765171e-04 4.218750000000e-04 +1.125000000665e-01 8.625000009101e-01 6.375000005087e-01 8.698060137668e-01 1.078410289377e+00 1.000000037743e+00 6.666667685683e-15 1.000000115110e-14 1.054092614058e-07 4.218749840773e-04 4.218750000000e-04 +1.875000000491e-01 8.625000003965e-01 6.375000002218e-01 8.826451725934e-01 1.088792336024e+00 1.000000016937e+00 6.666666964132e-15 1.000000027683e-14 1.054092567980e-07 4.218749928547e-04 4.218750000000e-04 +2.625000000191e-01 8.625000001070e-01 6.375000000599e-01 9.015611461208e-01 1.104182389948e+00 1.000000004766e+00 6.666666726826e-15 1.000000004258e-14 1.054092555634e-07 4.218749979894e-04 4.218750000000e-04 +3.375000000039e-01 8.625000000163e-01 6.375000000092e-01 9.261816776588e-01 1.124374826311e+00 1.000000000764e+00 6.666666675220e-15 1.000000000519e-14 1.054092553663e-07 4.218749996776e-04 4.218750000000e-04 +4.125000000004e-01 8.625000000012e-01 6.375000000007e-01 9.560661587999e-01 1.149116508455e+00 1.000000000060e+00 6.666666667332e-15 1.000000000040e-14 1.054092553410e-07 4.218749999748e-04 4.218750000000e-04 +4.875000000000e-01 8.625000000000e-01 6.375000000000e-01 9.907383610218e-01 1.178120855430e+00 1.000000000002e+00 6.666666666686e-15 1.000000000001e-14 1.054092553390e-07 4.218749999993e-04 4.218750000000e-04 +5.625000000000e-01 8.625000000000e-01 6.375000000000e-01 1.029714766331e+00 1.211081644647e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +6.375000000000e-01 8.625000000000e-01 6.375000000000e-01 1.072526223456e+00 1.247685356971e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.125000000000e-01 8.625000000000e-01 6.375000000000e-01 1.118732541763e+00 1.287621353504e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.875000000000e-01 8.625000000000e-01 6.375000000000e-01 1.167930862680e+00 1.330589624941e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 8.625000000000e-01 6.375000000000e-01 1.219759197547e+00 1.376306197763e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 8.625000000000e-01 6.375000000000e-01 1.273896581360e+00 1.424506493492e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 8.625000000000e-01 6.375000000000e-01 1.330061088823e+00 1.474947032947e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 8.625000000000e-01 6.375000000000e-01 1.388006664249e+00 1.527405889081e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 8.625000000000e-01 6.375000000000e-01 1.447519429921e+00 1.581682253172e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750000000000e-02 9.375000000000e-01 6.375000000000e-01 9.382497002398e-01 1.134336259669e+00 1.000000000001e+00 6.666666666674e-15 1.000000000000e-14 1.054092553390e-07 4.218749999997e-04 4.218750000000e-04 +1.125000000000e-01 9.375000000000e-01 6.375000000000e-01 9.442258734011e-01 1.139284314822e+00 1.000000000000e+00 6.666666666671e-15 1.000000000000e-14 1.054092553390e-07 4.218749999998e-04 4.218750000000e-04 +1.875000000000e-01 9.375000000000e-01 6.375000000000e-01 9.560661587987e-01 1.149116508453e+00 1.000000000000e+00 6.666666666669e-15 1.000000000000e-14 1.054092553390e-07 4.218749999999e-04 4.218750000000e-04 +2.625000000000e-01 9.375000000000e-01 6.375000000000e-01 9.735566239310e-01 1.163709048689e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +3.375000000000e-01 9.375000000000e-01 6.375000000000e-01 9.963997691690e-01 1.182885772169e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.125000000000e-01 9.375000000000e-01 6.375000000000e-01 1.024237521281e+00 1.206428095661e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.875000000000e-01 9.375000000000e-01 6.375000000000e-01 1.056675210270e+00 1.234086200393e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +5.625000000000e-01 9.375000000000e-01 6.375000000000e-01 1.093303480283e+00 1.265590277301e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +6.375000000000e-01 9.375000000000e-01 6.375000000000e-01 1.133716234337e+00 1.300660889702e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.125000000000e-01 9.375000000000e-01 6.375000000000e-01 1.177523885108e+00 1.339017830352e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.875000000000e-01 9.375000000000e-01 6.375000000000e-01 1.224362078799e+00 1.380387173948e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 9.375000000000e-01 6.375000000000e-01 1.273896581360e+00 1.424506493492e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 9.375000000000e-01 6.375000000000e-01 1.325825214725e+00 1.471128393445e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 9.375000000000e-01 6.375000000000e-01 1.379877711973e+00 1.520022614963e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 9.375000000000e-01 6.375000000000e-01 1.435814228931e+00 1.570977004924e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 9.375000000000e-01 6.375000000000e-01 1.493423081381e+00 1.623797632096e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750000000000e-02 1.012500000000e+00 6.375000000000e-01 1.013194206458e+00 1.197066727463e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.125000000000e-01 1.012500000000e+00 6.375000000000e-01 1.018730828040e+00 1.201756526922e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.875000000000e-01 1.012500000000e+00 6.375000000000e-01 1.029714766331e+00 1.211081644647e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +2.625000000000e-01 1.012500000000e+00 6.375000000000e-01 1.045974426074e+00 1.224936222830e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +3.375000000000e-01 1.012500000000e+00 6.375000000000e-01 1.067268710307e+00 1.243168834069e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.125000000000e-01 1.012500000000e+00 6.375000000000e-01 1.093303480283e+00 1.265590277301e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.875000000000e-01 1.012500000000e+00 6.375000000000e-01 1.123749304783e+00 1.291982488271e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +5.625000000000e-01 1.012500000000e+00 6.375000000000e-01 1.158258390861e+00 1.322107692285e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +6.375000000000e-01 1.012500000000e+00 6.375000000000e-01 1.196479210016e+00 1.355717061189e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.125000000000e-01 1.012500000000e+00 6.375000000000e-01 1.238068051441e+00 1.392558347072e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.875000000000e-01 1.012500000000e+00 6.375000000000e-01 1.282697353237e+00 1.432382194109e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 1.012500000000e+00 6.375000000000e-01 1.330061088823e+00 1.474947032947e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 1.012500000000e+00 6.375000000000e-01 1.379877711973e+00 1.520022614963e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 1.012500000000e+00 6.375000000000e-01 1.431891231903e+00 1.567392340800e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 1.012500000000e+00 6.375000000000e-01 1.485870956712e+00 1.616854585298e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 1.012500000000e+00 6.375000000000e-01 1.541610359332e+00 1.668223231465e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750000000000e-02 1.087500000000e+00 6.375000000000e-01 1.088146359641e+00 1.261137879060e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.125000000000e-01 1.087500000000e+00 6.375000000000e-01 1.093303480283e+00 1.265590277301e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.875000000000e-01 1.087500000000e+00 6.375000000000e-01 1.103545422717e+00 1.274448410097e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +2.625000000000e-01 1.087500000000e+00 6.375000000000e-01 1.118732541763e+00 1.287621353504e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +3.375000000000e-01 1.087500000000e+00 6.375000000000e-01 1.138666983802e+00 1.304978448098e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.125000000000e-01 1.087500000000e+00 6.375000000000e-01 1.163104681445e+00 1.326355438787e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.875000000000e-01 1.087500000000e+00 6.375000000000e-01 1.191768643655e+00 1.351561596821e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +5.625000000000e-01 1.087500000000e+00 6.375000000000e-01 1.224362078799e+00 1.380387173948e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +6.375000000000e-01 1.087500000000e+00 6.375000000000e-01 1.260580223548e+00 1.412610615138e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.125000000000e-01 1.087500000000e+00 6.375000000000e-01 1.300120186752e+00 1.448005093223e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.875000000000e-01 1.087500000000e+00 6.375000000000e-01 1.342688534248e+00 1.486344088695e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 1.087500000000e+00 6.375000000000e-01 1.388006664249e+00 1.527405889081e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 1.087500000000e+00 6.375000000000e-01 1.435814228931e+00 1.570977004924e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 1.087500000000e+00 6.375000000000e-01 1.485870956712e+00 1.616854585298e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 1.087500000000e+00 6.375000000000e-01 1.537957249081e+00 1.664847966032e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 1.087500000000e+00 6.375000000000e-01 1.591873895759e+00 1.714779504776e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750000000000e-02 1.162500000000e+00 6.375000000000e-01 1.163104681445e+00 1.326355438787e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.125000000000e-01 1.162500000000e+00 6.375000000000e-01 1.167930862680e+00 1.330589624941e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.875000000000e-01 1.162500000000e+00 6.375000000000e-01 1.177523885108e+00 1.339017830352e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +2.625000000000e-01 1.162500000000e+00 6.375000000000e-01 1.191768643655e+00 1.351561596821e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.375000000000e-01 1.162500000000e+00 6.375000000000e-01 1.210500929368e+00 1.368107726022e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +4.125000000000e-01 1.162500000000e+00 6.375000000000e-01 1.233516315255e+00 1.388513143618e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +4.875000000000e-01 1.162500000000e+00 6.375000000000e-01 1.260580223548e+00 1.412610615138e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +5.625000000000e-01 1.162500000000e+00 6.375000000000e-01 1.291438151829e+00 1.440214827725e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +6.375000000000e-01 1.162500000000e+00 6.375000000000e-01 1.325825214725e+00 1.471128393445e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +7.125000000000e-01 1.162500000000e+00 6.375000000000e-01 1.363474422202e+00 1.505147418029e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +7.875000000000e-01 1.162500000000e+00 6.375000000000e-01 1.404123392014e+00 1.542066389621e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +8.625000000000e-01 1.162500000000e+00 6.375000000000e-01 1.447519429921e+00 1.581682253172e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +9.375000000000e-01 1.162500000000e+00 6.375000000000e-01 1.493423081381e+00 1.623797632096e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.012500000000e+00 1.162500000000e+00 6.375000000000e-01 1.541610359332e+00 1.668223231465e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.087500000000e+00 1.162500000000e+00 6.375000000000e-01 1.591873895759e+00 1.714779504776e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.162500000000e+00 1.162500000000e+00 6.375000000000e-01 1.644023266259e+00 1.763297691826e+00 9.999999999976e-01 6.666666666640e-15 9.999999999984e-15 1.054092553389e-07 4.218750000010e-04 4.218750000000e-04 +3.960576492450e-02 3.960576492450e-02 7.672810291516e-01 5.601100990440e-02 7.693226962247e-01 3.119099760374e+00 8.971756034856e-02 4.314589171932e-02 2.189517748001e-01 1.352553725147e-04 4.218750000000e-04 +1.183239484904e-01 3.943674509720e-02 7.627706410319e-01 1.247229475687e-01 7.729002940034e-01 2.993948406346e+00 7.965239082298e-02 3.990669511246e-02 2.105724871563e-01 1.409092418245e-04 4.218750000000e-04 +1.956325809298e-01 3.911709259872e-02 7.542694714971e-01 1.995050216276e-01 7.802081063968e-01 2.655364825735e+00 5.706476336929e-02 3.223554979125e-02 1.892545311105e-01 1.588764737377e-04 4.218750000000e-04 +2.709557351650e-01 3.869519734009e-02 7.431086253506e-01 2.737048204106e-01 7.919120896832e-01 2.138716094527e+00 2.986801847413e-02 2.094809489948e-02 1.525636293466e-01 1.972561954714e-04 4.218750000000e-04 +3.443799375810e-01 3.825094752410e-02 7.314659404519e-01 3.464977292780e-01 8.093843947322e-01 1.644684811242e+00 1.063863261206e-02 9.702739886093e-03 1.038307377209e-01 2.565081145739e-04 4.218750000000e-04 +4.167483580164e-01 3.787627058304e-02 7.218042618608e-01 4.184660150868e-01 8.343351833784e-01 1.301553777305e+00 2.364527344050e-03 2.725043773003e-03 5.502568867763e-02 3.241318240983e-04 4.218750000000e-04 +4.893344268646e-01 3.763632694686e-02 7.157802520178e-01 4.907796597466e-01 8.678744399967e-01 1.110722269674e+00 2.481909221547e-04 3.351750418595e-04 1.929810128425e-02 3.798204209266e-04 4.218750000000e-04 +5.629871961948e-01 3.753080899086e-02 7.132232051411e-01 5.642367807072e-01 9.094231606104e-01 1.027543454990e+00 7.170579865100e-06 1.046755710955e-05 3.410369336393e-03 4.105665779401e-04 4.218750000000e-04 +6.375653742222e-01 3.750345727864e-02 7.125804887170e-01 6.386674531514e-01 9.569049423088e-01 1.003593053850e+00 2.960353258489e-08 4.424631946879e-08 2.217263565469e-04 4.203646073290e-04 4.218750000000e-04 +7.125028623791e-01 3.750011908417e-02 7.125028623791e-01 7.134890243232e-01 1.008328774125e+00 1.000147830030e+00 3.825140723303e-12 5.736863004327e-12 2.524736070767e-06 4.218126434244e-04 4.218750000000e-04 +7.875000157268e-01 3.750000048611e-02 7.125000127339e-01 7.883923672932e-01 1.062647068858e+00 1.000000744700e+00 6.667793589957e-15 1.000168293668e-14 1.054181248209e-07 4.218746858300e-04 4.218750000000e-04 +8.625000000033e-01 3.750000000007e-02 7.125000000022e-01 8.633148324949e-01 1.119360866749e+00 1.000000000145e+00 6.666666668281e-15 1.000000000097e-14 1.054092553441e-07 4.218749999387e-04 4.218750000000e-04 +9.375000000000e-01 3.750000000000e-02 7.125000000000e-01 9.382497002398e-01 1.178120855430e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 3.750000000000e-02 7.125000000000e-01 1.013194206458e+00 1.238635842369e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 3.750000000000e-02 7.125000000000e-01 1.088146359641e+00 1.300660889702e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 3.750000000000e-02 7.125000000000e-01 1.163104681445e+00 1.363990010961e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.943674509720e-02 1.183239484904e-01 7.627706410319e-01 1.247229475687e-01 7.729002940034e-01 2.993948406346e+00 7.965239082298e-02 3.990669511246e-02 2.105724871563e-01 1.409092418245e-04 4.218750000000e-04 +1.178358077925e-01 1.178358077925e-01 7.584525710444e-01 1.666449975134e-01 7.765441762836e-01 2.831152357814e+00 6.841996781260e-02 3.625023974272e-02 2.006939066304e-01 1.490117615308e-04 4.218750000000e-04 +1.948952522393e-01 1.169209236599e-01 7.503839673954e-01 2.272766194198e-01 7.840476772869e-01 2.472359941643e+00 4.674327377501e-02 2.835950764350e-02 1.775121518329e-01 1.706365618105e-04 4.218750000000e-04 +2.701017565932e-01 1.157300761636e-01 7.399313280868e-01 2.938509987112e-01 7.961449489433e-01 1.992369633619e+00 2.354533315668e-02 1.772663020911e-02 1.403433496390e-01 2.117453472896e-04 4.218750000000e-04 +3.435851278437e-01 1.144973867095e-01 7.292150425168e-01 3.621607262510e-01 8.141959038656e-01 1.557598873535e+00 8.143644820967e-03 7.842498758186e-03 9.334820570903e-02 2.708495795471e-04 4.218750000000e-04 +4.161742013467e-01 1.134786874123e-01 7.205177650716e-01 4.313680312255e-01 8.397762964904e-01 1.259321501815e+00 1.739696670916e-03 2.072183316661e-03 4.798360040056e-02 3.350018239122e-04 4.218750000000e-04 +4.890399869792e-01 1.128438031177e-01 7.152453972319e-01 5.018902596850e-01 8.737675955470e-01 1.093819921159e+00 1.711447864485e-04 2.346978462421e-04 1.614854125652e-02 3.856896293798e-04 4.218750000000e-04 +5.628933648655e-01 1.125745891357e-01 7.130825929528e-01 5.740400494118e-01 9.154281854417e-01 1.022627510329e+00 4.529014479307e-06 6.643202583874e-06 2.716861462111e-03 4.125402414259e-04 4.218750000000e-04 +6.375500627064e-01 1.125079255367e-01 7.125615369358e-01 6.474010470840e-01 9.627419486476e-01 1.002800752351e+00 1.647314415507e-08 2.464070372373e-08 1.654646780828e-04 4.206967326372e-04 4.218750000000e-04 +7.125020549559e-01 1.125002564114e-01 7.125020549559e-01 7.213289721126e-01 1.013890854247e+00 1.000107983099e+00 1.862899038182e-12 2.794046847437e-12 1.761958142849e-06 4.218294495490e-04 4.218750000000e-04 +7.875000106904e-01 1.125000009972e-01 7.125000086631e-01 7.954951395588e-01 1.067927328710e+00 1.000000514596e+00 6.667175052051e-15 1.000075743173e-14 1.054132472791e-07 4.218747829050e-04 4.218750000000e-04 +8.625000000021e-01 1.125000000001e-01 7.125000000014e-01 8.698060128579e-01 1.124374826295e+00 1.000000000095e+00 6.666666667718e-15 1.000000000063e-14 1.054092553423e-07 4.218749999601e-04 4.218750000000e-04 +9.375000000000e-01 1.125000000000e-01 7.125000000000e-01 9.442258734011e-01 1.182885772169e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 1.125000000000e-01 7.125000000000e-01 1.018730828040e+00 1.243168834069e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 1.125000000000e-01 7.125000000000e-01 1.093303480283e+00 1.304978448098e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 1.125000000000e-01 7.125000000000e-01 1.167930862680e+00 1.368107726022e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.911709259872e-02 1.956325809298e-01 7.542694714971e-01 1.995050216276e-01 7.802081063968e-01 2.655364825735e+00 5.706476336929e-02 3.223554979125e-02 1.892545311105e-01 1.588764737377e-04 4.218750000000e-04 +1.169209236599e-01 1.948952522393e-01 7.503839673954e-01 2.272766194198e-01 7.840476772869e-01 2.472359941643e+00 4.674327377501e-02 2.835950764350e-02 1.775121518329e-01 1.706365618105e-04 4.218750000000e-04 +1.935347825237e-01 1.935347825237e-01 7.432399499305e-01 2.736995142359e-01 7.920334887273e-01 2.137759349064e+00 2.990434138122e-02 2.098295680076e-02 1.526905250672e-01 1.973444766759e-04 4.218750000000e-04 +2.685595703446e-01 1.918064066518e-01 7.342184170226e-01 3.300211212276e-01 8.049786483824e-01 1.748377875476e+00 1.415938565576e-02 1.214787648686e-02 1.161793464474e-01 2.412950918205e-04 4.218750000000e-04 +3.421882527840e-01 1.900745629013e-01 7.252822006383e-01 3.914347197241e-01 8.241695276872e-01 1.415732928517e+00 4.602068952600e-03 4.875992703037e-03 7.360550027030e-02 2.979905259686e-04 4.218750000000e-04 +4.151998706423e-01 1.887033284483e-01 7.183502349100e-01 4.560700371093e-01 8.508977251962e-01 1.190317692526e+00 9.079361580739e-04 1.144151889586e-03 3.565501195229e-02 3.544221871598e-04 4.218750000000e-04 +4.885634836624e-01 1.878966520530e-01 7.143851867622e-01 5.234495481143e-01 8.856328948760e-01 1.066394125101e+00 7.779372103853e-05 1.094253792393e-04 1.102650237883e-02 3.956088936254e-04 4.218750000000e-04 +5.627509769238e-01 1.875792954359e-01 7.128701329277e-01 5.931902343304e-01 9.273933795996e-01 1.014972972197e+00 1.693257264891e-06 2.502417273080e-06 1.667472229681e-03 4.156514622126e-04 4.218750000000e-04 +6.375287644859e-01 1.875075656036e-01 7.125352512003e-01 6.645314234146e-01 9.743246363038e-01 1.001667392320e+00 4.599765542496e-09 6.888163043588e-09 8.748436713422e-05 4.211727398083e-04 4.218750000000e-04 +7.125010393169e-01 1.875002163854e-01 7.125010393169e-01 7.367591615801e-01 1.024925262251e+00 1.000056471844e+00 3.696931107582e-13 5.545083520280e-13 7.849333673263e-07 4.218511772860e-04 4.218750000000e-04 +7.875000048336e-01 1.875000007613e-01 7.125000039237e-01 8.095137478131e-01 1.078410294596e+00 1.000000240157e+00 6.666748253051e-15 1.000011997798e-14 1.054098876765e-07 4.218748986840e-04 4.218750000000e-04 +8.625000000009e-01 1.875000000001e-01 7.125000000006e-01 8.826451721963e-01 1.134336259670e+00 1.000000000039e+00 6.666666667100e-15 1.000000000026e-14 1.054092553403e-07 4.218749999835e-04 4.218750000000e-04 +9.375000000000e-01 1.875000000000e-01 7.125000000000e-01 9.560661587986e-01 1.192358482169e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 1.875000000000e-01 7.125000000000e-01 1.029714766331e+00 1.252185589280e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 1.875000000000e-01 7.125000000000e-01 1.103545422717e+00 1.313570991610e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 1.875000000000e-01 7.125000000000e-01 1.177523885108e+00 1.376306197763e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.869519734009e-02 2.709557351650e-01 7.431086253506e-01 2.737048204106e-01 7.919120896832e-01 2.138716094527e+00 2.986801847413e-02 2.094809489948e-02 1.525636293466e-01 1.972561954714e-04 4.218750000000e-04 +1.157300761636e-01 2.701017565932e-01 7.399313280868e-01 2.938509987112e-01 7.961449489433e-01 1.992369633619e+00 2.354533315668e-02 1.772663020911e-02 1.403433496390e-01 2.117453472896e-04 4.218750000000e-04 +1.918064066518e-01 2.685595703446e-01 7.342184170226e-01 3.300211212276e-01 8.049786483824e-01 1.748377875476e+00 1.415938565576e-02 1.214787648686e-02 1.161793464474e-01 2.412950918205e-04 4.218750000000e-04 +2.666652224851e-01 2.666652224851e-01 7.272622673347e-01 3.771215742517e-01 8.192259073386e-01 1.483880726826e+00 6.212198269581e-03 6.279680863774e-03 8.353097139368e-02 2.843051954064e-04 4.218750000000e-04 +3.405506132978e-01 2.648572764876e-01 7.207222615117e-01 4.314210207279e-01 8.399789731680e-01 1.264316413675e+00 1.850018302616e-03 2.194883673034e-03 4.938379933444e-02 3.336783382995e-04 4.218750000000e-04 +4.141287378647e-01 2.635213069732e-01 7.159943742828e-01 4.908625986509e-01 8.680979407641e-01 1.116946772925e+00 3.140234575919e-04 4.217167709380e-04 2.164657455421e-02 3.777037637121e-04 4.218750000000e-04 +4.880819050059e-01 2.628048507451e-01 7.135236497626e-01 5.543377450339e-01 9.035520650964e-01 1.038086110396e+00 2.105832181296e-05 3.042857659217e-05 5.814596249685e-03 4.063969219655e-04 4.218750000000e-04 +5.626216567136e-01 2.625538444266e-01 7.126784249823e-01 6.208684641906e-01 9.451921430384e-01 1.007683628097e+00 3.224729068307e-07 4.800210569653e-07 7.303127617408e-04 4.186581861973e-04 4.218750000000e-04 +6.375119256287e-01 2.625043805712e-01 7.125145564077e-01 6.894418069264e-01 9.914670938719e-01 1.000728004900e+00 5.293133740334e-10 7.933924674462e-10 2.969086031174e-05 4.215680963601e-04 4.218750000000e-04 +7.125003560824e-01 2.625001043595e-01 7.125003560824e-01 7.593174976295e-01 1.041258766889e+00 1.000020277240e+00 2.923664481359e-14 4.385407798074e-14 2.207413719989e-07 4.218664457130e-04 4.218750000000e-04 +7.875000013855e-01 2.625000003121e-01 7.125000011276e-01 8.300978872073e-01 1.093946412743e+00 1.000000071954e+00 6.666671251810e-15 1.000000615817e-14 1.054092877954e-07 4.218749696443e-04 4.218750000000e-04 +8.625000000002e-01 2.625000000000e-01 7.125000000001e-01 9.015611460130e-01 1.149116508454e+00 1.000000000010e+00 6.666666666772e-15 1.000000000006e-14 1.054092553393e-07 4.218749999960e-04 4.218750000000e-04 +9.375000000000e-01 2.625000000000e-01 7.125000000000e-01 9.735566239310e-01 1.206428095661e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 2.625000000000e-01 7.125000000000e-01 1.045974426074e+00 1.265590277301e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 2.625000000000e-01 7.125000000000e-01 1.118732541763e+00 1.326355438787e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 2.625000000000e-01 7.125000000000e-01 1.191768643655e+00 1.388513143618e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.825094752410e-02 3.443799375810e-01 7.314659404519e-01 3.464977292780e-01 8.093843947322e-01 1.644684811242e+00 1.063863261206e-02 9.702739886093e-03 1.038307377209e-01 2.565081145739e-04 4.218750000000e-04 +1.144973867095e-01 3.435851278437e-01 7.292150425168e-01 3.621607262510e-01 8.141959038656e-01 1.557598873535e+00 8.143644820967e-03 7.842498758186e-03 9.334820570903e-02 2.708495795471e-04 4.218750000000e-04 +1.900745629013e-01 3.421882527840e-01 7.252822006383e-01 3.914347197241e-01 8.241695276872e-01 1.415732928517e+00 4.602068952600e-03 4.875992703037e-03 7.360550027030e-02 2.979905259686e-04 4.218750000000e-04 +2.648572764876e-01 3.405506132978e-01 7.207222615117e-01 4.314210207279e-01 8.399789731680e-01 1.264316413675e+00 1.850018302616e-03 2.194883673034e-03 4.938379933444e-02 3.336783382995e-04 4.218750000000e-04 +3.390943063278e-01 3.390943063278e-01 7.167345316892e-01 4.795517669322e-01 8.623678368791e-01 1.139700355789e+00 4.759446531935e-04 6.264076133381e-04 2.638197223986e-02 3.701630852857e-04 4.218750000000e-04 +4.132649200445e-01 3.381204404485e-01 7.141220007036e-01 5.339600419400e-01 8.916745809304e-01 1.057895168824e+00 6.261096340321e-05 8.877670290266e-05 9.931806532699e-03 3.987871505918e-04 4.218750000000e-04 +4.877388313082e-01 3.376615989073e-01 7.129165262765e-01 5.932154102369e-01 9.274451446747e-01 1.016841694213e+00 2.796313485389e-06 4.124998268615e-06 2.140871647150e-03 4.148875900753e-04 4.218750000000e-04 +5.625423538575e-01 3.375241484056e-01 7.125617559243e-01 6.560308305564e-01 9.685663150484e-01 1.002885108987e+00 2.481448699341e-08 3.711465067787e-08 2.030726489540e-04 4.206613461695e-04 4.218750000000e-04 +6.375033663441e-01 3.375015905715e-01 7.125040896385e-01 7.213306216558e-01 1.013893457662e+00 1.000219007780e+00 1.956552722525e-11 2.934186474122e-11 5.709822408332e-06 4.217826263235e-04 4.218750000000e-04 +7.125000775374e-01 3.375000296007e-01 7.125000775374e-01 7.883924343063e-01 1.062647162026e+00 1.000004670744e+00 7.022570315448e-15 1.053380627246e-14 1.081860859428e-07 4.218730295390e-04 4.218750000000e-04 +7.875000002311e-01 3.375000000691e-01 7.125000001888e-01 8.567744746494e-01 1.114324347163e+00 1.000000012654e+00 6.666666866188e-15 1.000000017274e-14 1.054092562494e-07 4.218749946616e-04 4.218750000000e-04 +8.625000000000e-01 3.375000000000e-01 7.125000000000e-01 9.261816776422e-01 1.168532733816e+00 1.000000000001e+00 6.666666666680e-15 1.000000000001e-14 1.054092553390e-07 4.218749999995e-04 4.218750000000e-04 +9.375000000000e-01 3.375000000000e-01 7.125000000000e-01 9.963997691690e-01 1.224936222830e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 3.375000000000e-01 7.125000000000e-01 1.067268710307e+00 1.283245397420e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 3.375000000000e-01 7.125000000000e-01 1.138666983802e+00 1.343212101643e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 3.375000000000e-01 7.125000000000e-01 1.210500929368e+00 1.404624060025e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.787627058304e-02 4.167483580164e-01 7.218042618608e-01 4.184660150868e-01 8.343351833784e-01 1.301553777305e+00 2.364527344050e-03 2.725043773003e-03 5.502568867763e-02 3.241318240983e-04 4.218750000000e-04 +1.134786874123e-01 4.161742013467e-01 7.205177650716e-01 4.313680312255e-01 8.397762964904e-01 1.259321501815e+00 1.739696670916e-03 2.072183316661e-03 4.798360040056e-02 3.350018239122e-04 4.218750000000e-04 +1.887033284483e-01 4.151998706423e-01 7.183502349100e-01 4.560700371093e-01 8.508977251962e-01 1.190317692526e+00 9.079361580739e-04 1.144151889586e-03 3.565501195229e-02 3.544221871598e-04 4.218750000000e-04 +2.635213069732e-01 4.141287378647e-01 7.159943742828e-01 4.908625986509e-01 8.680979407641e-01 1.116946772925e+00 3.140234575919e-04 4.217167709380e-04 2.164657455421e-02 3.777037637121e-04 4.218750000000e-04 +3.381204404485e-01 4.132649200445e-01 7.141220007036e-01 5.339600419400e-01 8.916745809304e-01 1.057895168824e+00 6.261096340321e-05 8.877670290266e-05 9.931806532699e-03 3.987871505918e-04 4.218750000000e-04 +4.127588920620e-01 4.127588920620e-01 7.130425231550e-01 5.837292231442e-01 9.215039043757e-01 1.021462411264e+00 5.429148356452e-06 7.972611076894e-06 2.976315969803e-03 4.130107925144e-04 4.218750000000e-04 +4.875680433206e-01 4.125567125404e-01 7.126177230270e-01 6.386905650857e-01 9.569480953018e-01 1.005290425382e+00 1.321170998734e-07 1.971327337916e-07 4.680132165650e-04 4.196548473439e-04 4.218750000000e-04 +5.625097802936e-01 4.125068550147e-01 7.125141837662e-01 6.975522620994e-01 9.971236735872e-01 1.000726704227e+00 5.587134316329e-10 8.374615605934e-10 3.050430863179e-05 4.215686442843e-04 4.218750000000e-04 +6.375005936328e-01 4.125003453857e-01 7.125007174457e-01 7.593178134519e-01 1.041259244466e+00 1.000041412335e+00 1.829758423436e-13 2.744523978008e-13 5.522201632207e-07 4.218575298946e-04 4.218750000000e-04 +7.125000097116e-01 4.125000046342e-01 7.125000097116e-01 8.232937007304e-01 1.088792350038e+00 1.000000621602e+00 6.667884767281e-15 1.000182093377e-14 1.054188520657e-07 4.218747377619e-04 4.218750000000e-04 +7.875000000195e-01 4.125000000074e-01 7.125000000160e-01 8.889952193555e-01 1.139284314848e+00 1.000000001128e+00 6.666666679375e-15 1.000000000778e-14 1.054092553799e-07 4.218749995240e-04 4.218750000000e-04 +8.625000000000e-01 4.125000000000e-01 7.125000000000e-01 9.560661587986e-01 1.192358482169e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 4.125000000000e-01 7.125000000000e-01 1.024237521281e+00 1.247685356971e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 4.125000000000e-01 7.125000000000e-01 1.093303480283e+00 1.304978448098e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 4.125000000000e-01 7.125000000000e-01 1.163104681445e+00 1.363990010960e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 4.125000000000e-01 7.125000000000e-01 1.233516315255e+00 1.424506493492e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.763632694686e-02 4.893344268646e-01 7.157802520178e-01 4.907796597466e-01 8.678744399967e-01 1.110722269674e+00 2.481909221547e-04 3.351750418595e-04 1.929810128425e-02 3.798204209266e-04 4.218750000000e-04 +1.128438031177e-01 4.890399869792e-01 7.152453972319e-01 5.018902596850e-01 8.737675955470e-01 1.093819921159e+00 1.711447864485e-04 2.346978462421e-04 1.614854125652e-02 3.856896293798e-04 4.218750000000e-04 +1.878966520530e-01 4.885634836624e-01 7.143851867622e-01 5.234495481143e-01 8.856328948760e-01 1.066394125101e+00 7.779372103853e-05 1.094253792393e-04 1.102650237883e-02 3.956088936254e-04 4.218750000000e-04 +2.628048507451e-01 4.880819050059e-01 7.135236497626e-01 5.543377450339e-01 9.035520650964e-01 1.038086110396e+00 2.105832181296e-05 3.042857659217e-05 5.814596249685e-03 4.063969219655e-04 4.218750000000e-04 +3.376615989073e-01 4.877388313082e-01 7.129165262765e-01 5.932154102369e-01 9.274451446747e-01 1.016841694213e+00 2.796313485389e-06 4.124998268615e-06 2.140871647150e-03 4.148875900753e-04 4.218750000000e-04 +4.125567125404e-01 4.875680433206e-01 7.126177230270e-01 6.386905650857e-01 9.569480953018e-01 1.005290425382e+00 1.321170998734e-07 1.971327337916e-07 4.680132165650e-04 4.196548473439e-04 4.218750000000e-04 +4.875120671029e-01 4.875120671029e-01 7.125207659874e-01 6.894461771175e-01 9.914745952898e-01 1.001046557435e+00 1.538999537550e-09 2.306085855027e-09 5.061934034237e-05 4.214339451712e-04 4.218750000000e-04 +5.625013349598e-01 4.875011216403e-01 7.125019260389e-01 7.443554899590e-01 1.030399966053e+00 1.000108509209e+00 2.679137446308e-12 4.018270150146e-12 2.112994228878e-06 4.218292276440e-04 4.218750000000e-04 +6.375000569424e-01 4.875000399757e-01 7.125000684546e-01 8.025351154796e-01 1.073181699027e+00 1.000004262814e+00 6.936105406389e-15 1.040411375878e-14 1.075180282494e-07 4.218732016329e-04 4.218750000000e-04 +7.125000005901e-01 4.875000003437e-01 7.125000005901e-01 8.633148331727e-01 1.119360867646e+00 1.000000040090e+00 6.666667962579e-15 1.000000154297e-14 1.054092634711e-07 4.218749830872e-04 4.218750000000e-04 +7.875000000007e-01 4.875000000003e-01 7.125000000005e-01 9.261816776429e-01 1.168532733817e+00 1.000000000040e+00 6.666666667111e-15 1.000000000027e-14 1.054092553404e-07 4.218749999831e-04 4.218750000000e-04 +8.625000000000e-01 4.875000000000e-01 7.125000000000e-01 9.907383610217e-01 1.220335507145e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 4.875000000000e-01 7.125000000000e-01 1.056675210270e+00 1.274448410097e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 4.875000000000e-01 7.125000000000e-01 1.123749304783e+00 1.330589624941e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 4.875000000000e-01 7.125000000000e-01 1.191768643655e+00 1.388513143618e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 4.875000000000e-01 7.125000000000e-01 1.260580223548e+00 1.448005093223e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.753080899086e-02 5.629871961948e-01 7.132232051411e-01 5.642367807072e-01 9.094231606104e-01 1.027543454990e+00 7.170579865100e-06 1.046755710955e-05 3.410369336393e-03 4.105665779401e-04 4.218750000000e-04 +1.125745891357e-01 5.628933648655e-01 7.130825929528e-01 5.740400494118e-01 9.154281854417e-01 1.022627510329e+00 4.529014479307e-06 6.643202583874e-06 2.716861462111e-03 4.125402414259e-04 4.218750000000e-04 +1.875792954359e-01 5.627509769238e-01 7.128701329277e-01 5.931902343304e-01 9.273933795996e-01 1.014972972197e+00 1.693257264891e-06 2.502417273080e-06 1.667472229681e-03 4.156514622126e-04 4.218750000000e-04 +2.625538444266e-01 5.626216567136e-01 7.126784249823e-01 6.208684641906e-01 9.451921430384e-01 1.007683628097e+00 3.224729068307e-07 4.800210569653e-07 7.303127617408e-04 4.186581861973e-04 4.218750000000e-04 +3.375241484056e-01 5.625423538575e-01 7.125617559243e-01 6.560308305564e-01 9.685663150484e-01 1.002885108987e+00 2.481448699341e-08 3.711465067787e-08 2.030726489540e-04 4.206613461695e-04 4.218750000000e-04 +4.125068550147e-01 5.625097802936e-01 7.125141837662e-01 6.975522620994e-01 9.971236735872e-01 1.000726704227e+00 5.587134316329e-10 8.374615605934e-10 3.050430863179e-05 4.215686442843e-04 4.218750000000e-04 +4.875011216403e-01 5.625013349598e-01 7.125019260389e-01 7.443554899590e-01 1.030399966053e+00 1.000108509209e+00 2.679137446308e-12 4.018270150146e-12 2.112994228878e-06 4.218292276440e-04 4.218750000000e-04 +5.625000882200e-01 5.625000882200e-01 7.125001264299e-01 7.954952535968e-01 1.067927492229e+00 1.000007802096e+00 8.176762514303e-15 1.226504807838e-14 1.167383021900e-07 4.218717085166e-04 4.218750000000e-04 +6.375000023372e-01 5.625000019642e-01 7.125000027980e-01 8.501838067086e-01 1.109264963468e+00 1.000000186873e+00 6.666712199408e-15 1.000006643037e-14 1.054096054572e-07 4.218749211630e-04 4.218750000000e-04 +7.125000000129e-01 5.625000000090e-01 7.125000000129e-01 9.077788827840e-01 1.154001191527e+00 1.000000000923e+00 6.666666677002e-15 1.000000000628e-14 1.054092553720e-07 4.218749996107e-04 4.218750000000e-04 +7.875000000000e-01 5.625000000000e-01 7.125000000000e-01 9.677615925423e-01 1.201756526922e+00 1.000000000000e+00 6.666666666671e-15 1.000000000000e-14 1.054092553390e-07 4.218749999998e-04 4.218750000000e-04 +8.625000000000e-01 5.625000000000e-01 7.125000000000e-01 1.029714766331e+00 1.252185589280e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 5.625000000000e-01 7.125000000000e-01 1.093303480283e+00 1.304978448098e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 5.625000000000e-01 7.125000000000e-01 1.158258390861e+00 1.359859827335e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 5.625000000000e-01 7.125000000000e-01 1.224362078799e+00 1.416587007564e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 5.625000000000e-01 7.125000000000e-01 1.291438151829e+00 1.474947032947e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750345727864e-02 6.375653742222e-01 7.125804887170e-01 6.386674531514e-01 9.569049423088e-01 1.003593053850e+00 2.960353258489e-08 4.424631946879e-08 2.217263565469e-04 4.203646073290e-04 4.218750000000e-04 +1.125079255367e-01 6.375500627064e-01 7.125615369358e-01 6.474010470840e-01 9.627419486476e-01 1.002800752351e+00 1.647314415507e-08 2.464070372373e-08 1.654646780828e-04 4.206967326372e-04 4.218750000000e-04 +1.875075656036e-01 6.375287644859e-01 7.125352512003e-01 6.645314234146e-01 9.743246363038e-01 1.001667392320e+00 4.599765542496e-09 6.888163043588e-09 8.748436713422e-05 4.211727398083e-04 4.218750000000e-04 +2.625043805712e-01 6.375119256287e-01 7.125145564077e-01 6.894418069264e-01 9.914670938719e-01 1.000728004900e+00 5.293133740334e-10 7.933924674462e-10 2.969086031174e-05 4.215680963601e-04 4.218750000000e-04 +3.375015905715e-01 6.375033663441e-01 7.125040896385e-01 7.213306216558e-01 1.013893457662e+00 1.000219007780e+00 1.956552722524e-11 2.934186474122e-11 5.709822408332e-06 4.217826263235e-04 4.218750000000e-04 +4.125003453857e-01 6.375005936328e-01 7.125007174457e-01 7.593178134519e-01 1.041259244466e+00 1.000041412335e+00 1.829758423436e-13 2.744523978008e-13 5.522201632207e-07 4.218575298946e-04 4.218750000000e-04 +4.875000399757e-01 6.375000569424e-01 7.125000684546e-01 8.025351154796e-01 1.073181699027e+00 1.000004262814e+00 6.936105406389e-15 1.040411375878e-14 1.075180282494e-07 4.218732016329e-04 4.218750000000e-04 +5.625000019642e-01 6.375000023372e-01 7.125000027980e-01 8.501838067086e-01 1.109264963468e+00 1.000000186873e+00 6.666712199408e-15 1.000006643037e-14 1.054096054572e-07 4.218749211630e-04 4.218750000000e-04 +6.375000000284e-01 6.375000000284e-01 7.125000000339e-01 9.015611460530e-01 1.149116508506e+00 1.000000002409e+00 6.666666694674e-15 1.000000001792e-14 1.054092554334e-07 4.218749989835e-04 4.218750000000e-04 +7.125000000001e-01 6.375000000001e-01 7.125000000001e-01 9.560661587987e-01 1.192358482169e+00 1.000000000005e+00 6.666666666725e-15 1.000000000004e-14 1.054092553391e-07 4.218749999978e-04 4.218750000000e-04 +7.875000000000e-01 6.375000000000e-01 7.125000000000e-01 1.013194206458e+00 1.238635842369e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 6.375000000000e-01 7.125000000000e-01 1.072526223456e+00 1.287621353504e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 6.375000000000e-01 7.125000000000e-01 1.133716234337e+00 1.339017830352e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 6.375000000000e-01 7.125000000000e-01 1.196479210016e+00 1.392558347072e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 6.375000000000e-01 7.125000000000e-01 1.260580223548e+00 1.448005093223e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 6.375000000000e-01 7.125000000000e-01 1.325825214725e+00 1.505147418029e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750011908417e-02 7.125028623791e-01 7.125028623791e-01 7.134890243232e-01 1.008328774125e+00 1.000147830030e+00 3.825140723303e-12 5.736863004327e-12 2.524736070767e-06 4.218126434244e-04 4.218750000000e-04 +1.125002564114e-01 7.125020549559e-01 7.125020549559e-01 7.213289721126e-01 1.013890854247e+00 1.000107983099e+00 1.862899038182e-12 2.794046847437e-12 1.761958142849e-06 4.218294495490e-04 4.218750000000e-04 +1.875002163854e-01 7.125010393169e-01 7.125010393169e-01 7.367591615801e-01 1.024925262251e+00 1.000056471844e+00 3.696931107582e-13 5.545083520280e-13 7.849333673263e-07 4.218511772860e-04 4.218750000000e-04 +2.625001043595e-01 7.125003560824e-01 7.125003560824e-01 7.593174976295e-01 1.041258766889e+00 1.000020277240e+00 2.923664481359e-14 4.385407798074e-14 2.207413719989e-07 4.218664457130e-04 4.218750000000e-04 +3.375000296007e-01 7.125000775374e-01 7.125000775374e-01 7.883924343063e-01 1.062647162026e+00 1.000004670744e+00 7.022570315448e-15 1.053380627246e-14 1.081860859428e-07 4.218730295390e-04 4.218750000000e-04 +4.125000046342e-01 7.125000097116e-01 7.125000097116e-01 8.232937007304e-01 1.088792350038e+00 1.000000621602e+00 6.667884767281e-15 1.000182093377e-14 1.054188520657e-07 4.218747377619e-04 4.218750000000e-04 +4.875000003437e-01 7.125000005901e-01 7.125000005901e-01 8.633148331727e-01 1.119360867646e+00 1.000000040090e+00 6.666667962579e-15 1.000000154297e-14 1.054092634711e-07 4.218749830872e-04 4.218750000000e-04 +5.625000000090e-01 7.125000000129e-01 7.125000000129e-01 9.077788827840e-01 1.154001191527e+00 1.000000000923e+00 6.666666677002e-15 1.000000000628e-14 1.054092553720e-07 4.218749996107e-04 4.218750000000e-04 +6.375000000001e-01 7.125000000001e-01 7.125000000001e-01 9.560661587987e-01 1.192358482169e+00 1.000000000005e+00 6.666666666725e-15 1.000000000004e-14 1.054092553391e-07 4.218749999978e-04 4.218750000000e-04 +7.125000000000e-01 7.125000000000e-01 7.125000000000e-01 1.007627163191e+00 1.234086200393e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.875000000000e-01 7.125000000000e-01 7.125000000000e-01 1.061985169388e+00 1.278854467873e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 7.125000000000e-01 7.125000000000e-01 1.118732541763e+00 1.326355438787e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 7.125000000000e-01 7.125000000000e-01 1.177523885108e+00 1.376306197763e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 7.125000000000e-01 7.125000000000e-01 1.238068051441e+00 1.428449771606e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 7.125000000000e-01 7.125000000000e-01 1.300120186752e+00 1.482554805058e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 7.125000000000e-01 7.125000000000e-01 1.363474422202e+00 1.538414362257e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750000048611e-02 7.875000157268e-01 7.125000127339e-01 7.883923672932e-01 1.062647068858e+00 1.000000744700e+00 6.667793589957e-15 1.000168293668e-14 1.054181248209e-07 4.218746858300e-04 4.218750000000e-04 +1.125000009972e-01 7.875000106904e-01 7.125000086631e-01 7.954951395588e-01 1.067927328710e+00 1.000000514596e+00 6.667175052051e-15 1.000075743173e-14 1.054132472791e-07 4.218747829050e-04 4.218750000000e-04 +1.875000007613e-01 7.875000048336e-01 7.125000039237e-01 8.095137478131e-01 1.078410294596e+00 1.000000240157e+00 6.666748253051e-15 1.000011997798e-14 1.054098876765e-07 4.218748986840e-04 4.218750000000e-04 +2.625000003121e-01 7.875000013855e-01 7.125000011276e-01 8.300978872073e-01 1.093946412743e+00 1.000000071954e+00 6.666671251810e-15 1.000000615817e-14 1.054092877954e-07 4.218749696443e-04 4.218750000000e-04 +3.375000000691e-01 7.875000002311e-01 7.125000001888e-01 8.567744746494e-01 1.114324347163e+00 1.000000012654e+00 6.666666866188e-15 1.000000017274e-14 1.054092562494e-07 4.218749946616e-04 4.218750000000e-04 +4.125000000074e-01 7.875000000195e-01 7.125000000160e-01 8.889952193555e-01 1.139284314848e+00 1.000000001128e+00 6.666666679375e-15 1.000000000778e-14 1.054092553799e-07 4.218749995240e-04 4.218750000000e-04 +4.875000000003e-01 7.875000000007e-01 7.125000000005e-01 9.261816776429e-01 1.168532733817e+00 1.000000000040e+00 6.666666667111e-15 1.000000000027e-14 1.054092553404e-07 4.218749999831e-04 4.218750000000e-04 +5.625000000000e-01 7.875000000000e-01 7.125000000000e-01 9.677615925423e-01 1.201756526922e+00 1.000000000000e+00 6.666666666671e-15 1.000000000000e-14 1.054092553390e-07 4.218749999998e-04 4.218750000000e-04 +6.375000000000e-01 7.875000000000e-01 7.125000000000e-01 1.013194206458e+00 1.238635842369e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.125000000000e-01 7.875000000000e-01 7.125000000000e-01 1.061985169388e+00 1.278854467873e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.875000000000e-01 7.875000000000e-01 7.125000000000e-01 1.113693180369e+00 1.322107692285e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 7.875000000000e-01 7.125000000000e-01 1.167930862680e+00 1.368107726022e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 7.875000000000e-01 7.125000000000e-01 1.224362078799e+00 1.416587007564e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 7.875000000000e-01 7.125000000000e-01 1.282697353237e+00 1.467299815989e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 7.875000000000e-01 7.125000000000e-01 1.342688534248e+00 1.520022614963e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 7.875000000000e-01 7.125000000000e-01 1.404123392014e+00 1.574553508141e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750000000007e-02 8.625000000033e-01 7.125000000022e-01 8.633148324949e-01 1.119360866749e+00 1.000000000145e+00 6.666666668281e-15 1.000000000097e-14 1.054092553441e-07 4.218749999387e-04 4.218750000000e-04 +1.125000000001e-01 8.625000000021e-01 7.125000000014e-01 8.698060128579e-01 1.124374826295e+00 1.000000000095e+00 6.666666667718e-15 1.000000000063e-14 1.054092553423e-07 4.218749999601e-04 4.218750000000e-04 +1.875000000001e-01 8.625000000009e-01 7.125000000006e-01 8.826451721963e-01 1.134336259670e+00 1.000000000039e+00 6.666666667100e-15 1.000000000026e-14 1.054092553403e-07 4.218749999835e-04 4.218750000000e-04 +2.625000000000e-01 8.625000000002e-01 7.125000000001e-01 9.015611460130e-01 1.149116508454e+00 1.000000000010e+00 6.666666666772e-15 1.000000000006e-14 1.054092553393e-07 4.218749999960e-04 4.218750000000e-04 +3.375000000000e-01 8.625000000000e-01 7.125000000000e-01 9.261816776422e-01 1.168532733816e+00 1.000000000001e+00 6.666666666680e-15 1.000000000001e-14 1.054092553390e-07 4.218749999995e-04 4.218750000000e-04 +4.125000000000e-01 8.625000000000e-01 7.125000000000e-01 9.560661587986e-01 1.192358482169e+00 1.000000000000e+00 6.666666666668e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.875000000000e-01 8.625000000000e-01 7.125000000000e-01 9.907383610217e-01 1.220335507145e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +5.625000000000e-01 8.625000000000e-01 7.125000000000e-01 1.029714766331e+00 1.252185589280e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +6.375000000000e-01 8.625000000000e-01 7.125000000000e-01 1.072526223456e+00 1.287621353504e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.125000000000e-01 8.625000000000e-01 7.125000000000e-01 1.118732541763e+00 1.326355438787e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.875000000000e-01 8.625000000000e-01 7.125000000000e-01 1.167930862680e+00 1.368107726022e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 8.625000000000e-01 7.125000000000e-01 1.219759197547e+00 1.412610615138e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 8.625000000000e-01 7.125000000000e-01 1.273896581360e+00 1.459612534202e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 8.625000000000e-01 7.125000000000e-01 1.330061088823e+00 1.508879965405e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 8.625000000000e-01 7.125000000000e-01 1.388006664249e+00 1.560198304704e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 8.625000000000e-01 7.125000000000e-01 1.447519429921e+00 1.613371857322e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750000000000e-02 9.375000000000e-01 7.125000000000e-01 9.382497002398e-01 1.178120855430e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.125000000000e-01 9.375000000000e-01 7.125000000000e-01 9.442258734011e-01 1.182885772169e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.875000000000e-01 9.375000000000e-01 7.125000000000e-01 9.560661587986e-01 1.192358482169e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +2.625000000000e-01 9.375000000000e-01 7.125000000000e-01 9.735566239310e-01 1.206428095661e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +3.375000000000e-01 9.375000000000e-01 7.125000000000e-01 9.963997691690e-01 1.224936222830e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.125000000000e-01 9.375000000000e-01 7.125000000000e-01 1.024237521281e+00 1.247685356971e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.875000000000e-01 9.375000000000e-01 7.125000000000e-01 1.056675210270e+00 1.274448410097e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +5.625000000000e-01 9.375000000000e-01 7.125000000000e-01 1.093303480283e+00 1.304978448098e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +6.375000000000e-01 9.375000000000e-01 7.125000000000e-01 1.133716234337e+00 1.339017830352e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.125000000000e-01 9.375000000000e-01 7.125000000000e-01 1.177523885108e+00 1.376306197763e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.875000000000e-01 9.375000000000e-01 7.125000000000e-01 1.224362078799e+00 1.416587007564e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 9.375000000000e-01 7.125000000000e-01 1.273896581360e+00 1.459612534202e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 9.375000000000e-01 7.125000000000e-01 1.325825214725e+00 1.505147418029e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 9.375000000000e-01 7.125000000000e-01 1.379877711973e+00 1.552970943064e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 9.375000000000e-01 7.125000000000e-01 1.435814228931e+00 1.602878270487e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 9.375000000000e-01 7.125000000000e-01 1.493423081381e+00 1.654680860468e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750000000000e-02 1.012500000000e+00 7.125000000000e-01 1.013194206458e+00 1.238635842369e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.125000000000e-01 1.012500000000e+00 7.125000000000e-01 1.018730828040e+00 1.243168834069e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.875000000000e-01 1.012500000000e+00 7.125000000000e-01 1.029714766331e+00 1.252185589280e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +2.625000000000e-01 1.012500000000e+00 7.125000000000e-01 1.045974426074e+00 1.265590277301e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +3.375000000000e-01 1.012500000000e+00 7.125000000000e-01 1.067268710307e+00 1.283245397420e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.125000000000e-01 1.012500000000e+00 7.125000000000e-01 1.093303480283e+00 1.304978448098e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.875000000000e-01 1.012500000000e+00 7.125000000000e-01 1.123749304783e+00 1.330589624941e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +5.625000000000e-01 1.012500000000e+00 7.125000000000e-01 1.158258390861e+00 1.359859827335e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +6.375000000000e-01 1.012500000000e+00 7.125000000000e-01 1.196479210016e+00 1.392558347072e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.125000000000e-01 1.012500000000e+00 7.125000000000e-01 1.238068051441e+00 1.428449771606e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.875000000000e-01 1.012500000000e+00 7.125000000000e-01 1.282697353237e+00 1.467299815989e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 1.012500000000e+00 7.125000000000e-01 1.330061088823e+00 1.508879965405e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 1.012500000000e+00 7.125000000000e-01 1.379877711973e+00 1.552970943064e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 1.012500000000e+00 7.125000000000e-01 1.431891231903e+00 1.599365108410e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 1.012500000000e+00 7.125000000000e-01 1.485870956712e+00 1.647867940704e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 1.012500000000e+00 7.125000000000e-01 1.541610359332e+00 1.698298781134e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750000000000e-02 1.087500000000e+00 7.125000000000e-01 1.088146359641e+00 1.300660889702e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.125000000000e-01 1.087500000000e+00 7.125000000000e-01 1.093303480283e+00 1.304978448098e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.875000000000e-01 1.087500000000e+00 7.125000000000e-01 1.103545422717e+00 1.313570991610e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +2.625000000000e-01 1.087500000000e+00 7.125000000000e-01 1.118732541763e+00 1.326355438787e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +3.375000000000e-01 1.087500000000e+00 7.125000000000e-01 1.138666983802e+00 1.343212101643e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.125000000000e-01 1.087500000000e+00 7.125000000000e-01 1.163104681445e+00 1.363990010960e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.875000000000e-01 1.087500000000e+00 7.125000000000e-01 1.191768643655e+00 1.388513143618e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +5.625000000000e-01 1.087500000000e+00 7.125000000000e-01 1.224362078799e+00 1.416587007564e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +6.375000000000e-01 1.087500000000e+00 7.125000000000e-01 1.260580223548e+00 1.448005093223e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.125000000000e-01 1.087500000000e+00 7.125000000000e-01 1.300120186752e+00 1.482554805058e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.875000000000e-01 1.087500000000e+00 7.125000000000e-01 1.342688534248e+00 1.520022614963e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 1.087500000000e+00 7.125000000000e-01 1.388006664249e+00 1.560198304704e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 1.087500000000e+00 7.125000000000e-01 1.435814228931e+00 1.602878270487e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 1.087500000000e+00 7.125000000000e-01 1.485870956712e+00 1.647867940704e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 1.087500000000e+00 7.125000000000e-01 1.537957249081e+00 1.694983406998e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 1.087500000000e+00 7.125000000000e-01 1.591873895759e+00 1.744052393135e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750000000000e-02 1.162500000000e+00 7.125000000000e-01 1.163104681445e+00 1.363990010961e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.125000000000e-01 1.162500000000e+00 7.125000000000e-01 1.167930862680e+00 1.368107726022e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.875000000000e-01 1.162500000000e+00 7.125000000000e-01 1.177523885108e+00 1.376306197763e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +2.625000000000e-01 1.162500000000e+00 7.125000000000e-01 1.191768643655e+00 1.388513143618e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.375000000000e-01 1.162500000000e+00 7.125000000000e-01 1.210500929368e+00 1.404624060025e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +4.125000000000e-01 1.162500000000e+00 7.125000000000e-01 1.233516315255e+00 1.424506493492e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +4.875000000000e-01 1.162500000000e+00 7.125000000000e-01 1.260580223548e+00 1.448005093223e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +5.625000000000e-01 1.162500000000e+00 7.125000000000e-01 1.291438151829e+00 1.474947032947e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +6.375000000000e-01 1.162500000000e+00 7.125000000000e-01 1.325825214725e+00 1.505147418029e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +7.125000000000e-01 1.162500000000e+00 7.125000000000e-01 1.363474422202e+00 1.538414362257e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +7.875000000000e-01 1.162500000000e+00 7.125000000000e-01 1.404123392014e+00 1.574553508141e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +8.625000000000e-01 1.162500000000e+00 7.125000000000e-01 1.447519429921e+00 1.613371857322e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +9.375000000000e-01 1.162500000000e+00 7.125000000000e-01 1.493423081381e+00 1.654680860468e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.012500000000e+00 1.162500000000e+00 7.125000000000e-01 1.541610359332e+00 1.698298781134e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.087500000000e+00 1.162500000000e+00 7.125000000000e-01 1.591873895759e+00 1.744052393135e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.162500000000e+00 1.162500000000e+00 7.125000000000e-01 1.644023266259e+00 1.791778097310e+00 9.999999999976e-01 6.666666666640e-15 9.999999999984e-15 1.054092553389e-07 4.218750000010e-04 4.218750000000e-04 +3.802378088111e-02 3.802378088111e-02 8.026205045019e-01 5.377374661477e-02 8.044198468909e-01 1.489573987084e+00 6.676759301296e-03 6.723492111693e-03 8.643232491823e-02 2.832185602447e-04 4.218750000000e-04 +1.138683852438e-01 3.795483461785e-02 8.005920524102e-01 1.200274078238e-01 8.095395067637e-01 1.410681303046e+00 4.736183526788e-03 5.036059721526e-03 7.480388969035e-02 2.990576249143e-04 4.218750000000e-04 +1.891952562990e-01 3.783683667367e-02 7.971472633109e-01 1.929416264457e-01 8.201647582161e-01 1.289745217446e+00 2.313266682337e-03 2.690376344545e-03 5.467455577775e-02 3.270994877852e-04 4.218750000000e-04 +2.639521847021e-01 3.770536386587e-02 7.933483988505e-01 2.666316753000e-01 8.369552749293e-01 1.170935687426e+00 7.354696105387e-04 9.421562837779e-04 3.235491176481e-02 3.602887883001e-04 4.218750000000e-04 +3.383909790227e-01 3.759760278757e-02 7.902669681370e-01 3.404732506664e-01 8.604905085751e-01 1.081957932813e+00 1.321518161540e-04 1.832120438506e-04 1.426775867513e-02 3.899181171520e-04 4.218750000000e-04 +4.128762135480e-01 3.753345513575e-02 7.884478061942e-01 4.145787355475e-01 8.908004664685e-01 1.029839169949e+00 1.008997661345e-05 1.469643548412e-05 4.040961860762e-03 4.096513439288e-04 4.218750000000e-04 +4.876003034451e-01 3.750741438121e-02 7.877115061338e-01 4.890407570472e-01 9.271732734224e-01 1.007353107040e+00 2.374385177664e-07 3.535580266348e-07 6.267712914743e-04 4.187955514820e-04 4.218750000000e-04 +5.625143537242e-01 3.750088041264e-02 7.875255447675e-01 5.637629946861e-01 9.685170095764e-01 1.000992998832e+00 9.396318024873e-10 1.408049512210e-09 3.955375403184e-05 4.214564941937e-04 4.218750000000e-04 +6.375008302832e-01 3.750004106526e-02 7.875012392764e-01 6.386028199841e-01 1.013889423731e+00 1.000053345394e+00 2.331979512473e-13 3.497782678114e-13 6.234119984332e-07 4.218524961123e-04 4.218750000000e-04 +7.125000127339e-01 3.750000048611e-02 7.875000157268e-01 7.134861723834e-01 1.062647068858e+00 1.000000744700e+00 6.667793589957e-15 1.000168293668e-14 1.054181248209e-07 4.218746858300e-04 4.218750000000e-04 +7.875000000209e-01 3.750000000058e-02 7.875000000209e-01 7.883923515820e-01 1.114324346887e+00 1.000000001099e+00 6.666666679000e-15 1.000000000751e-14 1.054092553785e-07 4.218749995362e-04 4.218750000000e-04 +8.625000000000e-01 3.750000000000e-02 7.875000000000e-01 8.633148324916e-01 1.168532733816e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 3.750000000000e-02 7.875000000000e-01 9.382497002398e-01 1.224936222830e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 3.750000000000e-02 7.875000000000e-01 1.013194206458e+00 1.283245397420e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 3.750000000000e-02 7.875000000000e-01 1.088146359641e+00 1.343212101643e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 3.750000000000e-02 7.875000000000e-01 1.163104681445e+00 1.404624060025e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.795483461785e-02 1.138683852438e-01 8.005920524102e-01 1.200274078238e-01 8.095395067637e-01 1.410681303046e+00 4.736183526788e-03 5.036059721526e-03 7.480388969035e-02 2.990576249143e-04 4.218750000000e-04 +1.136825910994e-01 1.136825910994e-01 7.987863751225e-01 1.607714621385e-01 8.148049681485e-01 1.345319749911e+00 3.344270202044e-03 3.728782918261e-03 6.436685584524e-02 3.135871602480e-04 4.218750000000e-04 +1.889510507492e-01 1.133672761909e-01 7.957427201446e-01 2.203511717468e-01 8.256882677823e-01 1.244148042387e+00 1.616798394324e-03 1.949283774006e-03 4.653891769268e-02 3.390874603560e-04 4.218750000000e-04 +2.637249349063e-01 1.130208567819e-01 7.924281062424e-01 2.869225598642e-01 8.427733140779e-01 1.143792126595e+00 5.029659803463e-04 6.596032207056e-04 2.707198676586e-02 3.688388739448e-04 4.218750000000e-04 +3.382367272118e-01 1.127424628782e-01 7.897871416024e-01 3.565318310765e-01 8.665325588870e-01 1.068344316136e+00 8.695704047596e-05 1.220913133939e-04 1.164718914082e-02 3.948867360721e-04 4.218750000000e-04 +4.128031823094e-01 1.125809151375e-01 7.882638456557e-01 4.278795739200e-01 8.969062493627e-01 1.024427599860e+00 6.314974967222e-06 9.246590439507e-06 3.205306440456e-03 4.118153396664e-04 4.218750000000e-04 +4.875782861272e-01 1.125173520862e-01 7.876650161727e-01 5.003925854999e-01 9.331714297629e-01 1.005842230148e+00 1.384898275312e-07 2.065281562758e-07 4.790362503979e-04 4.194246248120e-04 4.218750000000e-04 +5.625107782388e-01 1.125019802511e-01 7.875191663087e-01 5.736506525711e-01 9.743005226822e-01 1.000758515197e+00 5.006420776219e-10 7.503939312325e-10 2.887509367435e-05 4.215552439412e-04 4.218750000000e-04 +6.375005964975e-01 1.125000885026e-01 7.875008893743e-01 6.473509716126e-01 1.019421861259e+00 1.000038945031e+00 1.167838064920e-13 1.751688877803e-13 4.411712791351e-07 4.218585707049e-04 4.218750000000e-04 +7.125000086631e-01 1.125000009972e-01 7.875000106904e-01 7.213269110253e-01 1.067927328710e+00 1.000000514596e+00 6.667175052051e-15 1.000075743173e-14 1.054132472791e-07 4.218747829050e-04 4.218750000000e-04 +7.875000000134e-01 1.125000000011e-01 7.875000000134e-01 7.954951288483e-01 1.119360866764e+00 1.000000000716e+00 6.666666674664e-15 1.000000000483e-14 1.054092553644e-07 4.218749996978e-04 4.218750000000e-04 +8.625000000000e-01 1.125000000000e-01 7.875000000000e-01 8.698060128557e-01 1.173336588537e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 1.125000000000e-01 7.875000000000e-01 9.442258734011e-01 1.229519723307e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 1.125000000000e-01 7.875000000000e-01 1.018730828040e+00 1.287621353504e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 1.125000000000e-01 7.875000000000e-01 1.093303480283e+00 1.347393316742e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 1.125000000000e-01 7.875000000000e-01 1.167930862680e+00 1.408622997825e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.783683667367e-02 1.891952562990e-01 7.971472633109e-01 1.929416264457e-01 8.201647582161e-01 1.289745217446e+00 2.313266682337e-03 2.690376344545e-03 5.467455577775e-02 3.270994877852e-04 4.218750000000e-04 +1.133672761909e-01 1.889510507492e-01 7.957427201446e-01 2.203511717468e-01 8.256882677823e-01 1.244148042387e+00 1.616798394324e-03 1.949283774006e-03 4.653891769268e-02 3.390874603560e-04 4.218750000000e-04 +1.885433704587e-01 1.885433704587e-01 7.934099285729e-01 2.666405915982e-01 8.370164394119e-01 1.172608389336e+00 7.629881505155e-04 9.760140181338e-04 3.293114058378e-02 3.597748437046e-04 4.218750000000e-04 +2.633545533248e-01 1.881077137024e-01 7.909330106114e-01 3.236358025794e-01 8.545847880614e-01 1.100811283649e+00 2.259412839682e-04 3.078746838684e-04 1.849548545121e-02 3.832400759933e-04 4.218750000000e-04 +3.379934335567e-01 1.877713508104e-01 7.890313469961e-01 3.866492484315e-01 8.786740623548e-01 1.046849204224e+00 3.597505695647e-05 5.154762043755e-05 7.568033682503e-03 4.029950047224e-04 4.218750000000e-04 +4.126928809289e-01 1.875859176426e-01 7.879860262308e-01 4.533253693180e-01 9.090796818774e-01 1.016082378279e+00 2.328920026704e-06 3.438087417649e-06 1.954506876611e-03 4.151976345801e-04 4.218750000000e-04 +4.875467341755e-01 1.875172593956e-01 7.875984362688e-01 5.223643752942e-01 9.450798047729e-01 1.003616873949e+00 4.326128408414e-08 6.465806605151e-08 2.680341314325e-04 4.203546302883e-04 4.218750000000e-04 +5.625059625707e-01 1.875018227896e-01 7.875105870116e-01 5.929332942895e-01 9.857701639492e-01 1.000434064710e+00 1.252041937315e-10 1.877248058838e-10 1.444240692020e-05 4.216919584023e-04 4.218750000000e-04 +6.375003020690e-01 1.875000748037e-01 7.875004494282e-01 6.645020039018e-01 1.030397918786e+00 1.000020345453e+00 2.816443910373e-14 4.224579914568e-14 2.166558949776e-07 4.218664169367e-04 4.218750000000e-04 +7.125000039237e-01 1.875000007613e-01 7.875000048336e-01 7.367581054028e-01 1.078410294596e+00 1.000000240157e+00 6.666748253051e-15 1.000011997798e-14 1.054098876765e-07 4.218748986840e-04 4.218750000000e-04 +7.875000000054e-01 1.875000000008e-01 7.875000000054e-01 8.095137429400e-01 1.129366525986e+00 1.000000000295e+00 6.666666669950e-15 1.000000000197e-14 1.054092553493e-07 4.218749998755e-04 4.218750000000e-04 +8.625000000000e-01 1.875000000000e-01 7.875000000000e-01 8.826451721955e-01 1.182885772169e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 1.875000000000e-01 7.875000000000e-01 9.560661587986e-01 1.238635842369e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 1.875000000000e-01 7.875000000000e-01 1.029714766331e+00 1.296328951308e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 1.875000000000e-01 7.875000000000e-01 1.103545422717e+00 1.355717061189e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 1.875000000000e-01 7.875000000000e-01 1.177523885108e+00 1.416587007564e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.770536386587e-02 2.639521847021e-01 7.933483988505e-01 2.666316753000e-01 8.369552749293e-01 1.170935687426e+00 7.354696105387e-04 9.421562837779e-04 3.235491176481e-02 3.602887883001e-04 4.218750000000e-04 +1.130208567819e-01 2.637249349063e-01 7.924281062424e-01 2.869225598642e-01 8.427733140779e-01 1.143792126595e+00 5.029659803463e-04 6.596032207056e-04 2.707198676586e-02 3.688388739448e-04 4.218750000000e-04 +1.881077137024e-01 2.633545533248e-01 7.909330106114e-01 3.236358025794e-01 8.545847880614e-01 1.100811283649e+00 2.259412839682e-04 3.078746838684e-04 1.849548545121e-02 3.832400759933e-04 4.218750000000e-04 +2.629750429285e-01 2.629750429285e-01 7.894066242108e-01 3.719028722752e-01 8.726250997733e-01 1.057568556525e+00 6.109761078677e-05 8.665765979399e-05 9.812557702250e-03 3.989103093101e-04 4.218750000000e-04 +3.377577969427e-01 2.626992570527e-01 7.883002365201e-01 4.278916089988e-01 8.969439736959e-01 1.025621262063e+00 8.403201437860e-06 1.228991892332e-05 3.695330224804e-03 4.113360512352e-04 4.218750000000e-04 +4.125932744012e-01 2.625583484675e-01 7.877351530361e-01 4.890501982732e-01 9.271983432685e-01 1.008221569871e+00 4.399221157605e-07 6.545021385776e-07 8.527746469141e-04 4.184348089814e-04 4.218750000000e-04 +4.875205377128e-01 2.625106315765e-01 7.875432239591e-01 5.537039880500e-01 9.627109825833e-01 1.001678708274e+00 6.049876815039e-09 9.059606785688e-09 1.003306023199e-04 4.211679818242e-04 4.218750000000e-04 +5.625023405442e-01 2.625010022555e-01 7.875041470900e-01 6.207379956977e-01 1.002735479070e+00 1.000178913644e+00 1.195884487609e-11 1.793505848747e-11 4.464061241052e-06 4.217995343085e-04 4.218750000000e-04 +6.375001035585e-01 2.625000361066e-01 7.875001535907e-01 6.894292211628e-01 1.046646617965e+00 1.000007288283e+00 7.999074632138e-15 1.199852449957e-14 1.154629546149e-07 4.218719252780e-04 4.218750000000e-04 +7.125000011276e-01 2.625000003121e-01 7.875000013855e-01 7.593171285904e-01 1.093946412743e+00 1.000000071954e+00 6.666671251810e-15 1.000000615817e-14 1.054092877954e-07 4.218749696443e-04 4.218750000000e-04 +7.875000000013e-01 2.625000000003e-01 7.875000000013e-01 8.300978857955e-01 1.144210972681e+00 1.000000000072e+00 6.666666667466e-15 1.000000000048e-14 1.054092553415e-07 4.218749999697e-04 4.218750000000e-04 +8.625000000000e-01 2.625000000000e-01 7.875000000000e-01 9.015611460128e-01 1.197066727463e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 2.625000000000e-01 7.875000000000e-01 9.735566239310e-01 1.252185589280e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 2.625000000000e-01 7.875000000000e-01 1.045974426074e+00 1.309281768757e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 2.625000000000e-01 7.875000000000e-01 1.118732541763e+00 1.368107726022e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 2.625000000000e-01 7.875000000000e-01 1.191768643655e+00 1.428449771606e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.759760278757e-02 3.383909790227e-01 7.902669681370e-01 3.404732506664e-01 8.604905085751e-01 1.081957932813e+00 1.321518161540e-04 1.832120438506e-04 1.426775867513e-02 3.899181171520e-04 4.218750000000e-04 +1.127424628782e-01 3.382367272118e-01 7.897871416024e-01 3.565318310765e-01 8.665325588870e-01 1.068344316136e+00 8.695704047596e-05 1.220913133939e-04 1.164718914082e-02 3.948867360721e-04 4.218750000000e-04 +1.877713508104e-01 3.379934335567e-01 7.890313469961e-01 3.866492484315e-01 8.786740623548e-01 1.046849204224e+00 3.597505695647e-05 5.154762043755e-05 7.568033682503e-03 4.029950047224e-04 4.218750000000e-04 +2.626992570527e-01 3.377577969427e-01 7.883002365201e-01 4.278916089988e-01 8.969439736959e-01 1.025621262063e+00 8.403201437860e-06 1.228991892332e-05 3.695330224804e-03 4.113360512352e-04 4.218750000000e-04 +3.375995233065e-01 3.375995233065e-01 7.878093979930e-01 4.774378245107e-01 9.211897328127e-01 1.010634462497e+00 9.128671521033e-07 1.354892178099e-06 1.226962001630e-03 4.174357946963e-04 4.218750000000e-04 +4.125324489012e-01 3.375262448505e-01 7.875819149654e-01 5.330168734283e-01 9.509954048995e-01 1.003086502052e+00 3.415241199807e-08 5.107098729003e-08 2.382132268229e-04 4.205768885704e-04 4.218750000000e-04 +4.875062848794e-01 3.375042024393e-01 7.875132236559e-01 5.929346207307e-01 9.857730681521e-01 1.000550757873e+00 2.966037037068e-10 4.446606552034e-10 2.222762683398e-05 4.216427769209e-04 4.218750000000e-04 +5.625006152171e-01 3.375003405545e-01 7.875010870285e-01 6.559827909283e-01 1.024925062658e+00 1.000049932585e+00 3.492600289159e-13 5.238638854957e-13 7.629357665519e-07 4.218539357424e-04 4.218750000000e-04 +6.375000224540e-01 3.375000101992e-01 7.875000331613e-01 7.213269269293e-01 1.067927356023e+00 1.000001666308e+00 6.687610179886e-15 1.003139855443e-14 1.055746105549e-07 4.218742970275e-04 4.218750000000e-04 +7.125000001888e-01 3.375000000691e-01 7.875000002311e-01 7.883923517613e-01 1.114324347163e+00 1.000000012654e+00 6.666666866188e-15 1.000000017274e-14 1.054092562494e-07 4.218749946616e-04 4.218750000000e-04 +7.875000000002e-01 3.375000000000e-01 7.875000000002e-01 8.567744744098e-01 1.163709048689e+00 1.000000000009e+00 6.666666666769e-15 1.000000000006e-14 1.054092553393e-07 4.218749999961e-04 4.218750000000e-04 +8.625000000000e-01 3.375000000000e-01 7.875000000000e-01 9.261816776421e-01 1.215717380809e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 3.375000000000e-01 7.875000000000e-01 9.963997691690e-01 1.270027066641e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 3.375000000000e-01 7.875000000000e-01 1.067268710307e+00 1.326355438787e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 3.375000000000e-01 7.875000000000e-01 1.138666983802e+00 1.384456120648e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 3.375000000000e-01 7.875000000000e-01 1.210500929368e+00 1.444115213548e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.753345513575e-02 4.128762135480e-01 7.884478061942e-01 4.145787355475e-01 8.908004664685e-01 1.029839169949e+00 1.008997661345e-05 1.469643548412e-05 4.040961860762e-03 4.096513439288e-04 4.218750000000e-04 +1.125809151375e-01 4.128031823094e-01 7.882638456557e-01 4.278795739200e-01 8.969062493627e-01 1.024427599860e+00 6.314974967222e-06 9.246590439507e-06 3.205306440456e-03 4.118153396664e-04 4.218750000000e-04 +1.875859176426e-01 4.126928809289e-01 7.879860262308e-01 4.533253693180e-01 9.090796818774e-01 1.016082378279e+00 2.328920026704e-06 3.438087417648e-06 1.954506876611e-03 4.151976345801e-04 4.218750000000e-04 +2.625583484675e-01 4.125932744012e-01 7.877351530361e-01 4.890501982732e-01 9.271983432685e-01 1.008221569871e+00 4.399221157605e-07 6.545021385776e-07 8.527746469141e-04 4.184348089814e-04 4.218750000000e-04 +3.375262448505e-01 4.125324489012e-01 7.875819149654e-01 5.330168734283e-01 9.509954048995e-01 1.003086502052e+00 3.415241199807e-08 5.107098729003e-08 2.382132268229e-04 4.205768885704e-04 4.218750000000e-04 +4.125074947225e-01 4.125074947225e-01 7.875189764637e-01 5.833736936171e-01 9.800566334120e-01 1.000780315326e+00 7.864702977434e-10 1.178785622128e-09 3.619063141705e-05 4.215460611480e-04 4.218750000000e-04 +4.875012370566e-01 4.125010225558e-01 7.875026042315e-01 6.386035935863e-01 1.013890971166e+00 1.000117322190e+00 3.879549620607e-12 5.818641775114e-12 2.542667404106e-06 4.218255105073e-04 4.218750000000e-04 +5.625000991006e-01 4.125000679799e-01 7.875001744097e-01 6.975404415313e-01 1.052007220634e+00 1.000008592422e+00 8.966566355913e-15 1.344973396808e-14 1.222462631471e-07 4.218713751031e-04 4.218750000000e-04 +6.375000027585e-01 4.125000015674e-01 7.875000040525e-01 7.593171305918e-01 1.093946416052e+00 1.000000216725e+00 6.666743038437e-15 1.000011239038e-14 1.054098476866e-07 4.218749085691e-04 4.218750000000e-04 +7.125000000160e-01 4.125000000074e-01 7.875000000195e-01 8.232936900213e-01 1.139284314848e+00 1.000000001128e+00 6.666666679375e-15 1.000000000778e-14 1.054092553799e-07 4.218749995240e-04 4.218750000000e-04 +7.875000000000e-01 4.125000000000e-01 7.875000000000e-01 8.889952193347e-01 1.187631571658e+00 1.000000000001e+00 6.666666666672e-15 1.000000000000e-14 1.054092553390e-07 4.218749999998e-04 4.218750000000e-04 +8.625000000000e-01 4.125000000000e-01 7.875000000000e-01 9.560661587986e-01 1.238635842369e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 4.125000000000e-01 7.875000000000e-01 1.024237521281e+00 1.291982488271e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 4.125000000000e-01 7.875000000000e-01 1.093303480283e+00 1.347393316742e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 4.125000000000e-01 7.875000000000e-01 1.163104681445e+00 1.404624060025e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 4.125000000000e-01 7.875000000000e-01 1.233516315255e+00 1.463461222582e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750741438121e-02 4.876003034451e-01 7.877115061338e-01 4.890407570472e-01 9.271732734224e-01 1.007353107040e+00 2.374385177664e-07 3.535580266348e-07 6.267712914743e-04 4.187955514820e-04 4.218750000000e-04 +1.125173520862e-01 4.875782861272e-01 7.876650161727e-01 5.003925854999e-01 9.331714297629e-01 1.005842230148e+00 1.384898275312e-07 2.065281562758e-07 4.790362503979e-04 4.194246248120e-04 4.218750000000e-04 +1.875172593956e-01 4.875467341755e-01 7.875984362688e-01 5.223643752942e-01 9.450798047729e-01 1.003616873949e+00 4.326128408414e-08 6.465806605151e-08 2.680341314325e-04 4.203546302883e-04 4.218750000000e-04 +2.625106315765e-01 4.875205377128e-01 7.875432239591e-01 5.537039880500e-01 9.627109825833e-01 1.001678708274e+00 6.049876815039e-09 9.059606785688e-09 1.003306023199e-04 4.211679818242e-04 4.218750000000e-04 +3.375042024393e-01 4.875062848794e-01 7.875132236559e-01 5.929346207307e-01 9.857730681521e-01 1.000550757873e+00 2.966037037068e-10 4.446606552034e-10 2.222762683398e-05 4.216427769209e-04 4.218750000000e-04 +4.125010225558e-01 4.875012370566e-01 7.875026042315e-01 6.386035935863e-01 1.013890971166e+00 1.000117322190e+00 3.879549620607e-12 5.818641775114e-12 2.542667404106e-06 4.218255105073e-04 4.218750000000e-04 +4.875001382727e-01 4.875001382727e-01 7.875002912298e-01 6.894293072040e-01 1.046646778201e+00 1.000014240062e+00 1.637613718687e-14 2.456385598948e-14 1.652064566585e-07 4.218689925595e-04 4.218750000000e-04 +5.625000084296e-01 4.875000070129e-01 7.875000147536e-01 7.443537575111e-01 1.083613764013e+00 1.000000781250e+00 6.669211928077e-15 1.000381007664e-14 1.054293342936e-07 4.218746704104e-04 4.218750000000e-04 +6.375000001600e-01 4.875000001111e-01 7.875000002337e-01 8.025350461583e-01 1.124374826595e+00 1.000000013287e+00 6.666666879329e-15 1.000000018612e-14 1.054092563199e-07 4.218749943945e-04 4.218750000000e-04 +7.125000000005e-01 4.875000000003e-01 7.875000000007e-01 8.633148324922e-01 1.168532733817e+00 1.000000000040e+00 6.666666667111e-15 1.000000000027e-14 1.054092553404e-07 4.218749999831e-04 4.218750000000e-04 +7.875000000000e-01 4.875000000000e-01 7.875000000000e-01 9.261816776421e-01 1.215717380809e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 4.875000000000e-01 7.875000000000e-01 9.907383610217e-01 1.265590277301e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 4.875000000000e-01 7.875000000000e-01 1.056675210270e+00 1.317846254310e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 4.875000000000e-01 7.875000000000e-01 1.123749304783e+00 1.372213084765e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 4.875000000000e-01 7.875000000000e-01 1.191768643655e+00 1.428449771606e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 4.875000000000e-01 7.875000000000e-01 1.260580223548e+00 1.486344088696e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750088041264e-02 5.625143537242e-01 7.875255447675e-01 5.637629946861e-01 9.685170095764e-01 1.000992998832e+00 9.396318024873e-10 1.408049512210e-09 3.955375403184e-05 4.214564941937e-04 4.218750000000e-04 +1.125019802511e-01 5.625107782388e-01 7.875191663087e-01 5.736506525711e-01 9.743005226822e-01 1.000758515197e+00 5.006420776219e-10 7.503939312325e-10 2.887509367435e-05 4.215552439412e-04 4.218750000000e-04 +1.875018227896e-01 5.625059625707e-01 7.875105870116e-01 5.929332942895e-01 9.857701639492e-01 1.000434064710e+00 1.252041937315e-10 1.877248058838e-10 1.444240692020e-05 4.216919584023e-04 4.218750000000e-04 +2.625010022555e-01 5.625023405442e-01 7.875041470900e-01 6.207379956977e-01 1.002735479070e+00 1.000178913644e+00 1.195884487609e-11 1.793505848747e-11 4.464061241052e-06 4.217995343085e-04 4.218750000000e-04 +3.375003405545e-01 5.625006152171e-01 7.875010870285e-01 6.559827909283e-01 1.024925062658e+00 1.000049932585e+00 3.492600289159e-13 5.238638854957e-13 7.629357665519e-07 4.218539357424e-04 4.218750000000e-04 +4.125000679799e-01 5.625000991006e-01 7.875001744097e-01 6.975404415313e-01 1.052007220634e+00 1.000008592422e+00 8.966566355913e-15 1.344973396808e-14 1.222462631471e-07 4.218713751031e-04 4.218750000000e-04 +4.875000070129e-01 5.625000084296e-01 7.875000147536e-01 7.443537575111e-01 1.083613764013e+00 1.000000781250e+00 6.669211928077e-15 1.000381007664e-14 1.054293342936e-07 4.218746704104e-04 4.218750000000e-04 +5.625000002863e-01 5.625000002863e-01 7.875000004983e-01 7.954951292398e-01 1.119360867383e+00 1.000000028212e+00 6.666667364766e-15 1.000000076503e-14 1.054092593710e-07 4.218749880982e-04 4.218750000000e-04 +6.375000000032e-01 5.625000000027e-01 7.875000000046e-01 8.501838036608e-01 1.158865285533e+00 1.000000000279e+00 6.666666669774e-15 1.000000000187e-14 1.054092553488e-07 4.218749998821e-04 4.218750000000e-04 +7.125000000000e-01 5.625000000000e-01 7.875000000000e-01 9.077788827683e-01 1.201756526922e+00 1.000000000000e+00 6.666666666671e-15 1.000000000000e-14 1.054092553390e-07 4.218749999998e-04 4.218750000000e-04 +7.875000000000e-01 5.625000000000e-01 7.875000000000e-01 9.677615925423e-01 1.247685356971e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 5.625000000000e-01 7.875000000000e-01 1.029714766331e+00 1.296328951308e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 5.625000000000e-01 7.875000000000e-01 1.093303480283e+00 1.347393316742e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 5.625000000000e-01 7.875000000000e-01 1.158258390861e+00 1.400613704774e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 5.625000000000e-01 7.875000000000e-01 1.224362078799e+00 1.455753670784e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 5.625000000000e-01 7.875000000000e-01 1.291438151829e+00 1.512603302257e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750004106526e-02 6.375008302832e-01 7.875012392764e-01 6.386028199841e-01 1.013889423731e+00 1.000053345394e+00 2.331979512473e-13 3.497782678114e-13 6.234119984332e-07 4.218524961123e-04 4.218750000000e-04 +1.125000885026e-01 6.375005964975e-01 7.875008893743e-01 6.473509716126e-01 1.019421861259e+00 1.000038945031e+00 1.167838064920e-13 1.751688877803e-13 4.411712791351e-07 4.218585707049e-04 4.218750000000e-04 +1.875000748037e-01 6.375003020690e-01 7.875004494282e-01 6.645020039018e-01 1.030397918786e+00 1.000020345453e+00 2.816443910373e-14 4.224579914568e-14 2.166558949776e-07 4.218664169367e-04 4.218750000000e-04 +2.625000361066e-01 6.375001035585e-01 7.875001535907e-01 6.894292211628e-01 1.046646617965e+00 1.000007288283e+00 7.999074632138e-15 1.199852449957e-14 1.154629546149e-07 4.218719252780e-04 4.218750000000e-04 +3.375000101992e-01 6.375000224540e-01 7.875000331613e-01 7.213269269293e-01 1.067927356023e+00 1.000001666308e+00 6.687610179886e-15 1.003139855443e-14 1.055746105549e-07 4.218742970275e-04 4.218750000000e-04 +4.125000015674e-01 6.375000027585e-01 7.875000040525e-01 7.593171305918e-01 1.093946416052e+00 1.000000216725e+00 6.666743038437e-15 1.000011239038e-14 1.054098476866e-07 4.218749085691e-04 4.218750000000e-04 +4.875000001111e-01 6.375000001600e-01 7.875000002337e-01 8.025350461583e-01 1.124374826595e+00 1.000000013287e+00 6.666666879329e-15 1.000000018612e-14 1.054092563199e-07 4.218749943945e-04 4.218750000000e-04 +5.625000000027e-01 6.375000000032e-01 7.875000000046e-01 8.501838036608e-01 1.158865285533e+00 1.000000000279e+00 6.666666669774e-15 1.000000000187e-14 1.054092553488e-07 4.218749998821e-04 4.218750000000e-04 +6.375000000000e-01 6.375000000000e-01 7.875000000000e-01 9.015611460129e-01 1.197066727463e+00 1.000000000001e+00 6.666666666682e-15 1.000000000001e-14 1.054092553390e-07 4.218749999994e-04 4.218750000000e-04 +7.125000000000e-01 6.375000000000e-01 7.875000000000e-01 9.560661587986e-01 1.238635842369e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.875000000000e-01 6.375000000000e-01 7.875000000000e-01 1.013194206458e+00 1.283245397420e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 6.375000000000e-01 7.875000000000e-01 1.072526223456e+00 1.330589624941e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 6.375000000000e-01 7.875000000000e-01 1.133716234337e+00 1.380387173948e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 6.375000000000e-01 7.875000000000e-01 1.196479210016e+00 1.432382194109e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 6.375000000000e-01 7.875000000000e-01 1.260580223548e+00 1.486344088695e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 6.375000000000e-01 7.875000000000e-01 1.325825214725e+00 1.542066389621e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750000048611e-02 7.125000127339e-01 7.875000157268e-01 7.134861723834e-01 1.062647068858e+00 1.000000744700e+00 6.667793589957e-15 1.000168293668e-14 1.054181248209e-07 4.218746858300e-04 4.218750000000e-04 +1.125000009972e-01 7.125000086631e-01 7.875000106904e-01 7.213269110253e-01 1.067927328710e+00 1.000000514596e+00 6.667175052051e-15 1.000075743173e-14 1.054132472791e-07 4.218747829050e-04 4.218750000000e-04 +1.875000007613e-01 7.125000039237e-01 7.875000048336e-01 7.367581054028e-01 1.078410294596e+00 1.000000240157e+00 6.666748253051e-15 1.000011997798e-14 1.054098876765e-07 4.218748986840e-04 4.218750000000e-04 +2.625000003121e-01 7.125000011276e-01 7.875000013855e-01 7.593171285904e-01 1.093946412743e+00 1.000000071954e+00 6.666671251810e-15 1.000000615817e-14 1.054092877954e-07 4.218749696443e-04 4.218750000000e-04 +3.375000000691e-01 7.125000001888e-01 7.875000002311e-01 7.883923517613e-01 1.114324347163e+00 1.000000012654e+00 6.666666866188e-15 1.000000017274e-14 1.054092562494e-07 4.218749946616e-04 4.218750000000e-04 +4.125000000074e-01 7.125000000160e-01 7.875000000195e-01 8.232936900213e-01 1.139284314848e+00 1.000000001128e+00 6.666666679375e-15 1.000000000778e-14 1.054092553799e-07 4.218749995240e-04 4.218750000000e-04 +4.875000000003e-01 7.125000000005e-01 7.875000000007e-01 8.633148324922e-01 1.168532733817e+00 1.000000000040e+00 6.666666667111e-15 1.000000000027e-14 1.054092553404e-07 4.218749999831e-04 4.218750000000e-04 +5.625000000000e-01 7.125000000000e-01 7.875000000000e-01 9.077788827683e-01 1.201756526922e+00 1.000000000000e+00 6.666666666671e-15 1.000000000000e-14 1.054092553390e-07 4.218749999998e-04 4.218750000000e-04 +6.375000000000e-01 7.125000000000e-01 7.875000000000e-01 9.560661587986e-01 1.238635842369e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.125000000000e-01 7.125000000000e-01 7.875000000000e-01 1.007627163191e+00 1.278854467873e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.875000000000e-01 7.125000000000e-01 7.875000000000e-01 1.061985169388e+00 1.322107692285e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 7.125000000000e-01 7.875000000000e-01 1.118732541763e+00 1.368107726022e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 7.125000000000e-01 7.875000000000e-01 1.177523885108e+00 1.416587007564e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 7.125000000000e-01 7.875000000000e-01 1.238068051441e+00 1.467299815989e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 7.125000000000e-01 7.875000000000e-01 1.300120186752e+00 1.520022614963e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 7.125000000000e-01 7.875000000000e-01 1.363474422202e+00 1.574553508141e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750000000058e-02 7.875000000209e-01 7.875000000209e-01 7.883923515820e-01 1.114324346887e+00 1.000000001099e+00 6.666666679000e-15 1.000000000751e-14 1.054092553785e-07 4.218749995362e-04 4.218750000000e-04 +1.125000000011e-01 7.875000000134e-01 7.875000000134e-01 7.954951288483e-01 1.119360866764e+00 1.000000000716e+00 6.666666674664e-15 1.000000000483e-14 1.054092553644e-07 4.218749996978e-04 4.218750000000e-04 +1.875000000008e-01 7.875000000054e-01 7.875000000054e-01 8.095137429400e-01 1.129366525986e+00 1.000000000295e+00 6.666666669950e-15 1.000000000197e-14 1.054092553493e-07 4.218749998755e-04 4.218750000000e-04 +2.625000000003e-01 7.875000000013e-01 7.875000000013e-01 8.300978857955e-01 1.144210972681e+00 1.000000000072e+00 6.666666667466e-15 1.000000000048e-14 1.054092553415e-07 4.218749999697e-04 4.218750000000e-04 +3.375000000000e-01 7.875000000002e-01 7.875000000002e-01 8.567744744098e-01 1.163709048689e+00 1.000000000009e+00 6.666666666769e-15 1.000000000006e-14 1.054092553393e-07 4.218749999961e-04 4.218750000000e-04 +4.125000000000e-01 7.875000000000e-01 7.875000000000e-01 8.889952193347e-01 1.187631571658e+00 1.000000000001e+00 6.666666666672e-15 1.000000000000e-14 1.054092553390e-07 4.218749999998e-04 4.218750000000e-04 +4.875000000000e-01 7.875000000000e-01 7.875000000000e-01 9.261816776421e-01 1.215717380809e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +5.625000000000e-01 7.875000000000e-01 7.875000000000e-01 9.677615925423e-01 1.247685356971e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +6.375000000000e-01 7.875000000000e-01 7.875000000000e-01 1.013194206458e+00 1.283245397420e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.125000000000e-01 7.875000000000e-01 7.875000000000e-01 1.061985169388e+00 1.322107692285e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.875000000000e-01 7.875000000000e-01 7.875000000000e-01 1.113693180369e+00 1.363990010960e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 7.875000000000e-01 7.875000000000e-01 1.167930862680e+00 1.408622997824e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 7.875000000000e-01 7.875000000000e-01 1.224362078799e+00 1.455753670784e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 7.875000000000e-01 7.875000000000e-01 1.282697353237e+00 1.505147418029e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 7.875000000000e-01 7.875000000000e-01 1.342688534248e+00 1.556588818539e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 7.875000000000e-01 7.875000000000e-01 1.404123392014e+00 1.609881595025e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750000000000e-02 8.625000000000e-01 7.875000000000e-01 8.633148324916e-01 1.168532733816e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.125000000000e-01 8.625000000000e-01 7.875000000000e-01 8.698060128557e-01 1.173336588537e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.875000000000e-01 8.625000000000e-01 7.875000000000e-01 8.826451721955e-01 1.182885772169e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +2.625000000000e-01 8.625000000000e-01 7.875000000000e-01 9.015611460128e-01 1.197066727463e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +3.375000000000e-01 8.625000000000e-01 7.875000000000e-01 9.261816776421e-01 1.215717380809e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.125000000000e-01 8.625000000000e-01 7.875000000000e-01 9.560661587986e-01 1.238635842369e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.875000000000e-01 8.625000000000e-01 7.875000000000e-01 9.907383610217e-01 1.265590277301e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +5.625000000000e-01 8.625000000000e-01 7.875000000000e-01 1.029714766331e+00 1.296328951308e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +6.375000000000e-01 8.625000000000e-01 7.875000000000e-01 1.072526223456e+00 1.330589624941e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.125000000000e-01 8.625000000000e-01 7.875000000000e-01 1.118732541763e+00 1.368107726022e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.875000000000e-01 8.625000000000e-01 7.875000000000e-01 1.167930862680e+00 1.408622997824e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 8.625000000000e-01 7.875000000000e-01 1.219759197547e+00 1.451884551195e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 8.625000000000e-01 7.875000000000e-01 1.273896581360e+00 1.497654416079e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 8.625000000000e-01 7.875000000000e-01 1.330061088823e+00 1.545709788414e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 8.625000000000e-01 7.875000000000e-01 1.388006664249e+00 1.595844212321e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 8.625000000000e-01 7.875000000000e-01 1.447519429921e+00 1.647867940704e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750000000000e-02 9.375000000000e-01 7.875000000000e-01 9.382497002398e-01 1.224936222830e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.125000000000e-01 9.375000000000e-01 7.875000000000e-01 9.442258734011e-01 1.229519723307e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.875000000000e-01 9.375000000000e-01 7.875000000000e-01 9.560661587986e-01 1.238635842369e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +2.625000000000e-01 9.375000000000e-01 7.875000000000e-01 9.735566239310e-01 1.252185589280e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +3.375000000000e-01 9.375000000000e-01 7.875000000000e-01 9.963997691690e-01 1.270027066641e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.125000000000e-01 9.375000000000e-01 7.875000000000e-01 1.024237521281e+00 1.291982488271e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.875000000000e-01 9.375000000000e-01 7.875000000000e-01 1.056675210270e+00 1.317846254310e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +5.625000000000e-01 9.375000000000e-01 7.875000000000e-01 1.093303480283e+00 1.347393316742e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +6.375000000000e-01 9.375000000000e-01 7.875000000000e-01 1.133716234337e+00 1.380387173948e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.125000000000e-01 9.375000000000e-01 7.875000000000e-01 1.177523885108e+00 1.416587007564e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.875000000000e-01 9.375000000000e-01 7.875000000000e-01 1.224362078799e+00 1.455753670784e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 9.375000000000e-01 7.875000000000e-01 1.273896581360e+00 1.497654416079e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 9.375000000000e-01 7.875000000000e-01 1.325825214725e+00 1.542066389621e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 9.375000000000e-01 7.875000000000e-01 1.379877711973e+00 1.588779012324e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 9.375000000000e-01 7.875000000000e-01 1.435814228931e+00 1.637595417067e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 9.375000000000e-01 7.875000000000e-01 1.493423081381e+00 1.688333127674e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750000000000e-02 1.012500000000e+00 7.875000000000e-01 1.013194206458e+00 1.283245397420e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.125000000000e-01 1.012500000000e+00 7.875000000000e-01 1.018730828040e+00 1.287621353504e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.875000000000e-01 1.012500000000e+00 7.875000000000e-01 1.029714766331e+00 1.296328951308e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +2.625000000000e-01 1.012500000000e+00 7.875000000000e-01 1.045974426074e+00 1.309281768757e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +3.375000000000e-01 1.012500000000e+00 7.875000000000e-01 1.067268710307e+00 1.326355438787e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.125000000000e-01 1.012500000000e+00 7.875000000000e-01 1.093303480283e+00 1.347393316742e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.875000000000e-01 1.012500000000e+00 7.875000000000e-01 1.123749304783e+00 1.372213084765e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +5.625000000000e-01 1.012500000000e+00 7.875000000000e-01 1.158258390861e+00 1.400613704774e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +6.375000000000e-01 1.012500000000e+00 7.875000000000e-01 1.196479210016e+00 1.432382194109e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.125000000000e-01 1.012500000000e+00 7.875000000000e-01 1.238068051441e+00 1.467299815989e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.875000000000e-01 1.012500000000e+00 7.875000000000e-01 1.282697353237e+00 1.505147418029e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 1.012500000000e+00 7.875000000000e-01 1.330061088823e+00 1.545709788414e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 1.012500000000e+00 7.875000000000e-01 1.379877711973e+00 1.588779012324e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 1.012500000000e+00 7.875000000000e-01 1.431891231903e+00 1.634156892713e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 1.012500000000e+00 7.875000000000e-01 1.485870956712e+00 1.681656549358e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 1.012500000000e+00 7.875000000000e-01 1.541610359332e+00 1.731103333138e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750000000000e-02 1.087500000000e+00 7.875000000000e-01 1.088146359641e+00 1.343212101643e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.125000000000e-01 1.087500000000e+00 7.875000000000e-01 1.093303480283e+00 1.347393316742e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.875000000000e-01 1.087500000000e+00 7.875000000000e-01 1.103545422717e+00 1.355717061189e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +2.625000000000e-01 1.087500000000e+00 7.875000000000e-01 1.118732541763e+00 1.368107726022e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +3.375000000000e-01 1.087500000000e+00 7.875000000000e-01 1.138666983802e+00 1.384456120648e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.125000000000e-01 1.087500000000e+00 7.875000000000e-01 1.163104681445e+00 1.404624060025e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.875000000000e-01 1.087500000000e+00 7.875000000000e-01 1.191768643655e+00 1.428449771606e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +5.625000000000e-01 1.087500000000e+00 7.875000000000e-01 1.224362078799e+00 1.455753670784e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +6.375000000000e-01 1.087500000000e+00 7.875000000000e-01 1.260580223548e+00 1.486344088695e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.125000000000e-01 1.087500000000e+00 7.875000000000e-01 1.300120186752e+00 1.520022614963e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.875000000000e-01 1.087500000000e+00 7.875000000000e-01 1.342688534248e+00 1.556588818539e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 1.087500000000e+00 7.875000000000e-01 1.388006664249e+00 1.595844212321e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 1.087500000000e+00 7.875000000000e-01 1.435814228931e+00 1.637595417067e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 1.087500000000e+00 7.875000000000e-01 1.485870956712e+00 1.681656549358e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 1.087500000000e+00 7.875000000000e-01 1.537957249081e+00 1.727850905026e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 1.087500000000e+00 7.875000000000e-01 1.591873895759e+00 1.776012035432e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750000000000e-02 1.162500000000e+00 7.875000000000e-01 1.163104681445e+00 1.404624060025e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.125000000000e-01 1.162500000000e+00 7.875000000000e-01 1.167930862680e+00 1.408622997825e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.875000000000e-01 1.162500000000e+00 7.875000000000e-01 1.177523885108e+00 1.416587007564e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +2.625000000000e-01 1.162500000000e+00 7.875000000000e-01 1.191768643655e+00 1.428449771606e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.375000000000e-01 1.162500000000e+00 7.875000000000e-01 1.210500929368e+00 1.444115213548e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +4.125000000000e-01 1.162500000000e+00 7.875000000000e-01 1.233516315255e+00 1.463461222582e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +4.875000000000e-01 1.162500000000e+00 7.875000000000e-01 1.260580223548e+00 1.486344088696e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +5.625000000000e-01 1.162500000000e+00 7.875000000000e-01 1.291438151829e+00 1.512603302257e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +6.375000000000e-01 1.162500000000e+00 7.875000000000e-01 1.325825214725e+00 1.542066389621e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +7.125000000000e-01 1.162500000000e+00 7.875000000000e-01 1.363474422202e+00 1.574553508141e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +7.875000000000e-01 1.162500000000e+00 7.875000000000e-01 1.404123392014e+00 1.609881595025e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +8.625000000000e-01 1.162500000000e+00 7.875000000000e-01 1.447519429921e+00 1.647867940704e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +9.375000000000e-01 1.162500000000e+00 7.875000000000e-01 1.493423081381e+00 1.688333127674e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.012500000000e+00 1.162500000000e+00 7.875000000000e-01 1.541610359332e+00 1.731103333138e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.087500000000e+00 1.162500000000e+00 7.875000000000e-01 1.591873895759e+00 1.776012035432e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.162500000000e+00 1.162500000000e+00 7.875000000000e-01 1.644023266259e+00 1.822901190411e+00 9.999999999976e-01 6.666666666640e-15 9.999999999984e-15 1.054092553389e-07 4.218750000010e-04 4.218750000000e-04 +3.753257489503e-02 3.753257489503e-02 8.635638511212e-01 5.307907644734e-02 8.651935698558e-01 1.027166444206e+00 6.824622705535e-06 9.966188163612e-06 3.327693255697e-03 4.107172721420e-04 4.218750000000e-04 +1.125775062396e-01 3.752580000480e-02 8.633463760082e-01 1.186670998092e-01 8.714636226164e-01 1.021885614085e+00 4.127247548338e-06 6.058282098480e-06 2.594498902267e-03 4.128397485834e-04 4.218750000000e-04 +1.875794452057e-01 3.751581324251e-02 8.630236485609e-01 1.912942354253e-01 8.839701932092e-01 1.013940257291e+00 1.390035593179e-06 2.056386828292e-06 1.511580052018e-03 4.160748100950e-04 4.218750000000e-04 +2.625508987690e-01 3.750718541688e-02 8.627415290194e-01 2.652164463270e-01 9.025866768888e-01 1.006752676412e+00 2.165422966309e-07 3.226347965658e-07 5.987345883572e-04 4.190453225348e-04 4.218750000000e-04 +3.375210140878e-01 3.750227592491e-02 8.625781317715e-01 3.395980795741e-01 9.270209755236e-01 1.002336410674e+00 1.226886366941e-08 1.836039807407e-08 1.428301169380e-04 4.208916243162e-04 4.218750000000e-04 +4.125053153564e-01 3.750045874774e-02 8.625161835933e-01 4.142063732049e-01 9.568182097786e-01 1.000524175313e+00 1.936005094562e-10 2.902486230215e-10 1.795824239796e-05 4.216539793934e-04 4.218750000000e-04 +4.875007285973e-01 3.750005051533e-02 8.625018457296e-01 4.889409107158e-01 9.914497708197e-01 1.000065018012e+00 5.280092662219e-13 7.919624075118e-13 9.380608885188e-07 4.218475723096e-04 4.218750000000e-04 +5.625000431803e-01 3.750000237896e-02 8.625000919329e-01 5.637486574319e-01 1.030397475414e+00 1.000003498748e+00 6.782872759171e-15 1.017427354154e-14 1.063237902799e-07 4.218735239709e-04 4.218750000000e-04 +6.375000007617e-01 3.750000003292e-02 8.625000013631e-01 6.386019894845e-01 1.073181603143e+00 1.000000055663e+00 6.666668566464e-15 1.000000229306e-14 1.054092674245e-07 4.218749765171e-04 4.218750000000e-04 +7.125000000022e-01 3.750000000007e-02 8.625000000033e-01 7.134861596437e-01 1.119360866749e+00 1.000000000145e+00 6.666666668281e-15 1.000000000097e-14 1.054092553441e-07 4.218749999387e-04 4.218750000000e-04 +7.875000000000e-01 3.750000000000e-02 8.625000000000e-01 7.883923515611e-01 1.168532733816e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 3.750000000000e-02 8.625000000000e-01 8.633148324916e-01 1.220335507145e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 3.750000000000e-02 8.625000000000e-01 9.382497002398e-01 1.274448410097e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 3.750000000000e-02 8.625000000000e-01 1.013194206458e+00 1.330589624941e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 3.750000000000e-02 8.625000000000e-01 1.088146359641e+00 1.388513143618e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 3.750000000000e-02 8.625000000000e-01 1.163104681445e+00 1.448005093223e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.752580000480e-02 1.125775062396e-01 8.633463760082e-01 1.186670998092e-01 8.714636226164e-01 1.021885614085e+00 4.127247548338e-06 6.058282098480e-06 2.594498902267e-03 4.128397485834e-04 4.218750000000e-04 +1.125610454361e-01 1.125610454361e-01 8.631696333854e-01 1.591853570507e-01 8.777253522020e-01 1.017556747593e+00 2.468798165007e-06 3.639302924647e-06 2.010887842789e-03 4.145960419386e-04 4.218750000000e-04 +1.875619216442e-01 1.125370242651e-01 8.629099387331e-01 2.187328422558e-01 8.902008866799e-01 1.011086194257e+00 8.117955180759e-07 1.204341710954e-06 1.156787558982e-03 4.172492932809e-04 4.218750000000e-04 +2.625390954762e-01 1.125165764885e-01 8.626862418681e-01 2.856339556813e-01 9.087432577723e-01 1.005297898964e+00 1.225094471748e-07 1.827957374143e-07 4.506732462713e-04 4.196517275473e-04 4.218750000000e-04 +3.375158417827e-01 1.125051514156e-01 8.625590639033e-01 3.557728946243e-01 9.330501011581e-01 1.001798508180e+00 6.706586493273e-09 1.004181944549e-08 1.056294332166e-04 4.211176165219e-04 4.218750000000e-04 +4.125039148035e-01 1.125010139433e-01 8.625119321344e-01 4.275698280591e-01 9.626748105880e-01 1.000393524846e+00 1.005238370870e-10 1.507264410311e-10 1.294116777450e-05 4.217090470123e-04 4.218750000000e-04 +4.875005217075e-01 1.125001086550e-01 8.625013227533e-01 5.003129351841e-01 9.971065965400e-01 1.000047398591e+00 2.606079770129e-13 3.908934377213e-13 6.590341735544e-07 4.218550046673e-04 4.218750000000e-04 +5.625000299308e-01 1.125000049667e-01 8.625000637247e-01 5.736397256028e-01 1.035842118624e+00 1.000002464641e+00 6.719885991121e-15 1.007980414358e-14 1.058290242880e-07 4.218739602320e-04 4.218750000000e-04 +6.375000005087e-01 1.125000000665e-01 8.625000009101e-01 6.473503693238e-01 1.078410289377e+00 1.000000037743e+00 6.666667685683e-15 1.000000115110e-14 1.054092614058e-07 4.218749840773e-04 4.218750000000e-04 +7.125000000014e-01 1.125000000001e-01 8.625000000021e-01 7.213269023141e-01 1.124374826295e+00 1.000000000095e+00 6.666666667718e-15 1.000000000063e-14 1.054092553423e-07 4.218749999601e-04 4.218750000000e-04 +7.875000000000e-01 1.125000000000e-01 8.625000000000e-01 7.954951288349e-01 1.173336588537e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 1.125000000000e-01 8.625000000000e-01 8.698060128557e-01 1.224936222830e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 1.125000000000e-01 8.625000000000e-01 9.442258734011e-01 1.278854467873e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 1.125000000000e-01 8.625000000000e-01 1.018730828040e+00 1.334810379792e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 1.125000000000e-01 8.625000000000e-01 1.093303480283e+00 1.392558347072e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 1.125000000000e-01 8.625000000000e-01 1.167930862680e+00 1.451884551195e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.751581324251e-02 1.875794452057e-01 8.630236485609e-01 1.912942354253e-01 8.839701932092e-01 1.013940257291e+00 1.390035593179e-06 2.056386828292e-06 1.511580052018e-03 4.160748100950e-04 4.218750000000e-04 +1.125370242651e-01 1.875619216442e-01 8.629099387331e-01 2.187328422558e-01 8.902008866799e-01 1.011086194257e+00 8.117955180759e-07 1.204341710954e-06 1.156787558982e-03 4.172492932809e-04 4.218750000000e-04 +1.875368119247e-01 1.875368119247e-01 8.627458839410e-01 2.652171028682e-01 9.025910324787e-01 1.006876970631e+00 2.539094756885e-07 3.782629106058e-07 6.482994083719e-04 4.189935933640e-04 4.218750000000e-04 +2.625225893542e-01 1.875160156460e-01 8.626084424299e-01 3.226148881329e-01 9.209634580136e-01 1.003196761164e+00 3.581502868952e-08 5.355135215144e-08 2.439292979338e-04 4.205306639053e-04 4.218750000000e-04 +3.375088212344e-01 1.875047942523e-01 8.625330667307e-01 3.860961697281e-01 9.450045203504e-01 1.001044161532e+00 1.778481556111e-09 2.664939706640e-09 5.441547682864e-05 4.214349538330e-04 4.218750000000e-04 +4.125020814656e-01 1.875009005935e-01 8.625063595632e-01 4.531164915746e-01 9.742852637825e-01 1.000217300928e+00 2.315471655029e-11 3.472452915301e-11 6.211506272235e-06 4.217833460874e-04 4.218750000000e-04 +4.875002625589e-01 1.875000915179e-01 8.625006668447e-01 5.223148383056e-01 1.008325438845e+00 1.000024697944e+00 5.603376791463e-14 8.404857604495e-14 3.055933682471e-07 4.218645808124e-04 4.218750000000e-04 +5.625000140968e-01 1.875000039342e-01 8.625000300126e-01 5.929270758991e-01 1.046646463284e+00 1.000001197468e+00 6.675379008520e-15 1.001305652246e-14 1.054780468074e-07 4.218744948188e-04 4.218750000000e-04 +6.375000002218e-01 1.875000000491e-01 8.625000003965e-01 6.645016932267e-01 1.088792336024e+00 1.000000016937e+00 6.666666964132e-15 1.000000027683e-14 1.054092567980e-07 4.218749928547e-04 4.218750000000e-04 +7.125000000006e-01 1.875000000001e-01 8.625000000009e-01 7.367581014151e-01 1.134336259670e+00 1.000000000039e+00 6.666666667100e-15 1.000000000026e-14 1.054092553403e-07 4.218749999835e-04 4.218750000000e-04 +7.875000000000e-01 1.875000000000e-01 8.625000000000e-01 8.095137429346e-01 1.182885772169e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 1.875000000000e-01 8.625000000000e-01 8.826451721955e-01 1.234086200393e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 1.875000000000e-01 8.625000000000e-01 9.560661587986e-01 1.287621353504e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 1.875000000000e-01 8.625000000000e-01 1.029714766331e+00 1.343212101643e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 1.875000000000e-01 8.625000000000e-01 1.103545422717e+00 1.400613704774e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 1.875000000000e-01 8.625000000000e-01 1.177523885108e+00 1.459612534202e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750718541688e-02 2.625508987690e-01 8.627415290194e-01 2.652164463270e-01 9.025866768888e-01 1.006752676412e+00 2.165422966309e-07 3.226347965658e-07 5.987345883572e-04 4.190453225348e-04 4.218750000000e-04 +1.125165764885e-01 2.625390954762e-01 8.626862418681e-01 2.856339556813e-01 9.087432577723e-01 1.005297898964e+00 1.225094471748e-07 1.827957374143e-07 4.506732462713e-04 4.196517275473e-04 4.218750000000e-04 +1.875160156460e-01 2.625225893542e-01 8.626084424299e-01 3.226148881329e-01 9.209634580136e-01 1.003196761164e+00 3.581502868952e-08 5.355135215144e-08 2.439292979338e-04 4.205306639053e-04 4.218750000000e-04 +2.625094263820e-01 2.625094263820e-01 8.625457729587e-01 3.712443910402e-01 9.390461161879e-01 1.001423799321e+00 4.480421750331e-09 6.711077398055e-09 8.635249078345e-05 4.212751886725e-04 4.218750000000e-04 +3.375034845468e-01 2.625026703271e-01 8.625131665003e-01 4.275701743692e-01 9.626760703354e-01 1.000438430694e+00 1.847916125997e-10 2.770659446853e-10 1.754568464467e-05 4.216901181090e-04 4.218750000000e-04 +4.125007677788e-01 2.625004684105e-01 8.625023561252e-01 4.889410796137e-01 9.914502981266e-01 1.000084658709e+00 1.880956037614e-12 2.821195217677e-12 1.770497487424e-06 4.218392876306e-04 4.218750000000e-04 +4.875000892980e-01 2.625000440024e-01 8.625002273867e-01 5.536809642446e-01 1.024924022749e+00 1.000008822868e+00 9.692276443811e-15 1.453828639633e-14 1.270970162965e-07 4.218712778854e-04 4.218750000000e-04 +5.625000043182e-01 2.625000017148e-01 8.625000091926e-01 6.207354555350e-01 1.062647058818e+00 1.000000383160e+00 6.667083117545e-15 1.000062084448e-14 1.054125274259e-07 4.218748383546e-04 4.218750000000e-04 +6.375000000599e-01 2.625000000191e-01 8.625000001070e-01 6.894291117196e-01 1.104182389948e+00 1.000000004766e+00 6.666666726826e-15 1.000000004258e-14 1.054092555634e-07 4.218749979894e-04 4.218750000000e-04 +7.125000000001e-01 2.625000000000e-01 8.625000000002e-01 7.593171274245e-01 1.149116508454e+00 1.000000000010e+00 6.666666666772e-15 1.000000000006e-14 1.054092553393e-07 4.218749999960e-04 4.218750000000e-04 +7.875000000000e-01 2.625000000000e-01 8.625000000000e-01 8.300978857942e-01 1.197066727463e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 2.625000000000e-01 8.625000000000e-01 9.015611460128e-01 1.247685356971e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 2.625000000000e-01 8.625000000000e-01 9.735566239310e-01 1.300660889702e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 2.625000000000e-01 8.625000000000e-01 1.045974426074e+00 1.355717061189e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 2.625000000000e-01 8.625000000000e-01 1.118732541763e+00 1.412610615138e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 2.625000000000e-01 8.625000000000e-01 1.191768643655e+00 1.471128393445e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750227592491e-02 3.375210140878e-01 8.625781317715e-01 3.395980795741e-01 9.270209755236e-01 1.002336410674e+00 1.226886366941e-08 1.836039807407e-08 1.428301169380e-04 4.208916243162e-04 4.218750000000e-04 +1.125051514156e-01 3.375158417827e-01 8.625590639033e-01 3.557728946243e-01 9.330501011581e-01 1.001798508180e+00 6.706586493273e-09 1.004181944549e-08 1.056294332166e-04 4.211176165219e-04 4.218750000000e-04 +1.875047942523e-01 3.375088212344e-01 8.625330667307e-01 3.860961697281e-01 9.450045203504e-01 1.001044161532e+00 1.778481556111e-09 2.664939706640e-09 5.441547682864e-05 4.214349538330e-04 4.218750000000e-04 +2.625026703271e-01 3.375034845468e-01 8.625131665003e-01 4.275701743692e-01 9.626760703354e-01 1.000438430694e+00 1.847916125997e-10 2.770659446853e-10 1.754568464467e-05 4.216901181090e-04 4.218750000000e-04 +3.375009178493e-01 3.375009178493e-01 8.625035066863e-01 4.772983753359e-01 9.857616538212e-01 1.000124656241e+00 5.776376177515e-12 8.663484308888e-12 3.102594668426e-06 4.218224172033e-04 4.218750000000e-04 +4.125001847146e-01 3.375001471222e-01 8.625005708965e-01 5.329753762577e-01 1.013888547373e+00 1.000021797130e+00 4.839889986203e-14 7.259676739184e-14 2.840124555012e-07 4.218658045360e-04 4.218750000000e-04 +4.875000192186e-01 3.375000124013e-01 8.625000491041e-01 5.929270841419e-01 1.046646483687e+00 1.000002015596e+00 6.713706167496e-15 1.007053895311e-14 1.057803749553e-07 4.218741496723e-04 4.218750000000e-04 +5.625000007970e-01 3.375000004176e-01 8.625000016962e-01 6.559820890684e-01 1.083613747654e+00 1.000000074505e+00 6.666672917832e-15 1.000000863169e-14 1.054093008320e-07 4.218749685681e-04 4.218750000000e-04 +6.375000000092e-01 3.375000000039e-01 8.625000000163e-01 7.213269023226e-01 1.124374826311e+00 1.000000000764e+00 6.666666675220e-15 1.000000000519e-14 1.054092553663e-07 4.218749996776e-04 4.218750000000e-04 +7.125000000000e-01 3.375000000000e-01 8.625000000000e-01 7.883923515611e-01 1.168532733816e+00 1.000000000001e+00 6.666666666680e-15 1.000000000001e-14 1.054092553390e-07 4.218749999995e-04 4.218750000000e-04 +7.875000000000e-01 3.375000000000e-01 8.625000000000e-01 8.567744744097e-01 1.215717380809e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 3.375000000000e-01 8.625000000000e-01 9.261816776421e-01 1.265590277301e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 3.375000000000e-01 8.625000000000e-01 9.963997691690e-01 1.317846254310e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 3.375000000000e-01 8.625000000000e-01 1.067268710307e+00 1.372213084765e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 3.375000000000e-01 8.625000000000e-01 1.138666983802e+00 1.428449771606e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 3.375000000000e-01 8.625000000000e-01 1.210500929368e+00 1.486344088696e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750045874774e-02 4.125053153564e-01 8.625161835933e-01 4.142063732049e-01 9.568182097786e-01 1.000524175313e+00 1.936005094562e-10 2.902486230215e-10 1.795824239796e-05 4.216539793934e-04 4.218750000000e-04 +1.125010139433e-01 4.125039148035e-01 8.625119321344e-01 4.275698280591e-01 9.626748105880e-01 1.000393524846e+00 1.005238370870e-10 1.507264410311e-10 1.294116777450e-05 4.217090470123e-04 4.218750000000e-04 +1.875009005935e-01 4.125020814656e-01 8.625063595632e-01 4.531164915746e-01 9.742852637825e-01 1.000217300928e+00 2.315471655029e-11 3.472452915301e-11 6.211506272235e-06 4.217833460874e-04 4.218750000000e-04 +2.625004684105e-01 4.125007677788e-01 8.625023561252e-01 4.889410796137e-01 9.914502981266e-01 1.000084658709e+00 1.880956037614e-12 2.821195217677e-12 1.770497487424e-06 4.218392876306e-04 4.218750000000e-04 +3.375001471222e-01 4.125001847146e-01 8.625005708965e-01 5.329753762577e-01 1.013888547373e+00 1.000021797130e+00 4.839889986203e-14 7.259676739184e-14 2.840124555012e-07 4.218658045360e-04 4.218750000000e-04 +4.125000263845e-01 4.125000263845e-01 8.625000823540e-01 5.833631317923e-01 1.041258342389e+00 1.000003360081e+00 6.872127141819e-15 1.030815607648e-14 1.070210575151e-07 4.218735824704e-04 4.218750000000e-04 +4.875000023523e-01 4.125000019097e-01 8.625000060331e-01 6.386019917515e-01 1.073181608245e+00 1.000000263317e+00 6.666831945794e-15 1.000024528546e-14 1.054105480989e-07 4.218748889132e-04 4.218750000000e-04 +5.625000000782e-01 4.125000000519e-01 8.625000001663e-01 6.975403215089e-01 1.109264959519e+00 1.000000007725e+00 6.666666775488e-15 1.000000008598e-14 1.054092557921e-07 4.218749967409e-04 4.218750000000e-04 +6.375000000007e-01 4.125000000004e-01 8.625000000012e-01 7.593171274251e-01 1.149116508455e+00 1.000000000060e+00 6.666666667332e-15 1.000000000040e-14 1.054092553410e-07 4.218749999748e-04 4.218750000000e-04 +7.125000000000e-01 4.125000000000e-01 8.625000000000e-01 8.232936900038e-01 1.192358482169e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.875000000000e-01 4.125000000000e-01 8.625000000000e-01 8.889952193347e-01 1.238635842369e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 4.125000000000e-01 8.625000000000e-01 9.560661587986e-01 1.287621353504e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 4.125000000000e-01 8.625000000000e-01 1.024237521281e+00 1.339017830352e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 4.125000000000e-01 8.625000000000e-01 1.093303480283e+00 1.392558347072e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 4.125000000000e-01 8.625000000000e-01 1.163104681445e+00 1.448005093223e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 4.125000000000e-01 8.625000000000e-01 1.233516315255e+00 1.505147418029e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750005051533e-02 4.875007285973e-01 8.625018457296e-01 4.889409107158e-01 9.914497708197e-01 1.000065018012e+00 5.280092662219e-13 7.919624075118e-13 9.380608885188e-07 4.218475723096e-04 4.218750000000e-04 +1.125001086550e-01 4.875005217075e-01 8.625013227533e-01 5.003129351841e-01 9.971065965400e-01 1.000047398591e+00 2.606079770129e-13 3.908934377213e-13 6.590341735544e-07 4.218550046673e-04 4.218750000000e-04 +1.875000915179e-01 4.875002625589e-01 8.625006668447e-01 5.223148383056e-01 1.008325438845e+00 1.000024697944e+00 5.603376791463e-14 8.404857604495e-14 3.055933682471e-07 4.218645808124e-04 4.218750000000e-04 +2.625000440024e-01 4.875000892980e-01 8.625002273867e-01 5.536809642446e-01 1.024924022749e+00 1.000008822868e+00 9.692276443811e-15 1.453828639633e-14 1.270970162965e-07 4.218712778854e-04 4.218750000000e-04 +3.375000124013e-01 4.875000192186e-01 8.625000491041e-01 5.929270841419e-01 1.046646483687e+00 1.000002015596e+00 6.713706167496e-15 1.007053895311e-14 1.057803749553e-07 4.218741496723e-04 4.218750000000e-04 +4.125000019097e-01 4.875000023523e-01 8.625000060331e-01 6.386019917515e-01 1.073181608245e+00 1.000000263317e+00 6.666831945794e-15 1.000024528546e-14 1.054105480989e-07 4.218748889132e-04 4.218750000000e-04 +4.875000001359e-01 4.875000001359e-01 8.625000003499e-01 6.894291118491e-01 1.104182390218e+00 1.000000016227e+00 6.666666975521e-15 1.000000030101e-14 1.054092569254e-07 4.218749931543e-04 4.218750000000e-04 +5.625000000033e-01 4.875000000027e-01 8.625000000070e-01 7.443537465522e-01 1.139284314830e+00 1.000000000344e+00 6.666666670500e-15 1.000000000231e-14 1.054092553511e-07 4.218749998547e-04 4.218750000000e-04 +6.375000000000e-01 4.875000000000e-01 8.625000000000e-01 8.025350459637e-01 1.178120855430e+00 1.000000000002e+00 6.666666666687e-15 1.000000000001e-14 1.054092553390e-07 4.218749999992e-04 4.218750000000e-04 +7.125000000000e-01 4.875000000000e-01 8.625000000000e-01 8.633148324916e-01 1.220335507145e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.875000000000e-01 4.875000000000e-01 8.625000000000e-01 9.261816776421e-01 1.265590277301e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 4.875000000000e-01 8.625000000000e-01 9.907383610217e-01 1.313570991610e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 4.875000000000e-01 8.625000000000e-01 1.056675210270e+00 1.363990010960e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 4.875000000000e-01 8.625000000000e-01 1.123749304783e+00 1.416587007564e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 4.875000000000e-01 8.625000000000e-01 1.191768643655e+00 1.471128393445e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 4.875000000000e-01 8.625000000000e-01 1.260580223548e+00 1.527405889081e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750000237896e-02 5.625000431803e-01 8.625000919329e-01 5.637486574319e-01 1.030397475414e+00 1.000003498748e+00 6.782872759171e-15 1.017427354154e-14 1.063237902799e-07 4.218735239709e-04 4.218750000000e-04 +1.125000049667e-01 5.625000299308e-01 8.625000637247e-01 5.736397256028e-01 1.035842118624e+00 1.000002464641e+00 6.719885991121e-15 1.007980414358e-14 1.058290242880e-07 4.218739602320e-04 4.218750000000e-04 +1.875000039342e-01 5.625000140968e-01 8.625000300126e-01 5.929270758991e-01 1.046646463284e+00 1.000001197468e+00 6.675379008520e-15 1.001305652246e-14 1.054780468074e-07 4.218744948188e-04 4.218750000000e-04 +2.625000017148e-01 5.625000043182e-01 8.625000091926e-01 6.207354555350e-01 1.062647058818e+00 1.000000383160e+00 6.667083117545e-15 1.000062084448e-14 1.054125274259e-07 4.218748383546e-04 4.218750000000e-04 +3.375000004176e-01 5.625000007970e-01 8.625000016962e-01 6.559820890684e-01 1.083613747654e+00 1.000000074505e+00 6.666672917832e-15 1.000000863169e-14 1.054093008320e-07 4.218749685681e-04 4.218750000000e-04 +4.125000000519e-01 5.625000000782e-01 8.625000001663e-01 6.975403215089e-01 1.109264959519e+00 1.000000007725e+00 6.666666775488e-15 1.000000008598e-14 1.054092557921e-07 4.218749967409e-04 4.218750000000e-04 +4.875000000027e-01 5.625000000033e-01 8.625000000070e-01 7.443537465522e-01 1.139284314830e+00 1.000000000344e+00 6.666666670500e-15 1.000000000231e-14 1.054092553511e-07 4.218749998547e-04 4.218750000000e-04 +5.625000000000e-01 5.625000000000e-01 8.625000000001e-01 7.954951288349e-01 1.173336588537e+00 1.000000000005e+00 6.666666666721e-15 1.000000000003e-14 1.054092553391e-07 4.218749999979e-04 4.218750000000e-04 +6.375000000000e-01 5.625000000000e-01 8.625000000000e-01 8.501838036566e-01 1.211081644647e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.125000000000e-01 5.625000000000e-01 8.625000000000e-01 9.077788827683e-01 1.252185589280e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.875000000000e-01 5.625000000000e-01 8.625000000000e-01 9.677615925423e-01 1.296328951308e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 5.625000000000e-01 8.625000000000e-01 1.029714766331e+00 1.343212101643e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 5.625000000000e-01 8.625000000000e-01 1.093303480283e+00 1.392558347072e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 5.625000000000e-01 8.625000000000e-01 1.158258390861e+00 1.444115213548e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 5.625000000000e-01 8.625000000000e-01 1.224362078799e+00 1.497654416079e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 5.625000000000e-01 8.625000000000e-01 1.291438151829e+00 1.552970943064e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750000003292e-02 6.375000007617e-01 8.625000013631e-01 6.386019894845e-01 1.073181603143e+00 1.000000055663e+00 6.666668566464e-15 1.000000229306e-14 1.054092674245e-07 4.218749765171e-04 4.218750000000e-04 +1.125000000665e-01 6.375000005087e-01 8.625000009101e-01 6.473503693238e-01 1.078410289377e+00 1.000000037743e+00 6.666667685683e-15 1.000000115110e-14 1.054092614058e-07 4.218749840773e-04 4.218750000000e-04 +1.875000000491e-01 6.375000002218e-01 8.625000003965e-01 6.645016932267e-01 1.088792336024e+00 1.000000016937e+00 6.666666964132e-15 1.000000027683e-14 1.054092567980e-07 4.218749928547e-04 4.218750000000e-04 +2.625000000191e-01 6.375000000599e-01 8.625000001070e-01 6.894291117196e-01 1.104182389948e+00 1.000000004766e+00 6.666666726826e-15 1.000000004258e-14 1.054092555634e-07 4.218749979894e-04 4.218750000000e-04 +3.375000000039e-01 6.375000000092e-01 8.625000000163e-01 7.213269023226e-01 1.124374826311e+00 1.000000000764e+00 6.666666675220e-15 1.000000000519e-14 1.054092553663e-07 4.218749996777e-04 4.218750000000e-04 +4.125000000004e-01 6.375000000007e-01 8.625000000012e-01 7.593171274251e-01 1.149116508455e+00 1.000000000060e+00 6.666666667332e-15 1.000000000040e-14 1.054092553410e-07 4.218749999748e-04 4.218750000000e-04 +4.875000000000e-01 6.375000000000e-01 8.625000000000e-01 8.025350459637e-01 1.178120855430e+00 1.000000000002e+00 6.666666666686e-15 1.000000000001e-14 1.054092553390e-07 4.218749999992e-04 4.218750000000e-04 +5.625000000000e-01 6.375000000000e-01 8.625000000000e-01 8.501838036566e-01 1.211081644647e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +6.375000000000e-01 6.375000000000e-01 8.625000000000e-01 9.015611460128e-01 1.247685356971e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.125000000000e-01 6.375000000000e-01 8.625000000000e-01 9.560661587986e-01 1.287621353504e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.875000000000e-01 6.375000000000e-01 8.625000000000e-01 1.013194206458e+00 1.330589624941e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 6.375000000000e-01 8.625000000000e-01 1.072526223456e+00 1.376306197763e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 6.375000000000e-01 8.625000000000e-01 1.133716234337e+00 1.424506493492e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 6.375000000000e-01 8.625000000000e-01 1.196479210016e+00 1.474947032947e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 6.375000000000e-01 8.625000000000e-01 1.260580223548e+00 1.527405889081e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 6.375000000000e-01 8.625000000000e-01 1.325825214725e+00 1.581682253172e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750000000007e-02 7.125000000022e-01 8.625000000033e-01 7.134861596437e-01 1.119360866749e+00 1.000000000145e+00 6.666666668281e-15 1.000000000097e-14 1.054092553441e-07 4.218749999387e-04 4.218750000000e-04 +1.125000000001e-01 7.125000000014e-01 8.625000000021e-01 7.213269023141e-01 1.124374826295e+00 1.000000000095e+00 6.666666667718e-15 1.000000000063e-14 1.054092553423e-07 4.218749999601e-04 4.218750000000e-04 +1.875000000001e-01 7.125000000006e-01 8.625000000009e-01 7.367581014151e-01 1.134336259670e+00 1.000000000039e+00 6.666666667100e-15 1.000000000026e-14 1.054092553403e-07 4.218749999835e-04 4.218750000000e-04 +2.625000000000e-01 7.125000000001e-01 8.625000000002e-01 7.593171274245e-01 1.149116508454e+00 1.000000000010e+00 6.666666666772e-15 1.000000000006e-14 1.054092553393e-07 4.218749999960e-04 4.218750000000e-04 +3.375000000000e-01 7.125000000000e-01 8.625000000000e-01 7.883923515611e-01 1.168532733816e+00 1.000000000001e+00 6.666666666680e-15 1.000000000001e-14 1.054092553390e-07 4.218749999995e-04 4.218750000000e-04 +4.125000000000e-01 7.125000000000e-01 8.625000000000e-01 8.232936900038e-01 1.192358482169e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.875000000000e-01 7.125000000000e-01 8.625000000000e-01 8.633148324916e-01 1.220335507145e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +5.625000000000e-01 7.125000000000e-01 8.625000000000e-01 9.077788827683e-01 1.252185589280e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +6.375000000000e-01 7.125000000000e-01 8.625000000000e-01 9.560661587986e-01 1.287621353504e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.125000000000e-01 7.125000000000e-01 8.625000000000e-01 1.007627163191e+00 1.326355438787e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.875000000000e-01 7.125000000000e-01 8.625000000000e-01 1.061985169388e+00 1.368107726022e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 7.125000000000e-01 8.625000000000e-01 1.118732541763e+00 1.412610615138e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 7.125000000000e-01 8.625000000000e-01 1.177523885108e+00 1.459612534202e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 7.125000000000e-01 8.625000000000e-01 1.238068051441e+00 1.508879965405e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 7.125000000000e-01 8.625000000000e-01 1.300120186752e+00 1.560198304704e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 7.125000000000e-01 8.625000000000e-01 1.363474422202e+00 1.613371857322e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750000000000e-02 7.875000000000e-01 8.625000000000e-01 7.883923515611e-01 1.168532733816e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.125000000000e-01 7.875000000000e-01 8.625000000000e-01 7.954951288349e-01 1.173336588537e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.875000000000e-01 7.875000000000e-01 8.625000000000e-01 8.095137429346e-01 1.182885772169e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +2.625000000000e-01 7.875000000000e-01 8.625000000000e-01 8.300978857942e-01 1.197066727463e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +3.375000000000e-01 7.875000000000e-01 8.625000000000e-01 8.567744744097e-01 1.215717380809e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.125000000000e-01 7.875000000000e-01 8.625000000000e-01 8.889952193347e-01 1.238635842369e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.875000000000e-01 7.875000000000e-01 8.625000000000e-01 9.261816776421e-01 1.265590277301e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +5.625000000000e-01 7.875000000000e-01 8.625000000000e-01 9.677615925423e-01 1.296328951308e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +6.375000000000e-01 7.875000000000e-01 8.625000000000e-01 1.013194206458e+00 1.330589624941e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.125000000000e-01 7.875000000000e-01 8.625000000000e-01 1.061985169388e+00 1.368107726022e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.875000000000e-01 7.875000000000e-01 8.625000000000e-01 1.113693180369e+00 1.408622997824e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 7.875000000000e-01 8.625000000000e-01 1.167930862680e+00 1.451884551195e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 7.875000000000e-01 8.625000000000e-01 1.224362078799e+00 1.497654416079e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 7.875000000000e-01 8.625000000000e-01 1.282697353237e+00 1.545709788414e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 7.875000000000e-01 8.625000000000e-01 1.342688534248e+00 1.595844212321e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 7.875000000000e-01 8.625000000000e-01 1.404123392014e+00 1.647867940704e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750000000000e-02 8.625000000000e-01 8.625000000000e-01 8.633148324916e-01 1.220335507145e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.125000000000e-01 8.625000000000e-01 8.625000000000e-01 8.698060128557e-01 1.224936222830e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.875000000000e-01 8.625000000000e-01 8.625000000000e-01 8.826451721955e-01 1.234086200393e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +2.625000000000e-01 8.625000000000e-01 8.625000000000e-01 9.015611460128e-01 1.247685356971e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +3.375000000000e-01 8.625000000000e-01 8.625000000000e-01 9.261816776421e-01 1.265590277301e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.125000000000e-01 8.625000000000e-01 8.625000000000e-01 9.560661587986e-01 1.287621353504e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.875000000000e-01 8.625000000000e-01 8.625000000000e-01 9.907383610217e-01 1.313570991610e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +5.625000000000e-01 8.625000000000e-01 8.625000000000e-01 1.029714766331e+00 1.343212101643e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +6.375000000000e-01 8.625000000000e-01 8.625000000000e-01 1.072526223456e+00 1.376306197763e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.125000000000e-01 8.625000000000e-01 8.625000000000e-01 1.118732541763e+00 1.412610615138e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.875000000000e-01 8.625000000000e-01 8.625000000000e-01 1.167930862680e+00 1.451884551195e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 8.625000000000e-01 8.625000000000e-01 1.219759197547e+00 1.493893821528e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 8.625000000000e-01 8.625000000000e-01 1.273896581360e+00 1.538414362257e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 8.625000000000e-01 8.625000000000e-01 1.330061088823e+00 1.585234604089e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 8.625000000000e-01 8.625000000000e-01 1.388006664249e+00 1.634156892713e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 8.625000000000e-01 8.625000000000e-01 1.447519429921e+00 1.684998145400e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750000000000e-02 9.375000000000e-01 8.625000000000e-01 9.382497002398e-01 1.274448410097e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.125000000000e-01 9.375000000000e-01 8.625000000000e-01 9.442258734011e-01 1.278854467873e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.875000000000e-01 9.375000000000e-01 8.625000000000e-01 9.560661587986e-01 1.287621353504e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +2.625000000000e-01 9.375000000000e-01 8.625000000000e-01 9.735566239310e-01 1.300660889702e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +3.375000000000e-01 9.375000000000e-01 8.625000000000e-01 9.963997691690e-01 1.317846254310e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.125000000000e-01 9.375000000000e-01 8.625000000000e-01 1.024237521281e+00 1.339017830352e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.875000000000e-01 9.375000000000e-01 8.625000000000e-01 1.056675210270e+00 1.363990010960e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +5.625000000000e-01 9.375000000000e-01 8.625000000000e-01 1.093303480283e+00 1.392558347072e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +6.375000000000e-01 9.375000000000e-01 8.625000000000e-01 1.133716234337e+00 1.424506493492e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.125000000000e-01 9.375000000000e-01 8.625000000000e-01 1.177523885108e+00 1.459612534202e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.875000000000e-01 9.375000000000e-01 8.625000000000e-01 1.224362078799e+00 1.497654416079e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 9.375000000000e-01 8.625000000000e-01 1.273896581360e+00 1.538414362257e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 9.375000000000e-01 8.625000000000e-01 1.325825214725e+00 1.581682253172e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 9.375000000000e-01 8.625000000000e-01 1.379877711973e+00 1.627258046531e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 9.375000000000e-01 8.625000000000e-01 1.435814228931e+00 1.674953357560e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 9.375000000000e-01 8.625000000000e-01 1.493423081381e+00 1.724592343135e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750000000000e-02 1.012500000000e+00 8.625000000000e-01 1.013194206458e+00 1.330589624941e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.125000000000e-01 1.012500000000e+00 8.625000000000e-01 1.018730828040e+00 1.334810379792e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.875000000000e-01 1.012500000000e+00 8.625000000000e-01 1.029714766331e+00 1.343212101643e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +2.625000000000e-01 1.012500000000e+00 8.625000000000e-01 1.045974426074e+00 1.355717061189e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +3.375000000000e-01 1.012500000000e+00 8.625000000000e-01 1.067268710307e+00 1.372213084765e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.125000000000e-01 1.012500000000e+00 8.625000000000e-01 1.093303480283e+00 1.392558347072e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.875000000000e-01 1.012500000000e+00 8.625000000000e-01 1.123749304783e+00 1.416587007564e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +5.625000000000e-01 1.012500000000e+00 8.625000000000e-01 1.158258390861e+00 1.444115213548e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +6.375000000000e-01 1.012500000000e+00 8.625000000000e-01 1.196479210016e+00 1.474947032947e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.125000000000e-01 1.012500000000e+00 8.625000000000e-01 1.238068051441e+00 1.508879965405e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.875000000000e-01 1.012500000000e+00 8.625000000000e-01 1.282697353237e+00 1.545709788414e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 1.012500000000e+00 8.625000000000e-01 1.330061088823e+00 1.585234604089e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 1.012500000000e+00 8.625000000000e-01 1.379877711973e+00 1.627258046531e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 1.012500000000e+00 8.625000000000e-01 1.431891231903e+00 1.671591681602e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 1.012500000000e+00 8.625000000000e-01 1.485870956712e+00 1.718056678343e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 1.012500000000e+00 8.625000000000e-01 1.541610359332e+00 1.766484856997e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750000000000e-02 1.087500000000e+00 8.625000000000e-01 1.088146359641e+00 1.388513143618e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.125000000000e-01 1.087500000000e+00 8.625000000000e-01 1.093303480283e+00 1.392558347072e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.875000000000e-01 1.087500000000e+00 8.625000000000e-01 1.103545422717e+00 1.400613704774e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +2.625000000000e-01 1.087500000000e+00 8.625000000000e-01 1.118732541763e+00 1.412610615138e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +3.375000000000e-01 1.087500000000e+00 8.625000000000e-01 1.138666983802e+00 1.428449771606e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.125000000000e-01 1.087500000000e+00 8.625000000000e-01 1.163104681445e+00 1.448005093223e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.875000000000e-01 1.087500000000e+00 8.625000000000e-01 1.191768643655e+00 1.471128393445e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +5.625000000000e-01 1.087500000000e+00 8.625000000000e-01 1.224362078799e+00 1.497654416079e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +6.375000000000e-01 1.087500000000e+00 8.625000000000e-01 1.260580223548e+00 1.527405889081e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.125000000000e-01 1.087500000000e+00 8.625000000000e-01 1.300120186752e+00 1.560198304704e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.875000000000e-01 1.087500000000e+00 8.625000000000e-01 1.342688534248e+00 1.595844212321e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 1.087500000000e+00 8.625000000000e-01 1.388006664249e+00 1.634156892713e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 1.087500000000e+00 8.625000000000e-01 1.435814228931e+00 1.674953357560e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 1.087500000000e+00 8.625000000000e-01 1.485870956712e+00 1.718056678343e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 1.087500000000e+00 8.625000000000e-01 1.537957249081e+00 1.763297691826e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 1.087500000000e+00 8.625000000000e-01 1.591873895759e+00 1.810516155686e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750000000000e-02 1.162500000000e+00 8.625000000000e-01 1.163104681445e+00 1.448005093223e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.125000000000e-01 1.162500000000e+00 8.625000000000e-01 1.167930862680e+00 1.451884551195e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.875000000000e-01 1.162500000000e+00 8.625000000000e-01 1.177523885108e+00 1.459612534202e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +2.625000000000e-01 1.162500000000e+00 8.625000000000e-01 1.191768643655e+00 1.471128393445e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.375000000000e-01 1.162500000000e+00 8.625000000000e-01 1.210500929368e+00 1.486344088696e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +4.125000000000e-01 1.162500000000e+00 8.625000000000e-01 1.233516315255e+00 1.505147418029e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +4.875000000000e-01 1.162500000000e+00 8.625000000000e-01 1.260580223548e+00 1.527405889081e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +5.625000000000e-01 1.162500000000e+00 8.625000000000e-01 1.291438151829e+00 1.552970943064e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +6.375000000000e-01 1.162500000000e+00 8.625000000000e-01 1.325825214725e+00 1.581682253172e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +7.125000000000e-01 1.162500000000e+00 8.625000000000e-01 1.363474422202e+00 1.613371857322e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +7.875000000000e-01 1.162500000000e+00 8.625000000000e-01 1.404123392014e+00 1.647867940704e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +8.625000000000e-01 1.162500000000e+00 8.625000000000e-01 1.447519429921e+00 1.684998145400e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +9.375000000000e-01 1.162500000000e+00 8.625000000000e-01 1.493423081381e+00 1.724592343135e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.012500000000e+00 1.162500000000e+00 8.625000000000e-01 1.541610359332e+00 1.766484856997e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.087500000000e+00 1.162500000000e+00 8.625000000000e-01 1.591873895759e+00 1.810516155686e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.162500000000e+00 1.162500000000e+00 8.625000000000e-01 1.644023266259e+00 1.856534069173e+00 9.999999999976e-01 6.666666666640e-15 9.999999999984e-15 1.054092553389e-07 4.218750000010e-04 4.218750000000e-04 +3.750009902818e-02 3.750009902818e-02 9.375044053516e-01 5.303314863599e-02 9.390032081457e-01 1.000112204375e+00 1.738669477317e-12 2.607711619322e-12 1.702191926547e-06 4.218276690899e-04 4.218750000000e-04 +1.125002124347e-01 3.750007034088e-02 9.375031459148e-01 1.185856360334e-01 9.449733867542e-01 1.000081636658e+00 8.739736842993e-13 1.310853512749e-12 1.206857035052e-06 4.218405623461e-04 4.218750000000e-04 +1.875001773281e-01 3.750003471599e-02 9.375015694569e-01 1.912134124526e-01 9.568028855705e-01 1.000042246986e+00 1.726535111232e-13 2.589693260112e-13 5.364174638917e-07 4.218571778056e-04 4.218750000000e-04 +2.625000831528e-01 3.750001133441e-02 9.375005209301e-01 2.651651268650e-01 9.742791033628e-01 1.000014780974e+00 1.612223097348e-14 2.418298901210e-14 1.639206753013e-07 4.218687643689e-04 4.218750000000e-04 +3.375000219852e-01 3.750000223625e-02 9.375001051632e-01 3.395769647778e-01 9.971052914255e-01 1.000003184102e+00 6.793519582755e-15 1.019024692734e-14 1.064072205536e-07 4.218736567111e-04 4.218750000000e-04 +4.125000029067e-01 3.750000022638e-02 9.375000109980e-01 4.142010410598e-01 1.024923788892e+00 1.000000356604e+00 6.666928772152e-15 1.000038959205e-14 1.054113086493e-07 4.218748495577e-04 4.218750000000e-04 +4.875000001553e-01 3.750000000932e-02 9.375000004791e-01 4.889401805458e-01 1.057340413987e+00 1.000000016536e+00 6.666666945465e-15 1.000000025284e-14 1.054092566715e-07 4.218749930240e-04 4.218750000000e-04 +5.625000000025e-01 3.750000000012e-02 9.375000000064e-01 5.637486141915e-01 1.093946410943e+00 1.000000000234e+00 6.666666669270e-15 1.000000000156e-14 1.054092553472e-07 4.218749999012e-04 4.218750000000e-04 +6.375000000000e-01 3.750000000000e-02 9.375000000000e-01 6.386019887222e-01 1.134336259669e+00 1.000000000001e+00 6.666666666674e-15 1.000000000000e-14 1.054092553390e-07 4.218749999997e-04 4.218750000000e-04 +7.125000000000e-01 3.750000000000e-02 9.375000000000e-01 7.134861596415e-01 1.178120855430e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.875000000000e-01 3.750000000000e-02 9.375000000000e-01 7.883923515611e-01 1.224936222830e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 3.750000000000e-02 9.375000000000e-01 8.633148324916e-01 1.274448410097e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 3.750000000000e-02 9.375000000000e-01 9.382497002398e-01 1.326355438787e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 3.750000000000e-02 9.375000000000e-01 1.013194206458e+00 1.380387173948e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 3.750000000000e-02 9.375000000000e-01 1.088146359641e+00 1.436303850165e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 3.750000000000e-02 9.375000000000e-01 1.163104681445e+00 1.493893821528e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750007034088e-02 1.125002124347e-01 9.375031459148e-01 1.185856360334e-01 9.449733867542e-01 1.000081636658e+00 8.739736842993e-13 1.310853512749e-12 1.206857035052e-06 4.218405623461e-04 4.218750000000e-04 +1.125001504027e-01 1.125001504027e-01 9.375022381863e-01 1.590992384685e-01 9.509064172070e-01 1.000059168748e+00 4.304706205896e-13 6.456677275334e-13 8.469997556955e-07 4.218500396613e-04 4.218750000000e-04 +1.875001246548e-01 1.125000737060e-01 9.375011076905e-01 2.186608408687e-01 9.626634356047e-01 1.000030370654e+00 8.630185040165e-14 1.294488441565e-13 3.792519598667e-07 4.218621877696e-04 4.218750000000e-04 +2.625000577539e-01 1.125000237780e-01 9.375003627328e-01 2.855915539207e-01 9.800354410913e-01 1.000010481469e+00 1.112672435054e-14 1.668991159102e-14 1.361776274292e-07 4.218705781765e-04 4.218750000000e-04 +3.375000150082e-01 1.125000046112e-01 9.375000718346e-01 3.557562524652e-01 1.002730719514e+00 1.000002213574e+00 6.724204955861e-15 1.008628510705e-14 1.058630410119e-07 4.218740661505e-04 4.218750000000e-04 +4.125000019477e-01 1.125000004590e-01 9.375000073838e-01 4.275657864120e-01 1.030397382350e+00 1.000000243321e+00 6.666784864604e-15 1.000017486365e-14 1.054101769473e-07 4.218748973489e-04 4.218750000000e-04 +4.875000001019e-01 1.125000000185e-01 9.375000003146e-01 5.003124025082e-01 1.062647048974e+00 1.000000011025e+00 6.666666833974e-15 1.000000014071e-14 1.054092560806e-07 4.218749953489e-04 4.218750000000e-04 +5.625000000016e-01 1.125000000002e-01 9.375000000041e-01 5.736396952808e-01 1.099076316736e+00 1.000000000152e+00 6.666666668359e-15 1.000000000102e-14 1.054092553443e-07 4.218749999358e-04 4.218750000000e-04 +6.375000000000e-01 1.125000000000e-01 9.375000000000e-01 6.473503688112e-01 1.139284314822e+00 1.000000000000e+00 6.666666666671e-15 1.000000000000e-14 1.054092553390e-07 4.218749999998e-04 4.218750000000e-04 +7.125000000000e-01 1.125000000000e-01 9.375000000000e-01 7.213269023127e-01 1.182885772169e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.875000000000e-01 1.125000000000e-01 9.375000000000e-01 7.954951288349e-01 1.229519723307e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 1.125000000000e-01 9.375000000000e-01 8.698060128557e-01 1.278854467873e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 1.125000000000e-01 9.375000000000e-01 9.442258734011e-01 1.330589624941e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 1.125000000000e-01 9.375000000000e-01 1.018730828040e+00 1.384456120648e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 1.125000000000e-01 9.375000000000e-01 1.093303480283e+00 1.440214827725e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 1.125000000000e-01 9.375000000000e-01 1.167930862680e+00 1.497654416079e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750003471599e-02 1.875001773281e-01 9.375015694569e-01 1.912134124526e-01 9.568028855705e-01 1.000042246986e+00 1.726535111232e-13 2.589693260112e-13 5.364174638917e-07 4.218571778056e-04 4.218750000000e-04 +1.125000737060e-01 1.875001246548e-01 9.375011076905e-01 2.186608408687e-01 9.626634356047e-01 1.000030370654e+00 8.630185040165e-14 1.294488441565e-13 3.792519598667e-07 4.218621877696e-04 4.218750000000e-04 +1.875000601742e-01 1.875000601742e-01 9.375005389556e-01 2.651651280441e-01 9.742791210288e-01 1.000015321809e+00 2.117667381164e-14 3.176452402749e-14 1.878667495490e-07 4.218685362108e-04 4.218750000000e-04 +2.625000272042e-01 1.875000189447e-01 9.375001717462e-01 3.225872306625e-01 9.914479781666e-01 1.000005142715e+00 7.425786644295e-15 1.113862268368e-14 1.112485839294e-07 4.218728304281e-04 4.218750000000e-04 +3.375000068324e-01 1.875000035520e-01 9.375000327927e-01 3.860861379846e-01 1.013887970848e+00 1.000001045283e+00 6.675478719414e-15 1.001320761248e-14 1.054788425993e-07 4.218745590215e-04 4.218750000000e-04 +4.125000008545e-01 1.875000003418e-01 9.375000032520e-01 4.531142249291e-01 1.041258256597e+00 1.000000110551e+00 6.666685521146e-15 1.000002717621e-14 1.054093985700e-07 4.218749533613e-04 4.218750000000e-04 +4.875000000428e-01 1.875000000133e-01 9.375000001323e-01 5.223145604391e-01 1.073181601731e+00 1.000000004772e+00 6.666666728096e-15 1.000000004442e-14 1.054092555731e-07 4.218749979869e-04 4.218750000000e-04 +5.625000000006e-01 1.875000000002e-01 9.375000000016e-01 5.929270612822e-01 1.109264959333e+00 1.000000000062e+00 6.666666667361e-15 1.000000000042e-14 1.054092553411e-07 4.218749999736e-04 4.218750000000e-04 +6.375000000000e-01 1.875000000000e-01 9.375000000000e-01 6.645016930001e-01 1.149116508453e+00 1.000000000000e+00 6.666666666669e-15 1.000000000000e-14 1.054092553390e-07 4.218749999999e-04 4.218750000000e-04 +7.125000000000e-01 1.875000000000e-01 9.375000000000e-01 7.367581014146e-01 1.192358482169e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.875000000000e-01 1.875000000000e-01 9.375000000000e-01 8.095137429346e-01 1.238635842369e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 1.875000000000e-01 9.375000000000e-01 8.826451721955e-01 1.287621353504e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 1.875000000000e-01 9.375000000000e-01 9.560661587986e-01 1.339017830352e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 1.875000000000e-01 9.375000000000e-01 1.029714766331e+00 1.392558347072e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 1.875000000000e-01 9.375000000000e-01 1.103545422717e+00 1.448005093223e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 1.875000000000e-01 9.375000000000e-01 1.177523885108e+00 1.505147418029e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750001133441e-02 2.625000831528e-01 9.375005209301e-01 2.651651268650e-01 9.742791033628e-01 1.000014780974e+00 1.612223097348e-14 2.418298901210e-14 1.639206753013e-07 4.218687643689e-04 4.218750000000e-04 +1.125000237780e-01 2.625000577539e-01 9.375003627328e-01 2.855915539207e-01 9.800354410913e-01 1.000010481469e+00 1.112672435054e-14 1.668991159102e-14 1.361776274292e-07 4.218705781765e-04 4.218750000000e-04 +1.875000189447e-01 2.625000272042e-01 9.375001717462e-01 3.225872306625e-01 9.914479781666e-01 1.000005142715e+00 7.425786644295e-15 1.113862268368e-14 1.112485839294e-07 4.218728304281e-04 4.218750000000e-04 +2.625000082509e-01 2.625000082509e-01 9.375000525529e-01 3.712310717914e-01 1.008324777639e+00 1.000001654813e+00 6.701685181235e-15 1.005251113682e-14 1.056856509593e-07 4.218743018768e-04 4.218750000000e-04 +3.375000019721e-01 2.625000014733e-01 9.375000095324e-01 4.275657868734e-01 1.030397384497e+00 1.000000318414e+00 6.667031335148e-15 1.000054381841e-14 1.054121214747e-07 4.218748656693e-04 4.218750000000e-04 +4.125000002331e-01 2.625000001344e-01 9.375000008923e-01 4.889401806590e-01 1.057340414406e+00 1.000000031677e+00 6.666667836804e-15 1.000000143844e-14 1.054092629202e-07 4.218749866364e-04 4.218750000000e-04 +4.875000000108e-01 2.625000000049e-01 9.375000000336e-01 5.536808647706e-01 1.088792335607e+00 1.000000001263e+00 6.666666681086e-15 1.000000000900e-14 1.054092553864e-07 4.218749994672e-04 4.218750000000e-04 +5.625000000001e-01 2.625000000001e-01 9.375000000004e-01 6.207354508969e-01 1.124374826293e+00 1.000000000015e+00 6.666666666835e-15 1.000000000010e-14 1.054092553395e-07 4.218749999936e-04 4.218750000000e-04 +6.375000000000e-01 2.625000000000e-01 9.375000000000e-01 6.894291116569e-01 1.163709048689e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.125000000000e-01 2.625000000000e-01 9.375000000000e-01 7.593171274244e-01 1.206428095661e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.875000000000e-01 2.625000000000e-01 9.375000000000e-01 8.300978857942e-01 1.252185589280e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 2.625000000000e-01 9.375000000000e-01 9.015611460128e-01 1.300660889702e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 2.625000000000e-01 9.375000000000e-01 9.735566239310e-01 1.351561596821e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 2.625000000000e-01 9.375000000000e-01 1.045974426074e+00 1.404624060025e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 2.625000000000e-01 9.375000000000e-01 1.118732541763e+00 1.459612534202e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 2.625000000000e-01 9.375000000000e-01 1.191768643655e+00 1.516317496437e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750000223625e-02 3.375000219852e-01 9.375001051632e-01 3.395769647778e-01 9.971052914255e-01 1.000003184102e+00 6.793519582755e-15 1.019024692734e-14 1.064072205536e-07 4.218736567111e-04 4.218750000000e-04 +1.125000046112e-01 3.375000150082e-01 9.375000718346e-01 3.557562524652e-01 1.002730719514e+00 1.000002213574e+00 6.724204955860e-15 1.008628510705e-14 1.058630410119e-07 4.218740661505e-04 4.218750000000e-04 +1.875000035520e-01 3.375000068324e-01 9.375000327927e-01 3.860861379846e-01 1.013887970848e+00 1.000001045283e+00 6.675478719414e-15 1.001320761248e-14 1.054788425993e-07 4.218745590215e-04 4.218750000000e-04 +2.625000014733e-01 3.375000019721e-01 9.375000095324e-01 4.275657868734e-01 1.030397384497e+00 1.000000318414e+00 6.667031335148e-15 1.000054381841e-14 1.054121214747e-07 4.218748656693e-04 4.218750000000e-04 +3.375000003308e-01 3.375000003308e-01 9.375000016193e-01 4.772970777688e-01 1.052007012088e+00 1.000000057139e+00 6.666671165896e-15 1.000000617745e-14 1.054092878970e-07 4.218749758943e-04 4.218750000000e-04 +4.125000000360e-01 3.375000000279e-01 9.375000001391e-01 5.329751401788e-01 1.078410288485e+00 1.000000005196e+00 6.666666736956e-15 1.000000005347e-14 1.054092556208e-07 4.218749978080e-04 4.218750000000e-04 +4.875000000015e-01 3.375000000009e-01 9.375000000047e-01 5.929270612833e-01 1.109264959336e+00 1.000000000184e+00 6.666666668708e-15 1.000000000123e-14 1.054092553454e-07 4.218749999225e-04 4.218750000000e-04 +5.625000000000e-01 3.375000000000e-01 9.375000000000e-01 6.559820881701e-01 1.144210972679e+00 1.000000000002e+00 6.666666666688e-15 1.000000000001e-14 1.054092553390e-07 4.218749999992e-04 4.218750000000e-04 +6.375000000000e-01 3.375000000000e-01 9.375000000000e-01 7.213269023127e-01 1.182885772169e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.125000000000e-01 3.375000000000e-01 9.375000000000e-01 7.883923515611e-01 1.224936222830e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.875000000000e-01 3.375000000000e-01 9.375000000000e-01 8.567744744097e-01 1.270027066641e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 3.375000000000e-01 9.375000000000e-01 9.261816776421e-01 1.317846254310e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 3.375000000000e-01 9.375000000000e-01 9.963997691690e-01 1.368107726022e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 3.375000000000e-01 9.375000000000e-01 1.067268710307e+00 1.420552269366e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 3.375000000000e-01 9.375000000000e-01 1.138666983802e+00 1.474947032947e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 3.375000000000e-01 9.375000000000e-01 1.210500929368e+00 1.531084174695e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750000022638e-02 4.125000029067e-01 9.375000109980e-01 4.142010410598e-01 1.024923788892e+00 1.000000356604e+00 6.666928772152e-15 1.000038959205e-14 1.054113086493e-07 4.218748495577e-04 4.218750000000e-04 +1.125000004590e-01 4.125000019477e-01 9.375000073838e-01 4.275657864120e-01 1.030397382350e+00 1.000000243321e+00 6.666784864604e-15 1.000017486365e-14 1.054101769473e-07 4.218748973489e-04 4.218750000000e-04 +1.875000003418e-01 4.125000008545e-01 9.375000032520e-01 4.531142249291e-01 1.041258256597e+00 1.000000110551e+00 6.666685521146e-15 1.000002717621e-14 1.054093985700e-07 4.218749533613e-04 4.218750000000e-04 +2.625000001344e-01 4.125000002331e-01 9.375000008923e-01 4.889401806590e-01 1.057340414406e+00 1.000000031677e+00 6.666667836804e-15 1.000000143844e-14 1.054092629202e-07 4.218749866364e-04 4.218750000000e-04 +3.375000000279e-01 4.125000000360e-01 9.375000001391e-01 5.329751401788e-01 1.078410288485e+00 1.000000005196e+00 6.666666736956e-15 1.000000005347e-14 1.054092556208e-07 4.218749978080e-04 4.218750000000e-04 +4.125000000027e-01 4.125000000027e-01 9.375000000106e-01 5.833630944827e-01 1.104182389836e+00 1.000000000416e+00 6.666666671301e-15 1.000000000279e-14 1.054092553537e-07 4.218749998246e-04 4.218750000000e-04 +4.875000000001e-01 4.125000000001e-01 9.375000000003e-01 6.386019887224e-01 1.134336259669e+00 1.000000000012e+00 6.666666666804e-15 1.000000000008e-14 1.054092553394e-07 4.218749999948e-04 4.218750000000e-04 +5.625000000000e-01 4.125000000000e-01 9.375000000000e-01 6.975403214152e-01 1.168532733816e+00 1.000000000000e+00 6.666666666668e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +6.375000000000e-01 4.125000000000e-01 9.375000000000e-01 7.593171274244e-01 1.206428095661e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.125000000000e-01 4.125000000000e-01 9.375000000000e-01 8.232936900038e-01 1.247685356971e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.875000000000e-01 4.125000000000e-01 9.375000000000e-01 8.889952193347e-01 1.291982488271e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 4.125000000000e-01 9.375000000000e-01 9.560661587986e-01 1.339017830352e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 4.125000000000e-01 9.375000000000e-01 1.024237521281e+00 1.388513143618e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 4.125000000000e-01 9.375000000000e-01 1.093303480283e+00 1.440214827725e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 4.125000000000e-01 9.375000000000e-01 1.163104681445e+00 1.493893821528e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 4.125000000000e-01 9.375000000000e-01 1.233516315255e+00 1.549344619509e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750000000932e-02 4.875000001553e-01 9.375000004791e-01 4.889401805458e-01 1.057340413987e+00 1.000000016536e+00 6.666666945465e-15 1.000000025284e-14 1.054092566715e-07 4.218749930240e-04 4.218750000000e-04 +1.125000000185e-01 4.875000001019e-01 9.375000003146e-01 5.003124025082e-01 1.062647048974e+00 1.000000011025e+00 6.666666833974e-15 1.000000014071e-14 1.054092560806e-07 4.218749953489e-04 4.218750000000e-04 +1.875000000133e-01 4.875000000428e-01 9.375000001323e-01 5.223145604391e-01 1.073181601731e+00 1.000000004772e+00 6.666666728096e-15 1.000000004442e-14 1.054092555731e-07 4.218749979869e-04 4.218750000000e-04 +2.625000000049e-01 4.875000000108e-01 9.375000000336e-01 5.536808647706e-01 1.088792335607e+00 1.000000001263e+00 6.666666681086e-15 1.000000000900e-14 1.054092553864e-07 4.218749994672e-04 4.218750000000e-04 +3.375000000009e-01 4.875000000015e-01 9.375000000047e-01 5.929270612833e-01 1.109264959336e+00 1.000000000184e+00 6.666666668708e-15 1.000000000123e-14 1.054092553454e-07 4.218749999225e-04 4.218750000000e-04 +4.125000000001e-01 4.875000000001e-01 9.375000000003e-01 6.386019887224e-01 1.134336259669e+00 1.000000000012e+00 6.666666666804e-15 1.000000000008e-14 1.054092553394e-07 4.218749999948e-04 4.218750000000e-04 +4.875000000000e-01 4.875000000000e-01 9.375000000000e-01 6.894291116569e-01 1.163709048689e+00 1.000000000000e+00 6.666666666670e-15 1.000000000000e-14 1.054092553390e-07 4.218749999999e-04 4.218750000000e-04 +5.625000000000e-01 4.875000000000e-01 9.375000000000e-01 7.443537465480e-01 1.197066727463e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +6.375000000000e-01 4.875000000000e-01 9.375000000000e-01 8.025350459637e-01 1.234086200393e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.125000000000e-01 4.875000000000e-01 9.375000000000e-01 8.633148324916e-01 1.274448410097e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.875000000000e-01 4.875000000000e-01 9.375000000000e-01 9.261816776421e-01 1.317846254310e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 4.875000000000e-01 9.375000000000e-01 9.907383610217e-01 1.363990010960e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 4.875000000000e-01 9.375000000000e-01 1.056675210270e+00 1.412610615138e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 4.875000000000e-01 9.375000000000e-01 1.123749304783e+00 1.463461222582e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 4.875000000000e-01 9.375000000000e-01 1.191768643655e+00 1.516317496437e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 4.875000000000e-01 9.375000000000e-01 1.260580223548e+00 1.570977004924e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750000000012e-02 5.625000000025e-01 9.375000000064e-01 5.637486141915e-01 1.093946410943e+00 1.000000000234e+00 6.666666669270e-15 1.000000000156e-14 1.054092553472e-07 4.218749999012e-04 4.218750000000e-04 +1.125000000002e-01 5.625000000016e-01 9.375000000041e-01 5.736396952808e-01 1.099076316736e+00 1.000000000152e+00 6.666666668359e-15 1.000000000102e-14 1.054092553443e-07 4.218749999358e-04 4.218750000000e-04 +1.875000000002e-01 5.625000000006e-01 9.375000000016e-01 5.929270612822e-01 1.109264959333e+00 1.000000000062e+00 6.666666667361e-15 1.000000000042e-14 1.054092553411e-07 4.218749999736e-04 4.218750000000e-04 +2.625000000001e-01 5.625000000001e-01 9.375000000004e-01 6.207354508969e-01 1.124374826293e+00 1.000000000015e+00 6.666666666835e-15 1.000000000010e-14 1.054092553395e-07 4.218749999936e-04 4.218750000000e-04 +3.375000000000e-01 5.625000000000e-01 9.375000000000e-01 6.559820881701e-01 1.144210972679e+00 1.000000000002e+00 6.666666666688e-15 1.000000000001e-14 1.054092553390e-07 4.218749999992e-04 4.218750000000e-04 +4.125000000000e-01 5.625000000000e-01 9.375000000000e-01 6.975403214152e-01 1.168532733816e+00 1.000000000000e+00 6.666666666668e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.875000000000e-01 5.625000000000e-01 9.375000000000e-01 7.443537465480e-01 1.197066727463e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +5.625000000000e-01 5.625000000000e-01 9.375000000000e-01 7.954951288349e-01 1.229519723307e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +6.375000000000e-01 5.625000000000e-01 9.375000000000e-01 8.501838036566e-01 1.265590277301e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.125000000000e-01 5.625000000000e-01 9.375000000000e-01 9.077788827683e-01 1.304978448098e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.875000000000e-01 5.625000000000e-01 9.375000000000e-01 9.677615925423e-01 1.347393316742e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 5.625000000000e-01 9.375000000000e-01 1.029714766331e+00 1.392558347072e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 5.625000000000e-01 9.375000000000e-01 1.093303480283e+00 1.440214827725e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 5.625000000000e-01 9.375000000000e-01 1.158258390861e+00 1.490123736473e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 5.625000000000e-01 9.375000000000e-01 1.224362078799e+00 1.542066389621e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 5.625000000000e-01 9.375000000000e-01 1.291438151829e+00 1.595844212322e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750000000000e-02 6.375000000000e-01 9.375000000000e-01 6.386019887222e-01 1.134336259669e+00 1.000000000001e+00 6.666666666674e-15 1.000000000000e-14 1.054092553390e-07 4.218749999997e-04 4.218750000000e-04 +1.125000000000e-01 6.375000000000e-01 9.375000000000e-01 6.473503688112e-01 1.139284314822e+00 1.000000000000e+00 6.666666666671e-15 1.000000000000e-14 1.054092553390e-07 4.218749999998e-04 4.218750000000e-04 +1.875000000000e-01 6.375000000000e-01 9.375000000000e-01 6.645016930001e-01 1.149116508453e+00 1.000000000000e+00 6.666666666668e-15 1.000000000000e-14 1.054092553390e-07 4.218749999999e-04 4.218750000000e-04 +2.625000000000e-01 6.375000000000e-01 9.375000000000e-01 6.894291116569e-01 1.163709048689e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +3.375000000000e-01 6.375000000000e-01 9.375000000000e-01 7.213269023127e-01 1.182885772169e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.125000000000e-01 6.375000000000e-01 9.375000000000e-01 7.593171274244e-01 1.206428095661e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.875000000000e-01 6.375000000000e-01 9.375000000000e-01 8.025350459637e-01 1.234086200393e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +5.625000000000e-01 6.375000000000e-01 9.375000000000e-01 8.501838036566e-01 1.265590277301e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +6.375000000000e-01 6.375000000000e-01 9.375000000000e-01 9.015611460128e-01 1.300660889702e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.125000000000e-01 6.375000000000e-01 9.375000000000e-01 9.560661587986e-01 1.339017830352e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.875000000000e-01 6.375000000000e-01 9.375000000000e-01 1.013194206458e+00 1.380387173948e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 6.375000000000e-01 9.375000000000e-01 1.072526223456e+00 1.424506493492e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 6.375000000000e-01 9.375000000000e-01 1.133716234337e+00 1.471128393445e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 6.375000000000e-01 9.375000000000e-01 1.196479210016e+00 1.520022614963e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 6.375000000000e-01 9.375000000000e-01 1.260580223548e+00 1.570977004924e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 6.375000000000e-01 9.375000000000e-01 1.325825214725e+00 1.623797632096e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750000000000e-02 7.125000000000e-01 9.375000000000e-01 7.134861596415e-01 1.178120855430e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.125000000000e-01 7.125000000000e-01 9.375000000000e-01 7.213269023127e-01 1.182885772169e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.875000000000e-01 7.125000000000e-01 9.375000000000e-01 7.367581014146e-01 1.192358482169e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +2.625000000000e-01 7.125000000000e-01 9.375000000000e-01 7.593171274244e-01 1.206428095661e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +3.375000000000e-01 7.125000000000e-01 9.375000000000e-01 7.883923515611e-01 1.224936222830e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.125000000000e-01 7.125000000000e-01 9.375000000000e-01 8.232936900038e-01 1.247685356971e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.875000000000e-01 7.125000000000e-01 9.375000000000e-01 8.633148324916e-01 1.274448410097e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +5.625000000000e-01 7.125000000000e-01 9.375000000000e-01 9.077788827683e-01 1.304978448098e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +6.375000000000e-01 7.125000000000e-01 9.375000000000e-01 9.560661587986e-01 1.339017830352e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.125000000000e-01 7.125000000000e-01 9.375000000000e-01 1.007627163191e+00 1.376306197763e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.875000000000e-01 7.125000000000e-01 9.375000000000e-01 1.061985169388e+00 1.416587007564e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 7.125000000000e-01 9.375000000000e-01 1.118732541763e+00 1.459612534202e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 7.125000000000e-01 9.375000000000e-01 1.177523885108e+00 1.505147418029e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 7.125000000000e-01 9.375000000000e-01 1.238068051441e+00 1.552970943064e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 7.125000000000e-01 9.375000000000e-01 1.300120186752e+00 1.602878270487e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 7.125000000000e-01 9.375000000000e-01 1.363474422202e+00 1.654680860468e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750000000000e-02 7.875000000000e-01 9.375000000000e-01 7.883923515611e-01 1.224936222830e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.125000000000e-01 7.875000000000e-01 9.375000000000e-01 7.954951288349e-01 1.229519723307e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.875000000000e-01 7.875000000000e-01 9.375000000000e-01 8.095137429346e-01 1.238635842369e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +2.625000000000e-01 7.875000000000e-01 9.375000000000e-01 8.300978857942e-01 1.252185589280e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +3.375000000000e-01 7.875000000000e-01 9.375000000000e-01 8.567744744097e-01 1.270027066641e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.125000000000e-01 7.875000000000e-01 9.375000000000e-01 8.889952193347e-01 1.291982488271e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.875000000000e-01 7.875000000000e-01 9.375000000000e-01 9.261816776421e-01 1.317846254310e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +5.625000000000e-01 7.875000000000e-01 9.375000000000e-01 9.677615925423e-01 1.347393316742e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +6.375000000000e-01 7.875000000000e-01 9.375000000000e-01 1.013194206458e+00 1.380387173948e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.125000000000e-01 7.875000000000e-01 9.375000000000e-01 1.061985169388e+00 1.416587007564e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.875000000000e-01 7.875000000000e-01 9.375000000000e-01 1.113693180369e+00 1.455753670784e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 7.875000000000e-01 9.375000000000e-01 1.167930862680e+00 1.497654416079e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 7.875000000000e-01 9.375000000000e-01 1.224362078799e+00 1.542066389621e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 7.875000000000e-01 9.375000000000e-01 1.282697353237e+00 1.588779012324e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 7.875000000000e-01 9.375000000000e-01 1.342688534248e+00 1.637595417067e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 7.875000000000e-01 9.375000000000e-01 1.404123392014e+00 1.688333127674e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750000000000e-02 8.625000000000e-01 9.375000000000e-01 8.633148324916e-01 1.274448410097e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.125000000000e-01 8.625000000000e-01 9.375000000000e-01 8.698060128557e-01 1.278854467873e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.875000000000e-01 8.625000000000e-01 9.375000000000e-01 8.826451721955e-01 1.287621353504e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +2.625000000000e-01 8.625000000000e-01 9.375000000000e-01 9.015611460128e-01 1.300660889702e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +3.375000000000e-01 8.625000000000e-01 9.375000000000e-01 9.261816776421e-01 1.317846254310e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.125000000000e-01 8.625000000000e-01 9.375000000000e-01 9.560661587986e-01 1.339017830352e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.875000000000e-01 8.625000000000e-01 9.375000000000e-01 9.907383610217e-01 1.363990010960e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +5.625000000000e-01 8.625000000000e-01 9.375000000000e-01 1.029714766331e+00 1.392558347072e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +6.375000000000e-01 8.625000000000e-01 9.375000000000e-01 1.072526223456e+00 1.424506493492e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.125000000000e-01 8.625000000000e-01 9.375000000000e-01 1.118732541763e+00 1.459612534202e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.875000000000e-01 8.625000000000e-01 9.375000000000e-01 1.167930862680e+00 1.497654416079e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 8.625000000000e-01 9.375000000000e-01 1.219759197547e+00 1.538414362257e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 8.625000000000e-01 9.375000000000e-01 1.273896581360e+00 1.581682253172e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 8.625000000000e-01 9.375000000000e-01 1.330061088823e+00 1.627258046531e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 8.625000000000e-01 9.375000000000e-01 1.388006664249e+00 1.674953357560e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 8.625000000000e-01 9.375000000000e-01 1.447519429921e+00 1.724592343135e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750000000000e-02 9.375000000000e-01 9.375000000000e-01 9.382497002398e-01 1.326355438787e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.125000000000e-01 9.375000000000e-01 9.375000000000e-01 9.442258734011e-01 1.330589624941e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.875000000000e-01 9.375000000000e-01 9.375000000000e-01 9.560661587986e-01 1.339017830352e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +2.625000000000e-01 9.375000000000e-01 9.375000000000e-01 9.735566239310e-01 1.351561596821e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +3.375000000000e-01 9.375000000000e-01 9.375000000000e-01 9.963997691690e-01 1.368107726022e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.125000000000e-01 9.375000000000e-01 9.375000000000e-01 1.024237521281e+00 1.388513143618e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.875000000000e-01 9.375000000000e-01 9.375000000000e-01 1.056675210270e+00 1.412610615138e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +5.625000000000e-01 9.375000000000e-01 9.375000000000e-01 1.093303480283e+00 1.440214827725e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +6.375000000000e-01 9.375000000000e-01 9.375000000000e-01 1.133716234337e+00 1.471128393445e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.125000000000e-01 9.375000000000e-01 9.375000000000e-01 1.177523885108e+00 1.505147418029e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.875000000000e-01 9.375000000000e-01 9.375000000000e-01 1.224362078799e+00 1.542066389621e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 9.375000000000e-01 9.375000000000e-01 1.273896581360e+00 1.581682253172e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 9.375000000000e-01 9.375000000000e-01 1.325825214725e+00 1.623797632096e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 9.375000000000e-01 9.375000000000e-01 1.379877711973e+00 1.668223231465e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 9.375000000000e-01 9.375000000000e-01 1.435814228931e+00 1.714779504776e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 9.375000000000e-01 9.375000000000e-01 1.493423081381e+00 1.763297691826e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750000000000e-02 1.012500000000e+00 9.375000000000e-01 1.013194206458e+00 1.380387173948e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.125000000000e-01 1.012500000000e+00 9.375000000000e-01 1.018730828040e+00 1.384456120648e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.875000000000e-01 1.012500000000e+00 9.375000000000e-01 1.029714766331e+00 1.392558347072e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +2.625000000000e-01 1.012500000000e+00 9.375000000000e-01 1.045974426074e+00 1.404624060025e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +3.375000000000e-01 1.012500000000e+00 9.375000000000e-01 1.067268710307e+00 1.420552269366e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.125000000000e-01 1.012500000000e+00 9.375000000000e-01 1.093303480283e+00 1.440214827725e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.875000000000e-01 1.012500000000e+00 9.375000000000e-01 1.123749304783e+00 1.463461222582e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +5.625000000000e-01 1.012500000000e+00 9.375000000000e-01 1.158258390861e+00 1.490123736473e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +6.375000000000e-01 1.012500000000e+00 9.375000000000e-01 1.196479210016e+00 1.520022614963e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.125000000000e-01 1.012500000000e+00 9.375000000000e-01 1.238068051441e+00 1.552970943064e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.875000000000e-01 1.012500000000e+00 9.375000000000e-01 1.282697353237e+00 1.588779012324e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 1.012500000000e+00 9.375000000000e-01 1.330061088823e+00 1.627258046531e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 1.012500000000e+00 9.375000000000e-01 1.379877711973e+00 1.668223231465e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 1.012500000000e+00 9.375000000000e-01 1.431891231903e+00 1.711496056087e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 1.012500000000e+00 9.375000000000e-01 1.485870956712e+00 1.756906016268e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 1.012500000000e+00 9.375000000000e-01 1.541610359332e+00 1.804291758558e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750000000000e-02 1.087500000000e+00 9.375000000000e-01 1.088146359641e+00 1.436303850165e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.125000000000e-01 1.087500000000e+00 9.375000000000e-01 1.093303480283e+00 1.440214827725e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.875000000000e-01 1.087500000000e+00 9.375000000000e-01 1.103545422717e+00 1.448005093223e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +2.625000000000e-01 1.087500000000e+00 9.375000000000e-01 1.118732541763e+00 1.459612534202e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +3.375000000000e-01 1.087500000000e+00 9.375000000000e-01 1.138666983802e+00 1.474947032947e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.125000000000e-01 1.087500000000e+00 9.375000000000e-01 1.163104681445e+00 1.493893821528e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.875000000000e-01 1.087500000000e+00 9.375000000000e-01 1.191768643655e+00 1.516317496437e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +5.625000000000e-01 1.087500000000e+00 9.375000000000e-01 1.224362078799e+00 1.542066389621e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +6.375000000000e-01 1.087500000000e+00 9.375000000000e-01 1.260580223548e+00 1.570977004924e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.125000000000e-01 1.087500000000e+00 9.375000000000e-01 1.300120186752e+00 1.602878270487e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.875000000000e-01 1.087500000000e+00 9.375000000000e-01 1.342688534248e+00 1.637595417067e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 1.087500000000e+00 9.375000000000e-01 1.388006664249e+00 1.674953357560e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 1.087500000000e+00 9.375000000000e-01 1.435814228931e+00 1.714779504776e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 1.087500000000e+00 9.375000000000e-01 1.485870956712e+00 1.756906016268e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 1.087500000000e+00 9.375000000000e-01 1.537957249081e+00 1.801171493778e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 1.087500000000e+00 9.375000000000e-01 1.591873895759e+00 1.847422190513e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750000000000e-02 1.162500000000e+00 9.375000000000e-01 1.163104681445e+00 1.493893821528e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.125000000000e-01 1.162500000000e+00 9.375000000000e-01 1.167930862680e+00 1.497654416079e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.875000000000e-01 1.162500000000e+00 9.375000000000e-01 1.177523885108e+00 1.505147418029e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +2.625000000000e-01 1.162500000000e+00 9.375000000000e-01 1.191768643655e+00 1.516317496437e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.375000000000e-01 1.162500000000e+00 9.375000000000e-01 1.210500929368e+00 1.531084174695e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +4.125000000000e-01 1.162500000000e+00 9.375000000000e-01 1.233516315255e+00 1.549344619509e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +4.875000000000e-01 1.162500000000e+00 9.375000000000e-01 1.260580223548e+00 1.570977004924e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +5.625000000000e-01 1.162500000000e+00 9.375000000000e-01 1.291438151829e+00 1.595844212322e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +6.375000000000e-01 1.162500000000e+00 9.375000000000e-01 1.325825214725e+00 1.623797632096e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +7.125000000000e-01 1.162500000000e+00 9.375000000000e-01 1.363474422202e+00 1.654680860468e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +7.875000000000e-01 1.162500000000e+00 9.375000000000e-01 1.404123392014e+00 1.688333127674e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +8.625000000000e-01 1.162500000000e+00 9.375000000000e-01 1.447519429921e+00 1.724592343135e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +9.375000000000e-01 1.162500000000e+00 9.375000000000e-01 1.493423081381e+00 1.763297691826e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.012500000000e+00 1.162500000000e+00 9.375000000000e-01 1.541610359332e+00 1.804291758558e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.087500000000e+00 1.162500000000e+00 9.375000000000e-01 1.591873895759e+00 1.847422190513e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.162500000000e+00 1.162500000000e+00 9.375000000000e-01 1.644023266259e+00 1.892542932142e+00 9.999999999976e-01 6.666666666640e-15 9.999999999984e-15 1.054092553389e-07 4.218750000010e-04 4.218750000000e-04 +3.750000000091e-02 3.750000000091e-02 1.012500000064e+00 5.303300859028e-02 1.013887937659e+00 1.000000001663e+00 6.666666685587e-15 1.000000001175e-14 1.054092554009e-07 4.218749992984e-04 4.218750000000e-04 +1.125000000018e-01 3.750000000059e-02 1.012500000042e+00 1.185854122582e-01 1.019420791472e+00 1.000000001097e+00 6.666666679035e-15 1.000000000758e-14 1.054092553789e-07 4.218749995370e-04 4.218750000000e-04 +1.875000000013e-01 3.750000000024e-02 1.012500000017e+00 1.912132317610e-01 1.030397374820e+00 1.000000000461e+00 6.666666671804e-15 1.000000000310e-14 1.054092553553e-07 4.218749998056e-04 4.218750000000e-04 +2.625000000004e-01 3.750000000006e-02 1.012500000004e+00 2.651650429454e-01 1.046646430275e+00 1.000000000113e+00 6.666666667919e-15 1.000000000075e-14 1.054092553429e-07 4.218749999524e-04 4.218750000000e-04 +3.375000000001e-01 3.750000000001e-02 1.012500000000e+00 3.395769426802e-01 1.067927314943e+00 1.000000000013e+00 6.666666666816e-15 1.000000000009e-14 1.054092553394e-07 4.218749999943e-04 4.218750000000e-04 +4.125000000000e-01 3.750000000000e-02 1.012500000000e+00 4.142010381445e-01 1.093946410936e+00 1.000000000001e+00 6.666666666673e-15 1.000000000000e-14 1.054092553390e-07 4.218749999997e-04 4.218750000000e-04 +4.875000000000e-01 3.750000000000e-02 1.012500000000e+00 4.889401803902e-01 1.124374826292e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +5.625000000000e-01 3.750000000000e-02 1.012500000000e+00 5.637486141890e-01 1.158865285527e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +6.375000000000e-01 3.750000000000e-02 1.012500000000e+00 6.386019887222e-01 1.197066727463e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.125000000000e-01 3.750000000000e-02 1.012500000000e+00 7.134861596415e-01 1.238635842369e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.875000000000e-01 3.750000000000e-02 1.012500000000e+00 7.883923515611e-01 1.283245397420e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 3.750000000000e-02 1.012500000000e+00 8.633148324916e-01 1.330589624941e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 3.750000000000e-02 1.012500000000e+00 9.382497002398e-01 1.380387173948e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 3.750000000000e-02 1.012500000000e+00 1.013194206458e+00 1.432382194109e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 3.750000000000e-02 1.012500000000e+00 1.088146359641e+00 1.486344088695e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 3.750000000000e-02 1.012500000000e+00 1.163104681445e+00 1.542066389621e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750000000059e-02 1.125000000018e-01 1.012500000042e+00 1.185854122582e-01 1.019420791472e+00 1.000000001097e+00 6.666666679035e-15 1.000000000758e-14 1.054092553789e-07 4.218749995370e-04 4.218750000000e-04 +1.125000000012e-01 1.125000000012e-01 1.012500000027e+00 1.590990257686e-01 1.024923777681e+00 1.000000000721e+00 6.666666674737e-15 1.000000000490e-14 1.054092553647e-07 4.218749996958e-04 4.218750000000e-04 +1.875000000008e-01 1.125000000005e-01 1.012500000011e+00 2.186606960576e-01 1.035842048781e+00 1.000000000300e+00 6.666666670004e-15 1.000000000201e-14 1.054092553495e-07 4.218749998735e-04 4.218750000000e-04 +2.625000000003e-01 1.125000000001e-01 1.012500000003e+00 2.855914914702e-01 1.052007010435e+00 1.000000000072e+00 6.666666667470e-15 1.000000000048e-14 1.054092553415e-07 4.218749999695e-04 4.218750000000e-04 +3.375000000000e-01 1.125000000000e-01 1.012500000000e+00 3.557562367690e-01 1.073181601594e+00 1.000000000009e+00 6.666666666761e-15 1.000000000006e-14 1.054092553392e-07 4.218749999964e-04 4.218750000000e-04 +4.125000000000e-01 1.125000000000e-01 1.012500000000e+00 4.275657844122e-01 1.099076316731e+00 1.000000000000e+00 6.666666666671e-15 1.000000000000e-14 1.054092553390e-07 4.218749999998e-04 4.218750000000e-04 +4.875000000000e-01 1.125000000000e-01 1.012500000000e+00 5.003124024047e-01 1.129366525978e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +5.625000000000e-01 1.125000000000e-01 1.012500000000e+00 5.736396952792e-01 1.163709048689e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +6.375000000000e-01 1.125000000000e-01 1.012500000000e+00 6.473503688112e-01 1.201756526922e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.125000000000e-01 1.125000000000e-01 1.012500000000e+00 7.213269023127e-01 1.243168834069e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.875000000000e-01 1.125000000000e-01 1.012500000000e+00 7.954951288349e-01 1.287621353504e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 1.125000000000e-01 1.012500000000e+00 8.698060128557e-01 1.334810379792e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 1.125000000000e-01 1.012500000000e+00 9.442258734011e-01 1.384456120648e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 1.125000000000e-01 1.012500000000e+00 1.018730828040e+00 1.436303850165e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 1.125000000000e-01 1.012500000000e+00 1.093303480283e+00 1.490123736473e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 1.125000000000e-01 1.012500000000e+00 1.167930862680e+00 1.545709788414e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750000000024e-02 1.875000000013e-01 1.012500000017e+00 1.912132317610e-01 1.030397374820e+00 1.000000000461e+00 6.666666671804e-15 1.000000000310e-14 1.054092553553e-07 4.218749998056e-04 4.218750000000e-04 +1.125000000005e-01 1.875000000008e-01 1.012500000011e+00 2.186606960576e-01 1.035842048781e+00 1.000000000300e+00 6.666666670004e-15 1.000000000201e-14 1.054092553495e-07 4.218749998735e-04 4.218750000000e-04 +1.875000000003e-01 1.875000000003e-01 1.012500000004e+00 2.651650429454e-01 1.046646430276e+00 1.000000000122e+00 6.666666668026e-15 1.000000000082e-14 1.054092553432e-07 4.218749999484e-04 4.218750000000e-04 +2.625000000001e-01 1.875000000001e-01 1.012500000001e+00 3.225871975142e-01 1.062647048649e+00 1.000000000029e+00 6.666666666985e-15 1.000000000019e-14 1.054092553400e-07 4.218749999879e-04 4.218750000000e-04 +3.375000000000e-01 1.875000000000e-01 1.012500000000e+00 3.860861302870e-01 1.083613745760e+00 1.000000000003e+00 6.666666666704e-15 1.000000000002e-14 1.054092553391e-07 4.218749999986e-04 4.218750000000e-04 +4.125000000000e-01 1.875000000000e-01 1.012500000000e+00 4.531142240098e-01 1.109264959331e+00 1.000000000000e+00 6.666666666668e-15 1.000000000000e-14 1.054092553390e-07 4.218749999999e-04 4.218750000000e-04 +4.875000000000e-01 1.875000000000e-01 1.012500000000e+00 5.223145603944e-01 1.139284314822e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +5.625000000000e-01 1.875000000000e-01 1.012500000000e+00 5.929270612816e-01 1.173336588537e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +6.375000000000e-01 1.875000000000e-01 1.012500000000e+00 6.645016930001e-01 1.211081644647e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.125000000000e-01 1.875000000000e-01 1.012500000000e+00 7.367581014146e-01 1.252185589280e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.875000000000e-01 1.875000000000e-01 1.012500000000e+00 8.095137429346e-01 1.296328951308e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 1.875000000000e-01 1.012500000000e+00 8.826451721955e-01 1.343212101643e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 1.875000000000e-01 1.012500000000e+00 9.560661587986e-01 1.392558347072e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 1.875000000000e-01 1.012500000000e+00 1.029714766331e+00 1.444115213548e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 1.875000000000e-01 1.012500000000e+00 1.103545422717e+00 1.497654416079e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 1.875000000000e-01 1.012500000000e+00 1.177523885108e+00 1.552970943064e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750000000006e-02 2.625000000004e-01 1.012500000004e+00 2.651650429454e-01 1.046646430275e+00 1.000000000113e+00 6.666666667919e-15 1.000000000075e-14 1.054092553429e-07 4.218749999524e-04 4.218750000000e-04 +1.125000000001e-01 2.625000000003e-01 1.012500000003e+00 2.855914914702e-01 1.052007010435e+00 1.000000000072e+00 6.666666667470e-15 1.000000000048e-14 1.054092553415e-07 4.218749999695e-04 4.218750000000e-04 +1.875000000001e-01 2.625000000001e-01 1.012500000001e+00 3.225871975142e-01 1.062647048649e+00 1.000000000029e+00 6.666666666985e-15 1.000000000019e-14 1.054092553400e-07 4.218749999879e-04 4.218750000000e-04 +2.625000000000e-01 2.625000000000e-01 1.012500000000e+00 3.712310601230e-01 1.078410288341e+00 1.000000000007e+00 6.666666666739e-15 1.000000000004e-14 1.054092553392e-07 4.218749999973e-04 4.218750000000e-04 +3.375000000000e-01 2.625000000000e-01 1.012500000000e+00 4.275657844122e-01 1.099076316731e+00 1.000000000001e+00 6.666666666675e-15 1.000000000000e-14 1.054092553390e-07 4.218749999997e-04 4.218750000000e-04 +4.125000000000e-01 2.625000000000e-01 1.012500000000e+00 4.889401803902e-01 1.124374826292e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.875000000000e-01 2.625000000000e-01 1.012500000000e+00 5.536808647588e-01 1.154001191507e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +5.625000000000e-01 2.625000000000e-01 1.012500000000e+00 6.207354508968e-01 1.187631571658e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +6.375000000000e-01 2.625000000000e-01 1.012500000000e+00 6.894291116569e-01 1.224936222830e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.125000000000e-01 2.625000000000e-01 1.012500000000e+00 7.593171274244e-01 1.265590277301e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.875000000000e-01 2.625000000000e-01 1.012500000000e+00 8.300978857942e-01 1.309281768757e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 2.625000000000e-01 1.012500000000e+00 9.015611460128e-01 1.355717061189e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 2.625000000000e-01 1.012500000000e+00 9.735566239310e-01 1.404624060025e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 2.625000000000e-01 1.012500000000e+00 1.045974426074e+00 1.455753670784e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 2.625000000000e-01 1.012500000000e+00 1.118732541763e+00 1.508879965405e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 2.625000000000e-01 1.012500000000e+00 1.191768643655e+00 1.563799459650e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750000000001e-02 3.375000000001e-01 1.012500000000e+00 3.395769426802e-01 1.067927314943e+00 1.000000000013e+00 6.666666666816e-15 1.000000000009e-14 1.054092553394e-07 4.218749999943e-04 4.218750000000e-04 +1.125000000000e-01 3.375000000000e-01 1.012500000000e+00 3.557562367690e-01 1.073181601594e+00 1.000000000009e+00 6.666666666761e-15 1.000000000006e-14 1.054092553392e-07 4.218749999964e-04 4.218750000000e-04 +1.875000000000e-01 3.375000000000e-01 1.012500000000e+00 3.860861302870e-01 1.083613745760e+00 1.000000000003e+00 6.666666666704e-15 1.000000000002e-14 1.054092553391e-07 4.218749999986e-04 4.218750000000e-04 +2.625000000000e-01 3.375000000000e-01 1.012500000000e+00 4.275657844122e-01 1.099076316731e+00 1.000000000001e+00 6.666666666675e-15 1.000000000000e-14 1.054092553390e-07 4.218749999997e-04 4.218750000000e-04 +3.375000000000e-01 3.375000000000e-01 1.012500000000e+00 4.772970773009e-01 1.119360866745e+00 1.000000000000e+00 6.666666666668e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.125000000000e-01 3.375000000000e-01 1.012500000000e+00 5.329751401332e-01 1.144210972679e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.875000000000e-01 3.375000000000e-01 1.012500000000e+00 5.929270612816e-01 1.173336588537e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +5.625000000000e-01 3.375000000000e-01 1.012500000000e+00 6.559820881701e-01 1.206428095661e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +6.375000000000e-01 3.375000000000e-01 1.012500000000e+00 7.213269023127e-01 1.243168834069e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.125000000000e-01 3.375000000000e-01 1.012500000000e+00 7.883923515611e-01 1.283245397420e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.875000000000e-01 3.375000000000e-01 1.012500000000e+00 8.567744744097e-01 1.326355438787e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 3.375000000000e-01 1.012500000000e+00 9.261816776421e-01 1.372213084765e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 3.375000000000e-01 1.012500000000e+00 9.963997691690e-01 1.420552269366e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 3.375000000000e-01 1.012500000000e+00 1.067268710307e+00 1.471128393445e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 3.375000000000e-01 1.012500000000e+00 1.138666983802e+00 1.523718724043e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 3.375000000000e-01 1.012500000000e+00 1.210500929368e+00 1.578121905938e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750000000000e-02 4.125000000000e-01 1.012500000000e+00 4.142010381445e-01 1.093946410936e+00 1.000000000001e+00 6.666666666673e-15 1.000000000000e-14 1.054092553390e-07 4.218749999997e-04 4.218750000000e-04 +1.125000000000e-01 4.125000000000e-01 1.012500000000e+00 4.275657844122e-01 1.099076316731e+00 1.000000000000e+00 6.666666666671e-15 1.000000000000e-14 1.054092553390e-07 4.218749999998e-04 4.218750000000e-04 +1.875000000000e-01 4.125000000000e-01 1.012500000000e+00 4.531142240098e-01 1.109264959331e+00 1.000000000000e+00 6.666666666668e-15 1.000000000000e-14 1.054092553390e-07 4.218749999999e-04 4.218750000000e-04 +2.625000000000e-01 4.125000000000e-01 1.012500000000e+00 4.889401803902e-01 1.124374826292e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +3.375000000000e-01 4.125000000000e-01 1.012500000000e+00 5.329751401332e-01 1.144210972679e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.125000000000e-01 4.125000000000e-01 1.012500000000e+00 5.833630944789e-01 1.168532733816e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.875000000000e-01 4.125000000000e-01 1.012500000000e+00 6.386019887222e-01 1.197066727463e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +5.625000000000e-01 4.125000000000e-01 1.012500000000e+00 6.975403214152e-01 1.229519723307e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +6.375000000000e-01 4.125000000000e-01 1.012500000000e+00 7.593171274244e-01 1.265590277301e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.125000000000e-01 4.125000000000e-01 1.012500000000e+00 8.232936900038e-01 1.304978448098e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.875000000000e-01 4.125000000000e-01 1.012500000000e+00 8.889952193347e-01 1.347393316742e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 4.125000000000e-01 1.012500000000e+00 9.560661587986e-01 1.392558347072e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 4.125000000000e-01 1.012500000000e+00 1.024237521281e+00 1.440214827725e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 4.125000000000e-01 1.012500000000e+00 1.093303480283e+00 1.490123736473e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 4.125000000000e-01 1.012500000000e+00 1.163104681445e+00 1.542066389621e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 4.125000000000e-01 1.012500000000e+00 1.233516315255e+00 1.595844212322e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750000000000e-02 4.875000000000e-01 1.012500000000e+00 4.889401803902e-01 1.124374826292e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.125000000000e-01 4.875000000000e-01 1.012500000000e+00 5.003124024047e-01 1.129366525978e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.875000000000e-01 4.875000000000e-01 1.012500000000e+00 5.223145603944e-01 1.139284314822e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +2.625000000000e-01 4.875000000000e-01 1.012500000000e+00 5.536808647588e-01 1.154001191507e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +3.375000000000e-01 4.875000000000e-01 1.012500000000e+00 5.929270612816e-01 1.173336588537e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.125000000000e-01 4.875000000000e-01 1.012500000000e+00 6.386019887222e-01 1.197066727463e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.875000000000e-01 4.875000000000e-01 1.012500000000e+00 6.894291116569e-01 1.224936222830e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +5.625000000000e-01 4.875000000000e-01 1.012500000000e+00 7.443537465480e-01 1.256669706009e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +6.375000000000e-01 4.875000000000e-01 1.012500000000e+00 8.025350459637e-01 1.291982488271e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.125000000000e-01 4.875000000000e-01 1.012500000000e+00 8.633148324916e-01 1.330589624941e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.875000000000e-01 4.875000000000e-01 1.012500000000e+00 9.261816776421e-01 1.372213084765e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 4.875000000000e-01 1.012500000000e+00 9.907383610217e-01 1.416587007564e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 4.875000000000e-01 1.012500000000e+00 1.056675210270e+00 1.463461222582e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 4.875000000000e-01 1.012500000000e+00 1.123749304783e+00 1.512603302257e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 4.875000000000e-01 1.012500000000e+00 1.191768643655e+00 1.563799459649e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 4.875000000000e-01 1.012500000000e+00 1.260580223548e+00 1.616854585298e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750000000000e-02 5.625000000000e-01 1.012500000000e+00 5.637486141890e-01 1.158865285527e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.125000000000e-01 5.625000000000e-01 1.012500000000e+00 5.736396952792e-01 1.163709048689e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.875000000000e-01 5.625000000000e-01 1.012500000000e+00 5.929270612816e-01 1.173336588537e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +2.625000000000e-01 5.625000000000e-01 1.012500000000e+00 6.207354508968e-01 1.187631571658e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +3.375000000000e-01 5.625000000000e-01 1.012500000000e+00 6.559820881701e-01 1.206428095661e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.125000000000e-01 5.625000000000e-01 1.012500000000e+00 6.975403214152e-01 1.229519723307e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.875000000000e-01 5.625000000000e-01 1.012500000000e+00 7.443537465480e-01 1.256669706009e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +5.625000000000e-01 5.625000000000e-01 1.012500000000e+00 7.954951288349e-01 1.287621353504e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +6.375000000000e-01 5.625000000000e-01 1.012500000000e+00 8.501838036566e-01 1.322107692285e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.125000000000e-01 5.625000000000e-01 1.012500000000e+00 9.077788827683e-01 1.359859827335e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.875000000000e-01 5.625000000000e-01 1.012500000000e+00 9.677615925423e-01 1.400613704774e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 5.625000000000e-01 1.012500000000e+00 1.029714766331e+00 1.444115213548e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 5.625000000000e-01 1.012500000000e+00 1.093303480283e+00 1.490123736473e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 5.625000000000e-01 1.012500000000e+00 1.158258390861e+00 1.538414362257e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 5.625000000000e-01 1.012500000000e+00 1.224362078799e+00 1.588779012324e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 5.625000000000e-01 1.012500000000e+00 1.291438151829e+00 1.641026736528e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750000000000e-02 6.375000000000e-01 1.012500000000e+00 6.386019887222e-01 1.197066727463e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.125000000000e-01 6.375000000000e-01 1.012500000000e+00 6.473503688112e-01 1.201756526922e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.875000000000e-01 6.375000000000e-01 1.012500000000e+00 6.645016930001e-01 1.211081644647e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +2.625000000000e-01 6.375000000000e-01 1.012500000000e+00 6.894291116569e-01 1.224936222830e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +3.375000000000e-01 6.375000000000e-01 1.012500000000e+00 7.213269023127e-01 1.243168834069e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.125000000000e-01 6.375000000000e-01 1.012500000000e+00 7.593171274244e-01 1.265590277301e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.875000000000e-01 6.375000000000e-01 1.012500000000e+00 8.025350459637e-01 1.291982488271e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +5.625000000000e-01 6.375000000000e-01 1.012500000000e+00 8.501838036566e-01 1.322107692285e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +6.375000000000e-01 6.375000000000e-01 1.012500000000e+00 9.015611460128e-01 1.355717061189e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.125000000000e-01 6.375000000000e-01 1.012500000000e+00 9.560661587986e-01 1.392558347072e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.875000000000e-01 6.375000000000e-01 1.012500000000e+00 1.013194206458e+00 1.432382194109e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 6.375000000000e-01 1.012500000000e+00 1.072526223456e+00 1.474947032947e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 6.375000000000e-01 1.012500000000e+00 1.133716234337e+00 1.520022614963e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 6.375000000000e-01 1.012500000000e+00 1.196479210016e+00 1.567392340800e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 6.375000000000e-01 1.012500000000e+00 1.260580223548e+00 1.616854585298e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 6.375000000000e-01 1.012500000000e+00 1.325825214725e+00 1.668223231465e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750000000000e-02 7.125000000000e-01 1.012500000000e+00 7.134861596415e-01 1.238635842369e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.125000000000e-01 7.125000000000e-01 1.012500000000e+00 7.213269023127e-01 1.243168834069e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.875000000000e-01 7.125000000000e-01 1.012500000000e+00 7.367581014146e-01 1.252185589280e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +2.625000000000e-01 7.125000000000e-01 1.012500000000e+00 7.593171274244e-01 1.265590277301e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +3.375000000000e-01 7.125000000000e-01 1.012500000000e+00 7.883923515611e-01 1.283245397420e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.125000000000e-01 7.125000000000e-01 1.012500000000e+00 8.232936900038e-01 1.304978448098e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.875000000000e-01 7.125000000000e-01 1.012500000000e+00 8.633148324916e-01 1.330589624941e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +5.625000000000e-01 7.125000000000e-01 1.012500000000e+00 9.077788827683e-01 1.359859827335e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +6.375000000000e-01 7.125000000000e-01 1.012500000000e+00 9.560661587986e-01 1.392558347072e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.125000000000e-01 7.125000000000e-01 1.012500000000e+00 1.007627163191e+00 1.428449771606e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.875000000000e-01 7.125000000000e-01 1.012500000000e+00 1.061985169388e+00 1.467299815989e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 7.125000000000e-01 1.012500000000e+00 1.118732541763e+00 1.508879965405e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 7.125000000000e-01 1.012500000000e+00 1.177523885108e+00 1.552970943064e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 7.125000000000e-01 1.012500000000e+00 1.238068051441e+00 1.599365108410e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 7.125000000000e-01 1.012500000000e+00 1.300120186752e+00 1.647867940704e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 7.125000000000e-01 1.012500000000e+00 1.363474422202e+00 1.698298781134e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750000000000e-02 7.875000000000e-01 1.012500000000e+00 7.883923515611e-01 1.283245397420e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.125000000000e-01 7.875000000000e-01 1.012500000000e+00 7.954951288349e-01 1.287621353504e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.875000000000e-01 7.875000000000e-01 1.012500000000e+00 8.095137429346e-01 1.296328951308e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +2.625000000000e-01 7.875000000000e-01 1.012500000000e+00 8.300978857942e-01 1.309281768757e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +3.375000000000e-01 7.875000000000e-01 1.012500000000e+00 8.567744744097e-01 1.326355438787e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.125000000000e-01 7.875000000000e-01 1.012500000000e+00 8.889952193347e-01 1.347393316742e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.875000000000e-01 7.875000000000e-01 1.012500000000e+00 9.261816776421e-01 1.372213084765e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +5.625000000000e-01 7.875000000000e-01 1.012500000000e+00 9.677615925423e-01 1.400613704774e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +6.375000000000e-01 7.875000000000e-01 1.012500000000e+00 1.013194206458e+00 1.432382194109e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.125000000000e-01 7.875000000000e-01 1.012500000000e+00 1.061985169388e+00 1.467299815989e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.875000000000e-01 7.875000000000e-01 1.012500000000e+00 1.113693180369e+00 1.505147418029e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 7.875000000000e-01 1.012500000000e+00 1.167930862680e+00 1.545709788414e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 7.875000000000e-01 1.012500000000e+00 1.224362078799e+00 1.588779012324e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 7.875000000000e-01 1.012500000000e+00 1.282697353237e+00 1.634156892713e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 7.875000000000e-01 1.012500000000e+00 1.342688534248e+00 1.681656549358e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 7.875000000000e-01 1.012500000000e+00 1.404123392014e+00 1.731103333138e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750000000000e-02 8.625000000000e-01 1.012500000000e+00 8.633148324916e-01 1.330589624941e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.125000000000e-01 8.625000000000e-01 1.012500000000e+00 8.698060128557e-01 1.334810379792e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.875000000000e-01 8.625000000000e-01 1.012500000000e+00 8.826451721955e-01 1.343212101643e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +2.625000000000e-01 8.625000000000e-01 1.012500000000e+00 9.015611460128e-01 1.355717061189e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +3.375000000000e-01 8.625000000000e-01 1.012500000000e+00 9.261816776421e-01 1.372213084765e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.125000000000e-01 8.625000000000e-01 1.012500000000e+00 9.560661587986e-01 1.392558347072e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.875000000000e-01 8.625000000000e-01 1.012500000000e+00 9.907383610217e-01 1.416587007564e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +5.625000000000e-01 8.625000000000e-01 1.012500000000e+00 1.029714766331e+00 1.444115213548e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +6.375000000000e-01 8.625000000000e-01 1.012500000000e+00 1.072526223456e+00 1.474947032947e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.125000000000e-01 8.625000000000e-01 1.012500000000e+00 1.118732541763e+00 1.508879965405e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.875000000000e-01 8.625000000000e-01 1.012500000000e+00 1.167930862680e+00 1.545709788414e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 8.625000000000e-01 1.012500000000e+00 1.219759197547e+00 1.585234604089e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 8.625000000000e-01 1.012500000000e+00 1.273896581360e+00 1.627258046531e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 8.625000000000e-01 1.012500000000e+00 1.330061088823e+00 1.671591681602e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 8.625000000000e-01 1.012500000000e+00 1.388006664249e+00 1.718056678343e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 8.625000000000e-01 1.012500000000e+00 1.447519429921e+00 1.766484856997e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750000000000e-02 9.375000000000e-01 1.012500000000e+00 9.382497002398e-01 1.380387173948e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.125000000000e-01 9.375000000000e-01 1.012500000000e+00 9.442258734011e-01 1.384456120648e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.875000000000e-01 9.375000000000e-01 1.012500000000e+00 9.560661587986e-01 1.392558347072e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +2.625000000000e-01 9.375000000000e-01 1.012500000000e+00 9.735566239310e-01 1.404624060025e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +3.375000000000e-01 9.375000000000e-01 1.012500000000e+00 9.963997691690e-01 1.420552269366e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.125000000000e-01 9.375000000000e-01 1.012500000000e+00 1.024237521281e+00 1.440214827725e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.875000000000e-01 9.375000000000e-01 1.012500000000e+00 1.056675210270e+00 1.463461222582e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +5.625000000000e-01 9.375000000000e-01 1.012500000000e+00 1.093303480283e+00 1.490123736473e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +6.375000000000e-01 9.375000000000e-01 1.012500000000e+00 1.133716234337e+00 1.520022614963e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.125000000000e-01 9.375000000000e-01 1.012500000000e+00 1.177523885108e+00 1.552970943064e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.875000000000e-01 9.375000000000e-01 1.012500000000e+00 1.224362078799e+00 1.588779012324e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 9.375000000000e-01 1.012500000000e+00 1.273896581360e+00 1.627258046531e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 9.375000000000e-01 1.012500000000e+00 1.325825214725e+00 1.668223231465e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 9.375000000000e-01 1.012500000000e+00 1.379877711973e+00 1.711496056087e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 9.375000000000e-01 1.012500000000e+00 1.435814228931e+00 1.756906016268e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 9.375000000000e-01 1.012500000000e+00 1.493423081381e+00 1.804291758558e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750000000000e-02 1.012500000000e+00 1.012500000000e+00 1.013194206458e+00 1.432382194109e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.125000000000e-01 1.012500000000e+00 1.012500000000e+00 1.018730828040e+00 1.436303850165e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.875000000000e-01 1.012500000000e+00 1.012500000000e+00 1.029714766331e+00 1.444115213548e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +2.625000000000e-01 1.012500000000e+00 1.012500000000e+00 1.045974426074e+00 1.455753670784e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +3.375000000000e-01 1.012500000000e+00 1.012500000000e+00 1.067268710307e+00 1.471128393445e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.125000000000e-01 1.012500000000e+00 1.012500000000e+00 1.093303480283e+00 1.490123736473e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.875000000000e-01 1.012500000000e+00 1.012500000000e+00 1.123749304783e+00 1.512603302257e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +5.625000000000e-01 1.012500000000e+00 1.012500000000e+00 1.158258390861e+00 1.538414362257e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +6.375000000000e-01 1.012500000000e+00 1.012500000000e+00 1.196479210016e+00 1.567392340800e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.125000000000e-01 1.012500000000e+00 1.012500000000e+00 1.238068051441e+00 1.599365108410e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.875000000000e-01 1.012500000000e+00 1.012500000000e+00 1.282697353237e+00 1.634156892713e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 1.012500000000e+00 1.012500000000e+00 1.330061088823e+00 1.671591681602e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 1.012500000000e+00 1.012500000000e+00 1.379877711973e+00 1.711496056087e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 1.012500000000e+00 1.012500000000e+00 1.431891231903e+00 1.753701442663e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 1.012500000000e+00 1.012500000000e+00 1.485870956712e+00 1.798045814211e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 1.012500000000e+00 1.012500000000e+00 1.541610359332e+00 1.844374894104e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750000000000e-02 1.087500000000e+00 1.012500000000e+00 1.088146359641e+00 1.486344088695e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.125000000000e-01 1.087500000000e+00 1.012500000000e+00 1.093303480283e+00 1.490123736473e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.875000000000e-01 1.087500000000e+00 1.012500000000e+00 1.103545422717e+00 1.497654416079e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +2.625000000000e-01 1.087500000000e+00 1.012500000000e+00 1.118732541763e+00 1.508879965405e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +3.375000000000e-01 1.087500000000e+00 1.012500000000e+00 1.138666983802e+00 1.523718724043e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.125000000000e-01 1.087500000000e+00 1.012500000000e+00 1.163104681445e+00 1.542066389621e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.875000000000e-01 1.087500000000e+00 1.012500000000e+00 1.191768643655e+00 1.563799459649e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +5.625000000000e-01 1.087500000000e+00 1.012500000000e+00 1.224362078799e+00 1.588779012324e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +6.375000000000e-01 1.087500000000e+00 1.012500000000e+00 1.260580223548e+00 1.616854585298e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.125000000000e-01 1.087500000000e+00 1.012500000000e+00 1.300120186752e+00 1.647867940704e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.875000000000e-01 1.087500000000e+00 1.012500000000e+00 1.342688534248e+00 1.681656549358e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 1.087500000000e+00 1.012500000000e+00 1.388006664249e+00 1.718056678343e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 1.087500000000e+00 1.012500000000e+00 1.435814228931e+00 1.756906016268e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 1.087500000000e+00 1.012500000000e+00 1.485870956712e+00 1.798045814211e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 1.087500000000e+00 1.012500000000e+00 1.537957249081e+00 1.841322554579e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 1.087500000000e+00 1.012500000000e+00 1.591873895759e+00 1.886589184216e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750000000000e-02 1.162500000000e+00 1.012500000000e+00 1.163104681445e+00 1.542066389621e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.125000000000e-01 1.162500000000e+00 1.012500000000e+00 1.167930862680e+00 1.545709788414e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.875000000000e-01 1.162500000000e+00 1.012500000000e+00 1.177523885108e+00 1.552970943064e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +2.625000000000e-01 1.162500000000e+00 1.012500000000e+00 1.191768643655e+00 1.563799459650e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.375000000000e-01 1.162500000000e+00 1.012500000000e+00 1.210500929368e+00 1.578121905938e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +4.125000000000e-01 1.162500000000e+00 1.012500000000e+00 1.233516315255e+00 1.595844212322e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +4.875000000000e-01 1.162500000000e+00 1.012500000000e+00 1.260580223548e+00 1.616854585298e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +5.625000000000e-01 1.162500000000e+00 1.012500000000e+00 1.291438151829e+00 1.641026736528e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +6.375000000000e-01 1.162500000000e+00 1.012500000000e+00 1.325825214725e+00 1.668223231465e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +7.125000000000e-01 1.162500000000e+00 1.012500000000e+00 1.363474422202e+00 1.698298781134e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +7.875000000000e-01 1.162500000000e+00 1.012500000000e+00 1.404123392014e+00 1.731103333138e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +8.625000000000e-01 1.162500000000e+00 1.012500000000e+00 1.447519429921e+00 1.766484856997e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +9.375000000000e-01 1.162500000000e+00 1.012500000000e+00 1.493423081381e+00 1.804291758558e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.012500000000e+00 1.162500000000e+00 1.012500000000e+00 1.541610359332e+00 1.844374894104e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.087500000000e+00 1.162500000000e+00 1.012500000000e+00 1.591873895759e+00 1.886589184216e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.162500000000e+00 1.162500000000e+00 1.012500000000e+00 1.644023266259e+00 1.930794849278e+00 9.999999999976e-01 6.666666666640e-15 9.999999999984e-15 1.054092553389e-07 4.218750000010e-04 4.218750000000e-04 +3.750000000000e-02 3.750000000000e-02 1.087500000000e+00 5.303300858899e-02 1.088792335572e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.125000000000e-01 3.750000000000e-02 1.087500000000e+00 1.185854122563e-01 1.093946410936e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.875000000000e-01 3.750000000000e-02 1.087500000000e+00 1.912132317597e-01 1.104182389825e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +2.625000000000e-01 3.750000000000e-02 1.087500000000e+00 2.651650429450e-01 1.119360866745e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +3.375000000000e-01 3.750000000000e-02 1.087500000000e+00 3.395769426802e-01 1.139284314822e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.125000000000e-01 3.750000000000e-02 1.087500000000e+00 4.142010381445e-01 1.163709048689e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.875000000000e-01 3.750000000000e-02 1.087500000000e+00 4.889401803902e-01 1.192358482169e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +5.625000000000e-01 3.750000000000e-02 1.087500000000e+00 5.637486141890e-01 1.224936222830e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +6.375000000000e-01 3.750000000000e-02 1.087500000000e+00 6.386019887222e-01 1.261137879060e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.125000000000e-01 3.750000000000e-02 1.087500000000e+00 7.134861596415e-01 1.300660889702e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.875000000000e-01 3.750000000000e-02 1.087500000000e+00 7.883923515611e-01 1.343212101643e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 3.750000000000e-02 1.087500000000e+00 8.633148324916e-01 1.388513143618e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 3.750000000000e-02 1.087500000000e+00 9.382497002398e-01 1.436303850165e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 3.750000000000e-02 1.087500000000e+00 1.013194206458e+00 1.486344088695e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 3.750000000000e-02 1.087500000000e+00 1.088146359641e+00 1.538414362257e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 3.750000000000e-02 1.087500000000e+00 1.163104681445e+00 1.592315530917e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750000000000e-02 1.125000000000e-01 1.087500000000e+00 1.185854122563e-01 1.093946410936e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.125000000000e-01 1.125000000000e-01 1.087500000000e+00 1.590990257670e-01 1.099076316731e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.875000000000e-01 1.125000000000e-01 1.087500000000e+00 2.186606960567e-01 1.109264959331e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +2.625000000000e-01 1.125000000000e-01 1.087500000000e+00 2.855914914699e-01 1.124374826292e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +3.375000000000e-01 1.125000000000e-01 1.087500000000e+00 3.557562367689e-01 1.144210972679e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.125000000000e-01 1.125000000000e-01 1.087500000000e+00 4.275657844122e-01 1.168532733816e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.875000000000e-01 1.125000000000e-01 1.087500000000e+00 5.003124024047e-01 1.197066727463e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +5.625000000000e-01 1.125000000000e-01 1.087500000000e+00 5.736396952792e-01 1.229519723307e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +6.375000000000e-01 1.125000000000e-01 1.087500000000e+00 6.473503688112e-01 1.265590277301e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.125000000000e-01 1.125000000000e-01 1.087500000000e+00 7.213269023127e-01 1.304978448098e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.875000000000e-01 1.125000000000e-01 1.087500000000e+00 7.954951288349e-01 1.347393316742e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 1.125000000000e-01 1.087500000000e+00 8.698060128557e-01 1.392558347072e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 1.125000000000e-01 1.087500000000e+00 9.442258734011e-01 1.440214827725e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 1.125000000000e-01 1.087500000000e+00 1.018730828040e+00 1.490123736473e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 1.125000000000e-01 1.087500000000e+00 1.093303480283e+00 1.542066389621e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 1.125000000000e-01 1.087500000000e+00 1.167930862680e+00 1.595844212322e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750000000000e-02 1.875000000000e-01 1.087500000000e+00 1.912132317597e-01 1.104182389825e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.125000000000e-01 1.875000000000e-01 1.087500000000e+00 2.186606960567e-01 1.109264959331e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.875000000000e-01 1.875000000000e-01 1.087500000000e+00 2.651650429450e-01 1.119360866745e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +2.625000000000e-01 1.875000000000e-01 1.087500000000e+00 3.225871975141e-01 1.134336259669e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +3.375000000000e-01 1.875000000000e-01 1.087500000000e+00 3.860861302870e-01 1.154001191507e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.125000000000e-01 1.875000000000e-01 1.087500000000e+00 4.531142240098e-01 1.178120855430e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.875000000000e-01 1.875000000000e-01 1.087500000000e+00 5.223145603944e-01 1.206428095661e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +5.625000000000e-01 1.875000000000e-01 1.087500000000e+00 5.929270612816e-01 1.238635842369e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +6.375000000000e-01 1.875000000000e-01 1.087500000000e+00 6.645016930001e-01 1.274448410097e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.125000000000e-01 1.875000000000e-01 1.087500000000e+00 7.367581014146e-01 1.313570991610e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.875000000000e-01 1.875000000000e-01 1.087500000000e+00 8.095137429346e-01 1.355717061189e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 1.875000000000e-01 1.087500000000e+00 8.826451721955e-01 1.400613704774e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 1.875000000000e-01 1.087500000000e+00 9.560661587986e-01 1.448005093223e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 1.875000000000e-01 1.087500000000e+00 1.029714766331e+00 1.497654416079e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 1.875000000000e-01 1.087500000000e+00 1.103545422717e+00 1.549344619509e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 1.875000000000e-01 1.087500000000e+00 1.177523885108e+00 1.602878270487e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750000000000e-02 2.625000000000e-01 1.087500000000e+00 2.651650429450e-01 1.119360866745e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.125000000000e-01 2.625000000000e-01 1.087500000000e+00 2.855914914699e-01 1.124374826292e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.875000000000e-01 2.625000000000e-01 1.087500000000e+00 3.225871975141e-01 1.134336259669e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +2.625000000000e-01 2.625000000000e-01 1.087500000000e+00 3.712310601229e-01 1.149116508453e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +3.375000000000e-01 2.625000000000e-01 1.087500000000e+00 4.275657844122e-01 1.168532733816e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.125000000000e-01 2.625000000000e-01 1.087500000000e+00 4.889401803902e-01 1.192358482169e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.875000000000e-01 2.625000000000e-01 1.087500000000e+00 5.536808647588e-01 1.220335507145e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +5.625000000000e-01 2.625000000000e-01 1.087500000000e+00 6.207354508968e-01 1.252185589280e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +6.375000000000e-01 2.625000000000e-01 1.087500000000e+00 6.894291116569e-01 1.287621353504e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.125000000000e-01 2.625000000000e-01 1.087500000000e+00 7.593171274244e-01 1.326355438787e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.875000000000e-01 2.625000000000e-01 1.087500000000e+00 8.300978857942e-01 1.368107726022e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 2.625000000000e-01 1.087500000000e+00 9.015611460128e-01 1.412610615138e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 2.625000000000e-01 1.087500000000e+00 9.735566239310e-01 1.459612534202e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 2.625000000000e-01 1.087500000000e+00 1.045974426074e+00 1.508879965405e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 2.625000000000e-01 1.087500000000e+00 1.118732541763e+00 1.560198304704e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 2.625000000000e-01 1.087500000000e+00 1.191768643655e+00 1.613371857322e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750000000000e-02 3.375000000000e-01 1.087500000000e+00 3.395769426802e-01 1.139284314822e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.125000000000e-01 3.375000000000e-01 1.087500000000e+00 3.557562367689e-01 1.144210972679e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.875000000000e-01 3.375000000000e-01 1.087500000000e+00 3.860861302870e-01 1.154001191507e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +2.625000000000e-01 3.375000000000e-01 1.087500000000e+00 4.275657844122e-01 1.168532733816e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +3.375000000000e-01 3.375000000000e-01 1.087500000000e+00 4.772970773009e-01 1.187631571658e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.125000000000e-01 3.375000000000e-01 1.087500000000e+00 5.329751401332e-01 1.211081644647e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.875000000000e-01 3.375000000000e-01 1.087500000000e+00 5.929270612816e-01 1.238635842369e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +5.625000000000e-01 3.375000000000e-01 1.087500000000e+00 6.559820881701e-01 1.270027066641e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +6.375000000000e-01 3.375000000000e-01 1.087500000000e+00 7.213269023127e-01 1.304978448098e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.125000000000e-01 3.375000000000e-01 1.087500000000e+00 7.883923515611e-01 1.343212101643e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.875000000000e-01 3.375000000000e-01 1.087500000000e+00 8.567744744097e-01 1.384456120648e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 3.375000000000e-01 1.087500000000e+00 9.261816776421e-01 1.428449771606e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 3.375000000000e-01 1.087500000000e+00 9.963997691690e-01 1.474947032947e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 3.375000000000e-01 1.087500000000e+00 1.067268710307e+00 1.523718724043e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 3.375000000000e-01 1.087500000000e+00 1.138666983802e+00 1.574553508141e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 3.375000000000e-01 1.087500000000e+00 1.210500929368e+00 1.627258046531e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750000000000e-02 4.125000000000e-01 1.087500000000e+00 4.142010381445e-01 1.163709048689e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.125000000000e-01 4.125000000000e-01 1.087500000000e+00 4.275657844122e-01 1.168532733816e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.875000000000e-01 4.125000000000e-01 1.087500000000e+00 4.531142240098e-01 1.178120855430e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +2.625000000000e-01 4.125000000000e-01 1.087500000000e+00 4.889401803902e-01 1.192358482169e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +3.375000000000e-01 4.125000000000e-01 1.087500000000e+00 5.329751401332e-01 1.211081644647e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.125000000000e-01 4.125000000000e-01 1.087500000000e+00 5.833630944789e-01 1.234086200393e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.875000000000e-01 4.125000000000e-01 1.087500000000e+00 6.386019887222e-01 1.261137879060e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +5.625000000000e-01 4.125000000000e-01 1.087500000000e+00 6.975403214152e-01 1.291982488271e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +6.375000000000e-01 4.125000000000e-01 1.087500000000e+00 7.593171274244e-01 1.326355438787e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.125000000000e-01 4.125000000000e-01 1.087500000000e+00 8.232936900038e-01 1.363990010960e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.875000000000e-01 4.125000000000e-01 1.087500000000e+00 8.889952193347e-01 1.404624060025e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 4.125000000000e-01 1.087500000000e+00 9.560661587986e-01 1.448005093223e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 4.125000000000e-01 1.087500000000e+00 1.024237521281e+00 1.493893821528e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 4.125000000000e-01 1.087500000000e+00 1.093303480283e+00 1.542066389621e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 4.125000000000e-01 1.087500000000e+00 1.163104681445e+00 1.592315530917e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 4.125000000000e-01 1.087500000000e+00 1.233516315255e+00 1.644450896196e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750000000000e-02 4.875000000000e-01 1.087500000000e+00 4.889401803902e-01 1.192358482169e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.125000000000e-01 4.875000000000e-01 1.087500000000e+00 5.003124024047e-01 1.197066727463e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.875000000000e-01 4.875000000000e-01 1.087500000000e+00 5.223145603944e-01 1.206428095661e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +2.625000000000e-01 4.875000000000e-01 1.087500000000e+00 5.536808647588e-01 1.220335507145e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +3.375000000000e-01 4.875000000000e-01 1.087500000000e+00 5.929270612816e-01 1.238635842369e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.125000000000e-01 4.875000000000e-01 1.087500000000e+00 6.386019887222e-01 1.261137879060e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.875000000000e-01 4.875000000000e-01 1.087500000000e+00 6.894291116569e-01 1.287621353504e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +5.625000000000e-01 4.875000000000e-01 1.087500000000e+00 7.443537465480e-01 1.317846254310e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +6.375000000000e-01 4.875000000000e-01 1.087500000000e+00 8.025350459637e-01 1.351561596821e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.125000000000e-01 4.875000000000e-01 1.087500000000e+00 8.633148324916e-01 1.388513143618e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.875000000000e-01 4.875000000000e-01 1.087500000000e+00 9.261816776421e-01 1.428449771606e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 4.875000000000e-01 1.087500000000e+00 9.907383610217e-01 1.471128393445e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 4.875000000000e-01 1.087500000000e+00 1.056675210270e+00 1.516317496437e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 4.875000000000e-01 1.087500000000e+00 1.123749304783e+00 1.563799459649e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 4.875000000000e-01 1.087500000000e+00 1.191768643655e+00 1.613371857322e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 4.875000000000e-01 1.087500000000e+00 1.260580223548e+00 1.664847966032e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750000000000e-02 5.625000000000e-01 1.087500000000e+00 5.637486141890e-01 1.224936222830e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.125000000000e-01 5.625000000000e-01 1.087500000000e+00 5.736396952792e-01 1.229519723307e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.875000000000e-01 5.625000000000e-01 1.087500000000e+00 5.929270612816e-01 1.238635842369e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +2.625000000000e-01 5.625000000000e-01 1.087500000000e+00 6.207354508968e-01 1.252185589280e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +3.375000000000e-01 5.625000000000e-01 1.087500000000e+00 6.559820881701e-01 1.270027066641e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.125000000000e-01 5.625000000000e-01 1.087500000000e+00 6.975403214152e-01 1.291982488271e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.875000000000e-01 5.625000000000e-01 1.087500000000e+00 7.443537465480e-01 1.317846254310e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +5.625000000000e-01 5.625000000000e-01 1.087500000000e+00 7.954951288349e-01 1.347393316742e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +6.375000000000e-01 5.625000000000e-01 1.087500000000e+00 8.501838036566e-01 1.380387173948e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.125000000000e-01 5.625000000000e-01 1.087500000000e+00 9.077788827683e-01 1.416587007564e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.875000000000e-01 5.625000000000e-01 1.087500000000e+00 9.677615925423e-01 1.455753670784e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 5.625000000000e-01 1.087500000000e+00 1.029714766331e+00 1.497654416079e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 5.625000000000e-01 1.087500000000e+00 1.093303480283e+00 1.542066389621e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 5.625000000000e-01 1.087500000000e+00 1.158258390861e+00 1.588779012324e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 5.625000000000e-01 1.087500000000e+00 1.224362078799e+00 1.637595417067e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 5.625000000000e-01 1.087500000000e+00 1.291438151829e+00 1.688333127674e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750000000000e-02 6.375000000000e-01 1.087500000000e+00 6.386019887222e-01 1.261137879060e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.125000000000e-01 6.375000000000e-01 1.087500000000e+00 6.473503688112e-01 1.265590277301e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.875000000000e-01 6.375000000000e-01 1.087500000000e+00 6.645016930001e-01 1.274448410097e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +2.625000000000e-01 6.375000000000e-01 1.087500000000e+00 6.894291116569e-01 1.287621353504e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +3.375000000000e-01 6.375000000000e-01 1.087500000000e+00 7.213269023127e-01 1.304978448098e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.125000000000e-01 6.375000000000e-01 1.087500000000e+00 7.593171274244e-01 1.326355438787e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.875000000000e-01 6.375000000000e-01 1.087500000000e+00 8.025350459637e-01 1.351561596821e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +5.625000000000e-01 6.375000000000e-01 1.087500000000e+00 8.501838036566e-01 1.380387173948e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +6.375000000000e-01 6.375000000000e-01 1.087500000000e+00 9.015611460128e-01 1.412610615138e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.125000000000e-01 6.375000000000e-01 1.087500000000e+00 9.560661587986e-01 1.448005093223e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.875000000000e-01 6.375000000000e-01 1.087500000000e+00 1.013194206458e+00 1.486344088695e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 6.375000000000e-01 1.087500000000e+00 1.072526223456e+00 1.527405889081e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 6.375000000000e-01 1.087500000000e+00 1.133716234337e+00 1.570977004924e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 6.375000000000e-01 1.087500000000e+00 1.196479210016e+00 1.616854585298e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 6.375000000000e-01 1.087500000000e+00 1.260580223548e+00 1.664847966032e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 6.375000000000e-01 1.087500000000e+00 1.325825214725e+00 1.714779504776e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750000000000e-02 7.125000000000e-01 1.087500000000e+00 7.134861596415e-01 1.300660889702e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.125000000000e-01 7.125000000000e-01 1.087500000000e+00 7.213269023127e-01 1.304978448098e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.875000000000e-01 7.125000000000e-01 1.087500000000e+00 7.367581014146e-01 1.313570991610e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +2.625000000000e-01 7.125000000000e-01 1.087500000000e+00 7.593171274244e-01 1.326355438787e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +3.375000000000e-01 7.125000000000e-01 1.087500000000e+00 7.883923515611e-01 1.343212101643e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.125000000000e-01 7.125000000000e-01 1.087500000000e+00 8.232936900038e-01 1.363990010960e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.875000000000e-01 7.125000000000e-01 1.087500000000e+00 8.633148324916e-01 1.388513143618e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +5.625000000000e-01 7.125000000000e-01 1.087500000000e+00 9.077788827683e-01 1.416587007564e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +6.375000000000e-01 7.125000000000e-01 1.087500000000e+00 9.560661587986e-01 1.448005093223e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.125000000000e-01 7.125000000000e-01 1.087500000000e+00 1.007627163191e+00 1.482554805058e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.875000000000e-01 7.125000000000e-01 1.087500000000e+00 1.061985169388e+00 1.520022614963e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 7.125000000000e-01 1.087500000000e+00 1.118732541763e+00 1.560198304704e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 7.125000000000e-01 1.087500000000e+00 1.177523885108e+00 1.602878270487e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 7.125000000000e-01 1.087500000000e+00 1.238068051441e+00 1.647867940704e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 7.125000000000e-01 1.087500000000e+00 1.300120186752e+00 1.694983406998e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 7.125000000000e-01 1.087500000000e+00 1.363474422202e+00 1.744052393135e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750000000000e-02 7.875000000000e-01 1.087500000000e+00 7.883923515611e-01 1.343212101643e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.125000000000e-01 7.875000000000e-01 1.087500000000e+00 7.954951288349e-01 1.347393316742e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.875000000000e-01 7.875000000000e-01 1.087500000000e+00 8.095137429346e-01 1.355717061189e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +2.625000000000e-01 7.875000000000e-01 1.087500000000e+00 8.300978857942e-01 1.368107726022e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +3.375000000000e-01 7.875000000000e-01 1.087500000000e+00 8.567744744097e-01 1.384456120648e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.125000000000e-01 7.875000000000e-01 1.087500000000e+00 8.889952193347e-01 1.404624060025e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.875000000000e-01 7.875000000000e-01 1.087500000000e+00 9.261816776421e-01 1.428449771606e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +5.625000000000e-01 7.875000000000e-01 1.087500000000e+00 9.677615925423e-01 1.455753670784e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +6.375000000000e-01 7.875000000000e-01 1.087500000000e+00 1.013194206458e+00 1.486344088695e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.125000000000e-01 7.875000000000e-01 1.087500000000e+00 1.061985169388e+00 1.520022614963e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.875000000000e-01 7.875000000000e-01 1.087500000000e+00 1.113693180369e+00 1.556588818539e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 7.875000000000e-01 1.087500000000e+00 1.167930862680e+00 1.595844212321e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 7.875000000000e-01 1.087500000000e+00 1.224362078799e+00 1.637595417067e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 7.875000000000e-01 1.087500000000e+00 1.282697353237e+00 1.681656549358e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 7.875000000000e-01 1.087500000000e+00 1.342688534248e+00 1.727850905026e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 7.875000000000e-01 1.087500000000e+00 1.404123392014e+00 1.776012035432e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750000000000e-02 8.625000000000e-01 1.087500000000e+00 8.633148324916e-01 1.388513143618e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.125000000000e-01 8.625000000000e-01 1.087500000000e+00 8.698060128557e-01 1.392558347072e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.875000000000e-01 8.625000000000e-01 1.087500000000e+00 8.826451721955e-01 1.400613704774e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +2.625000000000e-01 8.625000000000e-01 1.087500000000e+00 9.015611460128e-01 1.412610615138e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +3.375000000000e-01 8.625000000000e-01 1.087500000000e+00 9.261816776421e-01 1.428449771606e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.125000000000e-01 8.625000000000e-01 1.087500000000e+00 9.560661587986e-01 1.448005093223e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.875000000000e-01 8.625000000000e-01 1.087500000000e+00 9.907383610217e-01 1.471128393445e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +5.625000000000e-01 8.625000000000e-01 1.087500000000e+00 1.029714766331e+00 1.497654416079e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +6.375000000000e-01 8.625000000000e-01 1.087500000000e+00 1.072526223456e+00 1.527405889081e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.125000000000e-01 8.625000000000e-01 1.087500000000e+00 1.118732541763e+00 1.560198304704e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.875000000000e-01 8.625000000000e-01 1.087500000000e+00 1.167930862680e+00 1.595844212321e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 8.625000000000e-01 1.087500000000e+00 1.219759197547e+00 1.634156892713e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 8.625000000000e-01 1.087500000000e+00 1.273896581360e+00 1.674953357560e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 8.625000000000e-01 1.087500000000e+00 1.330061088823e+00 1.718056678343e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 8.625000000000e-01 1.087500000000e+00 1.388006664249e+00 1.763297691826e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 8.625000000000e-01 1.087500000000e+00 1.447519429921e+00 1.810516155686e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750000000000e-02 9.375000000000e-01 1.087500000000e+00 9.382497002398e-01 1.436303850165e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.125000000000e-01 9.375000000000e-01 1.087500000000e+00 9.442258734011e-01 1.440214827725e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.875000000000e-01 9.375000000000e-01 1.087500000000e+00 9.560661587986e-01 1.448005093223e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +2.625000000000e-01 9.375000000000e-01 1.087500000000e+00 9.735566239310e-01 1.459612534202e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +3.375000000000e-01 9.375000000000e-01 1.087500000000e+00 9.963997691690e-01 1.474947032947e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.125000000000e-01 9.375000000000e-01 1.087500000000e+00 1.024237521281e+00 1.493893821528e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.875000000000e-01 9.375000000000e-01 1.087500000000e+00 1.056675210270e+00 1.516317496437e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +5.625000000000e-01 9.375000000000e-01 1.087500000000e+00 1.093303480283e+00 1.542066389621e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +6.375000000000e-01 9.375000000000e-01 1.087500000000e+00 1.133716234337e+00 1.570977004924e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.125000000000e-01 9.375000000000e-01 1.087500000000e+00 1.177523885108e+00 1.602878270487e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.875000000000e-01 9.375000000000e-01 1.087500000000e+00 1.224362078799e+00 1.637595417067e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 9.375000000000e-01 1.087500000000e+00 1.273896581360e+00 1.674953357560e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 9.375000000000e-01 1.087500000000e+00 1.325825214725e+00 1.714779504776e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 9.375000000000e-01 1.087500000000e+00 1.379877711973e+00 1.756906016268e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 9.375000000000e-01 1.087500000000e+00 1.435814228931e+00 1.801171493778e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 9.375000000000e-01 1.087500000000e+00 1.493423081381e+00 1.847422190513e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750000000000e-02 1.012500000000e+00 1.087500000000e+00 1.013194206458e+00 1.486344088695e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.125000000000e-01 1.012500000000e+00 1.087500000000e+00 1.018730828040e+00 1.490123736473e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.875000000000e-01 1.012500000000e+00 1.087500000000e+00 1.029714766331e+00 1.497654416079e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +2.625000000000e-01 1.012500000000e+00 1.087500000000e+00 1.045974426074e+00 1.508879965405e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +3.375000000000e-01 1.012500000000e+00 1.087500000000e+00 1.067268710307e+00 1.523718724043e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.125000000000e-01 1.012500000000e+00 1.087500000000e+00 1.093303480283e+00 1.542066389621e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.875000000000e-01 1.012500000000e+00 1.087500000000e+00 1.123749304783e+00 1.563799459649e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +5.625000000000e-01 1.012500000000e+00 1.087500000000e+00 1.158258390861e+00 1.588779012324e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +6.375000000000e-01 1.012500000000e+00 1.087500000000e+00 1.196479210016e+00 1.616854585298e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.125000000000e-01 1.012500000000e+00 1.087500000000e+00 1.238068051441e+00 1.647867940704e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.875000000000e-01 1.012500000000e+00 1.087500000000e+00 1.282697353237e+00 1.681656549358e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 1.012500000000e+00 1.087500000000e+00 1.330061088823e+00 1.718056678343e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 1.012500000000e+00 1.087500000000e+00 1.379877711973e+00 1.756906016268e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 1.012500000000e+00 1.087500000000e+00 1.431891231903e+00 1.798045814211e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 1.012500000000e+00 1.087500000000e+00 1.485870956712e+00 1.841322554579e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 1.012500000000e+00 1.087500000000e+00 1.541610359332e+00 1.886589184216e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750000000000e-02 1.087500000000e+00 1.087500000000e+00 1.088146359641e+00 1.538414362257e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.125000000000e-01 1.087500000000e+00 1.087500000000e+00 1.093303480283e+00 1.542066389621e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.875000000000e-01 1.087500000000e+00 1.087500000000e+00 1.103545422717e+00 1.549344619509e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +2.625000000000e-01 1.087500000000e+00 1.087500000000e+00 1.118732541763e+00 1.560198304704e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +3.375000000000e-01 1.087500000000e+00 1.087500000000e+00 1.138666983802e+00 1.574553508141e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.125000000000e-01 1.087500000000e+00 1.087500000000e+00 1.163104681445e+00 1.592315530917e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +4.875000000000e-01 1.087500000000e+00 1.087500000000e+00 1.191768643655e+00 1.613371857322e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +5.625000000000e-01 1.087500000000e+00 1.087500000000e+00 1.224362078799e+00 1.637595417067e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +6.375000000000e-01 1.087500000000e+00 1.087500000000e+00 1.260580223548e+00 1.664847966032e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.125000000000e-01 1.087500000000e+00 1.087500000000e+00 1.300120186752e+00 1.694983406998e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +7.875000000000e-01 1.087500000000e+00 1.087500000000e+00 1.342688534248e+00 1.727850905026e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +8.625000000000e-01 1.087500000000e+00 1.087500000000e+00 1.388006664249e+00 1.763297691826e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +9.375000000000e-01 1.087500000000e+00 1.087500000000e+00 1.435814228931e+00 1.801171493778e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.012500000000e+00 1.087500000000e+00 1.087500000000e+00 1.485870956712e+00 1.841322554579e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.087500000000e+00 1.087500000000e+00 1.087500000000e+00 1.537957249081e+00 1.883605253231e+00 1.000000000000e+00 6.666666666667e-15 1.000000000000e-14 1.054092553389e-07 4.218750000000e-04 4.218750000000e-04 +1.162500000000e+00 1.087500000000e+00 1.087500000000e+00 1.591873895759e+00 1.927879340104e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.750000000000e-02 1.162500000000e+00 1.087500000000e+00 1.163104681445e+00 1.592315530917e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.125000000000e-01 1.162500000000e+00 1.087500000000e+00 1.167930862680e+00 1.595844212322e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.875000000000e-01 1.162500000000e+00 1.087500000000e+00 1.177523885108e+00 1.602878270487e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +2.625000000000e-01 1.162500000000e+00 1.087500000000e+00 1.191768643655e+00 1.613371857322e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.375000000000e-01 1.162500000000e+00 1.087500000000e+00 1.210500929368e+00 1.627258046531e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +4.125000000000e-01 1.162500000000e+00 1.087500000000e+00 1.233516315255e+00 1.644450896196e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +4.875000000000e-01 1.162500000000e+00 1.087500000000e+00 1.260580223548e+00 1.664847966032e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +5.625000000000e-01 1.162500000000e+00 1.087500000000e+00 1.291438151829e+00 1.688333127674e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +6.375000000000e-01 1.162500000000e+00 1.087500000000e+00 1.325825214725e+00 1.714779504776e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +7.125000000000e-01 1.162500000000e+00 1.087500000000e+00 1.363474422202e+00 1.744052393135e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +7.875000000000e-01 1.162500000000e+00 1.087500000000e+00 1.404123392014e+00 1.776012035432e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +8.625000000000e-01 1.162500000000e+00 1.087500000000e+00 1.447519429921e+00 1.810516155686e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +9.375000000000e-01 1.162500000000e+00 1.087500000000e+00 1.493423081381e+00 1.847422190513e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.012500000000e+00 1.162500000000e+00 1.087500000000e+00 1.541610359332e+00 1.886589184216e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.087500000000e+00 1.162500000000e+00 1.087500000000e+00 1.591873895759e+00 1.927879340104e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.162500000000e+00 1.162500000000e+00 1.087500000000e+00 1.644023266259e+00 1.971159240143e+00 9.999999999976e-01 6.666666666640e-15 9.999999999984e-15 1.054092553389e-07 4.218750000010e-04 4.218750000000e-04 +3.750000000000e-02 3.750000000000e-02 1.162500000000e+00 5.303300858899e-02 1.163709048689e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.125000000000e-01 3.750000000000e-02 1.162500000000e+00 1.185854122563e-01 1.168532733816e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.875000000000e-01 3.750000000000e-02 1.162500000000e+00 1.912132317597e-01 1.178120855430e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +2.625000000000e-01 3.750000000000e-02 1.162500000000e+00 2.651650429450e-01 1.192358482169e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.375000000000e-01 3.750000000000e-02 1.162500000000e+00 3.395769426802e-01 1.211081644647e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +4.125000000000e-01 3.750000000000e-02 1.162500000000e+00 4.142010381445e-01 1.234086200393e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +4.875000000000e-01 3.750000000000e-02 1.162500000000e+00 4.889401803902e-01 1.261137879060e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +5.625000000000e-01 3.750000000000e-02 1.162500000000e+00 5.637486141890e-01 1.291982488271e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +6.375000000000e-01 3.750000000000e-02 1.162500000000e+00 6.386019887222e-01 1.326355438787e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +7.125000000000e-01 3.750000000000e-02 1.162500000000e+00 7.134861596415e-01 1.363990010961e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +7.875000000000e-01 3.750000000000e-02 1.162500000000e+00 7.883923515611e-01 1.404624060025e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +8.625000000000e-01 3.750000000000e-02 1.162500000000e+00 8.633148324916e-01 1.448005093223e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +9.375000000000e-01 3.750000000000e-02 1.162500000000e+00 9.382497002398e-01 1.493893821528e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.012500000000e+00 3.750000000000e-02 1.162500000000e+00 1.013194206458e+00 1.542066389621e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.087500000000e+00 3.750000000000e-02 1.162500000000e+00 1.088146359641e+00 1.592315530917e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.162500000000e+00 3.750000000000e-02 1.162500000000e+00 1.163104681445e+00 1.644450896196e+00 9.999999999976e-01 6.666666666640e-15 9.999999999984e-15 1.054092553389e-07 4.218750000010e-04 4.218750000000e-04 +3.750000000000e-02 1.125000000000e-01 1.162500000000e+00 1.185854122563e-01 1.168532733816e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.125000000000e-01 1.125000000000e-01 1.162500000000e+00 1.590990257670e-01 1.173336588537e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.875000000000e-01 1.125000000000e-01 1.162500000000e+00 2.186606960567e-01 1.182885772169e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +2.625000000000e-01 1.125000000000e-01 1.162500000000e+00 2.855914914699e-01 1.197066727463e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.375000000000e-01 1.125000000000e-01 1.162500000000e+00 3.557562367689e-01 1.215717380809e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +4.125000000000e-01 1.125000000000e-01 1.162500000000e+00 4.275657844122e-01 1.238635842369e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +4.875000000000e-01 1.125000000000e-01 1.162500000000e+00 5.003124024047e-01 1.265590277302e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +5.625000000000e-01 1.125000000000e-01 1.162500000000e+00 5.736396952792e-01 1.296328951308e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +6.375000000000e-01 1.125000000000e-01 1.162500000000e+00 6.473503688112e-01 1.330589624941e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +7.125000000000e-01 1.125000000000e-01 1.162500000000e+00 7.213269023127e-01 1.368107726022e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +7.875000000000e-01 1.125000000000e-01 1.162500000000e+00 7.954951288349e-01 1.408622997825e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +8.625000000000e-01 1.125000000000e-01 1.162500000000e+00 8.698060128557e-01 1.451884551195e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +9.375000000000e-01 1.125000000000e-01 1.162500000000e+00 9.442258734011e-01 1.497654416079e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.012500000000e+00 1.125000000000e-01 1.162500000000e+00 1.018730828040e+00 1.545709788414e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.087500000000e+00 1.125000000000e-01 1.162500000000e+00 1.093303480283e+00 1.595844212322e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.162500000000e+00 1.125000000000e-01 1.162500000000e+00 1.167930862680e+00 1.647867940704e+00 9.999999999976e-01 6.666666666640e-15 9.999999999984e-15 1.054092553389e-07 4.218750000010e-04 4.218750000000e-04 +3.750000000000e-02 1.875000000000e-01 1.162500000000e+00 1.912132317597e-01 1.178120855430e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.125000000000e-01 1.875000000000e-01 1.162500000000e+00 2.186606960567e-01 1.182885772169e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.875000000000e-01 1.875000000000e-01 1.162500000000e+00 2.651650429450e-01 1.192358482169e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +2.625000000000e-01 1.875000000000e-01 1.162500000000e+00 3.225871975141e-01 1.206428095661e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.375000000000e-01 1.875000000000e-01 1.162500000000e+00 3.860861302870e-01 1.224936222830e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +4.125000000000e-01 1.875000000000e-01 1.162500000000e+00 4.531142240098e-01 1.247685356971e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +4.875000000000e-01 1.875000000000e-01 1.162500000000e+00 5.223145603944e-01 1.274448410098e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +5.625000000000e-01 1.875000000000e-01 1.162500000000e+00 5.929270612816e-01 1.304978448098e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +6.375000000000e-01 1.875000000000e-01 1.162500000000e+00 6.645016930001e-01 1.339017830352e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +7.125000000000e-01 1.875000000000e-01 1.162500000000e+00 7.367581014146e-01 1.376306197763e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +7.875000000000e-01 1.875000000000e-01 1.162500000000e+00 8.095137429346e-01 1.416587007564e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +8.625000000000e-01 1.875000000000e-01 1.162500000000e+00 8.826451721955e-01 1.459612534202e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +9.375000000000e-01 1.875000000000e-01 1.162500000000e+00 9.560661587986e-01 1.505147418029e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.012500000000e+00 1.875000000000e-01 1.162500000000e+00 1.029714766331e+00 1.552970943064e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.087500000000e+00 1.875000000000e-01 1.162500000000e+00 1.103545422717e+00 1.602878270487e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.162500000000e+00 1.875000000000e-01 1.162500000000e+00 1.177523885108e+00 1.654680860468e+00 9.999999999976e-01 6.666666666640e-15 9.999999999984e-15 1.054092553389e-07 4.218750000010e-04 4.218750000000e-04 +3.750000000000e-02 2.625000000000e-01 1.162500000000e+00 2.651650429450e-01 1.192358482169e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.125000000000e-01 2.625000000000e-01 1.162500000000e+00 2.855914914699e-01 1.197066727463e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.875000000000e-01 2.625000000000e-01 1.162500000000e+00 3.225871975141e-01 1.206428095661e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +2.625000000000e-01 2.625000000000e-01 1.162500000000e+00 3.712310601229e-01 1.220335507146e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.375000000000e-01 2.625000000000e-01 1.162500000000e+00 4.275657844122e-01 1.238635842369e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +4.125000000000e-01 2.625000000000e-01 1.162500000000e+00 4.889401803902e-01 1.261137879060e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +4.875000000000e-01 2.625000000000e-01 1.162500000000e+00 5.536808647588e-01 1.287621353504e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +5.625000000000e-01 2.625000000000e-01 1.162500000000e+00 6.207354508968e-01 1.317846254310e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +6.375000000000e-01 2.625000000000e-01 1.162500000000e+00 6.894291116569e-01 1.351561596821e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +7.125000000000e-01 2.625000000000e-01 1.162500000000e+00 7.593171274244e-01 1.388513143618e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +7.875000000000e-01 2.625000000000e-01 1.162500000000e+00 8.300978857942e-01 1.428449771606e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +8.625000000000e-01 2.625000000000e-01 1.162500000000e+00 9.015611460128e-01 1.471128393445e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +9.375000000000e-01 2.625000000000e-01 1.162500000000e+00 9.735566239310e-01 1.516317496437e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.012500000000e+00 2.625000000000e-01 1.162500000000e+00 1.045974426074e+00 1.563799459650e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.087500000000e+00 2.625000000000e-01 1.162500000000e+00 1.118732541763e+00 1.613371857322e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.162500000000e+00 2.625000000000e-01 1.162500000000e+00 1.191768643655e+00 1.664847966032e+00 9.999999999976e-01 6.666666666640e-15 9.999999999984e-15 1.054092553389e-07 4.218750000010e-04 4.218750000000e-04 +3.750000000000e-02 3.375000000000e-01 1.162500000000e+00 3.395769426802e-01 1.211081644647e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.125000000000e-01 3.375000000000e-01 1.162500000000e+00 3.557562367689e-01 1.215717380809e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.875000000000e-01 3.375000000000e-01 1.162500000000e+00 3.860861302870e-01 1.224936222830e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +2.625000000000e-01 3.375000000000e-01 1.162500000000e+00 4.275657844122e-01 1.238635842369e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.375000000000e-01 3.375000000000e-01 1.162500000000e+00 4.772970773009e-01 1.256669706009e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +4.125000000000e-01 3.375000000000e-01 1.162500000000e+00 5.329751401332e-01 1.278854467874e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +4.875000000000e-01 3.375000000000e-01 1.162500000000e+00 5.929270612816e-01 1.304978448098e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +5.625000000000e-01 3.375000000000e-01 1.162500000000e+00 6.559820881701e-01 1.334810379792e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +6.375000000000e-01 3.375000000000e-01 1.162500000000e+00 7.213269023127e-01 1.368107726022e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +7.125000000000e-01 3.375000000000e-01 1.162500000000e+00 7.883923515611e-01 1.404624060025e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +7.875000000000e-01 3.375000000000e-01 1.162500000000e+00 8.567744744097e-01 1.444115213548e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +8.625000000000e-01 3.375000000000e-01 1.162500000000e+00 9.261816776421e-01 1.486344088696e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +9.375000000000e-01 3.375000000000e-01 1.162500000000e+00 9.963997691690e-01 1.531084174695e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.012500000000e+00 3.375000000000e-01 1.162500000000e+00 1.067268710307e+00 1.578121905938e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.087500000000e+00 3.375000000000e-01 1.162500000000e+00 1.138666983802e+00 1.627258046531e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.162500000000e+00 3.375000000000e-01 1.162500000000e+00 1.210500929368e+00 1.678308300045e+00 9.999999999976e-01 6.666666666640e-15 9.999999999984e-15 1.054092553389e-07 4.218750000010e-04 4.218750000000e-04 +3.750000000000e-02 4.125000000000e-01 1.162500000000e+00 4.142010381445e-01 1.234086200393e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.125000000000e-01 4.125000000000e-01 1.162500000000e+00 4.275657844122e-01 1.238635842369e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.875000000000e-01 4.125000000000e-01 1.162500000000e+00 4.531142240098e-01 1.247685356971e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +2.625000000000e-01 4.125000000000e-01 1.162500000000e+00 4.889401803902e-01 1.261137879060e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.375000000000e-01 4.125000000000e-01 1.162500000000e+00 5.329751401332e-01 1.278854467874e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +4.125000000000e-01 4.125000000000e-01 1.162500000000e+00 5.833630944789e-01 1.300660889702e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +4.875000000000e-01 4.125000000000e-01 1.162500000000e+00 6.386019887222e-01 1.326355438787e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +5.625000000000e-01 4.125000000000e-01 1.162500000000e+00 6.975403214152e-01 1.355717061189e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +6.375000000000e-01 4.125000000000e-01 1.162500000000e+00 7.593171274244e-01 1.388513143618e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +7.125000000000e-01 4.125000000000e-01 1.162500000000e+00 8.232936900038e-01 1.424506493492e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +7.875000000000e-01 4.125000000000e-01 1.162500000000e+00 8.889952193347e-01 1.463461222582e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +8.625000000000e-01 4.125000000000e-01 1.162500000000e+00 9.560661587986e-01 1.505147418029e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +9.375000000000e-01 4.125000000000e-01 1.162500000000e+00 1.024237521281e+00 1.549344619509e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.012500000000e+00 4.125000000000e-01 1.162500000000e+00 1.093303480283e+00 1.595844212322e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.087500000000e+00 4.125000000000e-01 1.162500000000e+00 1.163104681445e+00 1.644450896196e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.162500000000e+00 4.125000000000e-01 1.162500000000e+00 1.233516315255e+00 1.694983406998e+00 9.999999999976e-01 6.666666666640e-15 9.999999999984e-15 1.054092553389e-07 4.218750000010e-04 4.218750000000e-04 +3.750000000000e-02 4.875000000000e-01 1.162500000000e+00 4.889401803902e-01 1.261137879060e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.125000000000e-01 4.875000000000e-01 1.162500000000e+00 5.003124024047e-01 1.265590277302e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.875000000000e-01 4.875000000000e-01 1.162500000000e+00 5.223145603944e-01 1.274448410098e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +2.625000000000e-01 4.875000000000e-01 1.162500000000e+00 5.536808647588e-01 1.287621353504e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.375000000000e-01 4.875000000000e-01 1.162500000000e+00 5.929270612816e-01 1.304978448098e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +4.125000000000e-01 4.875000000000e-01 1.162500000000e+00 6.386019887222e-01 1.326355438787e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +4.875000000000e-01 4.875000000000e-01 1.162500000000e+00 6.894291116569e-01 1.351561596821e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +5.625000000000e-01 4.875000000000e-01 1.162500000000e+00 7.443537465480e-01 1.380387173948e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +6.375000000000e-01 4.875000000000e-01 1.162500000000e+00 8.025350459637e-01 1.412610615138e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +7.125000000000e-01 4.875000000000e-01 1.162500000000e+00 8.633148324916e-01 1.448005093223e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +7.875000000000e-01 4.875000000000e-01 1.162500000000e+00 9.261816776421e-01 1.486344088696e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +8.625000000000e-01 4.875000000000e-01 1.162500000000e+00 9.907383610217e-01 1.527405889081e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +9.375000000000e-01 4.875000000000e-01 1.162500000000e+00 1.056675210270e+00 1.570977004924e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.012500000000e+00 4.875000000000e-01 1.162500000000e+00 1.123749304783e+00 1.616854585298e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.087500000000e+00 4.875000000000e-01 1.162500000000e+00 1.191768643655e+00 1.664847966032e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.162500000000e+00 4.875000000000e-01 1.162500000000e+00 1.260580223548e+00 1.714779504776e+00 9.999999999976e-01 6.666666666640e-15 9.999999999984e-15 1.054092553389e-07 4.218750000010e-04 4.218750000000e-04 +3.750000000000e-02 5.625000000000e-01 1.162500000000e+00 5.637486141890e-01 1.291982488271e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.125000000000e-01 5.625000000000e-01 1.162500000000e+00 5.736396952792e-01 1.296328951308e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.875000000000e-01 5.625000000000e-01 1.162500000000e+00 5.929270612816e-01 1.304978448098e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +2.625000000000e-01 5.625000000000e-01 1.162500000000e+00 6.207354508968e-01 1.317846254310e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.375000000000e-01 5.625000000000e-01 1.162500000000e+00 6.559820881701e-01 1.334810379792e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +4.125000000000e-01 5.625000000000e-01 1.162500000000e+00 6.975403214152e-01 1.355717061189e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +4.875000000000e-01 5.625000000000e-01 1.162500000000e+00 7.443537465480e-01 1.380387173948e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +5.625000000000e-01 5.625000000000e-01 1.162500000000e+00 7.954951288349e-01 1.408622997825e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +6.375000000000e-01 5.625000000000e-01 1.162500000000e+00 8.501838036566e-01 1.440214827725e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +7.125000000000e-01 5.625000000000e-01 1.162500000000e+00 9.077788827683e-01 1.474947032947e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +7.875000000000e-01 5.625000000000e-01 1.162500000000e+00 9.677615925423e-01 1.512603302257e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +8.625000000000e-01 5.625000000000e-01 1.162500000000e+00 1.029714766331e+00 1.552970943064e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +9.375000000000e-01 5.625000000000e-01 1.162500000000e+00 1.093303480283e+00 1.595844212322e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.012500000000e+00 5.625000000000e-01 1.162500000000e+00 1.158258390861e+00 1.641026736528e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.087500000000e+00 5.625000000000e-01 1.162500000000e+00 1.224362078799e+00 1.688333127674e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.162500000000e+00 5.625000000000e-01 1.162500000000e+00 1.291438151829e+00 1.737589925731e+00 9.999999999976e-01 6.666666666640e-15 9.999999999984e-15 1.054092553389e-07 4.218750000010e-04 4.218750000000e-04 +3.750000000000e-02 6.375000000000e-01 1.162500000000e+00 6.386019887222e-01 1.326355438787e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.125000000000e-01 6.375000000000e-01 1.162500000000e+00 6.473503688112e-01 1.330589624941e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.875000000000e-01 6.375000000000e-01 1.162500000000e+00 6.645016930001e-01 1.339017830352e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +2.625000000000e-01 6.375000000000e-01 1.162500000000e+00 6.894291116569e-01 1.351561596821e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.375000000000e-01 6.375000000000e-01 1.162500000000e+00 7.213269023127e-01 1.368107726022e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +4.125000000000e-01 6.375000000000e-01 1.162500000000e+00 7.593171274244e-01 1.388513143618e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +4.875000000000e-01 6.375000000000e-01 1.162500000000e+00 8.025350459637e-01 1.412610615138e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +5.625000000000e-01 6.375000000000e-01 1.162500000000e+00 8.501838036566e-01 1.440214827725e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +6.375000000000e-01 6.375000000000e-01 1.162500000000e+00 9.015611460128e-01 1.471128393445e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +7.125000000000e-01 6.375000000000e-01 1.162500000000e+00 9.560661587986e-01 1.505147418029e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +7.875000000000e-01 6.375000000000e-01 1.162500000000e+00 1.013194206458e+00 1.542066389621e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +8.625000000000e-01 6.375000000000e-01 1.162500000000e+00 1.072526223456e+00 1.581682253172e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +9.375000000000e-01 6.375000000000e-01 1.162500000000e+00 1.133716234337e+00 1.623797632096e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.012500000000e+00 6.375000000000e-01 1.162500000000e+00 1.196479210016e+00 1.668223231465e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.087500000000e+00 6.375000000000e-01 1.162500000000e+00 1.260580223548e+00 1.714779504776e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.162500000000e+00 6.375000000000e-01 1.162500000000e+00 1.325825214725e+00 1.763297691826e+00 9.999999999976e-01 6.666666666640e-15 9.999999999984e-15 1.054092553389e-07 4.218750000010e-04 4.218750000000e-04 +3.750000000000e-02 7.125000000000e-01 1.162500000000e+00 7.134861596415e-01 1.363990010961e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.125000000000e-01 7.125000000000e-01 1.162500000000e+00 7.213269023127e-01 1.368107726022e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.875000000000e-01 7.125000000000e-01 1.162500000000e+00 7.367581014146e-01 1.376306197763e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +2.625000000000e-01 7.125000000000e-01 1.162500000000e+00 7.593171274244e-01 1.388513143618e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.375000000000e-01 7.125000000000e-01 1.162500000000e+00 7.883923515611e-01 1.404624060025e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +4.125000000000e-01 7.125000000000e-01 1.162500000000e+00 8.232936900038e-01 1.424506493492e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +4.875000000000e-01 7.125000000000e-01 1.162500000000e+00 8.633148324916e-01 1.448005093223e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +5.625000000000e-01 7.125000000000e-01 1.162500000000e+00 9.077788827683e-01 1.474947032947e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +6.375000000000e-01 7.125000000000e-01 1.162500000000e+00 9.560661587986e-01 1.505147418029e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +7.125000000000e-01 7.125000000000e-01 1.162500000000e+00 1.007627163191e+00 1.538414362257e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +7.875000000000e-01 7.125000000000e-01 1.162500000000e+00 1.061985169388e+00 1.574553508141e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +8.625000000000e-01 7.125000000000e-01 1.162500000000e+00 1.118732541763e+00 1.613371857322e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +9.375000000000e-01 7.125000000000e-01 1.162500000000e+00 1.177523885108e+00 1.654680860468e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.012500000000e+00 7.125000000000e-01 1.162500000000e+00 1.238068051441e+00 1.698298781134e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.087500000000e+00 7.125000000000e-01 1.162500000000e+00 1.300120186752e+00 1.744052393135e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.162500000000e+00 7.125000000000e-01 1.162500000000e+00 1.363474422202e+00 1.791778097310e+00 9.999999999976e-01 6.666666666640e-15 9.999999999984e-15 1.054092553389e-07 4.218750000010e-04 4.218750000000e-04 +3.750000000000e-02 7.875000000000e-01 1.162500000000e+00 7.883923515611e-01 1.404624060025e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.125000000000e-01 7.875000000000e-01 1.162500000000e+00 7.954951288349e-01 1.408622997825e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.875000000000e-01 7.875000000000e-01 1.162500000000e+00 8.095137429346e-01 1.416587007564e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +2.625000000000e-01 7.875000000000e-01 1.162500000000e+00 8.300978857942e-01 1.428449771606e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.375000000000e-01 7.875000000000e-01 1.162500000000e+00 8.567744744097e-01 1.444115213548e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +4.125000000000e-01 7.875000000000e-01 1.162500000000e+00 8.889952193347e-01 1.463461222582e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +4.875000000000e-01 7.875000000000e-01 1.162500000000e+00 9.261816776421e-01 1.486344088696e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +5.625000000000e-01 7.875000000000e-01 1.162500000000e+00 9.677615925423e-01 1.512603302257e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +6.375000000000e-01 7.875000000000e-01 1.162500000000e+00 1.013194206458e+00 1.542066389621e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +7.125000000000e-01 7.875000000000e-01 1.162500000000e+00 1.061985169388e+00 1.574553508141e+00 9.999999999988e-01 6.666666666653e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +7.875000000000e-01 7.875000000000e-01 1.162500000000e+00 1.113693180369e+00 1.609881595025e+00 9.999999999988e-01 6.666666666653e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +8.625000000000e-01 7.875000000000e-01 1.162500000000e+00 1.167930862680e+00 1.647867940704e+00 9.999999999988e-01 6.666666666653e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +9.375000000000e-01 7.875000000000e-01 1.162500000000e+00 1.224362078799e+00 1.688333127674e+00 9.999999999988e-01 6.666666666653e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.012500000000e+00 7.875000000000e-01 1.162500000000e+00 1.282697353237e+00 1.731103333138e+00 9.999999999988e-01 6.666666666653e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.087500000000e+00 7.875000000000e-01 1.162500000000e+00 1.342688534248e+00 1.776012035432e+00 9.999999999988e-01 6.666666666653e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.162500000000e+00 7.875000000000e-01 1.162500000000e+00 1.404123392014e+00 1.822901190411e+00 9.999999999976e-01 6.666666666640e-15 9.999999999984e-15 1.054092553389e-07 4.218750000010e-04 4.218750000000e-04 +3.750000000000e-02 8.625000000000e-01 1.162500000000e+00 8.633148324916e-01 1.448005093223e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.125000000000e-01 8.625000000000e-01 1.162500000000e+00 8.698060128557e-01 1.451884551195e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.875000000000e-01 8.625000000000e-01 1.162500000000e+00 8.826451721955e-01 1.459612534202e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +2.625000000000e-01 8.625000000000e-01 1.162500000000e+00 9.015611460128e-01 1.471128393445e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.375000000000e-01 8.625000000000e-01 1.162500000000e+00 9.261816776421e-01 1.486344088696e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +4.125000000000e-01 8.625000000000e-01 1.162500000000e+00 9.560661587986e-01 1.505147418029e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +4.875000000000e-01 8.625000000000e-01 1.162500000000e+00 9.907383610217e-01 1.527405889081e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +5.625000000000e-01 8.625000000000e-01 1.162500000000e+00 1.029714766331e+00 1.552970943064e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +6.375000000000e-01 8.625000000000e-01 1.162500000000e+00 1.072526223456e+00 1.581682253172e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +7.125000000000e-01 8.625000000000e-01 1.162500000000e+00 1.118732541763e+00 1.613371857322e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +7.875000000000e-01 8.625000000000e-01 1.162500000000e+00 1.167930862680e+00 1.647867940704e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +8.625000000000e-01 8.625000000000e-01 1.162500000000e+00 1.219759197547e+00 1.684998145400e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +9.375000000000e-01 8.625000000000e-01 1.162500000000e+00 1.273896581360e+00 1.724592343135e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.012500000000e+00 8.625000000000e-01 1.162500000000e+00 1.330061088823e+00 1.766484856997e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.087500000000e+00 8.625000000000e-01 1.162500000000e+00 1.388006664249e+00 1.810516155686e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.162500000000e+00 8.625000000000e-01 1.162500000000e+00 1.447519429921e+00 1.856534069173e+00 9.999999999977e-01 6.666666666640e-15 9.999999999984e-15 1.054092553389e-07 4.218750000010e-04 4.218750000000e-04 +3.750000000000e-02 9.375000000000e-01 1.162500000000e+00 9.382497002398e-01 1.493893821528e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.125000000000e-01 9.375000000000e-01 1.162500000000e+00 9.442258734011e-01 1.497654416079e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.875000000000e-01 9.375000000000e-01 1.162500000000e+00 9.560661587986e-01 1.505147418029e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +2.625000000000e-01 9.375000000000e-01 1.162500000000e+00 9.735566239310e-01 1.516317496437e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.375000000000e-01 9.375000000000e-01 1.162500000000e+00 9.963997691690e-01 1.531084174695e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +4.125000000000e-01 9.375000000000e-01 1.162500000000e+00 1.024237521281e+00 1.549344619509e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +4.875000000000e-01 9.375000000000e-01 1.162500000000e+00 1.056675210270e+00 1.570977004924e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +5.625000000000e-01 9.375000000000e-01 1.162500000000e+00 1.093303480283e+00 1.595844212322e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +6.375000000000e-01 9.375000000000e-01 1.162500000000e+00 1.133716234337e+00 1.623797632096e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +7.125000000000e-01 9.375000000000e-01 1.162500000000e+00 1.177523885108e+00 1.654680860468e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +7.875000000000e-01 9.375000000000e-01 1.162500000000e+00 1.224362078799e+00 1.688333127674e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +8.625000000000e-01 9.375000000000e-01 1.162500000000e+00 1.273896581360e+00 1.724592343135e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +9.375000000000e-01 9.375000000000e-01 1.162500000000e+00 1.325825214725e+00 1.763297691826e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.012500000000e+00 9.375000000000e-01 1.162500000000e+00 1.379877711973e+00 1.804291758558e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.087500000000e+00 9.375000000000e-01 1.162500000000e+00 1.435814228931e+00 1.847422190513e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.162500000000e+00 9.375000000000e-01 1.162500000000e+00 1.493423081381e+00 1.892542932142e+00 9.999999999976e-01 6.666666666640e-15 9.999999999984e-15 1.054092553389e-07 4.218750000010e-04 4.218750000000e-04 +3.750000000000e-02 1.012500000000e+00 1.162500000000e+00 1.013194206458e+00 1.542066389621e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.125000000000e-01 1.012500000000e+00 1.162500000000e+00 1.018730828040e+00 1.545709788414e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.875000000000e-01 1.012500000000e+00 1.162500000000e+00 1.029714766331e+00 1.552970943064e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +2.625000000000e-01 1.012500000000e+00 1.162500000000e+00 1.045974426074e+00 1.563799459650e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.375000000000e-01 1.012500000000e+00 1.162500000000e+00 1.067268710307e+00 1.578121905938e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +4.125000000000e-01 1.012500000000e+00 1.162500000000e+00 1.093303480283e+00 1.595844212322e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +4.875000000000e-01 1.012500000000e+00 1.162500000000e+00 1.123749304783e+00 1.616854585298e+00 9.999999999988e-01 6.666666666653e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +5.625000000000e-01 1.012500000000e+00 1.162500000000e+00 1.158258390861e+00 1.641026736528e+00 9.999999999988e-01 6.666666666653e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +6.375000000000e-01 1.012500000000e+00 1.162500000000e+00 1.196479210016e+00 1.668223231465e+00 9.999999999988e-01 6.666666666653e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +7.125000000000e-01 1.012500000000e+00 1.162500000000e+00 1.238068051441e+00 1.698298781134e+00 9.999999999988e-01 6.666666666653e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +7.875000000000e-01 1.012500000000e+00 1.162500000000e+00 1.282697353237e+00 1.731103333138e+00 9.999999999988e-01 6.666666666653e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +8.625000000000e-01 1.012500000000e+00 1.162500000000e+00 1.330061088823e+00 1.766484856997e+00 9.999999999988e-01 6.666666666653e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +9.375000000000e-01 1.012500000000e+00 1.162500000000e+00 1.379877711973e+00 1.804291758558e+00 9.999999999988e-01 6.666666666653e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.012500000000e+00 1.012500000000e+00 1.162500000000e+00 1.431891231903e+00 1.844374894104e+00 9.999999999988e-01 6.666666666653e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.087500000000e+00 1.012500000000e+00 1.162500000000e+00 1.485870956712e+00 1.886589184216e+00 9.999999999988e-01 6.666666666653e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.162500000000e+00 1.012500000000e+00 1.162500000000e+00 1.541610359332e+00 1.930794849278e+00 9.999999999976e-01 6.666666666640e-15 9.999999999984e-15 1.054092553389e-07 4.218750000010e-04 4.218750000000e-04 +3.750000000000e-02 1.087500000000e+00 1.162500000000e+00 1.088146359641e+00 1.592315530917e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.125000000000e-01 1.087500000000e+00 1.162500000000e+00 1.093303480283e+00 1.595844212322e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.875000000000e-01 1.087500000000e+00 1.162500000000e+00 1.103545422717e+00 1.602878270487e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +2.625000000000e-01 1.087500000000e+00 1.162500000000e+00 1.118732541763e+00 1.613371857322e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +3.375000000000e-01 1.087500000000e+00 1.162500000000e+00 1.138666983802e+00 1.627258046531e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +4.125000000000e-01 1.087500000000e+00 1.162500000000e+00 1.163104681445e+00 1.644450896196e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +4.875000000000e-01 1.087500000000e+00 1.162500000000e+00 1.191768643655e+00 1.664847966032e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +5.625000000000e-01 1.087500000000e+00 1.162500000000e+00 1.224362078799e+00 1.688333127674e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +6.375000000000e-01 1.087500000000e+00 1.162500000000e+00 1.260580223548e+00 1.714779504776e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +7.125000000000e-01 1.087500000000e+00 1.162500000000e+00 1.300120186752e+00 1.744052393135e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +7.875000000000e-01 1.087500000000e+00 1.162500000000e+00 1.342688534248e+00 1.776012035432e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +8.625000000000e-01 1.087500000000e+00 1.162500000000e+00 1.388006664249e+00 1.810516155686e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +9.375000000000e-01 1.087500000000e+00 1.162500000000e+00 1.435814228931e+00 1.847422190513e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.012500000000e+00 1.087500000000e+00 1.162500000000e+00 1.485870956712e+00 1.886589184216e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.087500000000e+00 1.087500000000e+00 1.162500000000e+00 1.537957249081e+00 1.927879340104e+00 9.999999999988e-01 6.666666666654e-15 9.999999999992e-15 1.054092553389e-07 4.218750000005e-04 4.218750000000e-04 +1.162500000000e+00 1.087500000000e+00 1.162500000000e+00 1.591873895759e+00 1.971159240143e+00 9.999999999977e-01 6.666666666640e-15 9.999999999984e-15 1.054092553389e-07 4.218750000010e-04 4.218750000000e-04 +3.750000000000e-02 1.162500000000e+00 1.162500000000e+00 1.163104681445e+00 1.644450896196e+00 9.999999999976e-01 6.666666666640e-15 9.999999999984e-15 1.054092553389e-07 4.218750000010e-04 4.218750000000e-04 +1.125000000000e-01 1.162500000000e+00 1.162500000000e+00 1.167930862680e+00 1.647867940704e+00 9.999999999976e-01 6.666666666640e-15 9.999999999984e-15 1.054092553389e-07 4.218750000010e-04 4.218750000000e-04 +1.875000000000e-01 1.162500000000e+00 1.162500000000e+00 1.177523885108e+00 1.654680860468e+00 9.999999999976e-01 6.666666666640e-15 9.999999999984e-15 1.054092553389e-07 4.218750000010e-04 4.218750000000e-04 +2.625000000000e-01 1.162500000000e+00 1.162500000000e+00 1.191768643655e+00 1.664847966032e+00 9.999999999976e-01 6.666666666640e-15 9.999999999984e-15 1.054092553389e-07 4.218750000010e-04 4.218750000000e-04 +3.375000000000e-01 1.162500000000e+00 1.162500000000e+00 1.210500929368e+00 1.678308300045e+00 9.999999999976e-01 6.666666666640e-15 9.999999999984e-15 1.054092553389e-07 4.218750000010e-04 4.218750000000e-04 +4.125000000000e-01 1.162500000000e+00 1.162500000000e+00 1.233516315255e+00 1.694983406998e+00 9.999999999976e-01 6.666666666640e-15 9.999999999984e-15 1.054092553389e-07 4.218750000010e-04 4.218750000000e-04 +4.875000000000e-01 1.162500000000e+00 1.162500000000e+00 1.260580223548e+00 1.714779504776e+00 9.999999999976e-01 6.666666666640e-15 9.999999999984e-15 1.054092553389e-07 4.218750000010e-04 4.218750000000e-04 +5.625000000000e-01 1.162500000000e+00 1.162500000000e+00 1.291438151829e+00 1.737589925731e+00 9.999999999976e-01 6.666666666640e-15 9.999999999984e-15 1.054092553389e-07 4.218750000010e-04 4.218750000000e-04 +6.375000000000e-01 1.162500000000e+00 1.162500000000e+00 1.325825214725e+00 1.763297691826e+00 9.999999999976e-01 6.666666666640e-15 9.999999999984e-15 1.054092553389e-07 4.218750000010e-04 4.218750000000e-04 +7.125000000000e-01 1.162500000000e+00 1.162500000000e+00 1.363474422202e+00 1.791778097310e+00 9.999999999976e-01 6.666666666640e-15 9.999999999984e-15 1.054092553389e-07 4.218750000010e-04 4.218750000000e-04 +7.875000000000e-01 1.162500000000e+00 1.162500000000e+00 1.404123392014e+00 1.822901190411e+00 9.999999999976e-01 6.666666666640e-15 9.999999999984e-15 1.054092553389e-07 4.218750000010e-04 4.218750000000e-04 +8.625000000000e-01 1.162500000000e+00 1.162500000000e+00 1.447519429921e+00 1.856534069173e+00 9.999999999976e-01 6.666666666640e-15 9.999999999984e-15 1.054092553389e-07 4.218750000010e-04 4.218750000000e-04 +9.375000000000e-01 1.162500000000e+00 1.162500000000e+00 1.493423081381e+00 1.892542932142e+00 9.999999999976e-01 6.666666666640e-15 9.999999999984e-15 1.054092553389e-07 4.218750000010e-04 4.218750000000e-04 +1.012500000000e+00 1.162500000000e+00 1.162500000000e+00 1.541610359332e+00 1.930794849278e+00 9.999999999976e-01 6.666666666640e-15 9.999999999984e-15 1.054092553389e-07 4.218750000010e-04 4.218750000000e-04 +1.087500000000e+00 1.162500000000e+00 1.162500000000e+00 1.591873895759e+00 1.971159240143e+00 9.999999999976e-01 6.666666666640e-15 9.999999999984e-15 1.054092553389e-07 4.218750000010e-04 4.218750000000e-04 +1.162500000000e+00 1.162500000000e+00 1.162500000000e+00 1.644023266259e+00 2.013509063799e+00 9.999999999965e-01 6.666666666627e-15 9.999999999976e-15 1.054092553388e-07 4.218750000015e-04 4.218750000000e-04 diff --git a/single-node-refactor/regression_tests/test_refactor.py b/single-node-refactor/regression_tests/test_refactor.py index 2d4dcc766..cf723913f 100644 --- a/single-node-refactor/regression_tests/test_refactor.py +++ b/single-node-refactor/regression_tests/test_refactor.py @@ -13,7 +13,7 @@ solvers = ["Fierro"] # Add names of each test -tests = ["Sedov", "Sod_X", "Sod_Y", "Sod_Z", "Sedov_Erosion"] +tests = ["Sedov", "Sod_X", "Sod_Y", "Sod_Z", "Sedov_Erosion","Sedov_Read_Ensight"] # Extract data from txt file def extract_state_data(filename): diff --git a/single-node-refactor/src/Solvers/SGH_solver/include/sgh_solver.h b/single-node-refactor/src/Solvers/SGH_solver/include/sgh_solver.h index 94f21671c..4465573df 100644 --- a/single-node-refactor/src/Solvers/SGH_solver/include/sgh_solver.h +++ b/single-node-refactor/src/Solvers/SGH_solver/include/sgh_solver.h @@ -47,8 +47,6 @@ struct RegionFill_t; struct RegionFill_host_t; struct corners_in_mat_t; - - using namespace mtr; // matar namespace ///////////////////////////////////////////////////////////////////////////// @@ -73,13 +71,13 @@ class SGH : public Solver ~SGH() = default; // Initialize data specific to the SGH solver - void initialize(SimulationParameters_t& SimulationParamaters, - Material_t& Materials, - Mesh_t& mesh, - BoundaryCondition_t& Boundary, - State_t& State) const override + void initialize(SimulationParameters_t& SimulationParamaters, + Material_t& Materials, + Mesh_t& mesh, + BoundaryCondition_t& Boundary, + State_t& State) const override { - // stuff goes here + // stuff goes here } ///////////////////////////////////////////////////////////////////////////// @@ -89,11 +87,11 @@ class SGH : public Solver /// \brief Calls setup_sgh, which initializes state and material data /// ///////////////////////////////////////////////////////////////////////////// - void setup(SimulationParameters_t& SimulationParamaters, - Material_t& Materials, - Mesh_t& mesh, - BoundaryCondition_t& Boundary, - State_t& State) override; + void setup(SimulationParameters_t& SimulationParamaters, + Material_t& Materials, + Mesh_t& mesh, + BoundaryCondition_t& Boundary, + State_t& State) override; ///////////////////////////////////////////////////////////////////////////// /// @@ -103,11 +101,11 @@ class SGH : public Solver /// /// ///////////////////////////////////////////////////////////////////////////// - void execute(SimulationParameters_t& SimulationParamaters, - Material_t& Materials, - BoundaryCondition_t& Boundary, - Mesh_t& mesh, - State_t& State) override; + void execute(SimulationParameters_t& SimulationParamaters, + Material_t& Materials, + BoundaryCondition_t& Boundary, + Mesh_t& mesh, + State_t& State) override; ///////////////////////////////////////////////////////////////////////////// /// @@ -125,9 +123,9 @@ class SGH : public Solver /// \return /// ///////////////////////////////////////////////////////////////////////////// - void finalize(SimulationParameters_t& SimulationParamaters, - Material_t& Materials, - BoundaryCondition_t& Boundary) const override + void finalize(SimulationParameters_t& SimulationParamaters, + Material_t& Materials, + BoundaryCondition_t& Boundary) const override { // Any finalize goes here, remove allocated memory, etc } @@ -135,20 +133,20 @@ class SGH : public Solver // **** Functions defined in sgh_setup.cpp **** // void fill_regions_sgh( const Material_t& Materials, - const Mesh_t& mesh, - const DCArrayKokkos & node_coords, - DCArrayKokkos & node_vel, - DCArrayKokkos & GaussPoint_den, - DCArrayKokkos & GaussPoint_sie, - DCArrayKokkos & elem_mat_id, - DCArrayKokkos & voxel_elem_mat_id, - const CArrayKokkos & region_fills, - const CArray & region_fills_host, + const Mesh_t& mesh, + const DCArrayKokkos& node_coords, + DCArrayKokkos& node_vel, + DCArrayKokkos& GaussPoint_den, + DCArrayKokkos& GaussPoint_sie, + DCArrayKokkos& elem_mat_id, + DCArrayKokkos& voxel_elem_mat_id, + const CArrayKokkos& region_fills, + const CArray& region_fills_host, const size_t num_fills, const size_t num_elems, const size_t num_nodes, const size_t rk_num_bins) const; - + void init_corner_node_masses_zero( const Mesh_t& mesh, const DCArrayKokkos& node_mass, @@ -158,19 +156,19 @@ class SGH : public Solver void boundary_velocity( const Mesh_t& mesh, const BoundaryCondition_t& Boundary, - DCArrayKokkos& node_vel, + DCArrayKokkos& node_vel, const double time_value) const; void boundary_contact( const Mesh_t& mesh, const BoundaryCondition_t& Boundary, - DCArrayKokkos& node_vel, + DCArrayKokkos& node_vel, const double time_value) const; // **** Functions defined in energy_sgh.cpp **** // void update_energy( - const double rk_alpha, - const double dt, + const double rk_alpha, + const double dt, const Mesh_t& mesh, const DCArrayKokkos& node_vel, const DCArrayKokkos& node_coords, @@ -184,7 +182,7 @@ class SGH : public Solver // **** Functions defined in force_sgh.cpp **** // void get_force( const Material_t& Materials, - const Mesh_t& mesh, + const Mesh_t& mesh, const DCArrayKokkos& GaussPoints_vol, const DCArrayKokkos& GaussPoints_div, const DCArrayKokkos& GaussPoints_eroded, @@ -209,7 +207,7 @@ class SGH : public Solver void get_force_2D( const Material_t& Materials, - const Mesh_t& mesh, + const Mesh_t& mesh, const DCArrayKokkos& GaussPoints_vol, const DCArrayKokkos& GaussPoints_div, const DCArrayKokkos& corner_force, @@ -291,7 +289,7 @@ class SGH : public Solver // **** Functions defined in properties.cpp **** // void update_state( const Material_t& Materials, - const Mesh_t& mesh, + const Mesh_t& mesh, const DCArrayKokkos& node_coords, const DCArrayKokkos& node_vel, const DCArrayKokkos& MaterialPoints_den, @@ -311,7 +309,7 @@ class SGH : public Solver void update_state2D( const Material_t& Materials, - const Mesh_t& mesh, + const Mesh_t& mesh, const DCArrayKokkos& node_coords, const DCArrayKokkos& node_vel, const DCArrayKokkos& MaterialPoints_den, @@ -410,34 +408,34 @@ class SGH : public Solver }; void calc_extensive_node_mass(const CArrayKokkos& node_extensive_mass, - const DCArrayKokkos& node_coords, - const DCArrayKokkos& node_mass, - const double num_dims, - const double num_nodes); + const DCArrayKokkos& node_coords, + const DCArrayKokkos& node_mass, + const double num_dims, + const double num_nodes); void calc_node_areal_mass(const Mesh_t& mesh, - const DCArrayKokkos& node_coords, - const DCArrayKokkos& node_mass, - CArrayKokkos node_extensive_mass, - double tiny); + const DCArrayKokkos& node_coords, + const DCArrayKokkos& node_mass, + CArrayKokkos node_extensive_mass, + double tiny); double sum_domain_internal_energy(const DCArrayKokkos& MaterialPoints_mass, - const DCArrayKokkos& MaterialPoints_sie, - const size_t num_mat_points); + const DCArrayKokkos& MaterialPoints_sie, + const size_t num_mat_points); double sum_domain_kinetic_energy(const Mesh_t& mesh, - const DCArrayKokkos& node_vel, - const DCArrayKokkos& node_coords, - const DCArrayKokkos& node_mass); + const DCArrayKokkos& node_vel, + const DCArrayKokkos& node_coords, + const DCArrayKokkos& node_mass); double sum_domain_material_mass(const DCArrayKokkos& MaterialPoints_mass, - const size_t num_mat_points); + const size_t num_mat_points); double sum_domain_node_mass(const Mesh_t& mesh, - const DCArrayKokkos& node_coords, - const DCArrayKokkos& node_mass); + const DCArrayKokkos& node_coords, + const DCArrayKokkos& node_mass); -void set_corner_force_zero(const Mesh_t& mesh, - const DCArrayKokkos& corner_force); +void set_corner_force_zero(const Mesh_t& mesh, + const DCArrayKokkos& corner_force); #endif // end HEADER_H diff --git a/single-node-refactor/src/Solvers/SGH_solver/src/boundary.cpp b/single-node-refactor/src/Solvers/SGH_solver/src/boundary.cpp index f77f2d0b4..f60cd82a5 100644 --- a/single-node-refactor/src/Solvers/SGH_solver/src/boundary.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver/src/boundary.cpp @@ -36,7 +36,6 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "mesh.h" #include "boundary_conditions.h" - ///////////////////////////////////////////////////////////////////////////// /// /// \fn boundary_velocity @@ -49,40 +48,35 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /// \param The current simulation time /// ///////////////////////////////////////////////////////////////////////////// -void SGH::boundary_velocity(const Mesh_t& mesh, - const BoundaryCondition_t& BoundaryConditions, - DCArrayKokkos& node_vel, - const double time_value) const +void SGH::boundary_velocity(const Mesh_t& mesh, + const BoundaryCondition_t& BoundaryConditions, + DCArrayKokkos& node_vel, + const double time_value) const { - // Loop over boundary sets for (size_t bdy_set = 0; bdy_set < mesh.num_bdy_sets; bdy_set++) { - // Loop over boundary nodes in a boundary set FOR_ALL(bdy_node_lid, 0, mesh.num_bdy_nodes_in_set.host(bdy_set), { - // get the global index for this node on the boundary size_t bdy_node_gid = mesh.bdy_nodes_in_set(bdy_set, bdy_node_lid); // evaluate velocity on this boundary node - BoundaryConditions.BoundaryConditionFunctions(bdy_set).velocity(mesh, - BoundaryConditions.BoundaryConditionEnums, - BoundaryConditions.bc_global_vars, - BoundaryConditions.bc_state_vars, - node_vel, - time_value, - bdy_node_gid, - bdy_set); - + BoundaryConditions.BoundaryConditionFunctions(bdy_set).velocity( + mesh, + BoundaryConditions.BoundaryConditionEnums, + BoundaryConditions.bc_global_vars, + BoundaryConditions.bc_state_vars, + node_vel, + time_value, + 1, // rk_stage + bdy_node_gid, + bdy_set); }); // end for bdy_node_lid - - } // end for bdy_set return; } // end boundary_velocity function - ///////////////////////////////////////////////////////////////////////////// /// /// \fn boundary_velocity @@ -96,11 +90,9 @@ void SGH::boundary_velocity(const Mesh_t& mesh, /// ///////////////////////////////////////////////////////////////////////////// void SGH::boundary_contact(const Mesh_t& mesh, - const BoundaryCondition_t& BoundaryConditions, - DCArrayKokkos& node_vel, - const double time_value) const + const BoundaryCondition_t& BoundaryConditions, + DCArrayKokkos& node_vel, + const double time_value) const { return; } // end boundary_contact function - - diff --git a/single-node-refactor/src/Solvers/SGH_solver/src/energy_sgh.cpp b/single-node-refactor/src/Solvers/SGH_solver/src/energy_sgh.cpp index ee9d99901..95e6d9a50 100644 --- a/single-node-refactor/src/Solvers/SGH_solver/src/energy_sgh.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver/src/energy_sgh.cpp @@ -53,7 +53,7 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /// ///////////////////////////////////////////////////////////////////////////// void SGH::update_energy(const double rk_alpha, - const double dt, + const double dt, const Mesh_t& mesh, const DCArrayKokkos& node_vel, const DCArrayKokkos& node_coords, @@ -65,25 +65,20 @@ void SGH::update_energy(const double rk_alpha, const size_t num_mat_elems ) const { - // loop over all the elements in the mesh FOR_ALL(mat_elem_lid, 0, num_mat_elems, { - // get elem gid - size_t elem_gid = MaterialToMeshMaps_elem(mat_elem_lid); + size_t elem_gid = MaterialToMeshMaps_elem(mat_elem_lid); // the material point index = the material elem index for a 1-point element size_t mat_point_lid = mat_elem_lid; - double MaterialPoints_power = 0.0; - // --- tally the contribution from each corner to the element --- // Loop over the nodes in the element for (size_t node_lid = 0; node_lid < mesh.num_nodes_in_elem; node_lid++) { - // corner lid and node lid size_t corner_lid = node_lid; @@ -91,12 +86,11 @@ void SGH::update_energy(const double rk_alpha, size_t node_gid = mesh.nodes_in_elem(elem_gid, node_lid); // Get the corner global id for the local corner id - //size_t corner_gid = mesh.corners_in_elem(elem_gid, corner_lid); + // size_t corner_gid = mesh.corners_in_elem(elem_gid, corner_lid); // Get the material corner lid size_t mat_corner_lid = corners_in_mat_elem(mat_elem_lid, corner_lid); - double node_radius = 1; if (mesh.num_dims == 2) { node_radius = node_coords(1, node_gid, 1); @@ -104,18 +98,14 @@ void SGH::update_energy(const double rk_alpha, // calculate the Power=F dot V for this corner for (size_t dim = 0; dim < mesh.num_dims; dim++) { - double half_vel = (node_vel(1, node_gid, dim) + node_vel(0, node_gid, dim)) * 0.5; MaterialPoints_power += MaterialCorners_force(mat_corner_lid, dim) * node_radius * half_vel; - } // end for dim } // end for node_lid // update the specific energy MaterialPoints_sie(1, mat_point_lid) = MaterialPoints_sie(0, mat_point_lid) - - rk_alpha * dt / MaterialPoints_mass(mat_point_lid) * MaterialPoints_power; - - + rk_alpha * dt / MaterialPoints_mass(mat_point_lid) * MaterialPoints_power; }); // end parallel loop over the elements return; diff --git a/single-node-refactor/src/Solvers/SGH_solver/src/force_sgh.cpp b/single-node-refactor/src/Solvers/SGH_solver/src/force_sgh.cpp index 79dfb50b8..beccfbb56 100644 --- a/single-node-refactor/src/Solvers/SGH_solver/src/force_sgh.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver/src/force_sgh.cpp @@ -64,44 +64,40 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /// ///////////////////////////////////////////////////////////////////////////// void SGH::get_force(const Material_t& Materials, - const Mesh_t& mesh, - const DCArrayKokkos& GaussPoints_vol, - const DCArrayKokkos& GaussPoints_div, - const DCArrayKokkos& MaterialPoints_eroded, - const DCArrayKokkos& corner_force, - const DCArrayKokkos& node_coords, - const DCArrayKokkos& node_vel, - const DCArrayKokkos& MaterialPoints_den, - const DCArrayKokkos& MaterialPoints_sie, - const DCArrayKokkos& MaterialPoints_pres, - const DCArrayKokkos& MaterialPoints_stress, - const DCArrayKokkos& MaterialPoints_sspd, - const DCArrayKokkos& MaterialPoints_statev, - const DCArrayKokkos& MaterialCorners_force, - const corners_in_mat_t corners_in_mat_elem, - const DCArrayKokkos& MaterialToMeshMaps_elem, - const size_t num_mat_elems, - const size_t mat_id, - const double fuzz, - const double small, - const double dt, - const double rk_alpha) const + const Mesh_t& mesh, + const DCArrayKokkos& GaussPoints_vol, + const DCArrayKokkos& GaussPoints_div, + const DCArrayKokkos& MaterialPoints_eroded, + const DCArrayKokkos& corner_force, + const DCArrayKokkos& node_coords, + const DCArrayKokkos& node_vel, + const DCArrayKokkos& MaterialPoints_den, + const DCArrayKokkos& MaterialPoints_sie, + const DCArrayKokkos& MaterialPoints_pres, + const DCArrayKokkos& MaterialPoints_stress, + const DCArrayKokkos& MaterialPoints_sspd, + const DCArrayKokkos& MaterialPoints_statev, + const DCArrayKokkos& MaterialCorners_force, + const corners_in_mat_t corners_in_mat_elem, + const DCArrayKokkos& MaterialToMeshMaps_elem, + const size_t num_mat_elems, + const size_t mat_id, + const double fuzz, + const double small, + const double dt, + const double rk_alpha) const { const size_t num_dims = 3; const size_t num_nodes_in_elem = 8; - - // --- calculate the forces acting on the nodes from the element --- FOR_ALL(mat_elem_lid, 0, num_mat_elems, { - // get elem gid - size_t elem_gid = MaterialToMeshMaps_elem(mat_elem_lid); + size_t elem_gid = MaterialToMeshMaps_elem(mat_elem_lid); // the material point index = the material elem index for a 1-point element size_t mat_point_lid = mat_elem_lid; - // total Cauchy stress double tau_array[9]; @@ -136,7 +132,6 @@ void SGH::get_force(const Material_t& Materials, // element volume double vol = GaussPoints_vol(elem_gid); - // create a view of the stress_matrix ViewCArrayKokkos stress(&MaterialPoints_stress(1, mat_point_lid, 0, 0), 3, 3); @@ -234,8 +229,8 @@ void SGH::get_force(const Material_t& Materials, // Get an estimate of the shock direction. mag_vel = sqrt( (vel(0) - vel_star(0) ) * (vel(0) - vel_star(0) ) - + (vel(1) - vel_star(1) ) * (vel(1) - vel_star(1) ) - + (vel(2) - vel_star(2) ) * (vel(2) - vel_star(2) ) ); + + (vel(1) - vel_star(1) ) * (vel(1) - vel_star(1) ) + + (vel(2) - vel_star(2) ) * (vel(2) - vel_star(2) ) ); if (mag_vel > small) { // estimate of the shock direction, a unit normal @@ -247,8 +242,8 @@ void SGH::get_force(const Material_t& Materials, // if there is no velocity change, then use the surface area // normal as the shock direction mag = sqrt(area_normal(node_lid, 0) * area_normal(node_lid, 0) - + area_normal(node_lid, 1) * area_normal(node_lid, 1) - + area_normal(node_lid, 2) * area_normal(node_lid, 2) ); + + area_normal(node_lid, 1) * area_normal(node_lid, 1) + + area_normal(node_lid, 2) * area_normal(node_lid, 2) ); // estimate of the shock direction for (int dim = 0; dim < num_dims; dim++) { @@ -259,13 +254,13 @@ void SGH::get_force(const Material_t& Materials, // cell divergence indicates compression or expansions if (div < 0) { // element in compression muc(node_lid) = MaterialPoints_den(mat_point_lid) * - (Materials.MaterialFunctions(mat_id).q1 * MaterialPoints_sspd(mat_point_lid) + - Materials.MaterialFunctions(mat_id).q2 * mag_vel); + (Materials.MaterialFunctions(mat_id).q1 * MaterialPoints_sspd(mat_point_lid) + + Materials.MaterialFunctions(mat_id).q2 * mag_vel); } else{ // element in expansion muc(node_lid) = MaterialPoints_den(mat_point_lid) * - (Materials.MaterialFunctions(mat_id).q1ex * MaterialPoints_sspd(mat_point_lid) + - Materials.MaterialFunctions(mat_id).q2ex * mag_vel); + (Materials.MaterialFunctions(mat_id).q1ex * MaterialPoints_sspd(mat_point_lid) + + Materials.MaterialFunctions(mat_id).q2ex * mag_vel); } // end if on divergence sign size_t use_shock_dir = 0; @@ -277,16 +272,16 @@ void SGH::get_force(const Material_t& Materials, // on velocity in the numerator. It filters on the shock // direction mu_term = muc(node_lid) * - fabs(shock_dir(0) * area_normal(node_lid, 0) - + shock_dir(1) * area_normal(node_lid, 1) - + shock_dir(2) * area_normal(node_lid, 2) ); + fabs(shock_dir(0) * area_normal(node_lid, 0) + + shock_dir(1) * area_normal(node_lid, 1) + + shock_dir(2) * area_normal(node_lid, 2) ); } else{ // Using a full tensoral Riemann jump relation mu_term = muc(node_lid) - * sqrt(area_normal(node_lid, 0) * area_normal(node_lid, 0) - + area_normal(node_lid, 1) * area_normal(node_lid, 1) - + area_normal(node_lid, 2) * area_normal(node_lid, 2) ); + * sqrt(area_normal(node_lid, 0) * area_normal(node_lid, 0) + + area_normal(node_lid, 1) * area_normal(node_lid, 1) + + area_normal(node_lid, 2) * area_normal(node_lid, 2) ); } sum(0) += mu_term * vel(0); @@ -369,7 +364,6 @@ void SGH::get_force(const Material_t& Materials, // loop over the each node in the elem for (size_t node_lid = 0; node_lid < num_nodes_in_elem; node_lid++) { - // the local corner id is the local node id size_t corner_lid = node_lid; @@ -381,7 +375,7 @@ void SGH::get_force(const Material_t& Materials, // Get the material corner lid size_t mat_corner_lid = corners_in_mat_elem(mat_elem_lid, corner_lid); - //printf("corner difference = %zu \n", mat_corner_lid-corner_gid); + // printf("corner difference = %zu \n", mat_corner_lid-corner_gid); // loop over dimensions and calc corner forces if (MaterialPoints_eroded(mat_point_lid) == true) { // material(mat_id).blank_mat_id) @@ -390,21 +384,18 @@ void SGH::get_force(const Material_t& Materials, MaterialCorners_force(mat_corner_lid, dim) = 0.0; } } - else{ for (int dim = 0; dim < num_dims; dim++) { - double force_component = - area_normal(node_lid, 0) * tau(0, dim) - + area_normal(node_lid, 1) * tau(1, dim) - + area_normal(node_lid, 2) * tau(2, dim) - + phi * muc(node_lid) * (vel_star(dim) - node_vel(1, node_gid, dim)); + area_normal(node_lid, 0) * tau(0, dim) + + area_normal(node_lid, 1) * tau(1, dim) + + area_normal(node_lid, 2) * tau(2, dim) + + phi * muc(node_lid) * (vel_star(dim) - node_vel(1, node_gid, dim)); MaterialCorners_force(mat_corner_lid, dim) = force_component; corner_force(corner_gid, dim) += force_component; // tally all forces to the corner } // end loop over dimension } // end if - } // end for loop over nodes in elem // --- Update Stress --- @@ -422,7 +413,7 @@ void SGH::get_force(const Material_t& Materials, MaterialPoints_statev, MaterialPoints_sspd, MaterialPoints_den(mat_point_lid), - MaterialPoints_sie(1,mat_point_lid), + MaterialPoints_sie(1, mat_point_lid), vel_grad, elem_node_gids, node_coords, @@ -462,46 +453,44 @@ void SGH::get_force(const Material_t& Materials, /// ///////////////////////////////////////////////////////////////////////////// void SGH::get_force_2D(const Material_t& Materials, - const Mesh_t& mesh, - const DCArrayKokkos& GaussPoints_vol, - const DCArrayKokkos& GaussPoints_div, - const DCArrayKokkos& corner_force, - const DCArrayKokkos& node_coords, - const DCArrayKokkos& node_vel, - const DCArrayKokkos& MaterialPoints_den, - const DCArrayKokkos& MaterialPoints_sie, - const DCArrayKokkos& MaterialPoints_pres, - const DCArrayKokkos& MaterialPoints_stress, - const DCArrayKokkos& MaterialPoints_sspd, - const DCArrayKokkos& MaterialPoints_statev, - const DCArrayKokkos& MaterialCorners_force, - const corners_in_mat_t corners_in_mat_elem, - const DCArrayKokkos& MaterialToMeshMaps_elem, - const size_t num_mat_elems, - const size_t mat_id, - const double fuzz, - const double small, - const double dt, - const double rk_alpha) const + const Mesh_t& mesh, + const DCArrayKokkos& GaussPoints_vol, + const DCArrayKokkos& GaussPoints_div, + const DCArrayKokkos& corner_force, + const DCArrayKokkos& node_coords, + const DCArrayKokkos& node_vel, + const DCArrayKokkos& MaterialPoints_den, + const DCArrayKokkos& MaterialPoints_sie, + const DCArrayKokkos& MaterialPoints_pres, + const DCArrayKokkos& MaterialPoints_stress, + const DCArrayKokkos& MaterialPoints_sspd, + const DCArrayKokkos& MaterialPoints_statev, + const DCArrayKokkos& MaterialCorners_force, + const corners_in_mat_t corners_in_mat_elem, + const DCArrayKokkos& MaterialToMeshMaps_elem, + const size_t num_mat_elems, + const size_t mat_id, + const double fuzz, + const double small, + const double dt, + const double rk_alpha) const { const size_t num_dims = 2; const size_t num_nodes_in_elem = 4; - // set corner force to zero + // set corner force to zero FOR_ALL(corner_gid, 0, mesh.num_corners, { for (int dim = 0; dim < num_dims; dim++) { corner_force(corner_gid, dim) = 0.0; } }); // end parallel for corners - // --- calculate the forces acting on the nodes from the element --- FOR_ALL(mat_elem_lid, 0, num_mat_elems, { - // get mesh elem gid - size_t elem_gid = MaterialToMeshMaps_elem(mat_elem_lid); + size_t elem_gid = MaterialToMeshMaps_elem(mat_elem_lid); - //size_t guass_gid = elem_gid; // 1 gauss point per element + // size_t guass_gid = elem_gid; // 1 gauss point per element // the material point index = the material elem index for a 1-point element size_t mat_point_lid = mat_elem_lid; @@ -639,7 +628,7 @@ void SGH::get_force_2D(const Material_t& Materials, // Get an estimate of the shock direction. mag_vel = sqrt( (vel(0) - vel_star(0) ) * (vel(0) - vel_star(0) ) - + (vel(1) - vel_star(1) ) * (vel(1) - vel_star(1) ) ); + + (vel(1) - vel_star(1) ) * (vel(1) - vel_star(1) ) ); if (mag_vel > small) { // estimate of the shock direction, a unit normal @@ -651,7 +640,7 @@ void SGH::get_force_2D(const Material_t& Materials, // if there is no velocity change, then use the surface area // normal as the shock direction mag = sqrt(area_normal(node_lid, 0) * area_normal(node_lid, 0) - + area_normal(node_lid, 1) * area_normal(node_lid, 1) ); + + area_normal(node_lid, 1) * area_normal(node_lid, 1) ); // estimate of the shock direction for (int dim = 0; dim < num_dims; dim++) { @@ -662,13 +651,13 @@ void SGH::get_force_2D(const Material_t& Materials, // cell divergence indicates compression or expansions if (div < 0) { // element in compression muc(node_lid) = MaterialPoints_den(mat_point_lid) * - (Materials.MaterialFunctions(mat_id).q1 * MaterialPoints_sspd(mat_point_lid) + - Materials.MaterialFunctions(mat_id).q2 * mag_vel); + (Materials.MaterialFunctions(mat_id).q1 * MaterialPoints_sspd(mat_point_lid) + + Materials.MaterialFunctions(mat_id).q2 * mag_vel); } else{ // element in expansion muc(node_lid) = MaterialPoints_den(mat_point_lid) * - (Materials.MaterialFunctions(mat_id).q1ex * MaterialPoints_sspd(mat_point_lid) + - Materials.MaterialFunctions(mat_id).q2ex * mag_vel); + (Materials.MaterialFunctions(mat_id).q1ex * MaterialPoints_sspd(mat_point_lid) + + Materials.MaterialFunctions(mat_id).q2ex * mag_vel); } // end if on divergence sign size_t use_shock_dir = 0; @@ -680,14 +669,14 @@ void SGH::get_force_2D(const Material_t& Materials, // on velocity in the numerator. It filters on the shock // direction mu_term = muc(node_lid) * - fabs(shock_dir(0) * area_normal(0) - + shock_dir(1) * area_normal(1) ); + fabs(shock_dir(0) * area_normal(0) + + shock_dir(1) * area_normal(1) ); } else{ // Using a full tensoral Riemann jump relation mu_term = muc(node_lid) - * sqrt(area_normal(node_lid, 0) * area_normal(node_lid, 0) - + area_normal(node_lid, 1) * area_normal(node_lid, 1) ); + * sqrt(area_normal(node_lid, 0) * area_normal(node_lid, 0) + + area_normal(node_lid, 1) * area_normal(node_lid, 1) ); } sum(0) += mu_term * vel(0); @@ -779,9 +768,9 @@ void SGH::get_force_2D(const Material_t& Materials, // loop over dimension for (int dim = 0; dim < num_dims; dim++) { corner_force(corner_gid, dim) = - area_normal(node_lid, 0) * tau(0, dim) - + area_normal(node_lid, 1) * tau(1, dim) - + phi * muc(node_lid) * (vel_star(dim) - node_vel(1, node_gid, dim)); + area_normal(node_lid, 0) * tau(0, dim) + + area_normal(node_lid, 1) * tau(1, dim) + + phi * muc(node_lid) * (vel_star(dim) - node_vel(1, node_gid, dim)); } // end loop over dimension // ---- add hoop stress terms ---- @@ -802,7 +791,6 @@ void SGH::get_force_2D(const Material_t& Materials, // --- Update Stress --- // calculate the new stress at the next rk level, if it is a increment_based model - // increment_based elastic plastic model if (Materials.MaterialEnums(mat_id).StrengthType == model::incrementBased) { // cut out the node_gids for this element diff --git a/single-node-refactor/src/Solvers/SGH_solver/src/momentum.cpp b/single-node-refactor/src/Solvers/SGH_solver/src/momentum.cpp index e5acc4501..0081ac6c1 100644 --- a/single-node-refactor/src/Solvers/SGH_solver/src/momentum.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver/src/momentum.cpp @@ -79,7 +79,7 @@ void SGH::update_velocity(double rk_alpha, // update the velocity for (int dim = 0; dim < num_dims; dim++) { node_vel(1, node_gid, dim) = node_vel(0, node_gid, dim) + - rk_alpha * dt * node_force[dim] / node_mass(node_gid); + rk_alpha * dt * node_force[dim] / node_mass(node_gid); } // end for dim }); // end for parallel for over nodes @@ -132,50 +132,50 @@ void SGH::get_velgrad(ViewCArrayKokkos& vel_grad, // x-dir vel_grad(0, 0) = (u(0) * b_matrix(0, 0) + u(1) * b_matrix(1, 0) - + u(2) * b_matrix(2, 0) + u(3) * b_matrix(3, 0) - + u(4) * b_matrix(4, 0) + u(5) * b_matrix(5, 0) - + u(6) * b_matrix(6, 0) + u(7) * b_matrix(7, 0)) * inverse_vol; + + u(2) * b_matrix(2, 0) + u(3) * b_matrix(3, 0) + + u(4) * b_matrix(4, 0) + u(5) * b_matrix(5, 0) + + u(6) * b_matrix(6, 0) + u(7) * b_matrix(7, 0)) * inverse_vol; vel_grad(0, 1) = (u(0) * b_matrix(0, 1) + u(1) * b_matrix(1, 1) - + u(2) * b_matrix(2, 1) + u(3) * b_matrix(3, 1) - + u(4) * b_matrix(4, 1) + u(5) * b_matrix(5, 1) - + u(6) * b_matrix(6, 1) + u(7) * b_matrix(7, 1)) * inverse_vol; + + u(2) * b_matrix(2, 1) + u(3) * b_matrix(3, 1) + + u(4) * b_matrix(4, 1) + u(5) * b_matrix(5, 1) + + u(6) * b_matrix(6, 1) + u(7) * b_matrix(7, 1)) * inverse_vol; vel_grad(0, 2) = (u(0) * b_matrix(0, 2) + u(1) * b_matrix(1, 2) - + u(2) * b_matrix(2, 2) + u(3) * b_matrix(3, 2) - + u(4) * b_matrix(4, 2) + u(5) * b_matrix(5, 2) - + u(6) * b_matrix(6, 2) + u(7) * b_matrix(7, 2)) * inverse_vol; + + u(2) * b_matrix(2, 2) + u(3) * b_matrix(3, 2) + + u(4) * b_matrix(4, 2) + u(5) * b_matrix(5, 2) + + u(6) * b_matrix(6, 2) + u(7) * b_matrix(7, 2)) * inverse_vol; // y-dir vel_grad(1, 0) = (v(0) * b_matrix(0, 0) + v(1) * b_matrix(1, 0) - + v(2) * b_matrix(2, 0) + v(3) * b_matrix(3, 0) - + v(4) * b_matrix(4, 0) + v(5) * b_matrix(5, 0) - + v(6) * b_matrix(6, 0) + v(7) * b_matrix(7, 0)) * inverse_vol; + + v(2) * b_matrix(2, 0) + v(3) * b_matrix(3, 0) + + v(4) * b_matrix(4, 0) + v(5) * b_matrix(5, 0) + + v(6) * b_matrix(6, 0) + v(7) * b_matrix(7, 0)) * inverse_vol; vel_grad(1, 1) = (v(0) * b_matrix(0, 1) + v(1) * b_matrix(1, 1) - + v(2) * b_matrix(2, 1) + v(3) * b_matrix(3, 1) - + v(4) * b_matrix(4, 1) + v(5) * b_matrix(5, 1) - + v(6) * b_matrix(6, 1) + v(7) * b_matrix(7, 1)) * inverse_vol; + + v(2) * b_matrix(2, 1) + v(3) * b_matrix(3, 1) + + v(4) * b_matrix(4, 1) + v(5) * b_matrix(5, 1) + + v(6) * b_matrix(6, 1) + v(7) * b_matrix(7, 1)) * inverse_vol; vel_grad(1, 2) = (v(0) * b_matrix(0, 2) + v(1) * b_matrix(1, 2) - + v(2) * b_matrix(2, 2) + v(3) * b_matrix(3, 2) - + v(4) * b_matrix(4, 2) + v(5) * b_matrix(5, 2) - + v(6) * b_matrix(6, 2) + v(7) * b_matrix(7, 2)) * inverse_vol; + + v(2) * b_matrix(2, 2) + v(3) * b_matrix(3, 2) + + v(4) * b_matrix(4, 2) + v(5) * b_matrix(5, 2) + + v(6) * b_matrix(6, 2) + v(7) * b_matrix(7, 2)) * inverse_vol; // z-dir vel_grad(2, 0) = (w(0) * b_matrix(0, 0) + w(1) * b_matrix(1, 0) - + w(2) * b_matrix(2, 0) + w(3) * b_matrix(3, 0) - + w(4) * b_matrix(4, 0) + w(5) * b_matrix(5, 0) - + w(6) * b_matrix(6, 0) + w(7) * b_matrix(7, 0)) * inverse_vol; + + w(2) * b_matrix(2, 0) + w(3) * b_matrix(3, 0) + + w(4) * b_matrix(4, 0) + w(5) * b_matrix(5, 0) + + w(6) * b_matrix(6, 0) + w(7) * b_matrix(7, 0)) * inverse_vol; vel_grad(2, 1) = (w(0) * b_matrix(0, 1) + w(1) * b_matrix(1, 1) - + w(2) * b_matrix(2, 1) + w(3) * b_matrix(3, 1) - + w(4) * b_matrix(4, 1) + w(5) * b_matrix(5, 1) - + w(6) * b_matrix(6, 1) + w(7) * b_matrix(7, 1)) * inverse_vol; + + w(2) * b_matrix(2, 1) + w(3) * b_matrix(3, 1) + + w(4) * b_matrix(4, 1) + w(5) * b_matrix(5, 1) + + w(6) * b_matrix(6, 1) + w(7) * b_matrix(7, 1)) * inverse_vol; vel_grad(2, 2) = (w(0) * b_matrix(0, 2) + w(1) * b_matrix(1, 2) - + w(2) * b_matrix(2, 2) + w(3) * b_matrix(3, 2) - + w(4) * b_matrix(4, 2) + w(5) * b_matrix(5, 2) - + w(6) * b_matrix(6, 2) + w(7) * b_matrix(7, 2)) * inverse_vol; + + w(2) * b_matrix(2, 2) + w(3) * b_matrix(3, 2) + + w(4) * b_matrix(4, 2) + w(5) * b_matrix(5, 2) + + w(6) * b_matrix(6, 2) + w(7) * b_matrix(7, 2)) * inverse_vol; return; } // end function @@ -235,17 +235,17 @@ void SGH::get_velgrad2D(ViewCArrayKokkos& vel_grad, // x-dir vel_grad(0, 0) = (u(0) * b_matrix(0, 0) + u(1) * b_matrix(1, 0) - + u(2) * b_matrix(2, 0) + u(3) * b_matrix(3, 0)) * inverse_area; + + u(2) * b_matrix(2, 0) + u(3) * b_matrix(3, 0)) * inverse_area; vel_grad(0, 1) = (u(0) * b_matrix(0, 1) + u(1) * b_matrix(1, 1) - + u(2) * b_matrix(2, 1) + u(3) * b_matrix(3, 1)) * inverse_area; + + u(2) * b_matrix(2, 1) + u(3) * b_matrix(3, 1)) * inverse_area; // y-dir vel_grad(1, 0) = (v(0) * b_matrix(0, 0) + v(1) * b_matrix(1, 0) - + v(2) * b_matrix(2, 0) + v(3) * b_matrix(3, 0)) * inverse_area; + + v(2) * b_matrix(2, 0) + v(3) * b_matrix(3, 0)) * inverse_area; vel_grad(1, 1) = (v(0) * b_matrix(0, 1) + v(1) * b_matrix(1, 1) - + v(2) * b_matrix(2, 1) + v(3) * b_matrix(3, 1)) * inverse_area; + + v(2) * b_matrix(2, 1) + v(3) * b_matrix(3, 1)) * inverse_area; vel_grad(2, 2) = elem_vel_r / mean_radius; // + avg(vel_R)/R @@ -308,21 +308,21 @@ void SGH::get_divergence(DCArrayKokkos& elem_div, // x-dir elem_div(elem_gid) += (u(0) * b_matrix(0, 0) + u(1) * b_matrix(1, 0) - + u(2) * b_matrix(2, 0) + u(3) * b_matrix(3, 0) - + u(4) * b_matrix(4, 0) + u(5) * b_matrix(5, 0) - + u(6) * b_matrix(6, 0) + u(7) * b_matrix(7, 0)) * inverse_vol; + + u(2) * b_matrix(2, 0) + u(3) * b_matrix(3, 0) + + u(4) * b_matrix(4, 0) + u(5) * b_matrix(5, 0) + + u(6) * b_matrix(6, 0) + u(7) * b_matrix(7, 0)) * inverse_vol; // y-dir elem_div(elem_gid) += (v(0) * b_matrix(0, 1) + v(1) * b_matrix(1, 1) - + v(2) * b_matrix(2, 1) + v(3) * b_matrix(3, 1) - + v(4) * b_matrix(4, 1) + v(5) * b_matrix(5, 1) - + v(6) * b_matrix(6, 1) + v(7) * b_matrix(7, 1)) * inverse_vol; + + v(2) * b_matrix(2, 1) + v(3) * b_matrix(3, 1) + + v(4) * b_matrix(4, 1) + v(5) * b_matrix(5, 1) + + v(6) * b_matrix(6, 1) + v(7) * b_matrix(7, 1)) * inverse_vol; // z-dir elem_div(elem_gid) += (w(0) * b_matrix(0, 2) + w(1) * b_matrix(1, 2) - + w(2) * b_matrix(2, 2) + w(3) * b_matrix(3, 2) - + w(4) * b_matrix(4, 2) + w(5) * b_matrix(5, 2) - + w(6) * b_matrix(6, 2) + w(7) * b_matrix(7, 2)) * inverse_vol; + + w(2) * b_matrix(2, 2) + w(3) * b_matrix(3, 2) + + w(4) * b_matrix(4, 2) + w(5) * b_matrix(5, 2) + + w(6) * b_matrix(6, 2) + w(7) * b_matrix(7, 2)) * inverse_vol; }); // end parallel for over elem_gid return; @@ -394,16 +394,16 @@ void SGH::get_divergence2D(DCArrayKokkos& elem_div, // x-dir elem_div(elem_gid) += (u(0) * b_matrix(0, 0) - + u(1) * b_matrix(1, 0) - + u(2) * b_matrix(2, 0) - + u(3) * b_matrix(3, 0)) * inverse_area; + + u(1) * b_matrix(1, 0) + + u(2) * b_matrix(2, 0) + + u(3) * b_matrix(3, 0)) * inverse_area; // y-dir (i.e., r direction) elem_div(elem_gid) += (v(0) * b_matrix(0, 1) - + v(1) * b_matrix(1, 1) - + v(2) * b_matrix(2, 1) - + v(3) * b_matrix(3, 1)) * inverse_area - + elem_vel_r / mean_radius; // + avg(u_R)/R + + v(1) * b_matrix(1, 1) + + v(2) * b_matrix(2, 1) + + v(3) * b_matrix(3, 1)) * inverse_area + + elem_vel_r / mean_radius; // + avg(u_R)/R }); // end parallel for over elem_gid return; @@ -430,8 +430,8 @@ void SGH::get_divergence2D(DCArrayKokkos& elem_div, ///////////////////////////////////////////////////////////////////////////// KOKKOS_FUNCTION void SGH::decompose_vel_grad(const ViewCArrayKokkos& D_tensor, - const ViewCArrayKokkos& W_tensor, - const ViewCArrayKokkos& vel_grad) const + const ViewCArrayKokkos& W_tensor, + const ViewCArrayKokkos& vel_grad) const { // --- Calculate the velocity gradient --- diff --git a/single-node-refactor/src/Solvers/SGH_solver/src/properties.cpp b/single-node-refactor/src/Solvers/SGH_solver/src/properties.cpp index 5220cdd4e..9c38e83d5 100644 --- a/single-node-refactor/src/Solvers/SGH_solver/src/properties.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver/src/properties.cpp @@ -62,7 +62,7 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ///////////////////////////////////////////////////////////////////////////// void SGH::update_state( const Material_t& Materials, - const Mesh_t& mesh, + const Mesh_t& mesh, const DCArrayKokkos& node_coords, const DCArrayKokkos& node_vel, const DCArrayKokkos& MaterialPoints_den, @@ -80,21 +80,16 @@ void SGH::update_state( const size_t num_material_elems, const size_t mat_id) const { - const size_t num_dims = mesh.num_dims; - // --- pressure --- if (Materials.MaterialEnums.host(mat_id).EOSType == model::decoupledEOSType) { - // loop over all the elements the material lives in FOR_ALL(mat_elem_lid, 0, num_material_elems, { - // get elem gid size_t elem_gid = MaterialToMeshMaps_elem(mat_elem_lid); - - // get the material points for this material + // get the material points for this material // Note, with the SGH method, they are equal size_t mat_point_lid = mat_elem_lid; @@ -114,9 +109,9 @@ void SGH::update_state( MaterialPoints_sspd, MaterialPoints_den(mat_point_lid), MaterialPoints_sie(1, mat_point_lid), - Materials.eos_global_vars); + Materials.eos_global_vars); - // --- Sound Speed --- + // --- Sound Speed --- Materials.MaterialFunctions(mat_id).calc_sound_speed( MaterialPoints_pres, MaterialPoints_stress, @@ -127,9 +122,7 @@ void SGH::update_state( MaterialPoints_den(mat_point_lid), MaterialPoints_sie(1, mat_point_lid), Materials.eos_global_vars); - }); // end parallel for over mat elem lid - } // if decoupled EOS else { // only calculate density as pressure and sound speed come from the coupled strength model @@ -137,57 +130,46 @@ void SGH::update_state( // --- Density --- // loop over all the elements the material lives in FOR_ALL(mat_elem_lid, 0, num_material_elems, { - // get elem gid size_t elem_gid = MaterialToMeshMaps_elem(mat_elem_lid); - - // get the material points for this material + // get the material points for this material // Note, with the SGH method, they are equal size_t mat_point_lid = mat_elem_lid; // for this method, gauss point is equal to elem_gid size_t gauss_gid = elem_gid; - // --- Density --- MaterialPoints_den(mat_point_lid) = MaterialPoints_mass(mat_point_lid) / GaussPoints_vol(gauss_gid); - }); // end parallel for over mat elem lid Kokkos::fence(); } // end if - // --- Stress --- // state_based elastic plastic model if (Materials.MaterialEnums.host(mat_id).StrengthType == model::stateBased) { - const size_t num_nodes_in_elem = mesh.num_nodes_in_elem; // loop over all the elements the material lives in FOR_ALL(mat_elem_lid, 0, num_material_elems, { - // get elem gid size_t elem_gid = MaterialToMeshMaps_elem(mat_elem_lid); - - // get the material points for this material + // get the material points for this material // Note, with the SGH method, they are equal size_t mat_point_lid = mat_elem_lid; // for this method, gauss point is equal to elem_gid size_t gauss_gid = elem_gid; - // cut out the node_gids for this element ViewCArrayKokkos elem_node_gids(&mesh.nodes_in_elem(elem_gid, 0), num_nodes_in_elem); - // --- Density --- MaterialPoints_den(mat_point_lid) = MaterialPoints_mass(mat_point_lid) / GaussPoints_vol(gauss_gid); - // corner area normals double area_array[24]; ViewCArrayKokkos area(area_array, num_nodes_in_elem, num_dims); @@ -207,7 +189,6 @@ void SGH::update_state( GaussPoints_vol(elem_gid), elem_gid); - // --- call strength model --- Materials.MaterialFunctions(mat_id).calc_stress( MaterialPoints_pres, @@ -217,7 +198,7 @@ void SGH::update_state( MaterialPoints_statev, MaterialPoints_sspd, MaterialPoints_den(mat_point_lid), - MaterialPoints_sie(1,mat_point_lid), + MaterialPoints_sie(1, mat_point_lid), vel_grad, elem_node_gids, node_coords, @@ -225,24 +206,17 @@ void SGH::update_state( GaussPoints_vol(gauss_gid), dt, rk_alpha); - - }); // end parallel for over mat elem lid - } // end if state_based strength model - // --- mat point erosion --- if (Materials.MaterialEnums.host(mat_id).ErosionModels != model::noErosion) { - // loop over all the elements the material lives in FOR_ALL(mat_elem_lid, 0, num_material_elems, { - // get elem gid size_t elem_gid = MaterialToMeshMaps_elem(mat_elem_lid); - - // get the material points for this material + // get the material points for this material // Note, with the SGH method, they are equal size_t mat_point_lid = mat_elem_lid; @@ -261,26 +235,19 @@ void SGH::update_state( Materials.MaterialFunctions(mat_id).erode_density_val, mat_point_lid); - - // apply a void eos if mat_point is eroded - if(MaterialPoints_eroded(mat_point_lid)){ - + if (MaterialPoints_eroded(mat_point_lid)) { MaterialPoints_pres(mat_point_lid) = 0.0; MaterialPoints_sspd(mat_point_lid) = 1.0e-32; for (size_t i = 0; i < 3; i++) { for (size_t j = 0; j < 3; j++) { - MaterialPoints_stress(1, mat_point_lid, i, j) = 0.0; + MaterialPoints_stress(1, mat_point_lid, i, j) = 0.0; } } // end for i,j - } // end if on eroded - - - }); // end parallel for - } // end if elem errosion + } // end if elem errosion return; } // end method to update state @@ -310,7 +277,7 @@ void SGH::update_state( ///////////////////////////////////////////////////////////////////////////// void SGH::update_state2D( const Material_t& Materials, - const Mesh_t& mesh, + const Mesh_t& mesh, const DCArrayKokkos& node_coords, const DCArrayKokkos& node_vel, const DCArrayKokkos& MaterialPoints_den, @@ -328,43 +295,34 @@ void SGH::update_state2D( const size_t num_material_elems, const size_t mat_id) const { - const size_t num_dims = mesh.num_dims; // --- Density --- // loop over all the elements the material lives in FOR_ALL(mat_elem_lid, 0, num_material_elems, { - // get elem gid size_t elem_gid = MaterialToMeshMaps_elem(mat_elem_lid); - - // get the material points for this material + // get the material points for this material // Note, with the SGH method, they are equal size_t mat_point_lid = mat_elem_lid; // for this method, gauss point is equal to elem_gid size_t gauss_gid = elem_gid; - // --- Density --- MaterialPoints_den(mat_point_lid) = MaterialPoints_mass(mat_point_lid) / GaussPoints_vol(gauss_gid); - }); // end parallel for over mat elem lid Kokkos::fence(); - // --- pressure --- if (Materials.MaterialEnums(mat_id).EOSType == model::decoupledEOSType) { - // loop over all the elements the material lives in FOR_ALL(mat_elem_lid, 0, num_material_elems, { - // get elem gid size_t elem_gid = MaterialToMeshMaps_elem(mat_elem_lid); - - // get the material points for this material + // get the material points for this material // Note, with the SGH method, they are equal size_t mat_point_lid = mat_elem_lid; @@ -381,8 +339,8 @@ void SGH::update_state2D( MaterialPoints_sspd, MaterialPoints_den(mat_point_lid), MaterialPoints_sie(0, mat_point_lid), - Materials.eos_global_vars); - // --- Sound Speed --- + Materials.eos_global_vars); + // --- Sound Speed --- Materials.MaterialFunctions(mat_id).calc_sound_speed( MaterialPoints_pres, MaterialPoints_stress, @@ -393,63 +351,54 @@ void SGH::update_state2D( MaterialPoints_den(mat_point_lid), MaterialPoints_sie(0, mat_point_lid), Materials.eos_global_vars); - }); // end parallel for over mat elem lid - } // if decoupled EOS - // --- Stress --- // state_based elastic plastic model if (Materials.MaterialEnums.host(mat_id).StrengthType == model::stateBased) { - const size_t num_nodes_in_elem = mesh.num_nodes_in_elem; // loop over all the elements the material lives in FOR_ALL(mat_elem_lid, 0, num_material_elems, { - // get elem gid size_t elem_gid = MaterialToMeshMaps_elem(mat_elem_lid); - - // get the material points for this material + // get the material points for this material // Note, with the SGH method, they are equal size_t mat_point_lid = mat_elem_lid; // for this method, gauss point is equal to elem_gid size_t gauss_gid = elem_gid; - // cut out the node_gids for this element ViewCArrayKokkos elem_node_gids(&mesh.nodes_in_elem(elem_gid, 0), num_nodes_in_elem); - // --- Density --- MaterialPoints_den(mat_point_lid) = MaterialPoints_mass(mat_point_lid) / GaussPoints_vol(gauss_gid); + // corner area normals + double area_array[24]; + ViewCArrayKokkos area(area_array, num_nodes_in_elem, num_dims); - // corner area normals - double area_array[24]; - ViewCArrayKokkos area(area_array, num_nodes_in_elem, num_dims); - - // velocity gradient - double vel_grad_array[9]; - ViewCArrayKokkos vel_grad(vel_grad_array, num_dims, num_dims); + // velocity gradient + double vel_grad_array[9]; + ViewCArrayKokkos vel_grad(vel_grad_array, num_dims, num_dims); - // get the B matrix which are the OUTWARD corner area normals - geometry::get_bmatrix(area, elem_gid, node_coords, elem_node_gids); + // get the B matrix which are the OUTWARD corner area normals + geometry::get_bmatrix(area, elem_gid, node_coords, elem_node_gids); - // --- Calculate the velocity gradient --- - get_velgrad(vel_grad, + // --- Calculate the velocity gradient --- + get_velgrad(vel_grad, elem_node_gids, node_vel, area, GaussPoints_vol(elem_gid), elem_gid); - // --- call strength model --- - Materials.MaterialFunctions(mat_id).calc_stress( + // --- call strength model --- + Materials.MaterialFunctions(mat_id).calc_stress( MaterialPoints_pres, MaterialPoints_stress, mat_point_lid, @@ -457,7 +406,7 @@ void SGH::update_state2D( MaterialPoints_statev, MaterialPoints_sspd, MaterialPoints_den(mat_point_lid), - MaterialPoints_sie(1,mat_point_lid), + MaterialPoints_sie(1, mat_point_lid), vel_grad, elem_node_gids, node_coords, @@ -465,24 +414,17 @@ void SGH::update_state2D( GaussPoints_vol(gauss_gid), dt, rk_alpha); - - }); // end parallel for over mat elem lid - } // end if state_based strength model - // --- mat point erosion --- if (Materials.MaterialEnums.host(mat_id).ErosionModels != model::noErosion) { - // loop over all the elements the material lives in FOR_ALL(mat_elem_lid, 0, num_material_elems, { - // get elem gid size_t elem_gid = MaterialToMeshMaps_elem(mat_elem_lid); - - // get the material points for this material + // get the material points for this material // Note, with the SGH method, they are equal size_t mat_point_lid = mat_elem_lid; @@ -505,16 +447,15 @@ void SGH::update_state2D( double phi_fail = 1.0 - (double)MaterialPoints_eroded(mat_point_lid); MaterialPoints_pres(mat_point_lid) *= phi_fail; // phi_fail = 1 or 0 MaterialPoints_sspd(mat_point_lid) *= phi_fail; - MaterialPoints_sspd(mat_point_lid) = fmax(MaterialPoints_sspd(mat_point_lid), 1e-32); + MaterialPoints_sspd(mat_point_lid) = fmax(MaterialPoints_sspd(mat_point_lid), 1e-32); for (size_t i = 0; i < 3; i++) { for (size_t j = 0; j < 3; j++) { MaterialPoints_stress(1, mat_point_lid, i, j) *= phi_fail; } } // end for i,j - }); // end parallel for - } // end if elem errosion + } // end if elem errosion return; } // end method to update state2D \ No newline at end of file diff --git a/single-node-refactor/src/Solvers/SGH_solver/src/sgh_execute.cpp b/single-node-refactor/src/Solvers/SGH_solver/src/sgh_execute.cpp index 4c30fa3e5..a8b381807 100644 --- a/single-node-refactor/src/Solvers/SGH_solver/src/sgh_execute.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver/src/sgh_execute.cpp @@ -49,11 +49,11 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /// Evolve the state according to the SGH method /// ///////////////////////////////////////////////////////////////////////////// -void SGH::execute(SimulationParameters_t& SimulationParamaters, - Material_t& Materials, - BoundaryCondition_t& BoundaryConditions, - Mesh_t& mesh, - State_t& State) +void SGH::execute(SimulationParameters_t& SimulationParamaters, + Material_t& Materials, + BoundaryCondition_t& BoundaryConditions, + Mesh_t& mesh, + State_t& State) { std::cout << "In execute function in sgh solver" << std::endl; @@ -89,20 +89,11 @@ void SGH::execute(SimulationParameters_t& SimulationParamaters, double graphics_time = 0.0; // the times for writing graphics dump size_t graphics_id = 0; - - - // printf("Writing outputs to file at %f \n", time_value); - // mesh_writer.write_mesh(mesh, MaterialPoints, node, corner, SimulationParamaters, time_value, graphics_times); - CArrayKokkos node_extensive_mass(mesh.num_nodes); - - std::cout << "Applying initial boundary conditions" << std::endl; boundary_velocity(mesh, BoundaryConditions, State.node.vel, time_value); // Time value = 0.0; - - // extensive energy tallies over the entire mesh double IE_t0 = 0.0; double KE_t0 = 0.0; @@ -117,13 +108,11 @@ void SGH::execute(SimulationParameters_t& SimulationParamaters, mesh.num_dims, mesh.num_nodes); - // the number of materials specified by the user input const size_t num_mats = Materials.num_mats; // extensive IE - for(size_t mat_id=0; mat_id= time_final) { break; } - } // end for cycle loop auto time_2 = std::chrono::high_resolution_clock::now(); @@ -506,8 +474,7 @@ void SGH::execute(SimulationParameters_t& SimulationParamaters, double TE_tend = 0.0; // extensive IE - for(size_t mat_id=0; mat_id tensor) det += tensor(0, 2) * (tensor(1, 0) * tensor(2, 1) - tensor(1, 1) * tensor(2, 0)); trace /= 3.; // easier for computation double p2 = pow((tensor(0, 0) - trace), 2) + pow((tensor(1, 1) - trace), 2) + - pow((tensor(2, 2) - trace), 2); + pow((tensor(2, 2) - trace), 2); p2 += 2. * (pow(tensor(0, 1), 2) + pow(tensor(0, 2), 2) + pow(tensor(1, 2), 2)); double p = sqrt(p2 / 6.); @@ -659,17 +624,30 @@ double max_Eigen2D(const ViewCArrayKokkos tensor) return abs_max_val; } // end 2D max eignen value - - +///////////////////////////////////////////////////////////////////////////// +/// +/// \fn calc_extensive_node_mass +/// +/// \brief +/// +/// +/// +/// \param +/// \param +/// \param +/// +/// \return +/// +///////////////////////////////////////////////////////////////////////////// void calc_extensive_node_mass(const CArrayKokkos& node_extensive_mass, - const DCArrayKokkos& node_coords, - const DCArrayKokkos& node_mass, - double num_dims, - double num_nodes) + const DCArrayKokkos& node_coords, + const DCArrayKokkos& node_mass, + double num_dims, + double num_nodes) { // save the nodal mass FOR_ALL(node_gid, 0, num_nodes, { - double radius = 1.0; if (num_dims == 2) { @@ -680,30 +658,43 @@ void calc_extensive_node_mass(const CArrayKokkos& node_extensive_mass, }); // end parallel for } // end function - // a function to tally the internal energy double sum_domain_internal_energy(const DCArrayKokkos& MaterialPoints_mass, - const DCArrayKokkos& MaterialPoints_sie, - size_t num_mat_points) + const DCArrayKokkos& MaterialPoints_sie, + size_t num_mat_points) { - double IE_sum = 0.0; double IE_loc_sum; // loop over the material points and tally IE REDUCE_SUM(matpt_lid, 0, num_mat_points, IE_loc_sum, { - IE_loc_sum += MaterialPoints_mass(matpt_lid) * MaterialPoints_sie(1,matpt_lid); + IE_loc_sum += MaterialPoints_mass(matpt_lid) * MaterialPoints_sie(1, matpt_lid); }, IE_sum); Kokkos::fence(); - return IE_sum; -} // end function +} // end function +///////////////////////////////////////////////////////////////////////////// +/// +/// \fn sum_domain_kinetic_energy +/// +/// \brief +/// +/// +/// +/// \param +/// \param +/// \param +/// +/// \return +/// +///////////////////////////////////////////////////////////////////////////// double sum_domain_kinetic_energy(const Mesh_t& mesh, - const DCArrayKokkos& node_vel, - const DCArrayKokkos& node_coords, - const DCArrayKokkos& node_mass) + const DCArrayKokkos& node_vel, + const DCArrayKokkos& node_coords, + const DCArrayKokkos& node_mass) { // extensive KE double KE_sum = 0.0; @@ -722,68 +713,71 @@ double sum_domain_kinetic_energy(const Mesh_t& mesh, else{ KE_loc_sum += node_mass(node_gid) * ke; } - }, KE_sum); Kokkos::fence(); - - return 0.5*KE_sum; + return 0.5 * KE_sum; } // end function - // a function to tally the material point masses double sum_domain_material_mass(const DCArrayKokkos& MaterialPoints_mass, - const size_t num_mat_points) + const size_t num_mat_points) { - double mass_domain = 0.0; double mass_loc_domain; REDUCE_SUM(matpt_lid, 0, num_mat_points, mass_loc_domain, { - - mass_loc_domain += MaterialPoints_mass(matpt_lid); - + mass_loc_domain += MaterialPoints_mass(matpt_lid); }, mass_domain); Kokkos::fence(); return mass_domain; -} // end function - +} // end function +///////////////////////////////////////////////////////////////////////////// +/// +/// \fn sum_domain_node_mass +/// +/// \brief +/// +/// +/// +/// \param +/// \param +/// \param +/// +/// \return +/// +///////////////////////////////////////////////////////////////////////////// double sum_domain_node_mass(const Mesh_t& mesh, - const DCArrayKokkos& node_coords, - const DCArrayKokkos& node_mass) + const DCArrayKokkos& node_coords, + const DCArrayKokkos& node_mass) { - double mass_domain = 0.0; double mass_loc_domain; REDUCE_SUM(node_gid, 0, mesh.num_nodes, mass_loc_domain, { - if (mesh.num_dims == 2) { mass_loc_domain += node_mass(node_gid) * node_coords(1, node_gid, 1); } else{ mass_loc_domain += node_mass(node_gid); } - }, mass_domain); Kokkos::fence(); - return mass_domain; } // end function - // a function to calculate the 2D-RZ areal mass (rho A = m/R) // for R=0, it is interpolated from off-axis void calc_node_areal_mass(const Mesh_t& mesh, - const DCArrayKokkos& node_coords, - const DCArrayKokkos& node_mass, - CArrayKokkos node_extensive_mass, - double tiny) + const DCArrayKokkos& node_coords, + const DCArrayKokkos& node_mass, + CArrayKokkos node_extensive_mass, + double tiny) { - // calculate the nodal areal mass FOR_ALL(node_gid, 0, mesh.num_nodes, { node_mass(node_gid) = 0.0; @@ -813,14 +807,12 @@ void calc_node_areal_mass(const Mesh_t& mesh, }); // end parallel for over elem_gid return; -}// end function - +} // end function // set the corner forces to zero -void set_corner_force_zero(const Mesh_t& mesh, - const DCArrayKokkos& corner_force) +void set_corner_force_zero(const Mesh_t& mesh, + const DCArrayKokkos& corner_force) { - // set corner force to zero FOR_ALL(corner_gid, 0, mesh.num_corners, { for (size_t dim = 0; dim < mesh.num_dims; dim++) { diff --git a/single-node-refactor/src/Solvers/SGH_solver/src/sgh_setup.cpp b/single-node-refactor/src/Solvers/SGH_solver/src/sgh_setup.cpp index d73da1230..fdcd8e6e0 100644 --- a/single-node-refactor/src/Solvers/SGH_solver/src/sgh_setup.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver/src/sgh_setup.cpp @@ -51,10 +51,9 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /// ///////////////////////////////////////////////////////////////////////////// void SGH::init_corner_node_masses_zero(const Mesh_t& mesh, - const DCArrayKokkos& node_mass, - const DCArrayKokkos& corner_mass) const + const DCArrayKokkos& node_mass, + const DCArrayKokkos& corner_mass) const { - // calculate the nodal mass FOR_ALL(node_gid, 0, mesh.num_nodes, { node_mass(node_gid) = 0.0; @@ -63,14 +62,13 @@ void SGH::init_corner_node_masses_zero(const Mesh_t& mesh, FOR_ALL(corner_gid, 0, mesh.num_corners, { corner_mass(corner_gid) = 0.0; }); // end parallel over corners - } // end setting masses equal to zero ///////////////////////////////////////////////////////////////////////////// /// /// \fn fill_regions_sgh /// -/// \brief a function to paint den, sie, vel, and mat_ids on the mesh +/// \brief a function to paint den, sie, vel, and mat_ids on the mesh /// The arrays populated (on host and device) are: /// elem_mat_id /// GaussPoint_den @@ -82,7 +80,7 @@ void SGH::init_corner_node_masses_zero(const Mesh_t& mesh, /// \param node_coords are the coordinates of the nodes /// \param node_vel is the nodal velocity array /// \param region_fills are the instructures to paint state on the mesh -/// \param voxel_elem_mat_id are the voxel values on a structured i,j,k mesh +/// \param voxel_elem_mat_id are the voxel values on a structured i,j,k mesh /// \param GaussPoint_den is density at the GaussPoints on the mesh /// \param GaussPoint_sie is specific internal energy at the GaussPoints on the mesh /// \param elem_mat_id is the material id in an element @@ -93,41 +91,36 @@ void SGH::init_corner_node_masses_zero(const Mesh_t& mesh, /// ///////////////////////////////////////////////////////////////////////////// void SGH::fill_regions_sgh(const Material_t& Materials, - const Mesh_t& mesh, - const DCArrayKokkos & node_coords, - DCArrayKokkos & node_vel, - DCArrayKokkos & GaussPoint_den, - DCArrayKokkos & GaussPoint_sie, - DCArrayKokkos & elem_mat_id, - DCArrayKokkos & voxel_elem_mat_id, - const CArrayKokkos & region_fills, - const CArray & region_fills_host, - const size_t num_fills, - const size_t num_elems, - const size_t num_nodes, - const size_t rk_num_bins) const + const Mesh_t& mesh, + const DCArrayKokkos& node_coords, + DCArrayKokkos& node_vel, + DCArrayKokkos& GaussPoint_den, + DCArrayKokkos& GaussPoint_sie, + DCArrayKokkos& elem_mat_id, + DCArrayKokkos& voxel_elem_mat_id, + const CArrayKokkos& region_fills, + const CArray& region_fills_host, + const size_t num_fills, + const size_t num_elems, + const size_t num_nodes, + const size_t rk_num_bins) const { - - double voxel_dx, voxel_dy, voxel_dz; // voxel mesh resolution, set by input file double orig_x, orig_y, orig_z; // origin of voxel elem center mesh, set by input file size_t voxel_num_i, voxel_num_j, voxel_num_k; // num voxel elements in each direction, set by input file - // --------------------------------------------- // copy to host, enum to read a voxel file // --------------------------------------------- - + DCArrayKokkos read_voxel_file(num_fills); // check to see if readVoxelFile FOR_ALL(f_id, 0, num_fills, { - if (region_fills(f_id).volume == region::readVoxelFile) - { + if (region_fills(f_id).volume == region::readVoxelFile) { read_voxel_file(f_id) = region::readVoxelFile; // read the voxel file } // add other mesh voxel files - else - { + else{ read_voxel_file(f_id) = 0; } }); // end parallel for @@ -135,24 +128,21 @@ void SGH::fill_regions_sgh(const Material_t& Materials, Kokkos::fence(); // --------------------------------------------- - // loop over the fill instructions for (size_t f_id = 0; f_id < num_fills; f_id++) { - // ---- // voxel mesh setup - if (read_voxel_file.host(f_id) == region::readVoxelFile) - { + if (read_voxel_file.host(f_id) == region::readVoxelFile) { // read voxel mesh to get the values in the fcn interface user_voxel_init(voxel_elem_mat_id, - voxel_dx, - voxel_dy, + voxel_dx, + voxel_dy, voxel_dz, - orig_x, - orig_y, + orig_x, + orig_y, orig_z, - voxel_num_i, - voxel_num_j, + voxel_num_i, + voxel_num_j, voxel_num_k, region_fills_host(f_id).scale_x, region_fills_host(f_id).scale_y, @@ -162,15 +152,13 @@ void SGH::fill_regions_sgh(const Material_t& Materials, // copy values read from file to device voxel_elem_mat_id.update_device(); } // endif - // add else if for other mesh reads including STL-2-voxel - + // add else if for other mesh reads including STL-2-voxel // parallel loop over elements in mesh FOR_ALL(elem_gid, 0, num_elems, { - // calculate the coordinates and radius of the element double elem_coords_1D[3]; // note:initialization with a list won't work - ViewCArrayKokkos elem_coords(&elem_coords_1D[0], 3); + ViewCArrayKokkos elem_coords(&elem_coords_1D[0], 3); elem_coords(0) = 0.0; elem_coords(1) = 0.0; elem_coords(2) = 0.0; @@ -185,32 +173,29 @@ void SGH::fill_regions_sgh(const Material_t& Materials, else{ elem_coords(2) = 0.0; } - } // end loop over nodes in element + } // end loop over nodes in element elem_coords(0) = (elem_coords(0) / mesh.num_nodes_in_elem); elem_coords(1) = (elem_coords(1) / mesh.num_nodes_in_elem); elem_coords(2) = (elem_coords(2) / mesh.num_nodes_in_elem); - // calc if we are to fill this element - size_t fill_this = fill_geometric_region(mesh, - voxel_elem_mat_id, - region_fills, - elem_coords, - voxel_dx, - voxel_dy, + size_t fill_this = fill_geometric_region(mesh, + voxel_elem_mat_id, + region_fills, + elem_coords, + voxel_dx, + voxel_dy, voxel_dz, - orig_x, - orig_y, + orig_x, + orig_y, orig_z, - voxel_num_i, - voxel_num_j, + voxel_num_i, + voxel_num_j, voxel_num_k, f_id); - // paint the material state on the element if fill_this=1 if (fill_this == 1) { - // default sgh paint paint_gauss_den_sie(Materials, mesh, @@ -226,13 +211,11 @@ void SGH::fill_regions_sgh(const Material_t& Materials, // add user defined paint here // user_defined_sgh_state(); - // technically, not thread safe, but making it a separate loop created bad fill behavior // loop over the nodes of this element and apply velocity for (size_t node_lid = 0; node_lid < mesh.num_nodes_in_elem; node_lid++) { - // get the mesh node index - size_t node_gid = mesh.nodes_in_elem(elem_gid, node_lid); + size_t node_gid = mesh.nodes_in_elem(elem_gid, node_lid); // default sgh paint paint_node_vel(region_fills, @@ -245,27 +228,20 @@ void SGH::fill_regions_sgh(const Material_t& Materials, // add user defined paint here // user_defined_vel_state(); - } // end loop over the nodes in elem - } // end if fill this - }); // end FOR_ALL node loop Kokkos::fence(); - } // end for loop over fills - elem_mat_id.update_host(); GaussPoint_den.update_host(); GaussPoint_sie.update_host(); node_vel.update_host(); Kokkos::fence(); - } // end SGH fill regions - ///////////////////////////////////////////////////////////////////////////// /// /// \fn setup the SGH method @@ -273,13 +249,12 @@ void SGH::fill_regions_sgh(const Material_t& Materials, /// \brief Allocate state, setup models, and fill mesh regions per the YAML input /// ///////////////////////////////////////////////////////////////////////////// -void SGH::setup(SimulationParameters_t& SimulationParamaters, - Material_t& Materials, - Mesh_t& mesh, - BoundaryCondition_t& Boundary, - State_t& State) +void SGH::setup(SimulationParameters_t& SimulationParamaters, + Material_t& Materials, + Mesh_t& mesh, + BoundaryCondition_t& Boundary, + State_t& State) { - size_t num_fills = SimulationParamaters.region_fills.size(); printf("Num Fills's = %zu\n", num_fills); @@ -289,17 +264,14 @@ void SGH::setup(SimulationParameters_t& SimulationParamaters, const size_t rk_num_bins = SimulationParamaters.dynamic_options.rk_num_bins; - // create temporary state fields // Painting routine requires only 1 material per GaussPoint - DCArrayKokkos GaussPoint_den(num_elems); - DCArrayKokkos GaussPoint_sie(num_elems); - DCArrayKokkos elem_mat_id(num_elems); // the mat_id in the elem + DCArrayKokkos GaussPoint_den(num_elems); + DCArrayKokkos GaussPoint_sie(num_elems); + DCArrayKokkos elem_mat_id(num_elems); // the mat_id in the elem DCArrayKokkos voxel_elem_mat_id; // 1 or 0 if material exist, or it is the material_id - - // --------------------------------------------- // fill den, sie, and velocity on the mesh // --------------------------------------------- @@ -318,104 +290,88 @@ void SGH::setup(SimulationParameters_t& SimulationParamaters, num_nodes, rk_num_bins); - // note: the device and host side are updated in the above function // --------------------------------------------- - // ---------------------------------------------------------------- // Walk over the mesh and find dimensions of material storage arrays // ---------------------------------------------------------------- const size_t num_mats = Materials.num_mats; // the number of materials on the mesh // a counter for the Material index spaces - DCArrayKokkos num_elems_saved_for_mat(num_mats); - - for(int mat_id=0; mat_id num_elems_saved_for_mat(num_mats); + for (int mat_id = 0; mat_id < num_mats; mat_id++) { size_t sum_local; size_t sum_total; - REDUCE_SUM(elem_gid, 0, num_elems, sum_local,{ - - if(elem_mat_id(elem_gid) == mat_id){ + REDUCE_SUM(elem_gid, 0, num_elems, sum_local, { + if (elem_mat_id(elem_gid) == mat_id) { // increment the number of elements the materials live in sum_local++; - } // end if - + } // end if }, sum_total); // material index space size num_elems_saved_for_mat.host(mat_id) = sum_total; - } // end for - - // --------------------------------------- // SGH allocation of maps and state // --------------------------------------- - State.MaterialToMeshMaps = CArray (num_mats); + State.MaterialToMeshMaps = CArray(num_mats); - State.MaterialPoints = CArray (num_mats); - State.MaterialCorners = CArray (num_mats); + State.MaterialPoints = CArray(num_mats); + State.MaterialCorners = CArray(num_mats); // zones not needed with SGH - - - // for ALE SGH, add a buffer to num_elems_for_mat, like 10% of num_elems up to num_elems. - for(int mat_id=0; mat_id& node_coords, const size_t num_nodes, const size_t num_mat_points) const { - // save elem quantities FOR_ALL(matpt_lid, 0, num_mat_points, { - // stress is always 3D even with 2D-RZ for (size_t i = 0; i < 3; i++) { for (size_t j = 0; j < 3; j++) { @@ -105,21 +102,21 @@ void SGH::rk_init(DCArrayKokkos& node_coords, /// ///////////////////////////////////////////////////////////////////////////// void SGH::get_timestep(Mesh_t& mesh, - DCArrayKokkos& node_coords, - DCArrayKokkos& node_vel, - DCArrayKokkos& GaussPoints_vol, - DCArrayKokkos& MaterialPoints_sspd, - DCArrayKokkos& MaterialPoints_eroded, - DCArrayKokkos& MaterialToMeshMaps_elem, - size_t num_mat_elems, - double time_value, - const double graphics_time, - const double time_final, - const double dt_max, - const double dt_min, - const double dt_cfl, - double& dt, - const double fuzz) const + DCArrayKokkos& node_coords, + DCArrayKokkos& node_vel, + DCArrayKokkos& GaussPoints_vol, + DCArrayKokkos& MaterialPoints_sspd, + DCArrayKokkos& MaterialPoints_eroded, + DCArrayKokkos& MaterialToMeshMaps_elem, + size_t num_mat_elems, + double time_value, + const double graphics_time, + const double time_final, + const double dt_max, + const double dt_min, + const double dt_cfl, + double& dt, + const double fuzz) const { // increase dt by 10%, that is the largest dt value dt = dt * 1.1; @@ -127,8 +124,7 @@ void SGH::get_timestep(Mesh_t& mesh, double dt_lcl; double min_dt_calc; REDUCE_MIN(mat_elem_lid, 0, num_mat_elems, dt_lcl, { - - size_t elem_gid = MaterialToMeshMaps_elem(mat_elem_lid); + size_t elem_gid = MaterialToMeshMaps_elem(mat_elem_lid); double coords0[24]; // element coords ViewCArrayKokkos coords(coords0, 8, 3); @@ -158,8 +154,8 @@ void SGH::get_timestep(Mesh_t& mesh, // returns magnitude of distance between each node, 28 total options dist(i) = fabs(sqrt((pow((coords(b, 0) - coords(a, 0)), 2.0) - + pow((coords(b, 1) - coords(a, 1)), 2.0) - + pow((coords(b, 2) - coords(a, 2)), 2.0)))); + + pow((coords(b, 1) - coords(a, 1)), 2.0) + + pow((coords(b, 2) - coords(a, 2)), 2.0)))); countB++; countA++; @@ -181,7 +177,7 @@ void SGH::get_timestep(Mesh_t& mesh, // local dt calc based on CFL double dt_lcl_ = dt_cfl * dist_min / (MaterialPoints_sspd(mat_elem_lid) + fuzz); - if (MaterialToMeshMaps_elem(mat_elem_lid) == true){ + if (MaterialToMeshMaps_elem(mat_elem_lid) == true) { dt_lcl_ = 1.0e32; // a huge time step as this element doesn't exist } @@ -225,21 +221,21 @@ void SGH::get_timestep(Mesh_t& mesh, /// ///////////////////////////////////////////////////////////////////////////// void SGH::get_timestep2D(Mesh_t& mesh, - DCArrayKokkos& node_coords, - DCArrayKokkos& node_vel, - DCArrayKokkos& GaussPoints_vol, - DCArrayKokkos& MaterialPoints_sspd, - DCArrayKokkos& MaterialPoints_eroded, - DCArrayKokkos& MaterialToMeshMaps_elem, - size_t num_mat_elems, - double time_value, - const double graphics_time, - const double time_final, - const double dt_max, - const double dt_min, - const double dt_cfl, - double& dt, - const double fuzz) const + DCArrayKokkos& node_coords, + DCArrayKokkos& node_vel, + DCArrayKokkos& GaussPoints_vol, + DCArrayKokkos& MaterialPoints_sspd, + DCArrayKokkos& MaterialPoints_eroded, + DCArrayKokkos& MaterialToMeshMaps_elem, + size_t num_mat_elems, + double time_value, + const double graphics_time, + const double time_final, + const double dt_max, + const double dt_min, + const double dt_cfl, + double& dt, + const double fuzz) const { // increase dt by 10%, that is the largest dt value dt = dt * 1.1; @@ -247,8 +243,7 @@ void SGH::get_timestep2D(Mesh_t& mesh, double dt_lcl; double min_dt_calc; REDUCE_MIN(mat_elem_lid, 0, num_mat_elems, dt_lcl, { - - size_t elem_gid = MaterialToMeshMaps_elem(mat_elem_lid); + size_t elem_gid = MaterialToMeshMaps_elem(mat_elem_lid); double coords0[8]; // element coords ViewCArrayKokkos coords(coords0, 4, 2); @@ -271,7 +266,7 @@ void SGH::get_timestep2D(Mesh_t& mesh, // returns magnitude of distance between each node, 6 total options dist(count) = fabs( sqrt(pow((coords(i, 0) - coords(j, 0)), 2.0) - + pow((coords(i, 1) - coords(j, 1)), 2.0) ) + + pow((coords(i, 1) - coords(j, 1)), 2.0) ) ); count++; } // end for j @@ -286,8 +281,7 @@ void SGH::get_timestep2D(Mesh_t& mesh, // local dt calc based on CFL double dt_lcl_ = dt_cfl * dist_min / (MaterialPoints_sspd(elem_gid) + fuzz); - - if (MaterialToMeshMaps_elem(mat_elem_lid) == true){ + if (MaterialToMeshMaps_elem(mat_elem_lid) == true) { dt_lcl_ = 1.0e32; // a huge time step as this element doesn't exist } diff --git a/single-node-refactor/src/boundary_conditions/velocity/constant_velocity_bc.h b/single-node-refactor/src/boundary_conditions/velocity/constant_velocity_bc.h index da0540e3c..88eb9da83 100644 --- a/single-node-refactor/src/boundary_conditions/velocity/constant_velocity_bc.h +++ b/single-node-refactor/src/boundary_conditions/velocity/constant_velocity_bc.h @@ -32,7 +32,6 @@ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. **********************************************************************************************/ - #ifndef BOUNDARY_VEL_CONST_H #define BOUNDARY_VEL_CONST_H @@ -40,6 +39,8 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. struct BoundaryConditionEnums_t; +namespace ConstantVelocityBC +{ ///////////////////////////////////////////////////////////////////////////// /// /// \fn Boundary velocity is constant in all directions per specified values @@ -47,39 +48,33 @@ struct BoundaryConditionEnums_t; /// \brief This is a function to set the velocity in all directions to a value /// /// \param Mesh object -/// \param Boundary condition enums to select options +/// \param Boundary condition enums to select options /// \param Boundary condition global variables array /// \param Boundary condition state variables array /// \param Node velocity /// \param Time of the simulation /// \param Boundary global index for the surface node -/// \param Boundary set local id +/// \param Boundary set local id /// ///////////////////////////////////////////////////////////////////////////// -namespace ConstantVelocityBC { - - - - KOKKOS_FUNCTION - static void velocity(const Mesh_t& mesh, - const DCArrayKokkos & BoundaryConditionEnums, - const DCArrayKokkos& bc_global_vars, - const DCArrayKokkos& bc_state_vars, - const DCArrayKokkos& node_vel, - const double time_value, - const size_t bdy_node_gid, - const size_t bdy_set) - { - - - for (size_t dim = 0; dim < mesh.num_dims; dim++) { - // Set velocity to zero - node_vel(1, bdy_node_gid, dim) = bc_global_vars(bdy_set, dim); - } - - return; - } // end func +KOKKOS_FUNCTION +static void velocity(const Mesh_t& mesh, + const DCArrayKokkos& BoundaryConditionEnums, + const DCArrayKokkos& bc_global_vars, + const DCArrayKokkos& bc_state_vars, + const DCArrayKokkos& node_vel, + const double time_value, + const size_t rk_stage, + const size_t bdy_node_gid, + const size_t bdy_set) +{ + for (size_t dim = 0; dim < mesh.num_dims; dim++) { + // Set velocity to zero + node_vel(1, bdy_node_gid, dim) = bc_global_vars(bdy_set, dim); + } + return; +} // end velocity } // end namespace #endif // end Header Guard \ No newline at end of file diff --git a/single-node-refactor/src/boundary_conditions/velocity/no_velocity_bc.h b/single-node-refactor/src/boundary_conditions/velocity/no_velocity_bc.h index 97703c09c..043ef0241 100644 --- a/single-node-refactor/src/boundary_conditions/velocity/no_velocity_bc.h +++ b/single-node-refactor/src/boundary_conditions/velocity/no_velocity_bc.h @@ -39,6 +39,8 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. struct BoundaryConditionEnums_t; +namespace NoVelocityBC +{ ///////////////////////////////////////////////////////////////////////////// /// /// \fn Boundary velocity is never set @@ -46,33 +48,29 @@ struct BoundaryConditionEnums_t; /// \brief This is a function to set the velocity all directions to a value /// /// \param Mesh object -/// \param Boundary condition enums to select options +/// \param Boundary condition enums to select options /// \param Boundary condition global variables array /// \param Boundary condition state variables array /// \param Node velocity /// \param Time of the simulation /// \param Boundary global index for the surface node -/// \param Boundary set local id +/// \param Boundary set local id /// ///////////////////////////////////////////////////////////////////////////// -namespace NoVelocityBC { - - - KOKKOS_FUNCTION - static void velocity(const Mesh_t& mesh, - const DCArrayKokkos & BoundaryConditionEnums, - const DCArrayKokkos& bc_global_vars, - const DCArrayKokkos& bc_state_vars, - const DCArrayKokkos& node_vel, - const double time_value, - const size_t bdy_node_gid, - const size_t bdy_set) - { - // this is a blank function by design - - return; - } // end func - +KOKKOS_FUNCTION +static void velocity(const Mesh_t& mesh, + const DCArrayKokkos& BoundaryConditionEnums, + const DCArrayKokkos& bc_global_vars, + const DCArrayKokkos& bc_state_vars, + const DCArrayKokkos& node_vel, + const double time_value, + const size_t rk_stage, + const size_t bdy_node_gid, + const size_t bdy_set) +{ + // this is a blank function by design + return; +} // end velocity } // end namespace #endif // end Header Guard \ No newline at end of file diff --git a/single-node-refactor/src/boundary_conditions/velocity/piston_velocity_bc.h b/single-node-refactor/src/boundary_conditions/velocity/piston_velocity_bc.h index 17338916e..953d06d0b 100644 --- a/single-node-refactor/src/boundary_conditions/velocity/piston_velocity_bc.h +++ b/single-node-refactor/src/boundary_conditions/velocity/piston_velocity_bc.h @@ -32,7 +32,6 @@ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. **********************************************************************************************/ - #ifndef BOUNDARY_VEL_CONST_H #define BOUNDARY_VEL_CONST_H @@ -40,51 +39,48 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. struct BoundaryConditionEnums_t; +namespace PistonVelocityBC +{ ///////////////////////////////////////////////////////////////////////////// /// -/// \fn Boundary velocity is constant in one direction, +/// \fn velocity /// /// \brief This is a function to set the velocity in one direction to a -/// specified velocity. The other components can freely slide on +/// specified velocity. The other components can freely slide on /// the piston /// /// \param Mesh object -/// \param Boundary condition enums to select options +/// \param Boundary condition enums to select options /// \param Boundary condition global variables array /// \param Boundary condition state variables array /// \param Node velocity /// \param Time of the simulation /// \param Boundary global index for the surface node -/// \param Boundary set local id +/// \param Boundary set local id /// ///////////////////////////////////////////////////////////////////////////// -namespace PistonVelocityBC { - - - - KOKKOS_FUNCTION - static void velocity(const Mesh_t& mesh, - const DCArrayKokkos & BoundaryConditionEnums, - const DCArrayKokkos& bc_global_vars, - const DCArrayKokkos& bc_state_vars, - const DCArrayKokkos& node_vel, - const double time_value, - const size_t bdy_node_gid, - const size_t bdy_set) - { - - // directions are: - // x_plane = 0, - // y_plane = 1, - // z_plane = 2, - - // Set velocity to the specified value - node_vel(1, bdy_node_gid, BoundaryConditionEnums(bdy_set).Direction) = - bc_global_vars(bdy_set, BoundaryConditionEnums(bdy_set).Direction); +KOKKOS_FUNCTION +static void velocity(const Mesh_t& mesh, + const DCArrayKokkos& BoundaryConditionEnums, + const DCArrayKokkos& bc_global_vars, + const DCArrayKokkos& bc_state_vars, + const DCArrayKokkos& node_vel, + const double time_value, + const size_t rk_stage, + const size_t bdy_node_gid, + const size_t bdy_set) +{ + // directions are: + // x_plane = 0, + // y_plane = 1, + // z_plane = 2, - return; - } // end func + // Set velocity to the specified value + node_vel(1, bdy_node_gid, BoundaryConditionEnums(bdy_set).Direction) = + bc_global_vars(bdy_set, BoundaryConditionEnums(bdy_set).Direction); + return; +} // end func } // end namespace #endif // end Header Guard \ No newline at end of file diff --git a/single-node-refactor/src/boundary_conditions/velocity/reflected_velocity_bc.h b/single-node-refactor/src/boundary_conditions/velocity/reflected_velocity_bc.h index a88d30e97..5e3a35bd7 100644 --- a/single-node-refactor/src/boundary_conditions/velocity/reflected_velocity_bc.h +++ b/single-node-refactor/src/boundary_conditions/velocity/reflected_velocity_bc.h @@ -39,49 +39,47 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. struct BoundaryConditionEnums_t; +namespace ReflectedVelocityBC +{ ///////////////////////////////////////////////////////////////////////////// /// -/// \fn Boundary velocity is on a reflected surface (normal direction is zero) +/// \fn velocity /// /// \brief This is a function to set the velocity along a symmetry plane or -/// a wall. This fcn imposes a normal velocity, in the specified +/// a wall. This fcn imposes a normal velocity, in the specified /// direction, to be equal to zero /// /// \param Mesh object -/// \param Boundary condition enums to select options +/// \param Boundary condition enums to select options /// \param Boundary condition global variables array /// \param Boundary condition state variables array /// \param Node velocity /// \param Time of the simulation /// \param Boundary global index for the surface node -/// \param Boundary set local id +/// \param Boundary set local id /// ///////////////////////////////////////////////////////////////////////////// -namespace ReflectedVelocityBC { +KOKKOS_FUNCTION +static void velocity(const Mesh_t& mesh, + const DCArrayKokkos& BoundaryConditionEnums, + const DCArrayKokkos& bc_global_vars, + const DCArrayKokkos& bc_state_vars, + const DCArrayKokkos& node_vel, + const double time_value, + const size_t rk_stage, + const size_t bdy_node_gid, + const size_t bdy_set) +{ + // directions are: + // x_plane = 0, + // y_plane = 1, + // z_plane = 2, - KOKKOS_FUNCTION - static void velocity(const Mesh_t& mesh, - const DCArrayKokkos & BoundaryConditionEnums, - const DCArrayKokkos& bc_global_vars, - const DCArrayKokkos& bc_state_vars, - const DCArrayKokkos& node_vel, - const double time_value, - const size_t bdy_node_gid, - const size_t bdy_set) - { - - // directions are: - // x_plane = 0, - // y_plane = 1, - // z_plane = 2, - - // Set velocity to zero in the specified direction - node_vel(1, bdy_node_gid, BoundaryConditionEnums(bdy_set).Direction) = 0.0; - - return; - } // end func + // Set velocity to zero in the specified direction + node_vel(1, bdy_node_gid, BoundaryConditionEnums(bdy_set).Direction) = 0.0; + return; +} // end func } // end namespace - #endif // end Header Guard \ No newline at end of file diff --git a/single-node-refactor/src/boundary_conditions/velocity/time_varying_velocity_bc.h b/single-node-refactor/src/boundary_conditions/velocity/time_varying_velocity_bc.h index 0ad507264..726adc916 100644 --- a/single-node-refactor/src/boundary_conditions/velocity/time_varying_velocity_bc.h +++ b/single-node-refactor/src/boundary_conditions/velocity/time_varying_velocity_bc.h @@ -39,9 +39,20 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. struct BoundaryConditionEnums_t; +namespace TimeVaryingVelocityBC +{ +// add an enum for boundary statevars and global vars +enum BCVars +{ + hydro_bc_vel_0 = 0, + hydro_bc_vel_1 = 1, + hydro_bc_vel_t_start = 2, + hydro_bc_vel_t_end = 3 +}; + ///////////////////////////////////////////////////////////////////////////// /// -/// \fn Boundary velocity is a function of time +/// \fn velocity /// /// \brief This is a function to force the boundary to move with a specified /// velocity that varies in time. The function form is an exponential @@ -50,62 +61,49 @@ struct BoundaryConditionEnums_t; /// v(t) = v0 exp(-v1*(time - time_start) ) /// /// \param Mesh object -/// \param Boundary condition enums to select options +/// \param Boundary condition enums to select options /// \param Boundary condition global variables array /// \param Boundary condition state variables array /// \param Node velocity /// \param Time of the simulation /// \param Boundary global index for the surface node -/// \param Boundary set local id +/// \param Boundary set local id /// ///////////////////////////////////////////////////////////////////////////// -namespace TimeVaryingVelocityBC { - - // add an enum for boundary statevars and global vars - enum BCVars - { - hydro_bc_vel_0 = 0, - hydro_bc_vel_1 = 1, - hydro_bc_vel_t_start = 2, - hydro_bc_vel_t_end = 3 - }; - - KOKKOS_FUNCTION - static void velocity(const Mesh_t& mesh, - const DCArrayKokkos & BoundaryConditionEnums, - const DCArrayKokkos& bc_global_vars, - const DCArrayKokkos& bc_state_vars, - const DCArrayKokkos& node_vel, - const double time_value, - const size_t bdy_node_gid, - const size_t bdy_set) - { - const double hydro_bc_vel_0 = bc_global_vars(bdy_set, BCVars::hydro_bc_vel_0); - const double hydro_bc_vel_1 = bc_global_vars(bdy_set, BCVars::hydro_bc_vel_1); - const double hydro_bc_vel_t_start = bc_global_vars(bdy_set, BCVars::hydro_bc_vel_t_start); - const double hydro_bc_vel_t_end = bc_global_vars(bdy_set, BCVars::hydro_bc_vel_t_end); - - // directions are as follows: - // x_plane = 0, - // y_plane = 1, - // z_plane = 2, - - // Set velocity to that direction to specified value - // if t_end > time > t_start - // v(t) = v0 exp(-v1*(time - time_start) ) - if (time_value >= hydro_bc_vel_t_start && time_value <= hydro_bc_vel_t_end) { - - // the time difference - const double time_delta = time_value - hydro_bc_vel_t_start; +KOKKOS_FUNCTION +static void velocity(const Mesh_t& mesh, + const DCArrayKokkos& BoundaryConditionEnums, + const DCArrayKokkos& bc_global_vars, + const DCArrayKokkos& bc_state_vars, + const DCArrayKokkos& node_vel, + const double time_value, + const size_t rk_stage, + const size_t bdy_node_gid, + const size_t bdy_set) +{ + const double hydro_bc_vel_0 = bc_global_vars(bdy_set, BCVars::hydro_bc_vel_0); + const double hydro_bc_vel_1 = bc_global_vars(bdy_set, BCVars::hydro_bc_vel_1); + const double hydro_bc_vel_t_start = bc_global_vars(bdy_set, BCVars::hydro_bc_vel_t_start); + const double hydro_bc_vel_t_end = bc_global_vars(bdy_set, BCVars::hydro_bc_vel_t_end); - node_vel(1, bdy_node_gid, BoundaryConditionEnums(bdy_set).Direction) = - hydro_bc_vel_0 * exp(-hydro_bc_vel_1 * time_delta); + // directions are as follows: + // x_plane = 0, + // y_plane = 1, + // z_plane = 2, - } // end if on time + // Set velocity to that direction to specified value + // if t_end > time > t_start + // v(t) = v0 exp(-v1*(time - time_start) ) + if (time_value >= hydro_bc_vel_t_start && time_value <= hydro_bc_vel_t_end) { + // the time difference + const double time_delta = time_value - hydro_bc_vel_t_start; - return; - } // end func + node_vel(1, bdy_node_gid, BoundaryConditionEnums(bdy_set).Direction) = + hydro_bc_vel_0 * exp(-hydro_bc_vel_1 * time_delta); + } // end if on time + return; +} // end func } // end namespace #endif // end Header Guard \ No newline at end of file diff --git a/single-node-refactor/src/boundary_conditions/velocity/user_defined_velocity_bc.h b/single-node-refactor/src/boundary_conditions/velocity/user_defined_velocity_bc.h index 7420d3824..a0d638352 100644 --- a/single-node-refactor/src/boundary_conditions/velocity/user_defined_velocity_bc.h +++ b/single-node-refactor/src/boundary_conditions/velocity/user_defined_velocity_bc.h @@ -46,36 +46,34 @@ struct BoundaryConditionEnums_t; /// \brief This is a function to set the velocity based on user implementation /// /// \param Mesh object -/// \param Boundary condition enums to select options +/// \param Boundary condition enums to select options /// \param Boundary condition global variables array /// \param Boundary condition state variables array /// \param Node velocity /// \param Time of the simulation /// \param Boundary global index for the surface node -/// \param Boundary set local id +/// \param Boundary set local id /// ///////////////////////////////////////////////////////////////////////////// -namespace UserDefinedVelocityBC { +namespace UserDefinedVelocityBC +{ +// add an enum for boundary statevars and global vars - // add an enum for boundary statevars and global vars - - - KOKKOS_FUNCTION - static void velocity(const Mesh_t& mesh, - const DCArrayKokkos & BoundaryConditionEnums, - const DCArrayKokkos& bc_global_vars, - const DCArrayKokkos& bc_state_vars, - const DCArrayKokkos& node_vel, - const double time_value, - const size_t bdy_node_gid, - const size_t bdy_set) - { - - // add user coding here - - return; - } // end func +KOKKOS_FUNCTION +static void velocity(const Mesh_t& mesh, + const DCArrayKokkos& BoundaryConditionEnums, + const DCArrayKokkos& bc_global_vars, + const DCArrayKokkos& bc_state_vars, + const DCArrayKokkos& node_vel, + const double time_value, + const size_t rk_stage, + const size_t bdy_node_gid, + const size_t bdy_set) +{ + // add user coding here + return; +} // end func } // end namespace #endif // end Header Guard \ No newline at end of file diff --git a/single-node-refactor/src/boundary_conditions/velocity/zero_velocity_bc.h b/single-node-refactor/src/boundary_conditions/velocity/zero_velocity_bc.h index f571231fe..9e6d48f9c 100644 --- a/single-node-refactor/src/boundary_conditions/velocity/zero_velocity_bc.h +++ b/single-node-refactor/src/boundary_conditions/velocity/zero_velocity_bc.h @@ -32,7 +32,6 @@ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. **********************************************************************************************/ - #ifndef BOUNDARY_VEL_FIXED_H #define BOUNDARY_VEL_FIXED_H @@ -47,39 +46,37 @@ struct BoundaryConditionEnums_t; /// \brief This is a function to set the velocity all directions to a value /// /// \param Mesh object -/// \param Boundary condition enums to select options +/// \param Boundary condition enums to select options /// \param Boundary condition global variables array /// \param Boundary condition state variables array /// \param Node velocity /// \param Time of the simulation /// \param Boundary global index for the surface node -/// \param Boundary set local id +/// \param Boundary set local id /// ///////////////////////////////////////////////////////////////////////////// -namespace ZeroVelocityBC { - - // add an enum for boundary statevars and global vars - - - KOKKOS_FUNCTION - static void velocity(const Mesh_t& mesh, - const DCArrayKokkos & BoundaryConditionEnums, - const DCArrayKokkos& bc_global_vars, - const DCArrayKokkos& bc_state_vars, - const DCArrayKokkos& node_vel, - const double time_value, - const size_t bdy_node_gid, - const size_t bdy_set) - { - - // Set velocity to zero in all directions - for (size_t dim = 0; dim < mesh.num_dims; dim++) { - node_vel(1, bdy_node_gid, dim) = 0.0; - } +namespace ZeroVelocityBC +{ +// add an enum for boundary statevars and global vars - return; - } // end func +KOKKOS_FUNCTION +static void velocity(const Mesh_t& mesh, + const DCArrayKokkos& BoundaryConditionEnums, + const DCArrayKokkos& bc_global_vars, + const DCArrayKokkos& bc_state_vars, + const DCArrayKokkos& node_vel, + const double time_value, + const size_t rk_stage, + const size_t bdy_node_gid, + const size_t bdy_set) +{ + // Set velocity to zero in all directions + for (size_t dim = 0; dim < mesh.num_dims; dim++) { + node_vel(1, bdy_node_gid, dim) = 0.0; + } + return; +} // end func } // end namespace #endif // end Header Guard \ No newline at end of file diff --git a/single-node-refactor/src/common/boundary_conditions.h b/single-node-refactor/src/common/boundary_conditions.h index 4e98d14a9..2f9d25aa3 100644 --- a/single-node-refactor/src/common/boundary_conditions.h +++ b/single-node-refactor/src/common/boundary_conditions.h @@ -42,40 +42,38 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include - - - namespace boundary_conditions { // supported geometry for boundary conditions enum BdyTag { - xPlane = 0, // tag an x-plane - yPlane = 1, // tag an y-plane - zPlane = 2, // tag an z-plane + xPlane = 0, // tag an x-plane + yPlane = 1, // tag an y-plane + zPlane = 2, // tag an z-plane cylinder = 3, // tag an cylindrical surface sphere = 4 // tag a spherical surface - // read_file = 5 // read from a file currently unsupported }; +// future options +// read_file = 5 // read from a file currently unsupported // types of boundary conditions // WARNING: Currently only velocity is supported enum BCHydro -{ - noVelocityBC = 0, - constantVelocityBC = 1, - timeVaringVelocityBC = 2, - reflectedVelocityBC = 3, - zeroVelocityBC = 4, - userDefinedVelocityBC = 5, - pistonVelocityBC = 6 +{ + noVelocityBC = 0, + constantVelocityBC = 1, + timeVaringVelocityBC = 2, + reflectedVelocityBC = 3, + zeroVelocityBC = 4, + userDefinedVelocityBC = 5, + pistonVelocityBC = 6 }; // future options: // displacement = 6, // acceleration = 7, // pressure = 8, // temperature = 9, -// contact = 10 +// contact = 10 enum BCFcnLocation { @@ -90,10 +88,8 @@ enum BCDirection yDir = 1, zDir = 2 }; - } // end of boundary conditions namespace - static std::map bc_geometry_map { { "x_plane", boundary_conditions::xPlane }, @@ -101,18 +97,19 @@ static std::map bc_geometry_map { "z_plane", boundary_conditions::zPlane }, { "cylinder", boundary_conditions::cylinder }, { "sphere", boundary_conditions::sphere } - // { "read_file", boundary_conditions::read_file } }; +// future options +// { "read_file", boundary_conditions::read_file } static std::map bc_type_map { - { "no_velocity", boundary_conditions::noVelocityBC }, - { "constant_velocity", boundary_conditions::constantVelocityBC }, - { "velocity_vs_time", boundary_conditions::timeVaringVelocityBC }, - { "reflected_velocity", boundary_conditions::reflectedVelocityBC }, - { "zero_velocity", boundary_conditions::zeroVelocityBC }, - { "user_defined_velocity", boundary_conditions::userDefinedVelocityBC}, - { "piston_velocity", boundary_conditions::pistonVelocityBC } + { "no_velocity", boundary_conditions::noVelocityBC }, + { "constant_velocity", boundary_conditions::constantVelocityBC }, + { "velocity_vs_time", boundary_conditions::timeVaringVelocityBC }, + { "reflected_velocity", boundary_conditions::reflectedVelocityBC }, + { "zero_velocity", boundary_conditions::zeroVelocityBC }, + { "user_defined_velocity", boundary_conditions::userDefinedVelocityBC }, + { "piston_velocity", boundary_conditions::pistonVelocityBC } }; // future options // { "displacement", boundary_conditions::displacement }, @@ -134,8 +131,6 @@ static std::map bc_location_map { "device", boundary_conditions::device } }; - - ///////////////////////////////////////////////////////////////////////////// /// /// \struct BoundaryConditionSetup_t @@ -145,14 +140,11 @@ static std::map bc_location_map ///////////////////////////////////////////////////////////////////////////// struct BoundaryConditionSetup_t { - boundary_conditions::BdyTag geometry; ///< Geometry boundary condition is applied to, e.g., sphere, plane - double origin[3] = {0.0, 0.0, 0.0}; ///< origin of surface being tagged, e.g., sphere or cylinder surface - double value = 0.0; ///< value = position, radius, etc. defining the geometric shape - + boundary_conditions::BdyTag geometry; ///< Geometry boundary condition is applied to, e.g., sphere, plane + double origin[3] = { 0.0, 0.0, 0.0 }; ///< origin of surface being tagged, e.g., sphere or cylinder surface + double value = 0.0; ///< value = position, radius, etc. defining the geometric shape }; // end boundary condition setup - - ///////////////////////////////////////////////////////////////////////////// /// /// \struct BoundaryConditionEnums_t @@ -162,18 +154,15 @@ struct BoundaryConditionSetup_t ///////////////////////////////////////////////////////////////////////////// struct BoundaryConditionEnums_t { - solver_input::method solver = solver_input::NONE; ///< Numerical solver method boundary_conditions::BCHydro BCHydroType; ///< Type of boundary condition boundary_conditions::BCDirection Direction; ///< Boundary condition direction - boundary_conditions::BCFcnLocation Location=boundary_conditions::device; // host or device BC function - + boundary_conditions::BCFcnLocation Location = boundary_conditions::device; // host or device BC function }; // end boundary condition enums - ///////////////////////////////////////////////////////////////////////////// /// /// \struct BoundaryConditionFunctions_t @@ -183,24 +172,20 @@ struct BoundaryConditionEnums_t ///////////////////////////////////////////////////////////////////////////// struct BoundaryConditionFunctions_t { - - // function pointer for velocity BC's - void (*velocity) (const Mesh_t& mesh, - const DCArrayKokkos & BoundaryConditionEnums, - const DCArrayKokkos& bc_global_vars, - const DCArrayKokkos& bc_state_vars, - const DCArrayKokkos& node_vel, - const double time_value, - const size_t bdy_node_gid, - const size_t bdy_set) = NULL; - - // add function pointer for pressure BC's - - + // function pointer for velocity BC's + void (*velocity) (const Mesh_t& mesh, + const DCArrayKokkos& BoundaryConditionEnums, + const DCArrayKokkos& bc_global_vars, + const DCArrayKokkos& bc_state_vars, + const DCArrayKokkos& node_vel, + const double time_value, + const size_t rk_stage, + const size_t bdy_node_gid, + const size_t bdy_set) = NULL; + + // TODO: add function pointer for pressure BC's and definitions }; // end boundary condition fcns - - ///////////////////////////////////////////////////////////////////////////// /// /// \struct BoundaryCondition_t @@ -212,26 +197,23 @@ struct BoundaryCondition_t { size_t num_bcs; // the number of boundary conditions - CArrayKokkos BoundaryConditionSetup; // vars to setup the bcs + CArrayKokkos BoundaryConditionSetup; // vars to setup the bcs // device functions and associated data - CArrayKokkos BoundaryConditionFunctions; // struct with function pointers + CArrayKokkos BoundaryConditionFunctions; // struct with function pointers // note: host functions are launched via enums // enums to select BC capabilities, some enums are needed on the host side and device side - DCArrayKokkos BoundaryConditionEnums; + DCArrayKokkos BoundaryConditionEnums; - // global vars for boundary condition models + // global variables for boundary condition models DCArrayKokkos bc_global_vars; // it is only 4 values, so ragged doesn't make sense now - // statevars for boundary conditions + // state variables for boundary conditions DCArrayKokkos bc_state_vars; - }; // end boundary conditions - - // ------------------------------------- // valid inputs for boundary conditions // ------------------------------------- diff --git a/single-node-refactor/src/common/geometry_new.h b/single-node-refactor/src/common/geometry_new.h index 5740d659a..03d849cd7 100644 --- a/single-node-refactor/src/common/geometry_new.h +++ b/single-node-refactor/src/common/geometry_new.h @@ -94,172 +94,172 @@ void get_bmatrix(const ViewCArrayKokkos& B_matrix, double twelth = 1. / 12.; B_matrix(0, 0) = (+y(1) * (-z(2) - z(3) + z(4) + z(5) ) - + y(2) * (+z(1) - z(3) ) - + y(3) * (+z(1) + z(2) - z(4) - z(7) ) - + y(4) * (-z(1) + z(3) - z(5) + z(7) ) - + y(5) * (-z(1) + z(4) ) - + y(7) * (+z(3) - z(4) ) ) * twelth; + + y(2) * (+z(1) - z(3) ) + + y(3) * (+z(1) + z(2) - z(4) - z(7) ) + + y(4) * (-z(1) + z(3) - z(5) + z(7) ) + + y(5) * (-z(1) + z(4) ) + + y(7) * (+z(3) - z(4) ) ) * twelth; B_matrix(1, 0) = (+y(0) * (+z(2) + z(3) - z(4) - z(5) ) - + y(2) * (-z(0) - z(3) + z(5) + z(6) ) - + y(3) * (-z(0) + z(2) ) - + y(4) * (+z(0) - z(5) ) - + y(5) * (+z(0) - z(2) + z(4) - z(6) ) - + y(6) * (-z(2) + z(5) ) ) * twelth; + + y(2) * (-z(0) - z(3) + z(5) + z(6) ) + + y(3) * (-z(0) + z(2) ) + + y(4) * (+z(0) - z(5) ) + + y(5) * (+z(0) - z(2) + z(4) - z(6) ) + + y(6) * (-z(2) + z(5) ) ) * twelth; B_matrix(2, 0) = (+y(0) * (-z(1) + z(3) ) - + y(1) * (+z(0) + z(3) - z(5) - z(6) ) - + y(3) * (-z(0) - z(1) + z(6) + z(7) ) - + y(5) * (+z(1) - z(6) ) - + y(6) * (+z(1) - z(3) + z(5) - z(7) ) - + y(7) * (-z(3) + z(6) ) ) * twelth; + + y(1) * (+z(0) + z(3) - z(5) - z(6) ) + + y(3) * (-z(0) - z(1) + z(6) + z(7) ) + + y(5) * (+z(1) - z(6) ) + + y(6) * (+z(1) - z(3) + z(5) - z(7) ) + + y(7) * (-z(3) + z(6) ) ) * twelth; B_matrix(3, 0) = (+y(0) * (-z(1) - z(2) + z(4) + z(7) ) - + y(1) * (+z(0) - z(2) ) - + y(2) * (+z(0) + z(1) - z(6) - z(7) ) - + y(4) * (-z(0) + z(7) ) - + y(6) * (+z(2) - z(7) ) - + y(7) * (-z(0) + z(2) - z(4) + z(6) ) ) * twelth; + + y(1) * (+z(0) - z(2) ) + + y(2) * (+z(0) + z(1) - z(6) - z(7) ) + + y(4) * (-z(0) + z(7) ) + + y(6) * (+z(2) - z(7) ) + + y(7) * (-z(0) + z(2) - z(4) + z(6) ) ) * twelth; B_matrix(4, 0) = (+y(0) * (+z(1) - z(3) + z(5) - z(7) ) - + y(1) * (-z(0) + z(5) ) - + y(3) * (+z(0) - z(7) ) - + y(5) * (-z(0) - z(1) + z(6) + z(7) ) - + y(6) * (-z(5) + z(7) ) - + y(7) * (+z(0) + z(3) - z(5) - z(6) ) ) * twelth; + + y(1) * (-z(0) + z(5) ) + + y(3) * (+z(0) - z(7) ) + + y(5) * (-z(0) - z(1) + z(6) + z(7) ) + + y(6) * (-z(5) + z(7) ) + + y(7) * (+z(0) + z(3) - z(5) - z(6) ) ) * twelth; B_matrix(5, 0) = (+y(0) * (+z(1) - z(4) ) - + y(1) * (-z(0) + z(2) - z(4) + z(6) ) - + y(2) * (-z(1) + z(6) ) - + y(4) * (+z(0) + z(1) - z(6) - z(7) ) - + y(6) * (-z(1) - z(2) + z(4) + z(7) ) - + y(7) * (+z(4) - z(6) ) ) * twelth; + + y(1) * (-z(0) + z(2) - z(4) + z(6) ) + + y(2) * (-z(1) + z(6) ) + + y(4) * (+z(0) + z(1) - z(6) - z(7) ) + + y(6) * (-z(1) - z(2) + z(4) + z(7) ) + + y(7) * (+z(4) - z(6) ) ) * twelth; B_matrix(6, 0) = (+y(1) * (+z(2) - z(5) ) - + y(2) * (-z(1) + z(3) - z(5) + z(7) ) - + y(3) * (-z(2) + z(7) ) - + y(4) * (+z(5) - z(7) ) - + y(5) * (+z(1) + z(2) - z(4) - z(7) ) - + y(7) * (-z(2) - z(3) + z(4) + z(5) ) ) * twelth; + + y(2) * (-z(1) + z(3) - z(5) + z(7) ) + + y(3) * (-z(2) + z(7) ) + + y(4) * (+z(5) - z(7) ) + + y(5) * (+z(1) + z(2) - z(4) - z(7) ) + + y(7) * (-z(2) - z(3) + z(4) + z(5) ) ) * twelth; B_matrix(7, 0) = (+y(0) * (-z(3) + z(4) ) - + y(2) * (+z(3) - z(6) ) - + y(3) * (+z(0) - z(2) + z(4) - z(6) ) - + y(4) * (-z(0) - z(3) + z(5) + z(6) ) - + y(5) * (-z(4) + z(6) ) - + y(6) * (+z(2) + z(3) - z(4) - z(5) ) ) * twelth; + + y(2) * (+z(3) - z(6) ) + + y(3) * (+z(0) - z(2) + z(4) - z(6) ) + + y(4) * (-z(0) - z(3) + z(5) + z(6) ) + + y(5) * (-z(4) + z(6) ) + + y(6) * (+z(2) + z(3) - z(4) - z(5) ) ) * twelth; B_matrix(0, 1) = (+z(1) * (-x(2) - x(3) + x(4) + x(5) ) - + z(2) * (+x(1) - x(3) ) - + z(3) * (+x(1) + x(2) - x(4) - x(7) ) - + z(4) * (-x(1) + x(3) - x(5) + x(7) ) - + z(5) * (-x(1) + x(4) ) - + z(7) * (+x(3) - x(4) ) ) * twelth; + + z(2) * (+x(1) - x(3) ) + + z(3) * (+x(1) + x(2) - x(4) - x(7) ) + + z(4) * (-x(1) + x(3) - x(5) + x(7) ) + + z(5) * (-x(1) + x(4) ) + + z(7) * (+x(3) - x(4) ) ) * twelth; B_matrix(1, 1) = (+z(0) * (+x(2) + x(3) - x(4) - x(5) ) - + z(2) * (-x(0) - x(3) + x(5) + x(6) ) - + z(3) * (-x(0) + x(2) ) - + z(4) * (+x(0) - x(5) ) - + z(5) * (+x(0) - x(2) + x(4) - x(6) ) - + z(6) * (-x(2) + x(5) ) ) * twelth; + + z(2) * (-x(0) - x(3) + x(5) + x(6) ) + + z(3) * (-x(0) + x(2) ) + + z(4) * (+x(0) - x(5) ) + + z(5) * (+x(0) - x(2) + x(4) - x(6) ) + + z(6) * (-x(2) + x(5) ) ) * twelth; B_matrix(2, 1) = (+z(0) * (-x(1) + x(3) ) - + z(1) * (+x(0) + x(3) - x(5) - x(6) ) - + z(3) * (-x(0) - x(1) + x(6) + x(7) ) - + z(5) * (+x(1) - x(6) ) - + z(6) * (+x(1) - x(3) + x(5) - x(7) ) - + z(7) * (-x(3) + x(6) ) ) * twelth; + + z(1) * (+x(0) + x(3) - x(5) - x(6) ) + + z(3) * (-x(0) - x(1) + x(6) + x(7) ) + + z(5) * (+x(1) - x(6) ) + + z(6) * (+x(1) - x(3) + x(5) - x(7) ) + + z(7) * (-x(3) + x(6) ) ) * twelth; B_matrix(3, 1) = (+z(0) * (-x(1) - x(2) + x(4) + x(7) ) - + z(1) * (+x(0) - x(2) ) - + z(2) * (+x(0) + x(1) - x(6) - x(7) ) - + z(4) * (-x(0) + x(7) ) - + z(6) * (+x(2) - x(7) ) - + z(7) * (-x(0) + x(2) - x(4) + x(6) ) ) * twelth; + + z(1) * (+x(0) - x(2) ) + + z(2) * (+x(0) + x(1) - x(6) - x(7) ) + + z(4) * (-x(0) + x(7) ) + + z(6) * (+x(2) - x(7) ) + + z(7) * (-x(0) + x(2) - x(4) + x(6) ) ) * twelth; B_matrix(4, 1) = (+z(0) * (+x(1) - x(3) + x(5) - x(7) ) - + z(1) * (-x(0) + x(5) ) - + z(3) * (+x(0) - x(7) ) - + z(5) * (-x(0) - x(1) + x(6) + x(7) ) - + z(6) * (-x(5) + x(7) ) - + z(7) * (+x(0) + x(3) - x(5) - x(6) ) ) * twelth; + + z(1) * (-x(0) + x(5) ) + + z(3) * (+x(0) - x(7) ) + + z(5) * (-x(0) - x(1) + x(6) + x(7) ) + + z(6) * (-x(5) + x(7) ) + + z(7) * (+x(0) + x(3) - x(5) - x(6) ) ) * twelth; B_matrix(5, 1) = (+z(0) * (+x(1) - x(4) ) - + z(1) * (-x(0) + x(2) - x(4) + x(6) ) - + z(2) * (-x(1) + x(6) ) - + z(4) * (+x(0) + x(1) - x(6) - x(7) ) - + z(6) * (-x(1) - x(2) + x(4) + x(7) ) - + z(7) * (+x(4) - x(6) ) ) * twelth; + + z(1) * (-x(0) + x(2) - x(4) + x(6) ) + + z(2) * (-x(1) + x(6) ) + + z(4) * (+x(0) + x(1) - x(6) - x(7) ) + + z(6) * (-x(1) - x(2) + x(4) + x(7) ) + + z(7) * (+x(4) - x(6) ) ) * twelth; B_matrix(6, 1) = (+z(1) * (+x(2) - x(5) ) - + z(2) * (-x(1) + x(3) - x(5) + x(7) ) - + z(3) * (-x(2) + x(7) ) - + z(4) * (+x(5) - x(7) ) - + z(5) * (+x(1) + x(2) - x(4) - x(7) ) - + z(7) * (-x(2) - x(3) + x(4) + x(5) ) ) * twelth; + + z(2) * (-x(1) + x(3) - x(5) + x(7) ) + + z(3) * (-x(2) + x(7) ) + + z(4) * (+x(5) - x(7) ) + + z(5) * (+x(1) + x(2) - x(4) - x(7) ) + + z(7) * (-x(2) - x(3) + x(4) + x(5) ) ) * twelth; B_matrix(7, 1) = (+z(0) * (-x(3) + x(4) ) - + z(2) * (+x(3) - x(6) ) - + z(3) * (+x(0) - x(2) + x(4) - x(6) ) - + z(4) * (-x(0) - x(3) + x(5) + x(6) ) - + z(5) * (-x(4) + x(6) ) - + z(6) * (+x(2) + x(3) - x(4) - x(5) ) ) * twelth; + + z(2) * (+x(3) - x(6) ) + + z(3) * (+x(0) - x(2) + x(4) - x(6) ) + + z(4) * (-x(0) - x(3) + x(5) + x(6) ) + + z(5) * (-x(4) + x(6) ) + + z(6) * (+x(2) + x(3) - x(4) - x(5) ) ) * twelth; B_matrix(0, 2) = (+x(1) * (-y(2) - y(3) + y(4) + y(5) ) - + x(2) * (+y(1) - y(3) ) - + x(3) * (+y(1) + y(2) - y(4) - y(7) ) - + x(4) * (-y(1) + y(3) - y(5) + y(7) ) - + x(5) * (-y(1) + y(4) ) - + x(7) * (+y(3) - y(4) ) ) * twelth; + + x(2) * (+y(1) - y(3) ) + + x(3) * (+y(1) + y(2) - y(4) - y(7) ) + + x(4) * (-y(1) + y(3) - y(5) + y(7) ) + + x(5) * (-y(1) + y(4) ) + + x(7) * (+y(3) - y(4) ) ) * twelth; B_matrix(1, 2) = (+x(0) * (+y(2) + y(3) - y(4) - y(5) ) - + x(2) * (-y(0) - y(3) + y(5) + y(6) ) - + x(3) * (-y(0) + y(2) ) - + x(4) * (+y(0) - y(5) ) - + x(5) * (+y(0) - y(2) + y(4) - y(6) ) - + x(6) * (-y(2) + y(5) ) ) * twelth; + + x(2) * (-y(0) - y(3) + y(5) + y(6) ) + + x(3) * (-y(0) + y(2) ) + + x(4) * (+y(0) - y(5) ) + + x(5) * (+y(0) - y(2) + y(4) - y(6) ) + + x(6) * (-y(2) + y(5) ) ) * twelth; B_matrix(2, 2) = (+x(0) * (-y(1) + y(3) ) - + x(1) * (+y(0) + y(3) - y(5) - y(6) ) - + x(3) * (-y(0) - y(1) + y(6) + y(7) ) - + x(5) * (+y(1) - y(6) ) - + x(6) * (+y(1) - y(3) + y(5) - y(7) ) - + x(7) * (-y(3) + y(6) ) ) * twelth; + + x(1) * (+y(0) + y(3) - y(5) - y(6) ) + + x(3) * (-y(0) - y(1) + y(6) + y(7) ) + + x(5) * (+y(1) - y(6) ) + + x(6) * (+y(1) - y(3) + y(5) - y(7) ) + + x(7) * (-y(3) + y(6) ) ) * twelth; B_matrix(3, 2) = (+x(0) * (-y(1) - y(2) + y(4) + y(7) ) - + x(1) * (+y(0) - y(2) ) - + x(2) * (+y(0) + y(1) - y(6) - y(7) ) - + x(4) * (-y(0) + y(7) ) - + x(6) * (+y(2) - y(7) ) - + x(7) * (-y(0) + y(2) - y(4) + y(6) ) ) * twelth; + + x(1) * (+y(0) - y(2) ) + + x(2) * (+y(0) + y(1) - y(6) - y(7) ) + + x(4) * (-y(0) + y(7) ) + + x(6) * (+y(2) - y(7) ) + + x(7) * (-y(0) + y(2) - y(4) + y(6) ) ) * twelth; B_matrix(4, 2) = (+x(0) * (+y(1) - y(3) + y(5) - y(7) ) - + x(1) * (-y(0) + y(5) ) - + x(3) * (+y(0) - y(7) ) - + x(5) * (-y(0) - y(1) + y(6) + y(7) ) - + x(6) * (-y(5) + y(7) ) - + x(7) * (+y(0) + y(3) - y(5) - y(6) ) ) * twelth; + + x(1) * (-y(0) + y(5) ) + + x(3) * (+y(0) - y(7) ) + + x(5) * (-y(0) - y(1) + y(6) + y(7) ) + + x(6) * (-y(5) + y(7) ) + + x(7) * (+y(0) + y(3) - y(5) - y(6) ) ) * twelth; B_matrix(5, 2) = (+x(0) * (+y(1) - y(4) ) - + x(1) * (-y(0) + y(2) - y(4) + y(6) ) - + x(2) * (-y(1) + y(6) ) - + x(4) * (+y(0) + y(1) - y(6) - y(7) ) - + x(6) * (-y(1) - y(2) + y(4) + y(7) ) - + x(7) * (+y(4) - y(6) ) ) * twelth; + + x(1) * (-y(0) + y(2) - y(4) + y(6) ) + + x(2) * (-y(1) + y(6) ) + + x(4) * (+y(0) + y(1) - y(6) - y(7) ) + + x(6) * (-y(1) - y(2) + y(4) + y(7) ) + + x(7) * (+y(4) - y(6) ) ) * twelth; B_matrix(6, 2) = (+x(1) * (+y(2) - y(5) ) - + x(2) * (-y(1) + y(3) - y(5) + y(7) ) - + x(3) * (-y(2) + y(7) ) - + x(4) * (+y(5) - y(7) ) - + x(5) * (+y(1) + y(2) - y(4) - y(7) ) - + x(7) * (-y(2) - y(3) + y(4) + y(5) ) ) * twelth; + + x(2) * (-y(1) + y(3) - y(5) + y(7) ) + + x(3) * (-y(2) + y(7) ) + + x(4) * (+y(5) - y(7) ) + + x(5) * (+y(1) + y(2) - y(4) - y(7) ) + + x(7) * (-y(2) - y(3) + y(4) + y(5) ) ) * twelth; B_matrix(7, 2) = (+x(0) * (-y(3) + y(4) ) - + x(2) * (+y(3) - y(6) ) - + x(3) * (+y(0) - y(2) + y(4) - y(6) ) - + x(4) * (-y(0) - y(3) + y(5) + y(6) ) - + x(5) * (-y(4) + y(6) ) - + x(6) * (+y(2) + y(3) - y(4) - y(5) ) ) * twelth; + + x(2) * (+y(3) - y(6) ) + + x(3) * (+y(0) - y(2) + y(4) - y(6) ) + + x(4) * (-y(0) - y(3) + y(5) + y(6) ) + + x(5) * (-y(4) + y(6) ) + + x(6) * (+y(2) + y(3) - y(4) - y(5) ) ) * twelth; } // end subroutine ///////////////////////////////////////////////////////////////////////////// @@ -302,7 +302,7 @@ void get_vol_quad(const DCArrayKokkos& elem_vol, */ elem_vol(elem_gid) = ( (y(2) + y(3) + y(0)) * ((y(2) - y(3)) * (x(0) - x(3)) - (y(0) - y(3)) * (x(2) - x(3)) ) - + (y(0) + y(1) + y(2)) * ((y(0) - y(1)) * (x(2) - x(1)) - (y(2) - y(1)) * (x(0) - x(1))) ) / 6.0; + + (y(0) + y(1) + y(2)) * ((y(0) - y(1)) * (x(2) - x(1)) - (y(2) - y(1)) * (x(0) - x(1))) ) / 6.0; return; } // end subroutine @@ -348,14 +348,14 @@ void get_vol_hex(const DCArrayKokkos& elem_vol, // element volume elem_vol(elem_gid) = (x(1) * (y(3) * (-z(0) + z(2)) + y(4) * (z(0) - z(5)) + y(0) * (z(2) + z(3) - z(4) - z(5)) + y(6) * (-z(2) + z(5)) + y(5) * (z(0) - z(2) + z(4) - z(6)) + y(2) * (-z(0) - z(3) + z(5) + z(6))) + - x(7) * (y(0) * (-z(3) + z(4)) + y(6) * (z(2) + z(3) - z(4) - z(5)) + y(2) * (z(3) - z(6)) + y(3) * (z(0) - z(2) + z(4) - z(6)) + y(5) * (-z(4) + z(6)) + y(4) * (-z(0) - z(3) + z(5) + z(6))) + - x(3) * (y(1) * (z(0) - z(2)) + y(7) * (-z(0) + z(2) - z(4) + z(6)) + y(6) * (z(2) - z(7)) + y(2) * (z(0) + z(1) - z(6) - z(7)) + y(4) * (-z(0) + z(7)) + y(0) * (-z(1) - z(2) + z(4) + z(7))) + - x(5) * (y(0) * (z(1) - z(4)) + y(7) * (z(4) - z(6)) + y(2) * (-z(1) + z(6)) + y(1) * (-z(0) + z(2) - z(4) + z(6)) + y(4) * (z(0) + z(1) - z(6) - z(7)) + y(6) * (-z(1) - z(2) + z(4) + z(7))) + - x(6) * (y(1) * (z(2) - z(5)) + y(7) * (-z(2) - z(3) + z(4) + z(5)) + y(5) * (z(1) + z(2) - z(4) - z(7)) + y(4) * (z(5) - z(7)) + y(3) * (-z(2) + z(7)) + y(2) * (-z(1) + z(3) - z(5) + z(7))) + - x(0) * (y(2) * (z(1) - z(3)) + y(7) * (z(3) - z(4)) + y(5) * (-z(1) + z(4)) + y(1) * (-z(2) - z(3) + z(4) + z(5)) + y(3) * (z(1) + z(2) - z(4) - z(7)) + y(4) * (-z(1) + z(3) - z(5) + z(7))) + - x(2) * (y(0) * (-z(1) + z(3)) + y(5) * (z(1) - z(6)) + y(1) * (z(0) + z(3) - z(5) - z(6)) + y(7) * (-z(3) + z(6)) + y(6) * (z(1) - z(3) + z(5) - z(7)) + y(3) * (-z(0) - z(1) + z(6) + z(7))) + - x(4) * - (y(1) * (-z(0) + z(5)) + y(7) * (z(0) + z(3) - z(5) - z(6)) + y(3) * (z(0) - z(7)) + y(0) * (z(1) - z(3) + z(5) - z(7)) + y(6) * (-z(5) + z(7)) + y(5) * (-z(0) - z(1) + z(6) + z(7)))) * + x(7) * (y(0) * (-z(3) + z(4)) + y(6) * (z(2) + z(3) - z(4) - z(5)) + y(2) * (z(3) - z(6)) + y(3) * (z(0) - z(2) + z(4) - z(6)) + y(5) * (-z(4) + z(6)) + y(4) * (-z(0) - z(3) + z(5) + z(6))) + + x(3) * (y(1) * (z(0) - z(2)) + y(7) * (-z(0) + z(2) - z(4) + z(6)) + y(6) * (z(2) - z(7)) + y(2) * (z(0) + z(1) - z(6) - z(7)) + y(4) * (-z(0) + z(7)) + y(0) * (-z(1) - z(2) + z(4) + z(7))) + + x(5) * (y(0) * (z(1) - z(4)) + y(7) * (z(4) - z(6)) + y(2) * (-z(1) + z(6)) + y(1) * (-z(0) + z(2) - z(4) + z(6)) + y(4) * (z(0) + z(1) - z(6) - z(7)) + y(6) * (-z(1) - z(2) + z(4) + z(7))) + + x(6) * (y(1) * (z(2) - z(5)) + y(7) * (-z(2) - z(3) + z(4) + z(5)) + y(5) * (z(1) + z(2) - z(4) - z(7)) + y(4) * (z(5) - z(7)) + y(3) * (-z(2) + z(7)) + y(2) * (-z(1) + z(3) - z(5) + z(7))) + + x(0) * (y(2) * (z(1) - z(3)) + y(7) * (z(3) - z(4)) + y(5) * (-z(1) + z(4)) + y(1) * (-z(2) - z(3) + z(4) + z(5)) + y(3) * (z(1) + z(2) - z(4) - z(7)) + y(4) * (-z(1) + z(3) - z(5) + z(7))) + + x(2) * (y(0) * (-z(1) + z(3)) + y(5) * (z(1) - z(6)) + y(1) * (z(0) + z(3) - z(5) - z(6)) + y(7) * (-z(3) + z(6)) + y(6) * (z(1) - z(3) + z(5) - z(7)) + y(3) * (-z(0) - z(1) + z(6) + z(7))) + + x(4) * + (y(1) * (-z(0) + z(5)) + y(7) * (z(0) + z(3) - z(5) - z(6)) + y(3) * (z(0) - z(7)) + y(0) * (z(1) - z(3) + z(5) - z(7)) + y(6) * (-z(5) + z(7)) + y(5) * (-z(0) - z(1) + z(6) + z(7)))) * twelth; elem_vol(elem_gid) = fmax(elem_vol(elem_gid), 1.0E-14); diff --git a/single-node-refactor/src/common/material.h b/single-node-refactor/src/common/material.h index c4c628a82..309c37dbb 100644 --- a/single-node-refactor/src/common/material.h +++ b/single-node-refactor/src/common/material.h @@ -38,91 +38,88 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include #include "matar.h" +namespace model +{ +// strength model types +enum StrengthType +{ + noStrengthType = 0, ///< No strength model used + incrementBased = 1, ///< Model evaluation is inline with the time integration + stateBased = 2, ///< Model is based on the state after each stage of the time step +}; +// Specific strength models +enum StrengthModels +{ + noStrengthModel = 0, + userDefinedStrength = 1, +}; -namespace model +// EOS model types +enum EOSType +{ + noEOSType = 0, ///< No EOS used + decoupledEOSType = 1, ///< only an EOS, or an EOS plus deviatoric stress model + coupledEOSType = 2, ///< EOS is part of a full stress tensor evolution model +}; + +// The names of the eos models +enum EOSModels { - // strength model types - enum StrengthType - { - noStrengthType = 0, - incrementBased = 1, ///< Model evaluation is inline with the time integration - stateBased = 2, ///< Model is based on the state after each stage of the time step - }; - - // Specific strength models - enum StrengthModels - { - noStrengthModel = 0, - userDefinedStrength = 1, - }; - - // EOS model types - enum EOSType - { - noEOSType = 0, ///< No EOS used - decoupledEOSType = 1, ///< only an EOS, or an EOS plus deviatoric stress model - coupledEOSType = 2, ///< EOS is part of a full stress tensor evolution model - }; - - // The names of the eos models - enum EOSModels - { - noEOS = 0, ///< no model evaluation - gammaLawGasEOS = 1, ///< gamma law gas - voidEOS = 2, ///< a void material, no sound speed and no pressure - userDefinedEOS = 3, ///< an eos function defined by the user - }; - - // failure models - enum FailureModels - { - noFailure = 0, - brittleFailure = 1, ///< Material fails after exceeding yield stress - ductileFailure = 2, ///< Material grows voids that lead to complete failure - }; - - // erosion model t - enum ErosionModels - { - noErosion = 1, - basicErosion = 2, ///< basic element erosion - }; + noEOS = 0, ///< no model evaluation + gammaLawGasEOS = 1, ///< gamma law gas + voidEOS = 2, ///< a void material, no sound speed and no pressure + userDefinedEOS = 3, ///< an eos function defined by the user +}; + +// failure models +enum FailureModels +{ + noFailure = 0, ///< Material does not fail + brittleFailure = 1, ///< Material fails after exceeding yield stress + ductileFailure = 2, ///< Material grows voids that lead to complete failure +}; +// erosion model t +enum ErosionModels +{ + noErosion = 1, ///< no element erosion + basicErosion = 2, ///< basic element erosion +}; } // end model namespace static std::map strength_type_map { - { "no_strength", model::noStrengthType }, + { "no_strength", model::noStrengthType }, { "increment_based", model::incrementBased }, - { "state_based", model::stateBased }, + { "state_based", model::stateBased }, }; static std::map strength_models_map { - { "no_strength", model::noStrengthModel }, + { "no_strength", model::noStrengthModel }, { "user_defined_strength", model::userDefinedStrength }, }; static std::map eos_type_map { - { "no_eos", model::noEOSType }, - { "coupled", model::coupledEOSType }, + { "no_eos", model::noEOSType }, + { "coupled", model::coupledEOSType }, { "decoupled", model::decoupledEOSType }, }; static std::map eos_models_map { - { "no_eos", model::noEOS }, + { "no_eos", model::noEOS }, { "gamma_law_gas", model::gammaLawGasEOS }, - { "void", model::voidEOS }, - { "user_defined", model::userDefinedEOS }, + { "void", model::voidEOS }, + { "user_defined", model::userDefinedEOS }, }; static std::map erosion_model_map { { "no_erosion", model::noErosion }, - { "basic", model::basicErosion}, + { "basic", model::basicErosion }, }; namespace model_init @@ -135,8 +132,6 @@ enum strength_setup_tag }; } // end of namespace - - ///////////////////////////////////////////////////////////////////////////// /// /// \struct MaterialSetup_t @@ -148,10 +143,8 @@ struct MaterialSetup_t { // setup the strength model via the input file for via a user_setup model_init::strength_setup_tag strength_setup = model_init::input; - }; // end boundary condition setup - ///////////////////////////////////////////////////////////////////////////// /// /// \struct MaterialEnums_t @@ -161,7 +154,6 @@ struct MaterialSetup_t ///////////////////////////////////////////////////////////////////////////// struct MaterialEnums_t { - // -- EOS -- // none, decoupled, or coupled eos model::EOSType EOSType = model::noEOSType; @@ -171,10 +163,8 @@ struct MaterialEnums_t // Erosion model type: none or basis model::ErosionModels ErosionModels = model::noErosion; - }; // end boundary condition enums - ///////////////////////////////////////////////////////////////////////////// /// /// \struct MaterialFunctions_t @@ -191,66 +181,63 @@ struct MaterialFunctions_t // Equation of state (EOS) function pointers void (*calc_pressure)(const DCArrayKokkos& MaterialPoints_pres, - const DCArrayKokkos& MaterialPoints_stress, - const size_t MaterialPoints_lid, - const size_t mat_id, - const DCArrayKokkos& MaterialPoints_state_vars, - const DCArrayKokkos& MaterialPoints_sspd, - const double den, - const double sie, - const RaggedRightArrayKokkos &eos_global_vars) = NULL; + const DCArrayKokkos& MaterialPoints_stress, + const size_t MaterialPoints_lid, + const size_t mat_id, + const DCArrayKokkos& MaterialPoints_state_vars, + const DCArrayKokkos& MaterialPoints_sspd, + const double den, + const double sie, + const RaggedRightArrayKokkos& eos_global_vars) = NULL; void (*calc_sound_speed)(const DCArrayKokkos& MaterialPoints_pres, - const DCArrayKokkos& MaterialPoints_stress, - const size_t MaterialPoints_lid, - const size_t mat_id, - const DCArrayKokkos& MaterialPoints_state_vars, - const DCArrayKokkos& MaterialPoints_sspd, - const double den, - const double sie, - const RaggedRightArrayKokkos &eos_global_vars) = NULL; - + const DCArrayKokkos& MaterialPoints_stress, + const size_t MaterialPoints_lid, + const size_t mat_id, + const DCArrayKokkos& MaterialPoints_state_vars, + const DCArrayKokkos& MaterialPoints_sspd, + const double den, + const double sie, + const RaggedRightArrayKokkos& eos_global_vars) = NULL; // -- Strength -- // Material strength model function pointers void (*calc_stress)(const DCArrayKokkos& MaterialPoints_pres, - const DCArrayKokkos& MaterialPoints_stress, - const size_t MaterialPoints_lid, - const size_t mat_id, - const DCArrayKokkos& MaterialPoints_state_vars, - const DCArrayKokkos& MaterialPoints_sspd, - const double den, - const double sie, - const ViewCArrayKokkos& vel_grad, - const ViewCArrayKokkos& elem_node_gids, - const DCArrayKokkos& node_coords, - const DCArrayKokkos& node_vel, - const double vol, - const double dt, - const double rk_alpha) = NULL; - + const DCArrayKokkos& MaterialPoints_stress, + const size_t MaterialPoints_lid, + const size_t mat_id, + const DCArrayKokkos& MaterialPoints_state_vars, + const DCArrayKokkos& MaterialPoints_sspd, + const double den, + const double sie, + const ViewCArrayKokkos& vel_grad, + const ViewCArrayKokkos& elem_node_gids, + const DCArrayKokkos& node_coords, + const DCArrayKokkos& node_vel, + const double vol, + const double dt, + const double rk_alpha) = NULL; // -- Erosion -- double erode_tension_val; ///< tension threshold to initiate erosion double erode_density_val; ///< density threshold to initiate erosion // above should be removed, they go in CArrayKokkos erosion_global_vars; - void (*erode)(const DCArrayKokkos& MaterialPoints_eroded, - const DCArrayKokkos& MaterialPoints_stress, - const double MaterialPoint_pres, - const double MaterialPoint_den, - const double MaterialPoint_sie, - const double MaterialPoint_sspd, - const double erode_tension_val, - const double erode_density_val, - const size_t mat_point_lid) = NULL; + void (*erode)(const DCArrayKokkos& MaterialPoints_eroded, + const DCArrayKokkos& MaterialPoints_stress, + const double MaterialPoint_pres, + const double MaterialPoint_den, + const double MaterialPoint_sie, + const double MaterialPoint_sspd, + const double erode_tension_val, + const double erode_density_val, + const size_t mat_point_lid) = NULL; double q1 = 1.0; ///< acoustic coefficient in Riemann solver for compression double q1ex = 1.3333; ///< acoustic coefficient in Riemann solver for expansion double q2 = 1.0; ///< linear coefficient in Riemann solver for compression double q2ex = 1.3333; ///< linear coefficient in Riemann solver for expansion - }; // end material_t ///////////////////////////////////////////////////////////////////////////// @@ -258,22 +245,22 @@ struct MaterialFunctions_t /// \struct material_t /// /// \brief A container to hold boundary condition information. This holds -/// material functions, and model state, parameters, and values +/// material functions, and model state, parameters, and values /// ///////////////////////////////////////////////////////////////////////////// -struct Material_t{ - +struct Material_t +{ size_t num_mats; // num materials in the problem - DCArrayKokkos MaterialSetup; // vars to setup and initialize the material + DCArrayKokkos MaterialSetup; // vars to setup and initialize the material // device functions and associated data - CArrayKokkos MaterialFunctions; // struct with function pointers + CArrayKokkos MaterialFunctions; // struct with function pointers // note: host functions are launched via enums // enums to select model options, some enums are needed on the host side and device side - DCArrayKokkos MaterialEnums; + DCArrayKokkos MaterialEnums; // --- material physics model variables --- @@ -284,7 +271,7 @@ struct Material_t{ RaggedRightArrayKokkos strength_global_vars; ///< Array of global variables for the strength model CArrayKokkos num_strength_global_vars; - + RaggedRightArrayKokkos failure_global_vars; ///< Array of global variables for the failure model RaggedRightArrayKokkos erosion_global_vars; ///< Array of global variables for the erosion model @@ -292,11 +279,8 @@ struct Material_t{ RaggedRightArrayKokkos art_viscosity_global_vars; ///< Array holding q1, q1ex, q2, ... // ... - }; // end MaterialModelVars_t - - // ---------------------------------- // valid inputs for material options // ---------------------------------- @@ -338,19 +322,16 @@ static std::vector material_solid_dynamics_required_inps "strength_model_type" }; - static std::vector material_solid_statics_required_inps { "id", "strength_global_vars" }; - static std::vector material_thermal_statics_required_inps { "id", "thermal_global_vars" }; - #endif // end Header Guard \ No newline at end of file diff --git a/single-node-refactor/src/common/mesh.h b/single-node-refactor/src/common/mesh.h index 3e71b2b11..7f5c3d293 100644 --- a/single-node-refactor/src/common/mesh.h +++ b/single-node-refactor/src/common/mesh.h @@ -43,7 +43,6 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. using namespace mtr; - namespace mesh_init { // element mesh types @@ -147,7 +146,7 @@ struct legendre_in_elem_t }; legendre_in_elem_t(const size_t num_leg_gauss_in_elem_inp) { - this->num_leg_gauss_in_elem_ = num_leg_gauss_in_elem_inp; + this->num_leg_gauss_in_elem_ = num_leg_gauss_in_elem_inp; }; // return global gauss index for given local gauss index in an element @@ -174,7 +173,7 @@ struct lobatto_in_elem_t }; lobatto_in_elem_t(const size_t num_lob_gauss_in_elem_inp) { - this->num_lob_gauss_in_elem_ = num_lob_gauss_in_elem_inp; + this->num_lob_gauss_in_elem_ = num_lob_gauss_in_elem_inp; }; // return global gauss index for given local gauss index in an element @@ -1532,12 +1531,12 @@ struct Mesh_t KOKKOS_FUNCTION void decompose_vel_grad(ViewCArrayKokkos& D_tensor, - ViewCArrayKokkos& W_tensor, - const ViewCArrayKokkos& vel_grad, - const ViewCArrayKokkos& elem_node_gids, - const size_t elem_gid, - const DCArrayKokkos& node_coords, - const DCArrayKokkos& node_vel, - const double vol); + ViewCArrayKokkos& W_tensor, + const ViewCArrayKokkos& vel_grad, + const ViewCArrayKokkos& elem_node_gids, + const size_t elem_gid, + const DCArrayKokkos& node_coords, + const DCArrayKokkos& node_vel, + const double vol); #endif \ No newline at end of file diff --git a/single-node-refactor/src/common/mesh_inputs.h b/single-node-refactor/src/common/mesh_inputs.h index eb1880fbb..053da9ec3 100644 --- a/single-node-refactor/src/common/mesh_inputs.h +++ b/single-node-refactor/src/common/mesh_inputs.h @@ -43,16 +43,16 @@ namespace mesh_input // source of the mesh enum source { - none = 0, - generate = 1, // Create the mesh using the mesh builder - file = 2, // Read in the mesh from a file + none = 0, ///< No source given, should fail + generate = 1, ///< Create the mesh using the mesh builder + file = 2, ///< Read in the mesh from a file }; // type of mesh to generate if source = generate enum type { - Box = 0, // Create the mesh using the mesh builder - Cylinder = 1, // Read in the mesh from a file + Box = 0, ///< Create the mesh using the mesh builder + Cylinder = 1, ///< Read in the mesh from a file }; } // end of namespace @@ -82,9 +82,9 @@ struct mesh_input_t std::string file_path = ""; ///< Absolute path of mesh file mesh_input::type type; ///< Type of mesh to generate if - double origin[3] = {0.0, 0.0, 0.0}; ///< Mesh origin for generating a mesh - double length[3] = {0.0, 0.0, 0.0}; ///< x,y,z length of generated mesh - size_t num_elems[3] = {1, 1, 1}; ///< Number of elements along x,y, z for generating a mesh. + double origin[3] = { 0.0, 0.0, 0.0 }; ///< Mesh origin for generating a mesh + double length[3] = { 0.0, 0.0, 0.0 }; ///< x,y,z length of generated mesh + size_t num_elems[3] = { 1, 1, 1 }; ///< Number of elements along x,y, z for generating a mesh. size_t p_order = 1; diff --git a/single-node-refactor/src/common/mesh_io.h b/single-node-refactor/src/common/mesh_io.h index 580e84dca..6a14fb9dc 100644 --- a/single-node-refactor/src/common/mesh_io.h +++ b/single-node-refactor/src/common/mesh_io.h @@ -45,7 +45,6 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include #include - ///////////////////////////////////////////////////////////////////////////// /// /// \fn get_id @@ -68,7 +67,6 @@ inline int get_id(int i, int j, int k, int num_i, int num_j) return i + j * num_i + k * num_i * num_j; } - ///////////////////////////////////////////////////////////////////////////// /// /// \fn get_id_device @@ -92,8 +90,6 @@ int get_id_device(int i, int j, int k, int num_i, int num_j) return i + j * num_i + k * num_i * num_j; } - - ///////////////////////////////////////////////////////////////////////////// /// /// \class MeshReader @@ -138,20 +134,16 @@ class MeshReader /// \brief Read mesh from file /// /// \param Simulation mesh - /// \param Element state struct - /// \param Node state struct - /// \param Corner state struct + /// \param Simulation state /// \param Number of dimensions /// \param Number of RK bins /// /// ///////////////////////////////////////////////////////////////////////////// - void read_mesh(Mesh_t& mesh, - GaussPoint_t& GaussPoints, - node_t& node, - corner_t& corner, - int num_dims, - int rk_num_bins) + void read_mesh(Mesh_t& mesh, + State_t& State, + int num_dims, + int rk_num_bins) { if (mesh_file_ == NULL) { printf("No mesh given\n"); @@ -160,9 +152,13 @@ class MeshReader // Check mesh file extension // and read based on extension - read_ensight_mesh(mesh, GaussPoints, node, corner, num_dims, rk_num_bins); + read_ensight_mesh(mesh, State.GaussPoints, State.node, State.corner, num_dims, rk_num_bins); } + // void write_mesh(Mesh_t& mesh, + // State_t& State, + // SimulationParameters_t& SimulationParamaters, + ///////////////////////////////////////////////////////////////////////////// /// /// \fn read_ensight_mesh @@ -177,15 +173,13 @@ class MeshReader /// \param Number of RK bins /// ///////////////////////////////////////////////////////////////////////////// - void read_ensight_mesh(Mesh_t& mesh, - GaussPoint_t& GaussPoints, - node_t& node, - corner_t& corner, - int num_dims, - int rk_num_bins) + void read_ensight_mesh(Mesh_t& mesh, + GaussPoint_t& GaussPoints, + node_t& node, + corner_t& corner, + int num_dims, + int rk_num_bins) { - const size_t rk_level = 0; - FILE* in; char ch; @@ -219,18 +213,18 @@ class MeshReader // read the initial mesh coordinates // x-coords for (int node_id = 0; node_id < mesh.num_nodes; node_id++) { - fscanf(in, "%le", &node.coords(rk_level, node_id, 0)); + fscanf(in, "%le", &node.coords.host(0, node_id, 0)); } // y-coords for (int node_id = 0; node_id < mesh.num_nodes; node_id++) { - fscanf(in, "%le", &node.coords(rk_level, node_id, 1)); + fscanf(in, "%le", &node.coords.host(0, node_id, 1)); } // z-coords for (int node_id = 0; node_id < mesh.num_nodes; node_id++) { if (num_dims == 3) { - fscanf(in, "%le", &node.coords(rk_level, node_id, 2)); + fscanf(in, "%le", &node.coords.host(0, node_id, 2)); } else{ double dummy; @@ -238,6 +232,18 @@ class MeshReader } } // end for + // save the node coords to the current RK value + for (size_t node_gid = 0; node_gid < num_nodes; node_gid++) { + for (int rk = 1; rk < rk_num_bins; rk++) { + for (int dim = 0; dim < num_dims; dim++) { + node.coords.host(rk, node_gid, dim) = node.coords.host(0, node_gid, dim); + } // end for dim + } // end for rk + } // end parallel for + + // Update device nodal positions + node.coords.update_device(); + ch = (char)fgetc(in); // skip 1 line @@ -275,15 +281,6 @@ class MeshReader mesh.initialize_corners(num_corners); corner.initialize(num_corners, num_dims); - // save the node coords to the current RK value - for (size_t node_gid = 0; node_gid < num_nodes; node_gid++) { - for (int rk = 1; rk < rk_num_bins; rk++) { - for (int dim = 0; dim < num_dims; dim++) { - node.coords(rk, node_gid, dim) = node.coords(0, node_gid, dim); - } // end for dim - } // end for rk - } // end parallel for - // Close mesh input file fclose(in); @@ -328,11 +325,11 @@ class MeshBuilder /// \param Simulation parameters /// ///////////////////////////////////////////////////////////////////////////// - void build_mesh(Mesh_t& mesh, - GaussPoint_t& GaussPoints, - node_t& node, - corner_t& corner, - SimulationParameters_t& SimulationParamaters) + void build_mesh(Mesh_t& mesh, + GaussPoint_t& GaussPoints, + node_t& node, + corner_t& corner, + SimulationParameters_t& SimulationParamaters) { if (SimulationParamaters.mesh_input.num_dims == 2) { if (SimulationParamaters.mesh_input.type == mesh_input::Cylinder) { @@ -372,11 +369,11 @@ class MeshBuilder /// \param Simulation parameters /// ///////////////////////////////////////////////////////////////////////////// - void build_2d_box(Mesh_t& mesh, - GaussPoint_t& GaussPoints, - node_t& node, - corner_t& corner, - SimulationParameters_t& SimulationParamaters) const + void build_2d_box(Mesh_t& mesh, + GaussPoint_t& GaussPoints, + node_t& node, + corner_t& corner, + SimulationParameters_t& SimulationParamaters) const { printf(" Creating a 2D box mesh \n"); @@ -399,7 +396,7 @@ class MeshBuilder const int num_elems = num_elems_i * num_elems_j; std::vector origin(num_dim); - //SimulationParamaters.mesh_input.origin.update_host(); + // SimulationParamaters.mesh_input.origin.update_host(); for (int i = 0; i < num_dim; i++) { origin[i] = SimulationParamaters.mesh_input.origin[i]; } // --- 2D parameters --- @@ -503,11 +500,11 @@ class MeshBuilder /// \param Simulation parameters /// ///////////////////////////////////////////////////////////////////////////// - void build_2d_polar(Mesh_t& mesh, - GaussPoint_t& GaussPoints, - node_t& node, - corner_t& corner, - SimulationParameters_t& SimulationParamaters) const + void build_2d_polar(Mesh_t& mesh, + GaussPoint_t& GaussPoints, + node_t& node, + corner_t& corner, + SimulationParameters_t& SimulationParamaters) const { printf(" Creating a 2D polar mesh \n"); @@ -534,7 +531,7 @@ class MeshBuilder const int num_elems = num_elems_i * num_elems_j; std::vector origin(num_dim); - //SimulationParamaters.mesh_input.origin.update_host(); + // SimulationParamaters.mesh_input.origin.update_host(); for (int i = 0; i < num_dim; i++) { origin[i] = SimulationParamaters.mesh_input.origin[i]; } // --- 2D parameters --- @@ -637,22 +634,22 @@ class MeshBuilder /// \param Simulation parameters /// ///////////////////////////////////////////////////////////////////////////// - void build_3d_box(Mesh_t& mesh, - GaussPoint_t& GaussPoints, - node_t& node, - corner_t& corner, - SimulationParameters_t& SimulationParamaters) const + void build_3d_box(Mesh_t& mesh, + GaussPoint_t& GaussPoints, + node_t& node, + corner_t& corner, + SimulationParameters_t& SimulationParamaters) const { printf(" Creating a 3D box mesh \n"); const int num_dim = 3; - //SimulationParamaters.mesh_input.length.update_host(); + // SimulationParamaters.mesh_input.length.update_host(); const double lx = SimulationParamaters.mesh_input.length[0]; const double ly = SimulationParamaters.mesh_input.length[1]; const double lz = SimulationParamaters.mesh_input.length[2]; - //SimulationParamaters.mesh_input.num_elems.update_host(); + // SimulationParamaters.mesh_input.num_elems.update_host(); const int num_elems_i = SimulationParamaters.mesh_input.num_elems[0]; const int num_elems_j = SimulationParamaters.mesh_input.num_elems[1]; const int num_elems_k = SimulationParamaters.mesh_input.num_elems[2]; @@ -670,7 +667,7 @@ class MeshBuilder const int num_elems = num_elems_i * num_elems_j * num_elems_k; std::vector origin(num_dim); - //SimulationParamaters.mesh_input.origin.update_host(); + // SimulationParamaters.mesh_input.origin.update_host(); for (int i = 0; i < num_dim; i++) { origin[i] = SimulationParamaters.mesh_input.origin[i]; } // --- 3D parameters --- @@ -788,84 +785,181 @@ class MeshBuilder /// \param Simulation parameters /// ///////////////////////////////////////////////////////////////////////////// - void build_3d_HexN_box(Mesh_t& mesh, - GaussPoint_t& GaussPoints, - node_t& node, - corner_t& corner, - SimulationParameters_t& SimulationParamaters) const + void build_3d_HexN_box(Mesh_t& mesh, + GaussPoint_t& GaussPoints, + node_t& node, + corner_t& corner, + SimulationParameters_t& SimulationParamaters) const { printf(" ***** WARNING:: build_3d_HexN_box not yet implemented\n"); - } - + const int num_dim = 3; + const int rk_num_bins = SimulationParamaters.dynamic_options.rk_num_bins; - ///////////////////////////////////////////////////////////////////////////// - /// - /// \fn PointIndexFromIJK - /// - /// \brief Given (i,j,k) coordinates within the Lagrange hex, return an - /// offset into the local connectivity (PointIds) array. - /// - /// Assumes that the grid has an i,j,k structure - /// the elem = i + (j)*(num_points_i-1) + (k)*(num_points_i-1)*(num_points_j-1) - /// the point = i + (j)*num_points_i + (k)*num_points_i*num_points_j - /// - /// \param i index - /// \param j index - /// \param k index - /// \param array of 3 integers specifying the order along each axis of the hexahedron - /// - ///////////////////////////////////////////////////////////////////////////// - int PointIndexFromIJK(int i, int j, int k, const int* order) const - { - bool ibdy = (i == 0 || i == order[0]); - bool jbdy = (j == 0 || j == order[1]); - bool kbdy = (k == 0 || k == order[2]); + // SimulationParamaters.mesh_input.length.update_host(); + const double lx = SimulationParamaters.mesh_input.length[0]; + const double ly = SimulationParamaters.mesh_input.length[1]; + const double lz = SimulationParamaters.mesh_input.length[2]; - // How many boundaries do we lie on at once? - int nbdy = (ibdy ? 1 : 0) + (jbdy ? 1 : 0) + (kbdy ? 1 : 0); + // SimulationParamaters.mesh_input.num_elems.update_host(); + const int num_elems_i = SimulationParamaters.mesh_input.num_elems[0]; + const int num_elems_j = SimulationParamaters.mesh_input.num_elems[1]; + const int num_elems_k = SimulationParamaters.mesh_input.num_elems[2]; - if (nbdy == 3) { // Vertex DOF - // ijk is a corner node. Return the proper index (somewhere in [0,7]): - return (i ? (j ? 2 : 1) : (j ? 3 : 0)) + (k ? 4 : 0); + // creating zones for the Pn order + const int Pn_order = SimulationParamaters.mesh_input.p_order; + + if (Pn_order > 19) { + printf(" Fierro DG and RD solvers are only valid for elements up to Pn = 19 \n"); + return; } - int offset = 8; - if (nbdy == 2) { // Edge DOF - if (!ibdy) { // On i axis - return (i - 1) + - (j ? order[0] - 1 + order[1] - 1 : 0) + - (k ? 2 * (order[0] - 1 + order[1] - 1) : 0) + - offset; - } - if (!jbdy) { // On j axis - return (j - 1) + - (i ? order[0] - 1 : 2 * (order[0] - 1) + order[1] - 1) + - (k ? 2 * (order[0] - 1 + order[1] - 1) : 0) + - offset; - } - // !kbdy, On k axis - offset += 4 * (order[0] - 1) + 4 * (order[1] - 1); - return (k - 1) + (order[2] - 1) * (i ? (j ? 3 : 1) : (j ? 2 : 0)) + offset; - } + const int num_zones_i = Pn_order*num_elems_i; + const int num_zones_j = Pn_order*num_elems_j; + const int num_zones_k = Pn_order*num_elems_k; + + const int num_points_i = num_zones_i+1; // num points in x accounting for Pn + const int num_points_j = num_zones_j+1; // num points in y accounting for Pn + const int num_points_k = num_zones_k+1; // num points in y accounting for Pn + + + const double dx = lx/((double)num_zones_i); // len/(num_zones_i) + const double dy = ly/((double)num_zones_j); // len/(num_zones_j) + const double dz = lz/((double)num_zones_k); // len/(num_zones_k) + + const int num_elems = num_elems_i*num_elems_j*num_elems_k; + const int num_zones = num_zones_i*num_zones_j*num_zones_k; // accounts for Pn - offset += 4 * (order[0] - 1 + order[1] - 1 + order[2] - 1); - if (nbdy == 1) { // Face DOF - if (ibdy) { // On i-normal face - return (j - 1) + ((order[1] - 1) * (k - 1)) + (i ? (order[1] - 1) * (order[2] - 1) : 0) + offset; - } - offset += 2 * (order[1] - 1) * (order[2] - 1); - if (jbdy) { // On j-normal face - return (i - 1) + ((order[0] - 1) * (k - 1)) + (j ? (order[2] - 1) * (order[0] - 1) : 0) + offset; + std::vector origin(num_dim); + // SimulationParamaters.mesh_input.origin.update_host(); + for (int i = 0; i < num_dim; i++) { origin[i] = SimulationParamaters.mesh_input.origin[i]; } + + // --- 3D parameters --- + const int num_faces_in_zone = 6; // number of faces in zone + const int num_points_in_zone = 8; // number of points in zone + const int num_points_in_face = 4; // number of points in a face + + // p_order = 1, 2, 3, 4, 5 + // num_nodes = 2, 3, 4, 5, 6 + const int num_1D_points = Pn_order+1; + const int num_points_in_elem = num_1D_points*num_1D_points*num_1D_points; + + + // --- elem --- + int elem_id = 0; + auto elem_coords = CArray (num_elems, num_dim); + auto elem_point_list = CArray (num_elems, num_points_in_elem); + + + // --- point --- + int point_id = 0; + int num_points = num_points_i * num_points_j * num_points_k; + auto pt_coords = CArray (num_points, num_dim); + + + // --- Build nodes --- + + // initialize node variables + mesh.initialize_nodes(num_points); + node.initialize(rk_num_bins, num_points, num_dim); + // populate the point data structures + for (int k = 0; k < num_points_k; k++){ + for (int j = 0; j < num_points_j; j++){ + for (int i = 0; i < num_points_i; i++){ + + + // global id for the point + int node_gid = get_id(i, j, k, num_points_i, num_points_j); + + // store the point coordinates + node.coords.host(0, node_gid, 0) = origin[0] + (double)i * dx; + node.coords.host(0, node_gid, 1) = origin[1] + (double)j * dy; + node.coords.host(0, node_gid, 2) = origin[2] + (double)k * dz; + + } // end for k + } // end for i + } // end for j + + for (int rk_level = 1; rk_level < rk_num_bins; rk_level++) { + for (int node_gid = 0; node_gid < num_points; node_gid++) { + node.coords.host(rk_level, node_gid, 0) = node.coords.host(0, node_gid, 0); + node.coords.host(rk_level, node_gid, 1) = node.coords.host(0, node_gid, 1); + node.coords.host(rk_level, node_gid, 2) = node.coords.host(0, node_gid, 2); } - offset += 2 * (order[2] - 1) * (order[0] - 1); - // kbdy, On k-normal face - return (i - 1) + ((order[0] - 1) * (j - 1)) + (k ? (order[0] - 1) * (order[1] - 1) : 0) + offset; } - // nbdy == 0: Body DOF - offset += 2 * ((order[1] - 1) * (order[2] - 1) + (order[2] - 1) * (order[0] - 1) + (order[0] - 1) * (order[1] - 1)); - return offset + (i - 1) + (order[0] - 1) * ((j - 1) + (order[1] - 1) * ((k - 1))); + node.coords.update_device(); + + + // intialize elem variables + mesh.initialize_elems(num_elems, num_dim); + GaussPoints.initialize(rk_num_bins, num_elems, 3); // WARNING: Bug here, needs Pn order in initializer + + // --- Build elems --- + + // populate the elem center data structures accounting for Pn + for (int k=0; k graphics_times) + void write_mesh(Mesh_t& mesh, + State_t& State, + SimulationParameters_t& SimulationParamaters, + double time_value, + CArray graphics_times) { if (SimulationParamaters.output_options.format == output_options::vtk) { write_vtk(mesh, @@ -956,19 +1050,18 @@ class MeshWriter /// \param Vector of all graphics output times /// ///////////////////////////////////////////////////////////////////////////// - void write_ensight(Mesh_t& mesh, - State_t& State, - SimulationParameters_t& SimulationParamaters, - double time_value, - CArray graphics_times) + void write_ensight(Mesh_t& mesh, + State_t& State, + SimulationParameters_t& SimulationParamaters, + double time_value, + CArray graphics_times) { - size_t num_mats = State.MaterialPoints.size(); // ---- Update host data ---- // material point values - for(int mat_id=0; mat_id vec_fields(num_nodes, num_vec_vars, 3); @@ -1117,8 +1204,8 @@ class MeshWriter // --------------------------------------------------------------------------- FILE* out[20]; // the output files that are written to char filename[128]; - int max_len = sizeof filename; - int str_output_len; + int max_len = sizeof filename; + int str_output_len; struct stat st; @@ -1133,14 +1220,13 @@ class MeshWriter // --------------------------------------------------------------------------- // Write the Geometry file // --------------------------------------------------------------------------- - //sprintf(filename, "ensight/data/%s.%05d.geo", name, graphics_id); + // sprintf(filename, "ensight/data/%s.%05d.geo", name, graphics_id); str_output_len = snprintf(filename, max_len, "ensight/data/%s.%05d.geo", name, graphics_id); // filename has the full string - if (str_output_len >= max_len) fputs("Filename length exceeded; string truncated", stderr); + if (str_output_len >= max_len) { fputs("Filename length exceeded; string truncated", stderr); } out[0] = fopen(filename, "w"); - fprintf(out[0], "A graphics dump by Fierro \n"); fprintf(out[0], "%s", "EnSight Gold geometry\n"); @@ -1155,8 +1241,6 @@ class MeshWriter fprintf(out[0], "coordinates\n"); fprintf(out[0], "%10lu\n", num_nodes); - - // write all components of the point coordinates for (int node_gid = 0; node_gid < num_nodes; node_gid++) { fprintf(out[0], "%12.5e\n", State.node.coords.host(1, node_gid, 0)); @@ -1201,9 +1285,9 @@ class MeshWriter // ensight_vars = (den, pres,...) for (int var = 0; var < num_scalar_vars; var++) { // write a scalar value - //sprintf(filename, "ensight/data/%s.%05d.%s", name, graphics_id, scalar_var_names[var]); + // sprintf(filename, "ensight/data/%s.%05d.%s", name, graphics_id, scalar_var_names[var]); str_output_len = snprintf(filename, max_len, "ensight/data/%s.%05d.%s", name, graphics_id, scalar_var_names[var]); - if (str_output_len >= max_len) fputs("Filename length exceeded; string truncated", stderr); + if (str_output_len >= max_len) { fputs("Filename length exceeded; string truncated", stderr); } out[0] = fopen(filename, "w"); @@ -1230,11 +1314,9 @@ class MeshWriter // ensight vector vars = (position, velocity, force) for (int var = 0; var < num_vec_vars; var++) { - // sprintf(filename, "ensight/data/%s.%05d.%s", name, graphics_id, vec_var_names[var]); str_output_len = snprintf(filename, max_len, "ensight/data/%s.%05d.%s", name, graphics_id, vec_var_names[var]); - if (str_output_len >= max_len) fputs("Filename length exceeded; string truncated", stderr); - + if (str_output_len >= max_len) { fputs("Filename length exceeded; string truncated", stderr); } out[0] = fopen(filename, "w"); // fprintf(out[0],"Per_node vector values\n"); @@ -1266,35 +1348,35 @@ class MeshWriter // Write the case file // --------------------------------------------------------------------------- - //sprintf(filename, "ensight/%s.case", name); + // sprintf(filename, "ensight/%s.case", name); str_output_len = snprintf(filename, max_len, "ensight/%s.case", name); - if (str_output_len >= max_len) fputs("Filename length exceeded; string truncated", stderr); - + if (str_output_len >= max_len) { fputs("Filename length exceeded; string truncated", stderr); } + out[0] = fopen(filename, "w"); fprintf(out[0], "FORMAT\n"); fprintf(out[0], "type: ensight gold\n"); fprintf(out[0], "GEOMETRY\n"); - //sprintf(filename, "model: data/%s.*****.geo\n", name); + // sprintf(filename, "model: data/%s.*****.geo\n", name); str_output_len = snprintf(filename, max_len, "model: data/%s.*****.geo\n", name); - if (str_output_len >= max_len) fputs("Filename length exceeded; string truncated", stderr); + if (str_output_len >= max_len) { fputs("Filename length exceeded; string truncated", stderr); } fprintf(out[0], "%s", filename); fprintf(out[0], "VARIABLE\n"); for (int var = 0; var < num_scalar_vars; var++) { - //sprintf(filename, "scalar per element: %s data/%s.*****.%s\n", scalar_var_names[var], name, scalar_var_names[var]); + // sprintf(filename, "scalar per element: %s data/%s.*****.%s\n", scalar_var_names[var], name, scalar_var_names[var]); str_output_len = snprintf(filename, max_len, "scalar per element: %s data/%s.*****.%s\n", scalar_var_names[var], name, scalar_var_names[var]); - if (str_output_len >= max_len) fputs("Filename length exceeded; string truncated", stderr); + if (str_output_len >= max_len) { fputs("Filename length exceeded; string truncated", stderr); } fprintf(out[0], "%s", filename); } for (int var = 0; var < num_vec_vars; var++) { - //sprintf(filename, "vector per node: %s data/%s.*****.%s\n", vec_var_names[var], name, vec_var_names[var]); + // sprintf(filename, "vector per node: %s data/%s.*****.%s\n", vec_var_names[var], name, vec_var_names[var]); str_output_len = snprintf(filename, max_len, "vector per node: %s data/%s.*****.%s\n", vec_var_names[var], name, vec_var_names[var]); - if (str_output_len >= max_len) fputs("Filename length exceeded; string truncated", stderr); + if (str_output_len >= max_len) { fputs("Filename length exceeded; string truncated", stderr); } fprintf(out[0], "%s", filename); } @@ -1324,6 +1406,56 @@ class MeshWriter return; } + /**\brief Given (i,j,k) coordinates within the Lagrange hex, return an offset into the local connectivity (PointIds) array. + * + * The \a order parameter must point to an array of 3 integers specifying the order + * along each axis of the hexahedron. + */ + int PointIndexFromIJK(int i, int j, int k, const int* order) + { + bool ibdy = (i == 0 || i == order[0]); + bool jbdy = (j == 0 || j == order[1]); + bool kbdy = (k == 0 || k == order[2]); + // How many boundaries do we lie on at once? + int nbdy = (ibdy ? 1 : 0) + (jbdy ? 1 : 0) + (kbdy ? 1 : 0); + + if (nbdy == 3) { // Vertex DOF + // ijk is a corner node. Return the proper index (somewhere in [0,7]): + return (i ? (j ? 2 : 1) : (j ? 3 : 0)) + (k ? 4 : 0); + } + + int offset = 8; + if (nbdy == 2) { // Edge DOF + if (!ibdy) { // On i axis + return (i - 1) + (j ? order[0] - 1 + order[1] - 1 : 0) + (k ? 2 * (order[0] - 1 + order[1] - 1) : 0) + offset; + } + if (!jbdy) { // On j axis + return (j - 1) + (i ? order[0] - 1 : 2 * (order[0] - 1) + order[1] - 1) + (k ? 2 * (order[0] - 1 + order[1] - 1) : 0) + offset; + } + // !kbdy, On k axis + offset += 4 * (order[0] - 1) + 4 * (order[1] - 1); + return (k - 1) + (order[2] - 1) * (i ? (j ? 3 : 1) : (j ? 2 : 0)) + offset; + } + + offset += 4 * (order[0] - 1 + order[1] - 1 + order[2] - 1); + if (nbdy == 1) { // Face DOF + if (ibdy) { // On i-normal face + return (j - 1) + ((order[1] - 1) * (k - 1)) + (i ? (order[1] - 1) * (order[2] - 1) : 0) + offset; + } + offset += 2 * (order[1] - 1) * (order[2] - 1); + if (jbdy) { // On j-normal face + return (i - 1) + ((order[0] - 1) * (k - 1)) + (j ? (order[2] - 1) * (order[0] - 1) : 0) + offset; + } + offset += 2 * (order[2] - 1) * (order[0] - 1); + // kbdy, On k-normal face + return (i - 1) + ((order[0] - 1) * (j - 1)) + (k ? (order[0] - 1) * (order[1] - 1) : 0) + offset; + } + + // nbdy == 0: Body DOF + offset += 2 * ( (order[1] - 1) * (order[2] - 1) + (order[2] - 1) * (order[0] - 1) + (order[0] - 1) * (order[1] - 1)); + return offset + (i - 1) + (order[0] - 1) * ( (j - 1) + (order[1] - 1) * ( (k - 1))); + } + ///////////////////////////////////////////////////////////////////////////// /// /// \fn write_vtk @@ -1337,16 +1469,304 @@ class MeshWriter /// \param Vector of all graphics output times /// ///////////////////////////////////////////////////////////////////////////// - void write_vtk(Mesh_t& mesh, - State_t& State, - SimulationParameters_t& SimulationParamaters, - double time_value, - CArray graphics_times) + void write_vtk(Mesh_t& mesh, + State_t& State, + SimulationParameters_t& SimulationParamaters, + double time_value, + CArray graphics_times) { // Not yet supported - throw std::runtime_error("**** VTK OUTPUT TYPE NOT YET SUPPORTED ****"); - } + // throw std::runtime_error("**** VTK OUTPUT TYPE NOT YET SUPPORTED ****"); + + const int num_scalar_vars = 10; + const int num_vec_vars = 2; + size_t num_mats = State.MaterialPoints.size(); + + // ---- Update host data ---- + + // material point values + for (int mat_id = 0; mat_id < num_mats; mat_id++) { + State.MaterialPoints(mat_id).den.update_host(); + State.MaterialPoints(mat_id).pres.update_host(); + State.MaterialPoints(mat_id).stress.update_host(); + State.MaterialPoints(mat_id).sspd.update_host(); + State.MaterialPoints(mat_id).sie.update_host(); + State.MaterialPoints(mat_id).mass.update_host(); + State.MaterialPoints(mat_id).eroded.update_host(); + } // end for mat_id + + // gauss point values + State.GaussPoints.vol.update_host(); + + // nodal values + State.node.coords.update_host(); + State.node.vel.update_host(); + State.node.mass.update_host(); + + Kokkos::fence(); + + const char scalar_var_names[num_scalar_vars][15] = { + "den", "pres", "sie", "vol", "mass", "sspd", "speed", "mat_id", "elem_switch", "eroded" + }; + + const char vec_var_names[num_vec_vars][15] = { + "pos", "vel" + }; + + // short hand + const size_t num_nodes = mesh.num_nodes; + const size_t num_elems = mesh.num_elems; + const size_t num_dims = mesh.num_dims; + + // save the cell state to an array for exporting to graphics files + auto elem_fields = CArray(num_elems, num_scalar_vars); + int elem_switch = 1; + + DCArrayKokkos speed(num_elems); + FOR_ALL(elem_gid, 0, num_elems, { + double elem_vel[3]; // note:initialization with a list won't work + elem_vel[0] = 0.0; + elem_vel[1] = 0.0; + elem_vel[2] = 0.0; + // get the coordinates of the element center + for (int node_lid = 0; node_lid < mesh.num_nodes_in_elem; node_lid++) { + elem_vel[0] += State.node.vel(1, mesh.nodes_in_elem(elem_gid, node_lid), 0); + elem_vel[1] += State.node.vel(1, mesh.nodes_in_elem(elem_gid, node_lid), 1); + if (mesh.num_dims == 3) { + elem_vel[2] += State.node.vel(1, mesh.nodes_in_elem(elem_gid, node_lid), 2); + } + else{ + elem_vel[2] = 0.0; + } + } // end loop over nodes in element + elem_vel[0] = elem_vel[0] / mesh.num_nodes_in_elem; + elem_vel[1] = elem_vel[1] / mesh.num_nodes_in_elem; + elem_vel[2] = elem_vel[2] / mesh.num_nodes_in_elem; + + double speed_sqrd = 0.0; + for (int dim = 0; dim < num_dims; dim++) { + speed_sqrd += elem_vel[dim] * elem_vel[dim]; + } + speed(elem_gid) = sqrt(speed_sqrd); + }); // end parallel for + speed.update_host(); + Kokkos::fence(); + + // save the output scale fields to a single 2D array + + // export material centeric data to the elements + for (int mat_id = 0; mat_id < num_mats; mat_id++) { + size_t num_mat_elems = State.MaterialToMeshMaps(mat_id).num_material_elems; + + for (size_t mat_elem_lid = 0; mat_elem_lid < num_mat_elems; mat_elem_lid++) { + // 1 material per element + + // get elem gid + size_t elem_gid = State.MaterialToMeshMaps(mat_id).elem.host(mat_elem_lid); + + // save outputs + elem_fields(elem_gid, 0) = State.MaterialPoints(mat_id).den.host(mat_elem_lid); + elem_fields(elem_gid, 1) = State.MaterialPoints(mat_id).pres.host(mat_elem_lid); + elem_fields(elem_gid, 2) = State.MaterialPoints(mat_id).sie.host(1, mat_elem_lid); + // 3 is guass point vol + elem_fields(elem_gid, 4) = State.MaterialPoints(mat_id).mass.host(mat_elem_lid); + elem_fields(elem_gid, 5) = State.MaterialPoints(mat_id).sspd.host(mat_elem_lid); + // 6 is elem speed + elem_fields(elem_gid, 7) = (double)mat_id; + // 8 is the e_switch + elem_fields(elem_gid, 9) = (double)State.MaterialPoints(mat_id).eroded.host(mat_elem_lid); + } // end for mat elems storage + } // end parallel loop over materials + + // export element centric data + double e_switch = 1; + for (size_t elem_gid = 0; elem_gid < num_elems; elem_gid++) { + elem_fields(elem_gid, 3) = State.GaussPoints.vol.host(elem_gid); + elem_fields(elem_gid, 6) = speed.host(elem_gid); + elem_fields(elem_gid, 8) = e_switch; + elem_switch *= -1; + } // end for elem_gid + + // save the vertex vector fields to an array for exporting to graphics files + CArray vec_fields(num_nodes, num_vec_vars, 3); + + for (size_t node_gid = 0; node_gid < num_nodes; node_gid++) { + // position, var 0 + vec_fields(node_gid, 0, 0) = State.node.coords.host(1, node_gid, 0); + vec_fields(node_gid, 0, 1) = State.node.coords.host(1, node_gid, 1); + if (num_dims == 2) { + vec_fields(node_gid, 0, 2) = 0.0; + } + else{ + vec_fields(node_gid, 0, 2) = State.node.coords.host(1, node_gid, 2); + } + + // position, var 1 + vec_fields(node_gid, 1, 0) = State.node.vel.host(1, node_gid, 0); + vec_fields(node_gid, 1, 1) = State.node.vel.host(1, node_gid, 1); + if (num_dims == 2) { + vec_fields(node_gid, 1, 2) = 0.0; + } + else{ + vec_fields(node_gid, 1, 2) = State.node.vel.host(1, node_gid, 2); + } + } // end for loop over vertices + + FILE* out[20]; // the output files that are written to + char name[100]; // char string + + struct stat st; + + if (stat("vtk", &st) != 0) { + system("mkdir vtk"); + } + + // snprintf(filename, max_len, "ensight/data/%s.%05d.%s", name, graphics_id, vec_var_names[var]); + + sprintf(name, "vtk/meshHexPn.%05d.vtk", graphics_id); // mesh file + out[0] = fopen(name, "w"); + + fprintf(out[0], "# vtk DataFile Version 2.0\n"); // part 2 + fprintf(out[0], "Mesh for Fierro\n"); // part 2 + fprintf(out[0], "ASCII \n"); // part 3 + fprintf(out[0], "DATASET UNSTRUCTURED_GRID\n\n"); // part 4 + + fprintf(out[0], "POINTS %zu float\n", mesh.num_nodes); + + // write all components of the point coordinates + for (size_t node_gid = 0; node_gid < mesh.num_nodes; node_gid++) { + fprintf(out[0], + "%f %f %f\n", + State.node.coords(1, node_gid, 0), + State.node.coords(1, node_gid, 1), + State.node.coords(1, node_gid, 2)); + } // end for + + /* + --------------------------------------------------------------------------- + Write the elems + --------------------------------------------------------------------------- + */ + + CArray get_ijk_from_vtk(mesh.num_nodes_in_elem, 3); + CArray convert_vtk_to_fierro(mesh.num_nodes_in_elem); + + // re-order the nodes to be in i,j,k format of Fierro + int Pn_order = mesh.Pn; + int this_point = 0; + for (int k = 0; k <= Pn_order; k++) { + for (int j = 0; j <= Pn_order; j++) { + for (int i = 0; i <= Pn_order; i++) { + // convert this_point index to the FE index convention + int order[3] = { Pn_order, Pn_order, Pn_order }; + int this_index = PointIndexFromIJK(i, j, k, order); + + // store the points in this elem according the the finite + // element numbering convention + convert_vtk_to_fierro(this_index) = this_point; + + get_ijk_from_vtk(this_index, 0) = i; + get_ijk_from_vtk(this_index, 1) = j; + get_ijk_from_vtk(this_index, 2) = k; + + // increment the point counting index + this_point = this_point + 1; + } // end for icount + } // end for jcount + } // end for kcount + + fprintf(out[0], "\n"); + fprintf(out[0], "CELLS %lu %lu\n", mesh.num_elems, mesh.num_elems + mesh.num_elems * mesh.num_nodes_in_elem); // size=all printed values + + // write all global point numbers for this elem + for (size_t elem_gid = 0; elem_gid < mesh.num_elems; elem_gid++) { + fprintf(out[0], "%lu ", mesh.num_nodes_in_elem); // num points in this elem + + for (size_t vtk_index = 0; vtk_index < mesh.num_nodes_in_elem; vtk_index++) { + // get the Fierro node_lid + // size_t node_lid = mesh.convert_vtk_to_fierro(vtk_index); + size_t node_lid = vtk_index; + + fprintf(out[0], "%lu ", mesh.nodes_in_elem.host(elem_gid, node_lid)); + } + fprintf(out[0], "\n"); + } // end for + + // Write the element types + fprintf(out[0], "\n"); + fprintf(out[0], "CELL_TYPES %zu \n", mesh.num_elems); + // VTK_LAGRANGE_HEXAHEDRON: 72, + // VTK_HIGHER_ORDER_HEXAHEDRON: 67 + // VTK_BIQUADRATIC_QUADRATIC_HEXAHEDRON = 33 + // element types: https://vtk.org/doc/nightly/html/vtkCellType_8h_source.html + // element types: https://kitware.github.io/vtk-js/api/Common_DataModel_CellTypes.html + // vtk format: https://www.kitware.com//modeling-arbitrary-order-lagrange-finite-elements-in-the-visualization-toolkit/ + for (size_t elem_gid = 0; elem_gid < mesh.num_elems; elem_gid++) { + fprintf(out[0], "%d \n", 72); + } + + /* + --------------------------------------------------------------------------- + Write the nodal vector variables to file + --------------------------------------------------------------------------- + */ + + fprintf(out[0], "\n"); + fprintf(out[0], "POINT_DATA %zu \n", mesh.num_nodes); + + // vtk vector vars = (position, velocity) + for (int var = 0; var < num_vec_vars; var++) { + fprintf(out[0], "VECTORS %s float \n", vec_var_names[var]); + for (size_t node_gid = 0; node_gid < mesh.num_nodes; node_gid++) { + fprintf(out[0], "%f %f %f\n", + vec_fields(node_gid, var, 0), + vec_fields(node_gid, var, 1), + vec_fields(node_gid, var, 2)); + } // end for nodes + } // end for vec_vars + + /* + --------------------------------------------------------------------------- + Write the scalar elem variable to file + --------------------------------------------------------------------------- + */ + fprintf(out[0], "\n"); + fprintf(out[0], "CELL_DATA %zu \n", mesh.num_elems); + + for (int var = 0; var < num_scalar_vars; var++) { + fprintf(out[0], "SCALARS %s float 1\n", scalar_var_names[var]); // the 1 is number of scalar components [1:4] + fprintf(out[0], "LOOKUP_TABLE default\n"); + for (size_t elem_gid = 0; elem_gid < mesh.num_elems; elem_gid++) { + fprintf(out[0], "%f\n", elem_fields(elem_gid, var)); + } // end for elem + } // end for scalar_vars + + fclose(out[0]); + + graphics_times(graphics_id) = time_value; + + // Write time series metadata + sprintf(name, "vtk/meshHexPn.vtk.series", graphics_id); // mesh file + out[0] = fopen(name, "w"); + + fprintf(out[0], "{\n"); + fprintf(out[0], " \"file-series-version\" : \"1.0\",\n"); + fprintf(out[0], " \"files\" : [\n"); + + for (int i = 0; i <= graphics_id; i++) { + fprintf(out[0], " { \"name\" : \"meshHexPn.%05d.vtk\", \"time\" : %12.5e },\n", i, graphics_times(i) ); + } + + // fprintf(out[0], "%12.5e\n", graphics_times(i)); + fprintf(out[0], " ]\n"); // part 4 + fprintf(out[0], "}"); // part 4 + + fclose(out[0]); + + // increment graphics id counter + graphics_id++; + } // end write vtk ///////////////////////////////////////////////////////////////////////////// /// @@ -1361,13 +1781,12 @@ class MeshWriter /// \param Vector of all graphics output times /// ///////////////////////////////////////////////////////////////////////////// - void write_material_point_state(Mesh_t& mesh, - State_t& State, - SimulationParameters_t& SimulationParamaters, - double time_value, - CArray graphics_times) + void write_material_point_state(Mesh_t& mesh, + State_t& State, + SimulationParameters_t& SimulationParamaters, + double time_value, + CArray graphics_times) { - // WARNING WARNING WARNING: // This currently assumes the gauss and material point IDs are the same as the element ID // This will need to be updated for high order methods @@ -1376,7 +1795,7 @@ class MeshWriter // ---- Update host data ---- size_t num_mats = State.MaterialPoints.size(); - for(int mat_id=0; mat_id& node_coords, - const DCArrayKokkos& node_vel, - const DCArrayKokkos& node_mass, - const DCArrayKokkos& elem_den, - const DCArrayKokkos& elem_pres, - const DCArrayKokkos& elem_stress, - const DCArrayKokkos& elem_sspd, - const DCArrayKokkos& elem_sie, - const DCArrayKokkos& elem_vol, - const DCArrayKokkos& elem_mass, - const DCArrayKokkos& elem_mat_id, - CArray& graphics_times, - size_t& graphics_id, - const double time_value); - -void state_file(const Mesh_t& mesh, - const DCArrayKokkos& node_coords, - const DCArrayKokkos& node_vel, - const DCArrayKokkos& node_mass, - const DCArrayKokkos& elem_den, - const DCArrayKokkos& elem_pres, - const DCArrayKokkos& elem_stress, - const DCArrayKokkos& elem_sspd, - const DCArrayKokkos& elem_sie, - const DCArrayKokkos& elem_vol, - const DCArrayKokkos& elem_mass, - const DCArrayKokkos& elem_mat_id, - const double time_value); + const DCArrayKokkos& node_coords, + const DCArrayKokkos& node_vel, + const DCArrayKokkos& node_mass, + const DCArrayKokkos& elem_den, + const DCArrayKokkos& elem_pres, + const DCArrayKokkos& elem_stress, + const DCArrayKokkos& elem_sspd, + const DCArrayKokkos& elem_sie, + const DCArrayKokkos& elem_vol, + const DCArrayKokkos& elem_mass, + const DCArrayKokkos& elem_mat_id, + CArray& graphics_times, + size_t& graphics_id, + const double time_value); + +void state_file(const Mesh_t& mesh, + const DCArrayKokkos& node_coords, + const DCArrayKokkos& node_vel, + const DCArrayKokkos& node_mass, + const DCArrayKokkos& elem_den, + const DCArrayKokkos& elem_pres, + const DCArrayKokkos& elem_stress, + const DCArrayKokkos& elem_sspd, + const DCArrayKokkos& elem_sie, + const DCArrayKokkos& elem_vol, + const DCArrayKokkos& elem_mass, + const DCArrayKokkos& elem_mat_id, + const double time_value); void user_model_init(const DCArrayKokkos& file_state_vars, - const size_t num_state_vars, - const size_t mat_id, - const size_t num_elems); + const size_t num_state_vars, + const size_t mat_id, + const size_t num_elems); KOKKOS_FUNCTION void decompose_vel_grad(ViewCArrayKokkos& D_tensor, - ViewCArrayKokkos& W_tensor, - const ViewCArrayKokkos& vel_grad, - const ViewCArrayKokkos& elem_node_gids, - const size_t elem_gid, - const DCArrayKokkos& node_coords, - const DCArrayKokkos& node_vel, - const double vol); + ViewCArrayKokkos& W_tensor, + const ViewCArrayKokkos& vel_grad, + const ViewCArrayKokkos& elem_node_gids, + const size_t elem_gid, + const DCArrayKokkos& node_coords, + const DCArrayKokkos& node_vel, + const double vol); #endif diff --git a/single-node-refactor/src/common/output_options.h b/single-node-refactor/src/common/output_options.h index cc186d8ad..dbb44ffe8 100644 --- a/single-node-refactor/src/common/output_options.h +++ b/single-node-refactor/src/common/output_options.h @@ -56,7 +56,7 @@ enum timer_output_level static std::map output_format_map { - // { "vtk", output_options::vtk }, // Not yet supported + { "vtk", output_options::vtk }, { "ensight", output_options::ensight }, { "state", output_options::state } }; diff --git a/single-node-refactor/src/common/region.h b/single-node-refactor/src/common/region.h index 90b55c18c..65b30a5ff 100644 --- a/single-node-refactor/src/common/region.h +++ b/single-node-refactor/src/common/region.h @@ -44,19 +44,19 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // ============================================================================== namespace region { - // for tagging volumes to paint material onto the mesh - enum vol_tag - { - no_volume = 0, - global = 1, // tag every elements in the mesh - box = 2, // tag all elements inside a box - cylinder = 3, // tag all elements inside a cylinder - sphere = 4, // tag all elements inside a sphere - readVoxelFile = 5, // tag all elements in a voxel mesh (structured VTK) - readPolycrystalFile = 6, // tag all elements in a polycrystallince voxel mesh (structured VTK) - readSTLFile = 7, // read a STL file and voxelize it - readVTKFile = 8, // tag all elements in a VTK mesh (unstructured mesh) - }; +// for tagging volumes to paint material onto the mesh +enum vol_tag +{ + no_volume = 0, + global = 1, ///< tag every elements in the mesh + box = 2, ///< tag all elements inside a box + cylinder = 3, ///< tag all elements inside a cylinder + sphere = 4, ///< tag all elements inside a sphere + readVoxelFile = 5, ///< tag all elements in a voxel mesh (structured VTK) + readPolycrystalFile = 6,///< tag all elements in a polycrystallince voxel mesh (structured VTK) + readSTLFile = 7, ///< read a STL file and voxelize it + readVTKFile = 8, ///< tag all elements in a VTK mesh (unstructured mesh) +}; } // end of namespace static std::map region_type_map @@ -109,15 +109,14 @@ struct RegionFill_t double sie = 0.0; ///< specific internal energy double den = 0.0; ///< density - double origin[3] = {0.0, 0.0, 0.0}; ///< Origin for region + double origin[3] = { 0.0, 0.0, 0.0 }; ///< Origin for region }; - ///////////////////////////////////////////////////////////////////////////// /// /// \struct RegionFill_host_t /// -/// \brief Geometry data, on the cpu only, for regions of materials/states +/// \brief Geometry data, on the cpu only, for regions of materials/states /// ///////////////////////////////////////////////////////////////////////////// struct RegionFill_host_t diff --git a/single-node-refactor/src/common/region_fill.h b/single-node-refactor/src/common/region_fill.h index 832513def..1d629c6b2 100644 --- a/single-node-refactor/src/common/region_fill.h +++ b/single-node-refactor/src/common/region_fill.h @@ -46,24 +46,23 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include #include - // ----------------------------------------------------------------------------- // The function to read a voxel vtk file from Dream3d and intialize the mesh // ------------------------------------------------------------------------------ void user_voxel_init(DCArrayKokkos& elem_values, - double& dx, - double& dy, - double& dz, - double& orig_x, - double& orig_y, - double& orig_z, - size_t& num_elems_i, - size_t& num_elems_j, - size_t& num_elems_k, - double scale_x, - double scale_y, - double scale_z, - std::string mesh_file) + double& dx, + double& dy, + double& dz, + double& orig_x, + double& orig_y, + double& orig_z, + size_t& num_elems_i, + size_t& num_elems_j, + size_t& num_elems_k, + double scale_x, + double scale_y, + double scale_z, + std::string mesh_file) { std::string MESH = mesh_file; // user specified @@ -71,13 +70,11 @@ void user_voxel_init(DCArrayKokkos& elem_values, in.open(MESH); // check to see of a mesh was supplied when running the code - if (in) - { + if (in) { printf("\nReading the 3D voxel mesh: "); std::cout << MESH << std::endl; } - else - { + else{ std::cout << "\n\n**********************************\n\n"; std::cout << " ERROR:\n"; std::cout << " Voxel vtk input does not exist \n"; @@ -110,8 +107,7 @@ void user_voxel_init(DCArrayKokkos& elem_values, // looking for the following text: // POINTS %d float - if (v[0] == "DIMENSIONS") - { + if (v[0] == "DIMENSIONS") { num_points_i = std::stoi(v[1]); num_points_j = std::stoi(v[2]); num_points_k = std::stoi(v[3]); @@ -120,8 +116,7 @@ void user_voxel_init(DCArrayKokkos& elem_values, found = true; } // end if - if (i > 1000) - { + if (i > 1000) { printf("ERROR: Failed to find POINTS \n"); break; } // end if @@ -144,8 +139,7 @@ void user_voxel_init(DCArrayKokkos& elem_values, std::vector v = split(str, delimiter); // looking for the following text: - if (v[0] == "X_COORDINATES") - { + if (v[0] == "X_COORDINATES") { size_t num_saved = 0; while (num_saved < num_points_i - 1) { @@ -157,9 +151,8 @@ void user_voxel_init(DCArrayKokkos& elem_values, std::vector v_coords = split(str, delimiter); // loop over the contents of the vector v_coords - for (size_t this_point = 0; this_point < v_coords.size(); this_point++) - { - pt_coords_x(num_saved) = scale_x*std::stod(v_coords[this_point]); + for (size_t this_point = 0; this_point < v_coords.size(); this_point++) { + pt_coords_x(num_saved) = scale_x * std::stod(v_coords[this_point]); num_saved++; } // end for } // end while @@ -167,8 +160,7 @@ void user_voxel_init(DCArrayKokkos& elem_values, found = true; } // end if - if (i > 1000) - { + if (i > 1000) { printf("ERROR: Failed to find X_COORDINATES \n"); break; } // end if @@ -185,8 +177,7 @@ void user_voxel_init(DCArrayKokkos& elem_values, std::vector v = split(str, delimiter); // looking for the following text: - if (v[0] == "Y_COORDINATES") - { + if (v[0] == "Y_COORDINATES") { size_t num_saved = 0; while (num_saved < num_points_j - 1) { @@ -198,9 +189,8 @@ void user_voxel_init(DCArrayKokkos& elem_values, std::vector v_coords = split(str, delimiter); // loop over the contents of the vector v_coords - for (size_t this_point = 0; this_point < v_coords.size(); this_point++) - { - pt_coords_y(num_saved) = scale_y*std::stod(v_coords[this_point]); + for (size_t this_point = 0; this_point < v_coords.size(); this_point++) { + pt_coords_y(num_saved) = scale_y * std::stod(v_coords[this_point]); num_saved++; } // end for } // end while @@ -208,8 +198,7 @@ void user_voxel_init(DCArrayKokkos& elem_values, found = true; } // end if - if (i > 1000) - { + if (i > 1000) { printf("ERROR: Failed to find Y_COORDINATES \n"); break; } // end if @@ -226,8 +215,7 @@ void user_voxel_init(DCArrayKokkos& elem_values, std::vector v = split(str, delimiter); // looking for the following text: - if (v[0] == "Z_COORDINATES") - { + if (v[0] == "Z_COORDINATES") { size_t num_saved = 0; while (num_saved < num_points_k - 1) { @@ -239,9 +227,8 @@ void user_voxel_init(DCArrayKokkos& elem_values, std::vector v_coords = split(str, delimiter); // loop over the contents of the vector v_coords - for (size_t this_point = 0; this_point < v_coords.size(); this_point++) - { - pt_coords_z(num_saved) = scale_z*std::stod(v_coords[this_point]); + for (size_t this_point = 0; this_point < v_coords.size(); this_point++) { + pt_coords_z(num_saved) = scale_z * std::stod(v_coords[this_point]); num_saved++; } // end for } // end while @@ -249,8 +236,7 @@ void user_voxel_init(DCArrayKokkos& elem_values, found = true; } // end if - if (i > 1000) - { + if (i > 1000) { printf("ERROR: Failed to find Z_COORDINATES \n"); break; } // end if @@ -285,21 +271,19 @@ void user_voxel_init(DCArrayKokkos& elem_values, std::string str; std::getline(in, str); - std::string delimiter = " "; + std::string delimiter = " "; std::vector v = split(str, delimiter); // looking for the following text: // CELLS num_elems size - if (v[0] == "CELL_DATA") - { + if (v[0] == "CELL_DATA") { num_elems = std::stoi(v[1]); printf("Num voxel elements read in %zu\n", num_elems); found = true; } // end if - if (i > 1000) - { + if (i > 1000) { printf("ERROR: Failed to find CELL_DATA \n"); break; } // end if @@ -321,8 +305,7 @@ void user_voxel_init(DCArrayKokkos& elem_values, std::vector v = split(str, delimiter); // looking for the following text: - if (v[0] == "LOOKUP_TABLE") - { + if (v[0] == "LOOKUP_TABLE") { size_t num_saved = 0; while (num_saved < num_elems - 1) { @@ -334,8 +317,7 @@ void user_voxel_init(DCArrayKokkos& elem_values, std::vector v_values = split(str, delimiter); // loop over the contents of the vector v_coords - for (size_t this_elem = 0; this_elem < v_values.size(); this_elem++) - { + for (size_t this_elem = 0; this_elem < v_values.size(); this_elem++) { // save integers (0 or 1) to host side elem_values.host(num_saved) = std::stoi(v_values[this_elem]); num_saved++; @@ -347,8 +329,7 @@ void user_voxel_init(DCArrayKokkos& elem_values, found = true; } // end if - if (i > 1000) - { + if (i > 1000) { printf("ERROR: Failed to find LOOKUP_TABLE data \n"); break; } // end if @@ -366,45 +347,43 @@ void user_voxel_init(DCArrayKokkos& elem_values, /// /// \fn fill_geometric_region /// -/// \brief a function to calculate whether to fill this element based on the +/// \brief a function to calculate whether to fill this element based on the /// input instructions. The output is /// = 0 then no, do not fill this element /// = 1 then yes, fill this element /// /// \param mesh is the simulation mesh /// \param node_coords is the nodal position array -/// \param voxel_elem_mat_id are the voxel values on a structured i,j,k mesh +/// \param voxel_elem_mat_id are the voxel values on a structured i,j,k mesh /// \param region_fills are the instructures to paint state on the mesh /// \param mesh_coords is the geometric center of the element or a node coordinates /// ///////////////////////////////////////////////////////////////////////////// KOKKOS_FUNCTION size_t fill_geometric_region(const Mesh_t& mesh, - const DCArrayKokkos& voxel_elem_mat_id, - const CArrayKokkos& region_fills, - const ViewCArrayKokkos & mesh_coords, - const double voxel_dx, - const double voxel_dy, - const double voxel_dz, - const double orig_x, - const double orig_y, - const double orig_z, - const size_t voxel_num_i, - const size_t voxel_num_j, - const size_t voxel_num_k, - const size_t f_id) + const DCArrayKokkos& voxel_elem_mat_id, + const CArrayKokkos& region_fills, + const ViewCArrayKokkos& mesh_coords, + const double voxel_dx, + const double voxel_dy, + const double voxel_dz, + const double orig_x, + const double orig_y, + const double orig_z, + const size_t voxel_num_i, + const size_t voxel_num_j, + const size_t voxel_num_k, + const size_t f_id) { - // default is not to fill the element size_t fill_this = 0; - // for shapes with an origin (e.g., sphere and circle), accounting for the origin double dist_x = mesh_coords(0) - region_fills(f_id).origin[0]; double dist_y = mesh_coords(1) - region_fills(f_id).origin[1]; double dist_z = mesh_coords(2) - region_fills(f_id).origin[2]; - // spherical radius + // spherical radius double radius = sqrt(dist_x * dist_x + dist_y * dist_y + dist_z * dist_z); @@ -413,107 +392,96 @@ size_t fill_geometric_region(const Mesh_t& mesh, double radius_cyl = sqrt(dist_x * dist_x + dist_y * dist_y); - // check to see if this element should be filled switch (region_fills(f_id).volume) { - case region::global: - { - fill_this = 1; - break; - } - case region::box: - { - - double x_lower_bound = region_fills(f_id).x1; - double x_upper_bound = region_fills(f_id).x2; - - double y_lower_bound = region_fills(f_id).y1; - double y_upper_bound = region_fills(f_id).y2; - - double z_lower_bound = region_fills(f_id).z1; - double z_upper_bound = region_fills(f_id).z2; - - - if (mesh_coords(0) >= x_lower_bound && mesh_coords(0) <= x_upper_bound && - mesh_coords(1) >= y_lower_bound && mesh_coords(1) <= y_upper_bound && - mesh_coords(2) >= z_lower_bound && mesh_coords(2) <= z_upper_bound) { - fill_this = 1; - } - break; - } - case region::cylinder: - { - if (radius_cyl >= region_fills(f_id).radius1 - && radius_cyl <= region_fills(f_id).radius2) { - fill_this = 1; - } - break; - } - case region::sphere: - { - if (radius >= region_fills(f_id).radius1 - && radius <= region_fills(f_id).radius2) { - fill_this = 1; - } - break; - } - - case region::readVoxelFile: - { - - fill_this = 0; // default is no, don't fill it - - // find the closest element in the voxel mesh to this element - double i0_real = (mesh_coords(0) - orig_x - region_fills(f_id).origin[0]) / (voxel_dx); - double j0_real = (mesh_coords(1) - orig_y - region_fills(f_id).origin[1]) / (voxel_dy); - double k0_real = (mesh_coords(2) - orig_z - region_fills(f_id).origin[2]) / (voxel_dz); - - int i0 = (int)i0_real; - int j0 = (int)j0_real; - int k0 = (int)k0_real; - - // look for the closest element in the voxel mesh - int elem_id0 = get_id_device(i0, j0, k0, voxel_num_i, voxel_num_j); - - // if voxel mesh overlaps this mesh, then fill it if =1 - if (elem_id0 < voxel_elem_mat_id.size() && elem_id0 >= 0 && - i0 >= 0 && j0 >= 0 && k0 >= 0 && - i0 < voxel_num_i && j0 < voxel_num_j && k0 < voxel_num_k) { - // voxel mesh elem values = 0 or 1 - fill_this = voxel_elem_mat_id(elem_id0); // values from file + case region::global: + { + fill_this = 1; + break; + } + case region::box: + { + double x_lower_bound = region_fills(f_id).x1; + double x_upper_bound = region_fills(f_id).x2; - } // end if + double y_lower_bound = region_fills(f_id).y1; + double y_upper_bound = region_fills(f_id).y2; - break; + double z_lower_bound = region_fills(f_id).z1; + double z_upper_bound = region_fills(f_id).z2; - } // end case - case region::no_volume: - { - fill_this = 0; // default is no, don't fill it + if (mesh_coords(0) >= x_lower_bound && mesh_coords(0) <= x_upper_bound + && mesh_coords(1) >= y_lower_bound && mesh_coords(1) <= y_upper_bound + && mesh_coords(2) >= z_lower_bound && mesh_coords(2) <= z_upper_bound) { + fill_this = 1; + } + break; + } + case region::cylinder: + { + if (radius_cyl >= region_fills(f_id).radius1 + && radius_cyl <= region_fills(f_id).radius2) { + fill_this = 1; + } + break; + } + case region::sphere: + { + if (radius >= region_fills(f_id).radius1 + && radius <= region_fills(f_id).radius2) { + fill_this = 1; + } + break; + } - break; - } - default: - { - fill_this = 0; // default is no, don't fill it + case region::readVoxelFile: + { + fill_this = 0; // default is no, don't fill it + + // find the closest element in the voxel mesh to this element + double i0_real = (mesh_coords(0) - orig_x - region_fills(f_id).origin[0]) / (voxel_dx); + double j0_real = (mesh_coords(1) - orig_y - region_fills(f_id).origin[1]) / (voxel_dy); + double k0_real = (mesh_coords(2) - orig_z - region_fills(f_id).origin[2]) / (voxel_dz); + + int i0 = (int)i0_real; + int j0 = (int)j0_real; + int k0 = (int)k0_real; + + // look for the closest element in the voxel mesh + int elem_id0 = get_id_device(i0, j0, k0, voxel_num_i, voxel_num_j); + + // if voxel mesh overlaps this mesh, then fill it if =1 + if (elem_id0 < voxel_elem_mat_id.size() && elem_id0 >= 0 + && i0 >= 0 && j0 >= 0 && k0 >= 0 + && i0 < voxel_num_i && j0 < voxel_num_j && k0 < voxel_num_k) { + // voxel mesh elem values = 0 or 1 + fill_this = voxel_elem_mat_id(elem_id0); // values from file + } // end if + + break; + } // end case + case region::no_volume: + { + fill_this = 0; // default is no, don't fill it - break; - } + break; + } + default: + { + fill_this = 0; // default is no, don't fill it + break; + } } // end of switch - return fill_this; - } // end function - - ///////////////////////////////////////////////////////////////////////////// /// /// \fn paint_gauss_den_sie /// -/// \brief a function to paint den and sie on the Gauss points of the mesh +/// \brief a function to paint den and sie on the Gauss points of the mesh /// /// \param Materials holds the material models and global parameters /// \param mesh is the simulation mesh @@ -529,17 +497,16 @@ size_t fill_geometric_region(const Mesh_t& mesh, ///////////////////////////////////////////////////////////////////////////// KOKKOS_FUNCTION void paint_gauss_den_sie(const Material_t& Materials, - const Mesh_t& mesh, - const DCArrayKokkos & node_coords, - const DCArrayKokkos & GaussPoint_den, - const DCArrayKokkos & GaussPoint_sie, - const DCArrayKokkos & elem_mat_id, - const CArrayKokkos& region_fills, - const ViewCArrayKokkos elem_coords, - const double elem_gid, - const size_t f_id) + const Mesh_t& mesh, + const DCArrayKokkos& node_coords, + const DCArrayKokkos& GaussPoint_den, + const DCArrayKokkos& GaussPoint_sie, + const DCArrayKokkos& elem_mat_id, + const CArrayKokkos& region_fills, + const ViewCArrayKokkos elem_coords, + const double elem_gid, + const size_t f_id) { - // the material id size_t mat_id = region_fills(f_id).material_id; @@ -548,47 +515,40 @@ void paint_gauss_den_sie(const Material_t& Materials, // loop over the Gauss points in the element { - const size_t gauss_gid = elem_gid; // 1 gauss point per element // add test problem state setups here if (region_fills(f_id).velocity == init_conds::tg_vortex) { - - GaussPoint_den(gauss_gid) = 1.0; + GaussPoint_den(gauss_gid) = 1.0; // note: elem_coords are the gauss_coords, higher quadrature requires ref elem data - double pres = 0.25 * (cos(2.0 * PI * elem_coords(0)) + - cos(2.0 * PI * elem_coords(1)) ) + 1.0; + double pres = 0.25 * (cos(2.0 * PI * elem_coords(0)) + + cos(2.0 * PI * elem_coords(1)) ) + 1.0; // p = rho*ie*(gamma - 1) - // makes sure index 0 matches the gamma in the gamma law function - double gamma = Materials.eos_global_vars(mat_id,0); + // makes sure index 0 matches the gamma in the gamma law function + double gamma = Materials.eos_global_vars(mat_id, 0); GaussPoint_sie(gauss_gid) = pres / (GaussPoint_den(gauss_gid) * (gamma - 1.0)); } // end // add user initialization here else{ - // --- density --- GaussPoint_den(gauss_gid) = region_fills(f_id).den; // --- specific internal energy --- GaussPoint_sie(gauss_gid) = region_fills(f_id).sie; - - } // end if - + } // end if } // end loop over gauss points in element' // done setting the element state - } // end function - ///////////////////////////////////////////////////////////////////////////// /// /// \fn paint_node_vel /// -/// \brief a function to paint a velocity field on the nodes of the mesh +/// \brief a function to paint a velocity field on the nodes of the mesh /// /// \param mesh is the simulation mesh /// \param node_vel is the nodal velocity array @@ -600,147 +560,141 @@ void paint_gauss_den_sie(const Material_t& Materials, ///////////////////////////////////////////////////////////////////////////// KOKKOS_FUNCTION void paint_node_vel(const CArrayKokkos& region_fills, - const DCArrayKokkos& node_vel, - const DCArrayKokkos& node_coords, - const double node_gid, - const double num_dims, - const size_t f_id, - const size_t rk_num_bins) + const DCArrayKokkos& node_vel, + const DCArrayKokkos& node_coords, + const double node_gid, + const double num_dims, + const size_t f_id, + const size_t rk_num_bins) { - // save velocity at all rk_levels - for(size_t rk_level=0; rk_level 1.0e-14) { - dir[dim] /= (radius_val); - } - else{ - dir[dim] = 0.0; - } - } // end for - - node_vel(rk_level, node_gid, 0) = region_fills(f_id).speed * dir[0]; - node_vel(rk_level, node_gid, 1) = region_fills(f_id).speed * dir[1]; - if (num_dims == 3) { - node_vel(rk_level, node_gid, 2) = 0.0; - } - - break; - } - case init_conds::spherical: - { - // Setting up spherical - double dir[3]; - dir[0] = 0.0; - dir[1] = 0.0; - dir[2] = 0.0; - double radius_val = 0.0; - - for (int dim = 0; dim < 3; dim++) { - dir[dim] = node_coords(rk_level, node_gid, dim); - radius_val += node_coords(rk_level, node_gid, dim) * node_coords(rk_level, node_gid, dim); - } // end for - radius_val = sqrt(radius_val); - - for (int dim = 0; dim < 3; dim++) { - if (radius_val > 1.0e-14) { - dir[dim] /= (radius_val); - } - else{ - dir[dim] = 0.0; - } - } // end for - - node_vel(rk_level, node_gid, 0) = region_fills(f_id).speed * dir[0]; - node_vel(rk_level, node_gid, 1) = region_fills(f_id).speed * dir[1]; - if (num_dims == 3) { - node_vel(rk_level, node_gid, 2) = region_fills(f_id).speed * dir[2]; - } - - break; - } - case init_conds::radial_linear: - { - printf("**** Radial_linear initial conditions not yet supported ****\n"); - break; - } - case init_conds::spherical_linear: - { - printf("**** spherical_linear initial conditions not yet supported ****\n"); - break; + case init_conds::cartesian: + { + node_vel(rk_level, node_gid, 0) = region_fills(f_id).u; + node_vel(rk_level, node_gid, 1) = region_fills(f_id).v; + if (num_dims == 3) { + node_vel(rk_level, node_gid, 2) = region_fills(f_id).w; + } + + break; + } + // radial in the (x,y) plane where x=r*cos(theta) and y=r*sin(theta) + case init_conds::radial: + { + // Setting up radial + double dir[2]; + dir[0] = 0.0; + dir[1] = 0.0; + double radius_val = 0.0; + + for (int dim = 0; dim < 2; dim++) { + dir[dim] = node_coords(rk_level, node_gid, dim); + radius_val += node_coords(rk_level, node_gid, dim) * node_coords(rk_level, node_gid, dim); + } // end for + radius_val = sqrt(radius_val); + + for (int dim = 0; dim < 2; dim++) { + if (radius_val > 1.0e-14) { + dir[dim] /= (radius_val); } - case init_conds::tg_vortex: - { - node_vel(rk_level, node_gid, 0) = sin(PI * node_coords(rk_level, node_gid, 0)) * - cos(PI * node_coords(rk_level, node_gid, 1)); - node_vel(rk_level, node_gid, 1) = -1.0 * cos(PI * node_coords(rk_level, node_gid, 0)) * - sin(PI * node_coords(rk_level, node_gid, 1)); - if (num_dims == 3) { - node_vel(rk_level, node_gid, 2) = 0.0; - } - - break; + else{ + dir[dim] = 0.0; } + } // end for - case init_conds::no_ic_vel: - { - // no velocity - node_vel(rk_level, node_gid, 0) = 0.0; - node_vel(rk_level, node_gid, 1) = 0.0; - if (num_dims == 3) { - node_vel(rk_level, node_gid, 2) = 0.0; - } + node_vel(rk_level, node_gid, 0) = region_fills(f_id).speed * dir[0]; + node_vel(rk_level, node_gid, 1) = region_fills(f_id).speed * dir[1]; + if (num_dims == 3) { + node_vel(rk_level, node_gid, 2) = 0.0; + } - break; + break; + } + case init_conds::spherical: + { + // Setting up spherical + double dir[3]; + dir[0] = 0.0; + dir[1] = 0.0; + dir[2] = 0.0; + double radius_val = 0.0; + + for (int dim = 0; dim < 3; dim++) { + dir[dim] = node_coords(rk_level, node_gid, dim); + radius_val += node_coords(rk_level, node_gid, dim) * node_coords(rk_level, node_gid, dim); + } // end for + radius_val = sqrt(radius_val); + + for (int dim = 0; dim < 3; dim++) { + if (radius_val > 1.0e-14) { + dir[dim] /= (radius_val); } - default: - { - // no velocity - node_vel(rk_level, node_gid, 0) = 0.0; - node_vel(rk_level, node_gid, 1) = 0.0; - if (num_dims == 3) { - node_vel(rk_level, node_gid, 2) = 0.0; - } - - break; + else{ + dir[dim] = 0.0; } - } // end of switch + } // end for - } // end loop over rk_num_bins + node_vel(rk_level, node_gid, 0) = region_fills(f_id).speed * dir[0]; + node_vel(rk_level, node_gid, 1) = region_fills(f_id).speed * dir[1]; + if (num_dims == 3) { + node_vel(rk_level, node_gid, 2) = region_fills(f_id).speed * dir[2]; + } + + break; + } + case init_conds::radial_linear: + { + printf("**** Radial_linear initial conditions not yet supported ****\n"); + break; + } + case init_conds::spherical_linear: + { + printf("**** spherical_linear initial conditions not yet supported ****\n"); + break; + } + case init_conds::tg_vortex: + { + node_vel(rk_level, node_gid, 0) = sin(PI * node_coords(rk_level, node_gid, 0)) * + cos(PI * node_coords(rk_level, node_gid, 1)); + node_vel(rk_level, node_gid, 1) = -1.0 * cos(PI * node_coords(rk_level, node_gid, 0)) * + sin(PI * node_coords(rk_level, node_gid, 1)); + if (num_dims == 3) { + node_vel(rk_level, node_gid, 2) = 0.0; + } + + break; + } + case init_conds::no_ic_vel: + { + // no velocity + node_vel(rk_level, node_gid, 0) = 0.0; + node_vel(rk_level, node_gid, 1) = 0.0; + if (num_dims == 3) { + node_vel(rk_level, node_gid, 2) = 0.0; + } - // done setting the velocity -} // end function paint_node_vel + break; + } + default: + { + // no velocity + node_vel(rk_level, node_gid, 0) = 0.0; + node_vel(rk_level, node_gid, 1) = 0.0; + if (num_dims == 3) { + node_vel(rk_level, node_gid, 2) = 0.0; + } + break; + } + } // end of switch + } // end loop over rk_num_bins + // done setting the velocity +} // end function paint_node_vel ///////////////////////////////////////////////////////////////////////////// /// @@ -762,19 +716,17 @@ void paint_node_vel(const CArrayKokkos& region_fills, /// ///////////////////////////////////////////////////////////////////////////// void init_press_sspd_stress(const Material_t& Materials, - const Mesh_t& mesh, - const DCArrayKokkos& MaterialPoints_den, - const DCArrayKokkos& MaterialPoints_pres, - const DCArrayKokkos& MaterialPoints_stress, - const DCArrayKokkos& MaterialPoints_sspd, - const DCArrayKokkos& MaterialPoints_sie, - const DCArrayKokkos& MaterialPoints_statev, - const size_t rk_num_bins, - const size_t num_mat_pts, - const size_t mat_id) + const Mesh_t& mesh, + const DCArrayKokkos& MaterialPoints_den, + const DCArrayKokkos& MaterialPoints_pres, + const DCArrayKokkos& MaterialPoints_stress, + const DCArrayKokkos& MaterialPoints_sspd, + const DCArrayKokkos& MaterialPoints_sie, + const DCArrayKokkos& MaterialPoints_statev, + const size_t rk_num_bins, + const size_t num_mat_pts, + const size_t mat_id) { - - // ------- // the call to the model initialization goes here // ------- @@ -782,7 +734,6 @@ void init_press_sspd_stress(const Material_t& Materials, // --- pressure and sound speed --- // loop over the material points FOR_ALL(mat_point_lid, 0, num_mat_pts, { - // --- Pressure --- Materials.MaterialFunctions(mat_id).calc_pressure( MaterialPoints_pres, @@ -793,9 +744,9 @@ void init_press_sspd_stress(const Material_t& Materials, MaterialPoints_sspd, MaterialPoints_den(mat_point_lid), MaterialPoints_sie(0, mat_point_lid), - Materials.eos_global_vars); + Materials.eos_global_vars); - // --- Sound Speed --- + // --- Sound Speed --- Materials.MaterialFunctions(mat_id).calc_sound_speed( MaterialPoints_pres, MaterialPoints_stress, @@ -808,27 +759,19 @@ void init_press_sspd_stress(const Material_t& Materials, Materials.eos_global_vars); }); // end pressure and sound speed - // --- stress tensor --- - for(size_t rk_level=0; rk_level& node_coords, - const DCArrayKokkos& node_mass, - const DCArrayKokkos& corner_mass, - const DCArrayKokkos& MaterialPoints_mass, - const DCArrayKokkos& MaterialToMeshMaps_elem, - const size_t num_mat_elems) + const Mesh_t& mesh, + const DCArrayKokkos& node_coords, + const DCArrayKokkos& node_mass, + const DCArrayKokkos& corner_mass, + const DCArrayKokkos& MaterialPoints_mass, + const DCArrayKokkos& MaterialToMeshMaps_elem, + const size_t num_mat_elems) { - - FOR_ALL(mat_elem_lid, 0, num_mat_elems, { - // get elem gid - size_t elem_gid = MaterialToMeshMaps_elem(mat_elem_lid); + size_t elem_gid = MaterialToMeshMaps_elem(mat_elem_lid); // calculate the fraction of matpt mass to scatter to each corner - double corner_frac = 1.0/((double)mesh.num_nodes_in_elem); // =1/8 - + double corner_frac = 1.0 / ((double)mesh.num_nodes_in_elem); // =1/8 + // partion the mass to the corners - for(size_t corner_lid=0; corner_lid& node_coords, - const DCArrayKokkos& node_mass, - const DCArrayKokkos& corner_mass) + const DCArrayKokkos& node_coords, + const DCArrayKokkos& node_mass, + const DCArrayKokkos& corner_mass) { - - FOR_ALL(node_gid, 0, mesh.num_nodes, { for (size_t corner_lid = 0; corner_lid < mesh.num_corners_in_node(node_gid); corner_lid++) { - size_t corner_gid = mesh.corners_in_node(node_gid, corner_lid); node_mass(node_gid) += corner_mass(corner_gid); } // end for elem_lid }); // end parallel loop over nodes in the mesh - } // end function calculate node mass - - - #endif \ No newline at end of file diff --git a/single-node-refactor/src/common/simulation_parameters.h b/single-node-refactor/src/common/simulation_parameters.h index 4e82a7cbb..99a20a868 100644 --- a/single-node-refactor/src/common/simulation_parameters.h +++ b/single-node-refactor/src/common/simulation_parameters.h @@ -63,9 +63,8 @@ struct SimulationParameters_t std::vector solver_inputs; ///< Solvers to use during the simulation CArrayKokkos region_fills; ///< Region data for simulation mesh, set the initial conditions - - CArray region_fills_host; ///< Region data on CPU, set the initial conditions + CArray region_fills_host; ///< Region data on CPU, set the initial conditions }; // simulation_parameters_t #endif // end Header Guard \ No newline at end of file diff --git a/single-node-refactor/src/common/state.h b/single-node-refactor/src/common/state.h index 0de7f2ff2..58c039a8f 100644 --- a/single-node-refactor/src/common/state.h +++ b/single-node-refactor/src/common/state.h @@ -38,12 +38,6 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. using namespace mtr; - - - - - - ///////////////////////////////////////////////////////////////////////////// /// /// \struct node_t @@ -66,8 +60,6 @@ struct node_t }; // end method }; // end node_t - - ///////////////////////////////////////////////////////////////////////////// /// /// \struct GaussPoint_t @@ -77,23 +69,19 @@ struct node_t ///////////////////////////////////////////////////////////////////////////// struct GaussPoint_t { - //const size_t num_bins = 3; + // const size_t num_bins = 3; DCArrayKokkos vol; ///< GaussPoint volume DCArrayKokkos div; ///< GaussPoint divergence of velocity - // initialization method (num_rk_storage_bins, num_cells, num_dims) void initialize(size_t num_rk, size_t num_gauss_pnts, size_t num_dims) { - this->vol = DCArrayKokkos(num_gauss_pnts, "gauss_point_volume"); - this->div = DCArrayKokkos(num_gauss_pnts, "gauss_point_div"); - + this->vol = DCArrayKokkos(num_gauss_pnts, "gauss_point_volume"); + this->div = DCArrayKokkos(num_gauss_pnts, "gauss_point_div"); }; // end method - }; // end GuassPoint_t - ///////////////////////////////////////////////////////////////////////////// /// /// \struct MaterialtoMeshMap_t @@ -110,15 +98,10 @@ struct MaterialToMeshMap_t // initialization method for FE-SGH and MPM methods (max number of elems needed) void initialize(size_t num_elem_max) { - this->elem = DCArrayKokkos(num_elem_max, "material_pt_to_elem"); + this->elem = DCArrayKokkos(num_elem_max, "material_pt_to_elem"); }; // end method - - }; // end MaterialtoMeshMaps_t - - - ///////////////////////////////////////////////////////////////////////////// /// /// \struct MaterialPoint_t @@ -135,7 +118,7 @@ struct MaterialPoint_t DCArrayKokkos stress; ///< MaterialPoint stress DCArrayKokkos sspd; ///< MaterialPoint sound speed DCArrayKokkos mass; ///< MaterialPoint mass - + DCArrayKokkos eroded; ///< MaterialPoint eroded or not flag DCArrayKokkos sie; ///< coefficients for the sie in strong form, only used in some methods e.g., FE-SGH and MPM @@ -145,7 +128,6 @@ struct MaterialPoint_t DCArrayKokkos eos_state_vars; ///< Array of state variables for the EOS DCArrayKokkos strength_state_vars; ///< Array of state variables for the strength - // initialization method (num_rk_storage_bins, num_pts_max, num_dims) void initialize(size_t num_rk, size_t num_pts_max, size_t num_dims) { @@ -167,10 +149,8 @@ struct MaterialPoint_t this->sspd = DCArrayKokkos(num_pts_max, "material_point_sspd"); this->mass = DCArrayKokkos(num_pts_max, "material_point_mass"); }; // end method - }; // end MaterialPoint - ///////////////////////////////////////////////////////////////////////////// /// /// \struct MaterialZone_t @@ -189,10 +169,8 @@ struct MaterialZone_t { this->sie = DCArrayKokkos(num_rk, num_zones_max, "material_zone_sie"); }; // end method - }; // end MaterialZone_t - ///////////////////////////////////////////////////////////////////////////// /// /// \struct MaterialCorner_t @@ -200,20 +178,18 @@ struct MaterialZone_t /// \brief Stores state information associated with a material in an element corner /// ///////////////////////////////////////////////////////////////////////////// -struct MaterialCorner_t +struct MaterialCorner_t { size_t num_material_corners; ///< the actual number of material corners, omitting the buffer DCArrayKokkos force; ///< Corner force for the material - + // initialization method (num_corners, num_dims) void initialize(size_t num_corners_max, size_t num_dims) { - this->force = DCArrayKokkos(num_corners_max, num_dims, "material_corner_force"); + this->force = DCArrayKokkos(num_corners_max, num_dims, "material_corner_force"); }; // end method -}; // end material corner - - +}; // end material corner ///////////////////////////////////////////////////////////////////////////// /// @@ -235,7 +211,6 @@ struct corner_t }; // end method }; // end corner_t - ///////////////////////////////////////////////////////////////////////////// /// /// \struct map for getting the corners in the material index @@ -357,7 +332,6 @@ struct lobatto_in_mat_t }; }; - // the local id for material points in elem struct points_in_mat_t { @@ -397,30 +371,28 @@ struct State_t // --------------------------------------------------------------------- // state data on mesh declarations // --------------------------------------------------------------------- - node_t node; + node_t node; GaussPoint_t GaussPoints; - corner_t corner; + corner_t corner; // --------------------------------------------------------------------- // material to mesh maps // --------------------------------------------------------------------- - CArray MaterialToMeshMaps; ///< access as MaterialToMeshMaps(mat_id).elem(mat_storage_lid) - + CArray MaterialToMeshMaps; ///< access as MaterialToMeshMaps(mat_id).elem(mat_storage_lid) // --------------------------------------------------------------------- // materialto material maps // --------------------------------------------------------------------- corners_in_mat_t corners_in_mat_elem; ///< access the corner mat lid using (mat_elem_lid, corn_lid) - points_in_mat_t points_in_mat_elem; ///< for accessing e.g., guass points mat lid with arbitrary-order FE - zones_in_mat_t zones_in_mat_elem; ///< for accessing sub-zones mat lid with arbitrary-order FE + points_in_mat_t points_in_mat_elem; ///< for accessing e.g., guass points mat lid with arbitrary-order FE + zones_in_mat_t zones_in_mat_elem; ///< for accessing sub-zones mat lid with arbitrary-order FE // --------------------------------------------------------------------- // material state, compressed, and sequentially accessed // --------------------------------------------------------------------- - CArray MaterialPoints; ///< access as MaterialPoints(mat_id).var(mat_pt) + CArray MaterialPoints; ///< access as MaterialPoints(mat_id).var(mat_pt) CArray MaterialCorners; ///< access as MaterialCorners(mat_id).var(mat_corner), not used with MPM - CArray MaterialZones; ///< access as MaterialZones(mat_id).var(mat_zone), only used with arbitrary-order FE - + CArray MaterialZones; ///< access as MaterialZones(mat_id).var(mat_zone), only used with arbitrary-order FE }; // end state_t #endif \ No newline at end of file diff --git a/single-node-refactor/src/common/string_utils.h b/single-node-refactor/src/common/string_utils.h index b4b230e64..ce44f1d71 100644 --- a/single-node-refactor/src/common/string_utils.h +++ b/single-node-refactor/src/common/string_utils.h @@ -36,8 +36,6 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include - - const std::string WHITESPACE = " "; ///////////////////////////////////////////////////////////////////////////// @@ -48,14 +46,14 @@ const std::string WHITESPACE = " "; /// /// \param Input string /// \param delimiter -/// +/// /// \return Vector of split string values /// ///////////////////////////////////////////////////////////////////////////// inline std::vector split(std::string s, std::string delimiter) { - size_t pos_start = 0, pos_end, delim_len = delimiter.length(); - std::string token; + size_t pos_start = 0, pos_end, delim_len = delimiter.length(); + std::string token; std::vector res; while ((pos_end = s.find(delimiter, pos_start)) != std::string::npos) { @@ -76,7 +74,7 @@ inline std::vector split(std::string s, std::string delimiter) /// /// \param Input string /// \param delimiter -/// +/// /// \return Vector of split string values /// ///////////////////////////////////////////////////////////////////////////// @@ -101,7 +99,6 @@ inline std::vector exact_array_values(std::string s, std::string de return res; } // end of extract_array_values - ///////////////////////////////////////////////////////////////////////////// /// /// \fn exact_array_values @@ -110,7 +107,7 @@ inline std::vector exact_array_values(std::string s, std::string de /// /// \param Input string /// \param delimiter -/// +/// /// \return Vector of split double values /// ///////////////////////////////////////////////////////////////////////////// @@ -121,39 +118,82 @@ inline std::vector extract_list(std::string str) std::replace(str.begin(), str.end(), ']', ' '); std::vector str_values; - std::vector values; + std::vector values; // exact the str values into a vector str_values = split(str, ","); // convert the text values into double values - for (auto& word : str_values) - { + for (auto& word : str_values) { values.push_back(atof(word.c_str()) ); } // end for return values; } // end of extract_list - - +///////////////////////////////////////////////////////////////////////////// +/// +/// \fn ltrim +/// +/// \brief +/// +/// +/// +/// \param +/// \param +/// \param +/// +/// \return +/// +///////////////////////////////////////////////////////////////////////////// inline std::string ltrim(const std::string& s) { size_t start = s.find_first_not_of(WHITESPACE); return (start == std::string::npos) ? "" : s.substr(start); } - +///////////////////////////////////////////////////////////////////////////// +/// +/// \fn rtrim +/// +/// \brief +/// +/// +/// +/// \param +/// \param +/// \param +/// +/// \return +/// +///////////////////////////////////////////////////////////////////////////// inline std::string rtrim(const std::string& s) { size_t end = s.find_last_not_of(WHITESPACE); return (end == std::string::npos) ? "" : s.substr(0, end + 1); } +///////////////////////////////////////////////////////////////////////////// +/// +/// \fn trim +/// +/// \brief +/// +/// +/// +/// \param +/// \param +/// \param +/// +/// \return +/// +///////////////////////////////////////////////////////////////////////////// inline std::string trim(const std::string& s) { return rtrim(ltrim(s)); } - #endif \ No newline at end of file diff --git a/single-node-refactor/src/driver.cpp b/single-node-refactor/src/driver.cpp index 8b0b4bbbe..eaaf0f07b 100644 --- a/single-node-refactor/src/driver.cpp +++ b/single-node-refactor/src/driver.cpp @@ -59,9 +59,7 @@ void Driver::initialize() std::cout << "Mesh file path: " << SimulationParamaters.mesh_input.file_path << std::endl; mesh_reader.set_mesh_file(SimulationParamaters.mesh_input.file_path.data()); mesh_reader.read_mesh(mesh, - State.GaussPoints, - State.node, - State.corner, + State, num_dims, SimulationParamaters.dynamic_options.rk_num_bins); } From 280403f9f6336bfb3a317c7ac93c90b02225e56a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CAdrian-Diaz=E2=80=9D?= <“adriandiaz1117@gmail.com”> Date: Thu, 15 Aug 2024 01:15:16 -0600 Subject: [PATCH 122/233] WIP: refactor adjoint equations for generic objective --- src/Parallel-Solvers/FEA_Module.h | 4 ++ .../Fierro_Optimization_Objective.hpp | 10 ++++ .../SGH_Solver/src/FEA_Module_SGH.cpp | 2 +- .../SGH_Solver/src/sgh_optimization.cpp | 52 +++++++++++++------ 4 files changed, 51 insertions(+), 17 deletions(-) diff --git a/src/Parallel-Solvers/FEA_Module.h b/src/Parallel-Solvers/FEA_Module.h index 954ec2119..ecd33b2ad 100644 --- a/src/Parallel-Solvers/FEA_Module.h +++ b/src/Parallel-Solvers/FEA_Module.h @@ -67,6 +67,7 @@ class Problem; } // namespace ROL class Simulation_Parameters; +class FierroOptimizationObjective; enum class FEA_MODULE_TYPE; enum class BOUNDARY_TYPE; @@ -349,6 +350,9 @@ class FEA_Module // patch ids in bdy set size_t num_bdy_sets; DynamicRaggedRightArrayKokkos bdy_patches_in_set; + + //optimization data + FierroOptimizationObjective* objective_function; }; #endif // end HEADER_H diff --git a/src/Parallel-Solvers/Optimization_Modules/Fierro_Optimization_Objective.hpp b/src/Parallel-Solvers/Optimization_Modules/Fierro_Optimization_Objective.hpp index 6aad228bf..0bd516100 100644 --- a/src/Parallel-Solvers/Optimization_Modules/Fierro_Optimization_Objective.hpp +++ b/src/Parallel-Solvers/Optimization_Modules/Fierro_Optimization_Objective.hpp @@ -134,6 +134,16 @@ class FierroOptimizationObjective : public ROL::Objective { objective_accumulation = global_objective_accumulation; } + + //NOTE: these functions assign for every component of the gradient vector + //contributes to rate of change of adjoint vector due to term with velocity gradient of objective + virtual void velocity_gradient_adjoint_contribution(vec_array& adjoint_rate_vector){} + + //contributes to rate of change of adjoint vector due to term with displacement gradient of objective + virtual void displacement_gradient_adjoint_contribution(vec_array& adjoint_rate_vector){} + + //contributes to rate of change of adjoint vector due to term with specific internal energy gradient of objective + virtual void sie_gradient_adjoint_contribution(vec_array& adjoint_rate_vector){} }; // class ObjectiveMMA diff --git a/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/FEA_Module_SGH.cpp b/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/FEA_Module_SGH.cpp index 7d4a5d69b..1a429d02a 100644 --- a/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/FEA_Module_SGH.cpp +++ b/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/FEA_Module_SGH.cpp @@ -926,7 +926,7 @@ void FEA_Module_SGH::sgh_solve() std::vector> FEA_Module_My_TO_Modules = simparam->FEA_Module_My_TO_Modules; problem = Explicit_Solver_Pointer_->problem; // Pointer to ROL optimization problem object ROL::Ptr> obj_pointer; - FierroOptimizationObjective* objective_function; + bool topology_optimization_on = simparam->topology_optimization_on; bool shape_optimization_on = simparam->shape_optimization_on; bool use_solve_checkpoints = simparam->optimization_options.use_solve_checkpoints; diff --git a/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/sgh_optimization.cpp b/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/sgh_optimization.cpp index c1c68234a..4b47a9403 100644 --- a/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/sgh_optimization.cpp +++ b/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/sgh_optimization.cpp @@ -915,10 +915,10 @@ void FEA_Module_SGH::compute_topology_optimization_adjoint_full(Teuchos::RCPvelocity_gradient_adjoint_contribution(midpoint_adjoint_vector); + FOR_ALL_CLASS(node_gid, 0, nlocal_nodes, { + real_t rate_of_change; + for (int idim = 0; idim < num_dim; idim++) { + rate_of_change = midpoint_adjoint_vector(node_gid, idim); + midpoint_adjoint_vector(node_gid, idim) = -rate_of_change * global_dt / node_mass(node_gid)/ 2 + previous_adjoint_vector(node_gid, idim); + } + }); // end parallel for + Kokkos::fence(); + // half step update for RK2 scheme; EQUATION 2 FOR_ALL_CLASS(node_gid, 0, nlocal_nodes, { real_t rate_of_change; @@ -1257,10 +1267,10 @@ void FEA_Module_SGH::compute_topology_optimization_adjoint_full(Teuchos::RCPvelocity_gradient_adjoint_contribution(current_adjoint_vector); + FOR_ALL_CLASS(node_gid, 0, nlocal_nodes, { + real_t rate_of_change; + for (int idim = 0; idim < num_dim; idim++) { + rate_of_change = current_adjoint_vector(node_gid, idim); + current_adjoint_vector(node_gid, idim) = -rate_of_change * global_dt / node_mass(node_gid) + previous_adjoint_vector(node_gid, idim); + } + }); // end parallel for + Kokkos::fence(); + // full step update with midpoint gradient for RK2 scheme; EQUATION 2 FOR_ALL_CLASS(node_gid, 0, nlocal_nodes, { real_t rate_of_change; From 609bbd37bb6d702285ce38aad87bb2cf9a4cdc72 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CAdrian-Diaz=E2=80=9D?= <“adriandiaz1117@gmail.com”> Date: Thu, 15 Aug 2024 12:18:45 -0600 Subject: [PATCH 123/233] WIP: refactor adjoint for generic objective --- .../Fierro_Optimization_Objective.hpp | 15 ++++- .../SGH_Solver/src/sgh_optimization.cpp | 67 +++++++++---------- .../Kinetic_Energy_Minimize.h | 16 +++++ 3 files changed, 60 insertions(+), 38 deletions(-) diff --git a/src/Parallel-Solvers/Optimization_Modules/Fierro_Optimization_Objective.hpp b/src/Parallel-Solvers/Optimization_Modules/Fierro_Optimization_Objective.hpp index 0bd516100..25928162b 100644 --- a/src/Parallel-Solvers/Optimization_Modules/Fierro_Optimization_Objective.hpp +++ b/src/Parallel-Solvers/Optimization_Modules/Fierro_Optimization_Objective.hpp @@ -137,13 +137,22 @@ class FierroOptimizationObjective : public ROL::Objective { //NOTE: these functions assign for every component of the gradient vector //contributes to rate of change of adjoint vector due to term with velocity gradient of objective - virtual void velocity_gradient_adjoint_contribution(vec_array& adjoint_rate_vector){} + virtual void velocity_gradient_adjoint_contribution(vec_array& adjoint_rate_vector, const DViewCArrayKokkos& node_mass, + const DViewCArrayKokkos& elem_mass, const DViewCArrayKokkos& node_vel, + const DViewCArrayKokkos& node_coords, const DViewCArrayKokkos& elem_sie, + const size_t& rk_level){} //contributes to rate of change of adjoint vector due to term with displacement gradient of objective - virtual void displacement_gradient_adjoint_contribution(vec_array& adjoint_rate_vector){} + virtual void displacement_gradient_adjoint_contribution(vec_array& adjoint_rate_vector, const DViewCArrayKokkos& node_mass, + const DViewCArrayKokkos& elem_mass, const DViewCArrayKokkos& node_vel, + const DViewCArrayKokkos& node_coords, const DViewCArrayKokkos& elem_sie, + const size_t& rk_level){} //contributes to rate of change of adjoint vector due to term with specific internal energy gradient of objective - virtual void sie_gradient_adjoint_contribution(vec_array& adjoint_rate_vector){} + virtual void sie_gradient_adjoint_contribution(vec_array& adjoint_rate_vector, const DViewCArrayKokkos& node_mass, + const DViewCArrayKokkos& elem_mass, const DViewCArrayKokkos& node_vel, + const DViewCArrayKokkos& node_coords, const DViewCArrayKokkos& elem_sie, + const size_t& rk_level){} }; // class ObjectiveMMA diff --git a/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/sgh_optimization.cpp b/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/sgh_optimization.cpp index 4b47a9403..9358339e8 100644 --- a/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/sgh_optimization.cpp +++ b/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/sgh_optimization.cpp @@ -674,7 +674,7 @@ void FEA_Module_SGH::compute_topology_optimization_adjoint_full(Teuchos::RCPgetLocalView(Tpetra::Access::ReadOnly); psi_previous_adjoint_vector = (*psi_adjoint_vector_data)[cycle + 1]->getLocalView(Tpetra::Access::ReadOnly); } + + adjoint_vector_distributed->putScalar(0); + phi_adjoint_vector_distributed->putScalar(0); + psi_adjoint_vector_distributed->putScalar(0); vec_array midpoint_adjoint_vector = adjoint_vector_distributed->getLocalView(Tpetra::Access::ReadWrite); vec_array phi_midpoint_adjoint_vector = phi_adjoint_vector_distributed->getLocalView(Tpetra::Access::ReadWrite); vec_array psi_midpoint_adjoint_vector = psi_adjoint_vector_distributed->getLocalView(Tpetra::Access::ReadWrite); + // half step update for RK2 scheme; EQUATION 1 + objective_function->velocity_gradient_adjoint_contribution(midpoint_adjoint_vector, node_mass, elem_mass, node_vel, node_coords, elem_sie, rk_level); + if(optimization_objective_regions.size()){ int nobj_volumes = optimization_objective_regions.size(); const_vec_array all_initial_node_coords = all_initial_node_coords_distributed->getLocalView(Tpetra::Access::ReadOnly); @@ -915,10 +922,10 @@ void FEA_Module_SGH::compute_topology_optimization_adjoint_full(Teuchos::RCPvelocity_gradient_adjoint_contribution(midpoint_adjoint_vector); - FOR_ALL_CLASS(node_gid, 0, nlocal_nodes, { - real_t rate_of_change; - for (int idim = 0; idim < num_dim; idim++) { - rate_of_change = midpoint_adjoint_vector(node_gid, idim); - midpoint_adjoint_vector(node_gid, idim) = -rate_of_change * global_dt / node_mass(node_gid)/ 2 + previous_adjoint_vector(node_gid, idim); - } - }); // end parallel for - Kokkos::fence(); - // half step update for RK2 scheme; EQUATION 2 + objective_function->displacement_gradient_adjoint_contribution(phi_midpoint_adjoint_vector, node_mass, elem_mass, node_vel, node_coords, elem_sie, rk_level); FOR_ALL_CLASS(node_gid, 0, nlocal_nodes, { real_t rate_of_change; real_t matrix_contribution; @@ -982,9 +980,9 @@ void FEA_Module_SGH::compute_topology_optimization_adjoint_full(Teuchos::RCPdescribe(*fos,Teuchos::VERB_EXTREME); // half step update for RK2 scheme; EQUATION 3 + objective_function->sie_gradient_adjoint_contribution(psi_midpoint_adjoint_vector, node_mass, elem_mass, node_vel, node_coords, elem_sie, rk_level); FOR_ALL_CLASS(elem_gid, 0, rnum_elem, { real_t rate_of_change; real_t matrix_contribution; @@ -1004,9 +1003,9 @@ void FEA_Module_SGH::compute_topology_optimization_adjoint_full(Teuchos::RCPputScalar(0); + phi_adjoint_vector_distributed->putScalar(0); + psi_adjoint_vector_distributed->putScalar(0); vec_array current_adjoint_vector = adjoint_vector_distributed->getLocalView(Tpetra::Access::ReadWrite); vec_array phi_current_adjoint_vector = phi_adjoint_vector_distributed->getLocalView(Tpetra::Access::ReadWrite); vec_array psi_current_adjoint_vector = psi_adjoint_vector_distributed->getLocalView(Tpetra::Access::ReadWrite); + if(use_solve_checkpoints){ midpoint_adjoint_vector = midpoint_adjoint_vector_distributed->getLocalView(Tpetra::Access::ReadWrite); phi_midpoint_adjoint_vector = midpoint_phi_adjoint_vector_distributed->getLocalView(Tpetra::Access::ReadWrite); @@ -1232,6 +1235,7 @@ void FEA_Module_SGH::compute_topology_optimization_adjoint_full(Teuchos::RCPCPU_Time(); // full step update with midpoint gradient for RK2 scheme; EQUATION 1 + objective_function->velocity_gradient_adjoint_contribution(current_adjoint_vector, node_mass, elem_mass, node_vel, node_coords, elem_sie, rk_level); if(optimization_objective_regions.size()){ int nobj_volumes = optimization_objective_regions.size(); const_vec_array all_initial_node_coords = all_initial_node_coords_distributed->getLocalView(Tpetra::Access::ReadOnly); @@ -1267,10 +1271,10 @@ void FEA_Module_SGH::compute_topology_optimization_adjoint_full(Teuchos::RCPvelocity_gradient_adjoint_contribution(current_adjoint_vector); - FOR_ALL_CLASS(node_gid, 0, nlocal_nodes, { - real_t rate_of_change; - for (int idim = 0; idim < num_dim; idim++) { - rate_of_change = current_adjoint_vector(node_gid, idim); - current_adjoint_vector(node_gid, idim) = -rate_of_change * global_dt / node_mass(node_gid) + previous_adjoint_vector(node_gid, idim); - } - }); // end parallel for - Kokkos::fence(); // full step update with midpoint gradient for RK2 scheme; EQUATION 2 + objective_function->displacement_gradient_adjoint_contribution(phi_current_adjoint_vector, node_mass, elem_mass, node_vel, node_coords, elem_sie, rk_level); FOR_ALL_CLASS(node_gid, 0, nlocal_nodes, { real_t rate_of_change; real_t matrix_contribution; @@ -1336,7 +1332,7 @@ void FEA_Module_SGH::compute_topology_optimization_adjoint_full(Teuchos::RCPsie_gradient_adjoint_contribution(psi_current_adjoint_vector, node_mass, elem_mass, node_vel, node_coords, elem_sie, rk_level); FOR_ALL_CLASS(elem_gid, 0, rnum_elem, { real_t rate_of_change; real_t matrix_contribution; @@ -1356,10 +1353,10 @@ void FEA_Module_SGH::compute_topology_optimization_adjoint_full(Teuchos::RCPmyrank << std::endl; } + + //contributes to rate of change of adjoint vector due to term with velocity gradient of objective + void velocity_gradient_adjoint_contribution(vec_array& adjoint_rate_vector, const DViewCArrayKokkos& node_mass, + const DViewCArrayKokkos& elem_mass, const DViewCArrayKokkos& node_vel, + const DViewCArrayKokkos& node_coords, const DViewCArrayKokkos& elem_sie, + const size_t& rk_level){ + + + FOR_ALL_CLASS(node_gid, 0, nlocal_nodes, { + for (int idim = 0; idim < num_dim; idim++) { + adjoint_rate_vector(node_gid, idim) = node_mass(node_gid)*node_vel(rk_level, node_gid, idim); + } + }); // end parallel for + Kokkos::fence(); + } + }; #endif // end header guard From 74714954b2044f8940d9e9b8c8f5d56d458d9bf2 Mon Sep 17 00:00:00 2001 From: Nathaniel Morgan Date: Thu, 15 Aug 2024 15:44:09 -0600 Subject: [PATCH 124/233] WIP creating a rz SGH solver --- single-node-refactor/src/CMakeLists.txt | 22 +- .../src/Solvers/SGH_solver_rz/CMakeLists.txt | 35 + .../SGH_solver_rz/include/sgh_solver_rz.h | 347 +++++++++ .../Solvers/SGH_solver_rz/src/boundary_rz.cpp | 106 +++ .../SGH_solver_rz/src/energy_sgh_rz.cpp | 120 +++ .../SGH_solver_rz/src/force_sgh_rz.cpp | 435 +++++++++++ .../Solvers/SGH_solver_rz/src/momentum_rz.cpp | 287 +++++++ .../Solvers/SGH_solver_rz/src/position_rz.cpp | 64 ++ .../SGH_solver_rz/src/properties_rz.cpp | 276 +++++++ .../SGH_solver_rz/src/sgh_execute_rz.cpp | 731 ++++++++++++++++++ .../SGH_solver_rz/src/sgh_setup_rz.cpp | 527 +++++++++++++ .../SGH_solver_rz/src/time_integration_rz.cpp | 196 +++++ single-node-refactor/src/common/mesh_io.h | 4 +- 13 files changed, 3132 insertions(+), 18 deletions(-) create mode 100755 single-node-refactor/src/Solvers/SGH_solver_rz/CMakeLists.txt create mode 100644 single-node-refactor/src/Solvers/SGH_solver_rz/include/sgh_solver_rz.h create mode 100644 single-node-refactor/src/Solvers/SGH_solver_rz/src/boundary_rz.cpp create mode 100644 single-node-refactor/src/Solvers/SGH_solver_rz/src/energy_sgh_rz.cpp create mode 100644 single-node-refactor/src/Solvers/SGH_solver_rz/src/force_sgh_rz.cpp create mode 100644 single-node-refactor/src/Solvers/SGH_solver_rz/src/momentum_rz.cpp create mode 100644 single-node-refactor/src/Solvers/SGH_solver_rz/src/position_rz.cpp create mode 100644 single-node-refactor/src/Solvers/SGH_solver_rz/src/properties_rz.cpp create mode 100644 single-node-refactor/src/Solvers/SGH_solver_rz/src/sgh_execute_rz.cpp create mode 100644 single-node-refactor/src/Solvers/SGH_solver_rz/src/sgh_setup_rz.cpp create mode 100644 single-node-refactor/src/Solvers/SGH_solver_rz/src/time_integration_rz.cpp diff --git a/single-node-refactor/src/CMakeLists.txt b/single-node-refactor/src/CMakeLists.txt index 178bd425f..b79abb997 100755 --- a/single-node-refactor/src/CMakeLists.txt +++ b/single-node-refactor/src/CMakeLists.txt @@ -39,25 +39,9 @@ find_package(Kokkos REQUIRED) find_package(Matar REQUIRED) -# if(BUILD_KOKKOS_SGH) -# # if(NOT BUILD_IMPLICIT_SOLVER) -# # find_package(Kokkos REQUIRED) -# # add_definitions(-DHAVE_KOKKOS=1#) -# # endif() -# # include_directories(Solvers/SGH_solver) -# # include_directories(Solvers/SGH_solver/include) -# add_subdirectory(Solvers/SGH_solver) -# endif() -# if(BUILD_KOKKOS_SGH) -# message("\nbuilding SGH! Here are the details: ") - -# add_subdirectory(Solvers/SGH_solver) -# endif() - - message("\n ****** ADDING FIERRO EXECUTABLE ******** \n ") @@ -80,5 +64,9 @@ include_directories(common) include_directories(Solvers/SGH_solver/include) add_subdirectory(Solvers/SGH_solver) +# Add SGH RZ Solver +include_directories(Solvers/SGH_solver_rz/include) +add_subdirectory(Solvers/SGH_solver_rz) + add_executable(Fierro main.cpp driver.cpp solver.cpp ${YAML_SRC_Files} ${SGH_SRC_Files} ) -target_link_libraries(Fierro PRIVATE matar Kokkos::kokkos) #sgh_solver parse_yaml +target_link_libraries(Fierro PRIVATE matar Kokkos::kokkos) diff --git a/single-node-refactor/src/Solvers/SGH_solver_rz/CMakeLists.txt b/single-node-refactor/src/Solvers/SGH_solver_rz/CMakeLists.txt new file mode 100755 index 000000000..1d14c1bc7 --- /dev/null +++ b/single-node-refactor/src/Solvers/SGH_solver_rz/CMakeLists.txt @@ -0,0 +1,35 @@ +cmake_minimum_required(VERSION 3.1.3) + +find_package(Matar REQUIRED) +find_package(Kokkos REQUIRED) + +add_definitions(-DHAVE_KOKKOS=1) + +if (CUDA) + add_definitions(-DHAVE_CUDA=1) +elseif (HIP) + add_definitions(-DHAVE_HIP=1) +elseif (OPENMP) + add_definitions(-DHAVE_OPENMP=1) +elseif (THREADS) + add_definitions(-DHAVE_THREADS=1) +endif() + +include_directories(include) +include_directories(src) + +message("\n ****** ADDING SGH SOURCE FILES ******** \n ") + +set(SGH_SRC_Files +${CMAKE_CURRENT_SOURCE_DIR}/src/boundary_rz.cpp +${CMAKE_CURRENT_SOURCE_DIR}/src/energy_sgh_rz.cpp +${CMAKE_CURRENT_SOURCE_DIR}/src/force_sgh_rz.cpp +${CMAKE_CURRENT_SOURCE_DIR}/src/position_rz.cpp +${CMAKE_CURRENT_SOURCE_DIR}/src/momentum_rz.cpp +${CMAKE_CURRENT_SOURCE_DIR}/src/properties_rz.cpp +${CMAKE_CURRENT_SOURCE_DIR}/src/sgh_execute_rz.cpp +${CMAKE_CURRENT_SOURCE_DIR}/src/time_integration_rz.cpp +${CMAKE_CURRENT_SOURCE_DIR}/src/sgh_setup_rz.cpp +${CMAKE_CURRENT_SOURCE_DIR}/include/sgh_solver_rz.h +PARENT_SCOPE +) \ No newline at end of file diff --git a/single-node-refactor/src/Solvers/SGH_solver_rz/include/sgh_solver_rz.h b/single-node-refactor/src/Solvers/SGH_solver_rz/include/sgh_solver_rz.h new file mode 100644 index 000000000..8636c5345 --- /dev/null +++ b/single-node-refactor/src/Solvers/SGH_solver_rz/include/sgh_solver_rz.h @@ -0,0 +1,347 @@ +/********************************************************************************************** +© 2020. Triad National Security, LLC. All rights reserved. +This program was produced under U.S. Government contract 89233218CNA000001 for Los Alamos +National Laboratory (LANL), which is operated by Triad National Security, LLC for the U.S. +Department of Energy/National Nuclear Security Administration. All rights in the program are +reserved by Triad National Security, LLC, and the U.S. Department of Energy/National Nuclear +Security Administration. The Government is granted for itself and others acting on its behalf a +nonexclusive, paid-up, irrevocable worldwide license in this material to reproduce, prepare +derivative works, distribute copies to the public, perform publicly and display publicly, and +to permit others to do so. +This program is open source under the BSD-3 License. +Redistribution and use in source and binary forms, with or without modification, are permitted +provided that the following conditions are met: +1. Redistributions of source code must retain the above copyright notice, this list of +conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, this list of +conditions and the following disclaimer in the documentation and/or other materials +provided with the distribution. +3. Neither the name of the copyright holder nor the names of its contributors may be used +to endorse or promote products derived from this software without specific prior +written permission. +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +**********************************************************************************************/ + +#ifndef SGHRZ_SOLVER_RZ_H +#define SGHRZ_SOLVER_RZ_H + +#include "solver.h" + +// Forward declare structs +struct SimulationParameters_t; +struct Material_t; +struct Mesh_t; +struct BoundaryCondition_t; +struct State_t; +struct RegionFill_t; +struct RegionFill_host_t; +struct corners_in_mat_t; + + + +using namespace mtr; // matar namespace + +///////////////////////////////////////////////////////////////////////////// +/// +/// \class SGHRZ +/// +/// \brief Class for containing functions required to perform SGHRZ +/// +/// This class contains the requisite functions requited to perform +/// staggered grid hydrodynamics (SGHRZ) which is equivalent to a lumped +/// mass finite element (FE) scheme. +/// +///////////////////////////////////////////////////////////////////////////// +class SGHRZ : public Solver +{ +public: + + SGHRZ() : Solver() + { + } + + ~SGHRZ() = default; + + // Initialize data specific to the SGHRZ solver + void initialize(SimulationParameters_t& SimulationParamaters, + Material_t& Materials, + Mesh_t& mesh, + BoundaryCondition_t& Boundary, + State_t& State) const override + { + // stuff goes here + } + + ///////////////////////////////////////////////////////////////////////////// + /// + /// \fn setup + /// + /// \brief Calls setup_sgh_rz, which initializes state and material data + /// + ///////////////////////////////////////////////////////////////////////////// + void setup(SimulationParameters_t& SimulationParamaters, + Material_t& Materials, + Mesh_t& mesh, + BoundaryCondition_t& Boundary, + State_t& State) override; + + ///////////////////////////////////////////////////////////////////////////// + /// + /// \fn execute + /// + /// \brief Calls the solve function which evolves the state + /// + /// + ///////////////////////////////////////////////////////////////////////////// + void execute(SimulationParameters_t& SimulationParamaters, + Material_t& Materials, + BoundaryCondition_t& Boundary, + Mesh_t& mesh, + State_t& State) override; + + ///////////////////////////////////////////////////////////////////////////// + /// + /// \fn finalize + /// + /// \brief + /// + /// + /// + /// \param + /// \param + /// \param + /// + /// \return + /// + ///////////////////////////////////////////////////////////////////////////// + void finalize(SimulationParameters_t& SimulationParamaters, + Material_t& Materials, + BoundaryCondition_t& Boundary) const override + { + // Any finalize goes here, remove allocated memory, etc + } + + // **** Functions defined in SGHRZ_setup.cpp **** // + void fill_regions_sgh_rz( + const Material_t& Materials, + const Mesh_t& mesh, + const DCArrayKokkos & node_coords, + DCArrayKokkos & node_vel, + DCArrayKokkos & GaussPoint_den, + DCArrayKokkos & GaussPoint_sie, + DCArrayKokkos & elem_mat_id, + DCArrayKokkos & voxel_elem_mat_id, + const CArrayKokkos & region_fills, + const CArray & region_fills_host, + const size_t num_fills, + const size_t num_elems, + const size_t num_nodes, + const size_t rk_num_bins) const; + + void init_corner_node_masses_zero_rz( + const Mesh_t& mesh, + const DCArrayKokkos& node_mass, + const DCArrayKokkos& corner_mass) const; + + // **** Functions defined in boundary.cpp **** // + void boundary_velocity_rz( + const Mesh_t& mesh, + const BoundaryCondition_t& Boundary, + DCArrayKokkos& node_vel, + const double time_value) const; + + void boundary_contact_rz( + const Mesh_t& mesh, + const BoundaryCondition_t& Boundary, + DCArrayKokkos& node_vel, + const double time_value) const; + + // **** Functions defined in energy_SGHRZ.cpp **** // + void update_energy_rz( + const double rk_alpha, + const double dt, + const Mesh_t& mesh, + const DCArrayKokkos& node_vel, + const DCArrayKokkos& node_coords, + const DCArrayKokkos& MaterialPoints_sie, + const DCArrayKokkos& MaterialPoints_mass, + const DCArrayKokkos& MaterialCorners_force, + const corners_in_mat_t corners_in_mat_elem, + const DCArrayKokkos& MaterialToMeshMaps_elem, + const size_t num_mat_elems) const; + + void get_force_rz( + const Material_t& Materials, + const Mesh_t& mesh, + const DCArrayKokkos& GaussPoints_vol, + const DCArrayKokkos& GaussPoints_div, + const DCArrayKokkos& corner_force, + const DCArrayKokkos& node_coords, + const DCArrayKokkos& node_vel, + const DCArrayKokkos& MaterialPoints_den, + const DCArrayKokkos& MaterialPoints_sie, + const DCArrayKokkos& MaterialPoints_pres, + const DCArrayKokkos& MaterialPoints_stress, + const DCArrayKokkos& MaterialPoints_sspd, + const DCArrayKokkos& MaterialPoints_statev, + const DCArrayKokkos& MaterialCorners_force, + const corners_in_mat_t, + const DCArrayKokkos& MaterialToMeshMaps_elem, + const size_t num_mat_elems, + const size_t mat_id, + const double fuzz, + const double small, + const double dt, + const double rk_alpha) const; + + // **** Functions defined in geometry.cpp **** // + void update_position_rz( + double rk_alpha, + double dt, + const size_t num_dims, + const size_t num_nodes, + DCArrayKokkos& node_coords, + const DCArrayKokkos& node_vel) const; + + // **** Functions defined in momentum.cpp **** // + void update_velocity_rz( + double rk_alpha, + double dt, + const Mesh_t& mesh, + DCArrayKokkos& node_vel, + const DCArrayKokkos& node_mass, + const DCArrayKokkos& corner_force) const; + + KOKKOS_FUNCTION + void get_velgrad_rz( + ViewCArrayKokkos& vel_grad, + const ViewCArrayKokkos& elem_node_gids, + const DCArrayKokkos& node_vel, + const ViewCArrayKokkos& b_matrix, + const double GaussPoints_vol, + const double elem_area, + const size_t elem_gid) const; + + KOKKOS_FUNCTION + void decompose_vel_grad_rz(const ViewCArrayKokkos& D_tensor, + const ViewCArrayKokkos& W_tensor, + const ViewCArrayKokkos& vel_grad) const; + + void get_divergence_rz( + DCArrayKokkos& GaussPoints_div, + const Mesh_t mesh, + const DCArrayKokkos& node_coords, + const DCArrayKokkos& node_vel, + const DCArrayKokkos& GaussPoints_vol) const; + + + void update_state_rz( + const Material_t& Materials, + const Mesh_t& mesh, + const DCArrayKokkos& node_coords, + const DCArrayKokkos& node_vel, + const DCArrayKokkos& MaterialPoints_den, + const DCArrayKokkos& MaterialPoints_pres, + const DCArrayKokkos& MaterialPoints_stress, + const DCArrayKokkos& MaterialPoints_sspd, + const DCArrayKokkos& MaterialPoints_sie, + const DCArrayKokkos& GaussPoints_vol, + const DCArrayKokkos& MaterialPoints_mass, + const DCArrayKokkos& MaterialPoints_statev, + const DCArrayKokkos& GaussPoints_eroded, + const DCArrayKokkos& MaterialToMeshMaps_elem, + const double dt, + const double rk_alpha, + const size_t num_material_elems, + const size_t mat_id) const; + + // **** Functions defined in time_integration.cpp **** // + // NOTE: Consider pulling up + void rk_init_rz( + DCArrayKokkos& node_coords, + DCArrayKokkos& node_vel, + DCArrayKokkos& MaterialPoints_sie, + DCArrayKokkos& MaterialPoints_stress, + const size_t num_dims, + const size_t num_elems, + const size_t num_nodes, + const size_t num_mat_points) const; + + + void get_timestep_rz( + Mesh_t& mesh, + DCArrayKokkos& node_coords, + DCArrayKokkos& node_vel, + DCArrayKokkos& GaussPoints_vol, + DCArrayKokkos& MaterialPoints_sspd, + DCArrayKokkos& MaterialPoints_eroded, + DCArrayKokkos& MaterialToMeshMaps_elem, + size_t num_mat_elems, + double time_value, + const double graphics_time, + const double time_final, + const double dt_max, + const double dt_min, + const double dt_cfl, + double& dt, + const double fuzz) const; + + +}; + +void calc_corner_mass_rz(const Material_t& Materials, + const Mesh_t& mesh, + const DCArrayKokkos& node_coords, + const DCArrayKokkos& node_mass, + const DCArrayKokkos& corner_mass, + const DCArrayKokkos& MaterialPoints_den, + const DCArrayKokkos& MaterialToMeshMaps_elem, + const size_t num_mat_elems); + +void calc_node_mass_rz(const Mesh_t& mesh, + const DCArrayKokkos& node_coords, + const DCArrayKokkos& node_mass, + const DCArrayKokkos& corner_mass); + +void calc_node_areal_mass_rz(const Mesh_t& mesh, + const DCArrayKokkos& node_coords, + const DCArrayKokkos& node_mass, + CArrayKokkos node_extensive_mass, + double tiny); + +void calc_node_extensive_mass_rz(const CArrayKokkos& node_extensive_mass, + const DCArrayKokkos& node_coords, + const DCArrayKokkos& node_mass, + double num_nodes); + +double sum_domain_internal_energy_rz(const DCArrayKokkos& MaterialPoints_mass, + const DCArrayKokkos& MaterialPoints_sie, + const size_t num_mat_points); + +double sum_domain_kinetic_energy_rz(const Mesh_t& mesh, + const DCArrayKokkos& node_vel, + const DCArrayKokkos& node_coords, + const DCArrayKokkos& node_mass); + +double sum_domain_material_mass_rz(const DCArrayKokkos& MaterialPoints_mass, + const size_t num_mat_points); + +double sum_domain_node_mass_rz(const Mesh_t& mesh, + const DCArrayKokkos& node_coords, + const DCArrayKokkos& node_mass); + +void set_corner_force_zero_rz(const Mesh_t& mesh, + const DCArrayKokkos& corner_force); + +#endif // end HEADER_H diff --git a/single-node-refactor/src/Solvers/SGH_solver_rz/src/boundary_rz.cpp b/single-node-refactor/src/Solvers/SGH_solver_rz/src/boundary_rz.cpp new file mode 100644 index 000000000..51189a7d7 --- /dev/null +++ b/single-node-refactor/src/Solvers/SGH_solver_rz/src/boundary_rz.cpp @@ -0,0 +1,106 @@ +/********************************************************************************************** +� 2020. Triad National Security, LLC. All rights reserved. +This program was produced under U.S. Government contract 89233218CNA000001 for Los Alamos +National Laboratory (LANL), which is operated by Triad National Security, LLC for the U.S. +Department of Energy/National Nuclear Security Administration. All rights in the program are +reserved by Triad National Security, LLC, and the U.S. Department of Energy/National Nuclear +Security Administration. The Government is granted for itself and others acting on its behalf a +nonexclusive, paid-up, irrevocable worldwide license in this material to reproduce, prepare +derivative works, distribute copies to the public, perform publicly and display publicly, and +to permit others to do so. +This program is open source under the BSD-3 License. +Redistribution and use in source and binary forms, with or without modification, are permitted +provided that the following conditions are met: +1. Redistributions of source code must retain the above copyright notice, this list of +conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, this list of +conditions and the following disclaimer in the documentation and/or other materials +provided with the distribution. +3. Neither the name of the copyright holder nor the names of its contributors may be used +to endorse or promote products derived from this software without specific prior +written permission. +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +**********************************************************************************************/ + +#include "sgh_solver_rz.h" +#include "mesh.h" +#include "boundary_conditions.h" + + +///////////////////////////////////////////////////////////////////////////// +/// +/// \fn boundary_velocity +/// +/// \brief Evolves the boundary according to a give velocity +/// +/// \param The simulation mesh +/// \param Boundary contain arrays of information about BCs +/// \param A view into the nodal velocity array +/// \param The current simulation time +/// +///////////////////////////////////////////////////////////////////////////// +void SGHRZ::boundary_velocity_rz(const Mesh_t& mesh, + const BoundaryCondition_t& BoundaryConditions, + DCArrayKokkos& node_vel, + const double time_value) const +{ + + // Loop over boundary sets + for (size_t bdy_set = 0; bdy_set < mesh.num_bdy_sets; bdy_set++) { + + // Loop over boundary nodes in a boundary set + FOR_ALL(bdy_node_lid, 0, mesh.num_bdy_nodes_in_set.host(bdy_set), { + + // get the global index for this node on the boundary + size_t bdy_node_gid = mesh.bdy_nodes_in_set(bdy_set, bdy_node_lid); + + // evaluate velocity on this boundary node + BoundaryConditions.BoundaryConditionFunctions(bdy_set).velocity(mesh, + BoundaryConditions.BoundaryConditionEnums, + BoundaryConditions.bc_global_vars, + BoundaryConditions.bc_state_vars, + node_vel, + time_value, + bdy_node_gid, + bdy_set); + + }); // end for bdy_node_lid + + + } // end for bdy_set + + return; +} // end boundary_velocity function + + +///////////////////////////////////////////////////////////////////////////// +/// +/// \fn boundary_velocity +/// +/// \brief Evolves the boundary according to a give velocity +/// +/// \param The simulation mesh +/// \param An array of BoundaryCondition_t that contain information about BCs +/// \param A view into the nodal velocity array +/// \param The current simulation time +/// +///////////////////////////////////////////////////////////////////////////// +void SGHRZ::boundary_contact_rz(const Mesh_t& mesh, + const BoundaryCondition_t& BoundaryConditions, + DCArrayKokkos& node_vel, + const double time_value) const +{ + return; +} // end boundary_contact function + + diff --git a/single-node-refactor/src/Solvers/SGH_solver_rz/src/energy_sgh_rz.cpp b/single-node-refactor/src/Solvers/SGH_solver_rz/src/energy_sgh_rz.cpp new file mode 100644 index 000000000..e5b6d9253 --- /dev/null +++ b/single-node-refactor/src/Solvers/SGH_solver_rz/src/energy_sgh_rz.cpp @@ -0,0 +1,120 @@ +/********************************************************************************************** +� 2020. Triad National Security, LLC. All rights reserved. +This program was produced under U.S. Government contract 89233218CNA000001 for Los Alamos +National Laboratory (LANL), which is operated by Triad National Security, LLC for the U.S. +Department of Energy/National Nuclear Security Administration. All rights in the program are +reserved by Triad National Security, LLC, and the U.S. Department of Energy/National Nuclear +Security Administration. The Government is granted for itself and others acting on its behalf a +nonexclusive, paid-up, irrevocable worldwide license in this material to reproduce, prepare +derivative works, distribute copies to the public, perform publicly and display publicly, and +to permit others to do so. +This program is open source under the BSD-3 License. +Redistribution and use in source and binary forms, with or without modification, are permitted +provided that the following conditions are met: +1. Redistributions of source code must retain the above copyright notice, this list of +conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, this list of +conditions and the following disclaimer in the documentation and/or other materials +provided with the distribution. +3. Neither the name of the copyright holder nor the names of its contributors may be used +to endorse or promote products derived from this software without specific prior +written permission. +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +**********************************************************************************************/ + +#include "sgh_solver_rz.h" +#include "mesh.h" +#include "state.h" + +///////////////////////////////////////////////////////////////////////////// +/// +/// \fn update_energy +/// +/// \brief Evolves the specific internal energy +/// +/// \param The current Runge Kutta alpha value +/// \param Time step size +/// \param The simulation mesh +/// \param A view into the nodal velocity data +/// \param A view into the nodal position data +/// \param A view into the element specific internal energy +/// \param A view into the element mass +/// \param A view into the corner force data +/// +///////////////////////////////////////////////////////////////////////////// +void SGHRZ::update_energy_rz(const double rk_alpha, + const double dt, + const Mesh_t& mesh, + const DCArrayKokkos& node_vel, + const DCArrayKokkos& node_coords, + const DCArrayKokkos& MaterialPoints_sie, + const DCArrayKokkos& MaterialPoints_mass, + const DCArrayKokkos& MaterialCorners_force, + const corners_in_mat_t corners_in_mat_elem, + const DCArrayKokkos& MaterialToMeshMaps_elem, + const size_t num_mat_elems + ) const +{ + + // loop over all the elements in the mesh + FOR_ALL(mat_elem_lid, 0, num_mat_elems, { + + // get elem gid + size_t elem_gid = MaterialToMeshMaps_elem(mat_elem_lid); + + // the material point index = the material elem index for a 1-point element + size_t mat_point_lid = mat_elem_lid; + + + double MaterialPoints_power = 0.0; + + + // --- tally the contribution from each corner to the element --- + + // Loop over the nodes in the element + for (size_t node_lid = 0; node_lid < mesh.num_nodes_in_elem; node_lid++) { + + // corner lid and node lid + size_t corner_lid = node_lid; + + // Get node global id for the local node id + size_t node_gid = mesh.nodes_in_elem(elem_gid, node_lid); + + // Get the corner global id for the local corner id + //size_t corner_gid = mesh.corners_in_elem(elem_gid, corner_lid); + + // Get the material corner lid + size_t mat_corner_lid = corners_in_mat_elem(mat_elem_lid, corner_lid); + + // 2D RZ needs node radius + double node_radius = node_coords(1, node_gid, 1); + + + // calculate the Power=F dot V for this corner + for (size_t dim = 0; dim < mesh.num_dims; dim++) { + + double half_vel = (node_vel(1, node_gid, dim) + node_vel(0, node_gid, dim)) * 0.5; + MaterialPoints_power += MaterialCorners_force(mat_corner_lid, dim) * node_radius * half_vel; + + } // end for dim + } // end for node_lid + + // update the specific energy + MaterialPoints_sie(1, mat_point_lid) = MaterialPoints_sie(0, mat_point_lid) - + rk_alpha * dt / MaterialPoints_mass(mat_point_lid) * MaterialPoints_power; + + + }); // end parallel loop over the elements + + return; +} // end subroutine diff --git a/single-node-refactor/src/Solvers/SGH_solver_rz/src/force_sgh_rz.cpp b/single-node-refactor/src/Solvers/SGH_solver_rz/src/force_sgh_rz.cpp new file mode 100644 index 000000000..1388dac02 --- /dev/null +++ b/single-node-refactor/src/Solvers/SGH_solver_rz/src/force_sgh_rz.cpp @@ -0,0 +1,435 @@ +/********************************************************************************************** +� 2020. Triad National Security, LLC. All rights reserved. +This program was produced under U.S. Government contract 89233218CNA000001 for Los Alamos +National Laboratory (LANL), which is operated by Triad National Security, LLC for the U.S. +Department of Energy/National Nuclear Security Administration. All rights in the program are +reserved by Triad National Security, LLC, and the U.S. Department of Energy/National Nuclear +Security Administration. The Government is granted for itself and others acting on its behalf a +nonexclusive, paid-up, irrevocable worldwide license in this material to reproduce, prepare +derivative works, distribute copies to the public, perform publicly and display publicly, and +to permit others to do so. +This program is open source under the BSD-3 License. +Redistribution and use in source and binary forms, with or without modification, are permitted +provided that the following conditions are met: +1. Redistributions of source code must retain the above copyright notice, this list of +conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, this list of +conditions and the following disclaimer in the documentation and/or other materials +provided with the distribution. +3. Neither the name of the copyright holder nor the names of its contributors may be used +to endorse or promote products derived from this software without specific prior +written permission. +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +**********************************************************************************************/ + +#include "sgh_solver_rz.h" +#include "material.h" +#include "mesh.h" +#include "state.h" +#include "geometry_new.h" + + +///////////////////////////////////////////////////////////////////////////// +/// +/// \fn get_force_rz +/// +/// \brief This function calculates the corner forces and the evolves stress +/// +/// \param Material that contains material specific data +/// \param The simulation mesh +/// \param A view into the nodal position array +/// \param A view into the nodal velocity array +/// \param A view into the element density array +/// \param A view into the element specific internal energy array +/// \param A view into the element pressure array +/// \param A view into the element stress array +/// \param A view into the element sound speed array +/// \param A view into the element volume array +/// \param A view into the element divergence of velocity array +/// \param A view into the element material identifier array +/// \param fuzz (REMOVE) +/// \param small (REMOVE) +/// \param Element state variable array +/// \param Time step size +/// \param The current Runge Kutta integration alpha value +/// +///////////////////////////////////////////////////////////////////////////// +void SGHRZ::get_force_rz(const Material_t& Materials, + const Mesh_t& mesh, + const DCArrayKokkos& GaussPoints_vol, + const DCArrayKokkos& GaussPoints_div, + const DCArrayKokkos& corner_force, + const DCArrayKokkos& node_coords, + const DCArrayKokkos& node_vel, + const DCArrayKokkos& MaterialPoints_den, + const DCArrayKokkos& MaterialPoints_sie, + const DCArrayKokkos& MaterialPoints_pres, + const DCArrayKokkos& MaterialPoints_stress, + const DCArrayKokkos& MaterialPoints_sspd, + const DCArrayKokkos& MaterialPoints_statev, + const DCArrayKokkos& MaterialCorners_force, + const corners_in_mat_t corners_in_mat_elem, + const DCArrayKokkos& MaterialToMeshMaps_elem, + const size_t num_mat_elems, + const size_t mat_id, + const double fuzz, + const double small, + const double dt, + const double rk_alpha) const +{ + const size_t num_dims = 2; + const size_t num_nodes_in_elem = 4; + + // set corner force to zero + FOR_ALL(corner_gid, 0, mesh.num_corners, { + for (int dim = 0; dim < num_dims; dim++) { + corner_force(corner_gid, dim) = 0.0; + } + }); // end parallel for corners + + + // --- calculate the forces acting on the nodes from the element --- + FOR_ALL(mat_elem_lid, 0, num_mat_elems, { + + // get mesh elem gid + size_t elem_gid = MaterialToMeshMaps_elem(mat_elem_lid); + + //size_t guass_gid = elem_gid; // 1 gauss point per element + + // the material point index = the material elem index for a 1-point element + size_t mat_point_lid = mat_elem_lid; + + // total Cauchy stress + double tau_array[9]; + + // corner area normals + double area_normal_array[8]; // 4 corners and 2 directions + + // estimate of shock direction + double shock_dir_array[2]; + + // the sums in the Riemann solver + double sum_array[4]; + + // corner shock impedance x |corner area normal dot shock_dir| + double muc_array[4]; + + // Riemann velocity + double vel_star_array[2]; + + // velocity gradient + double vel_grad_array[9]; + + // --- Create views of arrays to aid the force calculation --- + + ViewCArrayKokkos tau(tau_array, 3, 3); + ViewCArrayKokkos area_normal(area_normal_array, num_nodes_in_elem, num_dims); + ViewCArrayKokkos shock_dir(shock_dir_array, num_dims); + ViewCArrayKokkos sum(sum_array, 4); + ViewCArrayKokkos muc(muc_array, num_nodes_in_elem); + ViewCArrayKokkos vel_star(vel_star_array, num_dims); + ViewCArrayKokkos vel_grad(vel_grad_array, 3, 3); + + // create a view of the stress_matrix + ViewCArrayKokkos stress(&MaterialPoints_stress(1, mat_point_lid, 0, 0), 3, 3); + + // cut out the node_gids for this element + ViewCArrayKokkos elem_node_gids(&mesh.nodes_in_elem(elem_gid, 0), 4); + + // get the B matrix which are the OUTWARD corner area normals + geometry::get_bmatrix2D(area_normal, + elem_gid, + node_coords, + elem_node_gids); + // NOTE: I added a minus in bmatrix2D, it should be outward pointing now? + + // facial area of the element + double elem_area = geometry::get_area_quad(elem_gid, node_coords, elem_node_gids); + + // facial area of the corners + double corner_areas_array[4]; + ViewCArrayKokkos corner_areas(&corner_areas_array[0], 4); + + geometry::get_area_weights2D(corner_areas, elem_gid, node_coords, elem_node_gids); + + // --- Calculate the velocity gradient --- + get_velgrad_rz(vel_grad, + elem_node_gids, + node_vel, + area_normal, + GaussPoints_vol(elem_gid), + elem_area, + elem_gid); + + // the -1 is for the inward surface area normal, + for (size_t node_lid = 0; node_lid < num_nodes_in_elem; node_lid++) { + for (size_t dim = 0; dim < num_dims; dim++) { + area_normal(node_lid, dim) = (-1.0) * area_normal(node_lid, dim); + } // end for + } // end for + + double div = GaussPoints_div(elem_gid); + + // vel = [u,v] + // [du/dx, du/dy] + // vel_grad = [dv/dx, dv/dy] + double curl; + curl = vel_grad(1, 0) - vel_grad(0, 1); // dv/dx - du/dy + + double mag_curl = curl; + + // --- Calculate the Cauchy stress --- + for (size_t i = 0; i < 3; i++) { + for (size_t j = 0; j < 3; j++) { + tau(i, j) = stress(i, j); + // artificial viscosity can be added here to tau + } // end for + } // end for + + // add the pressure + for (int i = 0; i < 3; i++) { + tau(i, i) -= MaterialPoints_pres(mat_point_lid); + } // end for + + // ---- Multidirectional Approximate Riemann solver (MARS) ---- + // find the average velocity of the elem, it is an + // estimate of the Riemann velocity + + // initialize to Riemann velocity to zero + for (size_t dim = 0; dim < num_dims; dim++) { + vel_star(dim) = 0.0; + } + + // loop over nodes and calculate an average velocity, which is + // an estimate of Riemann velocity + for (size_t node_lid = 0; node_lid < num_nodes_in_elem; node_lid++) { + // Get node global index and create view of nodal velocity + int node_gid = mesh.nodes_in_elem(elem_gid, node_lid); + + ViewCArrayKokkos vel(&node_vel(1, node_gid, 0), num_dims); + + vel_star(0) += 0.25 * vel(0); + vel_star(1) += 0.25 * vel(1); + } // end for loop over nodes + + // find shock direction and shock impedance associated with each node + + // initialize sum term in MARS to zero + for (int i = 0; i < 4; i++) { + sum(i) = 0.0; + } + + double mag; // magnitude of the area normal + double mag_vel; // magnitude of velocity + + // loop over the nodes of the elem + for (size_t node_lid = 0; node_lid < num_nodes_in_elem; node_lid++) { + // Get global node id + size_t node_gid = mesh.nodes_in_elem(elem_gid, node_lid); + + // Create view of nodal velocity + ViewCArrayKokkos vel(&node_vel(1, node_gid, 0), num_dims); + + // Get an estimate of the shock direction. + mag_vel = sqrt( (vel(0) - vel_star(0) ) * (vel(0) - vel_star(0) ) + + (vel(1) - vel_star(1) ) * (vel(1) - vel_star(1) ) ); + + if (mag_vel > small) { + // estimate of the shock direction, a unit normal + for (int dim = 0; dim < num_dims; dim++) { + shock_dir(dim) = (vel(dim) - vel_star(dim)) / mag_vel; + } + } + else{ + // if there is no velocity change, then use the surface area + // normal as the shock direction + mag = sqrt(area_normal(node_lid, 0) * area_normal(node_lid, 0) + + area_normal(node_lid, 1) * area_normal(node_lid, 1) ); + + // estimate of the shock direction + for (int dim = 0; dim < num_dims; dim++) { + shock_dir(dim) = area_normal(node_lid, dim) / mag; + } + } // end if mag_vel + + // cell divergence indicates compression or expansions + if (div < 0) { // element in compression + muc(node_lid) = MaterialPoints_den(mat_point_lid) * + (Materials.MaterialFunctions(mat_id).q1 * MaterialPoints_sspd(mat_point_lid) + + Materials.MaterialFunctions(mat_id).q2 * mag_vel); + } + else{ // element in expansion + muc(node_lid) = MaterialPoints_den(mat_point_lid) * + (Materials.MaterialFunctions(mat_id).q1ex * MaterialPoints_sspd(mat_point_lid) + + Materials.MaterialFunctions(mat_id).q2ex * mag_vel); + } // end if on divergence sign + + size_t use_shock_dir = 0; + double mu_term; + + // Coding to use shock direction + if (use_shock_dir == 1) { + // this is denominator of the Riemann solver and the multiplier + // on velocity in the numerator. It filters on the shock + // direction + mu_term = muc(node_lid) * + fabs(shock_dir(0) * area_normal(0) + + shock_dir(1) * area_normal(1) ); + } + else{ + // Using a full tensoral Riemann jump relation + mu_term = muc(node_lid) + * sqrt(area_normal(node_lid, 0) * area_normal(node_lid, 0) + + area_normal(node_lid, 1) * area_normal(node_lid, 1) ); + } + + sum(0) += mu_term * vel(0); + sum(1) += mu_term * vel(1); + sum(3) += mu_term; + + muc(node_lid) = mu_term; // the impedance time surface area is stored here + } // end for node_lid loop over nodes of the elem + + // The Riemann velocity, called vel_star + if (sum(3) > fuzz) { + for (size_t i = 0; i < num_dims; i++) { + vel_star(i) = sum(i) / sum(3); + } + } + else{ + for (int i = 0; i < num_dims; i++) { + vel_star(i) = 0.0; + } + } // end if + + // ---- Calculate the shock detector for the Riemann-solver ---- + // + // The dissipation from the Riemann problem is limited by phi + // phi = (1. - max( 0., min( 1. , r_face ) ))^n + // where + // r_face = (C* div(u_+)/div(u_z)) + // The plus denotes the cell center divergence of a neighbor. + // The solution will be first order when phi=1 and have + // zero dissipation when phi=0. + // phi = 0 highest-order solution + // phi = 1 first order solution + // + + double phi = 0.0; // the shock detector + double r_face = 1.0; // the ratio on the face + double r_min = 1.0; // the min ratio for the cell + double r_coef = 0.9; // 0.9; the coefficient on the ratio + // (1=minmod and 2=superbee) + double n_coef = 1.0; // the power on the limiting coefficient + // (1=nominal, and n_coeff > 1 oscillatory) + + // loop over the neighboring cells + for (size_t elem_lid = 0; elem_lid < mesh.num_elems_in_elem(elem_gid); elem_lid++) { + // Get global index for neighboring cell + size_t neighbor_gid = mesh.elems_in_elem(elem_gid, elem_lid); + + // calculate the velocity divergence in neighbor + double div_neighbor = GaussPoints_div(neighbor_gid); + + r_face = r_coef * (div_neighbor + small) / (div + small); + + // store the smallest face ratio + r_min = fmin(r_face, r_min); + } // end for elem_lid + + // calculate standard shock detector + phi = 1.0 - fmax(0.0, r_min); + phi = pow(phi, n_coef); + + // Mach number shock detector + double omega = 20.0; // 20.0; // weighting factor on Mach number + double c_length = sqrt(elem_area); // characteristic length + double alpha = fmin(1.0, omega * (c_length * fabs(div)) / (MaterialPoints_sspd(elem_gid) + fuzz) ); + + // use Mach based detector with standard shock detector + + // turn off dissipation in expansion + // alpha = fmax(-fabs(div0)/div0 * alpha, 0.0); // this should be if(div0<0) alpha=alpha else alpha=0 + + phi = alpha * phi; + + // curl limiter on Q + double phi_curl = fmin(1.0, 4.0 * fabs(div) / (mag_curl + fuzz)); // disable Q when vorticity is high + // phi = phi_curl*phi; + + // ---- Calculate the Riemann force on each node ---- + + // loop over the each node in the elem + for (size_t node_lid = 0; node_lid < num_nodes_in_elem; node_lid++) { + size_t corner_lid = node_lid; + + // Get corner gid + size_t corner_gid = mesh.corners_in_elem(elem_gid, corner_lid); + + // Get node gid + size_t node_gid = mesh.nodes_in_elem(elem_gid, node_lid); + + // loop over dimension + for (int dim = 0; dim < num_dims; dim++) { + corner_force(corner_gid, dim) = + area_normal(node_lid, 0) * tau(0, dim) + + area_normal(node_lid, 1) * tau(1, dim) + + phi * muc(node_lid) * (vel_star(dim) - node_vel(1, node_gid, dim)); + } // end loop over dimension + + // ---- add hoop stress terms ---- + + double node_radius = node_coords(1, node_gid, 1); + + // Wilkins used elem_area*0.25 for the corner area, we will use the corner + // areas calculated using Barlow's symmetry and energy preserving area partitioning + if (node_radius > 1e-14) { + // sigma_RZ / R_p + corner_force(corner_gid, 0) += tau(1, 0) * corner_areas(corner_lid) / node_radius; + + // (sigma_RR - sigma_theta) / R_p + corner_force(corner_gid, 1) += (tau(1, 1) - tau(2, 2)) * corner_areas(corner_lid) / node_radius; + } // end if radius >0 + } // end for loop over nodes in elem + + // --- Update Stress --- + // calculate the new stress at the next rk level, if it is a increment_based model + + + // increment_based elastic plastic model + if (Materials.MaterialEnums(mat_id).StrengthType == model::incrementBased) { + + // cut out the node_gids for this element + ViewCArrayKokkos elem_node_gids(&mesh.nodes_in_elem(elem_gid, 0), 4); + + // --- call strength model --- + // Materials.MaterialFunctions(mat_id).strength_model(MaterialPoints_pres, + // MaterialPoints_stress, + // elem_gid, + // mat_id, + // MaterialPoints_statev, + // MaterialPoints_sspd, + // MaterialPoints_den(elem_gid), + // MaterialPoints_sie(1,elem_gid), + // vel_grad, + // elem_node_gids, + // node_coords, + // node_vel, + // GaussPoints_vol(elem_gid), + // dt, + // rk_alpha); + } // end logical on increment_based strength model + }); // end parallel for loop over elements + + return; +} // end of routine for 2D force and stress update diff --git a/single-node-refactor/src/Solvers/SGH_solver_rz/src/momentum_rz.cpp b/single-node-refactor/src/Solvers/SGH_solver_rz/src/momentum_rz.cpp new file mode 100644 index 000000000..c85759bae --- /dev/null +++ b/single-node-refactor/src/Solvers/SGH_solver_rz/src/momentum_rz.cpp @@ -0,0 +1,287 @@ +/********************************************************************************************** +� 2020. Triad National Security, LLC. All rights reserved. +This program was produced under U.S. Government contract 89233218CNA000001 for Los Alamos +National Laboratory (LANL), which is operated by Triad National Security, LLC for the U.S. +Department of Energy/National Nuclear Security Administration. All rights in the program are +reserved by Triad National Security, LLC, and the U.S. Department of Energy/National Nuclear +Security Administration. The Government is granted for itself and others acting on its behalf a +nonexclusive, paid-up, irrevocable worldwide license in this material to reproduce, prepare +derivative works, distribute copies to the public, perform publicly and display publicly, and +to permit others to do so. +This program is open source under the BSD-3 License. +Redistribution and use in source and binary forms, with or without modification, are permitted +provided that the following conditions are met: +1. Redistributions of source code must retain the above copyright notice, this list of +conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, this list of +conditions and the following disclaimer in the documentation and/or other materials +provided with the distribution. +3. Neither the name of the copyright holder nor the names of its contributors may be used +to endorse or promote products derived from this software without specific prior +written permission. +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +**********************************************************************************************/ + +#include "sgh_solver_rz.h" +#include "mesh.h" +#include "geometry_new.h" + +///////////////////////////////////////////////////////////////////////////// +/// +/// \fn update_velocity +/// +/// \brief This function evolves the velocity at the nodes of the mesh +/// +/// \param Runge Kutta time integration alpha +/// \param Time step size +/// \param View of the nodal velocity array +/// \param View of the nodal mass array +/// \param View of the corner forces +/// +///////////////////////////////////////////////////////////////////////////// +void SGHRZ::update_velocity_rz(double rk_alpha, + double dt, + const Mesh_t& mesh, + DCArrayKokkos& node_vel, + const DCArrayKokkos& node_mass, + const DCArrayKokkos& corner_force) const +{ + const size_t num_dims = 2; + + // walk over the nodes to update the velocity + FOR_ALL(node_gid, 0, mesh.num_nodes, { + double node_force[3]; + for (size_t dim = 0; dim < num_dims; dim++) { + node_force[dim] = 0.0; + } // end for dim + + // loop over all corners around the node and calculate the nodal force + for (size_t corner_lid = 0; corner_lid < mesh.num_corners_in_node(node_gid); corner_lid++) { + // Get corner gid + size_t corner_gid = mesh.corners_in_node(node_gid, corner_lid); + + // loop over dimension + for (size_t dim = 0; dim < num_dims; dim++) { + node_force[dim] += corner_force(corner_gid, dim); + } // end for dim + } // end for corner_lid + + // update the velocity + for (int dim = 0; dim < num_dims; dim++) { + node_vel(1, node_gid, dim) = node_vel(0, node_gid, dim) + + rk_alpha * dt * node_force[dim] / node_mass(node_gid); + } // end for dim + }); // end for parallel for over nodes + + return; +} // end subroutine update_velocity + +///////////////////////////////////////////////////////////////////////////// +/// +/// \fn get_velgrad_rz +/// +/// \brief This function calculates the velocity gradient for a 2D element +/// +/// \param Velocity gradient +/// \param Global ids of the nodes in this element +/// \param View of the nodal velocity data +/// \param The finite element B matrix +/// \param The volume of the particular element +/// \param The elements surface area +/// \param The global id of this particular element +/// +///////////////////////////////////////////////////////////////////////////// +KOKKOS_FUNCTION +void SGHRZ::get_velgrad_rz(ViewCArrayKokkos& vel_grad, + const ViewCArrayKokkos& elem_node_gids, + const DCArrayKokkos& node_vel, + const ViewCArrayKokkos& b_matrix, + const double elem_vol, + const double elem_area, + const size_t elem_gid) const +{ + const size_t num_nodes_in_elem = 4; + + double u_array[num_nodes_in_elem]; + double v_array[num_nodes_in_elem]; + ViewCArrayKokkos u(u_array, num_nodes_in_elem); // x-dir vel component + ViewCArrayKokkos v(v_array, num_nodes_in_elem); // y-dir vel component + + // get the vertex velocities for the cell + for (size_t node_lid = 0; node_lid < num_nodes_in_elem; node_lid++) { + // Get node gid + size_t node_gid = elem_node_gids(node_lid); + + u(node_lid) = node_vel(1, node_gid, 0); // x-comp + v(node_lid) = node_vel(1, node_gid, 1); // y-comp + } // end for + + // initialize to zero + for (size_t i = 0; i < 3; i++) { + for (size_t j = 0; j < 3; j++) { + vel_grad(i, j) = 0.0; + } + } + + double mean_radius = elem_vol / elem_area; + double elem_vel_r = 0.25 * (v(0) + v(1) + v(2) + v(3)); + + // --- calculate the velocity gradient terms --- + double inverse_area = 1.0 / elem_area; + + // x-dir + vel_grad(0, 0) = (u(0) * b_matrix(0, 0) + u(1) * b_matrix(1, 0) + + u(2) * b_matrix(2, 0) + u(3) * b_matrix(3, 0)) * inverse_area; + + vel_grad(0, 1) = (u(0) * b_matrix(0, 1) + u(1) * b_matrix(1, 1) + + u(2) * b_matrix(2, 1) + u(3) * b_matrix(3, 1)) * inverse_area; + + // y-dir + vel_grad(1, 0) = (v(0) * b_matrix(0, 0) + v(1) * b_matrix(1, 0) + + v(2) * b_matrix(2, 0) + v(3) * b_matrix(3, 0)) * inverse_area; + + vel_grad(1, 1) = (v(0) * b_matrix(0, 1) + v(1) * b_matrix(1, 1) + + v(2) * b_matrix(2, 1) + v(3) * b_matrix(3, 1)) * inverse_area; + + vel_grad(2, 2) = elem_vel_r / mean_radius; // + avg(vel_R)/R + + return; +} // end function + + +///////////////////////////////////////////////////////////////////////////// +/// +/// \fn get_divergence_rz +/// +/// \brief This function calculates the divergence of velocity for all 2D elements +/// +/// \param Divergence of velocity for all elements +/// \param Simulation mesh (POSSIBLY REMOVE) +/// \param View of the nodal position data +/// \param View of the nodal velocity data +/// \param View of the volumes of each element +/// +///////////////////////////////////////////////////////////////////////////// +void SGHRZ::get_divergence_rz(DCArrayKokkos& elem_div, + const Mesh_t mesh, + const DCArrayKokkos& node_coords, + const DCArrayKokkos& node_vel, + const DCArrayKokkos& elem_vol) const +{ + // --- calculate the forces acting on the nodes from the element --- + FOR_ALL(elem_gid, 0, mesh.num_elems, { + const size_t num_nodes_in_elem = 4; + const size_t num_dims = 2; + + double u_array[num_nodes_in_elem]; + double v_array[num_nodes_in_elem]; + ViewCArrayKokkos u(u_array, num_nodes_in_elem); // x-dir vel component + ViewCArrayKokkos v(v_array, num_nodes_in_elem); // y-dir vel component + + // true volume RZ + // double r_array[num_nodes_in_elem]; + // ViewCArrayKokkos r(r_array, num_nodes_in_elem); // r-dir coordinate + + // cut out the node_gids for this element + ViewCArrayKokkos elem_node_gids(&mesh.nodes_in_elem(elem_gid, 0), 4); + + // The b_matrix are the outward corner area normals + double b_matrix_array[24]; + ViewCArrayKokkos b_matrix(b_matrix_array, num_nodes_in_elem, num_dims); + geometry::get_bmatrix2D(b_matrix, elem_gid, node_coords, elem_node_gids); + + // calculate the area of the quad + double elem_area = geometry::get_area_quad(elem_gid, node_coords, elem_node_gids); + // true volume uses the elem_vol + + // get the vertex velocities and node coordinate for the elem + for (size_t node_lid = 0; node_lid < num_nodes_in_elem; node_lid++) { + // Get node gid + size_t node_gid = elem_node_gids(node_lid); + + u(node_lid) = node_vel(1, node_gid, 0); + v(node_lid) = node_vel(1, node_gid, 1); + + // r(node_lid) = node_coords(1, node_gid, 1); // true volume RZ + } // end for + + // --- calculate the velocity divergence terms --- + double inverse_area = 1.0 / elem_area; + + double mean_radius = elem_vol(elem_gid) / elem_area; + double elem_vel_r = 0.25 * (v(0) + v(1) + v(2) + v(3)); + + elem_div(elem_gid) = 0.0; + + // x-dir + elem_div(elem_gid) += (u(0) * b_matrix(0, 0) + + u(1) * b_matrix(1, 0) + + u(2) * b_matrix(2, 0) + + u(3) * b_matrix(3, 0)) * inverse_area; + + // y-dir (i.e., r direction) + elem_div(elem_gid) += (v(0) * b_matrix(0, 1) + + v(1) * b_matrix(1, 1) + + v(2) * b_matrix(2, 1) + + v(3) * b_matrix(3, 1)) * inverse_area + + elem_vel_r / mean_radius; // + avg(u_R)/R + }); // end parallel for over elem_gid + + return; +} // end subroutine + +///////////////////////////////////////////////////////////////////////////// +/// +/// \fn decompose_vel_grad_rz +/// +/// \brief Decomposes the velocity gradient into symmetric and antisymmetric tensors +/// +/// L = D*W, where L = vel_grad, D = sym(L), W = antisym(L) +/// can span multiple lines if needed> +/// +/// \param Symmetric decomposition of velocity gradient +/// \param Antisymmetric decomposition of velocity gradient +/// \param Gradient of velocity +/// \param Global ids of the nodes associated with this element +/// \param Global id of a specific element +/// \param View of the nodal coordinate data +/// \param View of the nodal velocity data +/// \param Volume of the element +/// +///////////////////////////////////////////////////////////////////////////// +KOKKOS_FUNCTION +void SGHRZ::decompose_vel_grad_rz(const ViewCArrayKokkos& D_tensor, + const ViewCArrayKokkos& W_tensor, + const ViewCArrayKokkos& vel_grad) const +{ + // --- Calculate the velocity gradient --- + + const size_t num_dims = 2; + + // initialize to zero + for (size_t i = 0; i < num_dims; i++) { + for (size_t j = 0; j < num_dims; j++) { + D_tensor(i, j) = 0.0; + W_tensor(i, j) = 0.0; + } + } // end for + + for (size_t i = 0; i < num_dims; i++) { + for (size_t j = 0; j < num_dims; j++) { + D_tensor(i, j) = 0.5 * (vel_grad(i, j) + vel_grad(j, i)); + W_tensor(i, j) = 0.5 * (vel_grad(i, j) - vel_grad(j, i)); + } + } // end for + + return; +} // end function to calculate D and W diff --git a/single-node-refactor/src/Solvers/SGH_solver_rz/src/position_rz.cpp b/single-node-refactor/src/Solvers/SGH_solver_rz/src/position_rz.cpp new file mode 100644 index 000000000..8f040059f --- /dev/null +++ b/single-node-refactor/src/Solvers/SGH_solver_rz/src/position_rz.cpp @@ -0,0 +1,64 @@ +/********************************************************************************************** +� 2020. Triad National Security, LLC. All rights reserved. +This program was produced under U.S. Government contract 89233218CNA000001 for Los Alamos +National Laboratory (LANL), which is operated by Triad National Security, LLC for the U.S. +Department of Energy/National Nuclear Security Administration. All rights in the program are +reserved by Triad National Security, LLC, and the U.S. Department of Energy/National Nuclear +Security Administration. The Government is granted for itself and others acting on its behalf a +nonexclusive, paid-up, irrevocable worldwide license in this material to reproduce, prepare +derivative works, distribute copies to the public, perform publicly and display publicly, and +to permit others to do so. +This program is open source under the BSD-3 License. +Redistribution and use in source and binary forms, with or without modification, are permitted +provided that the following conditions are met: +1. Redistributions of source code must retain the above copyright notice, this list of +conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, this list of +conditions and the following disclaimer in the documentation and/or other materials +provided with the distribution. +3. Neither the name of the copyright holder nor the names of its contributors may be used +to endorse or promote products derived from this software without specific prior +written permission. +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +**********************************************************************************************/ +#include "sgh_solver_rz.h" + +///////////////////////////////////////////////////////////////////////////// +/// +/// \fn update_position +/// +/// \brief Updates the nodal positions based on the nodal velocity +/// +/// \param Runge Kutta time integration alpha value +/// \param Time step size +/// \param Number of dimensions in the mesh (REMOVE) +/// \param Number of nodes in the mesh +/// \param View of nodal position data +/// \param View of nodal velocity data +/// +///////////////////////////////////////////////////////////////////////////// +void SGHRZ::update_position_rz(double rk_alpha, + double dt, + const size_t num_dims, + const size_t num_nodes, + DCArrayKokkos& node_coords, + const DCArrayKokkos& node_vel) const +{ + // loop over all the nodes in the mesh + FOR_ALL(node_gid, 0, num_nodes, { + for (int dim = 0; dim < num_dims; dim++) { + double half_vel = (node_vel(1, node_gid, dim) + node_vel(0, node_gid, dim)) * 0.5; + node_coords(1, node_gid, dim) = node_coords(0, node_gid, dim) + rk_alpha * dt * half_vel; + } + }); // end parallel for over nodes +} // end subroutine \ No newline at end of file diff --git a/single-node-refactor/src/Solvers/SGH_solver_rz/src/properties_rz.cpp b/single-node-refactor/src/Solvers/SGH_solver_rz/src/properties_rz.cpp new file mode 100644 index 000000000..863041e3f --- /dev/null +++ b/single-node-refactor/src/Solvers/SGH_solver_rz/src/properties_rz.cpp @@ -0,0 +1,276 @@ +/********************************************************************************************** +� 2020. Triad National Security, LLC. All rights reserved. +This program was produced under U.S. Government contract 89233218CNA000001 for Los Alamos +National Laboratory (LANL), which is operated by Triad National Security, LLC for the U.S. +Department of Energy/National Nuclear Security Administration. All rights in the program are +reserved by Triad National Security, LLC, and the U.S. Department of Energy/National Nuclear +Security Administration. The Government is granted for itself and others acting on its behalf a +nonexclusive, paid-up, irrevocable worldwide license in this material to reproduce, prepare +derivative works, distribute copies to the public, perform publicly and display publicly, and +to permit others to do so. +This program is open source under the BSD-3 License. +Redistribution and use in source and binary forms, with or without modification, are permitted +provided that the following conditions are met: +1. Redistributions of source code must retain the above copyright notice, this list of +conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, this list of +conditions and the following disclaimer in the documentation and/or other materials +provided with the distribution. +3. Neither the name of the copyright holder nor the names of its contributors may be used +to endorse or promote products derived from this software without specific prior +written permission. +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +**********************************************************************************************/ + +#include "sgh_solver_rz.h" +#include "material.h" +#include "mesh.h" +#include "geometry_new.h" + +///////////////////////////////////////////////////////////////////////////// +/// +/// \fn update_state2D +/// +/// \brief Updates the state for 2D elements +/// +/// \param An array of material_t that contains material specific data +/// \param The simulation mesh +/// \param A view into the nodal position array +/// \param A view into the nodal velocity array +/// \param A view into the element density array +/// \param A view into the element pressure array +/// \param A view into the element stress array +/// \param A view into the element sound speed array +/// \param A view into the element specific internal energy array +/// \param A view into the element volume array +/// \param A view into the element mass +/// \param A view into the element material identifier array +/// \param A view into the element state variables +/// \param Time step size +/// \param The current Runge Kutta integration alpha value +/// +///////////////////////////////////////////////////////////////////////////// +void SGHRZ::update_state_rz( + const Material_t& Materials, + const Mesh_t& mesh, + const DCArrayKokkos& node_coords, + const DCArrayKokkos& node_vel, + const DCArrayKokkos& MaterialPoints_den, + const DCArrayKokkos& MaterialPoints_pres, + const DCArrayKokkos& MaterialPoints_stress, + const DCArrayKokkos& MaterialPoints_sspd, + const DCArrayKokkos& MaterialPoints_sie, + const DCArrayKokkos& GaussPoints_vol, + const DCArrayKokkos& MaterialPoints_mass, + const DCArrayKokkos& MaterialPoints_statev, + const DCArrayKokkos& MaterialPoints_eroded, + const DCArrayKokkos& MaterialToMeshMaps_elem, + const double dt, + const double rk_alpha, + const size_t num_material_elems, + const size_t mat_id) const +{ + + const size_t num_dims = mesh.num_dims; + + // --- Density --- + // loop over all the elements the material lives in + FOR_ALL(mat_elem_lid, 0, num_material_elems, { + + // get elem gid + size_t elem_gid = MaterialToMeshMaps_elem(mat_elem_lid); + + + // get the material points for this material + // Note, with the SGH method, they are equal + size_t mat_point_lid = mat_elem_lid; + + // for this method, gauss point is equal to elem_gid + size_t gauss_gid = elem_gid; + + + // --- Density --- + MaterialPoints_den(mat_point_lid) = MaterialPoints_mass(mat_point_lid) / GaussPoints_vol(gauss_gid); + + }); // end parallel for over mat elem lid + Kokkos::fence(); + + + // --- pressure --- + if (Materials.MaterialEnums(mat_id).EOSType == model::decoupledEOSType) { + + // loop over all the elements the material lives in + FOR_ALL(mat_elem_lid, 0, num_material_elems, { + + // get elem gid + size_t elem_gid = MaterialToMeshMaps_elem(mat_elem_lid); + + + // get the material points for this material + // Note, with the SGH method, they are equal + size_t mat_point_lid = mat_elem_lid; + + // for this method, gauss point is equal to elem_gid + size_t gauss_gid = elem_gid; + + // --- Pressure --- + Materials.MaterialFunctions(mat_id).calc_pressure( + MaterialPoints_pres, + MaterialPoints_stress, + mat_point_lid, + mat_id, + MaterialPoints_statev, + MaterialPoints_sspd, + MaterialPoints_den(mat_point_lid), + MaterialPoints_sie(0, mat_point_lid), + Materials.eos_global_vars); + // --- Sound Speed --- + Materials.MaterialFunctions(mat_id).calc_sound_speed( + MaterialPoints_pres, + MaterialPoints_stress, + mat_point_lid, + mat_id, + MaterialPoints_statev, + MaterialPoints_sspd, + MaterialPoints_den(mat_point_lid), + MaterialPoints_sie(0, mat_point_lid), + Materials.eos_global_vars); + + }); // end parallel for over mat elem lid + + } // if decoupled EOS + + + // --- Stress --- + + // state_based elastic plastic model + if (Materials.MaterialEnums.host(mat_id).StrengthType == model::stateBased) { + + const size_t num_nodes_in_elem = mesh.num_nodes_in_elem; + + // loop over all the elements the material lives in + FOR_ALL(mat_elem_lid, 0, num_material_elems, { + + // get elem gid + size_t elem_gid = MaterialToMeshMaps_elem(mat_elem_lid); + + + // get the material points for this material + // Note, with the SGH method, they are equal + size_t mat_point_lid = mat_elem_lid; + + // for this method, gauss point is equal to elem_gid + size_t gauss_gid = elem_gid; + + + // cut out the node_gids for this element + ViewCArrayKokkos elem_node_gids(&mesh.nodes_in_elem(elem_gid, 0), num_nodes_in_elem); + + + // --- Density --- + MaterialPoints_den(mat_point_lid) = MaterialPoints_mass(mat_point_lid) / GaussPoints_vol(gauss_gid); + + + // corner area normals + double area_array[24]; + ViewCArrayKokkos area(area_array, num_nodes_in_elem, num_dims); + + // velocity gradient + double vel_grad_array[9]; + ViewCArrayKokkos vel_grad(vel_grad_array, num_dims, num_dims); + + // get the B matrix which are the OUTWARD corner area normals + geometry::get_bmatrix2D(area, elem_gid, node_coords, elem_node_gids); + + // calculate the area of the quad + double elem_area = geometry::get_area_quad(elem_gid, node_coords, elem_node_gids); + + // --- Calculate the velocity gradient --- + get_velgrad_rz(vel_grad, + elem_node_gids, + node_vel, + area, + GaussPoints_vol(elem_gid), + elem_area, + elem_gid); + + // --- call strength model --- + Materials.MaterialFunctions(mat_id).calc_stress( + MaterialPoints_pres, + MaterialPoints_stress, + mat_point_lid, + mat_id, + MaterialPoints_statev, + MaterialPoints_sspd, + MaterialPoints_den(mat_point_lid), + MaterialPoints_sie(1,mat_point_lid), + vel_grad, + elem_node_gids, + node_coords, + node_vel, + GaussPoints_vol(gauss_gid), + dt, + rk_alpha); + + + }); // end parallel for over mat elem lid + + } // end if state_based strength model + + + // --- mat point erosion --- + if (Materials.MaterialEnums.host(mat_id).ErosionModels != model::noErosion) { + + // loop over all the elements the material lives in + FOR_ALL(mat_elem_lid, 0, num_material_elems, { + + // get elem gid + size_t elem_gid = MaterialToMeshMaps_elem(mat_elem_lid); + + + // get the material points for this material + // Note, with the SGH method, they are equal + size_t mat_point_lid = mat_elem_lid; + + // for this method, gauss point is equal to elem_gid + size_t gauss_gid = elem_gid; + + // --- Element erosion model --- + Materials.MaterialFunctions(mat_id).erode( + MaterialPoints_eroded, + MaterialPoints_stress, + MaterialPoints_pres(mat_point_lid), + MaterialPoints_den(mat_point_lid), + MaterialPoints_sie(1, mat_point_lid), + MaterialPoints_sspd(mat_point_lid), + Materials.MaterialFunctions(mat_id).erode_tension_val, + Materials.MaterialFunctions(mat_id).erode_density_val, + mat_point_lid); + + // apply a void eos if mat_point is eroded + double phi_fail = 1.0 - (double)MaterialPoints_eroded(mat_point_lid); + MaterialPoints_pres(mat_point_lid) *= phi_fail; // phi_fail = 1 or 0 + MaterialPoints_sspd(mat_point_lid) *= phi_fail; + MaterialPoints_sspd(mat_point_lid) = fmax(MaterialPoints_sspd(mat_point_lid), 1e-32); + + for (size_t i = 0; i < 3; i++) { + for (size_t j = 0; j < 3; j++) { + MaterialPoints_stress(1, mat_point_lid, i, j) *= phi_fail; + } + } // end for i,j + + }); // end parallel for + } // end if elem errosion + + return; +} // end method to update state_rz \ No newline at end of file diff --git a/single-node-refactor/src/Solvers/SGH_solver_rz/src/sgh_execute_rz.cpp b/single-node-refactor/src/Solvers/SGH_solver_rz/src/sgh_execute_rz.cpp new file mode 100644 index 000000000..7b0f52fba --- /dev/null +++ b/single-node-refactor/src/Solvers/SGH_solver_rz/src/sgh_execute_rz.cpp @@ -0,0 +1,731 @@ +/********************************************************************************************** +© 2020. Triad National Security, LLC. All rights reserved. +This program was produced under U.S. Government contract 89233218CNA000001 for Los Alamos +National Laboratory (LANL), which is operated by Triad National Security, LLC for the U.S. +Department of Energy/National Nuclear Security Administration. All rights in the program are +reserved by Triad National Security, LLC, and the U.S. Department of Energy/National Nuclear +Security Administration. The Government is granted for itself and others acting on its behalf a +nonexclusive, paid-up, irrevocable worldwide license in this material to reproduce, prepare +derivative works, distribute copies to the public, perform publicly and display publicly, and +to permit others to do so. +This program is open source under the BSD-3 License. +Redistribution and use in source and binary forms, with or without modification, are permitted +provided that the following conditions are met: +1. Redistributions of source code must retain the above copyright notice, this list of +conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, this list of +conditions and the following disclaimer in the documentation and/or other materials +provided with the distribution. +3. Neither the name of the copyright holder nor the names of its contributors may be used +to endorse or promote products derived from this software without specific prior +written permission. +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +**********************************************************************************************/ + +#include "sgh_solver_rz.h" + +#include "simulation_parameters.h" +#include "material.h" +#include "boundary_conditions.h" +#include "mesh.h" +#include "state.h" +#include "geometry_new.h" +#include "mesh_io.h" + +///////////////////////////////////////////////////////////////////////////// +/// +/// \fn solve +/// +/// Evolve the state according to the SGH method +/// +///////////////////////////////////////////////////////////////////////////// +void SGHRZ::execute(SimulationParameters_t& SimulationParamaters, + Material_t& Materials, + BoundaryCondition_t& BoundaryConditions, + Mesh_t& mesh, + State_t& State) +{ + std::cout << "In execute function in sgh solver" << std::endl; + + double fuzz = SimulationParamaters.dynamic_options.fuzz; + double tiny = SimulationParamaters.dynamic_options.tiny; + double small = SimulationParamaters.dynamic_options.small; + + double graphics_dt_ival = SimulationParamaters.output_options.graphics_time_step; + int graphics_cyc_ival = SimulationParamaters.output_options.graphics_iteration_step; + + double time_initial = SimulationParamaters.dynamic_options.time_initial; + double time_final = SimulationParamaters.dynamic_options.time_final; + double dt_min = SimulationParamaters.dynamic_options.dt_min; + double dt_max = SimulationParamaters.dynamic_options.dt_max; + double dt_start = SimulationParamaters.dynamic_options.dt_start; + double dt_cfl = SimulationParamaters.dynamic_options.dt_cfl; + + int rk_num_stages = SimulationParamaters.dynamic_options.rk_num_stages; + int cycle_stop = SimulationParamaters.dynamic_options.cycle_stop; + + // initialize time, time_step, and cycles + double time_value = 0.0; + double dt = dt_start; + + // Create mesh writer + MeshWriter mesh_writer; // Note: Pull to driver after refactoring evolution + + // --- num vars ---- + + CArray graphics_times = CArray(20000); + graphics_times(0) = 0.0; + double graphics_time = 0.0; // the times for writing graphics dump + size_t graphics_id = 0; + + + double cached_pregraphics_dt = dt_start; + + // printf("Writing outputs to file at %f \n", time_value); + // mesh_writer.write_mesh(mesh, MaterialPoints, node, corner, SimulationParamaters, time_value, graphics_times); + + CArrayKokkos node_extensive_mass(mesh.num_nodes); + + // calculate the extensive node mass, its key to 2D + calc_node_extensive_mass_rz(node_extensive_mass, + State.node.coords, + State.node.mass, + mesh.num_nodes); + + + std::cout << "Applying initial boundary conditions" << std::endl; + boundary_velocity_rz(mesh, BoundaryConditions, State.node.vel, time_value); // Time value = 0.0; + + + + // extensive energy tallies over the entire mesh + double IE_t0 = 0.0; + double KE_t0 = 0.0; + double TE_t0 = 0.0; + + + // the number of materials specified by the user input + const size_t num_mats = Materials.num_mats; + + // extensive IE + for(size_t mat_id=0; mat_id 0) { + write = 1; + } + else if (cycle == cycle_stop) { + write = 1; + } + else if (time_value >= time_final) { + write = 1; + } + else if (time_value >= graphics_time) { + write = 1; + } + + // write outputs + if (write == 1) { + printf("Writing outputs to file at %f \n", graphics_time); + mesh_writer.write_mesh(mesh, + State, + SimulationParamaters, + time_value, + graphics_times); + + graphics_time = time_value + graphics_dt_ival; + + dt = cached_pregraphics_dt; + } // end if + + // end of calculation + if (time_value >= time_final) { + break; + } + + } // end for cycle loop + + auto time_2 = std::chrono::high_resolution_clock::now(); + auto calc_time = std::chrono::duration_cast(time_2 - time_1).count(); + + printf("\nCalculation time in seconds: %f \n", calc_time * 1e-9); + + // ---- Calculate energy tallies ---- + double IE_tend = 0.0; + double KE_tend = 0.0; + double TE_tend = 0.0; + + // extensive IE + for(size_t mat_id=0; mat_id& MaterialPoints_mass, + const DCArrayKokkos& MaterialPoints_sie, + size_t num_mat_points) +{ + + double IE_sum = 0.0; + double IE_loc_sum; + + // loop over the material points and tally IE + REDUCE_SUM(matpt_lid, 0, num_mat_points, IE_loc_sum, { + IE_loc_sum += MaterialPoints_mass(matpt_lid) * MaterialPoints_sie(1,matpt_lid); + }, IE_sum); + Kokkos::fence(); + + + return IE_sum; +} // end function + +double sum_domain_kinetic_energy_rz(const Mesh_t& mesh, + const DCArrayKokkos& node_vel, + const DCArrayKokkos& node_coords, + const DCArrayKokkos& node_mass) +{ + // extensive KE + double KE_sum = 0.0; + double KE_loc_sum; + + REDUCE_SUM(node_gid, 0, mesh.num_nodes, KE_loc_sum, { + double ke = 0; + + for (size_t dim = 0; dim < mesh.num_dims; dim++) { + ke += node_vel(1, node_gid, dim) * node_vel(1, node_gid, dim); // 1/2 at end + } // end for + + KE_loc_sum += node_mass(node_gid) * node_coords(1, node_gid, 1) * ke; + + }, KE_sum); + Kokkos::fence(); + + + return 0.5*KE_sum; +} // end function + + +// a function to tally the material point masses +double sum_domain_material_mass_rz(const DCArrayKokkos& MaterialPoints_mass, + const size_t num_mat_points) +{ + + double mass_domain = 0.0; + double mass_loc_domain; + + REDUCE_SUM(matpt_lid, 0, num_mat_points, mass_loc_domain, { + + mass_loc_domain += MaterialPoints_mass(matpt_lid); + + }, mass_domain); + Kokkos::fence(); + + return mass_domain; +} // end function + + +double sum_domain_node_mass_rz(const Mesh_t& mesh, + const DCArrayKokkos& node_coords, + const DCArrayKokkos& node_mass) +{ + + double mass_domain = 0.0; + double mass_loc_domain; + + REDUCE_SUM(node_gid, 0, mesh.num_nodes, mass_loc_domain, { + + mass_loc_domain += node_mass(node_gid) * node_coords(1, node_gid, 1); + + }, mass_domain); + Kokkos::fence(); + + + return mass_domain; +} // end function + + +///////////////////////////////////////////////////////////////////////////// +/// +/// \fn calc_corner_mass +/// +/// \brief a function to initialize pressure, sound speed and stress +/// +/// \param Materials holds the material models and global parameters +/// \param mesh is the simulation mesh +/// \param node_coords are the nodal coordinates of the mesh +/// \param node_mass is mass of the node +/// \param corner_mass is corner mass +/// \param MaterialPoints_mass is the mass at the material point for mat_id +/// \param num_mat_elems is the number of material elements for mat_id +/// +///////////////////////////////////////////////////////////////////////////// +void calc_corner_mass_rz(const Material_t& Materials, + const Mesh_t& mesh, + const DCArrayKokkos& node_coords, + const DCArrayKokkos& node_mass, + const DCArrayKokkos& corner_mass, + const DCArrayKokkos& MaterialPoints_den, + const DCArrayKokkos& MaterialToMeshMaps_elem, + const size_t num_mat_elems) +{ + + FOR_ALL(elem_gid, 0, mesh.num_elems, { + // facial area of the corners + double corner_areas_array[4]; + + ViewCArrayKokkos corner_areas(&corner_areas_array[0], 4); + ViewCArrayKokkos elem_node_gids(&mesh.nodes_in_elem(elem_gid, 0), 4); + + geometry::get_area_weights2D(corner_areas, elem_gid, node_coords, elem_node_gids); + + // loop over the corners of the element and calculate the mass + for (size_t corner_lid = 0; corner_lid < 4; corner_lid++) { + size_t corner_gid = mesh.corners_in_elem(elem_gid, corner_lid); + corner_mass(corner_gid) += corner_areas(corner_lid) * MaterialPoints_den(elem_gid); // node radius is added later + } // end for over corners + }); + +} // end function calculate corner mass + + + +///////////////////////////////////////////////////////////////////////////// +/// +/// \fn calc_node_mass +/// +/// \brief a function to initialize material corner masses +/// +/// \param Materials holds the material models and global parameters +/// \param mesh is the simulation mesh +/// \param node_coords are the nodal coordinates of the mesh +/// \param node_mass is mass of the node +/// \param corner_mass is corner mass +/// \param MaterialPoints_mass is the mass at the material point for mat_id +/// \param num_mat_elems is the number of material elements for mat_id +/// +///////////////////////////////////////////////////////////////////////////// +void calc_node_mass_rz(const Mesh_t& mesh, + const DCArrayKokkos& node_coords, + const DCArrayKokkos& node_mass, + const DCArrayKokkos& corner_mass) +{ + + FOR_ALL(node_gid, 0, mesh.num_nodes, { + for (size_t corner_lid = 0; corner_lid < mesh.num_corners_in_node(node_gid); corner_lid++) { + size_t corner_gid = mesh.corners_in_node(node_gid, corner_lid); + node_mass(node_gid) += corner_mass(corner_gid); // sans the radius so it is areal node mass + + corner_mass(corner_gid) *= node_coords(1, node_gid, 1); // true corner mass now + } // end for elem_lid + }); + +} // end function calculate node mass + + + +///////////////////////////////////////////////////////////////////////////// +/// +/// \fn calc_node_extensive_mass_rz +/// +/// \brief a function to calculate the extensive node mass, the true mass +/// +/// \param node_extensive_mass is the true mass of the node +/// \param node_coords are the nodal coordinates of the mesh +/// \param node_mass is mass of the node +/// \param num_nodes is the number of nodes in the mesh +/// +///////////////////////////////////////////////////////////////////////////// +void calc_node_extensive_mass_rz(const CArrayKokkos& node_extensive_mass, + const DCArrayKokkos& node_coords, + const DCArrayKokkos& node_mass, + double num_nodes) +{ + // save the nodal mass + FOR_ALL(node_gid, 0, num_nodes, { + + // includes node radius in the calculation + node_extensive_mass(node_gid) = node_mass(node_gid) * node_coords(1, node_gid, 1); + }); // end parallel for +} // end function + + + +///////////////////////////////////////////////////////////////////////////// +/// +/// \fn calc_node_areal_mass_rz +/// +/// \brief a function to calculate the 2D-RZ areal mass (rho A = mass/R). +/// for R=0, the areal mass is interpolated from off-axis +/// +/// \param mesh is the simulation mesh +/// \param node_coords are the nodal coordinates of the mesh +/// \param node_mass is mass of the node +/// \param node_extensive_mass is the true mass of the node +/// \param tiny is a very small number close in value to zero +/// +///////////////////////////////////////////////////////////////////////////// +void calc_node_areal_mass_rz(const Mesh_t& mesh, + const DCArrayKokkos& node_coords, + const DCArrayKokkos& node_mass, + const CArrayKokkos node_extensive_mass, + double tiny) +{ + + // calculate the nodal areal mass + FOR_ALL(node_gid, 0, mesh.num_nodes, { + node_mass(node_gid) = 0.0; + + if (node_coords(1, node_gid, 1) > tiny) { + node_mass(node_gid) = node_extensive_mass(node_gid) / node_coords(1, node_gid, 1); + } + }); // end parallel for over node_gid + Kokkos::fence(); + + // calculate the boundary areal mass + FOR_ALL(node_bdy_gid, 0, mesh.num_bdy_nodes, { + size_t node_gid = mesh.bdy_nodes(node_bdy_gid); + + if (node_coords(1, node_gid, 1) < tiny) { + // node is on the axis + + for (size_t node_lid = 0; node_lid < mesh.num_nodes_in_node(node_gid); node_lid++) { + size_t node_neighbor_gid = mesh.nodes_in_node(node_gid, node_lid); + + // if the node is off the axis, use it's areal mass on the boundary + if (node_coords(1, node_neighbor_gid, 1) > tiny) { + node_mass(node_gid) = fmax(node_mass(node_gid), node_mass(node_neighbor_gid) / 2.0); + } + } // end for over neighboring nodes + } // end if + }); // end parallel for over elem_gid + + return; +}// end function + + +// set the corner forces to zero +void set_corner_force_zero_rz(const Mesh_t& mesh, + const DCArrayKokkos& corner_force) +{ + + // set corner force to zero + FOR_ALL(corner_gid, 0, mesh.num_corners, { + for (size_t dim = 0; dim < mesh.num_dims; dim++) { + corner_force(corner_gid, dim) = 0.0; + } + }); // end parallel for corners +} // end function diff --git a/single-node-refactor/src/Solvers/SGH_solver_rz/src/sgh_setup_rz.cpp b/single-node-refactor/src/Solvers/SGH_solver_rz/src/sgh_setup_rz.cpp new file mode 100644 index 000000000..dcefbefae --- /dev/null +++ b/single-node-refactor/src/Solvers/SGH_solver_rz/src/sgh_setup_rz.cpp @@ -0,0 +1,527 @@ +/********************************************************************************************** +© 2020. Triad National Security, LLC. All rights reserved. +This program was produced under U.S. Government contract 89233218CNA000001 for Los Alamos +National Laboratory (LANL), which is operated by Triad National Security, LLC for the U.S. +Department of Energy/National Nuclear Security Administration. All rights in the program are +reserved by Triad National Security, LLC, and the U.S. Department of Energy/National Nuclear +Security Administration. The Government is granted for itself and others acting on its behalf a +nonexclusive, paid-up, irrevocable worldwide license in this material to reproduce, prepare +derivative works, distribute copies to the public, perform publicly and display publicly, and +to permit others to do so. +This program is open source under the BSD-3 License. +Redistribution and use in source and binary forms, with or without modification, are permitted +provided that the following conditions are met: +1. Redistributions of source code must retain the above copyright notice, this list of +conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, this list of +conditions and the following disclaimer in the documentation and/or other materials +provided with the distribution. +3. Neither the name of the copyright holder nor the names of its contributors may be used +to endorse or promote products derived from this software without specific prior +written permission. +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +**********************************************************************************************/ + +#include "sgh_solver_rz.h" +#include "mesh.h" +#include "region_fill.h" +#include "material.h" +#include "boundary_conditions.h" +#include "state.h" + +///////////////////////////////////////////////////////////////////////////// +/// +/// \fn init_corner_node_masses_zero +/// +/// \brief a function to initialize corner and node masses to zero +/// +/// \param mesh is the simulation mesh +/// \param node_mass is the node mass +/// \param corner_mass is the corner mass +/// +///////////////////////////////////////////////////////////////////////////// +void SGHRZ::init_corner_node_masses_zero_rz(const Mesh_t& mesh, + const DCArrayKokkos& node_mass, + const DCArrayKokkos& corner_mass) const +{ + + // calculate the nodal mass + FOR_ALL(node_gid, 0, mesh.num_nodes, { + node_mass(node_gid) = 0.0; + }); // end parallel over nodes + + FOR_ALL(corner_gid, 0, mesh.num_corners, { + corner_mass(corner_gid) = 0.0; + }); // end parallel over corners + +} // end setting masses equal to zero + +///////////////////////////////////////////////////////////////////////////// +/// +/// \fn fill_regions_sgh_rz +/// +/// \brief a function to paint den, sie, vel, and mat_ids on the mesh +/// The arrays populated (on host and device) are: +/// elem_mat_id +/// GaussPoint_den +/// GaussPoint_sie +/// node_vel +/// +/// \param Materials holds the material models and global parameters +/// \param mesh is the simulation mesh +/// \param node_coords are the coordinates of the nodes +/// \param node_vel is the nodal velocity array +/// \param region_fills are the instructures to paint state on the mesh +/// \param voxel_elem_mat_id are the voxel values on a structured i,j,k mesh +/// \param GaussPoint_den is density at the GaussPoints on the mesh +/// \param GaussPoint_sie is specific internal energy at the GaussPoints on the mesh +/// \param elem_mat_id is the material id in an element +/// \param num_fills is number of fill instruction +/// \param num_elems is number of elements on the mesh +/// \param num_nodes is number of nodes on the mesh +/// \param rk_num_bins is number of time integration storage bins +/// +///////////////////////////////////////////////////////////////////////////// +void SGHRZ::fill_regions_sgh_rz(const Material_t& Materials, + const Mesh_t& mesh, + const DCArrayKokkos & node_coords, + DCArrayKokkos & node_vel, + DCArrayKokkos & GaussPoint_den, + DCArrayKokkos & GaussPoint_sie, + DCArrayKokkos & elem_mat_id, + DCArrayKokkos & voxel_elem_mat_id, + const CArrayKokkos & region_fills, + const CArray & region_fills_host, + const size_t num_fills, + const size_t num_elems, + const size_t num_nodes, + const size_t rk_num_bins) const +{ + + + double voxel_dx, voxel_dy, voxel_dz; // voxel mesh resolution, set by input file + double orig_x, orig_y, orig_z; // origin of voxel elem center mesh, set by input file + size_t voxel_num_i, voxel_num_j, voxel_num_k; // num voxel elements in each direction, set by input file + + + // --------------------------------------------- + // copy to host, enum to read a voxel file + // --------------------------------------------- + + DCArrayKokkos read_voxel_file(num_fills); // check to see if readVoxelFile + + FOR_ALL(f_id, 0, num_fills, { + if (region_fills(f_id).volume == region::readVoxelFile) + { + read_voxel_file(f_id) = region::readVoxelFile; // read the voxel file + } + // add other mesh voxel files + else + { + read_voxel_file(f_id) = 0; + } + }); // end parallel for + read_voxel_file.update_host(); // copy to CPU if code is to read a file + Kokkos::fence(); + // --------------------------------------------- + + + // loop over the fill instructions + for (size_t f_id = 0; f_id < num_fills; f_id++) { + + // ---- + // voxel mesh setup + if (read_voxel_file.host(f_id) == region::readVoxelFile) + { + // read voxel mesh to get the values in the fcn interface + user_voxel_init(voxel_elem_mat_id, + voxel_dx, + voxel_dy, + voxel_dz, + orig_x, + orig_y, + orig_z, + voxel_num_i, + voxel_num_j, + voxel_num_k, + region_fills_host(f_id).scale_x, + region_fills_host(f_id).scale_y, + region_fills_host(f_id).scale_z, + region_fills_host(f_id).file_path); + + // copy values read from file to device + voxel_elem_mat_id.update_device(); + } // endif + // add else if for other mesh reads including STL-2-voxel + + + // parallel loop over elements in mesh + FOR_ALL(elem_gid, 0, num_elems, { + + // calculate the coordinates and radius of the element + double elem_coords_1D[3]; // note:initialization with a list won't work + ViewCArrayKokkos elem_coords(&elem_coords_1D[0], 3); + elem_coords(0) = 0.0; + elem_coords(1) = 0.0; + elem_coords(2) = 0.0; + + // get the coordinates of the element center (using rk_level=1 or node coords) + for (int node_lid = 0; node_lid < mesh.num_nodes_in_elem; node_lid++) { + elem_coords(0) += node_coords(1, mesh.nodes_in_elem(elem_gid, node_lid), 0); + elem_coords(1) += node_coords(1, mesh.nodes_in_elem(elem_gid, node_lid), 1); + + + } // end loop over nodes in element + elem_coords(0) = (elem_coords(0) / mesh.num_nodes_in_elem); + elem_coords(1) = (elem_coords(1) / mesh.num_nodes_in_elem); + + + + // calc if we are to fill this element + size_t fill_this = fill_geometric_region(mesh, + voxel_elem_mat_id, + region_fills, + elem_coords, + voxel_dx, + voxel_dy, + voxel_dz, + orig_x, + orig_y, + orig_z, + voxel_num_i, + voxel_num_j, + voxel_num_k, + f_id); + + + // paint the material state on the element if fill_this=1 + if (fill_this == 1) { + + // default sgh_rz paint + paint_gauss_den_sie(Materials, + mesh, + node_coords, + GaussPoint_den, + GaussPoint_sie, + elem_mat_id, + region_fills, + elem_coords, + elem_gid, + f_id); + + // add user defined paint here + // user_defined_sgh_state(); + + + // technically, not thread safe, but making it a separate loop created bad fill behavior + // loop over the nodes of this element and apply velocity + for (size_t node_lid = 0; node_lid < mesh.num_nodes_in_elem; node_lid++) { + + // get the mesh node index + size_t node_gid = mesh.nodes_in_elem(elem_gid, node_lid); + + // default sghRZ paint + paint_node_vel(region_fills, + node_vel, + node_coords, + node_gid, + mesh.num_dims, + f_id, + rk_num_bins); + + // add user defined paint here + // user_defined_vel_state(); + + } // end loop over the nodes in elem + + } // end if fill this + + }); // end FOR_ALL node loop + Kokkos::fence(); + + } // end for loop over fills + + + elem_mat_id.update_host(); + GaussPoint_den.update_host(); + GaussPoint_sie.update_host(); + node_vel.update_host(); + + Kokkos::fence(); + +} // end SGHRZ fill regions + + +///////////////////////////////////////////////////////////////////////////// +/// +/// \fn setup the SGHRZ method +/// +/// \brief Allocate state, setup models, and fill mesh regions per the YAML input +/// +///////////////////////////////////////////////////////////////////////////// +void SGHRZ::setup(SimulationParameters_t& SimulationParamaters, + Material_t& Materials, + Mesh_t& mesh, + BoundaryCondition_t& Boundary, + State_t& State) +{ + + size_t num_fills = SimulationParamaters.region_fills.size(); + printf("Num Fills's = %zu\n", num_fills); + + // the number of elems and nodes in the mesh + const size_t num_elems = mesh.num_elems; + const size_t num_nodes = mesh.num_nodes; + + const size_t rk_num_bins = SimulationParamaters.dynamic_options.rk_num_bins; + + + // create temporary state fields + // Painting routine requires only 1 material per GaussPoint + DCArrayKokkos GaussPoint_den(num_elems); + DCArrayKokkos GaussPoint_sie(num_elems); + DCArrayKokkos elem_mat_id(num_elems); // the mat_id in the elem + + DCArrayKokkos voxel_elem_mat_id; // 1 or 0 if material exist, or it is the material_id + + + + // --------------------------------------------- + // fill den, sie, and velocity on the mesh + // --------------------------------------------- + fill_regions_sgh_rz(Materials, + mesh, + State.node.coords, + State.node.vel, + GaussPoint_den, + GaussPoint_sie, + elem_mat_id, + voxel_elem_mat_id, + SimulationParamaters.region_fills, + SimulationParamaters.region_fills_host, + num_fills, + num_elems, + num_nodes, + rk_num_bins); + + + // note: the device and host side are updated in the above function + // --------------------------------------------- + + + // ---------------------------------------------------------------- + // Walk over the mesh and find dimensions of material storage arrays + // ---------------------------------------------------------------- + const size_t num_mats = Materials.num_mats; // the number of materials on the mesh + + // a counter for the Material index spaces + DCArrayKokkos num_elems_saved_for_mat(num_mats); + + for(int mat_id=0; mat_id (num_mats); + + State.MaterialPoints = CArray (num_mats); + State.MaterialCorners = CArray (num_mats); + // zones not needed with SGHRZ + + + // for ALE SGHRZ, add a buffer to num_elems_for_mat, like 10% of num_elems up to num_elems. + for(int mat_id=0; mat_id& node_coords, + DCArrayKokkos& node_vel, + DCArrayKokkos& MaterialPoints_sie, + DCArrayKokkos& MaterialPoints_stress, + const size_t num_dims, + const size_t num_elems, + const size_t num_nodes, + const size_t num_mat_points) const +{ + + // save elem quantities + FOR_ALL(matpt_lid, 0, num_mat_points, { + + // stress is always 3D even with 2D-RZ + for (size_t i = 0; i < 3; i++) { + for (size_t j = 0; j < 3; j++) { + MaterialPoints_stress(0, matpt_lid, i, j) = MaterialPoints_stress(1, matpt_lid, i, j); + } + } // end for + + MaterialPoints_sie(0, matpt_lid) = MaterialPoints_sie(1, matpt_lid); + }); // end parallel for + + // save nodal quantities + FOR_ALL(node_gid, 0, num_nodes, { + for (size_t i = 0; i < num_dims; i++) { + node_coords(0, node_gid, i) = node_coords(1, node_gid, i); + node_vel(0, node_gid, i) = node_vel(1, node_gid, i); + } + }); // end parallel for + Kokkos::fence(); + + return; +} // end rk_init + + + +///////////////////////////////////////////////////////////////////////////// +/// +/// \fn get_timestep_rz +/// +/// \brief This function calculates the time step by finding the shortest distance +/// between any two nodes in the mesh. +/// +/// WARNING WARNING : Only works for 2D, 4 node elements +/// +/// \param Simulation mesh +/// \param View of nodal position data +/// \param View of nodal velocity data +/// \param View of element sound speed +/// \param View of element volume +/// +///////////////////////////////////////////////////////////////////////////// +void SGHRZ::get_timestep_rz(Mesh_t& mesh, + DCArrayKokkos& node_coords, + DCArrayKokkos& node_vel, + DCArrayKokkos& GaussPoints_vol, + DCArrayKokkos& MaterialPoints_sspd, + DCArrayKokkos& MaterialPoints_eroded, + DCArrayKokkos& MaterialToMeshMaps_elem, + size_t num_mat_elems, + double time_value, + const double graphics_time, + const double time_final, + const double dt_max, + const double dt_min, + const double dt_cfl, + double& dt, + const double fuzz) const +{ + // increase dt by 10%, that is the largest dt value + dt = dt * 1.1; + + double dt_lcl; + double min_dt_calc; + REDUCE_MIN(mat_elem_lid, 0, num_mat_elems, dt_lcl, { + + size_t elem_gid = MaterialToMeshMaps_elem(mat_elem_lid); + + double coords0[8]; // element coords + ViewCArrayKokkos coords(coords0, 4, 2); + + double distance0[6]; // array for holding distances between each node + ViewCArrayKokkos dist(distance0, 6); + + // Getting the coordinates of the nodes of the element + for (size_t node_lid = 0; node_lid < 4; node_lid++) { + for (size_t dim = 0; dim < mesh.num_dims; dim++) { + coords(node_lid, dim) = node_coords(1, mesh.nodes_in_elem(elem_gid, node_lid), dim); + } // end for dim + } // end for loop over node_lid + + // Only works for 2D + // Solving for the magnitude of distance between each node + size_t count = 0; + for (size_t i = 0; i < 3; i++) { + for (size_t j = i + 1; j <= 3; j++) { + // returns magnitude of distance between each node, 6 total options + dist(count) = fabs( + sqrt(pow((coords(i, 0) - coords(j, 0)), 2.0) + + pow((coords(i, 1) - coords(j, 1)), 2.0) ) + ); + count++; + } // end for j + } // end for i + + double dist_min = dist(0); + + for (int i = 0; i < 6; ++i) { + dist_min = fmin(dist(i), dist_min); + } + + // local dt calc based on CFL + double dt_lcl_ = dt_cfl * dist_min / (MaterialPoints_sspd(elem_gid) + fuzz); + + + if (MaterialToMeshMaps_elem(mat_elem_lid) == true){ + dt_lcl_ = 1.0e32; // a huge time step as this element doesn't exist + } + + // make dt be in bounds + dt_lcl_ = fmin(dt_lcl_, dt_max); // make dt small than dt_max + dt_lcl_ = fmax(dt_lcl_, dt_min); // make dt larger than dt_min + + if (dt_lcl_ < dt_lcl) { + dt_lcl = dt_lcl_; + } + }, min_dt_calc); // end parallel reduction + Kokkos::fence(); + + // save the min dt + if (min_dt_calc < dt) { + dt = min_dt_calc; + } + + // ensure time step hits the graphics time intervals + dt = fmin(dt, (graphics_time - time_value) + fuzz); + + // make dt be exact for final time + dt = fmin(dt, time_final - time_value); + + return; +} // end get_timestep_rz diff --git a/single-node-refactor/src/common/mesh_io.h b/single-node-refactor/src/common/mesh_io.h index 580e84dca..0bf7d5746 100644 --- a/single-node-refactor/src/common/mesh_io.h +++ b/single-node-refactor/src/common/mesh_io.h @@ -1412,7 +1412,9 @@ class MeshWriter FILE* out_elem_state; // element average state char filename[128]; - sprintf(filename, "state/mat_pt_state_t_%6.4e.txt", time_value); + int max_len = sizeof filename; + + snprintf(filename, max_len, "state/mat_pt_state_t_%6.4e.txt", time_value); // output files From 04a2a4b1bd1da5bc89feec43426f25f0084f5af6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CAdrian-Diaz=E2=80=9D?= <“adriandiaz1117@gmail.com”> Date: Thu, 15 Aug 2024 20:43:05 -0600 Subject: [PATCH 125/233] BUG: use midpoint evaluation --- .../SGH_Solver/src/sgh_optimization.cpp | 330 +++++------------- 1 file changed, 93 insertions(+), 237 deletions(-) diff --git a/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/sgh_optimization.cpp b/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/sgh_optimization.cpp index 9358339e8..7d8a39ce0 100644 --- a/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/sgh_optimization.cpp +++ b/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/sgh_optimization.cpp @@ -674,119 +674,117 @@ void FEA_Module_SGH::compute_topology_optimization_adjoint_full(Teuchos::RCP::iterator last_checkpoint = dynamic_checkpoint_set->end(); - --last_checkpoint; - previous_velocity_vector = previous_node_velocities_distributed->getLocalView(Tpetra::Access::ReadOnly); - previous_coordinate_vector = previous_node_coords_distributed->getLocalView(Tpetra::Access::ReadOnly); - previous_element_internal_energy = previous_element_internal_energy_distributed->getLocalView(Tpetra::Access::ReadOnly); - current_velocity_vector = last_checkpoint->get_vector_pointer(V_DATA)->getLocalView(Tpetra::Access::ReadOnly); - current_coordinate_vector = last_checkpoint->get_vector_pointer(U_DATA)->getLocalView(Tpetra::Access::ReadOnly); - current_element_internal_energy = last_checkpoint->get_vector_pointer(SIE_DATA)->getLocalView(Tpetra::Access::ReadOnly); - - } - else{ - previous_velocity_vector = (*forward_solve_velocity_data)[cycle + 1]->getLocalView(Tpetra::Access::ReadOnly); - current_velocity_vector = (*forward_solve_velocity_data)[cycle]->getLocalView(Tpetra::Access::ReadOnly); - - previous_coordinate_vector = (*forward_solve_coordinate_data)[cycle + 1]->getLocalView(Tpetra::Access::ReadOnly); - current_coordinate_vector = (*forward_solve_coordinate_data)[cycle]->getLocalView(Tpetra::Access::ReadOnly); - - previous_element_internal_energy = (*forward_solve_internal_energy_data)[cycle + 1]->getLocalView(Tpetra::Access::ReadOnly); - current_element_internal_energy = (*forward_solve_internal_energy_data)[cycle]->getLocalView(Tpetra::Access::ReadOnly); - } - - // interface of arrays for current implementation of force calculation - - FOR_ALL_CLASS(node_gid, 0, nlocal_nodes + nghost_nodes, { - for (int idim = 0; idim < num_dim; idim++) { - node_vel(rk_level, node_gid, idim) = current_velocity_vector(node_gid, idim); - node_coords(rk_level, node_gid, idim) = current_coordinate_vector(node_gid, idim); - } - }); - Kokkos::fence(); - - FOR_ALL_CLASS(elem_gid, 0, rnum_elem, { - elem_sie(rk_level, elem_gid) = current_element_internal_energy(elem_gid, 0); - }); - Kokkos::fence(); - - // set state according to phase data at this timestep - get_vol(); - - // ---- Calculate velocity diveregence for the element ---- - if (num_dim == 2) { - get_divergence2D(elem_div, - node_coords, - node_vel, - elem_vol); - } - else{ - get_divergence(elem_div, - node_coords, - node_vel, - elem_vol); - } // end if 2D - - // ---- Calculate elem state (den, pres, sound speed, stress) for next time step ---- - if (num_dim == 2) { - update_state2D(material, - *mesh, - node_coords, - node_vel, - elem_den, - elem_pres, - elem_stress, - elem_sspd, - elem_sie, - elem_vol, - elem_mass, - elem_mat_id, - 1.0, - cycle); - } - else{ - update_state(material, - *mesh, - node_coords, - node_vel, - elem_den, - elem_pres, - elem_stress, - elem_sspd, - elem_sie, - elem_vol, - elem_mass, - elem_mat_id, - 1.0, - cycle); - } - - if (num_dim == 2) { - get_force_sgh2D(material, - *mesh, - node_coords, - node_vel, - elem_den, - elem_sie, - elem_pres, - elem_stress, - elem_sspd, - elem_vol, - elem_div, - elem_mat_id, - corner_force, - 1.0, - cycle); - } - else{ - get_force_sgh(material, - *mesh, - node_coords, - node_vel, - elem_den, - elem_sie, - elem_pres, - elem_stress, - elem_sspd, - elem_vol, - elem_div, - elem_mat_id, - corner_force, - 1.0, - cycle); - } - - if (have_loading_conditions) { - applied_forces(material, - *mesh, - node_coords, - node_vel, - node_mass, - elem_den, - elem_vol, - elem_div, - elem_mat_id, - corner_force, - 1.0, - cycle); - } //state_adjoint_time_start = Explicit_Solver_Pointer_->CPU_Time(); get_force_dgradient_sgh(material, @@ -1943,15 +1795,19 @@ void FEA_Module_SGH::compute_topology_optimization_gradient_tally(Teuchos::RCPgetLocalView(Tpetra::Access::ReadOnly); current_psi_adjoint_vector = psi_adjoint_vector_distributed->getLocalView(Tpetra::Access::ReadOnly); + previous_adjoint_vector = previous_adjoint_vector_distributed->getLocalView(Tpetra::Access::ReadOnly); + previous_psi_adjoint_vector = previous_psi_adjoint_vector_distributed->getLocalView(Tpetra::Access::ReadOnly); } else{ current_adjoint_vector = (*adjoint_vector_data)[cycle]->getLocalView(Tpetra::Access::ReadOnly); current_psi_adjoint_vector = (*psi_adjoint_vector_data)[cycle]->getLocalView(Tpetra::Access::ReadOnly); + previous_adjoint_vector = (*adjoint_vector_data)[cycle+1]->getLocalView(Tpetra::Access::ReadOnly); + previous_psi_adjoint_vector = (*psi_adjoint_vector_data)[cycle+1]->getLocalView(Tpetra::Access::ReadOnly); } // derivatives of forces at corners stored in corner_vector_storage buffer by previous routine FOR_ALL_CLASS(elem_id, 0, rnum_elem, { @@ -1964,7 +1820,7 @@ void FEA_Module_SGH::compute_topology_optimization_gradient_tally(Teuchos::RCP Date: Fri, 16 Aug 2024 08:25:16 -0500 Subject: [PATCH 126/233] Ijk update (#219) * ENH: Swapping to ijk internally * ENH: Clean b_matrix to remove conversion array * ENH: Clean up volume function to remove conversion array * STYLE: Tidying up --- .../src/common/geometry_new.h | 316 +++++++++--------- single-node-refactor/src/common/mesh.h | 27 +- single-node-refactor/src/common/mesh_io.h | 109 +++--- 3 files changed, 225 insertions(+), 227 deletions(-) diff --git a/single-node-refactor/src/common/geometry_new.h b/single-node-refactor/src/common/geometry_new.h index 03d849cd7..3126d2a63 100644 --- a/single-node-refactor/src/common/geometry_new.h +++ b/single-node-refactor/src/common/geometry_new.h @@ -91,175 +91,176 @@ void get_bmatrix(const ViewCArrayKokkos& B_matrix, z(node_lid) = node_coords(1, elem_node_gids(node_lid), 2); } // end for + double twelth = 1. / 12.; - B_matrix(0, 0) = (+y(1) * (-z(2) - z(3) + z(4) + z(5) ) - + y(2) * (+z(1) - z(3) ) - + y(3) * (+z(1) + z(2) - z(4) - z(7) ) - + y(4) * (-z(1) + z(3) - z(5) + z(7) ) + B_matrix(0, 0) = (+y(1) * (-z(3) - z(2) + z(4) + z(5) ) + + y(3) * (+z(1) - z(2) ) + + y(2) * (+z(1) + z(3) - z(4) - z(6) ) + + y(4) * (-z(1) + z(2) - z(5) + z(6) ) + y(5) * (-z(1) + z(4) ) - + y(7) * (+z(3) - z(4) ) ) * twelth; + + y(6) * (+z(2) - z(4) ) ) * twelth; - B_matrix(1, 0) = (+y(0) * (+z(2) + z(3) - z(4) - z(5) ) - + y(2) * (-z(0) - z(3) + z(5) + z(6) ) - + y(3) * (-z(0) + z(2) ) + B_matrix(1, 0) = (+y(0) * (+z(3) + z(2) - z(4) - z(5) ) + + y(3) * (-z(0) - z(2) + z(5) + z(7) ) + + y(2) * (-z(0) + z(3) ) + y(4) * (+z(0) - z(5) ) - + y(5) * (+z(0) - z(2) + z(4) - z(6) ) - + y(6) * (-z(2) + z(5) ) ) * twelth; - - B_matrix(2, 0) = (+y(0) * (-z(1) + z(3) ) - + y(1) * (+z(0) + z(3) - z(5) - z(6) ) - + y(3) * (-z(0) - z(1) + z(6) + z(7) ) - + y(5) * (+z(1) - z(6) ) - + y(6) * (+z(1) - z(3) + z(5) - z(7) ) - + y(7) * (-z(3) + z(6) ) ) * twelth; - - B_matrix(3, 0) = (+y(0) * (-z(1) - z(2) + z(4) + z(7) ) - + y(1) * (+z(0) - z(2) ) - + y(2) * (+z(0) + z(1) - z(6) - z(7) ) - + y(4) * (-z(0) + z(7) ) - + y(6) * (+z(2) - z(7) ) - + y(7) * (-z(0) + z(2) - z(4) + z(6) ) ) * twelth; - - B_matrix(4, 0) = (+y(0) * (+z(1) - z(3) + z(5) - z(7) ) + + y(5) * (+z(0) - z(3) + z(4) - z(7) ) + + y(7) * (-z(3) + z(5) ) ) * twelth; + + B_matrix(2, 0) = (+y(0) * (-z(1) - z(3) + z(4) + z(6) ) + + y(1) * (+z(0) - z(3) ) + + y(3) * (+z(0) + z(1) - z(7) - z(6) ) + + y(4) * (-z(0) + z(6) ) + + y(7) * (+z(3) - z(6) ) + + y(6) * (-z(0) + z(3) - z(4) + z(7) ) ) * twelth; + + B_matrix(3, 0) = (+y(0) * (-z(1) + z(2) ) + + y(1) * (+z(0) + z(2) - z(5) - z(7) ) + + y(2) * (-z(0) - z(1) + z(7) + z(6) ) + + y(5) * (+z(1) - z(7) ) + + y(7) * (+z(1) - z(2) + z(5) - z(6) ) + + y(6) * (-z(2) + z(7) ) ) * twelth; + + B_matrix(4, 0) = (+y(0) * (+z(1) - z(2) + z(5) - z(6) ) + y(1) * (-z(0) + z(5) ) - + y(3) * (+z(0) - z(7) ) - + y(5) * (-z(0) - z(1) + z(6) + z(7) ) - + y(6) * (-z(5) + z(7) ) - + y(7) * (+z(0) + z(3) - z(5) - z(6) ) ) * twelth; + + y(2) * (+z(0) - z(6) ) + + y(5) * (-z(0) - z(1) + z(7) + z(6) ) + + y(7) * (-z(5) + z(6) ) + + y(6) * (+z(0) + z(2) - z(5) - z(7) ) ) * twelth; B_matrix(5, 0) = (+y(0) * (+z(1) - z(4) ) - + y(1) * (-z(0) + z(2) - z(4) + z(6) ) - + y(2) * (-z(1) + z(6) ) - + y(4) * (+z(0) + z(1) - z(6) - z(7) ) - + y(6) * (-z(1) - z(2) + z(4) + z(7) ) - + y(7) * (+z(4) - z(6) ) ) * twelth; - - B_matrix(6, 0) = (+y(1) * (+z(2) - z(5) ) - + y(2) * (-z(1) + z(3) - z(5) + z(7) ) - + y(3) * (-z(2) + z(7) ) - + y(4) * (+z(5) - z(7) ) - + y(5) * (+z(1) + z(2) - z(4) - z(7) ) - + y(7) * (-z(2) - z(3) + z(4) + z(5) ) ) * twelth; - - B_matrix(7, 0) = (+y(0) * (-z(3) + z(4) ) - + y(2) * (+z(3) - z(6) ) - + y(3) * (+z(0) - z(2) + z(4) - z(6) ) - + y(4) * (-z(0) - z(3) + z(5) + z(6) ) - + y(5) * (-z(4) + z(6) ) - + y(6) * (+z(2) + z(3) - z(4) - z(5) ) ) * twelth; - - B_matrix(0, 1) = (+z(1) * (-x(2) - x(3) + x(4) + x(5) ) - + z(2) * (+x(1) - x(3) ) - + z(3) * (+x(1) + x(2) - x(4) - x(7) ) - + z(4) * (-x(1) + x(3) - x(5) + x(7) ) + + y(1) * (-z(0) + z(3) - z(4) + z(7) ) + + y(3) * (-z(1) + z(7) ) + + y(4) * (+z(0) + z(1) - z(7) - z(6) ) + + y(7) * (-z(1) - z(3) + z(4) + z(6) ) + + y(6) * (+z(4) - z(7) ) ) * twelth; + + B_matrix(6, 0) = (+y(0) * (-z(2) + z(4) ) + + y(3) * (+z(2) - z(7) ) + + y(2) * (+z(0) - z(3) + z(4) - z(7) ) + + y(4) * (-z(0) - z(2) + z(5) + z(7) ) + + y(5) * (-z(4) + z(7) ) + + y(7) * (+z(3) + z(2) - z(4) - z(5) ) ) * twelth; + + B_matrix(7, 0) = (+y(1) * (+z(3) - z(5) ) + + y(3) * (-z(1) + z(2) - z(5) + z(6) ) + + y(2) * (-z(3) + z(6) ) + + y(4) * (+z(5) - z(6) ) + + y(5) * (+z(1) + z(3) - z(4) - z(6) ) + + y(6) * (-z(3) - z(2) + z(4) + z(5) ) ) * twelth; + + B_matrix(0, 1) = (+z(1) * (-x(3) - x(2) + x(4) + x(5) ) + + z(3) * (+x(1) - x(2) ) + + z(2) * (+x(1) + x(3) - x(4) - x(6) ) + + z(4) * (-x(1) + x(2) - x(5) + x(6) ) + z(5) * (-x(1) + x(4) ) - + z(7) * (+x(3) - x(4) ) ) * twelth; + + z(6) * (+x(2) - x(4) ) ) * twelth; - B_matrix(1, 1) = (+z(0) * (+x(2) + x(3) - x(4) - x(5) ) - + z(2) * (-x(0) - x(3) + x(5) + x(6) ) - + z(3) * (-x(0) + x(2) ) + B_matrix(1, 1) = (+z(0) * (+x(3) + x(2) - x(4) - x(5) ) + + z(3) * (-x(0) - x(2) + x(5) + x(7) ) + + z(2) * (-x(0) + x(3) ) + z(4) * (+x(0) - x(5) ) - + z(5) * (+x(0) - x(2) + x(4) - x(6) ) - + z(6) * (-x(2) + x(5) ) ) * twelth; - - B_matrix(2, 1) = (+z(0) * (-x(1) + x(3) ) - + z(1) * (+x(0) + x(3) - x(5) - x(6) ) - + z(3) * (-x(0) - x(1) + x(6) + x(7) ) - + z(5) * (+x(1) - x(6) ) - + z(6) * (+x(1) - x(3) + x(5) - x(7) ) - + z(7) * (-x(3) + x(6) ) ) * twelth; - - B_matrix(3, 1) = (+z(0) * (-x(1) - x(2) + x(4) + x(7) ) - + z(1) * (+x(0) - x(2) ) - + z(2) * (+x(0) + x(1) - x(6) - x(7) ) - + z(4) * (-x(0) + x(7) ) - + z(6) * (+x(2) - x(7) ) - + z(7) * (-x(0) + x(2) - x(4) + x(6) ) ) * twelth; - - B_matrix(4, 1) = (+z(0) * (+x(1) - x(3) + x(5) - x(7) ) + + z(5) * (+x(0) - x(3) + x(4) - x(7) ) + + z(7) * (-x(3) + x(5) ) ) * twelth; + + B_matrix(2, 1) = (+z(0) * (-x(1) - x(3) + x(4) + x(6) ) + + z(1) * (+x(0) - x(3) ) + + z(3) * (+x(0) + x(1) - x(7) - x(6) ) + + z(4) * (-x(0) + x(6) ) + + z(7) * (+x(3) - x(6) ) + + z(6) * (-x(0) + x(3) - x(4) + x(7) ) ) * twelth; + + B_matrix(3, 1) = (+z(0) * (-x(1) + x(2) ) + + z(1) * (+x(0) + x(2) - x(5) - x(7) ) + + z(2) * (-x(0) - x(1) + x(7) + x(6) ) + + z(5) * (+x(1) - x(7) ) + + z(7) * (+x(1) - x(2) + x(5) - x(6) ) + + z(6) * (-x(2) + x(7) ) ) * twelth; + + B_matrix(4, 1) = (+z(0) * (+x(1) - x(2) + x(5) - x(6) ) + z(1) * (-x(0) + x(5) ) - + z(3) * (+x(0) - x(7) ) - + z(5) * (-x(0) - x(1) + x(6) + x(7) ) - + z(6) * (-x(5) + x(7) ) - + z(7) * (+x(0) + x(3) - x(5) - x(6) ) ) * twelth; + + z(2) * (+x(0) - x(6) ) + + z(5) * (-x(0) - x(1) + x(7) + x(6) ) + + z(7) * (-x(5) + x(6) ) + + z(6) * (+x(0) + x(2) - x(5) - x(7) ) ) * twelth; B_matrix(5, 1) = (+z(0) * (+x(1) - x(4) ) - + z(1) * (-x(0) + x(2) - x(4) + x(6) ) - + z(2) * (-x(1) + x(6) ) - + z(4) * (+x(0) + x(1) - x(6) - x(7) ) - + z(6) * (-x(1) - x(2) + x(4) + x(7) ) - + z(7) * (+x(4) - x(6) ) ) * twelth; - - B_matrix(6, 1) = (+z(1) * (+x(2) - x(5) ) - + z(2) * (-x(1) + x(3) - x(5) + x(7) ) - + z(3) * (-x(2) + x(7) ) - + z(4) * (+x(5) - x(7) ) - + z(5) * (+x(1) + x(2) - x(4) - x(7) ) - + z(7) * (-x(2) - x(3) + x(4) + x(5) ) ) * twelth; - - B_matrix(7, 1) = (+z(0) * (-x(3) + x(4) ) - + z(2) * (+x(3) - x(6) ) - + z(3) * (+x(0) - x(2) + x(4) - x(6) ) - + z(4) * (-x(0) - x(3) + x(5) + x(6) ) - + z(5) * (-x(4) + x(6) ) - + z(6) * (+x(2) + x(3) - x(4) - x(5) ) ) * twelth; - - B_matrix(0, 2) = (+x(1) * (-y(2) - y(3) + y(4) + y(5) ) - + x(2) * (+y(1) - y(3) ) - + x(3) * (+y(1) + y(2) - y(4) - y(7) ) - + x(4) * (-y(1) + y(3) - y(5) + y(7) ) + + z(1) * (-x(0) + x(3) - x(4) + x(7) ) + + z(3) * (-x(1) + x(7) ) + + z(4) * (+x(0) + x(1) - x(7) - x(6) ) + + z(7) * (-x(1) - x(3) + x(4) + x(6) ) + + z(6) * (+x(4) - x(7) ) ) * twelth; + + B_matrix(6, 1) = (+z(0) * (-x(2) + x(4) ) + + z(3) * (+x(2) - x(7) ) + + z(2) * (+x(0) - x(3) + x(4) - x(7) ) + + z(4) * (-x(0) - x(2) + x(5) + x(7) ) + + z(5) * (-x(4) + x(7) ) + + z(7) * (+x(3) + x(2) - x(4) - x(5) ) ) * twelth; + + B_matrix(7, 1) = (+z(1) * (+x(3) - x(5) ) + + z(3) * (-x(1) + x(2) - x(5) + x(6) ) + + z(2) * (-x(3) + x(6) ) + + z(4) * (+x(5) - x(6) ) + + z(5) * (+x(1) + x(3) - x(4) - x(6) ) + + z(6) * (-x(3) - x(2) + x(4) + x(5) ) ) * twelth; + + B_matrix(0, 2) = (+x(1) * (-y(3) - y(2) + y(4) + y(5) ) + + x(3) * (+y(1) - y(2) ) + + x(2) * (+y(1) + y(3) - y(4) - y(6) ) + + x(4) * (-y(1) + y(2) - y(5) + y(6) ) + x(5) * (-y(1) + y(4) ) - + x(7) * (+y(3) - y(4) ) ) * twelth; + + x(6) * (+y(2) - y(4) ) ) * twelth; - B_matrix(1, 2) = (+x(0) * (+y(2) + y(3) - y(4) - y(5) ) - + x(2) * (-y(0) - y(3) + y(5) + y(6) ) - + x(3) * (-y(0) + y(2) ) + B_matrix(1, 2) = (+x(0) * (+y(3) + y(2) - y(4) - y(5) ) + + x(3) * (-y(0) - y(2) + y(5) + y(7) ) + + x(2) * (-y(0) + y(3) ) + x(4) * (+y(0) - y(5) ) - + x(5) * (+y(0) - y(2) + y(4) - y(6) ) - + x(6) * (-y(2) + y(5) ) ) * twelth; - - B_matrix(2, 2) = (+x(0) * (-y(1) + y(3) ) - + x(1) * (+y(0) + y(3) - y(5) - y(6) ) - + x(3) * (-y(0) - y(1) + y(6) + y(7) ) - + x(5) * (+y(1) - y(6) ) - + x(6) * (+y(1) - y(3) + y(5) - y(7) ) - + x(7) * (-y(3) + y(6) ) ) * twelth; - - B_matrix(3, 2) = (+x(0) * (-y(1) - y(2) + y(4) + y(7) ) - + x(1) * (+y(0) - y(2) ) - + x(2) * (+y(0) + y(1) - y(6) - y(7) ) - + x(4) * (-y(0) + y(7) ) - + x(6) * (+y(2) - y(7) ) - + x(7) * (-y(0) + y(2) - y(4) + y(6) ) ) * twelth; - - B_matrix(4, 2) = (+x(0) * (+y(1) - y(3) + y(5) - y(7) ) + + x(5) * (+y(0) - y(3) + y(4) - y(7) ) + + x(7) * (-y(3) + y(5) ) ) * twelth; + + B_matrix(2, 2) = (+x(0) * (-y(1) - y(3) + y(4) + y(6) ) + + x(1) * (+y(0) - y(3) ) + + x(3) * (+y(0) + y(1) - y(7) - y(6) ) + + x(4) * (-y(0) + y(6) ) + + x(7) * (+y(3) - y(6) ) + + x(6) * (-y(0) + y(3) - y(4) + y(7) ) ) * twelth; + + B_matrix(3, 2) = (+x(0) * (-y(1) + y(2) ) + + x(1) * (+y(0) + y(2) - y(5) - y(7) ) + + x(2) * (-y(0) - y(1) + y(7) + y(6) ) + + x(5) * (+y(1) - y(7) ) + + x(7) * (+y(1) - y(2) + y(5) - y(6) ) + + x(6) * (-y(2) + y(7) ) ) * twelth; + + B_matrix(4, 2) = (+x(0) * (+y(1) - y(2) + y(5) - y(6) ) + x(1) * (-y(0) + y(5) ) - + x(3) * (+y(0) - y(7) ) - + x(5) * (-y(0) - y(1) + y(6) + y(7) ) - + x(6) * (-y(5) + y(7) ) - + x(7) * (+y(0) + y(3) - y(5) - y(6) ) ) * twelth; + + x(2) * (+y(0) - y(6) ) + + x(5) * (-y(0) - y(1) + y(7) + y(6) ) + + x(7) * (-y(5) + y(6) ) + + x(6) * (+y(0) + y(2) - y(5) - y(7) ) ) * twelth; B_matrix(5, 2) = (+x(0) * (+y(1) - y(4) ) - + x(1) * (-y(0) + y(2) - y(4) + y(6) ) - + x(2) * (-y(1) + y(6) ) - + x(4) * (+y(0) + y(1) - y(6) - y(7) ) - + x(6) * (-y(1) - y(2) + y(4) + y(7) ) - + x(7) * (+y(4) - y(6) ) ) * twelth; - - B_matrix(6, 2) = (+x(1) * (+y(2) - y(5) ) - + x(2) * (-y(1) + y(3) - y(5) + y(7) ) - + x(3) * (-y(2) + y(7) ) - + x(4) * (+y(5) - y(7) ) - + x(5) * (+y(1) + y(2) - y(4) - y(7) ) - + x(7) * (-y(2) - y(3) + y(4) + y(5) ) ) * twelth; - - B_matrix(7, 2) = (+x(0) * (-y(3) + y(4) ) - + x(2) * (+y(3) - y(6) ) - + x(3) * (+y(0) - y(2) + y(4) - y(6) ) - + x(4) * (-y(0) - y(3) + y(5) + y(6) ) - + x(5) * (-y(4) + y(6) ) - + x(6) * (+y(2) + y(3) - y(4) - y(5) ) ) * twelth; + + x(1) * (-y(0) + y(3) - y(4) + y(7) ) + + x(3) * (-y(1) + y(7) ) + + x(4) * (+y(0) + y(1) - y(7) - y(6) ) + + x(7) * (-y(1) - y(3) + y(4) + y(6) ) + + x(6) * (+y(4) - y(7) ) ) * twelth; + + B_matrix(6, 2) = (+x(0) * (-y(2) + y(4) ) + + x(3) * (+y(2) - y(7) ) + + x(2) * (+y(0) - y(3) + y(4) - y(7) ) + + x(4) * (-y(0) - y(2) + y(5) + y(7) ) + + x(5) * (-y(4) + y(7) ) + + x(7) * (+y(3) + y(2) - y(4) - y(5) ) ) * twelth; + + B_matrix(7, 2) = (+x(1) * (+y(3) - y(5) ) + + x(3) * (-y(1) + y(2) - y(5) + y(6) ) + + x(2) * (-y(3) + y(6) ) + + x(4) * (+y(5) - y(6) ) + + x(5) * (+y(1) + y(3) - y(4) - y(6) ) + + x(6) * (-y(3) - y(2) + y(4) + y(5) ) ) * twelth; } // end subroutine ///////////////////////////////////////////////////////////////////////////// @@ -347,17 +348,18 @@ void get_vol_hex(const DCArrayKokkos& elem_vol, // element volume elem_vol(elem_gid) = - (x(1) * (y(3) * (-z(0) + z(2)) + y(4) * (z(0) - z(5)) + y(0) * (z(2) + z(3) - z(4) - z(5)) + y(6) * (-z(2) + z(5)) + y(5) * (z(0) - z(2) + z(4) - z(6)) + y(2) * (-z(0) - z(3) + z(5) + z(6))) + - x(7) * (y(0) * (-z(3) + z(4)) + y(6) * (z(2) + z(3) - z(4) - z(5)) + y(2) * (z(3) - z(6)) + y(3) * (z(0) - z(2) + z(4) - z(6)) + y(5) * (-z(4) + z(6)) + y(4) * (-z(0) - z(3) + z(5) + z(6))) + - x(3) * (y(1) * (z(0) - z(2)) + y(7) * (-z(0) + z(2) - z(4) + z(6)) + y(6) * (z(2) - z(7)) + y(2) * (z(0) + z(1) - z(6) - z(7)) + y(4) * (-z(0) + z(7)) + y(0) * (-z(1) - z(2) + z(4) + z(7))) + - x(5) * (y(0) * (z(1) - z(4)) + y(7) * (z(4) - z(6)) + y(2) * (-z(1) + z(6)) + y(1) * (-z(0) + z(2) - z(4) + z(6)) + y(4) * (z(0) + z(1) - z(6) - z(7)) + y(6) * (-z(1) - z(2) + z(4) + z(7))) + - x(6) * (y(1) * (z(2) - z(5)) + y(7) * (-z(2) - z(3) + z(4) + z(5)) + y(5) * (z(1) + z(2) - z(4) - z(7)) + y(4) * (z(5) - z(7)) + y(3) * (-z(2) + z(7)) + y(2) * (-z(1) + z(3) - z(5) + z(7))) + - x(0) * (y(2) * (z(1) - z(3)) + y(7) * (z(3) - z(4)) + y(5) * (-z(1) + z(4)) + y(1) * (-z(2) - z(3) + z(4) + z(5)) + y(3) * (z(1) + z(2) - z(4) - z(7)) + y(4) * (-z(1) + z(3) - z(5) + z(7))) + - x(2) * (y(0) * (-z(1) + z(3)) + y(5) * (z(1) - z(6)) + y(1) * (z(0) + z(3) - z(5) - z(6)) + y(7) * (-z(3) + z(6)) + y(6) * (z(1) - z(3) + z(5) - z(7)) + y(3) * (-z(0) - z(1) + z(6) + z(7))) + + (x(1) * (y(2) * (-z(0) + z(3)) + y(4) * (z(0) - z(5)) + y(0) * (z(3) + z(2) - z(4) - z(5)) + y(7) * (-z(3) + z(5)) + y(5) * (z(0) - z(3) + z(4) - z(7)) + y(3) * (-z(0) - z(2) + z(5) + z(7))) + + x(6) * (y(0) * (-z(2) + z(4)) + y(7) * (z(3) + z(2) - z(4) - z(5)) + y(3) * (z(2) - z(7)) + y(2) * (z(0) - z(3) + z(4) - z(7)) + y(5) * (-z(4) + z(7)) + y(4) * (-z(0) - z(2) + z(5) + z(7))) + + x(2) * (y(1) * (z(0) - z(3)) + y(6) * (-z(0) + z(3) - z(4) + z(7)) + y(7) * (z(3) - z(6)) + y(3) * (z(0) + z(1) - z(7) - z(6)) + y(4) * (-z(0) + z(6)) + y(0) * (-z(1) - z(3) + z(4) + z(6))) + + x(5) * (y(0) * (z(1) - z(4)) + y(6) * (z(4) - z(7)) + y(3) * (-z(1) + z(7)) + y(1) * (-z(0) + z(3) - z(4) + z(7)) + y(4) * (z(0) + z(1) - z(7) - z(6)) + y(7) * (-z(1) - z(3) + z(4) + z(6))) + + x(7) * (y(1) * (z(3) - z(5)) + y(6) * (-z(3) - z(2) + z(4) + z(5)) + y(5) * (z(1) + z(3) - z(4) - z(6)) + y(4) * (z(5) - z(6)) + y(2) * (-z(3) + z(6)) + y(3) * (-z(1) + z(2) - z(5) + z(6))) + + x(0) * (y(3) * (z(1) - z(2)) + y(6) * (z(2) - z(4)) + y(5) * (-z(1) + z(4)) + y(1) * (-z(3) - z(2) + z(4) + z(5)) + y(2) * (z(1) + z(3) - z(4) - z(6)) + y(4) * (-z(1) + z(2) - z(5) + z(6))) + + x(3) * (y(0) * (-z(1) + z(2)) + y(5) * (z(1) - z(7)) + y(1) * (z(0) + z(2) - z(5) - z(7)) + y(6) * (-z(2) + z(7)) + y(7) * (z(1) - z(2) + z(5) - z(6)) + y(2) * (-z(0) - z(1) + z(7) + z(6))) + x(4) * - (y(1) * (-z(0) + z(5)) + y(7) * (z(0) + z(3) - z(5) - z(6)) + y(3) * (z(0) - z(7)) + y(0) * (z(1) - z(3) + z(5) - z(7)) + y(6) * (-z(5) + z(7)) + y(5) * (-z(0) - z(1) + z(6) + z(7)))) * + (y(1) * (-z(0) + z(5)) + y(6) * (z(0) + z(2) - z(5) - z(7)) + y(2) * (z(0) - z(6)) + y(0) * (z(1) - z(2) + z(5) - z(6)) + y(7) * (-z(5) + z(6)) + y(5) * (-z(0) - z(1) + z(7) + z(6)))) * twelth; + // std::cout<<"Calculating volume for hex = "<(8); - convert_point_number_in_Hex(0) = 0; - convert_point_number_in_Hex(1) = 1; - convert_point_number_in_Hex(2) = 3; - convert_point_number_in_Hex(3) = 2; - convert_point_number_in_Hex(4) = 4; - convert_point_number_in_Hex(5) = 5; - convert_point_number_in_Hex(6) = 7; - convert_point_number_in_Hex(7) = 6; int rk_num_bins = SimulationParamaters.dynamic_options.rk_num_bins; @@ -745,7 +757,7 @@ class MeshBuilder num_points_i, num_points_j); // convert this_point index to the FE index convention - int this_index = convert_point_number_in_Hex(this_point); + int this_index = this_point; //convert_point_number_in_Hex(this_point); // store the points in this elem according the the finite // element numbering convention @@ -908,7 +920,7 @@ class MeshBuilder // store the point IDs for this elem where the range is // (i:i+1, j:j+1, k:k+1) for a linear hexahedron // (i:(i+1)*Pn_order, j:(j+1)*Pn_order, k:(k+1)*Pn_order) for a Pn hexahedron - int this_point = 0; + int node_lid = 0; int k_local = 0; for (int kcount=k*Pn_order; kcount<=(k+1)*Pn_order; kcount++){ @@ -922,20 +934,12 @@ class MeshBuilder // global id for the points size_t node_gid = get_id(icount, jcount, kcount, num_points_i, num_points_j); - - // convert this_point index to the FE index convention - // int order[3] = {Pn_order, Pn_order, Pn_order}; - // int this_index = PointIndexFromIJK(i_local, j_local, k_local, order); - - - // store the points in this elem according the the finite - // element numbering convention // Saved using i,j,k indexing - mesh.nodes_in_elem.host(elem_gid, this_point) = node_gid; + mesh.nodes_in_elem.host(elem_gid, node_lid) = node_gid; // increment the point counting index - this_point = this_point + 1; + node_lid = node_lid + 1; i_local++; } // end for icount @@ -1268,10 +1272,21 @@ class MeshWriter } fprintf(out[0], "%10lu\n", num_elems); + int convert_ijk_to_ensight[8]; + convert_ijk_to_ensight[0] = 0; + convert_ijk_to_ensight[1] = 1; + convert_ijk_to_ensight[2] = 3; + convert_ijk_to_ensight[3] = 2; + convert_ijk_to_ensight[4] = 4; + convert_ijk_to_ensight[5] = 5; + convert_ijk_to_ensight[6] = 7; + convert_ijk_to_ensight[7] = 6; + + // write all global point numbers for this cell for (int elem_gid = 0; elem_gid < num_elems; elem_gid++) { for (int node_lid = 0; node_lid < mesh.num_nodes_in_elem; node_lid++) { - fprintf(out[0], "%10lu\t", mesh.nodes_in_elem.host(elem_gid, node_lid) + 1); // note: node_gid starts at 1 + fprintf(out[0], "%10lu\t", mesh.nodes_in_elem.host(elem_gid, convert_ijk_to_ensight[node_lid]) + 1); // note: node_gid starts at 1 } fprintf(out[0], "\n"); } @@ -1649,47 +1664,27 @@ class MeshWriter --------------------------------------------------------------------------- */ - CArray get_ijk_from_vtk(mesh.num_nodes_in_elem, 3); - CArray convert_vtk_to_fierro(mesh.num_nodes_in_elem); + fprintf(out[0], "\n"); + fprintf(out[0], "CELLS %lu %lu\n", mesh.num_elems, mesh.num_elems + mesh.num_elems * mesh.num_nodes_in_elem); // size=all printed values - // re-order the nodes to be in i,j,k format of Fierro int Pn_order = mesh.Pn; - int this_point = 0; - for (int k = 0; k <= Pn_order; k++) { - for (int j = 0; j <= Pn_order; j++) { - for (int i = 0; i <= Pn_order; i++) { - // convert this_point index to the FE index convention - int order[3] = { Pn_order, Pn_order, Pn_order }; - int this_index = PointIndexFromIJK(i, j, k, order); - - // store the points in this elem according the the finite - // element numbering convention - convert_vtk_to_fierro(this_index) = this_point; - - get_ijk_from_vtk(this_index, 0) = i; - get_ijk_from_vtk(this_index, 1) = j; - get_ijk_from_vtk(this_index, 2) = k; - - // increment the point counting index - this_point = this_point + 1; - } // end for icount - } // end for jcount - } // end for kcount + int order[3] = { Pn_order, Pn_order, Pn_order }; - fprintf(out[0], "\n"); - fprintf(out[0], "CELLS %lu %lu\n", mesh.num_elems, mesh.num_elems + mesh.num_elems * mesh.num_nodes_in_elem); // size=all printed values + const int num_1D_points = Pn_order+1; // write all global point numbers for this elem for (size_t elem_gid = 0; elem_gid < mesh.num_elems; elem_gid++) { fprintf(out[0], "%lu ", mesh.num_nodes_in_elem); // num points in this elem - for (size_t vtk_index = 0; vtk_index < mesh.num_nodes_in_elem; vtk_index++) { - // get the Fierro node_lid - // size_t node_lid = mesh.convert_vtk_to_fierro(vtk_index); - size_t node_lid = vtk_index; - - fprintf(out[0], "%lu ", mesh.nodes_in_elem.host(elem_gid, node_lid)); + for (int k = 0; k <= Pn_order; k++) { + for (int j = 0; j <= Pn_order; j++) { + for (int i = 0; i <= Pn_order; i++) { + size_t node_lid = PointIndexFromIJK(i, j, k, order); + fprintf(out[0], "%lu ", mesh.nodes_in_elem.host(elem_gid, node_lid)); + } + } } + fprintf(out[0], "\n"); } // end for From 07807dffe90c4484e39d781b8b216974ec527c46 Mon Sep 17 00:00:00 2001 From: Jacob Moore Date: Fri, 16 Aug 2024 08:35:40 -0500 Subject: [PATCH 127/233] BUG: Fix cmake bug --- single-node-refactor/src/CMakeLists.txt | 2 +- single-node-refactor/src/Solvers/SGH_solver_rz/CMakeLists.txt | 4 ++-- single-node-refactor/src/driver.h | 2 ++ 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/single-node-refactor/src/CMakeLists.txt b/single-node-refactor/src/CMakeLists.txt index b79abb997..ad241ccff 100755 --- a/single-node-refactor/src/CMakeLists.txt +++ b/single-node-refactor/src/CMakeLists.txt @@ -68,5 +68,5 @@ add_subdirectory(Solvers/SGH_solver) include_directories(Solvers/SGH_solver_rz/include) add_subdirectory(Solvers/SGH_solver_rz) -add_executable(Fierro main.cpp driver.cpp solver.cpp ${YAML_SRC_Files} ${SGH_SRC_Files} ) +add_executable(Fierro main.cpp driver.cpp solver.cpp ${YAML_SRC_Files} ${SGH_SRC_Files} ${SGH_RZ_SRC_Files}) target_link_libraries(Fierro PRIVATE matar Kokkos::kokkos) diff --git a/single-node-refactor/src/Solvers/SGH_solver_rz/CMakeLists.txt b/single-node-refactor/src/Solvers/SGH_solver_rz/CMakeLists.txt index 1d14c1bc7..6250a041b 100755 --- a/single-node-refactor/src/Solvers/SGH_solver_rz/CMakeLists.txt +++ b/single-node-refactor/src/Solvers/SGH_solver_rz/CMakeLists.txt @@ -18,9 +18,9 @@ endif() include_directories(include) include_directories(src) -message("\n ****** ADDING SGH SOURCE FILES ******** \n ") +message("\n ****** ADDING SGH RZ SOURCE FILES ******** \n ") -set(SGH_SRC_Files +set(SGH_RZ_SRC_Files ${CMAKE_CURRENT_SOURCE_DIR}/src/boundary_rz.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/energy_sgh_rz.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/force_sgh_rz.cpp diff --git a/single-node-refactor/src/driver.h b/single-node-refactor/src/driver.h index 32374fea9..06187b001 100644 --- a/single-node-refactor/src/driver.h +++ b/single-node-refactor/src/driver.h @@ -41,6 +41,8 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // Headers for SGH solver classes #include "sgh_solver.h" +#include "sgh_solver_rz.h" + // Physical state data #include "state.h" From 6414875c61e99e062f23a483401de8ddd0c2909e Mon Sep 17 00:00:00 2001 From: Jacob Moore Date: Fri, 16 Aug 2024 09:43:49 -0500 Subject: [PATCH 128/233] BUG: Fix linking error, more work in next PR for common files --- single-node-refactor/src/CMakeLists.txt | 2 +- .../src/Solvers/SGH_solver/src/sgh_setup.cpp | 1 + .../SGH_solver_rz/src/sgh_setup_rz.cpp | 1 + .../src/common/region_fill.cpp | 907 ++++++++++++++++++ single-node-refactor/src/common/region_fill.h | 708 +------------- 5 files changed, 920 insertions(+), 699 deletions(-) create mode 100644 single-node-refactor/src/common/region_fill.cpp diff --git a/single-node-refactor/src/CMakeLists.txt b/single-node-refactor/src/CMakeLists.txt index ad241ccff..422ffef12 100755 --- a/single-node-refactor/src/CMakeLists.txt +++ b/single-node-refactor/src/CMakeLists.txt @@ -68,5 +68,5 @@ add_subdirectory(Solvers/SGH_solver) include_directories(Solvers/SGH_solver_rz/include) add_subdirectory(Solvers/SGH_solver_rz) -add_executable(Fierro main.cpp driver.cpp solver.cpp ${YAML_SRC_Files} ${SGH_SRC_Files} ${SGH_RZ_SRC_Files}) +add_executable(Fierro main.cpp driver.cpp solver.cpp common/region_fill.cpp ${YAML_SRC_Files} ${SGH_SRC_Files} ${SGH_RZ_SRC_Files}) target_link_libraries(Fierro PRIVATE matar Kokkos::kokkos) diff --git a/single-node-refactor/src/Solvers/SGH_solver/src/sgh_setup.cpp b/single-node-refactor/src/Solvers/SGH_solver/src/sgh_setup.cpp index d73da1230..a8b7bcc21 100644 --- a/single-node-refactor/src/Solvers/SGH_solver/src/sgh_setup.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver/src/sgh_setup.cpp @@ -38,6 +38,7 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "material.h" #include "boundary_conditions.h" #include "state.h" +#include "simulation_parameters.h" ///////////////////////////////////////////////////////////////////////////// /// diff --git a/single-node-refactor/src/Solvers/SGH_solver_rz/src/sgh_setup_rz.cpp b/single-node-refactor/src/Solvers/SGH_solver_rz/src/sgh_setup_rz.cpp index dcefbefae..36fce245e 100644 --- a/single-node-refactor/src/Solvers/SGH_solver_rz/src/sgh_setup_rz.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver_rz/src/sgh_setup_rz.cpp @@ -37,6 +37,7 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "region_fill.h" #include "material.h" #include "boundary_conditions.h" +#include "simulation_parameters.h" #include "state.h" ///////////////////////////////////////////////////////////////////////////// diff --git a/single-node-refactor/src/common/region_fill.cpp b/single-node-refactor/src/common/region_fill.cpp new file mode 100644 index 000000000..4df0abbe2 --- /dev/null +++ b/single-node-refactor/src/common/region_fill.cpp @@ -0,0 +1,907 @@ +/********************************************************************************************** +� 2020. Triad National Security, LLC. All rights reserved. +This program was produced under U.S. Government contract 89233218CNA000001 for Los Alamos +National Laboratory (LANL), which is operated by Triad National Security, LLC for the U.S. +Department of Energy/National Nuclear Security Administration. All rights in the program are +reserved by Triad National Security, LLC, and the U.S. Department of Energy/National Nuclear +Security Administration. The Government is granted for itself and others acting on its behalf a +nonexclusive, paid-up, irrevocable worldwide license in this material to reproduce, prepare +derivative works, distribute copies to the public, perform publicly and display publicly, and +to permit others to do so. +This program is open source under the BSD-3 License. +Redistribution and use in source and binary forms, with or without modification, are permitted +provided that the following conditions are met: +1. Redistributions of source code must retain the above copyright notice, this list of +conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, this list of +conditions and the following disclaimer in the documentation and/or other materials +provided with the distribution. +3. Neither the name of the copyright holder nor the names of its contributors may be used +to endorse or promote products derived from this software without specific prior +written permission. +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +**********************************************************************************************/ + +#include "region_fill.h" +#include "matar.h" +#include "mesh.h" +#include "material.h" +#include "state.h" +#include "region.h" +#include "mesh_io.h" +#include "string_utils.h" + +#include +#include + + +// ----------------------------------------------------------------------------- +// The function to read a voxel vtk file from Dream3d and intialize the mesh +// ------------------------------------------------------------------------------ +void user_voxel_init(DCArrayKokkos& elem_values, + double& dx, + double& dy, + double& dz, + double& orig_x, + double& orig_y, + double& orig_z, + size_t& num_elems_i, + size_t& num_elems_j, + size_t& num_elems_k, + double scale_x, + double scale_y, + double scale_z, + std::string mesh_file) +{ + std::string MESH = mesh_file; // user specified + + std::ifstream in; // FILE *in; + in.open(MESH); + + // check to see of a mesh was supplied when running the code + if (in) + { + printf("\nReading the 3D voxel mesh: "); + std::cout << MESH << std::endl; + } + else + { + std::cout << "\n\n**********************************\n\n"; + std::cout << " ERROR:\n"; + std::cout << " Voxel vtk input does not exist \n"; + std::cout << "**********************************\n\n" << std::endl; + std::exit(EXIT_FAILURE); + } // end if + + size_t i; // used for writing information to file + size_t point_id; // the global id for the point + size_t elem_id; // the global id for the elem + size_t this_point; // a local id for a point in a elem (0:7 for a Hexahedral elem) + + size_t num_points_i; + size_t num_points_j; + size_t num_points_k; + + size_t num_dims = 3; + + std::string token; + + bool found = false; + + // look for POINTS + i = 0; + while (found == false) { + std::string str; + std::string delimiter = " "; + std::getline(in, str); + std::vector v = split(str, delimiter); + + // looking for the following text: + // POINTS %d float + if (v[0] == "DIMENSIONS") + { + num_points_i = std::stoi(v[1]); + num_points_j = std::stoi(v[2]); + num_points_k = std::stoi(v[3]); + printf("Num voxel nodes read in = %zu, %zu, %zu\n", num_points_i, num_points_j, num_points_k); + + found = true; + } // end if + + if (i > 1000) + { + printf("ERROR: Failed to find POINTS \n"); + break; + } // end if + + i++; + } // end while + + found = false; + + int num_points = num_points_i * num_points_j * num_points_k; + CArray pt_coords_x(num_points_i); + CArray pt_coords_y(num_points_j); + CArray pt_coords_z(num_points_k); + + while (found == false) { + std::string str; + std::string str0; + std::string delimiter = " "; + std::getline(in, str); + std::vector v = split(str, delimiter); + + // looking for the following text: + if (v[0] == "X_COORDINATES") + { + size_t num_saved = 0; + + while (num_saved < num_points_i - 1) { + // get next line + std::getline(in, str0); + + // remove starting and trailing spaces + str = trim(str0); + std::vector v_coords = split(str, delimiter); + + // loop over the contents of the vector v_coords + for (size_t this_point = 0; this_point < v_coords.size(); this_point++) + { + pt_coords_x(num_saved) = scale_x*std::stod(v_coords[this_point]); + num_saved++; + } // end for + } // end while + + found = true; + } // end if + + if (i > 1000) + { + printf("ERROR: Failed to find X_COORDINATES \n"); + break; + } // end if + + i++; + } // end while + found = false; + + while (found == false) { + std::string str; + std::string str0; + std::string delimiter = " "; + std::getline(in, str); + std::vector v = split(str, delimiter); + + // looking for the following text: + if (v[0] == "Y_COORDINATES") + { + size_t num_saved = 0; + + while (num_saved < num_points_j - 1) { + // get next line + std::getline(in, str0); + + // remove starting and trailing spaces + str = trim(str0); + std::vector v_coords = split(str, delimiter); + + // loop over the contents of the vector v_coords + for (size_t this_point = 0; this_point < v_coords.size(); this_point++) + { + pt_coords_y(num_saved) = scale_y*std::stod(v_coords[this_point]); + num_saved++; + } // end for + } // end while + + found = true; + } // end if + + if (i > 1000) + { + printf("ERROR: Failed to find Y_COORDINATES \n"); + break; + } // end if + + i++; + } // end while + found = false; + + while (found == false) { + std::string str; + std::string str0; + std::string delimiter = " "; + std::getline(in, str); + std::vector v = split(str, delimiter); + + // looking for the following text: + if (v[0] == "Z_COORDINATES") + { + size_t num_saved = 0; + + while (num_saved < num_points_k - 1) { + // get next line + std::getline(in, str0); + + // remove starting and trailing spaces + str = trim(str0); + std::vector v_coords = split(str, delimiter); + + // loop over the contents of the vector v_coords + for (size_t this_point = 0; this_point < v_coords.size(); this_point++) + { + pt_coords_z(num_saved) = scale_z*std::stod(v_coords[this_point]); + num_saved++; + } // end for + } // end while + + found = true; + } // end if + + if (i > 1000) + { + printf("ERROR: Failed to find Z_COORDINATES \n"); + break; + } // end if + + i++; + } // end while + found = false; + + size_t num_elems; + num_elems_i = num_points_i - 1; + num_elems_j = num_points_j - 1; + num_elems_k = num_points_k - 1; + + // center to center distance between first and last elem along each edge + double Lx = (pt_coords_x(num_points_i - 2) - pt_coords_x(0)); + double Ly = (pt_coords_y(num_points_j - 2) - pt_coords_y(0)); + double Lz = (pt_coords_z(num_points_k - 2) - pt_coords_z(0)); + + // spacing between elems + dx = Lx / ((double) num_elems_i); + dy = Ly / ((double) num_elems_j); + dz = Lz / ((double) num_elems_k); + + // element mesh origin + orig_x = 0.5 * (pt_coords_x(0) + pt_coords_x(1)), + orig_y = 0.5 * (pt_coords_y(0) + pt_coords_y(1)), + orig_z = 0.5 * (pt_coords_z(0) + pt_coords_z(1)), + + // look for CELLS + i = 0; + while (found == false) { + std::string str; + std::getline(in, str); + + std::string delimiter = " "; + std::vector v = split(str, delimiter); + + // looking for the following text: + // CELLS num_elems size + if (v[0] == "CELL_DATA") + { + num_elems = std::stoi(v[1]); + printf("Num voxel elements read in %zu\n", num_elems); + + found = true; + } // end if + + if (i > 1000) + { + printf("ERROR: Failed to find CELL_DATA \n"); + break; + } // end if + + i++; + } // end while + found = false; + + // allocate memory for element voxel values + elem_values = DCArrayKokkos(num_elems); + + // reading the cell data + while (found == false) { + std::string str; + std::string str0; + + std::string delimiter = " "; + std::getline(in, str); + std::vector v = split(str, delimiter); + + // looking for the following text: + if (v[0] == "LOOKUP_TABLE") + { + size_t num_saved = 0; + + while (num_saved < num_elems - 1) { + // get next line + std::getline(in, str0); + + // remove starting and trailing spaces + str = trim(str0); + std::vector v_values = split(str, delimiter); + + // loop over the contents of the vector v_coords + for (size_t this_elem = 0; this_elem < v_values.size(); this_elem++) + { + // save integers (0 or 1) to host side + elem_values.host(num_saved) = std::stoi(v_values[this_elem]); + num_saved++; + } // end for + + // printf(" done with one row of data \n"); + } // end while + + found = true; + } // end if + + if (i > 1000) + { + printf("ERROR: Failed to find LOOKUP_TABLE data \n"); + break; + } // end if + + i++; + } // end while + found = false; + + printf("\n"); + + in.close(); +} // end routine + +///////////////////////////////////////////////////////////////////////////// +/// +/// \fn fill_geometric_region +/// +/// \brief a function to calculate whether to fill this element based on the +/// input instructions. The output is +/// = 0 then no, do not fill this element +/// = 1 then yes, fill this element +/// +/// \param mesh is the simulation mesh +/// \param node_coords is the nodal position array +/// \param voxel_elem_mat_id are the voxel values on a structured i,j,k mesh +/// \param region_fills are the instructures to paint state on the mesh +/// \param mesh_coords is the geometric center of the element or a node coordinates +/// +///////////////////////////////////////////////////////////////////////////// +KOKKOS_FUNCTION +size_t fill_geometric_region(const Mesh_t& mesh, + const DCArrayKokkos& voxel_elem_mat_id, + const CArrayKokkos& region_fills, + const ViewCArrayKokkos & mesh_coords, + const double voxel_dx, + const double voxel_dy, + const double voxel_dz, + const double orig_x, + const double orig_y, + const double orig_z, + const size_t voxel_num_i, + const size_t voxel_num_j, + const size_t voxel_num_k, + const size_t f_id) +{ + + // default is not to fill the element + size_t fill_this = 0; + + + // for shapes with an origin (e.g., sphere and circle), accounting for the origin + double dist_x = mesh_coords(0) - region_fills(f_id).origin[0]; + double dist_y = mesh_coords(1) - region_fills(f_id).origin[1]; + double dist_z = mesh_coords(2) - region_fills(f_id).origin[2]; + + // spherical radius + double radius = sqrt(dist_x * dist_x + + dist_y * dist_y + + dist_z * dist_z); + + // cylindrical radius + double radius_cyl = sqrt(dist_x * dist_x + + dist_y * dist_y); + + + // check to see if this element should be filled + switch (region_fills(f_id).volume) { + case region::global: + { + fill_this = 1; + break; + } + case region::box: + { + + double x_lower_bound = region_fills(f_id).x1; + double x_upper_bound = region_fills(f_id).x2; + + double y_lower_bound = region_fills(f_id).y1; + double y_upper_bound = region_fills(f_id).y2; + + double z_lower_bound = region_fills(f_id).z1; + double z_upper_bound = region_fills(f_id).z2; + + + if (mesh_coords(0) >= x_lower_bound && mesh_coords(0) <= x_upper_bound && + mesh_coords(1) >= y_lower_bound && mesh_coords(1) <= y_upper_bound && + mesh_coords(2) >= z_lower_bound && mesh_coords(2) <= z_upper_bound) { + fill_this = 1; + } + break; + } + case region::cylinder: + { + if (radius_cyl >= region_fills(f_id).radius1 + && radius_cyl <= region_fills(f_id).radius2) { + fill_this = 1; + } + break; + } + case region::sphere: + { + if (radius >= region_fills(f_id).radius1 + && radius <= region_fills(f_id).radius2) { + fill_this = 1; + } + break; + } + + case region::readVoxelFile: + { + + fill_this = 0; // default is no, don't fill it + + // find the closest element in the voxel mesh to this element + double i0_real = (mesh_coords(0) - orig_x - region_fills(f_id).origin[0]) / (voxel_dx); + double j0_real = (mesh_coords(1) - orig_y - region_fills(f_id).origin[1]) / (voxel_dy); + double k0_real = (mesh_coords(2) - orig_z - region_fills(f_id).origin[2]) / (voxel_dz); + + int i0 = (int)i0_real; + int j0 = (int)j0_real; + int k0 = (int)k0_real; + + // look for the closest element in the voxel mesh + int elem_id0 = get_id_device(i0, j0, k0, voxel_num_i, voxel_num_j); + + // if voxel mesh overlaps this mesh, then fill it if =1 + if (elem_id0 < voxel_elem_mat_id.size() && elem_id0 >= 0 && + i0 >= 0 && j0 >= 0 && k0 >= 0 && + i0 < voxel_num_i && j0 < voxel_num_j && k0 < voxel_num_k) { + // voxel mesh elem values = 0 or 1 + fill_this = voxel_elem_mat_id(elem_id0); // values from file + + } // end if + + break; + + } // end case + case region::no_volume: + { + fill_this = 0; // default is no, don't fill it + + break; + } + default: + { + fill_this = 0; // default is no, don't fill it + + break; + } + + } // end of switch + + + return fill_this; + +} // end function + + + +///////////////////////////////////////////////////////////////////////////// +/// +/// \fn paint_gauss_den_sie +/// +/// \brief a function to paint den and sie on the Gauss points of the mesh +/// +/// \param Materials holds the material models and global parameters +/// \param mesh is the simulation mesh +/// \param node_coords are the node coordinates of the element +/// \param GaussPoint_den is density at the GaussPoints on the mesh +/// \param GaussPoint_sie is specific internal energy at the GaussPoints on the mesh +/// \param elem_mat_id is the material id in an element +/// \param region_fills are the instructures to paint state on the mesh +/// \param elem_coords is the geometric center of the element +/// \param elem_gid is the element global mesh index +/// \param f_id is fill instruction +/// +///////////////////////////////////////////////////////////////////////////// +KOKKOS_FUNCTION +void paint_gauss_den_sie(const Material_t& Materials, + const Mesh_t& mesh, + const DCArrayKokkos & node_coords, + const DCArrayKokkos & GaussPoint_den, + const DCArrayKokkos & GaussPoint_sie, + const DCArrayKokkos & elem_mat_id, + const CArrayKokkos& region_fills, + const ViewCArrayKokkos elem_coords, + const double elem_gid, + const size_t f_id) +{ + + // the material id + size_t mat_id = region_fills(f_id).material_id; + + // --- material_id in elem --- + elem_mat_id(elem_gid) = mat_id; + + // loop over the Gauss points in the element + { + + const size_t gauss_gid = elem_gid; // 1 gauss point per element + + // add test problem state setups here + if (region_fills(f_id).velocity == init_conds::tg_vortex) { + + GaussPoint_den(gauss_gid) = 1.0; + + // note: elem_coords are the gauss_coords, higher quadrature requires ref elem data + double pres = 0.25 * (cos(2.0 * PI * elem_coords(0)) + + cos(2.0 * PI * elem_coords(1)) ) + 1.0; + + // p = rho*ie*(gamma - 1) + // makes sure index 0 matches the gamma in the gamma law function + double gamma = Materials.eos_global_vars(mat_id,0); + GaussPoint_sie(gauss_gid) = + pres / (GaussPoint_den(gauss_gid) * (gamma - 1.0)); + } // end + // add user initialization here + else{ + + // --- density --- + GaussPoint_den(gauss_gid) = region_fills(f_id).den; + + // --- specific internal energy --- + GaussPoint_sie(gauss_gid) = region_fills(f_id).sie; + + } // end if + + } // end loop over gauss points in element' + + // done setting the element state + +} // end function + + +///////////////////////////////////////////////////////////////////////////// +/// +/// \fn paint_node_vel +/// +/// \brief a function to paint a velocity field on the nodes of the mesh +/// +/// \param mesh is the simulation mesh +/// \param node_vel is the nodal velocity array +/// \param node_coords are the coordinates of the nodes +/// \param elem_gid is the element global mesh index +/// \param f_id is fill instruction +/// \param rk_num_bins is time integration storage level +/// +///////////////////////////////////////////////////////////////////////////// +KOKKOS_FUNCTION +void paint_node_vel(const CArrayKokkos& region_fills, + const DCArrayKokkos& node_vel, + const DCArrayKokkos& node_coords, + const double node_gid, + const double num_dims, + const size_t f_id, + const size_t rk_num_bins) +{ + + // save velocity at all rk_levels + for(size_t rk_level=0; rk_level 1.0e-14) { + dir[dim] /= (radius_val); + } + else{ + dir[dim] = 0.0; + } + } // end for + + node_vel(rk_level, node_gid, 0) = region_fills(f_id).speed * dir[0]; + node_vel(rk_level, node_gid, 1) = region_fills(f_id).speed * dir[1]; + if (num_dims == 3) { + node_vel(rk_level, node_gid, 2) = 0.0; + } + + break; + } + case init_conds::spherical: + { + // Setting up spherical + double dir[3]; + dir[0] = 0.0; + dir[1] = 0.0; + dir[2] = 0.0; + double radius_val = 0.0; + + for (int dim = 0; dim < 3; dim++) { + dir[dim] = node_coords(rk_level, node_gid, dim); + radius_val += node_coords(rk_level, node_gid, dim) * node_coords(rk_level, node_gid, dim); + } // end for + radius_val = sqrt(radius_val); + + for (int dim = 0; dim < 3; dim++) { + if (radius_val > 1.0e-14) { + dir[dim] /= (radius_val); + } + else{ + dir[dim] = 0.0; + } + } // end for + + node_vel(rk_level, node_gid, 0) = region_fills(f_id).speed * dir[0]; + node_vel(rk_level, node_gid, 1) = region_fills(f_id).speed * dir[1]; + if (num_dims == 3) { + node_vel(rk_level, node_gid, 2) = region_fills(f_id).speed * dir[2]; + } + + break; + } + case init_conds::radial_linear: + { + printf("**** Radial_linear initial conditions not yet supported ****\n"); + break; + } + case init_conds::spherical_linear: + { + printf("**** spherical_linear initial conditions not yet supported ****\n"); + break; + } + case init_conds::tg_vortex: + { + node_vel(rk_level, node_gid, 0) = sin(PI * node_coords(rk_level, node_gid, 0)) * + cos(PI * node_coords(rk_level, node_gid, 1)); + node_vel(rk_level, node_gid, 1) = -1.0 * cos(PI * node_coords(rk_level, node_gid, 0)) * + sin(PI * node_coords(rk_level, node_gid, 1)); + if (num_dims == 3) { + node_vel(rk_level, node_gid, 2) = 0.0; + } + + break; + } + + case init_conds::no_ic_vel: + { + // no velocity + node_vel(rk_level, node_gid, 0) = 0.0; + node_vel(rk_level, node_gid, 1) = 0.0; + if (num_dims == 3) { + node_vel(rk_level, node_gid, 2) = 0.0; + } + + break; + } + default: + { + // no velocity + node_vel(rk_level, node_gid, 0) = 0.0; + node_vel(rk_level, node_gid, 1) = 0.0; + if (num_dims == 3) { + node_vel(rk_level, node_gid, 2) = 0.0; + } + + break; + } + } // end of switch + + } // end loop over rk_num_bins + + + // done setting the velocity +} // end function paint_node_vel + + + +///////////////////////////////////////////////////////////////////////////// +/// +/// \fn init_press_sspd_stress +/// +/// \brief a function to initialize pressure, sound speed and stress +/// +/// \param Materials holds the material models and global parameters +/// \param mesh is the simulation mesh +/// \param GaussPoint_den is density at the GaussPoints on the mesh +/// \param GaussPoint_pres is pressure at the GaussPoints on the mesh +/// \param GaussPoint_stress is stress at the GaussPoints on the mesh +/// \param GaussPoint_sspd is sound speed at the GaussPoints on the mesh +/// \param GaussPoint_sie is specific internal energy at the GaussPoints on the mesh +/// \param GaussPoint_statev are the state variables at the GaussPoints on the mesh +/// \param num_mat_pts is the number of material points for mat_id +/// \param mat_id is material id +/// \param rk_num_bins is number of time integration storage bins +/// +///////////////////////////////////////////////////////////////////////////// +void init_press_sspd_stress(const Material_t& Materials, + const Mesh_t& mesh, + const DCArrayKokkos& MaterialPoints_den, + const DCArrayKokkos& MaterialPoints_pres, + const DCArrayKokkos& MaterialPoints_stress, + const DCArrayKokkos& MaterialPoints_sspd, + const DCArrayKokkos& MaterialPoints_sie, + const DCArrayKokkos& MaterialPoints_statev, + const size_t rk_num_bins, + const size_t num_mat_pts, + const size_t mat_id) +{ + + + // ------- + // the call to the model initialization goes here + // ------- + + // --- pressure and sound speed --- + // loop over the material points + FOR_ALL(mat_point_lid, 0, num_mat_pts, { + + // --- Pressure --- + Materials.MaterialFunctions(mat_id).calc_pressure( + MaterialPoints_pres, + MaterialPoints_stress, + mat_point_lid, + mat_id, + MaterialPoints_statev, + MaterialPoints_sspd, + MaterialPoints_den(mat_point_lid), + MaterialPoints_sie(0, mat_point_lid), + Materials.eos_global_vars); + + // --- Sound Speed --- + Materials.MaterialFunctions(mat_id).calc_sound_speed( + MaterialPoints_pres, + MaterialPoints_stress, + mat_point_lid, + mat_id, + MaterialPoints_statev, + MaterialPoints_sspd, + MaterialPoints_den(mat_point_lid), + MaterialPoints_sie(0, mat_point_lid), + Materials.eos_global_vars); + }); // end pressure and sound speed + + + // --- stress tensor --- + for(size_t rk_level=0; rk_level& node_coords, + const DCArrayKokkos& node_mass, + const DCArrayKokkos& corner_mass, + const DCArrayKokkos& MaterialPoints_mass, + const DCArrayKokkos& MaterialToMeshMaps_elem, + const size_t num_mat_elems) +{ + + + FOR_ALL(mat_elem_lid, 0, num_mat_elems, { + + // get elem gid + size_t elem_gid = MaterialToMeshMaps_elem(mat_elem_lid); + + // calculate the fraction of matpt mass to scatter to each corner + double corner_frac = 1.0/((double)mesh.num_nodes_in_elem); // =1/8 + + // partion the mass to the corners + for(size_t corner_lid=0; corner_lid& node_coords, + const DCArrayKokkos& node_mass, + const DCArrayKokkos& corner_mass) +{ + + + FOR_ALL(node_gid, 0, mesh.num_nodes, { + for (size_t corner_lid = 0; corner_lid < mesh.num_corners_in_node(node_gid); corner_lid++) { + + size_t corner_gid = mesh.corners_in_node(node_gid, corner_lid); + + node_mass(node_gid) += corner_mass(corner_gid); + } // end for elem_lid + }); // end parallel loop over nodes in the mesh + +} // end function calculate node mass diff --git a/single-node-refactor/src/common/region_fill.h b/single-node-refactor/src/common/region_fill.h index 832513def..f91619539 100644 --- a/single-node-refactor/src/common/region_fill.h +++ b/single-node-refactor/src/common/region_fill.h @@ -35,17 +35,12 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #define REGION_FILL_H #include "matar.h" -#include "mesh.h" -#include "material.h" -#include "state.h" -#include "simulation_parameters.h" #include "region.h" -#include "mesh_io.h" -#include "string_utils.h" -#include -#include +struct Mesh_t; +struct Material_t; +using namespace mtr; // ----------------------------------------------------------------------------- // The function to read a voxel vtk file from Dream3d and intialize the mesh @@ -63,304 +58,7 @@ void user_voxel_init(DCArrayKokkos& elem_values, double scale_x, double scale_y, double scale_z, - std::string mesh_file) -{ - std::string MESH = mesh_file; // user specified - - std::ifstream in; // FILE *in; - in.open(MESH); - - // check to see of a mesh was supplied when running the code - if (in) - { - printf("\nReading the 3D voxel mesh: "); - std::cout << MESH << std::endl; - } - else - { - std::cout << "\n\n**********************************\n\n"; - std::cout << " ERROR:\n"; - std::cout << " Voxel vtk input does not exist \n"; - std::cout << "**********************************\n\n" << std::endl; - std::exit(EXIT_FAILURE); - } // end if - - size_t i; // used for writing information to file - size_t point_id; // the global id for the point - size_t elem_id; // the global id for the elem - size_t this_point; // a local id for a point in a elem (0:7 for a Hexahedral elem) - - size_t num_points_i; - size_t num_points_j; - size_t num_points_k; - - size_t num_dims = 3; - - std::string token; - - bool found = false; - - // look for POINTS - i = 0; - while (found == false) { - std::string str; - std::string delimiter = " "; - std::getline(in, str); - std::vector v = split(str, delimiter); - - // looking for the following text: - // POINTS %d float - if (v[0] == "DIMENSIONS") - { - num_points_i = std::stoi(v[1]); - num_points_j = std::stoi(v[2]); - num_points_k = std::stoi(v[3]); - printf("Num voxel nodes read in = %zu, %zu, %zu\n", num_points_i, num_points_j, num_points_k); - - found = true; - } // end if - - if (i > 1000) - { - printf("ERROR: Failed to find POINTS \n"); - break; - } // end if - - i++; - } // end while - - found = false; - - int num_points = num_points_i * num_points_j * num_points_k; - CArray pt_coords_x(num_points_i); - CArray pt_coords_y(num_points_j); - CArray pt_coords_z(num_points_k); - - while (found == false) { - std::string str; - std::string str0; - std::string delimiter = " "; - std::getline(in, str); - std::vector v = split(str, delimiter); - - // looking for the following text: - if (v[0] == "X_COORDINATES") - { - size_t num_saved = 0; - - while (num_saved < num_points_i - 1) { - // get next line - std::getline(in, str0); - - // remove starting and trailing spaces - str = trim(str0); - std::vector v_coords = split(str, delimiter); - - // loop over the contents of the vector v_coords - for (size_t this_point = 0; this_point < v_coords.size(); this_point++) - { - pt_coords_x(num_saved) = scale_x*std::stod(v_coords[this_point]); - num_saved++; - } // end for - } // end while - - found = true; - } // end if - - if (i > 1000) - { - printf("ERROR: Failed to find X_COORDINATES \n"); - break; - } // end if - - i++; - } // end while - found = false; - - while (found == false) { - std::string str; - std::string str0; - std::string delimiter = " "; - std::getline(in, str); - std::vector v = split(str, delimiter); - - // looking for the following text: - if (v[0] == "Y_COORDINATES") - { - size_t num_saved = 0; - - while (num_saved < num_points_j - 1) { - // get next line - std::getline(in, str0); - - // remove starting and trailing spaces - str = trim(str0); - std::vector v_coords = split(str, delimiter); - - // loop over the contents of the vector v_coords - for (size_t this_point = 0; this_point < v_coords.size(); this_point++) - { - pt_coords_y(num_saved) = scale_y*std::stod(v_coords[this_point]); - num_saved++; - } // end for - } // end while - - found = true; - } // end if - - if (i > 1000) - { - printf("ERROR: Failed to find Y_COORDINATES \n"); - break; - } // end if - - i++; - } // end while - found = false; - - while (found == false) { - std::string str; - std::string str0; - std::string delimiter = " "; - std::getline(in, str); - std::vector v = split(str, delimiter); - - // looking for the following text: - if (v[0] == "Z_COORDINATES") - { - size_t num_saved = 0; - - while (num_saved < num_points_k - 1) { - // get next line - std::getline(in, str0); - - // remove starting and trailing spaces - str = trim(str0); - std::vector v_coords = split(str, delimiter); - - // loop over the contents of the vector v_coords - for (size_t this_point = 0; this_point < v_coords.size(); this_point++) - { - pt_coords_z(num_saved) = scale_z*std::stod(v_coords[this_point]); - num_saved++; - } // end for - } // end while - - found = true; - } // end if - - if (i > 1000) - { - printf("ERROR: Failed to find Z_COORDINATES \n"); - break; - } // end if - - i++; - } // end while - found = false; - - size_t num_elems; - num_elems_i = num_points_i - 1; - num_elems_j = num_points_j - 1; - num_elems_k = num_points_k - 1; - - // center to center distance between first and last elem along each edge - double Lx = (pt_coords_x(num_points_i - 2) - pt_coords_x(0)); - double Ly = (pt_coords_y(num_points_j - 2) - pt_coords_y(0)); - double Lz = (pt_coords_z(num_points_k - 2) - pt_coords_z(0)); - - // spacing between elems - dx = Lx / ((double) num_elems_i); - dy = Ly / ((double) num_elems_j); - dz = Lz / ((double) num_elems_k); - - // element mesh origin - orig_x = 0.5 * (pt_coords_x(0) + pt_coords_x(1)), - orig_y = 0.5 * (pt_coords_y(0) + pt_coords_y(1)), - orig_z = 0.5 * (pt_coords_z(0) + pt_coords_z(1)), - - // look for CELLS - i = 0; - while (found == false) { - std::string str; - std::getline(in, str); - - std::string delimiter = " "; - std::vector v = split(str, delimiter); - - // looking for the following text: - // CELLS num_elems size - if (v[0] == "CELL_DATA") - { - num_elems = std::stoi(v[1]); - printf("Num voxel elements read in %zu\n", num_elems); - - found = true; - } // end if - - if (i > 1000) - { - printf("ERROR: Failed to find CELL_DATA \n"); - break; - } // end if - - i++; - } // end while - found = false; - - // allocate memory for element voxel values - elem_values = DCArrayKokkos(num_elems); - - // reading the cell data - while (found == false) { - std::string str; - std::string str0; - - std::string delimiter = " "; - std::getline(in, str); - std::vector v = split(str, delimiter); - - // looking for the following text: - if (v[0] == "LOOKUP_TABLE") - { - size_t num_saved = 0; - - while (num_saved < num_elems - 1) { - // get next line - std::getline(in, str0); - - // remove starting and trailing spaces - str = trim(str0); - std::vector v_values = split(str, delimiter); - - // loop over the contents of the vector v_coords - for (size_t this_elem = 0; this_elem < v_values.size(); this_elem++) - { - // save integers (0 or 1) to host side - elem_values.host(num_saved) = std::stoi(v_values[this_elem]); - num_saved++; - } // end for - - // printf(" done with one row of data \n"); - } // end while - - found = true; - } // end if - - if (i > 1000) - { - printf("ERROR: Failed to find LOOKUP_TABLE data \n"); - break; - } // end if - - i++; - } // end while - found = false; - - printf("\n"); - - in.close(); -} // end routine + std::string mesh_file); ///////////////////////////////////////////////////////////////////////////// /// @@ -392,123 +90,7 @@ size_t fill_geometric_region(const Mesh_t& mesh, const size_t voxel_num_i, const size_t voxel_num_j, const size_t voxel_num_k, - const size_t f_id) -{ - - // default is not to fill the element - size_t fill_this = 0; - - - // for shapes with an origin (e.g., sphere and circle), accounting for the origin - double dist_x = mesh_coords(0) - region_fills(f_id).origin[0]; - double dist_y = mesh_coords(1) - region_fills(f_id).origin[1]; - double dist_z = mesh_coords(2) - region_fills(f_id).origin[2]; - - // spherical radius - double radius = sqrt(dist_x * dist_x + - dist_y * dist_y + - dist_z * dist_z); - - // cylindrical radius - double radius_cyl = sqrt(dist_x * dist_x + - dist_y * dist_y); - - - // check to see if this element should be filled - switch (region_fills(f_id).volume) { - case region::global: - { - fill_this = 1; - break; - } - case region::box: - { - - double x_lower_bound = region_fills(f_id).x1; - double x_upper_bound = region_fills(f_id).x2; - - double y_lower_bound = region_fills(f_id).y1; - double y_upper_bound = region_fills(f_id).y2; - - double z_lower_bound = region_fills(f_id).z1; - double z_upper_bound = region_fills(f_id).z2; - - - if (mesh_coords(0) >= x_lower_bound && mesh_coords(0) <= x_upper_bound && - mesh_coords(1) >= y_lower_bound && mesh_coords(1) <= y_upper_bound && - mesh_coords(2) >= z_lower_bound && mesh_coords(2) <= z_upper_bound) { - fill_this = 1; - } - break; - } - case region::cylinder: - { - if (radius_cyl >= region_fills(f_id).radius1 - && radius_cyl <= region_fills(f_id).radius2) { - fill_this = 1; - } - break; - } - case region::sphere: - { - if (radius >= region_fills(f_id).radius1 - && radius <= region_fills(f_id).radius2) { - fill_this = 1; - } - break; - } - - case region::readVoxelFile: - { - - fill_this = 0; // default is no, don't fill it - - // find the closest element in the voxel mesh to this element - double i0_real = (mesh_coords(0) - orig_x - region_fills(f_id).origin[0]) / (voxel_dx); - double j0_real = (mesh_coords(1) - orig_y - region_fills(f_id).origin[1]) / (voxel_dy); - double k0_real = (mesh_coords(2) - orig_z - region_fills(f_id).origin[2]) / (voxel_dz); - - int i0 = (int)i0_real; - int j0 = (int)j0_real; - int k0 = (int)k0_real; - - // look for the closest element in the voxel mesh - int elem_id0 = get_id_device(i0, j0, k0, voxel_num_i, voxel_num_j); - - // if voxel mesh overlaps this mesh, then fill it if =1 - if (elem_id0 < voxel_elem_mat_id.size() && elem_id0 >= 0 && - i0 >= 0 && j0 >= 0 && k0 >= 0 && - i0 < voxel_num_i && j0 < voxel_num_j && k0 < voxel_num_k) { - // voxel mesh elem values = 0 or 1 - fill_this = voxel_elem_mat_id(elem_id0); // values from file - - } // end if - - break; - - } // end case - case region::no_volume: - { - fill_this = 0; // default is no, don't fill it - - break; - } - default: - { - fill_this = 0; // default is no, don't fill it - - break; - } - - } // end of switch - - - return fill_this; - -} // end function - - - + const size_t f_id); ///////////////////////////////////////////////////////////////////////////// /// /// \fn paint_gauss_den_sie @@ -537,51 +119,7 @@ void paint_gauss_den_sie(const Material_t& Materials, const CArrayKokkos& region_fills, const ViewCArrayKokkos elem_coords, const double elem_gid, - const size_t f_id) -{ - - // the material id - size_t mat_id = region_fills(f_id).material_id; - - // --- material_id in elem --- - elem_mat_id(elem_gid) = mat_id; - - // loop over the Gauss points in the element - { - - const size_t gauss_gid = elem_gid; // 1 gauss point per element - - // add test problem state setups here - if (region_fills(f_id).velocity == init_conds::tg_vortex) { - - GaussPoint_den(gauss_gid) = 1.0; - - // note: elem_coords are the gauss_coords, higher quadrature requires ref elem data - double pres = 0.25 * (cos(2.0 * PI * elem_coords(0)) + - cos(2.0 * PI * elem_coords(1)) ) + 1.0; - - // p = rho*ie*(gamma - 1) - // makes sure index 0 matches the gamma in the gamma law function - double gamma = Materials.eos_global_vars(mat_id,0); - GaussPoint_sie(gauss_gid) = - pres / (GaussPoint_den(gauss_gid) * (gamma - 1.0)); - } // end - // add user initialization here - else{ - - // --- density --- - GaussPoint_den(gauss_gid) = region_fills(f_id).den; - - // --- specific internal energy --- - GaussPoint_sie(gauss_gid) = region_fills(f_id).sie; - - } // end if - - } // end loop over gauss points in element' - - // done setting the element state - -} // end function + const size_t f_id); ///////////////////////////////////////////////////////////////////////////// @@ -605,142 +143,7 @@ void paint_node_vel(const CArrayKokkos& region_fills, const double node_gid, const double num_dims, const size_t f_id, - const size_t rk_num_bins) -{ - - // save velocity at all rk_levels - for(size_t rk_level=0; rk_level 1.0e-14) { - dir[dim] /= (radius_val); - } - else{ - dir[dim] = 0.0; - } - } // end for - - node_vel(rk_level, node_gid, 0) = region_fills(f_id).speed * dir[0]; - node_vel(rk_level, node_gid, 1) = region_fills(f_id).speed * dir[1]; - if (num_dims == 3) { - node_vel(rk_level, node_gid, 2) = 0.0; - } - - break; - } - case init_conds::spherical: - { - // Setting up spherical - double dir[3]; - dir[0] = 0.0; - dir[1] = 0.0; - dir[2] = 0.0; - double radius_val = 0.0; - - for (int dim = 0; dim < 3; dim++) { - dir[dim] = node_coords(rk_level, node_gid, dim); - radius_val += node_coords(rk_level, node_gid, dim) * node_coords(rk_level, node_gid, dim); - } // end for - radius_val = sqrt(radius_val); - - for (int dim = 0; dim < 3; dim++) { - if (radius_val > 1.0e-14) { - dir[dim] /= (radius_val); - } - else{ - dir[dim] = 0.0; - } - } // end for - - node_vel(rk_level, node_gid, 0) = region_fills(f_id).speed * dir[0]; - node_vel(rk_level, node_gid, 1) = region_fills(f_id).speed * dir[1]; - if (num_dims == 3) { - node_vel(rk_level, node_gid, 2) = region_fills(f_id).speed * dir[2]; - } - - break; - } - case init_conds::radial_linear: - { - printf("**** Radial_linear initial conditions not yet supported ****\n"); - break; - } - case init_conds::spherical_linear: - { - printf("**** spherical_linear initial conditions not yet supported ****\n"); - break; - } - case init_conds::tg_vortex: - { - node_vel(rk_level, node_gid, 0) = sin(PI * node_coords(rk_level, node_gid, 0)) * - cos(PI * node_coords(rk_level, node_gid, 1)); - node_vel(rk_level, node_gid, 1) = -1.0 * cos(PI * node_coords(rk_level, node_gid, 0)) * - sin(PI * node_coords(rk_level, node_gid, 1)); - if (num_dims == 3) { - node_vel(rk_level, node_gid, 2) = 0.0; - } - - break; - } - - case init_conds::no_ic_vel: - { - // no velocity - node_vel(rk_level, node_gid, 0) = 0.0; - node_vel(rk_level, node_gid, 1) = 0.0; - if (num_dims == 3) { - node_vel(rk_level, node_gid, 2) = 0.0; - } - - break; - } - default: - { - // no velocity - node_vel(rk_level, node_gid, 0) = 0.0; - node_vel(rk_level, node_gid, 1) = 0.0; - if (num_dims == 3) { - node_vel(rk_level, node_gid, 2) = 0.0; - } - - break; - } - } // end of switch - - } // end loop over rk_num_bins - - - // done setting the velocity -} // end function paint_node_vel - - + const size_t rk_num_bins); ///////////////////////////////////////////////////////////////////////////// /// @@ -771,62 +174,7 @@ void init_press_sspd_stress(const Material_t& Materials, const DCArrayKokkos& MaterialPoints_statev, const size_t rk_num_bins, const size_t num_mat_pts, - const size_t mat_id) -{ - - - // ------- - // the call to the model initialization goes here - // ------- - - // --- pressure and sound speed --- - // loop over the material points - FOR_ALL(mat_point_lid, 0, num_mat_pts, { - - // --- Pressure --- - Materials.MaterialFunctions(mat_id).calc_pressure( - MaterialPoints_pres, - MaterialPoints_stress, - mat_point_lid, - mat_id, - MaterialPoints_statev, - MaterialPoints_sspd, - MaterialPoints_den(mat_point_lid), - MaterialPoints_sie(0, mat_point_lid), - Materials.eos_global_vars); - - // --- Sound Speed --- - Materials.MaterialFunctions(mat_id).calc_sound_speed( - MaterialPoints_pres, - MaterialPoints_stress, - mat_point_lid, - mat_id, - MaterialPoints_statev, - MaterialPoints_sspd, - MaterialPoints_den(mat_point_lid), - MaterialPoints_sie(0, mat_point_lid), - Materials.eos_global_vars); - }); // end pressure and sound speed - - - // --- stress tensor --- - for(size_t rk_level=0; rk_level& corner_mass, const DCArrayKokkos& MaterialPoints_mass, const DCArrayKokkos& MaterialToMeshMaps_elem, - const size_t num_mat_elems) -{ - - - FOR_ALL(mat_elem_lid, 0, num_mat_elems, { - - // get elem gid - size_t elem_gid = MaterialToMeshMaps_elem(mat_elem_lid); - - // calculate the fraction of matpt mass to scatter to each corner - double corner_frac = 1.0/((double)mesh.num_nodes_in_elem); // =1/8 - - // partion the mass to the corners - for(size_t corner_lid=0; corner_lid& node_coords, const DCArrayKokkos& node_mass, - const DCArrayKokkos& corner_mass) -{ - - - FOR_ALL(node_gid, 0, mesh.num_nodes, { - for (size_t corner_lid = 0; corner_lid < mesh.num_corners_in_node(node_gid); corner_lid++) { - - size_t corner_gid = mesh.corners_in_node(node_gid, corner_lid); - - node_mass(node_gid) += corner_mass(corner_gid); - } // end for elem_lid - }); // end parallel loop over nodes in the mesh - -} // end function calculate node mass - + const DCArrayKokkos& corner_mass); From 9f981f255ca7cb154516b8b39b2738b11aa13376 Mon Sep 17 00:00:00 2001 From: Jacob Moore Date: Fri, 16 Aug 2024 09:53:37 -0500 Subject: [PATCH 129/233] BUG: Fix CUDA build issue with state writer --- single-node-refactor/src/common/mesh_io.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/single-node-refactor/src/common/mesh_io.h b/single-node-refactor/src/common/mesh_io.h index 0bf7d5746..d0d205aeb 100644 --- a/single-node-refactor/src/common/mesh_io.h +++ b/single-node-refactor/src/common/mesh_io.h @@ -1433,7 +1433,7 @@ class MeshWriter for (size_t elem_lid = 0; elem_lid < num_mat_elems; elem_lid++) { - size_t elem_gid = State.MaterialToMeshMaps(mat_id).elem(elem_lid); + size_t elem_gid = State.MaterialToMeshMaps(mat_id).elem.host(elem_lid); double elem_coords[3]; From 6bca3e11f0fe1191e23190e1dd0a56c89f51e4bc Mon Sep 17 00:00:00 2001 From: Nathaniel Morgan Date: Fri, 16 Aug 2024 11:18:47 -0600 Subject: [PATCH 130/233] added multi-solver to driver class --- .../SGH_solver_rz/src/sgh_execute_rz.cpp | 77 ----------------- .../SGH_solver_rz/src/sgh_setup_rz.cpp | 85 +++++++++++++++++++ .../src/common/solver_inputs.h | 6 +- single-node-refactor/src/driver.cpp | 12 +++ 4 files changed, 101 insertions(+), 79 deletions(-) diff --git a/single-node-refactor/src/Solvers/SGH_solver_rz/src/sgh_execute_rz.cpp b/single-node-refactor/src/Solvers/SGH_solver_rz/src/sgh_execute_rz.cpp index 7b0f52fba..62db1da40 100644 --- a/single-node-refactor/src/Solvers/SGH_solver_rz/src/sgh_execute_rz.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver_rz/src/sgh_execute_rz.cpp @@ -558,83 +558,6 @@ double sum_domain_node_mass_rz(const Mesh_t& mesh, } // end function -///////////////////////////////////////////////////////////////////////////// -/// -/// \fn calc_corner_mass -/// -/// \brief a function to initialize pressure, sound speed and stress -/// -/// \param Materials holds the material models and global parameters -/// \param mesh is the simulation mesh -/// \param node_coords are the nodal coordinates of the mesh -/// \param node_mass is mass of the node -/// \param corner_mass is corner mass -/// \param MaterialPoints_mass is the mass at the material point for mat_id -/// \param num_mat_elems is the number of material elements for mat_id -/// -///////////////////////////////////////////////////////////////////////////// -void calc_corner_mass_rz(const Material_t& Materials, - const Mesh_t& mesh, - const DCArrayKokkos& node_coords, - const DCArrayKokkos& node_mass, - const DCArrayKokkos& corner_mass, - const DCArrayKokkos& MaterialPoints_den, - const DCArrayKokkos& MaterialToMeshMaps_elem, - const size_t num_mat_elems) -{ - - FOR_ALL(elem_gid, 0, mesh.num_elems, { - // facial area of the corners - double corner_areas_array[4]; - - ViewCArrayKokkos corner_areas(&corner_areas_array[0], 4); - ViewCArrayKokkos elem_node_gids(&mesh.nodes_in_elem(elem_gid, 0), 4); - - geometry::get_area_weights2D(corner_areas, elem_gid, node_coords, elem_node_gids); - - // loop over the corners of the element and calculate the mass - for (size_t corner_lid = 0; corner_lid < 4; corner_lid++) { - size_t corner_gid = mesh.corners_in_elem(elem_gid, corner_lid); - corner_mass(corner_gid) += corner_areas(corner_lid) * MaterialPoints_den(elem_gid); // node radius is added later - } // end for over corners - }); - -} // end function calculate corner mass - - - -///////////////////////////////////////////////////////////////////////////// -/// -/// \fn calc_node_mass -/// -/// \brief a function to initialize material corner masses -/// -/// \param Materials holds the material models and global parameters -/// \param mesh is the simulation mesh -/// \param node_coords are the nodal coordinates of the mesh -/// \param node_mass is mass of the node -/// \param corner_mass is corner mass -/// \param MaterialPoints_mass is the mass at the material point for mat_id -/// \param num_mat_elems is the number of material elements for mat_id -/// -///////////////////////////////////////////////////////////////////////////// -void calc_node_mass_rz(const Mesh_t& mesh, - const DCArrayKokkos& node_coords, - const DCArrayKokkos& node_mass, - const DCArrayKokkos& corner_mass) -{ - - FOR_ALL(node_gid, 0, mesh.num_nodes, { - for (size_t corner_lid = 0; corner_lid < mesh.num_corners_in_node(node_gid); corner_lid++) { - size_t corner_gid = mesh.corners_in_node(node_gid, corner_lid); - node_mass(node_gid) += corner_mass(corner_gid); // sans the radius so it is areal node mass - - corner_mass(corner_gid) *= node_coords(1, node_gid, 1); // true corner mass now - } // end for elem_lid - }); - -} // end function calculate node mass - ///////////////////////////////////////////////////////////////////////////// diff --git a/single-node-refactor/src/Solvers/SGH_solver_rz/src/sgh_setup_rz.cpp b/single-node-refactor/src/Solvers/SGH_solver_rz/src/sgh_setup_rz.cpp index 36fce245e..896128beb 100644 --- a/single-node-refactor/src/Solvers/SGH_solver_rz/src/sgh_setup_rz.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver_rz/src/sgh_setup_rz.cpp @@ -39,6 +39,7 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "boundary_conditions.h" #include "simulation_parameters.h" #include "state.h" +#include "geometry_new.h" ///////////////////////////////////////////////////////////////////////////// /// @@ -515,6 +516,90 @@ void SGHRZ::setup(SimulationParameters_t& SimulationParamaters, } // end SGHRZ setup +///////////////////////////////////////////////////////////////////////////// +/// +/// \fn calc_corner_mass +/// +/// \brief a function to initialize pressure, sound speed and stress +/// +/// \param Materials holds the material models and global parameters +/// \param mesh is the simulation mesh +/// \param node_coords are the nodal coordinates of the mesh +/// \param node_mass is mass of the node +/// \param corner_mass is corner mass +/// \param MaterialPoints_mass is the mass at the material point for mat_id +/// \param num_mat_elems is the number of material elements for mat_id +/// +///////////////////////////////////////////////////////////////////////////// +void calc_corner_mass_rz(const Material_t& Materials, + const Mesh_t& mesh, + const DCArrayKokkos& node_coords, + const DCArrayKokkos& node_mass, + const DCArrayKokkos& corner_mass, + const DCArrayKokkos& MaterialPoints_den, + const DCArrayKokkos& MaterialToMeshMaps_elem, + const size_t num_mat_elems) +{ + + FOR_ALL(mat_elem_lid, 0, num_mat_elems, { + + // get elem gid + size_t elem_gid = MaterialToMeshMaps_elem(mat_elem_lid); + + // facial area of the corners + double corner_areas_array[4]; + + ViewCArrayKokkos corner_areas(&corner_areas_array[0], 4); + ViewCArrayKokkos elem_node_gids(&mesh.nodes_in_elem(elem_gid, 0), 4); + + geometry::get_area_weights2D(corner_areas, elem_gid, node_coords, elem_node_gids); + + // loop over the corners of the element and calculate the mass + for (size_t corner_lid = 0; corner_lid < 4; corner_lid++) { + size_t corner_gid = mesh.corners_in_elem(elem_gid, corner_lid); + corner_mass(corner_gid) += corner_areas(corner_lid) * MaterialPoints_den(mat_elem_lid); // node radius is added later + } // end for over corners + }); + +} // end function calculate corner mass + + + +///////////////////////////////////////////////////////////////////////////// +/// +/// \fn calc_node_mass +/// +/// \brief a function to initialize material corner masses +/// +/// \param Materials holds the material models and global parameters +/// \param mesh is the simulation mesh +/// \param node_coords are the nodal coordinates of the mesh +/// \param node_mass is mass of the node +/// \param corner_mass is corner mass +/// \param MaterialPoints_mass is the mass at the material point for mat_id +/// \param num_mat_elems is the number of material elements for mat_id +/// +///////////////////////////////////////////////////////////////////////////// +void calc_node_mass_rz(const Mesh_t& mesh, + const DCArrayKokkos& node_coords, + const DCArrayKokkos& node_mass, + const DCArrayKokkos& corner_mass) +{ + + FOR_ALL(node_gid, 0, mesh.num_nodes, { + for (size_t corner_lid = 0; corner_lid < mesh.num_corners_in_node(node_gid); corner_lid++) { + + size_t corner_gid = mesh.corners_in_node(node_gid, corner_lid); + + node_mass(node_gid) += corner_mass(corner_gid); // sans the radius so it is areal node mass + + corner_mass(corner_gid) *= node_coords(1, node_gid, 1); // true corner mass now + } // end for elem_lid + }); + +} // end function calculate node mass + + diff --git a/single-node-refactor/src/common/solver_inputs.h b/single-node-refactor/src/common/solver_inputs.h index e84c4c067..c5ab67adb 100644 --- a/single-node-refactor/src/common/solver_inputs.h +++ b/single-node-refactor/src/common/solver_inputs.h @@ -1,5 +1,5 @@ /********************************************************************************************** - 2020. Triad National Security, LLC. All rights reserved. +� 2020. Triad National Security, LLC. All rights reserved. This program was produced under U.S. Government contract 89233218CNA000001 for Los Alamos National Laboratory (LANL), which is operated by Triad National Security, LLC for the U.S. Department of Energy/National Nuclear Security Administration. All rights in the program are @@ -44,12 +44,14 @@ enum method { NONE = 0, SGH = 1, + SGHRZ = 2, }; } // end of namespace static std::map solver_map { - { "SGH", solver_input::SGH } + { "SGH", solver_input::SGH }, + { "SGHRZ", solver_input::SGHRZ } }; ///////////////////////////////////////////////////////////////////////////// diff --git a/single-node-refactor/src/driver.cpp b/single-node-refactor/src/driver.cpp index 8b0b4bbbe..6df54e4dd 100644 --- a/single-node-refactor/src/driver.cpp +++ b/single-node-refactor/src/driver.cpp @@ -104,6 +104,18 @@ void Driver::initialize() solvers.push_back(sgh_solver); } // end if SGH solver + else if (SimulationParamaters.solver_inputs[solver_id].method == solver_input::SGHRZ) { + + SGHRZ* sgh_solver_rz = new SGHRZ(); + + sgh_solver_rz->initialize(SimulationParamaters, + Materials, + mesh, + BoundaryConditions, + State); + + solvers.push_back(sgh_solver_rz); + } // end if SGH solver } // end for loop over solvers From ab6cbd8cfa027159c72ced851e6c7fab3a84e8da Mon Sep 17 00:00:00 2001 From: Nathaniel Morgan Date: Fri, 16 Aug 2024 11:24:41 -0600 Subject: [PATCH 131/233] adding 2D Sedov input file for testing --- single-node-refactor/input-rz.yaml | 101 +++++++++++++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100644 single-node-refactor/input-rz.yaml diff --git a/single-node-refactor/input-rz.yaml b/single-node-refactor/input-rz.yaml new file mode 100644 index 000000000..0e2b74c8f --- /dev/null +++ b/single-node-refactor/input-rz.yaml @@ -0,0 +1,101 @@ +# num_dims: 3 + +dynamic_options: + time_final: 1.0 + dt_min: 1.e-8 + dt_max: 1.e-2 + dt_start: 1.e-5 + cycle_stop: 105 + + +# mesh_options: +# source: file +# file_path: /var/tmp/repos/Fierro/fork/Fierro/testing/meshes/mesh_Sedov_8.geo + +mesh_options: + source: generate + num_dims: 2 + type: Box + origin: [0.0, 0.0] + length: [1.2, 1.2] + num_elems: [12, 12] + + +output_options: + timer_output_level: thorough + output_file_format: ensight + graphics_time_step: 0.25 + graphics_iteration_step: 2 + +solver_options: + - solver: + method: SGHRZ + # solver_vars: + # - blah + # - blah + # - blah + +boundary_conditions: + # Tag X plane + - boundary_condition: + solver: SGHRZ + geometry: x_plane + direction: x_dir + value: 0.0 + type: reflected_velocity + + + # Tag Y plane + - boundary_condition: + solver: SGHRZ + geometry: y_plane + direction: y_dir + value: 0.0 + type: reflected_velocity + + + +materials: + - material: + id: 0 + eos_model_type: decoupled + eos_model: gamma_law_gas + # strength_model: none + q1: 1.0 + q2: 1.333 + q1ex: 1.0 + q2ex: 1.333 + eos_global_vars: + - 1.666666666666667 + - 1.0E-14 + - 1.0 + +regions: + - fill_volume: + type: global + material_id: 0 + den: 1.0 + sie: 1.e-10 + velocity: cartesian + u: 0.0 + v: 0.0 + w: 0.0 + + + + # energy source initial conditions + - fill_volume: + type: sphere + origin: [0.0, 0.0, 0.0] + radius1: 0.0 + radius2: 0.1 + material_id: 0 + den: 1.0 + # ie: 0.25833839995946534 + sie: 61.67375002 # 963.652344 + velocity: cartesian + u: 0.0 + v: 0.0 + w: 0.0 + + From 287edf46cc8bd4e830f9c5daba5022562378f31f Mon Sep 17 00:00:00 2001 From: Nathaniel Morgan Date: Fri, 16 Aug 2024 12:10:00 -0600 Subject: [PATCH 132/233] WIP --- .../SGH_solver_rz/include/sgh_solver_rz.h | 1 + .../Solvers/SGH_solver_rz/src/force_sgh_rz.cpp | 17 +++++++++++------ .../SGH_solver_rz/src/sgh_execute_rz.cpp | 3 +++ 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/single-node-refactor/src/Solvers/SGH_solver_rz/include/sgh_solver_rz.h b/single-node-refactor/src/Solvers/SGH_solver_rz/include/sgh_solver_rz.h index 8636c5345..a68cc9235 100644 --- a/single-node-refactor/src/Solvers/SGH_solver_rz/include/sgh_solver_rz.h +++ b/single-node-refactor/src/Solvers/SGH_solver_rz/include/sgh_solver_rz.h @@ -201,6 +201,7 @@ class SGHRZ : public Solver const size_t num_mat_elems, const size_t mat_id, const double fuzz, + const double tiny, const double small, const double dt, const double rk_alpha) const; diff --git a/single-node-refactor/src/Solvers/SGH_solver_rz/src/force_sgh_rz.cpp b/single-node-refactor/src/Solvers/SGH_solver_rz/src/force_sgh_rz.cpp index 1388dac02..b28b5dc51 100644 --- a/single-node-refactor/src/Solvers/SGH_solver_rz/src/force_sgh_rz.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver_rz/src/force_sgh_rz.cpp @@ -83,6 +83,7 @@ void SGHRZ::get_force_rz(const Material_t& Materials, const size_t num_mat_elems, const size_t mat_id, const double fuzz, + const double tiny, const double small, const double dt, const double rk_alpha) const @@ -189,6 +190,7 @@ void SGHRZ::get_force_rz(const Material_t& Materials, double mag_curl = curl; // --- Calculate the Cauchy stress --- + // loops are always over 3 even for 2D RZ for (size_t i = 0; i < 3; i++) { for (size_t j = 0; j < 3; j++) { tau(i, j) = stress(i, j); @@ -196,10 +198,13 @@ void SGHRZ::get_force_rz(const Material_t& Materials, } // end for } // end for - // add the pressure - for (int i = 0; i < 3; i++) { - tau(i, i) -= MaterialPoints_pres(mat_point_lid); - } // end for + // add the pressure if a decoupled model is used + if (Materials.MaterialEnums(mat_id).EOSType == model::decoupledEOSType) { + // loop is always over 3 even for 2D RZ + for (int i = 0; i < 3; i++) { + tau(i, i) -= MaterialPoints_pres(mat_point_lid); + } // end for + } // ---- Multidirectional Approximate Riemann solver (MARS) ---- // find the average velocity of the elem, it is an @@ -354,7 +359,7 @@ void SGHRZ::get_force_rz(const Material_t& Materials, // Mach number shock detector double omega = 20.0; // 20.0; // weighting factor on Mach number double c_length = sqrt(elem_area); // characteristic length - double alpha = fmin(1.0, omega * (c_length * fabs(div)) / (MaterialPoints_sspd(elem_gid) + fuzz) ); + double alpha = fmin(1.0, omega * (c_length * fabs(div)) / (MaterialPoints_sspd(mat_point_lid) + fuzz) ); // use Mach based detector with standard shock detector @@ -393,7 +398,7 @@ void SGHRZ::get_force_rz(const Material_t& Materials, // Wilkins used elem_area*0.25 for the corner area, we will use the corner // areas calculated using Barlow's symmetry and energy preserving area partitioning - if (node_radius > 1e-14) { + if (node_radius > tiny) { // sigma_RZ / R_p corner_force(corner_gid, 0) += tau(1, 0) * corner_areas(corner_lid) / node_radius; diff --git a/single-node-refactor/src/Solvers/SGH_solver_rz/src/sgh_execute_rz.cpp b/single-node-refactor/src/Solvers/SGH_solver_rz/src/sgh_execute_rz.cpp index 62db1da40..05ef97900 100644 --- a/single-node-refactor/src/Solvers/SGH_solver_rz/src/sgh_execute_rz.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver_rz/src/sgh_execute_rz.cpp @@ -282,6 +282,7 @@ void SGHRZ::execute(SimulationParameters_t& SimulationParamaters, num_mat_elems, mat_id, fuzz, + tiny, small, dt, rk_alpha); @@ -610,11 +611,13 @@ void calc_node_areal_mass_rz(const Mesh_t& mesh, // calculate the nodal areal mass FOR_ALL(node_gid, 0, mesh.num_nodes, { + node_mass(node_gid) = 0.0; if (node_coords(1, node_gid, 1) > tiny) { node_mass(node_gid) = node_extensive_mass(node_gid) / node_coords(1, node_gid, 1); } + }); // end parallel for over node_gid Kokkos::fence(); From 5b1beb0a5910376a6e562f158c821a8b480c3467 Mon Sep 17 00:00:00 2001 From: Jacob Moore Date: Fri, 16 Aug 2024 13:09:18 -0500 Subject: [PATCH 133/233] ENH: Rename SGH to SGH3D --- single-node-refactor/input.yaml | 10 +- .../regression_tests/standard_inputs/Noh.yaml | 2 +- .../standard_inputs/Sedov.yaml | 8 +- .../standard_inputs/Sedov_Erosion.yaml | 8 +- .../standard_inputs/Sod_X.yaml | 14 +- .../standard_inputs/Sod_Y.yaml | 14 +- .../standard_inputs/Sod_Z.yaml | 14 +- single-node-refactor/src/CMakeLists.txt | 6 +- .../src/Solvers/SGH_solver/src/force_sgh.cpp | 831 ------------------ .../CMakeLists.txt | 4 +- .../include/sgh_solver_3D.h} | 95 +- .../src/boundary.cpp | 18 +- .../src/energy_sgh.cpp | 8 +- .../Solvers/SGH_solver_3D/src/force_sgh.cpp | 437 +++++++++ .../src/momentum.cpp | 165 +--- .../src/position.cpp | 4 +- .../src/properties.cpp | 238 +---- .../src/sgh_execute.cpp | 293 ++---- .../src/sgh_setup.cpp | 8 +- .../src/time_integration.cpp | 113 +-- .../src/common/solver_inputs.h | 4 +- single-node-refactor/src/driver.cpp | 4 +- single-node-refactor/src/driver.h | 2 +- 23 files changed, 600 insertions(+), 1700 deletions(-) delete mode 100644 single-node-refactor/src/Solvers/SGH_solver/src/force_sgh.cpp rename single-node-refactor/src/Solvers/{SGH_solver => SGH_solver_3D}/CMakeLists.txt (92%) rename single-node-refactor/src/Solvers/{SGH_solver/include/sgh_solver.h => SGH_solver_3D/include/sgh_solver_3D.h} (81%) rename single-node-refactor/src/Solvers/{SGH_solver => SGH_solver_3D}/src/boundary.cpp (88%) rename single-node-refactor/src/Solvers/{SGH_solver => SGH_solver_3D}/src/energy_sgh.cpp (96%) create mode 100644 single-node-refactor/src/Solvers/SGH_solver_3D/src/force_sgh.cpp rename single-node-refactor/src/Solvers/{SGH_solver => SGH_solver_3D}/src/momentum.cpp (67%) rename single-node-refactor/src/Solvers/{SGH_solver => SGH_solver_3D}/src/position.cpp (97%) rename single-node-refactor/src/Solvers/{SGH_solver => SGH_solver_3D}/src/properties.cpp (54%) rename single-node-refactor/src/Solvers/{SGH_solver => SGH_solver_3D}/src/sgh_execute.cpp (70%) rename single-node-refactor/src/Solvers/{SGH_solver => SGH_solver_3D}/src/sgh_setup.cpp (99%) rename single-node-refactor/src/Solvers/{SGH_solver => SGH_solver_3D}/src/time_integration.cpp (67%) diff --git a/single-node-refactor/input.yaml b/single-node-refactor/input.yaml index a657ecbf2..a35232f05 100644 --- a/single-node-refactor/input.yaml +++ b/single-node-refactor/input.yaml @@ -23,13 +23,13 @@ mesh_options: output_options: timer_output_level: thorough - output_file_format: ensight + output_file_format: vtk graphics_time_step: 0.25 # graphics_iteration_step: 10 solver_options: - solver: - method: SGH + method: SGH3D # solver_vars: # - blah # - blah @@ -38,7 +38,7 @@ solver_options: boundary_conditions: # Tag X plane - boundary_condition: - solver: SGH + solver: SGH3D geometry: x_plane direction: x_dir value: 0.0 @@ -47,7 +47,7 @@ boundary_conditions: # Tag Y plane - boundary_condition: - solver: SGH + solver: SGH3D geometry: y_plane direction: y_dir value: 0.0 @@ -55,7 +55,7 @@ boundary_conditions: # Tag z plane - boundary_condition: - solver: SGH + solver: SGH3D geometry: z_plane direction: z_dir value: 0.0 diff --git a/single-node-refactor/regression_tests/standard_inputs/Noh.yaml b/single-node-refactor/regression_tests/standard_inputs/Noh.yaml index 7a630aeaa..4dccc19cf 100644 --- a/single-node-refactor/regression_tests/standard_inputs/Noh.yaml +++ b/single-node-refactor/regression_tests/standard_inputs/Noh.yaml @@ -21,7 +21,7 @@ output_options: fea_module_parameters: - - type: SGH + - type: SGH3D material_id: 0 boundary_conditions: # Tag X plane diff --git a/single-node-refactor/regression_tests/standard_inputs/Sedov.yaml b/single-node-refactor/regression_tests/standard_inputs/Sedov.yaml index 07bb127da..113105002 100644 --- a/single-node-refactor/regression_tests/standard_inputs/Sedov.yaml +++ b/single-node-refactor/regression_tests/standard_inputs/Sedov.yaml @@ -23,12 +23,12 @@ output_options: solver_options: - solver: - method: SGH + method: SGH3D boundary_conditions: # Tag X plane - boundary_condition: - solver: SGH + solver: SGH3D geometry: x_plane direction: x_dir value: 0.0 @@ -37,7 +37,7 @@ boundary_conditions: # Tag Y plane - boundary_condition: - solver: SGH + solver: SGH3D geometry: y_plane direction: y_dir value: 0.0 @@ -45,7 +45,7 @@ boundary_conditions: # Tag z plane - boundary_condition: - solver: SGH + solver: SGH3D geometry: z_plane direction: z_dir value: 0.0 diff --git a/single-node-refactor/regression_tests/standard_inputs/Sedov_Erosion.yaml b/single-node-refactor/regression_tests/standard_inputs/Sedov_Erosion.yaml index d62868284..79db59797 100644 --- a/single-node-refactor/regression_tests/standard_inputs/Sedov_Erosion.yaml +++ b/single-node-refactor/regression_tests/standard_inputs/Sedov_Erosion.yaml @@ -29,7 +29,7 @@ output_options: solver_options: - solver: - method: SGH + method: SGH3D # solver_vars: # - blah # - blah @@ -38,7 +38,7 @@ solver_options: boundary_conditions: # Tag X plane - boundary_condition: - solver: SGH + solver: SGH3D geometry: x_plane direction: x_dir value: 0.0 @@ -50,7 +50,7 @@ boundary_conditions: # Tag Y plane - boundary_condition: - solver: SGH + solver: SGH3D geometry: y_plane direction: y_dir value: 0.0 @@ -58,7 +58,7 @@ boundary_conditions: # Tag z plane - boundary_condition: - solver: SGH + solver: SGH3D geometry: z_plane direction: z_dir value: 0.0 diff --git a/single-node-refactor/regression_tests/standard_inputs/Sod_X.yaml b/single-node-refactor/regression_tests/standard_inputs/Sod_X.yaml index 0a4a71116..ce7465c09 100644 --- a/single-node-refactor/regression_tests/standard_inputs/Sod_X.yaml +++ b/single-node-refactor/regression_tests/standard_inputs/Sod_X.yaml @@ -22,12 +22,12 @@ output_options: solver_options: - solver: - method: SGH + method: SGH3D boundary_conditions: # Tag X=0 plane - boundary_condition: - solver: SGH + solver: SGH3D geometry: x_plane direction: x_dir value: 0.0 @@ -36,7 +36,7 @@ boundary_conditions: # Tag Y=0 plane - boundary_condition: - solver: SGH + solver: SGH3D geometry: y_plane direction: y_dir value: 0.0 @@ -44,7 +44,7 @@ boundary_conditions: # Tag z=0 plane - boundary_condition: - solver: SGH + solver: SGH3D geometry: z_plane direction: z_dir value: 0.0 @@ -53,7 +53,7 @@ boundary_conditions: # Tag X=1 plane - boundary_condition: - solver: SGH + solver: SGH3D geometry: x_plane direction: x_dir value: 1.0 @@ -62,7 +62,7 @@ boundary_conditions: # Tag Y=0.01 plane - boundary_condition: - solver: SGH + solver: SGH3D geometry: y_plane direction: y_dir value: 0.01 @@ -70,7 +70,7 @@ boundary_conditions: # Tag z=0.01 plane - boundary_condition: - solver: SGH + solver: SGH3D geometry: z_plane direction: z_dir value: 0.01 diff --git a/single-node-refactor/regression_tests/standard_inputs/Sod_Y.yaml b/single-node-refactor/regression_tests/standard_inputs/Sod_Y.yaml index db5e90363..25bfbd23e 100644 --- a/single-node-refactor/regression_tests/standard_inputs/Sod_Y.yaml +++ b/single-node-refactor/regression_tests/standard_inputs/Sod_Y.yaml @@ -22,12 +22,12 @@ output_options: solver_options: - solver: - method: SGH + method: SGH3D boundary_conditions: # Tag X=0 plane - boundary_condition: - solver: SGH + solver: SGH3D geometry: x_plane direction: x_dir value: 0.0 @@ -36,7 +36,7 @@ boundary_conditions: # Tag Y=0 plane - boundary_condition: - solver: SGH + solver: SGH3D geometry: y_plane direction: y_dir value: 0.0 @@ -44,7 +44,7 @@ boundary_conditions: # Tag z=0 plane - boundary_condition: - solver: SGH + solver: SGH3D geometry: z_plane direction: z_dir value: 0.0 @@ -53,7 +53,7 @@ boundary_conditions: # Tag X=0.01 plane - boundary_condition: - solver: SGH + solver: SGH3D geometry: x_plane direction: x_dir value: 0.01 @@ -62,7 +62,7 @@ boundary_conditions: # Tag Y=1.0 plane - boundary_condition: - solver: SGH + solver: SGH3D geometry: y_plane direction: y_dir value: 1.0 @@ -70,7 +70,7 @@ boundary_conditions: # Tag z=0.01 plane - boundary_condition: - solver: SGH + solver: SGH3D geometry: z_plane direction: z_dir value: 0.01 diff --git a/single-node-refactor/regression_tests/standard_inputs/Sod_Z.yaml b/single-node-refactor/regression_tests/standard_inputs/Sod_Z.yaml index 0de7c0196..64fd52454 100644 --- a/single-node-refactor/regression_tests/standard_inputs/Sod_Z.yaml +++ b/single-node-refactor/regression_tests/standard_inputs/Sod_Z.yaml @@ -22,12 +22,12 @@ output_options: solver_options: - solver: - method: SGH + method: SGH3D boundary_conditions: # Tag X=0 plane - boundary_condition: - solver: SGH + solver: SGH3D geometry: x_plane direction: x_dir value: 0.0 @@ -36,7 +36,7 @@ boundary_conditions: # Tag Y=0 plane - boundary_condition: - solver: SGH + solver: SGH3D geometry: y_plane direction: y_dir value: 0.0 @@ -44,7 +44,7 @@ boundary_conditions: # Tag z=0 plane - boundary_condition: - solver: SGH + solver: SGH3D geometry: z_plane direction: z_dir value: 0.0 @@ -53,7 +53,7 @@ boundary_conditions: # Tag X=0.01 plane - boundary_condition: - solver: SGH + solver: SGH3D geometry: x_plane direction: x_dir value: 0.01 @@ -62,7 +62,7 @@ boundary_conditions: # Tag Y=0.01 plane - boundary_condition: - solver: SGH + solver: SGH3D geometry: y_plane direction: y_dir value: 0.01 @@ -70,7 +70,7 @@ boundary_conditions: # Tag z=1.0 plane - boundary_condition: - solver: SGH + solver: SGH3D geometry: z_plane direction: z_dir value: 1.0 diff --git a/single-node-refactor/src/CMakeLists.txt b/single-node-refactor/src/CMakeLists.txt index 422ffef12..ba1ba8063 100755 --- a/single-node-refactor/src/CMakeLists.txt +++ b/single-node-refactor/src/CMakeLists.txt @@ -61,12 +61,12 @@ include_directories(common) # add_subdirectory(Solvers/SGH_solver) # Add SGH Solver -include_directories(Solvers/SGH_solver/include) -add_subdirectory(Solvers/SGH_solver) +include_directories(Solvers/SGH_solver_3D/include) +add_subdirectory(Solvers/SGH_solver_3D) # Add SGH RZ Solver include_directories(Solvers/SGH_solver_rz/include) add_subdirectory(Solvers/SGH_solver_rz) -add_executable(Fierro main.cpp driver.cpp solver.cpp common/region_fill.cpp ${YAML_SRC_Files} ${SGH_SRC_Files} ${SGH_RZ_SRC_Files}) +add_executable(Fierro main.cpp driver.cpp solver.cpp common/region_fill.cpp ${YAML_SRC_Files} ${SGH_3D_SRC_Files} ${SGH_RZ_SRC_Files}) target_link_libraries(Fierro PRIVATE matar Kokkos::kokkos) diff --git a/single-node-refactor/src/Solvers/SGH_solver/src/force_sgh.cpp b/single-node-refactor/src/Solvers/SGH_solver/src/force_sgh.cpp deleted file mode 100644 index 79dfb50b8..000000000 --- a/single-node-refactor/src/Solvers/SGH_solver/src/force_sgh.cpp +++ /dev/null @@ -1,831 +0,0 @@ -/********************************************************************************************** -� 2020. Triad National Security, LLC. All rights reserved. -This program was produced under U.S. Government contract 89233218CNA000001 for Los Alamos -National Laboratory (LANL), which is operated by Triad National Security, LLC for the U.S. -Department of Energy/National Nuclear Security Administration. All rights in the program are -reserved by Triad National Security, LLC, and the U.S. Department of Energy/National Nuclear -Security Administration. The Government is granted for itself and others acting on its behalf a -nonexclusive, paid-up, irrevocable worldwide license in this material to reproduce, prepare -derivative works, distribute copies to the public, perform publicly and display publicly, and -to permit others to do so. -This program is open source under the BSD-3 License. -Redistribution and use in source and binary forms, with or without modification, are permitted -provided that the following conditions are met: -1. Redistributions of source code must retain the above copyright notice, this list of -conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright notice, this list of -conditions and the following disclaimer in the documentation and/or other materials -provided with the distribution. -3. Neither the name of the copyright holder nor the names of its contributors may be used -to endorse or promote products derived from this software without specific prior -written permission. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS -IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; -OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, -WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR -OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF -ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -**********************************************************************************************/ - -#include "sgh_solver.h" -#include "material.h" -#include "mesh.h" -#include "state.h" -#include "geometry_new.h" - -///////////////////////////////////////////////////////////////////////////// -/// -/// \fn get_force -/// -/// \brief This function calculates the corner forces and the evolves stress -/// -/// \param Material that contains material specific data -/// \param The simulation mesh -/// \param A view into the nodal position array -/// \param A view into the nodal velocity array -/// \param A view into the element density array -/// \param A view into the element specific internal energy array -/// \param A view into the element pressure array -/// \param A view into the element stress array -/// \param A view into the element sound speed array -/// \param A view into the element volume array -/// \param A view into the element divergence of velocity array -/// \param A view into the element material identifier array -/// \param fuzz -/// \param small -/// \param Element state variable array -/// \param Time step size -/// \param The current Runge Kutta integration alpha value -/// -///////////////////////////////////////////////////////////////////////////// -void SGH::get_force(const Material_t& Materials, - const Mesh_t& mesh, - const DCArrayKokkos& GaussPoints_vol, - const DCArrayKokkos& GaussPoints_div, - const DCArrayKokkos& MaterialPoints_eroded, - const DCArrayKokkos& corner_force, - const DCArrayKokkos& node_coords, - const DCArrayKokkos& node_vel, - const DCArrayKokkos& MaterialPoints_den, - const DCArrayKokkos& MaterialPoints_sie, - const DCArrayKokkos& MaterialPoints_pres, - const DCArrayKokkos& MaterialPoints_stress, - const DCArrayKokkos& MaterialPoints_sspd, - const DCArrayKokkos& MaterialPoints_statev, - const DCArrayKokkos& MaterialCorners_force, - const corners_in_mat_t corners_in_mat_elem, - const DCArrayKokkos& MaterialToMeshMaps_elem, - const size_t num_mat_elems, - const size_t mat_id, - const double fuzz, - const double small, - const double dt, - const double rk_alpha) const -{ - const size_t num_dims = 3; - const size_t num_nodes_in_elem = 8; - - - - // --- calculate the forces acting on the nodes from the element --- - FOR_ALL(mat_elem_lid, 0, num_mat_elems, { - - // get elem gid - size_t elem_gid = MaterialToMeshMaps_elem(mat_elem_lid); - - // the material point index = the material elem index for a 1-point element - size_t mat_point_lid = mat_elem_lid; - - - // total Cauchy stress - double tau_array[9]; - - // corner area normals - double area_normal_array[24]; - - // estimate of shock direction - double shock_dir_array[3]; - - // the sums in the Riemann solver - double sum_array[4]; - - // corner shock impedance x |corner area normal dot shock_dir| - double muc_array[8]; - - // Riemann velocity - double vel_star_array[3]; - - // velocity gradient - double vel_grad_array[9]; - - // --- Create views of arrays to aid the force calculation --- - - ViewCArrayKokkos tau(tau_array, num_dims, num_dims); - ViewCArrayKokkos area_normal(area_normal_array, num_nodes_in_elem, num_dims); - ViewCArrayKokkos shock_dir(shock_dir_array, num_dims); - ViewCArrayKokkos sum(sum_array, 4); - ViewCArrayKokkos muc(muc_array, num_nodes_in_elem); - ViewCArrayKokkos vel_star(vel_star_array, num_dims); - ViewCArrayKokkos vel_grad(vel_grad_array, num_dims, num_dims); - - // element volume - double vol = GaussPoints_vol(elem_gid); - - - // create a view of the stress_matrix - ViewCArrayKokkos stress(&MaterialPoints_stress(1, mat_point_lid, 0, 0), 3, 3); - - // cut out the node_gids for this element - ViewCArrayKokkos elem_node_gids(&mesh.nodes_in_elem(elem_gid, 0), 8); - - // get the B matrix which are the OUTWARD corner area normals - geometry::get_bmatrix(area_normal, - elem_gid, - node_coords, - elem_node_gids); - - // --- Calculate the velocity gradient --- - SGH::get_velgrad(vel_grad, - elem_node_gids, - node_vel, - area_normal, - vol, - elem_gid); - - // the -1 is for the inward surface area normal, - for (size_t node_lid = 0; node_lid < num_nodes_in_elem; node_lid++) { - for (size_t dim = 0; dim < num_dims; dim++) { - area_normal(node_lid, dim) = (-1.0) * area_normal(node_lid, dim); - } // end for - } // end for - - double div = GaussPoints_div(elem_gid); - - // vel = [u,v,w] - // [du/dx, du/dy, du/dz] - // vel_grad = [dv/dx, dv/dy, dv/dz] - // [dw/dx, dw/dy, dw/dz] - double curl[3]; - curl[0] = vel_grad(2, 1) - vel_grad(1, 2); // dw/dy - dv/dz - curl[1] = vel_grad(0, 2) - vel_grad(2, 0); // du/dz - dw/dx - curl[2] = vel_grad(1, 0) - vel_grad(0, 1); // dv/dx - du/dy - - double mag_curl = sqrt(curl[0] * curl[0] + curl[1] * curl[1] + curl[2] * curl[2]); - - // --- Calculate the Cauchy stress --- - for (size_t i = 0; i < 3; i++) { - for (size_t j = 0; j < 3; j++) { - tau(i, j) = stress(i, j); - // artificial viscosity can be added here to tau - } // end for - } // end for - - // add the pressure if a decoupled model is used - if (Materials.MaterialEnums(mat_id).EOSType == model::decoupledEOSType) { - for (int i = 0; i < num_dims; i++) { - tau(i, i) -= MaterialPoints_pres(mat_point_lid); - } // end for - } - - // ---- Multi-directional Approximate Riemann solver (MARS) ---- - // find the average velocity of the elem, it is an - // estimate of the Riemann velocity - - // initialize to Riemann velocity to zero - for (size_t dim = 0; dim < num_dims; dim++) { - vel_star(dim) = 0.0; - } - - // loop over nodes and calculate an average velocity, which is - // an estimate of Riemann velocity - for (size_t node_lid = 0; node_lid < num_nodes_in_elem; node_lid++) { - // Get node global index and create view of nodal velocity - int node_gid = mesh.nodes_in_elem(elem_gid, node_lid); - - ViewCArrayKokkos vel(&node_vel(1, node_gid, 0), num_dims); - - vel_star(0) += 0.125 * vel(0); - vel_star(1) += 0.125 * vel(1); - vel_star(2) += 0.125 * vel(2); - } // end for loop over nodes - - // find shock direction and shock impedance associated with each node - - // initialize sum term in MARS to zero - for (int i = 0; i < 4; i++) { - sum(i) = 0.0; - } - - double mag; // magnitude of the area normal - double mag_vel; // magnitude of velocity - - // loop over the nodes of the elem - for (size_t node_lid = 0; node_lid < num_nodes_in_elem; node_lid++) { - // Get global node id - size_t node_gid = mesh.nodes_in_elem(elem_gid, node_lid); - - // Create view of nodal velocity - ViewCArrayKokkos vel(&node_vel(1, node_gid, 0), num_dims); - - // Get an estimate of the shock direction. - mag_vel = sqrt( (vel(0) - vel_star(0) ) * (vel(0) - vel_star(0) ) - + (vel(1) - vel_star(1) ) * (vel(1) - vel_star(1) ) - + (vel(2) - vel_star(2) ) * (vel(2) - vel_star(2) ) ); - - if (mag_vel > small) { - // estimate of the shock direction, a unit normal - for (int dim = 0; dim < num_dims; dim++) { - shock_dir(dim) = (vel(dim) - vel_star(dim)) / mag_vel; - } - } - else{ - // if there is no velocity change, then use the surface area - // normal as the shock direction - mag = sqrt(area_normal(node_lid, 0) * area_normal(node_lid, 0) - + area_normal(node_lid, 1) * area_normal(node_lid, 1) - + area_normal(node_lid, 2) * area_normal(node_lid, 2) ); - - // estimate of the shock direction - for (int dim = 0; dim < num_dims; dim++) { - shock_dir(dim) = area_normal(node_lid, dim) / mag; - } - } // end if mag_vel - - // cell divergence indicates compression or expansions - if (div < 0) { // element in compression - muc(node_lid) = MaterialPoints_den(mat_point_lid) * - (Materials.MaterialFunctions(mat_id).q1 * MaterialPoints_sspd(mat_point_lid) + - Materials.MaterialFunctions(mat_id).q2 * mag_vel); - } - else{ // element in expansion - muc(node_lid) = MaterialPoints_den(mat_point_lid) * - (Materials.MaterialFunctions(mat_id).q1ex * MaterialPoints_sspd(mat_point_lid) + - Materials.MaterialFunctions(mat_id).q2ex * mag_vel); - } // end if on divergence sign - - size_t use_shock_dir = 0; - double mu_term; - - // Coding to use shock direction - if (use_shock_dir == 1) { - // this is denominator of the Riemann solver and the multiplier - // on velocity in the numerator. It filters on the shock - // direction - mu_term = muc(node_lid) * - fabs(shock_dir(0) * area_normal(node_lid, 0) - + shock_dir(1) * area_normal(node_lid, 1) - + shock_dir(2) * area_normal(node_lid, 2) ); - } - else{ - // Using a full tensoral Riemann jump relation - mu_term = muc(node_lid) - * sqrt(area_normal(node_lid, 0) * area_normal(node_lid, 0) - + area_normal(node_lid, 1) * area_normal(node_lid, 1) - + area_normal(node_lid, 2) * area_normal(node_lid, 2) ); - } - - sum(0) += mu_term * vel(0); - sum(1) += mu_term * vel(1); - sum(2) += mu_term * vel(2); - sum(3) += mu_term; - - muc(node_lid) = mu_term; // the impedance time surface area is stored here - } // end for node_lid loop over nodes of the elem - - // The Riemann velocity, called vel_star - if (sum(3) > fuzz) { - for (size_t i = 0; i < num_dims; i++) { - vel_star(i) = sum(i) / sum(3); - } - } - else{ - for (int i = 0; i < num_dims; i++) { - vel_star(i) = 0.0; - } - } // end if - - // ---- Calculate the shock detector for the Riemann-solver ---- - // - // The dissipation from the Riemann problem is limited by phi - // phi = (1. - max( 0., min( 1. , r_face ) ))^n - // where - // r_face = (C* div(u_+)/div(u_z)) - // The plus denotes the cell center divergence of a neighbor. - // The solution will be first order when phi=1 and have - // zero dissipation when phi=0. - // phi = 0 highest-order solution - // phi = 1 first order solution - // - - double phi = 0.0; // the shock detector - double r_face = 1.0; // the ratio on the face - double r_min = 1.0; // the min ratio for the cell - double r_coef = 0.9; // 0.9; the coefficient on the ratio - // (1=minmod and 2=superbee) - double n_coef = 1.0; // the power on the limiting coefficient - // (1=nominal, and n_coeff > 1 oscillatory) - - // loop over the neighboring cells - for (size_t elem_lid = 0; elem_lid < mesh.num_elems_in_elem(elem_gid); elem_lid++) { - // Get global index for neighboring cell - size_t neighbor_gid = mesh.elems_in_elem(elem_gid, elem_lid); - - // calculate the velocity divergence in neighbor - double div_neighbor = GaussPoints_div(neighbor_gid); - - r_face = r_coef * (div_neighbor + small) / (div + small); - - // store the smallest face ratio - r_min = fmin(r_face, r_min); - } // end for elem_lid - - // calculate standard shock detector - phi = 1.0 - fmax(0.0, r_min); - phi = pow(phi, n_coef); - - // Mach number shock detector - double omega = 20.0; // 20.0; // weighting factor on Mach number - double third = 1.0 / 3.0; - double c_length = pow(vol, third); // characteristic length - double alpha = fmin(1.0, omega * (c_length * fabs(div)) / (MaterialPoints_sspd(mat_point_lid) + fuzz) ); - - // use Mach based detector with standard shock detector - - // turn off dissipation in expansion - // alpha = fmax(-fabs(div0)/div0 * alpha, 0.0); // this should be if(div0<0) alpha=alpha else alpha=0 - - phi = alpha * phi; - - // curl limiter on Q - double phi_curl = fmin(1.0, 1.0 * fabs(div) / (mag_curl + fuzz)); // disable Q when vorticity is high - // phi = phi_curl*phi; - - // ---- Calculate the Riemann force on each node ---- - - // loop over the each node in the elem - for (size_t node_lid = 0; node_lid < num_nodes_in_elem; node_lid++) { - - // the local corner id is the local node id - size_t corner_lid = node_lid; - - // Get corner gid - size_t corner_gid = mesh.corners_in_elem(elem_gid, corner_lid); - - // Get node gid - size_t node_gid = mesh.nodes_in_elem(elem_gid, node_lid); - - // Get the material corner lid - size_t mat_corner_lid = corners_in_mat_elem(mat_elem_lid, corner_lid); - //printf("corner difference = %zu \n", mat_corner_lid-corner_gid); - - // loop over dimensions and calc corner forces - if (MaterialPoints_eroded(mat_point_lid) == true) { // material(mat_id).blank_mat_id) - for (int dim = 0; dim < num_dims; dim++) { - corner_force(corner_gid, dim) = 0.0; - MaterialCorners_force(mat_corner_lid, dim) = 0.0; - } - } - - else{ - for (int dim = 0; dim < num_dims; dim++) { - - double force_component = - area_normal(node_lid, 0) * tau(0, dim) - + area_normal(node_lid, 1) * tau(1, dim) - + area_normal(node_lid, 2) * tau(2, dim) - + phi * muc(node_lid) * (vel_star(dim) - node_vel(1, node_gid, dim)); - - MaterialCorners_force(mat_corner_lid, dim) = force_component; - corner_force(corner_gid, dim) += force_component; // tally all forces to the corner - } // end loop over dimension - } // end if - - } // end for loop over nodes in elem - - // --- Update Stress --- - // calculate the new stress at the next rk level, if it is a increment_based model - // increment_based strength model - if (Materials.MaterialEnums(mat_id).StrengthType == model::incrementBased) { - // cut out the node_gids for this element - ViewCArrayKokkos elem_node_gids(&mesh.nodes_in_elem(elem_gid, 0), 8); - - // --- call strength model --- - Materials.MaterialFunctions(mat_id).calc_stress(MaterialPoints_pres, - MaterialPoints_stress, - mat_point_lid, - mat_id, - MaterialPoints_statev, - MaterialPoints_sspd, - MaterialPoints_den(mat_point_lid), - MaterialPoints_sie(1,mat_point_lid), - vel_grad, - elem_node_gids, - node_coords, - node_vel, - GaussPoints_vol(elem_gid), - dt, - rk_alpha); - } // end logical on increment_based strength model - }); // end parallel for loop over elements - - return; -} // end of routine - -///////////////////////////////////////////////////////////////////////////// -/// -/// \fn get_force_2D -/// -/// \brief This function calculates the corner forces and the evolves stress -/// -/// \param Material that contains material specific data -/// \param The simulation mesh -/// \param A view into the nodal position array -/// \param A view into the nodal velocity array -/// \param A view into the element density array -/// \param A view into the element specific internal energy array -/// \param A view into the element pressure array -/// \param A view into the element stress array -/// \param A view into the element sound speed array -/// \param A view into the element volume array -/// \param A view into the element divergence of velocity array -/// \param A view into the element material identifier array -/// \param fuzz (REMOVE) -/// \param small (REMOVE) -/// \param Element state variable array -/// \param Time step size -/// \param The current Runge Kutta integration alpha value -/// -///////////////////////////////////////////////////////////////////////////// -void SGH::get_force_2D(const Material_t& Materials, - const Mesh_t& mesh, - const DCArrayKokkos& GaussPoints_vol, - const DCArrayKokkos& GaussPoints_div, - const DCArrayKokkos& corner_force, - const DCArrayKokkos& node_coords, - const DCArrayKokkos& node_vel, - const DCArrayKokkos& MaterialPoints_den, - const DCArrayKokkos& MaterialPoints_sie, - const DCArrayKokkos& MaterialPoints_pres, - const DCArrayKokkos& MaterialPoints_stress, - const DCArrayKokkos& MaterialPoints_sspd, - const DCArrayKokkos& MaterialPoints_statev, - const DCArrayKokkos& MaterialCorners_force, - const corners_in_mat_t corners_in_mat_elem, - const DCArrayKokkos& MaterialToMeshMaps_elem, - const size_t num_mat_elems, - const size_t mat_id, - const double fuzz, - const double small, - const double dt, - const double rk_alpha) const -{ - const size_t num_dims = 2; - const size_t num_nodes_in_elem = 4; - - // set corner force to zero - FOR_ALL(corner_gid, 0, mesh.num_corners, { - for (int dim = 0; dim < num_dims; dim++) { - corner_force(corner_gid, dim) = 0.0; - } - }); // end parallel for corners - - - // --- calculate the forces acting on the nodes from the element --- - FOR_ALL(mat_elem_lid, 0, num_mat_elems, { - - // get mesh elem gid - size_t elem_gid = MaterialToMeshMaps_elem(mat_elem_lid); - - //size_t guass_gid = elem_gid; // 1 gauss point per element - - // the material point index = the material elem index for a 1-point element - size_t mat_point_lid = mat_elem_lid; - - // total Cauchy stress - double tau_array[9]; - - // corner area normals - double area_normal_array[8]; // 4 corners and 2 directions - - // estimate of shock direction - double shock_dir_array[2]; - - // the sums in the Riemann solver - double sum_array[4]; - - // corner shock impedance x |corner area normal dot shock_dir| - double muc_array[4]; - - // Riemann velocity - double vel_star_array[2]; - - // velocity gradient - double vel_grad_array[9]; - - // --- Create views of arrays to aid the force calculation --- - - ViewCArrayKokkos tau(tau_array, 3, 3); - ViewCArrayKokkos area_normal(area_normal_array, num_nodes_in_elem, num_dims); - ViewCArrayKokkos shock_dir(shock_dir_array, num_dims); - ViewCArrayKokkos sum(sum_array, 4); - ViewCArrayKokkos muc(muc_array, num_nodes_in_elem); - ViewCArrayKokkos vel_star(vel_star_array, num_dims); - ViewCArrayKokkos vel_grad(vel_grad_array, 3, 3); - - // create a view of the stress_matrix - ViewCArrayKokkos stress(&MaterialPoints_stress(1, mat_point_lid, 0, 0), 3, 3); - - // cut out the node_gids for this element - ViewCArrayKokkos elem_node_gids(&mesh.nodes_in_elem(elem_gid, 0), 4); - - // get the B matrix which are the OUTWARD corner area normals - geometry::get_bmatrix2D(area_normal, - elem_gid, - node_coords, - elem_node_gids); - // NOTE: I added a minus in bmatrix2D, it should be outward pointing now? - - // facial area of the element - double elem_area = geometry::get_area_quad(elem_gid, node_coords, elem_node_gids); - - // facial area of the corners - double corner_areas_array[4]; - ViewCArrayKokkos corner_areas(&corner_areas_array[0], 4); - - geometry::get_area_weights2D(corner_areas, elem_gid, node_coords, elem_node_gids); - - // --- Calculate the velocity gradient --- - get_velgrad2D(vel_grad, - elem_node_gids, - node_vel, - area_normal, - GaussPoints_vol(elem_gid), - elem_area, - elem_gid); - - // the -1 is for the inward surface area normal, - for (size_t node_lid = 0; node_lid < num_nodes_in_elem; node_lid++) { - for (size_t dim = 0; dim < num_dims; dim++) { - area_normal(node_lid, dim) = (-1.0) * area_normal(node_lid, dim); - } // end for - } // end for - - double div = GaussPoints_div(elem_gid); - - // vel = [u,v] - // [du/dx, du/dy] - // vel_grad = [dv/dx, dv/dy] - double curl; - curl = vel_grad(1, 0) - vel_grad(0, 1); // dv/dx - du/dy - - double mag_curl = curl; - - // --- Calculate the Cauchy stress --- - for (size_t i = 0; i < 3; i++) { - for (size_t j = 0; j < 3; j++) { - tau(i, j) = stress(i, j); - // artificial viscosity can be added here to tau - } // end for - } // end for - - // add the pressure - for (int i = 0; i < 3; i++) { - tau(i, i) -= MaterialPoints_pres(mat_point_lid); - } // end for - - // ---- Multidirectional Approximate Riemann solver (MARS) ---- - // find the average velocity of the elem, it is an - // estimate of the Riemann velocity - - // initialize to Riemann velocity to zero - for (size_t dim = 0; dim < num_dims; dim++) { - vel_star(dim) = 0.0; - } - - // loop over nodes and calculate an average velocity, which is - // an estimate of Riemann velocity - for (size_t node_lid = 0; node_lid < num_nodes_in_elem; node_lid++) { - // Get node global index and create view of nodal velocity - int node_gid = mesh.nodes_in_elem(elem_gid, node_lid); - - ViewCArrayKokkos vel(&node_vel(1, node_gid, 0), num_dims); - - vel_star(0) += 0.25 * vel(0); - vel_star(1) += 0.25 * vel(1); - } // end for loop over nodes - - // find shock direction and shock impedance associated with each node - - // initialize sum term in MARS to zero - for (int i = 0; i < 4; i++) { - sum(i) = 0.0; - } - - double mag; // magnitude of the area normal - double mag_vel; // magnitude of velocity - - // loop over the nodes of the elem - for (size_t node_lid = 0; node_lid < num_nodes_in_elem; node_lid++) { - // Get global node id - size_t node_gid = mesh.nodes_in_elem(elem_gid, node_lid); - - // Create view of nodal velocity - ViewCArrayKokkos vel(&node_vel(1, node_gid, 0), num_dims); - - // Get an estimate of the shock direction. - mag_vel = sqrt( (vel(0) - vel_star(0) ) * (vel(0) - vel_star(0) ) - + (vel(1) - vel_star(1) ) * (vel(1) - vel_star(1) ) ); - - if (mag_vel > small) { - // estimate of the shock direction, a unit normal - for (int dim = 0; dim < num_dims; dim++) { - shock_dir(dim) = (vel(dim) - vel_star(dim)) / mag_vel; - } - } - else{ - // if there is no velocity change, then use the surface area - // normal as the shock direction - mag = sqrt(area_normal(node_lid, 0) * area_normal(node_lid, 0) - + area_normal(node_lid, 1) * area_normal(node_lid, 1) ); - - // estimate of the shock direction - for (int dim = 0; dim < num_dims; dim++) { - shock_dir(dim) = area_normal(node_lid, dim) / mag; - } - } // end if mag_vel - - // cell divergence indicates compression or expansions - if (div < 0) { // element in compression - muc(node_lid) = MaterialPoints_den(mat_point_lid) * - (Materials.MaterialFunctions(mat_id).q1 * MaterialPoints_sspd(mat_point_lid) + - Materials.MaterialFunctions(mat_id).q2 * mag_vel); - } - else{ // element in expansion - muc(node_lid) = MaterialPoints_den(mat_point_lid) * - (Materials.MaterialFunctions(mat_id).q1ex * MaterialPoints_sspd(mat_point_lid) + - Materials.MaterialFunctions(mat_id).q2ex * mag_vel); - } // end if on divergence sign - - size_t use_shock_dir = 0; - double mu_term; - - // Coding to use shock direction - if (use_shock_dir == 1) { - // this is denominator of the Riemann solver and the multiplier - // on velocity in the numerator. It filters on the shock - // direction - mu_term = muc(node_lid) * - fabs(shock_dir(0) * area_normal(0) - + shock_dir(1) * area_normal(1) ); - } - else{ - // Using a full tensoral Riemann jump relation - mu_term = muc(node_lid) - * sqrt(area_normal(node_lid, 0) * area_normal(node_lid, 0) - + area_normal(node_lid, 1) * area_normal(node_lid, 1) ); - } - - sum(0) += mu_term * vel(0); - sum(1) += mu_term * vel(1); - sum(3) += mu_term; - - muc(node_lid) = mu_term; // the impedance time surface area is stored here - } // end for node_lid loop over nodes of the elem - - // The Riemann velocity, called vel_star - if (sum(3) > fuzz) { - for (size_t i = 0; i < num_dims; i++) { - vel_star(i) = sum(i) / sum(3); - } - } - else{ - for (int i = 0; i < num_dims; i++) { - vel_star(i) = 0.0; - } - } // end if - - // ---- Calculate the shock detector for the Riemann-solver ---- - // - // The dissipation from the Riemann problem is limited by phi - // phi = (1. - max( 0., min( 1. , r_face ) ))^n - // where - // r_face = (C* div(u_+)/div(u_z)) - // The plus denotes the cell center divergence of a neighbor. - // The solution will be first order when phi=1 and have - // zero dissipation when phi=0. - // phi = 0 highest-order solution - // phi = 1 first order solution - // - - double phi = 0.0; // the shock detector - double r_face = 1.0; // the ratio on the face - double r_min = 1.0; // the min ratio for the cell - double r_coef = 0.9; // 0.9; the coefficient on the ratio - // (1=minmod and 2=superbee) - double n_coef = 1.0; // the power on the limiting coefficient - // (1=nominal, and n_coeff > 1 oscillatory) - - // loop over the neighboring cells - for (size_t elem_lid = 0; elem_lid < mesh.num_elems_in_elem(elem_gid); elem_lid++) { - // Get global index for neighboring cell - size_t neighbor_gid = mesh.elems_in_elem(elem_gid, elem_lid); - - // calculate the velocity divergence in neighbor - double div_neighbor = GaussPoints_div(neighbor_gid); - - r_face = r_coef * (div_neighbor + small) / (div + small); - - // store the smallest face ratio - r_min = fmin(r_face, r_min); - } // end for elem_lid - - // calculate standard shock detector - phi = 1.0 - fmax(0.0, r_min); - phi = pow(phi, n_coef); - - // Mach number shock detector - double omega = 20.0; // 20.0; // weighting factor on Mach number - double c_length = sqrt(elem_area); // characteristic length - double alpha = fmin(1.0, omega * (c_length * fabs(div)) / (MaterialPoints_sspd(elem_gid) + fuzz) ); - - // use Mach based detector with standard shock detector - - // turn off dissipation in expansion - // alpha = fmax(-fabs(div0)/div0 * alpha, 0.0); // this should be if(div0<0) alpha=alpha else alpha=0 - - phi = alpha * phi; - - // curl limiter on Q - double phi_curl = fmin(1.0, 4.0 * fabs(div) / (mag_curl + fuzz)); // disable Q when vorticity is high - // phi = phi_curl*phi; - - // ---- Calculate the Riemann force on each node ---- - - // loop over the each node in the elem - for (size_t node_lid = 0; node_lid < num_nodes_in_elem; node_lid++) { - size_t corner_lid = node_lid; - - // Get corner gid - size_t corner_gid = mesh.corners_in_elem(elem_gid, corner_lid); - - // Get node gid - size_t node_gid = mesh.nodes_in_elem(elem_gid, node_lid); - - // loop over dimension - for (int dim = 0; dim < num_dims; dim++) { - corner_force(corner_gid, dim) = - area_normal(node_lid, 0) * tau(0, dim) - + area_normal(node_lid, 1) * tau(1, dim) - + phi * muc(node_lid) * (vel_star(dim) - node_vel(1, node_gid, dim)); - } // end loop over dimension - - // ---- add hoop stress terms ---- - - double node_radius = node_coords(1, node_gid, 1); - - // Wilkins used elem_area*0.25 for the corner area, we will use the corner - // areas calculated using Barlow's symmetry and energy preserving area partitioning - if (node_radius > 1e-14) { - // sigma_RZ / R_p - corner_force(corner_gid, 0) += tau(1, 0) * corner_areas(corner_lid) / node_radius; - - // (sigma_RR - sigma_theta) / R_p - corner_force(corner_gid, 1) += (tau(1, 1) - tau(2, 2)) * corner_areas(corner_lid) / node_radius; - } // end if radius >0 - } // end for loop over nodes in elem - - // --- Update Stress --- - // calculate the new stress at the next rk level, if it is a increment_based model - - - // increment_based elastic plastic model - if (Materials.MaterialEnums(mat_id).StrengthType == model::incrementBased) { - // cut out the node_gids for this element - ViewCArrayKokkos elem_node_gids(&mesh.nodes_in_elem(elem_gid, 0), 4); - - // --- call strength model --- - // Materials.MaterialFunctions(mat_id).strength_model(MaterialPoints_pres, - // MaterialPoints_stress, - // elem_gid, - // mat_id, - // MaterialPoints_statev, - // MaterialPoints_sspd, - // MaterialPoints_den(elem_gid), - // MaterialPoints_sie(1,elem_gid), - // vel_grad, - // elem_node_gids, - // node_coords, - // node_vel, - // GaussPoints_vol(elem_gid), - // dt, - // rk_alpha); - } // end logical on increment_based strength model - }); // end parallel for loop over elements - - return; -} // end of routine for 2D force and stress update diff --git a/single-node-refactor/src/Solvers/SGH_solver/CMakeLists.txt b/single-node-refactor/src/Solvers/SGH_solver_3D/CMakeLists.txt similarity index 92% rename from single-node-refactor/src/Solvers/SGH_solver/CMakeLists.txt rename to single-node-refactor/src/Solvers/SGH_solver_3D/CMakeLists.txt index 4eac2854b..c09cdd14c 100755 --- a/single-node-refactor/src/Solvers/SGH_solver/CMakeLists.txt +++ b/single-node-refactor/src/Solvers/SGH_solver_3D/CMakeLists.txt @@ -20,7 +20,7 @@ include_directories(src) message("\n ****** ADDING SGH SOURCE FILES ******** \n ") -set(SGH_SRC_Files +set(SGH_3D_SRC_Files ${CMAKE_CURRENT_SOURCE_DIR}/src/boundary.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/energy_sgh.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/force_sgh.cpp @@ -30,6 +30,6 @@ ${CMAKE_CURRENT_SOURCE_DIR}/src/properties.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/sgh_execute.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/time_integration.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/sgh_setup.cpp -${CMAKE_CURRENT_SOURCE_DIR}/include/sgh_solver.h +${CMAKE_CURRENT_SOURCE_DIR}/include/sgh_solver_3D.h PARENT_SCOPE ) \ No newline at end of file diff --git a/single-node-refactor/src/Solvers/SGH_solver/include/sgh_solver.h b/single-node-refactor/src/Solvers/SGH_solver_3D/include/sgh_solver_3D.h similarity index 81% rename from single-node-refactor/src/Solvers/SGH_solver/include/sgh_solver.h rename to single-node-refactor/src/Solvers/SGH_solver_3D/include/sgh_solver_3D.h index 94f21671c..c253479d2 100644 --- a/single-node-refactor/src/Solvers/SGH_solver/include/sgh_solver.h +++ b/single-node-refactor/src/Solvers/SGH_solver_3D/include/sgh_solver_3D.h @@ -32,8 +32,8 @@ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. **********************************************************************************************/ -#ifndef SGH_SOLVER_H -#define SGH_SOLVER_H +#ifndef SGH3D_SOLVER_H +#define SGH3D_SOLVER_H #include "solver.h" @@ -53,26 +53,26 @@ using namespace mtr; // matar namespace ///////////////////////////////////////////////////////////////////////////// /// -/// \class SGH +/// \class SGH3D /// -/// \brief Class for containing functions required to perform SGH +/// \brief Class for containing functions required to perform SGH on 3D Cartesian meshes /// /// This class contains the requisite functions requited to perform /// staggered grid hydrodynamics (SGH) which is equivalent to a lumped /// mass finite element (FE) scheme. /// ///////////////////////////////////////////////////////////////////////////// -class SGH : public Solver +class SGH3D : public Solver { public: - SGH() : Solver() + SGH3D() : Solver() { } - ~SGH() = default; + ~SGH3D() = default; - // Initialize data specific to the SGH solver + // Initialize data specific to the SGH3D solver void initialize(SimulationParameters_t& SimulationParamaters, Material_t& Materials, Mesh_t& mesh, @@ -207,30 +207,6 @@ class SGH : public Solver const double dt, const double rk_alpha) const; - void get_force_2D( - const Material_t& Materials, - const Mesh_t& mesh, - const DCArrayKokkos& GaussPoints_vol, - const DCArrayKokkos& GaussPoints_div, - const DCArrayKokkos& corner_force, - const DCArrayKokkos& node_coords, - const DCArrayKokkos& node_vel, - const DCArrayKokkos& MaterialPoints_den, - const DCArrayKokkos& MaterialPoints_sie, - const DCArrayKokkos& MaterialPoints_pres, - const DCArrayKokkos& MaterialPoints_stress, - const DCArrayKokkos& MaterialPoints_sspd, - const DCArrayKokkos& MaterialPoints_statev, - const DCArrayKokkos& MaterialCorners_force, - const corners_in_mat_t, - const DCArrayKokkos& MaterialToMeshMaps_elem, - const size_t num_mat_elems, - const size_t mat_id, - const double fuzz, - const double small, - const double dt, - const double rk_alpha) const; - // **** Functions defined in geometry.cpp **** // void update_position( double rk_alpha, @@ -258,16 +234,6 @@ class SGH : public Solver const double GaussPoints_vol, const size_t elem_gid) const; - KOKKOS_FUNCTION - void get_velgrad2D( - ViewCArrayKokkos& vel_grad, - const ViewCArrayKokkos& elem_node_gids, - const DCArrayKokkos& node_vel, - const ViewCArrayKokkos& b_matrix, - const double GaussPoints_vol, - const double elem_area, - const size_t elem_gid) const; - void get_divergence( DCArrayKokkos& GaussPoints_div, const Mesh_t mesh, @@ -275,13 +241,6 @@ class SGH : public Solver const DCArrayKokkos& node_vel, const DCArrayKokkos& GaussPoints_vol) const; - void get_divergence2D( - DCArrayKokkos& GaussPoints_div, - const Mesh_t mesh, - const DCArrayKokkos& node_coords, - const DCArrayKokkos& node_vel, - const DCArrayKokkos& GaussPoints_vol) const; - KOKKOS_FUNCTION void decompose_vel_grad( const ViewCArrayKokkos& D_tensor, @@ -309,26 +268,6 @@ class SGH : public Solver const size_t num_material_elems, const size_t mat_id) const; - void update_state2D( - const Material_t& Materials, - const Mesh_t& mesh, - const DCArrayKokkos& node_coords, - const DCArrayKokkos& node_vel, - const DCArrayKokkos& MaterialPoints_den, - const DCArrayKokkos& MaterialPoints_pres, - const DCArrayKokkos& MaterialPoints_stress, - const DCArrayKokkos& MaterialPoints_sspd, - const DCArrayKokkos& MaterialPoints_sie, - const DCArrayKokkos& GaussPoints_vol, - const DCArrayKokkos& MaterialPoints_mass, - const DCArrayKokkos& MaterialPoints_statev, - const DCArrayKokkos& GaussPoints_eroded, - const DCArrayKokkos& MaterialToMeshMaps_elem, - const double dt, - const double rk_alpha, - const size_t num_material_elems, - const size_t mat_id) const; - // **** Functions defined in time_integration.cpp **** // // NOTE: Consider pulling up void rk_init( @@ -359,24 +298,6 @@ class SGH : public Solver double& dt, const double fuzz) const; - void get_timestep2D( - Mesh_t& mesh, - DCArrayKokkos& node_coords, - DCArrayKokkos& node_vel, - DCArrayKokkos& GaussPoints_vol, - DCArrayKokkos& MaterialPoints_sspd, - DCArrayKokkos& MaterialPoints_eroded, - DCArrayKokkos& MaterialToMeshMaps_elem, - size_t num_mat_elems, - double time_value, - const double graphics_time, - const double time_final, - const double dt_max, - const double dt_min, - const double dt_cfl, - double& dt, - const double fuzz) const; - // **** Functions defined in user_mat.cpp **** // // NOTE: Pull up into high level KOKKOS_FUNCTION diff --git a/single-node-refactor/src/Solvers/SGH_solver/src/boundary.cpp b/single-node-refactor/src/Solvers/SGH_solver_3D/src/boundary.cpp similarity index 88% rename from single-node-refactor/src/Solvers/SGH_solver/src/boundary.cpp rename to single-node-refactor/src/Solvers/SGH_solver_3D/src/boundary.cpp index f77f2d0b4..6a465c673 100644 --- a/single-node-refactor/src/Solvers/SGH_solver/src/boundary.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver_3D/src/boundary.cpp @@ -32,7 +32,7 @@ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. **********************************************************************************************/ -#include "sgh_solver.h" +#include "sgh_solver_3D.h" #include "mesh.h" #include "boundary_conditions.h" @@ -49,10 +49,10 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /// \param The current simulation time /// ///////////////////////////////////////////////////////////////////////////// -void SGH::boundary_velocity(const Mesh_t& mesh, - const BoundaryCondition_t& BoundaryConditions, - DCArrayKokkos& node_vel, - const double time_value) const +void SGH3D::boundary_velocity(const Mesh_t& mesh, + const BoundaryCondition_t& BoundaryConditions, + DCArrayKokkos& node_vel, + const double time_value) const { // Loop over boundary sets @@ -95,10 +95,10 @@ void SGH::boundary_velocity(const Mesh_t& mesh, /// \param The current simulation time /// ///////////////////////////////////////////////////////////////////////////// -void SGH::boundary_contact(const Mesh_t& mesh, - const BoundaryCondition_t& BoundaryConditions, - DCArrayKokkos& node_vel, - const double time_value) const +void SGH3D::boundary_contact(const Mesh_t& mesh, + const BoundaryCondition_t& BoundaryConditions, + DCArrayKokkos& node_vel, + const double time_value) const { return; } // end boundary_contact function diff --git a/single-node-refactor/src/Solvers/SGH_solver/src/energy_sgh.cpp b/single-node-refactor/src/Solvers/SGH_solver_3D/src/energy_sgh.cpp similarity index 96% rename from single-node-refactor/src/Solvers/SGH_solver/src/energy_sgh.cpp rename to single-node-refactor/src/Solvers/SGH_solver_3D/src/energy_sgh.cpp index ee9d99901..fc78672d9 100644 --- a/single-node-refactor/src/Solvers/SGH_solver/src/energy_sgh.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver_3D/src/energy_sgh.cpp @@ -32,7 +32,7 @@ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. **********************************************************************************************/ -#include "sgh_solver.h" +#include "sgh_solver_3D.h" #include "mesh.h" #include "state.h" @@ -52,7 +52,7 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /// \param A view into the corner force data /// ///////////////////////////////////////////////////////////////////////////// -void SGH::update_energy(const double rk_alpha, +void SGH3D::update_energy(const double rk_alpha, const double dt, const Mesh_t& mesh, const DCArrayKokkos& node_vel, @@ -98,10 +98,6 @@ void SGH::update_energy(const double rk_alpha, double node_radius = 1; - if (mesh.num_dims == 2) { - node_radius = node_coords(1, node_gid, 1); - } - // calculate the Power=F dot V for this corner for (size_t dim = 0; dim < mesh.num_dims; dim++) { diff --git a/single-node-refactor/src/Solvers/SGH_solver_3D/src/force_sgh.cpp b/single-node-refactor/src/Solvers/SGH_solver_3D/src/force_sgh.cpp new file mode 100644 index 000000000..07a11e886 --- /dev/null +++ b/single-node-refactor/src/Solvers/SGH_solver_3D/src/force_sgh.cpp @@ -0,0 +1,437 @@ +/********************************************************************************************** +� 2020. Triad National Security, LLC. All rights reserved. +This program was produced under U.S. Government contract 89233218CNA000001 for Los Alamos +National Laboratory (LANL), which is operated by Triad National Security, LLC for the U.S. +Department of Energy/National Nuclear Security Administration. All rights in the program are +reserved by Triad National Security, LLC, and the U.S. Department of Energy/National Nuclear +Security Administration. The Government is granted for itself and others acting on its behalf a +nonexclusive, paid-up, irrevocable worldwide license in this material to reproduce, prepare +derivative works, distribute copies to the public, perform publicly and display publicly, and +to permit others to do so. +This program is open source under the BSD-3 License. +Redistribution and use in source and binary forms, with or without modification, are permitted +provided that the following conditions are met: +1. Redistributions of source code must retain the above copyright notice, this list of +conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, this list of +conditions and the following disclaimer in the documentation and/or other materials +provided with the distribution. +3. Neither the name of the copyright holder nor the names of its contributors may be used +to endorse or promote products derived from this software without specific prior +written permission. +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +**********************************************************************************************/ + +#include "sgh_solver_3D.h" +#include "material.h" +#include "mesh.h" +#include "state.h" +#include "geometry_new.h" + +///////////////////////////////////////////////////////////////////////////// +/// +/// \fn get_force +/// +/// \brief This function calculates the corner forces and the evolves stress +/// +/// \param Material that contains material specific data +/// \param The simulation mesh +/// \param A view into the nodal position array +/// \param A view into the nodal velocity array +/// \param A view into the element density array +/// \param A view into the element specific internal energy array +/// \param A view into the element pressure array +/// \param A view into the element stress array +/// \param A view into the element sound speed array +/// \param A view into the element volume array +/// \param A view into the element divergence of velocity array +/// \param A view into the element material identifier array +/// \param fuzz +/// \param small +/// \param Element state variable array +/// \param Time step size +/// \param The current Runge Kutta integration alpha value +/// +///////////////////////////////////////////////////////////////////////////// +void SGH3D::get_force(const Material_t& Materials, + const Mesh_t& mesh, + const DCArrayKokkos& GaussPoints_vol, + const DCArrayKokkos& GaussPoints_div, + const DCArrayKokkos& MaterialPoints_eroded, + const DCArrayKokkos& corner_force, + const DCArrayKokkos& node_coords, + const DCArrayKokkos& node_vel, + const DCArrayKokkos& MaterialPoints_den, + const DCArrayKokkos& MaterialPoints_sie, + const DCArrayKokkos& MaterialPoints_pres, + const DCArrayKokkos& MaterialPoints_stress, + const DCArrayKokkos& MaterialPoints_sspd, + const DCArrayKokkos& MaterialPoints_statev, + const DCArrayKokkos& MaterialCorners_force, + const corners_in_mat_t corners_in_mat_elem, + const DCArrayKokkos& MaterialToMeshMaps_elem, + const size_t num_mat_elems, + const size_t mat_id, + const double fuzz, + const double small, + const double dt, + const double rk_alpha) const +{ + const size_t num_dims = 3; + const size_t num_nodes_in_elem = 8; + + + + // --- calculate the forces acting on the nodes from the element --- + FOR_ALL(mat_elem_lid, 0, num_mat_elems, { + + // get elem gid + size_t elem_gid = MaterialToMeshMaps_elem(mat_elem_lid); + + // the material point index = the material elem index for a 1-point element + size_t mat_point_lid = mat_elem_lid; + + + // total Cauchy stress + double tau_array[9]; + + // corner area normals + double area_normal_array[24]; + + // estimate of shock direction + double shock_dir_array[3]; + + // the sums in the Riemann solver + double sum_array[4]; + + // corner shock impedance x |corner area normal dot shock_dir| + double muc_array[8]; + + // Riemann velocity + double vel_star_array[3]; + + // velocity gradient + double vel_grad_array[9]; + + // --- Create views of arrays to aid the force calculation --- + + ViewCArrayKokkos tau(tau_array, num_dims, num_dims); + ViewCArrayKokkos area_normal(area_normal_array, num_nodes_in_elem, num_dims); + ViewCArrayKokkos shock_dir(shock_dir_array, num_dims); + ViewCArrayKokkos sum(sum_array, 4); + ViewCArrayKokkos muc(muc_array, num_nodes_in_elem); + ViewCArrayKokkos vel_star(vel_star_array, num_dims); + ViewCArrayKokkos vel_grad(vel_grad_array, num_dims, num_dims); + + // element volume + double vol = GaussPoints_vol(elem_gid); + + + // create a view of the stress_matrix + ViewCArrayKokkos stress(&MaterialPoints_stress(1, mat_point_lid, 0, 0), 3, 3); + + // cut out the node_gids for this element + ViewCArrayKokkos elem_node_gids(&mesh.nodes_in_elem(elem_gid, 0), 8); + + // get the B matrix which are the OUTWARD corner area normals + geometry::get_bmatrix(area_normal, + elem_gid, + node_coords, + elem_node_gids); + + // --- Calculate the velocity gradient --- + SGH3D::get_velgrad(vel_grad, + elem_node_gids, + node_vel, + area_normal, + vol, + elem_gid); + + // the -1 is for the inward surface area normal, + for (size_t node_lid = 0; node_lid < num_nodes_in_elem; node_lid++) { + for (size_t dim = 0; dim < num_dims; dim++) { + area_normal(node_lid, dim) = (-1.0) * area_normal(node_lid, dim); + } // end for + } // end for + + double div = GaussPoints_div(elem_gid); + + // vel = [u,v,w] + // [du/dx, du/dy, du/dz] + // vel_grad = [dv/dx, dv/dy, dv/dz] + // [dw/dx, dw/dy, dw/dz] + double curl[3]; + curl[0] = vel_grad(2, 1) - vel_grad(1, 2); // dw/dy - dv/dz + curl[1] = vel_grad(0, 2) - vel_grad(2, 0); // du/dz - dw/dx + curl[2] = vel_grad(1, 0) - vel_grad(0, 1); // dv/dx - du/dy + + double mag_curl = sqrt(curl[0] * curl[0] + curl[1] * curl[1] + curl[2] * curl[2]); + + // --- Calculate the Cauchy stress --- + for (size_t i = 0; i < 3; i++) { + for (size_t j = 0; j < 3; j++) { + tau(i, j) = stress(i, j); + // artificial viscosity can be added here to tau + } // end for + } // end for + + // add the pressure if a decoupled model is used + if (Materials.MaterialEnums(mat_id).EOSType == model::decoupledEOSType) { + for (int i = 0; i < num_dims; i++) { + tau(i, i) -= MaterialPoints_pres(mat_point_lid); + } // end for + } + + // ---- Multi-directional Approximate Riemann solver (MARS) ---- + // find the average velocity of the elem, it is an + // estimate of the Riemann velocity + + // initialize to Riemann velocity to zero + for (size_t dim = 0; dim < num_dims; dim++) { + vel_star(dim) = 0.0; + } + + // loop over nodes and calculate an average velocity, which is + // an estimate of Riemann velocity + for (size_t node_lid = 0; node_lid < num_nodes_in_elem; node_lid++) { + // Get node global index and create view of nodal velocity + int node_gid = mesh.nodes_in_elem(elem_gid, node_lid); + + ViewCArrayKokkos vel(&node_vel(1, node_gid, 0), num_dims); + + vel_star(0) += 0.125 * vel(0); + vel_star(1) += 0.125 * vel(1); + vel_star(2) += 0.125 * vel(2); + } // end for loop over nodes + + // find shock direction and shock impedance associated with each node + + // initialize sum term in MARS to zero + for (int i = 0; i < 4; i++) { + sum(i) = 0.0; + } + + double mag; // magnitude of the area normal + double mag_vel; // magnitude of velocity + + // loop over the nodes of the elem + for (size_t node_lid = 0; node_lid < num_nodes_in_elem; node_lid++) { + // Get global node id + size_t node_gid = mesh.nodes_in_elem(elem_gid, node_lid); + + // Create view of nodal velocity + ViewCArrayKokkos vel(&node_vel(1, node_gid, 0), num_dims); + + // Get an estimate of the shock direction. + mag_vel = sqrt( (vel(0) - vel_star(0) ) * (vel(0) - vel_star(0) ) + + (vel(1) - vel_star(1) ) * (vel(1) - vel_star(1) ) + + (vel(2) - vel_star(2) ) * (vel(2) - vel_star(2) ) ); + + if (mag_vel > small) { + // estimate of the shock direction, a unit normal + for (int dim = 0; dim < num_dims; dim++) { + shock_dir(dim) = (vel(dim) - vel_star(dim)) / mag_vel; + } + } + else{ + // if there is no velocity change, then use the surface area + // normal as the shock direction + mag = sqrt(area_normal(node_lid, 0) * area_normal(node_lid, 0) + + area_normal(node_lid, 1) * area_normal(node_lid, 1) + + area_normal(node_lid, 2) * area_normal(node_lid, 2) ); + + // estimate of the shock direction + for (int dim = 0; dim < num_dims; dim++) { + shock_dir(dim) = area_normal(node_lid, dim) / mag; + } + } // end if mag_vel + + // cell divergence indicates compression or expansions + if (div < 0) { // element in compression + muc(node_lid) = MaterialPoints_den(mat_point_lid) * + (Materials.MaterialFunctions(mat_id).q1 * MaterialPoints_sspd(mat_point_lid) + + Materials.MaterialFunctions(mat_id).q2 * mag_vel); + } + else{ // element in expansion + muc(node_lid) = MaterialPoints_den(mat_point_lid) * + (Materials.MaterialFunctions(mat_id).q1ex * MaterialPoints_sspd(mat_point_lid) + + Materials.MaterialFunctions(mat_id).q2ex * mag_vel); + } // end if on divergence sign + + size_t use_shock_dir = 0; + double mu_term; + + // Coding to use shock direction + if (use_shock_dir == 1) { + // this is denominator of the Riemann solver and the multiplier + // on velocity in the numerator. It filters on the shock + // direction + mu_term = muc(node_lid) * + fabs(shock_dir(0) * area_normal(node_lid, 0) + + shock_dir(1) * area_normal(node_lid, 1) + + shock_dir(2) * area_normal(node_lid, 2) ); + } + else{ + // Using a full tensoral Riemann jump relation + mu_term = muc(node_lid) + * sqrt(area_normal(node_lid, 0) * area_normal(node_lid, 0) + + area_normal(node_lid, 1) * area_normal(node_lid, 1) + + area_normal(node_lid, 2) * area_normal(node_lid, 2) ); + } + + sum(0) += mu_term * vel(0); + sum(1) += mu_term * vel(1); + sum(2) += mu_term * vel(2); + sum(3) += mu_term; + + muc(node_lid) = mu_term; // the impedance time surface area is stored here + } // end for node_lid loop over nodes of the elem + + // The Riemann velocity, called vel_star + if (sum(3) > fuzz) { + for (size_t i = 0; i < num_dims; i++) { + vel_star(i) = sum(i) / sum(3); + } + } + else{ + for (int i = 0; i < num_dims; i++) { + vel_star(i) = 0.0; + } + } // end if + + // ---- Calculate the shock detector for the Riemann-solver ---- + // + // The dissipation from the Riemann problem is limited by phi + // phi = (1. - max( 0., min( 1. , r_face ) ))^n + // where + // r_face = (C* div(u_+)/div(u_z)) + // The plus denotes the cell center divergence of a neighbor. + // The solution will be first order when phi=1 and have + // zero dissipation when phi=0. + // phi = 0 highest-order solution + // phi = 1 first order solution + // + + double phi = 0.0; // the shock detector + double r_face = 1.0; // the ratio on the face + double r_min = 1.0; // the min ratio for the cell + double r_coef = 0.9; // 0.9; the coefficient on the ratio + // (1=minmod and 2=superbee) + double n_coef = 1.0; // the power on the limiting coefficient + // (1=nominal, and n_coeff > 1 oscillatory) + + // loop over the neighboring cells + for (size_t elem_lid = 0; elem_lid < mesh.num_elems_in_elem(elem_gid); elem_lid++) { + // Get global index for neighboring cell + size_t neighbor_gid = mesh.elems_in_elem(elem_gid, elem_lid); + + // calculate the velocity divergence in neighbor + double div_neighbor = GaussPoints_div(neighbor_gid); + + r_face = r_coef * (div_neighbor + small) / (div + small); + + // store the smallest face ratio + r_min = fmin(r_face, r_min); + } // end for elem_lid + + // calculate standard shock detector + phi = 1.0 - fmax(0.0, r_min); + phi = pow(phi, n_coef); + + // Mach number shock detector + double omega = 20.0; // 20.0; // weighting factor on Mach number + double third = 1.0 / 3.0; + double c_length = pow(vol, third); // characteristic length + double alpha = fmin(1.0, omega * (c_length * fabs(div)) / (MaterialPoints_sspd(mat_point_lid) + fuzz) ); + + // use Mach based detector with standard shock detector + + // turn off dissipation in expansion + // alpha = fmax(-fabs(div0)/div0 * alpha, 0.0); // this should be if(div0<0) alpha=alpha else alpha=0 + + phi = alpha * phi; + + // curl limiter on Q + double phi_curl = fmin(1.0, 1.0 * fabs(div) / (mag_curl + fuzz)); // disable Q when vorticity is high + // phi = phi_curl*phi; + + // ---- Calculate the Riemann force on each node ---- + + // loop over the each node in the elem + for (size_t node_lid = 0; node_lid < num_nodes_in_elem; node_lid++) { + + // the local corner id is the local node id + size_t corner_lid = node_lid; + + // Get corner gid + size_t corner_gid = mesh.corners_in_elem(elem_gid, corner_lid); + + // Get node gid + size_t node_gid = mesh.nodes_in_elem(elem_gid, node_lid); + + // Get the material corner lid + size_t mat_corner_lid = corners_in_mat_elem(mat_elem_lid, corner_lid); + //printf("corner difference = %zu \n", mat_corner_lid-corner_gid); + + // loop over dimensions and calc corner forces + if (MaterialPoints_eroded(mat_point_lid) == true) { // material(mat_id).blank_mat_id) + for (int dim = 0; dim < num_dims; dim++) { + corner_force(corner_gid, dim) = 0.0; + MaterialCorners_force(mat_corner_lid, dim) = 0.0; + } + } + + else{ + for (int dim = 0; dim < num_dims; dim++) { + + double force_component = + area_normal(node_lid, 0) * tau(0, dim) + + area_normal(node_lid, 1) * tau(1, dim) + + area_normal(node_lid, 2) * tau(2, dim) + + phi * muc(node_lid) * (vel_star(dim) - node_vel(1, node_gid, dim)); + + MaterialCorners_force(mat_corner_lid, dim) = force_component; + corner_force(corner_gid, dim) += force_component; // tally all forces to the corner + } // end loop over dimension + } // end if + + } // end for loop over nodes in elem + + // --- Update Stress --- + // calculate the new stress at the next rk level, if it is a increment_based model + // increment_based strength model + if (Materials.MaterialEnums(mat_id).StrengthType == model::incrementBased) { + // cut out the node_gids for this element + ViewCArrayKokkos elem_node_gids(&mesh.nodes_in_elem(elem_gid, 0), 8); + + // --- call strength model --- + Materials.MaterialFunctions(mat_id).calc_stress(MaterialPoints_pres, + MaterialPoints_stress, + mat_point_lid, + mat_id, + MaterialPoints_statev, + MaterialPoints_sspd, + MaterialPoints_den(mat_point_lid), + MaterialPoints_sie(1,mat_point_lid), + vel_grad, + elem_node_gids, + node_coords, + node_vel, + GaussPoints_vol(elem_gid), + dt, + rk_alpha); + } // end logical on increment_based strength model + }); // end parallel for loop over elements + + return; +} // end of routine diff --git a/single-node-refactor/src/Solvers/SGH_solver/src/momentum.cpp b/single-node-refactor/src/Solvers/SGH_solver_3D/src/momentum.cpp similarity index 67% rename from single-node-refactor/src/Solvers/SGH_solver/src/momentum.cpp rename to single-node-refactor/src/Solvers/SGH_solver_3D/src/momentum.cpp index e5acc4501..7047e7957 100644 --- a/single-node-refactor/src/Solvers/SGH_solver/src/momentum.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver_3D/src/momentum.cpp @@ -32,7 +32,7 @@ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. **********************************************************************************************/ -#include "sgh_solver.h" +#include "sgh_solver_3D.h" #include "mesh.h" #include "geometry_new.h" @@ -49,7 +49,7 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /// \param View of the corner forces /// ///////////////////////////////////////////////////////////////////////////// -void SGH::update_velocity(double rk_alpha, +void SGH3D::update_velocity(double rk_alpha, double dt, const Mesh_t& mesh, DCArrayKokkos& node_vel, @@ -101,7 +101,7 @@ void SGH::update_velocity(double rk_alpha, /// ///////////////////////////////////////////////////////////////////////////// KOKKOS_FUNCTION -void SGH::get_velgrad(ViewCArrayKokkos& vel_grad, +void SGH3D::get_velgrad(ViewCArrayKokkos& vel_grad, const ViewCArrayKokkos& elem_node_gids, const DCArrayKokkos& node_vel, const ViewCArrayKokkos& b_matrix, @@ -180,77 +180,6 @@ void SGH::get_velgrad(ViewCArrayKokkos& vel_grad, return; } // end function -///////////////////////////////////////////////////////////////////////////// -/// -/// \fn get_velgrad2D -/// -/// \brief This function calculates the velocity gradient for a 2D element -/// -/// \param Velocity gradient -/// \param Global ids of the nodes in this element -/// \param View of the nodal velocity data -/// \param The finite element B matrix -/// \param The volume of the particular element -/// \param The elements surface area -/// \param The global id of this particular element -/// -///////////////////////////////////////////////////////////////////////////// -KOKKOS_FUNCTION -void SGH::get_velgrad2D(ViewCArrayKokkos& vel_grad, - const ViewCArrayKokkos& elem_node_gids, - const DCArrayKokkos& node_vel, - const ViewCArrayKokkos& b_matrix, - const double elem_vol, - const double elem_area, - const size_t elem_gid) const -{ - const size_t num_nodes_in_elem = 4; - - double u_array[num_nodes_in_elem]; - double v_array[num_nodes_in_elem]; - ViewCArrayKokkos u(u_array, num_nodes_in_elem); // x-dir vel component - ViewCArrayKokkos v(v_array, num_nodes_in_elem); // y-dir vel component - - // get the vertex velocities for the cell - for (size_t node_lid = 0; node_lid < num_nodes_in_elem; node_lid++) { - // Get node gid - size_t node_gid = elem_node_gids(node_lid); - - u(node_lid) = node_vel(1, node_gid, 0); // x-comp - v(node_lid) = node_vel(1, node_gid, 1); // y-comp - } // end for - - // initialize to zero - for (size_t i = 0; i < 3; i++) { - for (size_t j = 0; j < 3; j++) { - vel_grad(i, j) = 0.0; - } - } - - double mean_radius = elem_vol / elem_area; - double elem_vel_r = 0.25 * (v(0) + v(1) + v(2) + v(3)); - - // --- calculate the velocity gradient terms --- - double inverse_area = 1.0 / elem_area; - - // x-dir - vel_grad(0, 0) = (u(0) * b_matrix(0, 0) + u(1) * b_matrix(1, 0) - + u(2) * b_matrix(2, 0) + u(3) * b_matrix(3, 0)) * inverse_area; - - vel_grad(0, 1) = (u(0) * b_matrix(0, 1) + u(1) * b_matrix(1, 1) - + u(2) * b_matrix(2, 1) + u(3) * b_matrix(3, 1)) * inverse_area; - - // y-dir - vel_grad(1, 0) = (v(0) * b_matrix(0, 0) + v(1) * b_matrix(1, 0) - + v(2) * b_matrix(2, 0) + v(3) * b_matrix(3, 0)) * inverse_area; - - vel_grad(1, 1) = (v(0) * b_matrix(0, 1) + v(1) * b_matrix(1, 1) - + v(2) * b_matrix(2, 1) + v(3) * b_matrix(3, 1)) * inverse_area; - - vel_grad(2, 2) = elem_vel_r / mean_radius; // + avg(vel_R)/R - - return; -} // end function ///////////////////////////////////////////////////////////////////////////// /// @@ -265,7 +194,7 @@ void SGH::get_velgrad2D(ViewCArrayKokkos& vel_grad, /// \param View of the volumes of each element /// ///////////////////////////////////////////////////////////////////////////// -void SGH::get_divergence(DCArrayKokkos& elem_div, +void SGH3D::get_divergence(DCArrayKokkos& elem_div, const Mesh_t mesh, const DCArrayKokkos& node_coords, const DCArrayKokkos& node_vel, @@ -328,86 +257,6 @@ void SGH::get_divergence(DCArrayKokkos& elem_div, return; } // end subroutine -///////////////////////////////////////////////////////////////////////////// -/// -/// \fn get_divergence2D -/// -/// \brief This function calculates the divergence of velocity for all 2D elements -/// -/// \param Divergence of velocity for all elements -/// \param Simulation mesh (POSSIBLY REMOVE) -/// \param View of the nodal position data -/// \param View of the nodal velocity data -/// \param View of the volumes of each element -/// -///////////////////////////////////////////////////////////////////////////// -void SGH::get_divergence2D(DCArrayKokkos& elem_div, - const Mesh_t mesh, - const DCArrayKokkos& node_coords, - const DCArrayKokkos& node_vel, - const DCArrayKokkos& elem_vol) const -{ - // --- calculate the forces acting on the nodes from the element --- - FOR_ALL(elem_gid, 0, mesh.num_elems, { - const size_t num_nodes_in_elem = 4; - const size_t num_dims = 2; - - double u_array[num_nodes_in_elem]; - double v_array[num_nodes_in_elem]; - ViewCArrayKokkos u(u_array, num_nodes_in_elem); // x-dir vel component - ViewCArrayKokkos v(v_array, num_nodes_in_elem); // y-dir vel component - - // true volume RZ - // double r_array[num_nodes_in_elem]; - // ViewCArrayKokkos r(r_array, num_nodes_in_elem); // r-dir coordinate - - // cut out the node_gids for this element - ViewCArrayKokkos elem_node_gids(&mesh.nodes_in_elem(elem_gid, 0), 4); - - // The b_matrix are the outward corner area normals - double b_matrix_array[24]; - ViewCArrayKokkos b_matrix(b_matrix_array, num_nodes_in_elem, num_dims); - geometry::get_bmatrix2D(b_matrix, elem_gid, node_coords, elem_node_gids); - - // calculate the area of the quad - double elem_area = geometry::get_area_quad(elem_gid, node_coords, elem_node_gids); - // true volume uses the elem_vol - - // get the vertex velocities and node coordinate for the elem - for (size_t node_lid = 0; node_lid < num_nodes_in_elem; node_lid++) { - // Get node gid - size_t node_gid = elem_node_gids(node_lid); - - u(node_lid) = node_vel(1, node_gid, 0); - v(node_lid) = node_vel(1, node_gid, 1); - - // r(node_lid) = node_coords(1, node_gid, 1); // true volume RZ - } // end for - - // --- calculate the velocity divergence terms --- - double inverse_area = 1.0 / elem_area; - - double mean_radius = elem_vol(elem_gid) / elem_area; - double elem_vel_r = 0.25 * (v(0) + v(1) + v(2) + v(3)); - - elem_div(elem_gid) = 0.0; - - // x-dir - elem_div(elem_gid) += (u(0) * b_matrix(0, 0) - + u(1) * b_matrix(1, 0) - + u(2) * b_matrix(2, 0) - + u(3) * b_matrix(3, 0)) * inverse_area; - - // y-dir (i.e., r direction) - elem_div(elem_gid) += (v(0) * b_matrix(0, 1) - + v(1) * b_matrix(1, 1) - + v(2) * b_matrix(2, 1) - + v(3) * b_matrix(3, 1)) * inverse_area - + elem_vel_r / mean_radius; // + avg(u_R)/R - }); // end parallel for over elem_gid - - return; -} // end subroutine ///////////////////////////////////////////////////////////////////////////// /// @@ -429,9 +278,9 @@ void SGH::get_divergence2D(DCArrayKokkos& elem_div, /// ///////////////////////////////////////////////////////////////////////////// KOKKOS_FUNCTION -void SGH::decompose_vel_grad(const ViewCArrayKokkos& D_tensor, - const ViewCArrayKokkos& W_tensor, - const ViewCArrayKokkos& vel_grad) const +void SGH3D::decompose_vel_grad(const ViewCArrayKokkos& D_tensor, + const ViewCArrayKokkos& W_tensor, + const ViewCArrayKokkos& vel_grad) const { // --- Calculate the velocity gradient --- diff --git a/single-node-refactor/src/Solvers/SGH_solver/src/position.cpp b/single-node-refactor/src/Solvers/SGH_solver_3D/src/position.cpp similarity index 97% rename from single-node-refactor/src/Solvers/SGH_solver/src/position.cpp rename to single-node-refactor/src/Solvers/SGH_solver_3D/src/position.cpp index 2dd0d59f9..c2411b929 100644 --- a/single-node-refactor/src/Solvers/SGH_solver/src/position.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver_3D/src/position.cpp @@ -31,7 +31,7 @@ WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. **********************************************************************************************/ -#include "sgh_solver.h" +#include "sgh_solver_3D.h" ///////////////////////////////////////////////////////////////////////////// /// @@ -47,7 +47,7 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /// \param View of nodal velocity data /// ///////////////////////////////////////////////////////////////////////////// -void SGH::update_position(double rk_alpha, +void SGH3D::update_position(double rk_alpha, double dt, const size_t num_dims, const size_t num_nodes, diff --git a/single-node-refactor/src/Solvers/SGH_solver/src/properties.cpp b/single-node-refactor/src/Solvers/SGH_solver_3D/src/properties.cpp similarity index 54% rename from single-node-refactor/src/Solvers/SGH_solver/src/properties.cpp rename to single-node-refactor/src/Solvers/SGH_solver_3D/src/properties.cpp index 5220cdd4e..a70375491 100644 --- a/single-node-refactor/src/Solvers/SGH_solver/src/properties.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver_3D/src/properties.cpp @@ -32,7 +32,7 @@ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. **********************************************************************************************/ -#include "sgh_solver.h" +#include "sgh_solver_3D.h" #include "material.h" #include "mesh.h" #include "geometry_new.h" @@ -60,7 +60,7 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /// \param The current Runge Kutta integration alpha value /// ///////////////////////////////////////////////////////////////////////////// -void SGH::update_state( +void SGH3D::update_state( const Material_t& Materials, const Mesh_t& mesh, const DCArrayKokkos& node_coords, @@ -284,237 +284,3 @@ void SGH::update_state( return; } // end method to update state - -///////////////////////////////////////////////////////////////////////////// -/// -/// \fn update_state2D -/// -/// \brief Updates the state for 2D elements -/// -/// \param An array of material_t that contains material specific data -/// \param The simulation mesh -/// \param A view into the nodal position array -/// \param A view into the nodal velocity array -/// \param A view into the element density array -/// \param A view into the element pressure array -/// \param A view into the element stress array -/// \param A view into the element sound speed array -/// \param A view into the element specific internal energy array -/// \param A view into the element volume array -/// \param A view into the element mass -/// \param A view into the element material identifier array -/// \param A view into the element state variables -/// \param Time step size -/// \param The current Runge Kutta integration alpha value -/// -///////////////////////////////////////////////////////////////////////////// -void SGH::update_state2D( - const Material_t& Materials, - const Mesh_t& mesh, - const DCArrayKokkos& node_coords, - const DCArrayKokkos& node_vel, - const DCArrayKokkos& MaterialPoints_den, - const DCArrayKokkos& MaterialPoints_pres, - const DCArrayKokkos& MaterialPoints_stress, - const DCArrayKokkos& MaterialPoints_sspd, - const DCArrayKokkos& MaterialPoints_sie, - const DCArrayKokkos& GaussPoints_vol, - const DCArrayKokkos& MaterialPoints_mass, - const DCArrayKokkos& MaterialPoints_statev, - const DCArrayKokkos& MaterialPoints_eroded, - const DCArrayKokkos& MaterialToMeshMaps_elem, - const double dt, - const double rk_alpha, - const size_t num_material_elems, - const size_t mat_id) const -{ - - const size_t num_dims = mesh.num_dims; - - // --- Density --- - // loop over all the elements the material lives in - FOR_ALL(mat_elem_lid, 0, num_material_elems, { - - // get elem gid - size_t elem_gid = MaterialToMeshMaps_elem(mat_elem_lid); - - - // get the material points for this material - // Note, with the SGH method, they are equal - size_t mat_point_lid = mat_elem_lid; - - // for this method, gauss point is equal to elem_gid - size_t gauss_gid = elem_gid; - - - // --- Density --- - MaterialPoints_den(mat_point_lid) = MaterialPoints_mass(mat_point_lid) / GaussPoints_vol(gauss_gid); - - }); // end parallel for over mat elem lid - Kokkos::fence(); - - - // --- pressure --- - if (Materials.MaterialEnums(mat_id).EOSType == model::decoupledEOSType) { - - // loop over all the elements the material lives in - FOR_ALL(mat_elem_lid, 0, num_material_elems, { - - // get elem gid - size_t elem_gid = MaterialToMeshMaps_elem(mat_elem_lid); - - - // get the material points for this material - // Note, with the SGH method, they are equal - size_t mat_point_lid = mat_elem_lid; - - // for this method, gauss point is equal to elem_gid - size_t gauss_gid = elem_gid; - - // --- Pressure --- - Materials.MaterialFunctions(mat_id).calc_pressure( - MaterialPoints_pres, - MaterialPoints_stress, - mat_point_lid, - mat_id, - MaterialPoints_statev, - MaterialPoints_sspd, - MaterialPoints_den(mat_point_lid), - MaterialPoints_sie(0, mat_point_lid), - Materials.eos_global_vars); - // --- Sound Speed --- - Materials.MaterialFunctions(mat_id).calc_sound_speed( - MaterialPoints_pres, - MaterialPoints_stress, - mat_point_lid, - mat_id, - MaterialPoints_statev, - MaterialPoints_sspd, - MaterialPoints_den(mat_point_lid), - MaterialPoints_sie(0, mat_point_lid), - Materials.eos_global_vars); - - }); // end parallel for over mat elem lid - - } // if decoupled EOS - - - // --- Stress --- - - // state_based elastic plastic model - if (Materials.MaterialEnums.host(mat_id).StrengthType == model::stateBased) { - - const size_t num_nodes_in_elem = mesh.num_nodes_in_elem; - - // loop over all the elements the material lives in - FOR_ALL(mat_elem_lid, 0, num_material_elems, { - - // get elem gid - size_t elem_gid = MaterialToMeshMaps_elem(mat_elem_lid); - - - // get the material points for this material - // Note, with the SGH method, they are equal - size_t mat_point_lid = mat_elem_lid; - - // for this method, gauss point is equal to elem_gid - size_t gauss_gid = elem_gid; - - - // cut out the node_gids for this element - ViewCArrayKokkos elem_node_gids(&mesh.nodes_in_elem(elem_gid, 0), num_nodes_in_elem); - - - // --- Density --- - MaterialPoints_den(mat_point_lid) = MaterialPoints_mass(mat_point_lid) / GaussPoints_vol(gauss_gid); - - - // corner area normals - double area_array[24]; - ViewCArrayKokkos area(area_array, num_nodes_in_elem, num_dims); - - // velocity gradient - double vel_grad_array[9]; - ViewCArrayKokkos vel_grad(vel_grad_array, num_dims, num_dims); - - // get the B matrix which are the OUTWARD corner area normals - geometry::get_bmatrix(area, elem_gid, node_coords, elem_node_gids); - - // --- Calculate the velocity gradient --- - get_velgrad(vel_grad, - elem_node_gids, - node_vel, - area, - GaussPoints_vol(elem_gid), - elem_gid); - - // --- call strength model --- - Materials.MaterialFunctions(mat_id).calc_stress( - MaterialPoints_pres, - MaterialPoints_stress, - mat_point_lid, - mat_id, - MaterialPoints_statev, - MaterialPoints_sspd, - MaterialPoints_den(mat_point_lid), - MaterialPoints_sie(1,mat_point_lid), - vel_grad, - elem_node_gids, - node_coords, - node_vel, - GaussPoints_vol(gauss_gid), - dt, - rk_alpha); - - - }); // end parallel for over mat elem lid - - } // end if state_based strength model - - - // --- mat point erosion --- - if (Materials.MaterialEnums.host(mat_id).ErosionModels != model::noErosion) { - - // loop over all the elements the material lives in - FOR_ALL(mat_elem_lid, 0, num_material_elems, { - - // get elem gid - size_t elem_gid = MaterialToMeshMaps_elem(mat_elem_lid); - - - // get the material points for this material - // Note, with the SGH method, they are equal - size_t mat_point_lid = mat_elem_lid; - - // for this method, gauss point is equal to elem_gid - size_t gauss_gid = elem_gid; - - // --- Element erosion model --- - Materials.MaterialFunctions(mat_id).erode( - MaterialPoints_eroded, - MaterialPoints_stress, - MaterialPoints_pres(mat_point_lid), - MaterialPoints_den(mat_point_lid), - MaterialPoints_sie(1, mat_point_lid), - MaterialPoints_sspd(mat_point_lid), - Materials.MaterialFunctions(mat_id).erode_tension_val, - Materials.MaterialFunctions(mat_id).erode_density_val, - mat_point_lid); - - // apply a void eos if mat_point is eroded - double phi_fail = 1.0 - (double)MaterialPoints_eroded(mat_point_lid); - MaterialPoints_pres(mat_point_lid) *= phi_fail; // phi_fail = 1 or 0 - MaterialPoints_sspd(mat_point_lid) *= phi_fail; - MaterialPoints_sspd(mat_point_lid) = fmax(MaterialPoints_sspd(mat_point_lid), 1e-32); - - for (size_t i = 0; i < 3; i++) { - for (size_t j = 0; j < 3; j++) { - MaterialPoints_stress(1, mat_point_lid, i, j) *= phi_fail; - } - } // end for i,j - - }); // end parallel for - } // end if elem errosion - - return; -} // end method to update state2D \ No newline at end of file diff --git a/single-node-refactor/src/Solvers/SGH_solver/src/sgh_execute.cpp b/single-node-refactor/src/Solvers/SGH_solver_3D/src/sgh_execute.cpp similarity index 70% rename from single-node-refactor/src/Solvers/SGH_solver/src/sgh_execute.cpp rename to single-node-refactor/src/Solvers/SGH_solver_3D/src/sgh_execute.cpp index 4c30fa3e5..38a7c92c8 100644 --- a/single-node-refactor/src/Solvers/SGH_solver/src/sgh_execute.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver_3D/src/sgh_execute.cpp @@ -32,7 +32,7 @@ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. **********************************************************************************************/ -#include "sgh_solver.h" +#include "sgh_solver_3D.h" #include "simulation_parameters.h" #include "material.h" @@ -49,13 +49,13 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /// Evolve the state according to the SGH method /// ///////////////////////////////////////////////////////////////////////////// -void SGH::execute(SimulationParameters_t& SimulationParamaters, - Material_t& Materials, - BoundaryCondition_t& BoundaryConditions, - Mesh_t& mesh, - State_t& State) +void SGH3D::execute(SimulationParameters_t& SimulationParamaters, + Material_t& Materials, + BoundaryCondition_t& BoundaryConditions, + Mesh_t& mesh, + State_t& State) { - std::cout << "In execute function in sgh solver" << std::endl; + std::cout << "In execute function in SGH3D solver" << std::endl; double fuzz = SimulationParamaters.dynamic_options.fuzz; double tiny = SimulationParamaters.dynamic_options.tiny; @@ -186,48 +186,28 @@ void SGH::execute(SimulationParameters_t& SimulationParamaters, double min_dt_calc = dt_max; // calculating time step per material - for(size_t mat_id=0; mat_id& node_coords, - const DCArrayKokkos& node_mass, - CArrayKokkos node_extensive_mass, - double tiny) -{ - - // calculate the nodal areal mass - FOR_ALL(node_gid, 0, mesh.num_nodes, { - node_mass(node_gid) = 0.0; - - if (node_coords(1, node_gid, 1) > tiny) { - node_mass(node_gid) = node_extensive_mass(node_gid) / node_coords(1, node_gid, 1); - } - }); // end parallel for over node_gid - Kokkos::fence(); - - // calculate the boundary areal mass - FOR_ALL(node_bdy_gid, 0, mesh.num_bdy_nodes, { - size_t node_gid = mesh.bdy_nodes(node_bdy_gid); - - if (node_coords(1, node_gid, 1) < tiny) { - // node is on the axis - - for (size_t node_lid = 0; node_lid < mesh.num_nodes_in_node(node_gid); node_lid++) { - size_t node_neighbor_gid = mesh.nodes_in_node(node_gid, node_lid); - - // if the node is off the axis, use it's areal mass on the boundary - if (node_coords(1, node_neighbor_gid, 1) > tiny) { - node_mass(node_gid) = fmax(node_mass(node_gid), node_mass(node_neighbor_gid) / 2.0); - } - } // end for over neighboring nodes - } // end if - }); // end parallel for over elem_gid - - return; -}// end function - - // set the corner forces to zero void set_corner_force_zero(const Mesh_t& mesh, const DCArrayKokkos& corner_force) diff --git a/single-node-refactor/src/Solvers/SGH_solver/src/sgh_setup.cpp b/single-node-refactor/src/Solvers/SGH_solver_3D/src/sgh_setup.cpp similarity index 99% rename from single-node-refactor/src/Solvers/SGH_solver/src/sgh_setup.cpp rename to single-node-refactor/src/Solvers/SGH_solver_3D/src/sgh_setup.cpp index a8b7bcc21..58615c0e0 100644 --- a/single-node-refactor/src/Solvers/SGH_solver/src/sgh_setup.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver_3D/src/sgh_setup.cpp @@ -32,7 +32,7 @@ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. **********************************************************************************************/ -#include "sgh_solver.h" +#include "sgh_solver_3D.h" #include "mesh.h" #include "region_fill.h" #include "material.h" @@ -51,7 +51,7 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /// \param corner_mass is the corner mass /// ///////////////////////////////////////////////////////////////////////////// -void SGH::init_corner_node_masses_zero(const Mesh_t& mesh, +void SGH3D::init_corner_node_masses_zero(const Mesh_t& mesh, const DCArrayKokkos& node_mass, const DCArrayKokkos& corner_mass) const { @@ -93,7 +93,7 @@ void SGH::init_corner_node_masses_zero(const Mesh_t& mesh, /// \param rk_num_bins is number of time integration storage bins /// ///////////////////////////////////////////////////////////////////////////// -void SGH::fill_regions_sgh(const Material_t& Materials, +void SGH3D::fill_regions_sgh(const Material_t& Materials, const Mesh_t& mesh, const DCArrayKokkos & node_coords, DCArrayKokkos & node_vel, @@ -274,7 +274,7 @@ void SGH::fill_regions_sgh(const Material_t& Materials, /// \brief Allocate state, setup models, and fill mesh regions per the YAML input /// ///////////////////////////////////////////////////////////////////////////// -void SGH::setup(SimulationParameters_t& SimulationParamaters, +void SGH3D::setup(SimulationParameters_t& SimulationParamaters, Material_t& Materials, Mesh_t& mesh, BoundaryCondition_t& Boundary, diff --git a/single-node-refactor/src/Solvers/SGH_solver/src/time_integration.cpp b/single-node-refactor/src/Solvers/SGH_solver_3D/src/time_integration.cpp similarity index 67% rename from single-node-refactor/src/Solvers/SGH_solver/src/time_integration.cpp rename to single-node-refactor/src/Solvers/SGH_solver_3D/src/time_integration.cpp index 54dff578c..6c38214af 100644 --- a/single-node-refactor/src/Solvers/SGH_solver/src/time_integration.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver_3D/src/time_integration.cpp @@ -32,7 +32,7 @@ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. **********************************************************************************************/ -#include "sgh_solver.h" +#include "sgh_solver_3D.h" #include "mesh.h" @@ -51,7 +51,7 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /// \param Number of nodes /// ///////////////////////////////////////////////////////////////////////////// -void SGH::rk_init(DCArrayKokkos& node_coords, +void SGH3D::rk_init(DCArrayKokkos& node_coords, DCArrayKokkos& node_vel, DCArrayKokkos& MaterialPoints_sie, DCArrayKokkos& MaterialPoints_stress, @@ -104,7 +104,7 @@ void SGH::rk_init(DCArrayKokkos& node_coords, /// REMOVE EXCESS TIME RELATED VARIABLES /// ///////////////////////////////////////////////////////////////////////////// -void SGH::get_timestep(Mesh_t& mesh, +void SGH3D::get_timestep(Mesh_t& mesh, DCArrayKokkos& node_coords, DCArrayKokkos& node_vel, DCArrayKokkos& GaussPoints_vol, @@ -207,110 +207,3 @@ void SGH::get_timestep(Mesh_t& mesh, dt = fmin(dt, time_final - time_value); return; } // end get_timestep - -///////////////////////////////////////////////////////////////////////////// -/// -/// \fn get_timestep2D -/// -/// \brief This function calculates the time step by finding the shortest distance -/// between any two nodes in the mesh. -/// -/// WARNING WARNING : Only works for 2D, 4 node elements -/// -/// \param Simulation mesh -/// \param View of nodal position data -/// \param View of nodal velocity data -/// \param View of element sound speed -/// \param View of element volume -/// -///////////////////////////////////////////////////////////////////////////// -void SGH::get_timestep2D(Mesh_t& mesh, - DCArrayKokkos& node_coords, - DCArrayKokkos& node_vel, - DCArrayKokkos& GaussPoints_vol, - DCArrayKokkos& MaterialPoints_sspd, - DCArrayKokkos& MaterialPoints_eroded, - DCArrayKokkos& MaterialToMeshMaps_elem, - size_t num_mat_elems, - double time_value, - const double graphics_time, - const double time_final, - const double dt_max, - const double dt_min, - const double dt_cfl, - double& dt, - const double fuzz) const -{ - // increase dt by 10%, that is the largest dt value - dt = dt * 1.1; - - double dt_lcl; - double min_dt_calc; - REDUCE_MIN(mat_elem_lid, 0, num_mat_elems, dt_lcl, { - - size_t elem_gid = MaterialToMeshMaps_elem(mat_elem_lid); - - double coords0[8]; // element coords - ViewCArrayKokkos coords(coords0, 4, 2); - - double distance0[6]; // array for holding distances between each node - ViewCArrayKokkos dist(distance0, 6); - - // Getting the coordinates of the nodes of the element - for (size_t node_lid = 0; node_lid < 4; node_lid++) { - for (size_t dim = 0; dim < mesh.num_dims; dim++) { - coords(node_lid, dim) = node_coords(1, mesh.nodes_in_elem(elem_gid, node_lid), dim); - } // end for dim - } // end for loop over node_lid - - // Only works for 2D - // Solving for the magnitude of distance between each node - size_t count = 0; - for (size_t i = 0; i < 3; i++) { - for (size_t j = i + 1; j <= 3; j++) { - // returns magnitude of distance between each node, 6 total options - dist(count) = fabs( - sqrt(pow((coords(i, 0) - coords(j, 0)), 2.0) - + pow((coords(i, 1) - coords(j, 1)), 2.0) ) - ); - count++; - } // end for j - } // end for i - - double dist_min = dist(0); - - for (int i = 0; i < 6; ++i) { - dist_min = fmin(dist(i), dist_min); - } - - // local dt calc based on CFL - double dt_lcl_ = dt_cfl * dist_min / (MaterialPoints_sspd(elem_gid) + fuzz); - - - if (MaterialToMeshMaps_elem(mat_elem_lid) == true){ - dt_lcl_ = 1.0e32; // a huge time step as this element doesn't exist - } - - // make dt be in bounds - dt_lcl_ = fmin(dt_lcl_, dt_max); // make dt small than dt_max - dt_lcl_ = fmax(dt_lcl_, dt_min); // make dt larger than dt_min - - if (dt_lcl_ < dt_lcl) { - dt_lcl = dt_lcl_; - } - }, min_dt_calc); // end parallel reduction - Kokkos::fence(); - - // save the min dt - if (min_dt_calc < dt) { - dt = min_dt_calc; - } - - // ensure time step hits the graphics time intervals - dt = fmin(dt, (graphics_time - time_value) + fuzz); - - // make dt be exact for final time - dt = fmin(dt, time_final - time_value); - - return; -} // end get_timestep2D diff --git a/single-node-refactor/src/common/solver_inputs.h b/single-node-refactor/src/common/solver_inputs.h index c5ab67adb..e54a48a10 100644 --- a/single-node-refactor/src/common/solver_inputs.h +++ b/single-node-refactor/src/common/solver_inputs.h @@ -43,14 +43,14 @@ namespace solver_input enum method { NONE = 0, - SGH = 1, + SGH3D = 1, SGHRZ = 2, }; } // end of namespace static std::map solver_map { - { "SGH", solver_input::SGH }, + { "SGH3D", solver_input::SGH3D }, { "SGHRZ", solver_input::SGHRZ } }; diff --git a/single-node-refactor/src/driver.cpp b/single-node-refactor/src/driver.cpp index 6df54e4dd..33e628ff6 100644 --- a/single-node-refactor/src/driver.cpp +++ b/single-node-refactor/src/driver.cpp @@ -92,9 +92,9 @@ void Driver::initialize() for (int solver_id = 0; solver_id < SimulationParamaters.solver_inputs.size(); solver_id++) { - if (SimulationParamaters.solver_inputs[solver_id].method == solver_input::SGH) { + if (SimulationParamaters.solver_inputs[solver_id].method == solver_input::SGH3D) { - SGH* sgh_solver = new SGH(); + SGH3D* sgh_solver = new SGH3D(); sgh_solver->initialize(SimulationParamaters, Materials, diff --git a/single-node-refactor/src/driver.h b/single-node-refactor/src/driver.h index 06187b001..63be9b634 100644 --- a/single-node-refactor/src/driver.h +++ b/single-node-refactor/src/driver.h @@ -40,7 +40,7 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "geometry_new.h" // Headers for SGH solver classes -#include "sgh_solver.h" +#include "sgh_solver_3D.h" #include "sgh_solver_rz.h" From 623bd8faefa684afeb0c403c2dd1da37d72c2f97 Mon Sep 17 00:00:00 2001 From: Nathaniel Morgan Date: Fri, 16 Aug 2024 12:45:22 -0600 Subject: [PATCH 134/233] fixed bug, now the material_corner_forces are saved --- single-node-refactor/input-rz.yaml | 4 ++-- .../Solvers/SGH_solver_3D/src/energy_sgh.cpp | 4 +--- .../SGH_solver_rz/src/force_sgh_rz.cpp | 23 ++++++++++++++----- 3 files changed, 20 insertions(+), 11 deletions(-) diff --git a/single-node-refactor/input-rz.yaml b/single-node-refactor/input-rz.yaml index 0e2b74c8f..32a450853 100644 --- a/single-node-refactor/input-rz.yaml +++ b/single-node-refactor/input-rz.yaml @@ -5,7 +5,7 @@ dynamic_options: dt_min: 1.e-8 dt_max: 1.e-2 dt_start: 1.e-5 - cycle_stop: 105 + cycle_stop: 100000 # mesh_options: @@ -25,7 +25,7 @@ output_options: timer_output_level: thorough output_file_format: ensight graphics_time_step: 0.25 - graphics_iteration_step: 2 + #graphics_iteration_step: 2 solver_options: - solver: diff --git a/single-node-refactor/src/Solvers/SGH_solver_3D/src/energy_sgh.cpp b/single-node-refactor/src/Solvers/SGH_solver_3D/src/energy_sgh.cpp index fc78672d9..d925e3a1d 100644 --- a/single-node-refactor/src/Solvers/SGH_solver_3D/src/energy_sgh.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver_3D/src/energy_sgh.cpp @@ -96,13 +96,11 @@ void SGH3D::update_energy(const double rk_alpha, // Get the material corner lid size_t mat_corner_lid = corners_in_mat_elem(mat_elem_lid, corner_lid); - - double node_radius = 1; // calculate the Power=F dot V for this corner for (size_t dim = 0; dim < mesh.num_dims; dim++) { double half_vel = (node_vel(1, node_gid, dim) + node_vel(0, node_gid, dim)) * 0.5; - MaterialPoints_power += MaterialCorners_force(mat_corner_lid, dim) * node_radius * half_vel; + MaterialPoints_power += MaterialCorners_force(mat_corner_lid, dim) * half_vel; } // end for dim } // end for node_lid diff --git a/single-node-refactor/src/Solvers/SGH_solver_rz/src/force_sgh_rz.cpp b/single-node-refactor/src/Solvers/SGH_solver_rz/src/force_sgh_rz.cpp index b28b5dc51..a2d199cc7 100644 --- a/single-node-refactor/src/Solvers/SGH_solver_rz/src/force_sgh_rz.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver_rz/src/force_sgh_rz.cpp @@ -384,13 +384,24 @@ void SGHRZ::get_force_rz(const Material_t& Materials, // Get node gid size_t node_gid = mesh.nodes_in_elem(elem_gid, node_lid); + // Get the material corner lid + size_t mat_corner_lid = corners_in_mat_elem(mat_elem_lid, corner_lid); + + // loop over dimension - for (int dim = 0; dim < num_dims; dim++) { - corner_force(corner_gid, dim) = - area_normal(node_lid, 0) * tau(0, dim) - + area_normal(node_lid, 1) * tau(1, dim) - + phi * muc(node_lid) * (vel_star(dim) - node_vel(1, node_gid, dim)); - } // end loop over dimension + // add if eroded here + for (int dim = 0; dim < num_dims; dim++) { + + double force_component = + area_normal(node_lid, 0) * tau(0, dim) + + area_normal(node_lid, 1) * tau(1, dim) + + phi * muc(node_lid) * (vel_star(dim) - node_vel(1, node_gid, dim)); + + MaterialCorners_force(mat_corner_lid, dim) = force_component; + corner_force(corner_gid, dim) += force_component; // tally all forces to the corner + + } // end loop over dimension + // ---- add hoop stress terms ---- From 8de7fec7a2045c6b0cbb6c634804fb09c4ee872d Mon Sep 17 00:00:00 2001 From: Jacob Moore Date: Fri, 16 Aug 2024 13:50:59 -0500 Subject: [PATCH 135/233] ENH: Adding debug flag option --- single-node-refactor/scripts/build-fierro.sh | 20 ++++++++++++++++--- single-node-refactor/scripts/cmake_build.sh | 7 +++++++ .../scripts/kokkos-install.sh | 8 ++++++++ single-node-refactor/scripts/matar-install.sh | 9 +++++++++ 4 files changed, 41 insertions(+), 3 deletions(-) diff --git a/single-node-refactor/scripts/build-fierro.sh b/single-node-refactor/scripts/build-fierro.sh index 3c5f20db4..fa0b2ebe6 100755 --- a/single-node-refactor/scripts/build-fierro.sh +++ b/single-node-refactor/scripts/build-fierro.sh @@ -37,6 +37,8 @@ show_help() { echo " mac A Mac computer. This option does not allow for cuda and hip builds, and build_cores will be set to 1" echo " " echo " --build_cores The number of build cores to be used by make and make install commands. The default is 1" + echo " " + echo " --debug Build with debug. Default is false." return 1 } @@ -46,12 +48,14 @@ solver="SGH" machine="linux" kokkos_build_type="openmp" build_cores="1" +debug="false" # Define arrays of valid options valid_build_action=("full-app" "set-env" "install-kokkos" "fierro") valid_solver=("SGH") valid_kokkos_build_types=("serial" "openmp" "pthreads" "cuda" "hip") valid_machines=("darwin" "chicoma" "linux" "mac") +valid_debug=("true" "false") # Parse command line arguments for arg in "$@"; do @@ -106,6 +110,16 @@ for arg in "$@"; do return 1 fi ;; + --debug=*) + option="${arg#*=}" + if [[ " ${valid_debug[*]} " == *" $option "* ]]; then + debug="$option" + else + echo "Error: debug must be true or false, default is false." + show_help + return 1 + fi + ;; --help) show_help return 1 @@ -150,9 +164,9 @@ source setup-env.sh ${machine} ${kokkos_build_type} ${build_cores} # Next, do action based on args if [ "$build_action" = "full-app" ]; then - source kokkos-install.sh ${kokkos_build_type} - source matar-install.sh ${kokkos_build_type} - source cmake_build.sh ${solver} + source kokkos-install.sh ${kokkos_build_type} ${debug} + source matar-install.sh ${kokkos_build_type} ${debug} + source cmake_build.sh ${solver} ${debug} elif [ "$build_action" = "install-kokkos" ]; then source kokkos-install.sh ${kokkos_build_type} elif [ "$build_action" = "fierro" ]; then diff --git a/single-node-refactor/scripts/cmake_build.sh b/single-node-refactor/scripts/cmake_build.sh index d0c1e8442..27f7f5608 100755 --- a/single-node-refactor/scripts/cmake_build.sh +++ b/single-node-refactor/scripts/cmake_build.sh @@ -1,6 +1,7 @@ #!/bin/bash -e solver="${1}" +debug="${2}" echo "Removing old Kokkos build and installation directory" rm -rf ${SGH_BUILD_DIR} @@ -12,6 +13,12 @@ cmake_options=( #-D CMAKE_CXX_FLAGS="-I${matardir}/src" ) +if [ "$debug" = "true" ]; then + echo "Setting debug to true for CMAKE build type" + cmake_options+=( + -DCMAKE_BUILD_TYPE=Debug + ) +fi if [ "$solver" = "SGH" ]; then cmake_options+=( -D BUILD_KOKKOS_SGH=ON diff --git a/single-node-refactor/scripts/kokkos-install.sh b/single-node-refactor/scripts/kokkos-install.sh index 1e71f770b..396c3671f 100755 --- a/single-node-refactor/scripts/kokkos-install.sh +++ b/single-node-refactor/scripts/kokkos-install.sh @@ -1,6 +1,7 @@ #!/bin/bash -e kokkos_build_type="${1}" +debug="${2}" # If all arguments are valid, you can use them in your script as needed echo "Kokkos Build Type: $kokkos_build_type" @@ -64,6 +65,13 @@ elif [ "$kokkos_build_type" = "hip" ]; then ) fi +if [ "$debug" = "true" ]; then + echo "Setting debug to true for CMAKE build type" + cmake_options+=( + -DCMAKE_BUILD_TYPE=Debug + ) +fi + # Print CMake options for reference echo "CMake Options: ${cmake_options[@]}" diff --git a/single-node-refactor/scripts/matar-install.sh b/single-node-refactor/scripts/matar-install.sh index 6ec120738..525182ce4 100755 --- a/single-node-refactor/scripts/matar-install.sh +++ b/single-node-refactor/scripts/matar-install.sh @@ -1,6 +1,7 @@ #!/bin/bash -e kokkos_build_type=${1} +debug=${2} rm -rf ${MATAR_INSTALL_DIR} mkdir -p ${MATAR_BUILD_DIR} @@ -10,6 +11,14 @@ cmake_options=( -D CMAKE_PREFIX_PATH="${KOKKOS_INSTALL_DIR}" ) +if [ "$debug" = "true" ]; then + + echo "Setting debug to true for CMAKE build type" + cmake_options+=( + -DCMAKE_BUILD_TYPE=Debug + ) +fi + if [ "$kokkos_build_type" = "none" ]; then cmake_options+=( -D Matar_ENABLE_KOKKOS=OFF From eb587283b954aa16b024c371b42edad2a6b72146 Mon Sep 17 00:00:00 2001 From: Jacob Moore Date: Fri, 16 Aug 2024 14:42:18 -0500 Subject: [PATCH 136/233] BUG: Fix cuda bug on memory access --- .../src/Solvers/SGH_solver_rz/src/properties_rz.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/single-node-refactor/src/Solvers/SGH_solver_rz/src/properties_rz.cpp b/single-node-refactor/src/Solvers/SGH_solver_rz/src/properties_rz.cpp index 863041e3f..43b6e2162 100644 --- a/single-node-refactor/src/Solvers/SGH_solver_rz/src/properties_rz.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver_rz/src/properties_rz.cpp @@ -107,7 +107,7 @@ void SGHRZ::update_state_rz( // --- pressure --- - if (Materials.MaterialEnums(mat_id).EOSType == model::decoupledEOSType) { + if (Materials.MaterialEnums.host(mat_id).EOSType == model::decoupledEOSType) { // loop over all the elements the material lives in FOR_ALL(mat_elem_lid, 0, num_material_elems, { From b07a05b62b0d8ff30d9a67cb4df265b3866400c6 Mon Sep 17 00:00:00 2001 From: Nathaniel Morgan Date: Fri, 16 Aug 2024 13:43:34 -0600 Subject: [PATCH 137/233] fixed cuda bug --- .../input-impact-erosion.yaml | 2 +- .../input-origin-erosion.yaml | 2 +- single-node-refactor/input-rz-polar.yaml | 113 ++++++++++++++++++ single-node-refactor/input-rz.yaml | 4 +- single-node-refactor/input.yaml | 2 +- .../SGH_solver_rz/src/properties_rz.cpp | 2 +- single-node-refactor/src/common/mesh_inputs.h | 8 +- single-node-refactor/src/common/mesh_io.h | 2 +- single-node-refactor/src/input/parse_yaml.cpp | 2 + 9 files changed, 126 insertions(+), 11 deletions(-) create mode 100644 single-node-refactor/input-rz-polar.yaml diff --git a/single-node-refactor/input-impact-erosion.yaml b/single-node-refactor/input-impact-erosion.yaml index ff05f5b20..ba8568aff 100644 --- a/single-node-refactor/input-impact-erosion.yaml +++ b/single-node-refactor/input-impact-erosion.yaml @@ -15,7 +15,7 @@ dynamic_options: mesh_options: source: generate num_dims: 3 - type: Box + type: box origin: [0.0, 0.0, 0.0] length: [1.2, 1.2, 1.2] num_elems: [30, 30, 30] diff --git a/single-node-refactor/input-origin-erosion.yaml b/single-node-refactor/input-origin-erosion.yaml index 24f3d3051..fd68a16ea 100644 --- a/single-node-refactor/input-origin-erosion.yaml +++ b/single-node-refactor/input-origin-erosion.yaml @@ -15,7 +15,7 @@ dynamic_options: mesh_options: source: generate num_dims: 3 - type: Box + type: box origin: [0.0, 0.0, 0.0] length: [1.2, 1.2, 1.2] num_elems: [12, 12, 12] diff --git a/single-node-refactor/input-rz-polar.yaml b/single-node-refactor/input-rz-polar.yaml new file mode 100644 index 000000000..9ae2d601f --- /dev/null +++ b/single-node-refactor/input-rz-polar.yaml @@ -0,0 +1,113 @@ +# num_dims: 3 + +dynamic_options: + time_final: 1.0 + dt_min: 1.e-8 + dt_max: 1.e-2 + dt_start: 1.e-5 + cycle_stop: 10000 + + +# mesh_options: +# source: file +# file_path: /var/tmp/repos/Fierro/fork/Fierro/testing/meshes/mesh_Sedov_8.geo + +mesh_options: + source: generate + num_dims: 2 + type: polar + origin: [0.0, 0.0] + inner_radius: 0.025 + outer_radius: 1.2 + starting_angle: 0 + ending_angle: 90 + num_radial_elems: 50 + num_angular_elems: 10 + + + +output_options: + timer_output_level: thorough + output_file_format: ensight #state + graphics_time_step: 0.25 + #graphics_iteration_step: 2 + +solver_options: + - solver: + method: SGHRZ + # solver_vars: + # - blah + # - blah + # - blah + +boundary_conditions: + # Tag X plane + - boundary_condition: + solver: SGHRZ + geometry: x_plane + direction: x_dir + value: 0.0 + type: reflected_velocity + + + # Tag Y plane + - boundary_condition: + solver: SGHRZ + geometry: y_plane + direction: y_dir + value: 0.0 + type: reflected_velocity + + # Tag inner circle + - boundary_condition: + solver: SGHRZ + geometry: cylinder + value: 0.025 + type: zero_velocity + + + +materials: + - material: + id: 0 + eos_model_type: decoupled + eos_model: gamma_law_gas + # strength_model: none + q1: 1.0 + q2: 1.333 + q1ex: 1.0 + q2ex: 1.333 + eos_global_vars: + - 1.666666666666667 + - 1.0E-14 + - 1.0 + +regions: + - fill_volume: + type: global + material_id: 0 + den: 1.0 + sie: 1.e-10 + velocity: cartesian + u: 0.0 + v: 0.0 + w: 0.0 + + + + # energy source initial conditions + - fill_volume: + type: sphere + origin: [0.0, 0.0, 0.0] + radius1: 0.0 + radius2: 0.1 + material_id: 0 + den: 1.0 + # ie: 0.25833839995946534 + sie: 78.5254574 # (0.5*0.49339/(mat_fill(1).den*vol)) + velocity: cartesian + u: 0.0 + v: 0.0 + w: 0.0 + + diff --git a/single-node-refactor/input-rz.yaml b/single-node-refactor/input-rz.yaml index 32a450853..a7ed09c38 100644 --- a/single-node-refactor/input-rz.yaml +++ b/single-node-refactor/input-rz.yaml @@ -15,7 +15,7 @@ dynamic_options: mesh_options: source: generate num_dims: 2 - type: Box + type: box origin: [0.0, 0.0] length: [1.2, 1.2] num_elems: [12, 12] @@ -92,7 +92,7 @@ regions: material_id: 0 den: 1.0 # ie: 0.25833839995946534 - sie: 61.67375002 # 963.652344 + sie: 78.5254574 # (0.5*0.49339/(mat_fill(1).den*vol)) velocity: cartesian u: 0.0 v: 0.0 diff --git a/single-node-refactor/input.yaml b/single-node-refactor/input.yaml index a35232f05..29843e0b9 100644 --- a/single-node-refactor/input.yaml +++ b/single-node-refactor/input.yaml @@ -15,7 +15,7 @@ dynamic_options: mesh_options: source: generate num_dims: 3 - type: Box + type: box origin: [0.0, 0.0, 0.0] length: [1.2, 1.2, 1.2] num_elems: [12, 12, 12] diff --git a/single-node-refactor/src/Solvers/SGH_solver_rz/src/properties_rz.cpp b/single-node-refactor/src/Solvers/SGH_solver_rz/src/properties_rz.cpp index 863041e3f..43b6e2162 100644 --- a/single-node-refactor/src/Solvers/SGH_solver_rz/src/properties_rz.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver_rz/src/properties_rz.cpp @@ -107,7 +107,7 @@ void SGHRZ::update_state_rz( // --- pressure --- - if (Materials.MaterialEnums(mat_id).EOSType == model::decoupledEOSType) { + if (Materials.MaterialEnums.host(mat_id).EOSType == model::decoupledEOSType) { // loop over all the elements the material lives in FOR_ALL(mat_elem_lid, 0, num_material_elems, { diff --git a/single-node-refactor/src/common/mesh_inputs.h b/single-node-refactor/src/common/mesh_inputs.h index eb1880fbb..98688a520 100644 --- a/single-node-refactor/src/common/mesh_inputs.h +++ b/single-node-refactor/src/common/mesh_inputs.h @@ -51,8 +51,8 @@ enum source // type of mesh to generate if source = generate enum type { - Box = 0, // Create the mesh using the mesh builder - Cylinder = 1, // Read in the mesh from a file + Box = 0, // Create the mesh using the mesh builder + Polar = 1, // Create a polar 2D mesh }; } // end of namespace @@ -64,8 +64,8 @@ static std::map mesh_input_source_map static std::map mesh_input_type_map { - { "Box", mesh_input::Box }, - { "Cylinder", mesh_input::Cylinder } + { "box", mesh_input::Box }, + { "polar", mesh_input::Polar } }; ///////////////////////////////////////////////////////////////////////////// diff --git a/single-node-refactor/src/common/mesh_io.h b/single-node-refactor/src/common/mesh_io.h index d0d205aeb..9b5b61d8e 100644 --- a/single-node-refactor/src/common/mesh_io.h +++ b/single-node-refactor/src/common/mesh_io.h @@ -335,7 +335,7 @@ class MeshBuilder SimulationParameters_t& SimulationParamaters) { if (SimulationParamaters.mesh_input.num_dims == 2) { - if (SimulationParamaters.mesh_input.type == mesh_input::Cylinder) { + if (SimulationParamaters.mesh_input.type == mesh_input::Polar) { build_2d_polar(mesh, GaussPoints, node, corner, SimulationParamaters); } else if (SimulationParamaters.mesh_input.type == mesh_input::Box) { diff --git a/single-node-refactor/src/input/parse_yaml.cpp b/single-node-refactor/src/input/parse_yaml.cpp index 748a962a5..caaf999fb 100644 --- a/single-node-refactor/src/input/parse_yaml.cpp +++ b/single-node-refactor/src/input/parse_yaml.cpp @@ -551,6 +551,7 @@ void parse_mesh_input(Yaml::Node& root, mesh_input_t& mesh_input) for (const auto& pair : map) { std::cout << "\t" << pair.first << std::endl; } + throw std::runtime_error("**** Region Not Understood ****"); } // end if } // source // Number of dimensions for the mesh @@ -582,6 +583,7 @@ void parse_mesh_input(Yaml::Node& root, mesh_input_t& mesh_input) for (const auto& pair : map) { std::cout << "\t" << pair.first << std::endl; } + throw std::runtime_error("**** Region Not Understood ****"); } // end if } // type // Get mesh file path From 97ac6dea8ef859084f3c73cd7d73f3e78256783d Mon Sep 17 00:00:00 2001 From: Nathaniel Morgan Date: Fri, 16 Aug 2024 15:05:44 -0600 Subject: [PATCH 138/233] updated input file for sedov rz --- single-node-refactor/input-rz-polar.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/single-node-refactor/input-rz-polar.yaml b/single-node-refactor/input-rz-polar.yaml index 9ae2d601f..6cb90e8de 100644 --- a/single-node-refactor/input-rz-polar.yaml +++ b/single-node-refactor/input-rz-polar.yaml @@ -21,14 +21,14 @@ mesh_options: outer_radius: 1.2 starting_angle: 0 ending_angle: 90 - num_radial_elems: 50 + num_radial_elems: 12 num_angular_elems: 10 output_options: timer_output_level: thorough - output_file_format: ensight #state + output_file_format: state #ensight state graphics_time_step: 0.25 #graphics_iteration_step: 2 @@ -104,7 +104,7 @@ regions: material_id: 0 den: 1.0 # ie: 0.25833839995946534 - sie: 78.5254574 # (0.5*0.49339/(mat_fill(1).den*vol)) + sie: 119.65 # (0.5*0.49339/(mat_fill(1).den*vol)) velocity: cartesian u: 0.0 v: 0.0 From a39b1a5af963f7c96513fae9533cce8cbd5b6187 Mon Sep 17 00:00:00 2001 From: Nathaniel Morgan Date: Fri, 16 Aug 2024 16:03:52 -0600 Subject: [PATCH 139/233] updated regression inputs to use lowercase box --- single-node-refactor/input.yaml | 4 ++-- .../regression_tests/standard_inputs/Noh.yaml | 4 ++-- .../regression_tests/standard_inputs/Sedov.yaml | 2 +- .../regression_tests/standard_inputs/Sedov_Erosion.yaml | 2 +- .../regression_tests/standard_inputs/Sod_X.yaml | 2 +- .../regression_tests/standard_inputs/Sod_Y.yaml | 2 +- .../regression_tests/standard_inputs/Sod_Z.yaml | 2 +- 7 files changed, 9 insertions(+), 9 deletions(-) diff --git a/single-node-refactor/input.yaml b/single-node-refactor/input.yaml index 29843e0b9..714ccb1cb 100644 --- a/single-node-refactor/input.yaml +++ b/single-node-refactor/input.yaml @@ -23,8 +23,8 @@ mesh_options: output_options: timer_output_level: thorough - output_file_format: vtk - graphics_time_step: 0.25 + output_file_format: state + graphics_time_step: 1.0 # graphics_iteration_step: 10 solver_options: diff --git a/single-node-refactor/regression_tests/standard_inputs/Noh.yaml b/single-node-refactor/regression_tests/standard_inputs/Noh.yaml index 4dccc19cf..0777c5352 100644 --- a/single-node-refactor/regression_tests/standard_inputs/Noh.yaml +++ b/single-node-refactor/regression_tests/standard_inputs/Noh.yaml @@ -7,14 +7,14 @@ dynamic_options: cycle_stop: 2000000 mesh_generation_options: - type: Box + type: box origin: [0, 0, 0] length: [1.0, 1.0, 1.0] num_elems: [10, 10, 10] output_options: timer_output_level: thorough - output_file_format: vtk + output_file_format: state graphics_step: 0.6 write_initial: false write_final: true diff --git a/single-node-refactor/regression_tests/standard_inputs/Sedov.yaml b/single-node-refactor/regression_tests/standard_inputs/Sedov.yaml index 113105002..5fcdd14e2 100644 --- a/single-node-refactor/regression_tests/standard_inputs/Sedov.yaml +++ b/single-node-refactor/regression_tests/standard_inputs/Sedov.yaml @@ -10,7 +10,7 @@ dynamic_options: mesh_options: source: generate num_dims: 3 - type: Box + type: box origin: [0.0, 0.0, 0.0] length: [1.2, 1.2, 1.2] num_elems: [12, 12, 12] diff --git a/single-node-refactor/regression_tests/standard_inputs/Sedov_Erosion.yaml b/single-node-refactor/regression_tests/standard_inputs/Sedov_Erosion.yaml index 79db59797..871c6c45e 100644 --- a/single-node-refactor/regression_tests/standard_inputs/Sedov_Erosion.yaml +++ b/single-node-refactor/regression_tests/standard_inputs/Sedov_Erosion.yaml @@ -15,7 +15,7 @@ dynamic_options: mesh_options: source: generate num_dims: 3 - type: Box + type: box origin: [0.0, 0.0, 0.0] length: [1.2, 1.2, 1.2] num_elems: [12, 12, 12] diff --git a/single-node-refactor/regression_tests/standard_inputs/Sod_X.yaml b/single-node-refactor/regression_tests/standard_inputs/Sod_X.yaml index ce7465c09..7f9292832 100644 --- a/single-node-refactor/regression_tests/standard_inputs/Sod_X.yaml +++ b/single-node-refactor/regression_tests/standard_inputs/Sod_X.yaml @@ -10,7 +10,7 @@ dynamic_options: mesh_options: source: generate num_dims: 3 - type: Box + type: box origin: [0, 0, 0] length: [1.0, 0.01, 0.01] num_elems: [100, 1, 1] diff --git a/single-node-refactor/regression_tests/standard_inputs/Sod_Y.yaml b/single-node-refactor/regression_tests/standard_inputs/Sod_Y.yaml index 25bfbd23e..d7b51fb0d 100644 --- a/single-node-refactor/regression_tests/standard_inputs/Sod_Y.yaml +++ b/single-node-refactor/regression_tests/standard_inputs/Sod_Y.yaml @@ -10,7 +10,7 @@ dynamic_options: mesh_options: source: generate num_dims: 3 - type: Box + type: box origin: [0, 0, 0] length: [0.01, 1.0, 0.01] num_elems: [1, 100, 1] diff --git a/single-node-refactor/regression_tests/standard_inputs/Sod_Z.yaml b/single-node-refactor/regression_tests/standard_inputs/Sod_Z.yaml index 64fd52454..9c34c8e05 100644 --- a/single-node-refactor/regression_tests/standard_inputs/Sod_Z.yaml +++ b/single-node-refactor/regression_tests/standard_inputs/Sod_Z.yaml @@ -10,7 +10,7 @@ dynamic_options: mesh_options: source: generate num_dims: 3 - type: Box + type: box origin: [0, 0, 0] length: [0.01, 0.01, 1.0] num_elems: [1, 1, 100] From aa7ce36c107ebe48052cd826ba6bdbd94d7d4fe1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CAdrian-Diaz=E2=80=9D?= <“adriandiaz1117@gmail.com”> Date: Mon, 19 Aug 2024 11:49:38 -0600 Subject: [PATCH 140/233] BUG: ensure t0 for IVP gradient contribution --- .../SGH_Solver/include/FEA_Module_SGH.h | 3 + .../SGH_Solver/src/sgh_optimization.cpp | 713 +++++++++++------- 2 files changed, 436 insertions(+), 280 deletions(-) diff --git a/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/include/FEA_Module_SGH.h b/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/include/FEA_Module_SGH.h index f0aa4ba94..2d567d597 100644 --- a/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/include/FEA_Module_SGH.h +++ b/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/include/FEA_Module_SGH.h @@ -505,6 +505,9 @@ class FEA_Module_SGH : public FEA_Module void compute_topology_optimization_gradient_tally(Teuchos::RCP design_densities_distributed, Teuchos::RCP design_gradients_distributed, unsigned long cycle, real_t global_dt); + void compute_topology_optimization_gradient_IVP(Teuchos::RCP design_densities_distributed, Teuchos::RCP design_gradients_distributed, + unsigned long cycle, real_t global_dt); + void boundary_adjoint(const mesh_t& mesh, const DCArrayKokkos& boundary, vec_array& node_adjoint, diff --git a/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/sgh_optimization.cpp b/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/sgh_optimization.cpp index 7d8a39ce0..160c9d473 100644 --- a/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/sgh_optimization.cpp +++ b/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/sgh_optimization.cpp @@ -1404,6 +1404,132 @@ void FEA_Module_SGH::compute_topology_optimization_adjoint_full(Teuchos::RCPCPU_Time(); //state_adjoint_time += state_adjoint_time_end-state_adjoint_time_start; compute_topology_optimization_gradient_tally(design_densities_distributed, cached_design_gradients_distributed, cycle, global_dt); + + if(cycle==0){ + std::set::iterator last_checkpoint = dynamic_checkpoint_set->end(); + --last_checkpoint; + const_vec_array current_velocity_vector = last_checkpoint->get_vector_pointer(V_DATA)->getLocalView(Tpetra::Access::ReadOnly); + const_vec_array current_coordinate_vector = last_checkpoint->get_vector_pointer(U_DATA)->getLocalView(Tpetra::Access::ReadOnly); + const_vec_array current_element_internal_energy = last_checkpoint->get_vector_pointer(SIE_DATA)->getLocalView(Tpetra::Access::ReadOnly); + + // compute gradients at midpoint + FOR_ALL_CLASS(node_gid, 0, nlocal_nodes + nghost_nodes, { + for (int idim = 0; idim < num_dim; idim++) { + node_vel(rk_level, node_gid, idim) = current_velocity_vector(node_gid, idim); + node_coords(rk_level, node_gid, idim) = current_coordinate_vector(node_gid, idim); + } + }); + Kokkos::fence(); + + FOR_ALL_CLASS(elem_gid, 0, rnum_elem, { + elem_sie(rk_level, elem_gid) = current_element_internal_energy(elem_gid, 0); + }); + Kokkos::fence(); + + // state_adjoint_time_end = Explicit_Solver_Pointer_->CPU_Time(); + // state_adjoint_time += state_adjoint_time_end-state_adjoint_time_start; + // set state according to phase data at this timestep + get_vol(); + + // ---- Calculate velocity diveregence for the element ---- + if (num_dim == 2) { + get_divergence2D(elem_div, + node_coords, + node_vel, + elem_vol); + } + else{ + get_divergence(elem_div, + node_coords, + node_vel, + elem_vol); + } // end if 2D + + // ---- Calculate elem state (den, pres, sound speed, stress) for next time step ---- + if (num_dim == 2) { + update_state2D(material, + *mesh, + node_coords, + node_vel, + elem_den, + elem_pres, + elem_stress, + elem_sspd, + elem_sie, + elem_vol, + elem_mass, + elem_mat_id, + 1.0, + cycle); + } + else{ + update_state(material, + *mesh, + node_coords, + node_vel, + elem_den, + elem_pres, + elem_stress, + elem_sspd, + elem_sie, + elem_vol, + elem_mass, + elem_mat_id, + 1.0, + cycle); + } + + if (num_dim == 2) { + get_force_sgh2D(material, + *mesh, + node_coords, + node_vel, + elem_den, + elem_sie, + elem_pres, + elem_stress, + elem_sspd, + elem_vol, + elem_div, + elem_mat_id, + corner_force, + 1.0, + cycle); + } + else{ + get_force_sgh(material, + *mesh, + node_coords, + node_vel, + elem_den, + elem_sie, + elem_pres, + elem_stress, + elem_sspd, + elem_vol, + elem_div, + elem_mat_id, + corner_force, + 1.0, + cycle); + } + + if (have_loading_conditions) { + applied_forces(material, + *mesh, + node_coords, + node_vel, + node_mass, + elem_den, + elem_vol, + elem_div, + elem_mat_id, + corner_force, + 1.0, + cycle); + } + compute_topology_optimization_gradient_IVP(design_densities_distributed, cached_design_gradients_distributed, cycle, global_dt); + } } if(use_solve_checkpoints){ @@ -1438,7 +1564,6 @@ void FEA_Module_SGH::compute_topology_optimization_gradient_tally(Teuchos::RCPnum_bdy_nodes; const DCArrayKokkos boundary = module_params->boundary; - const DCArrayKokkos material = simparam->material; const int num_dim = simparam->num_dims; int num_corners = rnum_elem * num_nodes_in_elem; bool element_constant_density = true; @@ -1451,144 +1576,29 @@ void FEA_Module_SGH::compute_topology_optimization_gradient_tally(Teuchos::RCPgetLocalView(Tpetra::Access::ReadWrite); const_vec_array design_densities = design_densities_distributed->getLocalView(Tpetra::Access::ReadOnly); - // view scope - { - - const_vec_array current_velocity_vector; - const_vec_array next_velocity_vector; - if(use_solve_checkpoints){ - //note that these are assigned backwards because the adjoint loop progresses backwards - current_velocity_vector = all_node_velocities_distributed->getLocalView(Tpetra::Access::ReadOnly); - next_velocity_vector = previous_node_velocities_distributed->getLocalView(Tpetra::Access::ReadOnly); - } - else{ - current_velocity_vector = (*forward_solve_velocity_data)[cycle]->getLocalView(Tpetra::Access::ReadOnly); - next_velocity_vector = (*forward_solve_velocity_data)[cycle + 1]->getLocalView(Tpetra::Access::ReadOnly); - } - if(simparam->optimization_options.optimization_objective_regions.size()){ - int nobj_volumes = simparam->optimization_options.optimization_objective_regions.size(); - const_vec_array all_initial_node_coords = all_initial_node_coords_distributed->getLocalView(Tpetra::Access::ReadOnly); - FOR_ALL_CLASS(elem_id, 0, rnum_elem, { - size_t node_id; - size_t corner_id; - real_t inner_product; - // std::cout << elem_mass(elem_id) <optimization_options.optimization_objective_regions(ivolume).contains(current_node_coords)){ - contained = true; - } - } - if(contained){ - for (int idim = 0; idim < num_dim; idim++) { - inner_product += elem_mass(elem_id) * current_element_velocities(ifill, idim) * current_element_velocities(ifill, idim); - } - } - } - - for (int inode = 0; inode < num_nodes_in_elem; inode++) { - // compute gradient of local element contribution to v^t*M*v product - corner_id = elem_id * num_nodes_in_elem + inode; - // division by design ratio recovers nominal element mass used in the gradient operator - corner_value_storage(corner_id) = inner_product * global_dt / relative_element_densities(elem_id); - } - }); // end parallel for - Kokkos::fence(); - } - else{ - FOR_ALL_CLASS(elem_id, 0, rnum_elem, { - size_t node_id; - size_t corner_id; - real_t inner_product; - // std::cout << elem_mass(elem_id) <getLocalView(Tpetra::Access::ReadOnly); - current_adjoint_vector = all_adjoint_vector_distributed->getLocalView(Tpetra::Access::ReadOnly); - next_velocity_vector = previous_node_velocities_distributed->getLocalView(Tpetra::Access::ReadOnly); - next_adjoint_vector = previous_adjoint_vector_distributed->getLocalView(Tpetra::Access::ReadOnly); - } - else{ - current_velocity_vector = (*forward_solve_velocity_data)[cycle]->getLocalView(Tpetra::Access::ReadOnly); - current_adjoint_vector = (*adjoint_vector_data)[cycle]->getLocalView(Tpetra::Access::ReadOnly); - next_velocity_vector = (*forward_solve_velocity_data)[cycle + 1]->getLocalView(Tpetra::Access::ReadOnly); - next_adjoint_vector = (*adjoint_vector_data)[cycle + 1]->getLocalView(Tpetra::Access::ReadOnly); - } - + // view scope + { + + const_vec_array current_velocity_vector; + const_vec_array next_velocity_vector; + if(use_solve_checkpoints){ + //note that these are assigned backwards because the adjoint loop progresses backwards + current_velocity_vector = all_node_velocities_distributed->getLocalView(Tpetra::Access::ReadOnly); + next_velocity_vector = previous_node_velocities_distributed->getLocalView(Tpetra::Access::ReadOnly); + } + else{ + current_velocity_vector = (*forward_solve_velocity_data)[cycle]->getLocalView(Tpetra::Access::ReadOnly); + next_velocity_vector = (*forward_solve_velocity_data)[cycle + 1]->getLocalView(Tpetra::Access::ReadOnly); + } + if(simparam->optimization_options.optimization_objective_regions.size()){ + int nobj_volumes = simparam->optimization_options.optimization_objective_regions.size(); + const_vec_array all_initial_node_coords = all_initial_node_coords_distributed->getLocalView(Tpetra::Access::ReadOnly); FOR_ALL_CLASS(elem_id, 0, rnum_elem, { - real_t lambda_dot_current; - real_t lambda_dot_next; size_t node_id; size_t corner_id; real_t inner_product; // std::cout << elem_mass(elem_id) <optimization_options.optimization_objective_regions(ivolume).contains(current_node_coords)){ + contained = true; + } + } + if(contained){ + for (int idim = 0; idim < num_dim; idim++) { + inner_product += elem_mass(elem_id) * current_element_velocities(ifill, idim) * current_element_velocities(ifill, idim); + } } } for (int inode = 0; inode < num_nodes_in_elem; inode++) { // compute gradient of local element contribution to v^t*M*v product corner_id = elem_id * num_nodes_in_elem + inode; + // division by design ratio recovers nominal element mass used in the gradient operator corner_value_storage(corner_id) = inner_product * global_dt / relative_element_densities(elem_id); } }); // end parallel for Kokkos::fence(); - - // accumulate node values from corner storage - // multiply - FOR_ALL_CLASS(node_id, 0, nlocal_nodes, { - size_t corner_id; - for (int icorner = 0; icorner < num_corners_in_node(node_id); icorner++) { - corner_id = corners_in_node(node_id, icorner); - design_gradients(node_id, 0) += -corner_value_storage(corner_id) / (double)num_nodes_in_elem / (double)num_nodes_in_elem; - } - }); // end parallel for - Kokkos::fence(); - } // end view scope - - // compute adjoint vector for this data point; use velocity midpoint - // view scope - { - const_vec_array current_element_internal_energy; - const_vec_array current_psi_adjoint_vector; - const_vec_array next_element_internal_energy; - const_vec_array next_psi_adjoint_vector; - if(use_solve_checkpoints){ - //note that these are assigned backwards because the adjoint loop progresses backwards - current_element_internal_energy = element_internal_energy_distributed->getLocalView(Tpetra::Access::ReadOnly); - current_psi_adjoint_vector = psi_adjoint_vector_distributed->getLocalView(Tpetra::Access::ReadOnly); - next_element_internal_energy = previous_element_internal_energy_distributed->getLocalView(Tpetra::Access::ReadOnly); - next_psi_adjoint_vector = previous_psi_adjoint_vector_distributed->getLocalView(Tpetra::Access::ReadOnly); - } - else{ - current_element_internal_energy = (*forward_solve_internal_energy_data)[cycle]->getLocalView(Tpetra::Access::ReadOnly); - current_psi_adjoint_vector = (*psi_adjoint_vector_data)[cycle]->getLocalView(Tpetra::Access::ReadOnly); - next_element_internal_energy = (*forward_solve_internal_energy_data)[cycle + 1]->getLocalView(Tpetra::Access::ReadOnly); - next_psi_adjoint_vector = (*psi_adjoint_vector_data)[cycle + 1]->getLocalView(Tpetra::Access::ReadOnly); - } - - FOR_ALL_CLASS(elem_id, 0, rnum_elem, { - real_t psi_dot_current; - real_t psi_dot_next; - size_t node_id; - size_t corner_id; - real_t inner_product; - - psi_dot_current = (next_psi_adjoint_vector(elem_id, 0) - current_psi_adjoint_vector(elem_id, 0)) / global_dt; - inner_product = elem_mass(elem_id) * (psi_dot_current + psi_dot_current) * current_element_internal_energy(elem_id, 0) / 2; - - for (int inode = 0; inode < num_nodes_in_elem; inode++) { - // compute gradient of local element contribution to v^t*M*v product - corner_id = elem_id * num_nodes_in_elem + inode; - corner_value_storage(corner_id) = inner_product * global_dt / relative_element_densities(elem_id); - } - }); // end parallel for - Kokkos::fence(); - - // accumulate node values from corner storage - // multiply - FOR_ALL_CLASS(node_id, 0, nlocal_nodes, { - size_t corner_id; - for (int icorner = 0; icorner < num_corners_in_node(node_id); icorner++) { - corner_id = corners_in_node(node_id, icorner); - design_gradients(node_id, 0) += -corner_value_storage(corner_id) / (double)num_nodes_in_elem; - } - }); // end parallel for - Kokkos::fence(); - } // end view scope - - if(cycle==0){ - // compute initial condition contribution from velocities - // view scope - { - const_vec_array current_velocity_vector; - const_vec_array current_adjoint_vector; - if(use_solve_checkpoints){ - current_velocity_vector = all_node_velocities_distributed->getLocalView(Tpetra::Access::ReadOnly); - current_adjoint_vector = all_adjoint_vector_distributed->getLocalView(Tpetra::Access::ReadOnly); - } - else{ - current_velocity_vector = (*forward_solve_velocity_data)[0]->getLocalView(Tpetra::Access::ReadOnly); - current_adjoint_vector = (*adjoint_vector_data)[0]->getLocalView(Tpetra::Access::ReadOnly); - } - + } + else{ FOR_ALL_CLASS(elem_id, 0, rnum_elem, { - real_t lambda_dot; size_t node_id; size_t corner_id; real_t inner_product; // std::cout << elem_mass(elem_id) <getLocalView(Tpetra::Access::ReadOnly); + current_adjoint_vector = all_adjoint_vector_distributed->getLocalView(Tpetra::Access::ReadOnly); + next_velocity_vector = previous_node_velocities_distributed->getLocalView(Tpetra::Access::ReadOnly); + next_adjoint_vector = previous_adjoint_vector_distributed->getLocalView(Tpetra::Access::ReadOnly); + } + else{ + current_velocity_vector = (*forward_solve_velocity_data)[cycle]->getLocalView(Tpetra::Access::ReadOnly); + current_adjoint_vector = (*adjoint_vector_data)[cycle]->getLocalView(Tpetra::Access::ReadOnly); + next_velocity_vector = (*forward_solve_velocity_data)[cycle + 1]->getLocalView(Tpetra::Access::ReadOnly); + next_adjoint_vector = (*adjoint_vector_data)[cycle + 1]->getLocalView(Tpetra::Access::ReadOnly); + } + + FOR_ALL_CLASS(elem_id, 0, rnum_elem, { + real_t lambda_dot_current; + real_t lambda_dot_next; + size_t node_id; + size_t corner_id; + real_t inner_product; + // std::cout << elem_mass(elem_id) <getLocalView(Tpetra::Access::ReadOnly); - current_psi_adjoint_vector = psi_adjoint_vector_distributed->getLocalView(Tpetra::Access::ReadOnly); + inner_product = 0; + for (int ifill = 0; ifill < num_nodes_in_elem; ifill++) { + node_id = nodes_in_elem(elem_id, ifill); + for (int idim = 0; idim < num_dim; idim++) { + lambda_dot_current = lambda_dot_next = (next_adjoint_vector(node_id, idim) - current_adjoint_vector(node_id, idim)) / global_dt; + // lambda_dot_current = current_velocity_vector(node_id,idim) + damping_constant*current_adjoint_vector(node_id,idim)/node_mass(node_id) - current_phi_adjoint_vector(node_id,idim)/node_mass(node_id); + // lambda_dot_next = next_velocity_vector(node_id,idim) + damping_constant*next_adjoint_vector(node_id,idim)/node_mass(node_id) - next_phi_adjoint_vector(node_id,idim)/node_mass(node_id); + inner_product += elem_mass(elem_id) * (lambda_dot_current + lambda_dot_current) * current_element_velocities(ifill, idim) / 2; + } } - else{ - current_element_internal_energy = (*forward_solve_internal_energy_data)[0]->getLocalView(Tpetra::Access::ReadOnly); - current_psi_adjoint_vector = (*psi_adjoint_vector_data)[0]->getLocalView(Tpetra::Access::ReadOnly); + + for (int inode = 0; inode < num_nodes_in_elem; inode++) { + // compute gradient of local element contribution to v^t*M*v product + corner_id = elem_id * num_nodes_in_elem + inode; + corner_value_storage(corner_id) = inner_product * global_dt / relative_element_densities(elem_id); } + }); // end parallel for + Kokkos::fence(); - // (*psi_adjoint_vector_data)[100]->describe(*fos,Teuchos::VERB_EXTREME); - FOR_ALL_CLASS(elem_id, 0, rnum_elem, { - real_t lambda_dot; - size_t node_id; - size_t corner_id; - real_t inner_product; - // std::cout << elem_mass(elem_id) <getLocalView(Tpetra::Access::ReadOnly); + current_psi_adjoint_vector = psi_adjoint_vector_distributed->getLocalView(Tpetra::Access::ReadOnly); + next_element_internal_energy = previous_element_internal_energy_distributed->getLocalView(Tpetra::Access::ReadOnly); + next_psi_adjoint_vector = previous_psi_adjoint_vector_distributed->getLocalView(Tpetra::Access::ReadOnly); + } + else{ + current_element_internal_energy = (*forward_solve_internal_energy_data)[cycle]->getLocalView(Tpetra::Access::ReadOnly); + current_psi_adjoint_vector = (*psi_adjoint_vector_data)[cycle]->getLocalView(Tpetra::Access::ReadOnly); + next_element_internal_energy = (*forward_solve_internal_energy_data)[cycle + 1]->getLocalView(Tpetra::Access::ReadOnly); + next_psi_adjoint_vector = (*psi_adjoint_vector_data)[cycle + 1]->getLocalView(Tpetra::Access::ReadOnly); + } - for (int inode = 0; inode < num_nodes_in_elem; inode++) { - // compute gradient of local element contribution to v^t*M*v product - corner_id = elem_id * num_nodes_in_elem + inode; - corner_value_storage(corner_id) = inner_product / relative_element_densities(elem_id); - } - }); // end parallel for - Kokkos::fence(); + FOR_ALL_CLASS(elem_id, 0, rnum_elem, { + real_t psi_dot_current; + real_t psi_dot_next; + size_t node_id; + size_t corner_id; + real_t inner_product; - // accumulate node values from corner storage - // multiply - FOR_ALL_CLASS(node_id, 0, nlocal_nodes, { - size_t corner_id; - for (int icorner = 0; icorner < num_corners_in_node(node_id); icorner++) { - corner_id = corners_in_node(node_id, icorner); - design_gradients(node_id, 0) += -corner_value_storage(corner_id) / (double)num_nodes_in_elem; - } - }); // end parallel for - Kokkos::fence(); - } // end view scope - } + psi_dot_current = (next_psi_adjoint_vector(elem_id, 0) - current_psi_adjoint_vector(elem_id, 0)) / global_dt; + inner_product = elem_mass(elem_id) * (psi_dot_current + psi_dot_current) * current_element_internal_energy(elem_id, 0) / 2; + + for (int inode = 0; inode < num_nodes_in_elem; inode++) { + // compute gradient of local element contribution to v^t*M*v product + corner_id = elem_id * num_nodes_in_elem + inode; + corner_value_storage(corner_id) = inner_product * global_dt / relative_element_densities(elem_id); + } + }); // end parallel for + Kokkos::fence(); + + // accumulate node values from corner storage + // multiply + FOR_ALL_CLASS(node_id, 0, nlocal_nodes, { + size_t corner_id; + for (int icorner = 0; icorner < num_corners_in_node(node_id); icorner++) { + corner_id = corners_in_node(node_id, icorner); + design_gradients(node_id, 0) += -corner_value_storage(corner_id) / (double)num_nodes_in_elem; + } + }); // end parallel for + Kokkos::fence(); + } // end view scope //compute terms with gradient of force and gradient of specific internal energy w.r.t design density // view scope @@ -1873,6 +1888,146 @@ void FEA_Module_SGH::compute_topology_optimization_gradient_tally(Teuchos::RCP design_densities_distributed, + Teuchos::RCP design_gradients_distributed, unsigned long cycle, real_t global_dt) +{ + size_t num_bdy_nodes = mesh->num_bdy_nodes; + const int num_dim = simparam->num_dims; + int num_corners = rnum_elem * num_nodes_in_elem; + bool element_constant_density = true; + size_t current_data_index, next_data_index; + CArrayKokkos current_element_velocities = CArrayKokkos(num_nodes_in_elem, num_dim); + CArrayKokkos current_element_adjoint = CArrayKokkos(num_nodes_in_elem, num_dim); + bool use_solve_checkpoints = simparam->optimization_options.use_solve_checkpoints; + + { // view scope + vec_array design_gradients = design_gradients_distributed->getLocalView(Tpetra::Access::ReadWrite); + const_vec_array design_densities = design_densities_distributed->getLocalView(Tpetra::Access::ReadOnly); + + // compute initial condition contribution from velocities + // view scope + { + const_vec_array current_velocity_vector; + const_vec_array current_adjoint_vector; + if(use_solve_checkpoints){ + current_velocity_vector = all_node_velocities_distributed->getLocalView(Tpetra::Access::ReadOnly); + current_adjoint_vector = all_adjoint_vector_distributed->getLocalView(Tpetra::Access::ReadOnly); + } + else{ + current_velocity_vector = (*forward_solve_velocity_data)[0]->getLocalView(Tpetra::Access::ReadOnly); + current_adjoint_vector = (*adjoint_vector_data)[0]->getLocalView(Tpetra::Access::ReadOnly); + } + + FOR_ALL_CLASS(elem_id, 0, rnum_elem, { + real_t lambda_dot; + size_t node_id; + size_t corner_id; + real_t inner_product; + // std::cout << elem_mass(elem_id) <getLocalView(Tpetra::Access::ReadOnly); + current_psi_adjoint_vector = psi_adjoint_vector_distributed->getLocalView(Tpetra::Access::ReadOnly); + } + else{ + current_element_internal_energy = (*forward_solve_internal_energy_data)[0]->getLocalView(Tpetra::Access::ReadOnly); + current_psi_adjoint_vector = (*psi_adjoint_vector_data)[0]->getLocalView(Tpetra::Access::ReadOnly); + } + + // (*psi_adjoint_vector_data)[100]->describe(*fos,Teuchos::VERB_EXTREME); + FOR_ALL_CLASS(elem_id, 0, rnum_elem, { + real_t lambda_dot; + size_t node_id; + size_t corner_id; + real_t inner_product; + // std::cout << elem_mass(elem_id) < design_densities_distributed, Teuchos::RCP design_gradients_distributed) { size_t num_bdy_nodes = mesh->num_bdy_nodes; - const DCArrayKokkos boundary = module_params->boundary; - const DCArrayKokkos material = simparam->material; const int num_dim = simparam->num_dims; int num_corners = rnum_elem * num_nodes_in_elem; real_t global_dt; From 8fd30824a8c168c2a672fa99b5eaa5177bca019f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CAdrian-Diaz=E2=80=9D?= <“adriandiaz1117@gmail.com”> Date: Mon, 19 Aug 2024 21:57:56 -0600 Subject: [PATCH 141/233] ENH: generalize objective gradient term tally --- src/Parallel-Solvers/FEA_Module.h | 2 +- .../Fierro_Optimization_Objective.hpp | 18 +- .../SGH_Solver/src/setup_sgh.cpp | 2 +- .../SGH_Solver/src/sgh_optimization.cpp | 359 ++++++------------ .../Kinetic_Energy_Minimize.h | 120 +++++- 5 files changed, 256 insertions(+), 245 deletions(-) diff --git a/src/Parallel-Solvers/FEA_Module.h b/src/Parallel-Solvers/FEA_Module.h index ecd33b2ad..defd5608a 100644 --- a/src/Parallel-Solvers/FEA_Module.h +++ b/src/Parallel-Solvers/FEA_Module.h @@ -239,7 +239,7 @@ class FEA_Module // Local FEA data including ghosts size_t nall_nodes; - size_t rnum_elem; + size_t rnum_elem, num_corners; // Global FEA data long long int num_nodes, num_elem; diff --git a/src/Parallel-Solvers/Optimization_Modules/Fierro_Optimization_Objective.hpp b/src/Parallel-Solvers/Optimization_Modules/Fierro_Optimization_Objective.hpp index 25928162b..db07deade 100644 --- a/src/Parallel-Solvers/Optimization_Modules/Fierro_Optimization_Objective.hpp +++ b/src/Parallel-Solvers/Optimization_Modules/Fierro_Optimization_Objective.hpp @@ -144,15 +144,21 @@ class FierroOptimizationObjective : public ROL::Objective { //contributes to rate of change of adjoint vector due to term with displacement gradient of objective virtual void displacement_gradient_adjoint_contribution(vec_array& adjoint_rate_vector, const DViewCArrayKokkos& node_mass, - const DViewCArrayKokkos& elem_mass, const DViewCArrayKokkos& node_vel, - const DViewCArrayKokkos& node_coords, const DViewCArrayKokkos& elem_sie, - const size_t& rk_level){} + const DViewCArrayKokkos& elem_mass, const DViewCArrayKokkos& node_vel, + const DViewCArrayKokkos& node_coords, const DViewCArrayKokkos& elem_sie, + const size_t& rk_level){} //contributes to rate of change of adjoint vector due to term with specific internal energy gradient of objective virtual void sie_gradient_adjoint_contribution(vec_array& adjoint_rate_vector, const DViewCArrayKokkos& node_mass, - const DViewCArrayKokkos& elem_mass, const DViewCArrayKokkos& node_vel, - const DViewCArrayKokkos& node_coords, const DViewCArrayKokkos& elem_sie, - const size_t& rk_level){} + const DViewCArrayKokkos& elem_mass, const DViewCArrayKokkos& node_vel, + const DViewCArrayKokkos& node_coords, const DViewCArrayKokkos& elem_sie, + const size_t& rk_level){} + + //contributes to gradient tally due to term with design density gradient of objective + virtual void density_gradient_term(vec_array& gradient_vector, const DViewCArrayKokkos& node_mass, + const DViewCArrayKokkos& elem_mass, const DViewCArrayKokkos& node_vel, + const DViewCArrayKokkos& node_coords, const DViewCArrayKokkos& elem_sie, + const size_t& rk_level, const real_t& global_dt = 0){} }; // class ObjectiveMMA diff --git a/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/setup_sgh.cpp b/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/setup_sgh.cpp index f86e6f1b2..bd3823ea8 100644 --- a/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/setup_sgh.cpp +++ b/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/setup_sgh.cpp @@ -81,7 +81,7 @@ void FEA_Module_SGH::setup() // shorthand names const size_t num_nodes = mesh->num_nodes; const size_t num_elems = mesh->num_elems; - const size_t num_corners = mesh->num_corners; + num_corners = mesh->num_corners; // --- make dual views of data on CPU and GPU --- // Notes: diff --git a/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/sgh_optimization.cpp b/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/sgh_optimization.cpp index 160c9d473..f9f9864a7 100644 --- a/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/sgh_optimization.cpp +++ b/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/sgh_optimization.cpp @@ -1406,133 +1406,134 @@ void FEA_Module_SGH::compute_topology_optimization_adjoint_full(Teuchos::RCP::iterator last_checkpoint = dynamic_checkpoint_set->end(); - --last_checkpoint; - const_vec_array current_velocity_vector = last_checkpoint->get_vector_pointer(V_DATA)->getLocalView(Tpetra::Access::ReadOnly); - const_vec_array current_coordinate_vector = last_checkpoint->get_vector_pointer(U_DATA)->getLocalView(Tpetra::Access::ReadOnly); - const_vec_array current_element_internal_energy = last_checkpoint->get_vector_pointer(SIE_DATA)->getLocalView(Tpetra::Access::ReadOnly); - - // compute gradients at midpoint - FOR_ALL_CLASS(node_gid, 0, nlocal_nodes + nghost_nodes, { - for (int idim = 0; idim < num_dim; idim++) { - node_vel(rk_level, node_gid, idim) = current_velocity_vector(node_gid, idim); - node_coords(rk_level, node_gid, idim) = current_coordinate_vector(node_gid, idim); - } - }); - Kokkos::fence(); - - FOR_ALL_CLASS(elem_gid, 0, rnum_elem, { - elem_sie(rk_level, elem_gid) = current_element_internal_energy(elem_gid, 0); - }); - Kokkos::fence(); + //RE-ENABLE STATE SETUP FOR T=0 if IVP term involves computed properties + // std::set::iterator last_checkpoint = dynamic_checkpoint_set->end(); + // --last_checkpoint; + // const_vec_array current_velocity_vector = last_checkpoint->get_vector_pointer(V_DATA)->getLocalView(Tpetra::Access::ReadOnly); + // const_vec_array current_coordinate_vector = last_checkpoint->get_vector_pointer(U_DATA)->getLocalView(Tpetra::Access::ReadOnly); + // const_vec_array current_element_internal_energy = last_checkpoint->get_vector_pointer(SIE_DATA)->getLocalView(Tpetra::Access::ReadOnly); + + // // compute gradients at midpoint + // FOR_ALL_CLASS(node_gid, 0, nlocal_nodes + nghost_nodes, { + // for (int idim = 0; idim < num_dim; idim++) { + // node_vel(rk_level, node_gid, idim) = current_velocity_vector(node_gid, idim); + // node_coords(rk_level, node_gid, idim) = current_coordinate_vector(node_gid, idim); + // } + // }); + // Kokkos::fence(); + + // FOR_ALL_CLASS(elem_gid, 0, rnum_elem, { + // elem_sie(rk_level, elem_gid) = current_element_internal_energy(elem_gid, 0); + // }); + // Kokkos::fence(); - // state_adjoint_time_end = Explicit_Solver_Pointer_->CPU_Time(); - // state_adjoint_time += state_adjoint_time_end-state_adjoint_time_start; - // set state according to phase data at this timestep - get_vol(); - - // ---- Calculate velocity diveregence for the element ---- - if (num_dim == 2) { - get_divergence2D(elem_div, - node_coords, - node_vel, - elem_vol); - } - else{ - get_divergence(elem_div, - node_coords, - node_vel, - elem_vol); - } // end if 2D - - // ---- Calculate elem state (den, pres, sound speed, stress) for next time step ---- - if (num_dim == 2) { - update_state2D(material, - *mesh, - node_coords, - node_vel, - elem_den, - elem_pres, - elem_stress, - elem_sspd, - elem_sie, - elem_vol, - elem_mass, - elem_mat_id, - 1.0, - cycle); - } - else{ - update_state(material, - *mesh, - node_coords, - node_vel, - elem_den, - elem_pres, - elem_stress, - elem_sspd, - elem_sie, - elem_vol, - elem_mass, - elem_mat_id, - 1.0, - cycle); - } + // // state_adjoint_time_end = Explicit_Solver_Pointer_->CPU_Time(); + // // state_adjoint_time += state_adjoint_time_end-state_adjoint_time_start; + // // set state according to phase data at this timestep + // get_vol(); + + // // ---- Calculate velocity diveregence for the element ---- + // if (num_dim == 2) { + // get_divergence2D(elem_div, + // node_coords, + // node_vel, + // elem_vol); + // } + // else{ + // get_divergence(elem_div, + // node_coords, + // node_vel, + // elem_vol); + // } // end if 2D + + // // ---- Calculate elem state (den, pres, sound speed, stress) for next time step ---- + // if (num_dim == 2) { + // update_state2D(material, + // *mesh, + // node_coords, + // node_vel, + // elem_den, + // elem_pres, + // elem_stress, + // elem_sspd, + // elem_sie, + // elem_vol, + // elem_mass, + // elem_mat_id, + // 1.0, + // cycle); + // } + // else{ + // update_state(material, + // *mesh, + // node_coords, + // node_vel, + // elem_den, + // elem_pres, + // elem_stress, + // elem_sspd, + // elem_sie, + // elem_vol, + // elem_mass, + // elem_mat_id, + // 1.0, + // cycle); + // } - if (num_dim == 2) { - get_force_sgh2D(material, - *mesh, - node_coords, - node_vel, - elem_den, - elem_sie, - elem_pres, - elem_stress, - elem_sspd, - elem_vol, - elem_div, - elem_mat_id, - corner_force, - 1.0, - cycle); - } - else{ - get_force_sgh(material, - *mesh, - node_coords, - node_vel, - elem_den, - elem_sie, - elem_pres, - elem_stress, - elem_sspd, - elem_vol, - elem_div, - elem_mat_id, - corner_force, - 1.0, - cycle); - } + // if (num_dim == 2) { + // get_force_sgh2D(material, + // *mesh, + // node_coords, + // node_vel, + // elem_den, + // elem_sie, + // elem_pres, + // elem_stress, + // elem_sspd, + // elem_vol, + // elem_div, + // elem_mat_id, + // corner_force, + // 1.0, + // cycle); + // } + // else{ + // get_force_sgh(material, + // *mesh, + // node_coords, + // node_vel, + // elem_den, + // elem_sie, + // elem_pres, + // elem_stress, + // elem_sspd, + // elem_vol, + // elem_div, + // elem_mat_id, + // corner_force, + // 1.0, + // cycle); + // } - if (have_loading_conditions) { - applied_forces(material, - *mesh, - node_coords, - node_vel, - node_mass, - elem_den, - elem_vol, - elem_div, - elem_mat_id, - corner_force, - 1.0, - cycle); - } + // if (have_loading_conditions) { + // applied_forces(material, + // *mesh, + // node_coords, + // node_vel, + // node_mass, + // elem_den, + // elem_vol, + // elem_div, + // elem_mat_id, + // corner_force, + // 1.0, + // cycle); + // } compute_topology_optimization_gradient_IVP(design_densities_distributed, cached_design_gradients_distributed, cycle, global_dt); } } - if(use_solve_checkpoints){ + if(use_solve_checkpoints&&cycle!=0){ //store current solution in the previous vector storage for the next timestep previous_adjoint_vector_distributed->assign(*all_adjoint_vector_distributed); previous_phi_adjoint_vector_distributed->assign(*all_phi_adjoint_vector_distributed); @@ -1562,12 +1563,10 @@ void FEA_Module_SGH::compute_topology_optimization_adjoint_full(Teuchos::RCP design_densities_distributed, Teuchos::RCP design_gradients_distributed, unsigned long cycle, real_t global_dt) { - size_t num_bdy_nodes = mesh->num_bdy_nodes; - const DCArrayKokkos boundary = module_params->boundary; const int num_dim = simparam->num_dims; int num_corners = rnum_elem * num_nodes_in_elem; - bool element_constant_density = true; size_t current_data_index, next_data_index; + const size_t rk_level = simparam->dynamic_options.rk_num_bins - 1; CArrayKokkos current_element_velocities = CArrayKokkos(num_nodes_in_elem, num_dim); CArrayKokkos current_element_adjoint = CArrayKokkos(num_nodes_in_elem, num_dim); bool use_solve_checkpoints = simparam->optimization_options.use_solve_checkpoints; @@ -1576,114 +1575,8 @@ void FEA_Module_SGH::compute_topology_optimization_gradient_tally(Teuchos::RCPgetLocalView(Tpetra::Access::ReadWrite); const_vec_array design_densities = design_densities_distributed->getLocalView(Tpetra::Access::ReadOnly); - // view scope - { - - const_vec_array current_velocity_vector; - const_vec_array next_velocity_vector; - if(use_solve_checkpoints){ - //note that these are assigned backwards because the adjoint loop progresses backwards - current_velocity_vector = all_node_velocities_distributed->getLocalView(Tpetra::Access::ReadOnly); - next_velocity_vector = previous_node_velocities_distributed->getLocalView(Tpetra::Access::ReadOnly); - } - else{ - current_velocity_vector = (*forward_solve_velocity_data)[cycle]->getLocalView(Tpetra::Access::ReadOnly); - next_velocity_vector = (*forward_solve_velocity_data)[cycle + 1]->getLocalView(Tpetra::Access::ReadOnly); - } - if(simparam->optimization_options.optimization_objective_regions.size()){ - int nobj_volumes = simparam->optimization_options.optimization_objective_regions.size(); - const_vec_array all_initial_node_coords = all_initial_node_coords_distributed->getLocalView(Tpetra::Access::ReadOnly); - FOR_ALL_CLASS(elem_id, 0, rnum_elem, { - size_t node_id; - size_t corner_id; - real_t inner_product; - // std::cout << elem_mass(elem_id) <optimization_options.optimization_objective_regions(ivolume).contains(current_node_coords)){ - contained = true; - } - } - if(contained){ - for (int idim = 0; idim < num_dim; idim++) { - inner_product += elem_mass(elem_id) * current_element_velocities(ifill, idim) * current_element_velocities(ifill, idim); - } - } - } - - for (int inode = 0; inode < num_nodes_in_elem; inode++) { - // compute gradient of local element contribution to v^t*M*v product - corner_id = elem_id * num_nodes_in_elem + inode; - // division by design ratio recovers nominal element mass used in the gradient operator - corner_value_storage(corner_id) = inner_product * global_dt / relative_element_densities(elem_id); - } - }); // end parallel for - Kokkos::fence(); - } - else{ - FOR_ALL_CLASS(elem_id, 0, rnum_elem, { - size_t node_id; - size_t corner_id; - real_t inner_product; - // std::cout << elem_mass(elem_id) <density_gradient_term(design_gradients, node_mass, elem_mass, node_vel, node_coords, elem_sie, rk_level, global_dt); // compute adjoint vector for this data point; use velocity midpoint // view scope @@ -1903,10 +1796,8 @@ void FEA_Module_SGH::compute_topology_optimization_gradient_tally(Teuchos::RCP design_densities_distributed, Teuchos::RCP design_gradients_distributed, unsigned long cycle, real_t global_dt) { - size_t num_bdy_nodes = mesh->num_bdy_nodes; const int num_dim = simparam->num_dims; int num_corners = rnum_elem * num_nodes_in_elem; - bool element_constant_density = true; size_t current_data_index, next_data_index; CArrayKokkos current_element_velocities = CArrayKokkos(num_nodes_in_elem, num_dim); CArrayKokkos current_element_adjoint = CArrayKokkos(num_nodes_in_elem, num_dim); @@ -2040,11 +1931,9 @@ void FEA_Module_SGH::compute_topology_optimization_gradient_IVP(Teuchos::RCP design_densities_distributed, Teuchos::RCP design_gradients_distributed) { - size_t num_bdy_nodes = mesh->num_bdy_nodes; const int num_dim = simparam->num_dims; int num_corners = rnum_elem * num_nodes_in_elem; real_t global_dt; - bool element_constant_density = true; size_t current_data_index, next_data_index; CArrayKokkos current_element_velocities = CArrayKokkos(num_nodes_in_elem, num_dim); CArrayKokkos current_element_adjoint = CArrayKokkos(num_nodes_in_elem, num_dim); diff --git a/src/Parallel-Solvers/Parallel-Explicit/Topology_Optimization/Kinetic_Energy_Minimize.h b/src/Parallel-Solvers/Parallel-Explicit/Topology_Optimization/Kinetic_Energy_Minimize.h index 7cb35cb70..08627ea93 100644 --- a/src/Parallel-Solvers/Parallel-Explicit/Topology_Optimization/Kinetic_Energy_Minimize.h +++ b/src/Parallel-Solvers/Parallel-Explicit/Topology_Optimization/Kinetic_Energy_Minimize.h @@ -139,7 +139,7 @@ typedef MV::dual_view_type dual_vec_array; int last_comm_step, last_solve_step, current_step; int num_dim; size_t nvalid_modules; - size_t nlocal_nodes; + size_t nlocal_nodes, num_corners, num_nodes_in_elem, rnum_elem; DViewCArrayKokkos node_mass, node_coords; std::vector valid_fea_modules; // modules that may interface with this objective function FEA_MODULE_TYPE set_module_type; @@ -164,6 +164,9 @@ typedef MV::dual_view_type dual_vec_array; node_mass = FEM_SGH_->node_mass; node_coords = FEM_SGH_->node_coords; nlocal_nodes = FEM_SGH_->nlocal_nodes; + num_corners = FEM_SGH_->num_corners; + num_nodes_in_elem = FEM_SGH_->num_nodes_in_elem; + rnum_elem = FEM_SGH_->rnum_elem; } if (fea_module->Module_Type == FEA_MODULE_TYPE::Dynamic_Elasticity) { FEM_Dynamic_Elasticity_ = dynamic_cast(fea_module); @@ -171,6 +174,9 @@ typedef MV::dual_view_type dual_vec_array; node_mass = FEM_Dynamic_Elasticity_->node_mass; node_coords = FEM_Dynamic_Elasticity_->node_coords; nlocal_nodes = FEM_Dynamic_Elasticity_->nlocal_nodes; + num_corners = FEM_Dynamic_Elasticity_->num_corners; + num_nodes_in_elem = FEM_Dynamic_Elasticity_->num_nodes_in_elem; + rnum_elem = FEM_Dynamic_Elasticity_->rnum_elem; } } } @@ -558,7 +564,117 @@ typedef MV::dual_view_type dual_vec_array; }); // end parallel for Kokkos::fence(); } - + + void density_gradient_term(vec_array& gradient_vector, const DViewCArrayKokkos& node_mass, + const DViewCArrayKokkos& elem_mass, const DViewCArrayKokkos& node_vel, + const DViewCArrayKokkos& node_coords, const DViewCArrayKokkos& elem_sie, + const size_t& rk_level, const real_t& global_dt = 0){ + size_t current_data_index, next_data_index; + CArrayKokkos current_element_velocities = CArrayKokkos(num_nodes_in_elem, num_dim); + CArrayKokkos current_element_adjoint = CArrayKokkos(num_nodes_in_elem, num_dim); + auto optimization_objective_regions = FEM_SGH_->simparam->optimization_options.optimization_objective_regions; + auto nodes_in_elem = FEM_SGH_->nodes_in_elem; + auto corner_value_storage = FEM_SGH_->corner_value_storage; + auto corners_in_node = FEM_SGH_->corners_in_node; + auto num_corners_in_node = FEM_SGH_->num_corners_in_node; + auto relative_element_densities = FEM_SGH_->relative_element_densities; + + // view scope + { + if(optimization_objective_regions.size()){ + int nobj_volumes = optimization_objective_regions.size(); + const_vec_array all_initial_node_coords = FEM_SGH_->all_initial_node_coords_distributed->getLocalView(Tpetra::Access::ReadOnly); + FOR_ALL_CLASS(elem_id, 0, rnum_elem, { + size_t node_id; + size_t corner_id; + real_t inner_product; + // std::cout << elem_mass(elem_id) < Date: Tue, 20 Aug 2024 18:30:45 -0600 Subject: [PATCH 142/233] ENH: check for <= zero density in region input --- src/Parallel-Solvers/Simulation_Parameters/Region.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/Parallel-Solvers/Simulation_Parameters/Region.h b/src/Parallel-Solvers/Simulation_Parameters/Region.h index 8322c098c..14bcacc16 100644 --- a/src/Parallel-Solvers/Simulation_Parameters/Region.h +++ b/src/Parallel-Solvers/Simulation_Parameters/Region.h @@ -47,6 +47,10 @@ struct Region : Yaml::DerivedFields, Yaml::ValidatedYaml, mat_fill_t { if (sie.has_value() == ie.has_value()){ throw Yaml::ConfigurationException("Specify values for exactly one of: energy (ie) or specific energy (sie)."); } + + if (den<=0){ + throw Yaml::ConfigurationException("Error: non-positive material density was specified for a region"); + } mat_fill_t::u = u.value_or(0); mat_fill_t::v = v.value_or(0); From f01fbc1d439cae03dbd28a3068c4fb83c22a1988 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CAdrian-Diaz=E2=80=9D?= <“adriandiaz1117@gmail.com”> Date: Tue, 20 Aug 2024 18:31:20 -0600 Subject: [PATCH 143/233] WIP: internal energy objective --- .../Parallel-Explicit/Explicit_Solver.cpp | 12 + .../Internal_Energy_Minimize.h | 582 ++++++++++++++++++ .../Optimization_Options.h | 4 +- .../Simulation_Parameters.h | 8 + 4 files changed, 605 insertions(+), 1 deletion(-) create mode 100644 src/Parallel-Solvers/Parallel-Explicit/Topology_Optimization/Internal_Energy_Minimize.h diff --git a/src/Parallel-Solvers/Parallel-Explicit/Explicit_Solver.cpp b/src/Parallel-Solvers/Parallel-Explicit/Explicit_Solver.cpp index 65cdb7d2a..f94d893a1 100644 --- a/src/Parallel-Solvers/Parallel-Explicit/Explicit_Solver.cpp +++ b/src/Parallel-Solvers/Parallel-Explicit/Explicit_Solver.cpp @@ -90,6 +90,7 @@ #include "Mass_Constraint.h" #include "Moment_of_Inertia_Constraint.h" #include "Kinetic_Energy_Minimize.h" +#include "Internal_Energy_Minimize.h" #include "MMA_Objective.hpp" #include "Area_Normals.h" @@ -1378,6 +1379,17 @@ void Explicit_Solver::setup_optimization_problem(){ obj = ROL::makePtr(this, nodal_density_flag); } } + if(TO_Module_List[imodule] == TO_MODULE_TYPE::Internal_Energy_Minimize){ + //debug print + *fos << " KINETIC ENERGY OBJECTIVE EXPECTS FEA MODULE INDEX " <(this, nodal_density_flag); + obj = ROL::makePtr(sub_obj, mma_bnd, x); + } + else{ + obj = ROL::makePtr(this, nodal_density_flag); + } + } else{ // TODO: Put validation earlier *fos << "PROGRAM IS ENDING DUE TO ERROR; UNDEFINED OBJECTIVE FUNCTION REQUESTED WITH NAME \"" diff --git a/src/Parallel-Solvers/Parallel-Explicit/Topology_Optimization/Internal_Energy_Minimize.h b/src/Parallel-Solvers/Parallel-Explicit/Topology_Optimization/Internal_Energy_Minimize.h new file mode 100644 index 000000000..d0c94d6d5 --- /dev/null +++ b/src/Parallel-Solvers/Parallel-Explicit/Topology_Optimization/Internal_Energy_Minimize.h @@ -0,0 +1,582 @@ +/********************************************************************************************** + © 2020. Triad National Security, LLC. All rights reserved. + This program was produced under U.S. Government contract 89233218CNA000001 for Los Alamos + National Laboratory (LANL), which is operated by Triad National Security, LLC for the U.S. + Department of Energy/National Nuclear Security Administration. All rights in the program are + reserved by Triad National Security, LLC, and the U.S. Department of Energy/National Nuclear + Security Administration. The Government is granted for itself and others acting on its behalf a + nonexclusive, paid-up, irrevocable worldwide license in this material to reproduce, prepare + derivative works, distribute copies to the public, perform publicly and display publicly, and + to permit others to do so. + This program is open source under the BSD-3 License. + Redistribution and use in source and binary forms, with or without modification, are permitted + provided that the following conditions are met: + 1. Redistributions of source code must retain the above copyright notice, this list of + conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, this list of + conditions and the following disclaimer in the documentation and/or other materials + provided with the distribution. + 3. Neither the name of the copyright holder nor the names of its contributors may be used + to endorse or promote products derived from this software without specific prior + written permission. + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; + OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + **********************************************************************************************/ + +#ifndef INTERNAL_ENERGY_MINIMIZE_TOPOPT_H +#define INTERNAL_ENERGY_MINIMIZE_TOPOPT_H + +#include "matar.h" +#include "elements.h" +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include "Tpetra_Details_makeColMap.hpp" +#include "Tpetra_Details_DefaultTypes.hpp" + +#include "ROL_Types.hpp" +#include +#include "ROL_Objective.hpp" +#include "Fierro_Optimization_Objective.hpp" +#include "ROL_Elementwise_Reduce.hpp" +#include "FEA_Module_SGH.h" +#include "Explicit_Solver.h" + +class InternalEnergyMinimize_TopOpt : public FierroOptimizationObjective +{ +typedef Tpetra::Map<>::local_ordinal_type LO; +typedef Tpetra::Map<>::global_ordinal_type GO; +typedef Tpetra::Map<>::node_type Node; +typedef Tpetra::Map Map; +typedef Tpetra::MultiVector MV; +typedef ROL::Vector V; +typedef ROL::TpetraMultiVector ROL_MV; + +using traits = Kokkos::ViewTraits; +using array_layout = typename traits::array_layout; +using execution_space = typename traits::execution_space; +using device_type = typename traits::device_type; +using memory_traits = typename traits::memory_traits; +using global_size_t = Tpetra::global_size_t; + +typedef Kokkos::View values_array; +typedef Kokkos::View global_indices_array; +typedef Kokkos::View indices_array; + +// typedef Kokkos::DualView::t_dev vec_array; +typedef MV::dual_view_type::t_dev vec_array; +typedef MV::dual_view_type::t_host host_vec_array; +typedef Kokkos::View const_host_vec_array; +typedef Kokkos::View const_vec_array; +typedef MV::dual_view_type dual_vec_array; + +private: + + Explicit_Solver* Explicit_Solver_Pointer_; + FEA_Module_SGH* FEM_SGH_; + ROL::Ptr ROL_Force; + ROL::Ptr ROL_Velocities; + ROL::Ptr ROL_Gradients; + Teuchos::RCP previous_gradients; + real_t initial_internal_energy; + real_t previous_objective_accumulation, objective_sign; + + bool first_init; //prevents ROL from calling init computation twice at start for the AL algorithm + + ///////////////////////////////////////////////////////////////////////////// + /// + /// \fn getVector + /// + /// \brief Retrieves ROL vector at desired location + /// + /// \param Pointer to desired ROL vector + /// + /// \return Returns ROL MV vector + /// + ///////////////////////////////////////////////////////////////////////////// + ROL::Ptr getVector(const V& x) + { + return dynamic_cast(x).getVector(); + } + + ///////////////////////////////////////////////////////////////////////////// + /// + /// \fn getVector + /// + /// \brief Retrieves ROL vector at desired location + /// + /// \param Pointer to desired ROL vector + /// + /// \return Returns const ROL MV vector + /// + ///////////////////////////////////////////////////////////////////////////// + ROL::Ptr getVector(V& x) + { + return dynamic_cast(x).getVector(); + } + +public: + bool nodal_density_flag_; + int last_comm_step, last_solve_step, current_step; + int num_dim; + size_t nvalid_modules; + size_t nlocal_nodes, num_corners, num_nodes_in_elem, rnum_elem; + DViewCArrayKokkos node_mass, node_coords; + std::vector valid_fea_modules; // modules that may interface with this objective function + FEA_MODULE_TYPE set_module_type; + // std::string my_fea_module = "SGH"; + + InternalEnergyMinimize_TopOpt(Explicit_Solver* Explicit_Solver_Pointer, bool nodal_density_flag) + { + Explicit_Solver_Pointer_ = Explicit_Solver_Pointer; + first_init = false; + valid_fea_modules.push_back(FEA_MODULE_TYPE::SGH); + valid_fea_modules.push_back(FEA_MODULE_TYPE::Dynamic_Elasticity); + nvalid_modules = valid_fea_modules.size(); + objective_sign = 1; + num_dim = Explicit_Solver_Pointer_->simparam.num_dims; + const Simulation_Parameters& simparam = Explicit_Solver_Pointer_->simparam; + for (const auto& fea_module : Explicit_Solver_Pointer_->fea_modules) { + for (int ivalid = 0; ivalid < nvalid_modules; ivalid++) { + if (fea_module->Module_Type == FEA_MODULE_TYPE::SGH) { + FEM_SGH_ = dynamic_cast(fea_module); + set_module_type = FEA_MODULE_TYPE::SGH; + node_mass = FEM_SGH_->node_mass; + node_coords = FEM_SGH_->node_coords; + nlocal_nodes = FEM_SGH_->nlocal_nodes; + num_corners = FEM_SGH_->num_corners; + num_nodes_in_elem = FEM_SGH_->num_nodes_in_elem; + rnum_elem = FEM_SGH_->rnum_elem; + } + } + } + nodal_density_flag_ = nodal_density_flag; + last_comm_step = last_solve_step = -1; + current_step = 0; + time_accumulation = true; + + previous_gradients = Teuchos::rcp(new MV(Explicit_Solver_Pointer_->map, 1)); + if(Explicit_Solver_Pointer_->simparam.optimization_options.maximize_flag){ + objective_sign = -1; + } + // ROL_Force = ROL::makePtr(FEM_->Global_Nodal_Forces); + if (set_module_type == FEA_MODULE_TYPE::SGH) { + ROL_Velocities = ROL::makePtr(FEM_SGH_->node_velocities_distributed); + } + } + + /* -------------------------------------------------------------------------------------- + Update solver state variables to synchronize with the current design variable vector, z + ----------------------------------------------------------------------------------------- */ + + void update(const ROL::Vector& z, ROL::UpdateType type, int iter = -1) + { + if (set_module_type == FEA_MODULE_TYPE::SGH) { + update_sgh(z, type, iter); + } + } + + /* -------------------------------------------------------------------------------------- + Update solver state variables to synchronize with the current design variable vector, z + ----------------------------------------------------------------------------------------- */ + + void update_sgh(const ROL::Vector& z, ROL::UpdateType type, int iter = -1) + { + // debug + std::ostream& out = std::cout; + Teuchos::RCP fos = Teuchos::fancyOStream(Teuchos::rcpFromRef(out)); + bool print_flag = false; + ROL::Ptr zp = getVector(z); //tpetra multivector wrapper on design vector + const_host_vec_array design_densities = zp->getLocalView(Tpetra::Access::ReadOnly); + + if (type == ROL::UpdateType::Initial) { + if(first_init){ + // This is the first call to update + if (Explicit_Solver_Pointer_->myrank == 0) { + *fos << "called SGH Initial" << std::endl; + } + + FEM_SGH_->comm_variables(zp); + FEM_SGH_->update_forward_solve(zp); + if(Explicit_Solver_Pointer_->myrank == 0){ + std::cout << "CURRENT TIME INTEGRAL OF INTERNAL ENERGY " << objective_accumulation << std::endl; + } + FEM_SGH_->compute_topology_optimization_adjoint_full(zp); + previous_objective_accumulation = objective_accumulation; + previous_gradients->assign(*(FEM_SGH_->cached_design_gradients_distributed)); + // initial design density data was already communicated for ghost nodes in init_design() + // decide to output current optimization state + // FEM_SGH_->Explicit_Solver_Pointer_->write_outputs(); + } + first_init = true; + } + else if (type == ROL::UpdateType::Accept) { + if (Explicit_Solver_Pointer_->myrank == 0) { + *fos << "called Accept" << std::endl; + } + + previous_objective_accumulation = objective_accumulation; + previous_gradients->assign(*(FEM_SGH_->cached_design_gradients_distributed)); + } + else if (type == ROL::UpdateType::Revert) { + // u_ was set to u=S(x) during a trial update + // and has been rejected as the new iterate + // Revert to cached value + // This is a new value of x + // communicate density variables for ghosts + if (Explicit_Solver_Pointer_->myrank == 0) { *fos << "called Revert" << std::endl; } + objective_accumulation = previous_objective_accumulation; + FEM_SGH_->cached_design_gradients_distributed->assign(*previous_gradients); + if(Explicit_Solver_Pointer_->myrank == 0){ + std::cout << "CURRENT TIME INTEGRAL OF INTERNAL ENERGY " << objective_accumulation << std::endl; + } + // FEM_SGH_->comm_variables(zp); + // // update deformation variables + // FEM_SGH_->update_forward_solve(zp); + // FEM_SGH_->compute_topology_optimization_adjoint_full(zp); + } + else if (type == ROL::UpdateType::Trial) { + // This is a new value of x + current_step++; + if(current_step%FEM_SGH_->simparam->optimization_options.optimization_output_freq==0){ + print_flag = true; + } + if (Explicit_Solver_Pointer_->myrank == 0) { + *fos << "called Trial" << std::endl; + } + // communicate density variables for ghosts + FEM_SGH_->comm_variables(zp); + // update deformation variables + FEM_SGH_->update_forward_solve(zp, print_flag); + + if(Explicit_Solver_Pointer_->myrank == 0){ + std::cout << "CURRENT TIME INTEGRAL OF INTERNAL ENERGY " << objective_accumulation << std::endl; + } + FEM_SGH_->compute_topology_optimization_adjoint_full(zp); + // decide to output current optimization state + // FEM_SGH_->Explicit_Solver_Pointer_->write_outputs(); + } + else{ // ROL::UpdateType::Temp + // This is a new value of x used for, + // e.g., finite-difference checks + if (Explicit_Solver_Pointer_->myrank == 0) { + *fos << "called Temp" << std::endl; + } + FEM_SGH_->comm_variables(zp); + FEM_SGH_->update_forward_solve(zp); + FEM_SGH_->compute_topology_optimization_adjoint_full(zp); + } + } + + /* -------------------------------------------------------------------------------------- + Compute time integral contribution for this objective function form + ----------------------------------------------------------------------------------------- */ + void step_accumulation(const real_t& dt, const size_t& cycle, const size_t& rk_level) { + + const_vec_array node_velocities_interface; + const_vec_array previous_node_velocities_interface; + bool use_solve_checkpoints = FEM_SGH_->simparam->optimization_options.use_solve_checkpoints; + if(use_solve_checkpoints){ + node_velocities_interface = FEM_SGH_->all_node_velocities_distributed->getLocalView(Tpetra::Access::ReadOnly); + previous_node_velocities_interface = FEM_SGH_->previous_node_velocities_distributed->getLocalView(Tpetra::Access::ReadOnly); + } + else{ + auto forward_solve_velocity_data = FEM_SGH_->forward_solve_velocity_data; + node_velocities_interface = (*forward_solve_velocity_data)[cycle + 1]->getLocalView(Tpetra::Access::ReadOnly); + previous_node_velocities_interface = (*forward_solve_velocity_data)[cycle]->getLocalView(Tpetra::Access::ReadOnly); + } + + double KE_sum = 0.0; + double KE_loc_sum = 0.0; + // extensive KE + if(FEM_SGH_->simparam->optimization_options.optimization_objective_regions.size()){ + int nobj_volumes = FEM_SGH_->simparam->optimization_options.optimization_objective_regions.size(); + auto optimization_objective_regions = FEM_SGH_->simparam->optimization_options.optimization_objective_regions; + const_vec_array all_initial_node_coords = FEM_SGH_->all_initial_node_coords_distributed->getLocalView(Tpetra::Access::ReadOnly); + REDUCE_SUM_CLASS(node_gid, 0, nlocal_nodes, KE_loc_sum, { + double ke = 0; + double current_node_coords[3]; + bool contained = false; + current_node_coords[0] = all_initial_node_coords(node_gid, 0); + current_node_coords[1] = all_initial_node_coords(node_gid, 1); + current_node_coords[2] = all_initial_node_coords(node_gid, 2); + for(int ivolume = 0; ivolume < nobj_volumes; ivolume++){ + if(optimization_objective_regions(ivolume).contains(current_node_coords)){ + contained = true; + } + } + if(contained){ + for (size_t dim = 0; dim < num_dim; dim++) { + // midpoint integration approximation + ke += (node_velocities_interface(node_gid, dim) + previous_node_velocities_interface(node_gid, dim)) * + (node_velocities_interface(node_gid, dim) + previous_node_velocities_interface(node_gid, dim)) / 4; // 1/2 at end + } // end for + } + + if (num_dim == 2) { + KE_loc_sum += node_mass(node_gid) * node_coords(rk_level, node_gid, 1) * ke; + } + else{ + KE_loc_sum += node_mass(node_gid) * ke; + } + }, KE_sum); + } + else{ + REDUCE_SUM_CLASS(node_gid, 0, nlocal_nodes, KE_loc_sum, { + double ke = 0; + for (size_t dim = 0; dim < num_dim; dim++) { + // midpoint integration approximation + ke += (node_velocities_interface(node_gid, dim) + previous_node_velocities_interface(node_gid, dim)) * + (node_velocities_interface(node_gid, dim) + previous_node_velocities_interface(node_gid, dim)) / 4; // 1/2 at end + } // end for + + if (num_dim == 2) { + KE_loc_sum += node_mass(node_gid) * node_coords(rk_level, node_gid, 1) * ke; + } + else{ + KE_loc_sum += node_mass(node_gid) * ke; + } + }, KE_sum); + } + Kokkos::fence(); + KE_sum = 0.5 * KE_sum; + objective_accumulation += KE_sum * dt; + } + + /* -------------------------------------------------------------------------------------- + Update objective value with the current design variable vector, z + ----------------------------------------------------------------------------------------- */ + + real_t value(const ROL::Vector& z, real_t& tol) + { + // std::cout << "Started obj value on task " <myrank << std::endl; + ROL::Ptr zp = getVector(z); + real_t c = 0.0; + + // debug print + // std::ostream &out = std::cout; + // Teuchos::RCP fos = Teuchos::fancyOStream(Teuchos::rcpFromRef(out)); + // if(FEM_->myrank==0) + // *fos << "Value function z:" << std::endl; + // zp->describe(*fos,Teuchos::VERB_EXTREME); + // *fos << std::endl; + // std::fflush(stdout); + + const_host_vec_array design_densities = zp->getLocalView(Tpetra::Access::ReadOnly); + // communicate ghosts and solve for nodal degrees of freedom as a function of the current design variables + /* + if(last_comm_step!=current_step){ + FEM_->comm_variables(zp); + last_comm_step = current_step; + } + + if(last_solve_step!=current_step){ + //std::cout << "UPDATED velocities" << std::endl; + FEM_->update_linear_solve(zp); + last_solve_step = current_step; + } + */ + // debug print of velocities + // std::ostream &out = std::cout; + // Teuchos::RCP fos = Teuchos::fancyOStream(Teuchos::rcpFromRef(out)); + // if(FEM_->myrank==0) + // *fos << "Displacement data :" << std::endl; + // FEM_->node_velocities_distributed->describe(*fos,Teuchos::VERB_EXTREME); + // *fos << std::endl; + // std::fflush(stdout); + + std::cout.precision(10); + + // std::cout << "Ended obj value on task " <myrank << std::endl; + return objective_sign*objective_accumulation; + } + + /* -------------------------------------------------------------------------------------- + Update gradient vector (g) with the current design variable vector, z + ----------------------------------------------------------------------------------------- */ + + void gradient(ROL::Vector& g, const ROL::Vector& z, real_t& tol) + { + // std::cout << "Started obj gradient on task " <myrank << std::endl; + // get Tpetra multivector pointer from the ROL vector + ROL::Ptr zp = getVector(z); //pointer to design vector + ROL::Ptr gp = getVector(g); //pointer to gradient vector + + // communicate ghosts and solve for nodal degrees of freedom as a function of the current design variables + // FEM_->gradient_print_sync=1; + // FEM_->gradient_print_sync=0; + // get local view of the data + + if (set_module_type == FEA_MODULE_TYPE::SGH) { + FEM_SGH_->compute_topology_optimization_gradient_full(zp, gp); + } + gp->scale(objective_sign); + // debug print of gradient + // std::ostream &out = std::cout; + // Teuchos::RCP fos = Teuchos::fancyOStream(Teuchos::rcpFromRef(out)); + // if(FEM_->myrank==0) + // *fos << "Gradient data :" << std::endl; + // gp->describe(*fos,Teuchos::VERB_EXTREME); + // *fos << std::endl; + // std::fflush(stdout); + // for(int i = 0; i < FEM_->nlocal_nodes; i++){ + // objective_gradients(i,0) *= -1; + // } + + // std::cout << "Objective Gradient called"<< std::endl; + // debug print of design variables + // std::ostream &out = std::cout; + // Teuchos::RCP fos = Teuchos::fancyOStream(Teuchos::rcpFromRef(out)); + // if(FEM_->myrank==0) + // *fos << "Gradient data :" << std::endl; + // gp->describe(*fos,Teuchos::VERB_EXTREME); + + // *fos << std::endl; + // std::fflush(stdout); + // std::cout << "ended obj gradient on task " <myrank << std::endl; + } + + //contributes to rate of change of adjoint vector due to term with velocity gradient of objective + void velocity_gradient_adjoint_contribution(vec_array& adjoint_rate_vector, const DViewCArrayKokkos& node_mass, + const DViewCArrayKokkos& elem_mass, const DViewCArrayKokkos& node_vel, + const DViewCArrayKokkos& node_coords, const DViewCArrayKokkos& elem_sie, + const size_t& rk_level){ + + + FOR_ALL_CLASS(node_gid, 0, nlocal_nodes, { + for (int idim = 0; idim < num_dim; idim++) { + adjoint_rate_vector(node_gid, idim) = node_mass(node_gid)*node_vel(rk_level, node_gid, idim); + } + }); // end parallel for + Kokkos::fence(); + } + + void density_gradient_term(vec_array& gradient_vector, const DViewCArrayKokkos& node_mass, + const DViewCArrayKokkos& elem_mass, const DViewCArrayKokkos& node_vel, + const DViewCArrayKokkos& node_coords, const DViewCArrayKokkos& elem_sie, + const size_t& rk_level, const real_t& global_dt = 0){ + size_t current_data_index, next_data_index; + CArrayKokkos current_element_velocities = CArrayKokkos(num_nodes_in_elem, num_dim); + CArrayKokkos current_element_adjoint = CArrayKokkos(num_nodes_in_elem, num_dim); + auto optimization_objective_regions = FEM_SGH_->simparam->optimization_options.optimization_objective_regions; + auto nodes_in_elem = FEM_SGH_->nodes_in_elem; + auto corner_value_storage = FEM_SGH_->corner_value_storage; + auto corners_in_node = FEM_SGH_->corners_in_node; + auto num_corners_in_node = FEM_SGH_->num_corners_in_node; + auto relative_element_densities = FEM_SGH_->relative_element_densities; + + // view scope + { + if(optimization_objective_regions.size()){ + int nobj_volumes = optimization_objective_regions.size(); + const_vec_array all_initial_node_coords = FEM_SGH_->all_initial_node_coords_distributed->getLocalView(Tpetra::Access::ReadOnly); + FOR_ALL_CLASS(elem_id, 0, rnum_elem, { + size_t node_id; + size_t corner_id; + real_t inner_product; + // std::cout << elem_mass(elem_id) < Date: Wed, 21 Aug 2024 00:05:16 -0600 Subject: [PATCH 144/233] WIP: internal energy objective --- .../SGH_Solver/src/FEA_Module_SGH.cpp | 2 + .../Internal_Energy_Minimize.h | 79 ++++++++----------- 2 files changed, 36 insertions(+), 45 deletions(-) diff --git a/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/FEA_Module_SGH.cpp b/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/FEA_Module_SGH.cpp index 1a429d02a..609086e58 100644 --- a/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/FEA_Module_SGH.cpp +++ b/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/FEA_Module_SGH.cpp @@ -1220,6 +1220,8 @@ void FEA_Module_SGH::sgh_solve() if(use_solve_checkpoints&&optimization_on){ previous_node_velocities_distributed->assign(*all_node_velocities_distributed); + previous_node_coords_distributed->assign(*all_node_coords_distributed); + previous_element_internal_energy_distributed->assign(*element_internal_energy_distributed); } // integrate solution forward in time diff --git a/src/Parallel-Solvers/Parallel-Explicit/Topology_Optimization/Internal_Energy_Minimize.h b/src/Parallel-Solvers/Parallel-Explicit/Topology_Optimization/Internal_Energy_Minimize.h index d0c94d6d5..1cff7d4b5 100644 --- a/src/Parallel-Solvers/Parallel-Explicit/Topology_Optimization/Internal_Energy_Minimize.h +++ b/src/Parallel-Solvers/Parallel-Explicit/Topology_Optimization/Internal_Energy_Minimize.h @@ -289,74 +289,62 @@ typedef MV::dual_view_type dual_vec_array; ----------------------------------------------------------------------------------------- */ void step_accumulation(const real_t& dt, const size_t& cycle, const size_t& rk_level) { - const_vec_array node_velocities_interface; - const_vec_array previous_node_velocities_interface; + const_vec_array current_elem_sie; + const_vec_array previous_elem_sie; + size_t nlocal_elem_non_overlapping = FEM_SGH_->Explicit_Solver_Pointer_->nlocal_elem_non_overlapping; + auto nodes_in_elem = FEM_SGH_->nodes_in_elem; + auto elem_mass = FEM_SGH_->elem_mass; bool use_solve_checkpoints = FEM_SGH_->simparam->optimization_options.use_solve_checkpoints; if(use_solve_checkpoints){ - node_velocities_interface = FEM_SGH_->all_node_velocities_distributed->getLocalView(Tpetra::Access::ReadOnly); - previous_node_velocities_interface = FEM_SGH_->previous_node_velocities_distributed->getLocalView(Tpetra::Access::ReadOnly); + current_elem_sie = FEM_SGH_->element_internal_energy_distributed->getLocalView(Tpetra::Access::ReadOnly); + previous_elem_sie = FEM_SGH_->previous_element_internal_energy_distributed->getLocalView(Tpetra::Access::ReadOnly); } else{ - auto forward_solve_velocity_data = FEM_SGH_->forward_solve_velocity_data; - node_velocities_interface = (*forward_solve_velocity_data)[cycle + 1]->getLocalView(Tpetra::Access::ReadOnly); - previous_node_velocities_interface = (*forward_solve_velocity_data)[cycle]->getLocalView(Tpetra::Access::ReadOnly); + auto forward_solve_internal_energy_data = FEM_SGH_->forward_solve_internal_energy_data; + current_elem_sie = (*forward_solve_internal_energy_data)[cycle + 1]->getLocalView(Tpetra::Access::ReadOnly); + previous_elem_sie = (*forward_solve_internal_energy_data)[cycle]->getLocalView(Tpetra::Access::ReadOnly); } - double KE_sum = 0.0; - double KE_loc_sum = 0.0; + double IE_sum = 0.0; + double IE_loc_sum = 0.0; // extensive KE if(FEM_SGH_->simparam->optimization_options.optimization_objective_regions.size()){ int nobj_volumes = FEM_SGH_->simparam->optimization_options.optimization_objective_regions.size(); auto optimization_objective_regions = FEM_SGH_->simparam->optimization_options.optimization_objective_regions; const_vec_array all_initial_node_coords = FEM_SGH_->all_initial_node_coords_distributed->getLocalView(Tpetra::Access::ReadOnly); - REDUCE_SUM_CLASS(node_gid, 0, nlocal_nodes, KE_loc_sum, { + REDUCE_SUM_CLASS(elem_gid, 0, nlocal_elem_non_overlapping, IE_loc_sum, { double ke = 0; - double current_node_coords[3]; + int node_id; + double current_elem_coords[3]; bool contained = false; - current_node_coords[0] = all_initial_node_coords(node_gid, 0); - current_node_coords[1] = all_initial_node_coords(node_gid, 1); - current_node_coords[2] = all_initial_node_coords(node_gid, 2); + current_elem_coords[0] = 0; + current_elem_coords[1] = 0; + current_elem_coords[2] = 0; + for(int inode=0; inode< num_nodes_in_elem; inode++){ + node_id = nodes_in_elem(elem_gid, inode); + current_elem_coords[0] += all_initial_node_coords(node_id, 0)/num_nodes_in_elem; + current_elem_coords[1] += all_initial_node_coords(node_id, 1)/num_nodes_in_elem; + current_elem_coords[2] += all_initial_node_coords(node_id, 2)/num_nodes_in_elem; + } for(int ivolume = 0; ivolume < nobj_volumes; ivolume++){ - if(optimization_objective_regions(ivolume).contains(current_node_coords)){ + if(optimization_objective_regions(ivolume).contains(current_elem_coords)){ contained = true; } } if(contained){ - for (size_t dim = 0; dim < num_dim; dim++) { - // midpoint integration approximation - ke += (node_velocities_interface(node_gid, dim) + previous_node_velocities_interface(node_gid, dim)) * - (node_velocities_interface(node_gid, dim) + previous_node_velocities_interface(node_gid, dim)) / 4; // 1/2 at end - } // end for + IE_loc_sum += elem_mass(elem_gid) * 0.5 * (current_elem_sie(elem_gid,0)+previous_elem_sie(elem_gid,0)); } - if (num_dim == 2) { - KE_loc_sum += node_mass(node_gid) * node_coords(rk_level, node_gid, 1) * ke; - } - else{ - KE_loc_sum += node_mass(node_gid) * ke; - } - }, KE_sum); + + }, IE_sum); } else{ - REDUCE_SUM_CLASS(node_gid, 0, nlocal_nodes, KE_loc_sum, { - double ke = 0; - for (size_t dim = 0; dim < num_dim; dim++) { - // midpoint integration approximation - ke += (node_velocities_interface(node_gid, dim) + previous_node_velocities_interface(node_gid, dim)) * - (node_velocities_interface(node_gid, dim) + previous_node_velocities_interface(node_gid, dim)) / 4; // 1/2 at end - } // end for - - if (num_dim == 2) { - KE_loc_sum += node_mass(node_gid) * node_coords(rk_level, node_gid, 1) * ke; - } - else{ - KE_loc_sum += node_mass(node_gid) * ke; - } - }, KE_sum); + REDUCE_SUM_CLASS(elem_gid, 0, nlocal_elem_non_overlapping, IE_loc_sum, { + IE_loc_sum += elem_mass(elem_gid) * 0.5 * (current_elem_sie(elem_gid,0)+previous_elem_sie(elem_gid,0)); + }, IE_sum); } Kokkos::fence(); - KE_sum = 0.5 * KE_sum; - objective_accumulation += KE_sum * dt; + objective_accumulation += IE_sum * dt; } /* -------------------------------------------------------------------------------------- @@ -453,7 +441,7 @@ typedef MV::dual_view_type dual_vec_array; } //contributes to rate of change of adjoint vector due to term with velocity gradient of objective - void velocity_gradient_adjoint_contribution(vec_array& adjoint_rate_vector, const DViewCArrayKokkos& node_mass, + void sie_gradient_adjoint_contribution(vec_array& adjoint_rate_vector, const DViewCArrayKokkos& node_mass, const DViewCArrayKokkos& elem_mass, const DViewCArrayKokkos& node_vel, const DViewCArrayKokkos& node_coords, const DViewCArrayKokkos& elem_sie, const size_t& rk_level){ @@ -467,6 +455,7 @@ typedef MV::dual_view_type dual_vec_array; Kokkos::fence(); } + //contribution to gradient tally from objective w.r.t design density void density_gradient_term(vec_array& gradient_vector, const DViewCArrayKokkos& node_mass, const DViewCArrayKokkos& elem_mass, const DViewCArrayKokkos& node_vel, const DViewCArrayKokkos& node_coords, const DViewCArrayKokkos& elem_sie, From 55d0f134b6b492d70c2ad05e1b95bcbc21e54c7f Mon Sep 17 00:00:00 2001 From: Nathaniel Morgan <47866137+nathanielmorgan@users.noreply.github.com> Date: Wed, 21 Aug 2024 09:05:46 -0600 Subject: [PATCH 145/233] Add Andrew Morgan's fix to regression script to ensure file times aligns with the reference files (#221) Co-authored-by: Nathaniel Morgan --- .../regression_tests/test_refactor.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/single-node-refactor/regression_tests/test_refactor.py b/single-node-refactor/regression_tests/test_refactor.py index cf723913f..ebca0544f 100644 --- a/single-node-refactor/regression_tests/test_refactor.py +++ b/single-node-refactor/regression_tests/test_refactor.py @@ -72,8 +72,14 @@ def extract_state_data(filename): # Compare to standard results pattern = "state/mat_pt_state*" - file = glob.glob(pattern) - file_path = file[-1] + files = glob.glob(pattern) + + try: fileIndex = list(file.split("/")[-1] for file in files).index(standard_results[j].split("/")[-1]) + except ValueError: + print("state file in test not found\n") + exit() # no solution + + file_path = files[fileIndex] print(file_path) print(standard_results[j]) @@ -86,12 +92,15 @@ def extract_state_data(filename): true = [row[k] for row in standard_data] + for l in range(len(calc)): diff = calc[l] - true[l] # print(diff) if abs(diff) > 1E-11: print(diff) + print(calc[l]) + print(true[l]) raise Exception("Results do not match for "+header1[k]+" for the "+tests[j]+" test!") # Remove simulated state dump From cec75172e0cc0c5a51e46556f1d8e7fe7a15945b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CAdrian-Diaz=E2=80=9D?= <“adriandiaz1117@gmail.com”> Date: Wed, 21 Aug 2024 10:07:32 -0600 Subject: [PATCH 146/233] BUG: optimization if check --- src/Parallel-Solvers/Parallel-Explicit/Explicit_Solver.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Parallel-Solvers/Parallel-Explicit/Explicit_Solver.cpp b/src/Parallel-Solvers/Parallel-Explicit/Explicit_Solver.cpp index f94d893a1..d84a736b1 100644 --- a/src/Parallel-Solvers/Parallel-Explicit/Explicit_Solver.cpp +++ b/src/Parallel-Solvers/Parallel-Explicit/Explicit_Solver.cpp @@ -1379,7 +1379,7 @@ void Explicit_Solver::setup_optimization_problem(){ obj = ROL::makePtr(this, nodal_density_flag); } } - if(TO_Module_List[imodule] == TO_MODULE_TYPE::Internal_Energy_Minimize){ + else if(TO_Module_List[imodule] == TO_MODULE_TYPE::Internal_Energy_Minimize){ //debug print *fos << " KINETIC ENERGY OBJECTIVE EXPECTS FEA MODULE INDEX " < Date: Wed, 21 Aug 2024 12:05:11 -0500 Subject: [PATCH 147/233] BUG: Fix error in regression tests --- .../standard_inputs/Sedov_Read_Ensight.yaml | 8 ++++---- single-node-refactor/regression_tests/test_refactor.py | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/single-node-refactor/regression_tests/standard_inputs/Sedov_Read_Ensight.yaml b/single-node-refactor/regression_tests/standard_inputs/Sedov_Read_Ensight.yaml index c748d2c1e..80a77cbee 100644 --- a/single-node-refactor/regression_tests/standard_inputs/Sedov_Read_Ensight.yaml +++ b/single-node-refactor/regression_tests/standard_inputs/Sedov_Read_Ensight.yaml @@ -20,12 +20,12 @@ output_options: solver_options: - solver: - method: SGH + method: SGH3D boundary_conditions: # Tag X plane - boundary_condition: - solver: SGH + solver: SGH3D geometry: x_plane direction: x_dir value: 0.0 @@ -34,7 +34,7 @@ boundary_conditions: # Tag Y plane - boundary_condition: - solver: SGH + solver: SGH3D geometry: y_plane direction: y_dir value: 0.0 @@ -42,7 +42,7 @@ boundary_conditions: # Tag z plane - boundary_condition: - solver: SGH + solver: SGH3D geometry: z_plane direction: z_dir value: 0.0 diff --git a/single-node-refactor/regression_tests/test_refactor.py b/single-node-refactor/regression_tests/test_refactor.py index ebca0544f..fbf3b9988 100644 --- a/single-node-refactor/regression_tests/test_refactor.py +++ b/single-node-refactor/regression_tests/test_refactor.py @@ -76,8 +76,8 @@ def extract_state_data(filename): try: fileIndex = list(file.split("/")[-1] for file in files).index(standard_results[j].split("/")[-1]) except ValueError: - print("state file in test not found\n") - exit() # no solution + raise ValueError("State file not found for "+tests[j]+" test") + file_path = files[fileIndex] From 8e7fc266156a0ad9c62624358b288f7df827f590 Mon Sep 17 00:00:00 2001 From: Jacob Moore Date: Wed, 21 Aug 2024 12:09:18 -0500 Subject: [PATCH 148/233] ENH: Add regression test for SGH RZ solver --- .../standard_inputs/Sedov_rz_polar.yaml | 113 ++++++++++++++++ .../state/mat_pt_state_t_1.0000e+00.txt | 122 ++++++++++++++++++ .../regression_tests/test_refactor.py | 2 +- 3 files changed, 236 insertions(+), 1 deletion(-) create mode 100644 single-node-refactor/regression_tests/standard_inputs/Sedov_rz_polar.yaml create mode 100644 single-node-refactor/regression_tests/standard_results/Sedov_rz_polar/state/mat_pt_state_t_1.0000e+00.txt diff --git a/single-node-refactor/regression_tests/standard_inputs/Sedov_rz_polar.yaml b/single-node-refactor/regression_tests/standard_inputs/Sedov_rz_polar.yaml new file mode 100644 index 000000000..6cb90e8de --- /dev/null +++ b/single-node-refactor/regression_tests/standard_inputs/Sedov_rz_polar.yaml @@ -0,0 +1,113 @@ +# num_dims: 3 + +dynamic_options: + time_final: 1.0 + dt_min: 1.e-8 + dt_max: 1.e-2 + dt_start: 1.e-5 + cycle_stop: 10000 + + +# mesh_options: +# source: file +# file_path: /var/tmp/repos/Fierro/fork/Fierro/testing/meshes/mesh_Sedov_8.geo + +mesh_options: + source: generate + num_dims: 2 + type: polar + origin: [0.0, 0.0] + inner_radius: 0.025 + outer_radius: 1.2 + starting_angle: 0 + ending_angle: 90 + num_radial_elems: 12 + num_angular_elems: 10 + + + +output_options: + timer_output_level: thorough + output_file_format: state #ensight state + graphics_time_step: 0.25 + #graphics_iteration_step: 2 + +solver_options: + - solver: + method: SGHRZ + # solver_vars: + # - blah + # - blah + # - blah + +boundary_conditions: + # Tag X plane + - boundary_condition: + solver: SGHRZ + geometry: x_plane + direction: x_dir + value: 0.0 + type: reflected_velocity + + + # Tag Y plane + - boundary_condition: + solver: SGHRZ + geometry: y_plane + direction: y_dir + value: 0.0 + type: reflected_velocity + + # Tag inner circle + - boundary_condition: + solver: SGHRZ + geometry: cylinder + value: 0.025 + type: zero_velocity + + + +materials: + - material: + id: 0 + eos_model_type: decoupled + eos_model: gamma_law_gas + # strength_model: none + q1: 1.0 + q2: 1.333 + q1ex: 1.0 + q2ex: 1.333 + eos_global_vars: + - 1.666666666666667 + - 1.0E-14 + - 1.0 + +regions: + - fill_volume: + type: global + material_id: 0 + den: 1.0 + sie: 1.e-10 + velocity: cartesian + u: 0.0 + v: 0.0 + w: 0.0 + + + + # energy source initial conditions + - fill_volume: + type: sphere + origin: [0.0, 0.0, 0.0] + radius1: 0.0 + radius2: 0.1 + material_id: 0 + den: 1.0 + # ie: 0.25833839995946534 + sie: 119.65 # (0.5*0.49339/(mat_fill(1).den*vol)) + velocity: cartesian + u: 0.0 + v: 0.0 + w: 0.0 + + diff --git a/single-node-refactor/regression_tests/standard_results/Sedov_rz_polar/state/mat_pt_state_t_1.0000e+00.txt b/single-node-refactor/regression_tests/standard_results/Sedov_rz_polar/state/mat_pt_state_t_1.0000e+00.txt new file mode 100644 index 000000000..8b51cb9c5 --- /dev/null +++ b/single-node-refactor/regression_tests/standard_results/Sedov_rz_polar/state/mat_pt_state_t_1.0000e+00.txt @@ -0,0 +1,122 @@ +# state dump file +# x y z radius_2D radius_3D den pres sie sspd vol mass +3.839697070260e-01 3.021907131190e-02 0.000000000000e+00 3.851570175715e-01 3.851570175715e-01 4.405588188616e-03 6.296622851599e-02 2.143678127824e+01 4.880634278779e+00 1.704796590111e-03 7.510631721384e-06 +7.561749648887e-01 5.951226039479e-02 0.000000000000e+00 7.585132079679e-01 7.585132079679e-01 1.949154710773e-01 6.266134716350e-02 4.821801276324e-01 7.319831479982e-01 1.864921717822e-04 3.635020951515e-05 +7.843328541414e-01 6.172833433955e-02 0.000000000000e+00 7.867581670030e-01 7.867581670030e-01 3.812699515498e-01 6.452508937058e-02 2.538345629524e-01 5.310952198678e-01 2.312369173204e-04 8.816368826327e-05 +8.173130661801e-01 6.432393331843e-02 0.000000000000e+00 8.198403604033e-01 8.198403604033e-01 5.464511359964e-01 6.787043648853e-02 1.862874153142e-01 4.549765669160e-01 2.981987907640e-04 1.629510679658e-04 +8.562336951615e-01 6.738705324996e-02 0.000000000000e+00 8.588813396946e-01 8.588813396946e-01 6.786037422547e-01 7.275412312220e-02 1.608026803893e-01 4.227124654473e-01 3.841893764929e-04 2.607123486226e-04 +8.984609841459e-01 7.071041296761e-02 0.000000000000e+00 9.012392038379e-01 9.012392038379e-01 8.934946574453e-01 8.106050451650e-02 1.360715778737e-01 3.888508440761e-01 4.269164085708e-04 3.814475302338e-04 +9.393909986273e-01 7.393167496765e-02 0.000000000000e+00 9.422957820481e-01 9.422957820481e-01 1.210400469939e+00 9.308114564714e-02 1.153387531104e-01 3.580063196080e-01 4.338701329369e-04 5.251566127993e-04 +9.771719725218e-01 7.690510209864e-02 0.000000000000e+00 9.801935822127e-01 9.801935822127e-01 1.608969463997e+00 1.060634009345e-01 9.887018205835e-02 3.314616197012e-01 4.299892644331e-04 6.918395963192e-04 +1.010528821619e+00 7.953034305686e-02 0.000000000000e+00 1.013653577308e+00 1.013653577308e+00 2.263723502217e+00 1.341919470404e-01 8.890819996513e-02 3.143228199262e-01 3.894011260342e-04 8.814964807935e-04 +1.039422695305e+00 8.180434023276e-02 0.000000000000e+00 1.042636796587e+00 1.042636796587e+00 2.987127609322e+00 1.516368515783e-01 7.613795860535e-02 2.908706263741e-01 3.662807249371e-04 1.094127266222e-03 +1.077093871891e+00 8.476912612818e-02 0.000000000000e+00 1.080424459928e+00 1.080424459928e+00 1.909644424439e+00 3.387264802441e-02 2.665466763470e-02 1.719383263028e-01 6.963243709603e-04 1.329731952605e-03 +1.146893595351e+00 9.026248350038e-02 0.000000000000e+00 1.150440017987e+00 1.150440017987e+00 1.058704566930e+00 6.573240045772e-06 9.372231729524e-06 3.216819759379e-03 1.500239622606e-03 1.588310539942e-03 +3.745150985166e-01 8.991312010864e-02 0.000000000000e+00 3.851570175715e-01 3.851570175715e-01 4.405588188616e-03 6.296622851599e-02 2.143678127824e+01 4.880634278779e+00 5.072412020388e-03 2.234695848481e-05 +7.375554276523e-01 1.770713918236e-01 0.000000000000e+00 7.585132079679e-01 7.585132079679e-01 1.949154710773e-01 6.266134716350e-02 4.821801276324e-01 7.319831479982e-01 5.548844591452e-04 1.081555657478e-04 +7.650199762209e-01 1.836650465626e-01 0.000000000000e+00 7.867581670030e-01 7.867581670030e-01 3.812699515498e-01 6.452508937058e-02 2.538345629524e-01 5.310952198678e-01 6.880169316255e-04 2.623201821863e-04 +7.971881059842e-01 1.913879312381e-01 0.000000000000e+00 8.198403604033e-01 8.198403604033e-01 5.464511359964e-01 6.787043648853e-02 1.862874153142e-01 4.549765669160e-01 8.872537283984e-04 4.848408078003e-04 +8.351503799099e-01 2.005018668541e-01 0.000000000000e+00 8.588813396946e-01 8.588813396946e-01 6.786037422547e-01 7.275412312220e-02 1.608026803893e-01 4.227124654473e-01 1.143108111978e-03 7.757174425900e-04 +8.763378928951e-01 2.103901138611e-01 0.000000000000e+00 9.012392038379e-01 9.012392038379e-01 8.934946574453e-01 8.106050451650e-02 1.360715778737e-01 3.888508440761e-01 1.270237126879e-03 1.134950086555e-03 +9.162600745811e-01 2.199745817001e-01 0.000000000000e+00 9.422957820481e-01 9.422957820481e-01 1.210400469939e+00 9.308114564714e-02 1.153387531104e-01 3.580063196080e-01 1.290927076205e-03 1.562538739696e-03 +9.531107555104e-01 2.288216474489e-01 0.000000000000e+00 9.801935822127e-01 9.801935822127e-01 1.608969463997e+00 1.060634009345e-01 9.887018205835e-02 3.314616197012e-01 1.279380030556e-03 2.058483402012e-03 +9.856462482776e-01 2.366327281785e-01 0.000000000000e+00 1.013653577308e+00 1.013653577308e+00 2.263723502217e+00 1.341919470404e-01 8.890819996513e-02 3.143228199262e-01 1.158615030031e-03 2.622784073504e-03 +1.013828658901e+00 2.433987263487e-01 0.000000000000e+00 1.042636796587e+00 1.042636796587e+00 2.987127609322e+00 1.516368515783e-01 7.613795860535e-02 2.908706263741e-01 1.089823127747e-03 3.255440754172e-03 +1.050572246096e+00 2.522200811667e-01 0.000000000000e+00 1.080424459928e+00 1.080424459928e+00 1.909644424439e+00 3.387264802441e-02 2.665466763470e-02 1.719383263028e-01 2.071827295900e-03 3.956453444015e-03 +1.118653268712e+00 2.685648885934e-01 0.000000000000e+00 1.150440017987e+00 1.150440017987e+00 1.058704566930e+00 6.573240045772e-06 9.372231729525e-06 3.216819759379e-03 4.463777989300e-03 4.725822143033e-03 +3.558386853374e-01 1.473932094838e-01 0.000000000000e+00 3.851570175715e-01 3.851570175715e-01 4.405588188616e-03 6.296622851599e-02 2.143678127824e+01 4.880634278779e+00 8.315127832353e-03 3.663302896504e-05 +7.007748279810e-01 2.902704379194e-01 0.000000000000e+00 7.585132079679e-01 7.585132079679e-01 1.949154710773e-01 6.266134716350e-02 4.821801276324e-01 7.319831479982e-01 9.096136495682e-04 1.772977730039e-04 +7.268697675302e-01 3.010793157900e-01 0.000000000000e+00 7.867581670030e-01 7.867581670030e-01 3.812699515497e-01 6.452508937058e-02 2.538345629524e-01 5.310952198678e-01 1.127855685677e-03 4.300174826331e-04 +7.574337289033e-01 3.137393231106e-01 0.000000000000e+00 8.198403604033e-01 8.198403604033e-01 5.464511359964e-01 6.787043648853e-02 1.862874153142e-01 4.549765669160e-01 1.454461534613e-03 7.947921578525e-04 +7.935028905997e-01 3.286796590687e-01 0.000000000000e+00 8.588813396946e-01 8.588813396946e-01 6.786037422547e-01 7.275412312220e-02 1.608026803893e-01 4.227124654473e-01 1.873879731988e-03 1.271621798662e-03 +8.326364543226e-01 3.448893119067e-01 0.000000000000e+00 9.012392038379e-01 9.012392038379e-01 8.934946574453e-01 8.106050451650e-02 1.360715778737e-01 3.888508440761e-01 2.082280391448e-03 1.860506405062e-03 +8.705677866059e-01 3.606009841773e-01 0.000000000000e+00 9.422957820481e-01 9.422957820481e-01 1.210400469939e+00 9.308114564714e-02 1.153387531104e-01 3.580063196079e-01 2.116197110516e-03 2.561445977053e-03 +9.055807885052e-01 3.751038444234e-01 0.000000000000e+00 9.801935822127e-01 9.801935822127e-01 1.608969463997e+00 1.060634009345e-01 9.887018205836e-02 3.314616197012e-01 2.097268214309e-03 3.374440514633e-03 +9.364937931315e-01 3.879084301933e-01 0.000000000000e+00 1.013653577308e+00 1.013653577308e+00 2.263723502217e+00 1.341919470404e-01 8.890819996513e-02 3.143228199262e-01 1.899299986766e-03 4.299490017804e-03 +9.632707962095e-01 3.989998280279e-01 0.000000000000e+00 1.042636796587e+00 1.042636796587e+00 2.987127609322e+00 1.516368515783e-01 7.613795860535e-02 2.908706263741e-01 1.786530468237e-03 5.336594486565e-03 +9.981820449518e-01 4.134605407363e-01 0.000000000000e+00 1.080424459928e+00 1.080424459928e+00 1.909644424439e+00 3.387264802441e-02 2.665466763470e-02 1.719383263028e-01 3.396314956813e-03 6.485753920917e-03 +1.062867986000e+00 4.402543348134e-01 0.000000000000e+00 1.150440017987e+00 1.150440017987e+00 1.058704566930e+00 6.573240045774e-06 9.372231729527e-06 3.216819759380e-03 7.317403327467e-03 7.746968320858e-03 +3.284003427643e-01 2.012439888714e-01 0.000000000000e+00 3.851570175715e-01 3.851570175715e-01 4.405588188616e-03 6.296622851599e-02 2.143678127824e+01 4.880634278779e+00 1.135309760076e-02 5.001707269410e-05 +6.467388263065e-01 3.963220624813e-01 0.000000000000e+00 7.585132079679e-01 7.585132079679e-01 1.949154710773e-01 6.266134716350e-02 4.821801276323e-01 7.319831479982e-01 1.241945133104e-03 2.420743206711e-04 +6.708216128204e-01 4.110800130376e-01 0.000000000000e+00 7.867581670030e-01 7.867581670030e-01 3.812699515497e-01 6.452508937058e-02 2.538345629525e-01 5.310952198678e-01 1.539922889608e-03 5.871263255112e-04 +6.990288196384e-01 4.283654116069e-01 0.000000000000e+00 8.198403604033e-01 8.198403604033e-01 5.464511359964e-01 6.787043648853e-02 1.862874153142e-01 4.549765669160e-01 1.985855670765e-03 1.085173087214e-03 +7.323167266379e-01 4.487642672517e-01 0.000000000000e+00 8.588813396946e-01 8.588813396946e-01 6.786037422547e-01 7.275412312220e-02 1.608026803893e-01 4.227124654473e-01 2.558510213946e-03 1.736214605781e-03 +7.684327428827e-01 4.708961904711e-01 0.000000000000e+00 9.012392038379e-01 9.012392038379e-01 8.934946574453e-01 8.106050451650e-02 1.360715778737e-01 3.888508440761e-01 2.843051002088e-03 2.540250881210e-03 +8.034392304756e-01 4.923481936580e-01 0.000000000000e+00 9.422957820481e-01 9.422957820481e-01 1.210400469939e+00 9.308114564714e-02 1.153387531104e-01 3.580063196079e-01 2.889359348710e-03 3.497281913502e-03 +8.357524170366e-01 5.121497398499e-01 0.000000000000e+00 9.801935822127e-01 9.801935822127e-01 1.608969463997e+00 1.060634009345e-01 9.887018205836e-02 3.314616197012e-01 2.863514694190e-03 4.607307702658e-03 +8.642817527538e-01 5.296325392625e-01 0.000000000000e+00 1.013653577308e+00 1.013653577308e+00 2.263723502217e+00 1.341919470404e-01 8.890819996513e-02 3.143228199262e-01 2.593217874412e-03 5.870328248676e-03 +8.889940096033e-01 5.447762297366e-01 0.000000000000e+00 1.042636796587e+00 1.042636796587e+00 2.987127609322e+00 1.516368515783e-01 7.613795860535e-02 2.908706263741e-01 2.439247499443e-03 7.286343551558e-03 +9.212132890850e-01 5.645202295962e-01 0.000000000000e+00 1.080424459928e+00 1.080424459928e+00 1.909644424439e+00 3.387264802441e-02 2.665466763470e-02 1.719383263028e-01 4.637174071767e-03 8.855353611302e-03 +9.809113660159e-01 6.011032581900e-01 0.000000000000e+00 1.150440017987e+00 1.150440017987e+00 1.058704566930e+00 6.573240045774e-06 9.372231729527e-06 3.216819759380e-03 9.990849910643e-03 1.057735842791e-02 +2.928756938541e-01 2.501394733625e-01 0.000000000000e+00 3.851570175715e-01 3.851570175715e-01 4.405588188616e-03 6.296622851599e-02 2.143678127824e+01 4.880634278779e+00 1.411151642746e-02 6.216953009629e-05 +5.767779683252e-01 4.926149225474e-01 0.000000000000e+00 7.585132079679e-01 7.585132079679e-01 1.949154710773e-01 6.266134716350e-02 4.821801276324e-01 7.319831479982e-01 1.543695805683e-03 3.008901951648e-04 +5.982556036736e-01 5.109585560679e-01 0.000000000000e+00 7.867581670030e-01 7.867581670030e-01 3.812699515497e-01 6.452508937058e-02 2.538345629525e-01 5.310952198678e-01 1.914072081286e-03 7.297781696948e-04 +6.234115008904e-01 5.324437220062e-01 0.000000000000e+00 8.198403604033e-01 8.198403604033e-01 5.464511359964e-01 6.787043648853e-02 1.862874153142e-01 4.549765669160e-01 2.468351449625e-03 1.348833453686e-03 +6.530984944463e-01 5.577988098119e-01 0.000000000000e+00 8.588813396946e-01 8.588813396946e-01 6.786037422547e-01 7.275412312220e-02 1.608026803893e-01 4.227124654473e-01 3.180141683228e-03 2.158056047139e-03 +6.853076670310e-01 5.853080420112e-01 0.000000000000e+00 9.012392038379e-01 9.012392038379e-01 8.934946574453e-01 8.106050451649e-02 1.360715778737e-01 3.888508440761e-01 3.533816261510e-03 3.157445950053e-03 +7.165273340291e-01 6.119721566009e-01 0.000000000000e+00 9.422957820481e-01 9.422957820481e-01 1.210400469939e+00 9.308114564714e-02 1.153387531104e-01 3.580063196080e-01 3.591375970506e-03 4.347003162428e-03 +7.453450473574e-01 6.365848089538e-01 0.000000000000e+00 9.801935822127e-01 9.801935822127e-01 1.608969463997e+00 1.060634009345e-01 9.887018205835e-02 3.314616197012e-01 3.559251938841e-03 5.726727684265e-03 +7.707882272366e-01 6.583153374654e-01 0.000000000000e+00 1.013653577308e+00 1.013653577308e+00 2.263723502217e+00 1.341919470404e-01 8.890819996513e-02 3.143228199262e-01 3.223282131593e-03 7.296619515563e-03 +7.928272400786e-01 6.771384326604e-01 0.000000000000e+00 1.042636796587e+00 1.042636796587e+00 2.987127609323e+00 1.516368515783e-01 7.613795860535e-02 2.908706263741e-01 3.031902161815e-03 9.056678656323e-03 +8.215612047092e-01 7.016795568683e-01 0.000000000000e+00 1.080424459928e+00 1.080424459928e+00 1.909644424439e+00 3.387264802441e-02 2.665466763470e-02 1.719383263028e-01 5.763850571176e-03 1.100690510654e-02 +8.748014527423e-01 7.471510244026e-01 0.000000000000e+00 1.150440017987e+00 1.150440017987e+00 1.058704566930e+00 6.573240045772e-06 9.372231729525e-06 3.216819759379e-03 1.241828861129e-02 1.314729886623e-02 +2.501394733625e-01 2.928756938541e-01 0.000000000000e+00 3.851570175715e-01 3.851570175715e-01 4.405588188616e-03 6.296622851599e-02 2.143678127824e+01 4.880634278779e+00 1.652246288628e-02 7.279116733866e-05 +4.926149225474e-01 5.767779683252e-01 0.000000000000e+00 7.585132079679e-01 7.585132079679e-01 1.949154710773e-01 6.266134716350e-02 4.821801276324e-01 7.319831479982e-01 1.807435564294e-03 3.522971544563e-04 +5.109585560679e-01 5.982556036736e-01 0.000000000000e+00 7.867581670030e-01 7.867581670030e-01 3.812699515497e-01 6.452508937058e-02 2.538345629525e-01 5.310952198678e-01 2.241090465882e-03 8.544604533455e-04 +5.324437220062e-01 6.234115008904e-01 0.000000000000e+00 8.198403604033e-01 8.198403604033e-01 5.464511359964e-01 6.787043648853e-02 1.862874153142e-01 4.549765669160e-01 2.890068223807e-03 1.579281064006e-03 +5.577988098119e-01 6.530984944463e-01 0.000000000000e+00 8.588813396946e-01 8.588813396946e-01 6.786037422547e-01 7.275412312220e-02 1.608026803893e-01 4.227124654473e-01 3.723467509984e-03 2.526758986439e-03 +5.853080420112e-01 6.853076670310e-01 0.000000000000e+00 9.012392038379e-01 9.012392038379e-01 8.934946574453e-01 8.106050451649e-02 1.360715778737e-01 3.888508440761e-01 4.137567236511e-03 3.696894220643e-03 +6.119721566009e-01 7.165273340291e-01 0.000000000000e+00 9.422957820481e-01 9.422957820481e-01 1.210400469939e+00 9.308114564714e-02 1.153387531104e-01 3.580063196079e-01 4.204960996813e-03 5.089686766619e-03 +6.365848089538e-01 7.453450473574e-01 0.000000000000e+00 9.801935822127e-01 9.801935822127e-01 1.608969463997e+00 1.060634009345e-01 9.887018205836e-02 3.314616197012e-01 4.167348588277e-03 6.705136624367e-03 +6.583153374654e-01 7.707882272366e-01 0.000000000000e+00 1.013653577308e+00 1.013653577308e+00 2.263723502217e+00 1.341919470404e-01 8.890819996513e-02 3.143228199262e-01 3.773978485233e-03 8.543243793886e-03 +6.771384326604e-01 7.928272400786e-01 0.000000000000e+00 1.042636796587e+00 1.042636796587e+00 2.987127609323e+00 1.516368515783e-01 7.613795860535e-02 2.908706263741e-01 3.549901330657e-03 1.060400827518e-02 +7.016795568683e-01 8.215612047092e-01 0.000000000000e+00 1.080424459928e+00 1.080424459928e+00 1.909644424439e+00 3.387264802441e-02 2.665466763470e-02 1.719383263028e-01 6.748601940399e-03 1.288743006824e-02 +7.471510244026e-01 8.748014527423e-01 0.000000000000e+00 1.150440017987e+00 1.150440017987e+00 1.058704566930e+00 6.573240045772e-06 9.372231729525e-06 3.216819759379e-03 1.453994783239e-02 1.539350917307e-02 +2.012439888714e-01 3.284003427643e-01 0.000000000000e+00 3.851570175715e-01 3.851570175715e-01 4.405588188616e-03 6.296622851599e-02 2.143678127824e+01 4.880634278779e+00 1.852657147393e-02 8.162044446112e-05 +3.963220624813e-01 6.467388263065e-01 0.000000000000e+00 7.585132079679e-01 7.585132079679e-01 1.949154710773e-01 6.266134716350e-02 4.821801276323e-01 7.319831479982e-01 2.026670260777e-03 3.950293885978e-04 +4.110800130376e-01 6.708216128204e-01 0.000000000000e+00 7.867581670030e-01 7.867581670030e-01 3.812699515497e-01 6.452508937058e-02 2.538345629525e-01 5.310952198678e-01 2.512925765455e-03 9.581030848432e-04 +4.283654116069e-01 6.990288196384e-01 0.000000000000e+00 8.198403604033e-01 8.198403604033e-01 5.464511359964e-01 6.787043648853e-02 1.862874153142e-01 4.549765669160e-01 3.240621926732e-03 1.770841533198e-03 +4.487642672517e-01 7.323167266379e-01 0.000000000000e+00 8.588813396946e-01 8.588813396946e-01 6.786037422547e-01 7.275412312220e-02 1.608026803893e-01 4.227124654473e-01 4.175109209164e-03 2.833244733661e-03 +4.708961904711e-01 7.684327428827e-01 0.000000000000e+00 9.012392038379e-01 9.012392038379e-01 8.934946574453e-01 8.106050451650e-02 1.360715778737e-01 3.888508440761e-01 4.639437574350e-03 4.145312686233e-03 +4.923481936580e-01 8.034392304756e-01 0.000000000000e+00 9.422957820481e-01 9.422957820481e-01 1.210400469939e+00 9.308114564714e-02 1.153387531104e-01 3.580063196079e-01 4.715005927914e-03 5.707045390914e-03 +5.121497398499e-01 8.357524170366e-01 0.000000000000e+00 9.801935822127e-01 9.801935822127e-01 1.608969463997e+00 1.060634009345e-01 9.887018205836e-02 3.314616197012e-01 4.672831284833e-03 7.518442847703e-03 +5.296325392625e-01 8.642817527538e-01 0.000000000000e+00 1.013653577308e+00 1.013653577308e+00 2.263723502217e+00 1.341919470404e-01 8.890819996513e-02 3.143228199262e-01 4.231746963451e-03 9.579505056602e-03 +5.447762297366e-01 8.889940096033e-01 0.000000000000e+00 1.042636796587e+00 1.042636796587e+00 2.987127609322e+00 1.516368515783e-01 7.613795860535e-02 2.908706263741e-01 3.980490147291e-03 1.189023201761e-02 +5.645202295962e-01 9.212132890850e-01 0.000000000000e+00 1.080424459928e+00 1.080424459928e+00 1.909644424439e+00 3.387264802441e-02 2.665466763470e-02 1.719383263028e-01 7.567180332523e-03 1.445062373073e-02 +6.011032581900e-01 9.809113660159e-01 0.000000000000e+00 1.150440017987e+00 1.150440017987e+00 1.058704566930e+00 6.573240045774e-06 9.372231729527e-06 3.216819759380e-03 1.630358528253e-02 1.726068019595e-02 +1.473932094838e-01 3.558386853374e-01 0.000000000000e+00 3.851570175715e-01 3.851570175715e-01 4.405588188616e-03 6.296622851599e-02 2.143678127824e+01 4.880634278779e+00 2.007449438573e-02 8.843995535822e-05 +2.902704379194e-01 7.007748279810e-01 0.000000000000e+00 7.585132079679e-01 7.585132079679e-01 1.949154710773e-01 6.266134716350e-02 4.821801276324e-01 7.319831479982e-01 2.196001609307e-03 4.280346881646e-04 +3.010793157900e-01 7.268697675302e-01 0.000000000000e+00 7.867581670030e-01 7.867581670030e-01 3.812699515498e-01 6.452508937058e-02 2.538345629524e-01 5.310952198678e-01 2.722884492760e-03 1.038154038630e-03 +3.137393231106e-01 7.574337289033e-01 0.000000000000e+00 8.198403604033e-01 8.198403604033e-01 5.464511359964e-01 6.787043648853e-02 1.862874153142e-01 4.549765669160e-01 3.511380762813e-03 1.918798006755e-03 +3.286796590687e-01 7.935028905997e-01 0.000000000000e+00 8.588813396946e-01 8.588813396946e-01 6.786037422547e-01 7.275412312220e-02 1.608026803893e-01 4.227124654473e-01 4.523945863221e-03 3.069966592540e-03 +3.448893119067e-01 8.326364543226e-01 0.000000000000e+00 9.012392038379e-01 9.012392038379e-01 8.934946574453e-01 8.106050451650e-02 1.360715778737e-01 3.888508440761e-01 5.027069561698e-03 4.491659795983e-03 +3.606009841773e-01 8.705677866059e-01 0.000000000000e+00 9.422957820481e-01 9.422957820481e-01 1.210400469939e+00 9.308114564714e-02 1.153387531104e-01 3.580063196079e-01 5.108951764862e-03 6.183877617086e-03 +3.751038444234e-01 9.055807885052e-01 0.000000000000e+00 9.801935822127e-01 9.801935822127e-01 1.608969463997e+00 1.060634009345e-01 9.887018205835e-02 3.314616197012e-01 5.063253366918e-03 8.146620055849e-03 +3.879084301933e-01 9.364937931315e-01 0.000000000000e+00 1.013653577308e+00 1.013653577308e+00 2.263723502217e+00 1.341919470404e-01 8.890819996513e-02 3.143228199262e-01 4.585315787066e-03 1.037988711227e-02 +3.989998280279e-01 9.632707962095e-01 0.000000000000e+00 1.042636796587e+00 1.042636796587e+00 2.987127609322e+00 1.516368515783e-01 7.613795860535e-02 2.908706263741e-01 4.313066086009e-03 1.288367878635e-02 +4.134605407363e-01 9.981820449518e-01 0.000000000000e+00 1.080424459928e+00 1.080424459928e+00 1.909644424439e+00 3.387264802441e-02 2.665466763470e-02 1.719383263028e-01 8.199429630829e-03 1.565799507809e-02 +4.402543348134e-01 1.062867986000e+00 0.000000000000e+00 1.150440017987e+00 1.150440017987e+00 1.058704566930e+00 6.573240045774e-06 9.372231729527e-06 3.216819759380e-03 1.766577435453e-02 1.870283598749e-02 +8.991312010864e-02 3.745150985166e-01 0.000000000000e+00 3.851570175715e-01 3.851570175715e-01 4.405588188616e-03 6.296622851599e-02 2.143678127824e+01 4.880634278779e+00 2.112811662233e-02 9.308178103902e-05 +1.770713918236e-01 7.375554276523e-01 0.000000000000e+00 7.585132079679e-01 7.585132079679e-01 1.949154710773e-01 6.266134716350e-02 4.821801276324e-01 7.319831479982e-01 2.311260110104e-03 4.505003531431e-04 +1.836650465626e-01 7.650199762209e-01 0.000000000000e+00 7.867581670030e-01 7.867581670030e-01 3.812699515498e-01 6.452508937058e-02 2.538345629524e-01 5.310952198678e-01 2.865796767118e-03 1.092642194551e-03 +1.913879312381e-01 7.971881059842e-01 0.000000000000e+00 8.198403604033e-01 8.198403604033e-01 5.464511359964e-01 6.787043648853e-02 1.862874153142e-01 4.549765669161e-01 3.695677750910e-03 2.019507305261e-03 +2.005018668541e-01 8.351503799099e-01 0.000000000000e+00 8.588813396946e-01 8.588813396946e-01 6.786037422547e-01 7.275412312220e-02 1.608026803893e-01 4.227124654473e-01 4.761387956010e-03 3.231095685275e-03 +2.103901138611e-01 8.763378928951e-01 0.000000000000e+00 9.012392038379e-01 9.012392038379e-01 8.934946574453e-01 8.106050451650e-02 1.360715778737e-01 3.888508440761e-01 5.290918412550e-03 4.727407334592e-03 +2.199745817001e-01 9.162600745811e-01 0.000000000000e+00 9.422957820481e-01 9.422957820481e-01 1.210400469939e+00 9.308114564714e-02 1.153387531104e-01 3.580063196080e-01 5.377098253721e-03 6.508442253213e-03 +2.288216474489e-01 9.531107555104e-01 0.000000000000e+00 9.801935822127e-01 9.801935822127e-01 1.608969463997e+00 1.060634009345e-01 9.887018205835e-02 3.314616197012e-01 5.329001347135e-03 8.574200441137e-03 +2.366327281785e-01 9.856462482776e-01 0.000000000000e+00 1.013653577308e+00 1.013653577308e+00 2.263723502217e+00 1.341919470404e-01 8.890819996513e-02 3.143228199262e-01 4.825978918213e-03 1.092468189836e-02 +2.433987263487e-01 1.013828658901e+00 0.000000000000e+00 1.042636796587e+00 1.042636796587e+00 2.987127609322e+00 1.516368515783e-01 7.613795860535e-02 2.908706263741e-01 4.539440023445e-03 1.355988662489e-02 +2.522200811667e-01 1.050572246096e+00 0.000000000000e+00 1.080424459928e+00 1.080424459928e+00 1.909644424439e+00 3.387264802441e-02 2.665466763470e-02 1.719383263028e-01 8.629781759278e-03 1.647981462073e-02 +2.685648885934e-01 1.118653268712e+00 0.000000000000e+00 1.150440017987e+00 1.150440017987e+00 1.058704566930e+00 6.573240045772e-06 9.372231729524e-06 3.216819759379e-03 1.859297343257e-02 1.968446588586e-02 +3.021907131190e-02 3.839697070260e-01 0.000000000000e+00 3.851570175715e-01 3.851570175715e-01 4.405588188616e-03 6.296622851599e-02 2.143678127824e+01 4.880634278779e+00 2.166149450748e-02 9.543162434991e-05 +5.951226039479e-02 7.561749648887e-01 0.000000000000e+00 7.585132079679e-01 7.585132079679e-01 1.949154710773e-01 6.266134716350e-02 4.821801276324e-01 7.319831479982e-01 2.369607716358e-03 4.618732043023e-04 +6.172833433955e-02 7.843328541414e-01 0.000000000000e+00 7.867581670030e-01 7.867581670030e-01 3.812699515498e-01 6.452508937058e-02 2.538345629525e-01 5.310952198678e-01 2.938143614035e-03 1.120225873369e-03 +6.432393331843e-02 8.173130661801e-01 0.000000000000e+00 8.198403604033e-01 8.198403604033e-01 5.464511359964e-01 6.787043648853e-02 1.862874153142e-01 4.549765669160e-01 3.788974887527e-03 2.070489631551e-03 +6.738705324996e-02 8.562336951615e-01 0.000000000000e+00 8.588813396946e-01 8.588813396946e-01 6.786037422547e-01 7.275412312220e-02 1.608026803893e-01 4.227124654473e-01 4.881588875182e-03 3.312664478848e-03 +7.071041296761e-02 8.984609841459e-01 0.000000000000e+00 9.012392038379e-01 9.012392038379e-01 8.934946574453e-01 8.106050451650e-02 1.360715778737e-01 3.888508440761e-01 5.424487292533e-03 4.846750415259e-03 +7.393167496765e-02 9.393909986273e-01 0.000000000000e+00 9.422957820481e-01 9.422957820481e-01 1.210400469939e+00 9.308114564714e-02 1.153387531104e-01 3.580063196080e-01 5.512842738007e-03 6.672747440784e-03 +7.690510209864e-02 9.771719725218e-01 0.000000000000e+00 9.801935822127e-01 9.801935822127e-01 1.608969463997e+00 1.060634009345e-01 9.887018205836e-02 3.314616197012e-01 5.463531628244e-03 8.790655555424e-03 +7.953034305686e-02 1.010528821619e+00 0.000000000000e+00 1.013653577308e+00 1.013653577308e+00 2.263723502217e+00 1.341919470404e-01 8.890819996513e-02 3.143228199262e-01 4.947810431887e-03 1.120047475918e-02 +8.180434023276e-02 1.039422695305e+00 0.000000000000e+00 1.042636796587e+00 1.042636796587e+00 2.987127609322e+00 1.516368515783e-01 7.613795860535e-02 2.908706263741e-01 4.654037881965e-03 1.390220505205e-02 +8.476912612818e-02 1.077093871891e+00 0.000000000000e+00 1.080424459928e+00 1.080424459928e+00 1.909644424439e+00 3.387264802441e-02 2.665466763470e-02 1.719383263028e-01 8.847640020209e-03 1.689584643403e-02 +9.026248350038e-02 1.146893595351e+00 0.000000000000e+00 1.150440017987e+00 1.150440017987e+00 1.058704566930e+00 6.573240045772e-06 9.372231729524e-06 3.216819759379e-03 1.906235179815e-02 2.018139890513e-02 diff --git a/single-node-refactor/regression_tests/test_refactor.py b/single-node-refactor/regression_tests/test_refactor.py index fbf3b9988..adbfff9c8 100644 --- a/single-node-refactor/regression_tests/test_refactor.py +++ b/single-node-refactor/regression_tests/test_refactor.py @@ -13,7 +13,7 @@ solvers = ["Fierro"] # Add names of each test -tests = ["Sedov", "Sod_X", "Sod_Y", "Sod_Z", "Sedov_Erosion","Sedov_Read_Ensight"] +tests = ["Sedov", "Sod_X", "Sod_Y", "Sod_Z", "Sedov_Erosion","Sedov_Read_Ensight", "Sedov_rz_polar"] # Extract data from txt file def extract_state_data(filename): From 55f21085ebca9db7b89768ed79ea0be544e36bb9 Mon Sep 17 00:00:00 2001 From: Jacob Moore Date: Wed, 21 Aug 2024 12:13:45 -0500 Subject: [PATCH 149/233] ENH: Fix output at t=0 --- .../src/Solvers/SGH_solver_rz/src/sgh_execute_rz.cpp | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/single-node-refactor/src/Solvers/SGH_solver_rz/src/sgh_execute_rz.cpp b/single-node-refactor/src/Solvers/SGH_solver_rz/src/sgh_execute_rz.cpp index 05ef97900..53937e5be 100644 --- a/single-node-refactor/src/Solvers/SGH_solver_rz/src/sgh_execute_rz.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver_rz/src/sgh_execute_rz.cpp @@ -55,7 +55,7 @@ void SGHRZ::execute(SimulationParameters_t& SimulationParamaters, Mesh_t& mesh, State_t& State) { - std::cout << "In execute function in sgh solver" << std::endl; + std::cout << "In execute function in SGHRZ solver" << std::endl; double fuzz = SimulationParamaters.dynamic_options.fuzz; double tiny = SimulationParamaters.dynamic_options.tiny; @@ -157,16 +157,15 @@ void SGHRZ::execute(SimulationParameters_t& SimulationParamaters, printf("nodal mass domain = %f \n", mass_domain_nodes_t0); - - - - // a flag to exit the calculation size_t stop_calc = 0; auto time_1 = std::chrono::high_resolution_clock::now(); - + // Write initial state at t=0 + printf("Writing outputs to file at %f \n", graphics_time); + mesh_writer.write_mesh(mesh, State, SimulationParamaters, time_value, graphics_times); + graphics_time = time_value + graphics_dt_ival; // loop over the max number of time integration cycles From 177b26d86df50e960764b6f25a238ebc4c1e0883 Mon Sep 17 00:00:00 2001 From: Nathaniel Morgan Date: Wed, 21 Aug 2024 12:29:23 -0600 Subject: [PATCH 150/233] fixed vtk hexPn, now using snprintf --- single-node-refactor/src/common/mesh_io.h | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/single-node-refactor/src/common/mesh_io.h b/single-node-refactor/src/common/mesh_io.h index b6327be27..1a441c2a5 100644 --- a/single-node-refactor/src/common/mesh_io.h +++ b/single-node-refactor/src/common/mesh_io.h @@ -1629,7 +1629,9 @@ class MeshWriter } // end for loop over vertices FILE* out[20]; // the output files that are written to - char name[100]; // char string + char filename[100]; // char string + int max_len = sizeof filename; + int str_output_len; struct stat st; @@ -1639,8 +1641,12 @@ class MeshWriter // snprintf(filename, max_len, "ensight/data/%s.%05d.%s", name, graphics_id, vec_var_names[var]); - sprintf(name, "vtk/meshHexPn.%05d.vtk", graphics_id); // mesh file - out[0] = fopen(name, "w"); + //sprintf(filename, "vtk/meshHexPn.%05d.vtk", graphics_id); // mesh file + str_output_len = snprintf(filename, max_len, "vtk/meshHexPn.%05d.vtk", graphics_id); + if (str_output_len >= max_len) { fputs("Filename length exceeded; string truncated", stderr); } + // mesh file + + out[0] = fopen(filename, "w"); fprintf(out[0], "# vtk DataFile Version 2.0\n"); // part 2 fprintf(out[0], "Mesh for Fierro\n"); // part 2 @@ -1742,8 +1748,12 @@ class MeshWriter graphics_times(graphics_id) = time_value; // Write time series metadata - sprintf(name, "vtk/meshHexPn.vtk.series", graphics_id); // mesh file - out[0] = fopen(name, "w"); + //sprintf(filename, "vtk/meshHexPn.vtk.series", graphics_id); // mesh file + str_output_len = snprintf(filename, max_len, "vtk/meshHexPn.vtk.series"); + if (str_output_len >= max_len) { fputs("Filename length exceeded; string truncated", stderr); } + // mesh file + + out[0] = fopen(filename, "w"); fprintf(out[0], "{\n"); fprintf(out[0], " \"file-series-version\" : \"1.0\",\n"); From ed9be5d293ad9395648f9906765f594481985b6a Mon Sep 17 00:00:00 2001 From: Nathaniel Morgan Date: Wed, 21 Aug 2024 13:59:54 -0600 Subject: [PATCH 151/233] fixed 2D rz ensight outputs and started adding elem erosion to rz --- .../Solvers/SGH_solver_3D/src/properties.cpp | 1 + .../SGH_solver_rz/include/sgh_solver_rz.h | 1 + .../SGH_solver_rz/src/force_sgh_rz.cpp | 63 +++++++++++-------- .../SGH_solver_rz/src/properties_rz.cpp | 27 ++++---- .../SGH_solver_rz/src/sgh_execute_rz.cpp | 1 + .../src/common/geometry_new.h | 3 +- single-node-refactor/src/common/mesh_io.h | 30 ++++++--- 7 files changed, 76 insertions(+), 50 deletions(-) diff --git a/single-node-refactor/src/Solvers/SGH_solver_3D/src/properties.cpp b/single-node-refactor/src/Solvers/SGH_solver_3D/src/properties.cpp index ea0a11629..31f89b428 100644 --- a/single-node-refactor/src/Solvers/SGH_solver_3D/src/properties.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver_3D/src/properties.cpp @@ -239,6 +239,7 @@ void SGH3D::update_state( if (MaterialPoints_eroded(mat_point_lid)) { MaterialPoints_pres(mat_point_lid) = 0.0; MaterialPoints_sspd(mat_point_lid) = 1.0e-32; + MaterialPoints_den(mat_point_lid) = 1.0e-32; for (size_t i = 0; i < 3; i++) { for (size_t j = 0; j < 3; j++) { diff --git a/single-node-refactor/src/Solvers/SGH_solver_rz/include/sgh_solver_rz.h b/single-node-refactor/src/Solvers/SGH_solver_rz/include/sgh_solver_rz.h index a68cc9235..1dab442a7 100644 --- a/single-node-refactor/src/Solvers/SGH_solver_rz/include/sgh_solver_rz.h +++ b/single-node-refactor/src/Solvers/SGH_solver_rz/include/sgh_solver_rz.h @@ -186,6 +186,7 @@ class SGHRZ : public Solver const Mesh_t& mesh, const DCArrayKokkos& GaussPoints_vol, const DCArrayKokkos& GaussPoints_div, + const DCArrayKokkos& MaterialPoints_eroded, const DCArrayKokkos& corner_force, const DCArrayKokkos& node_coords, const DCArrayKokkos& node_vel, diff --git a/single-node-refactor/src/Solvers/SGH_solver_rz/src/force_sgh_rz.cpp b/single-node-refactor/src/Solvers/SGH_solver_rz/src/force_sgh_rz.cpp index a2d199cc7..23a1f1a07 100644 --- a/single-node-refactor/src/Solvers/SGH_solver_rz/src/force_sgh_rz.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver_rz/src/force_sgh_rz.cpp @@ -68,6 +68,7 @@ void SGHRZ::get_force_rz(const Material_t& Materials, const Mesh_t& mesh, const DCArrayKokkos& GaussPoints_vol, const DCArrayKokkos& GaussPoints_div, + const DCArrayKokkos& MaterialPoints_eroded, const DCArrayKokkos& corner_force, const DCArrayKokkos& node_coords, const DCArrayKokkos& node_vel, @@ -388,8 +389,15 @@ void SGHRZ::get_force_rz(const Material_t& Materials, size_t mat_corner_lid = corners_in_mat_elem(mat_elem_lid, corner_lid); - // loop over dimension - // add if eroded here + + // loop over dimensions and calc corner forces + if (MaterialPoints_eroded(mat_point_lid) == true) { + for (int dim = 0; dim < num_dims; dim++) { + corner_force(corner_gid, dim) = 0.0; + MaterialCorners_force(mat_corner_lid, dim) = 0.0; + } + } + else{ for (int dim = 0; dim < num_dims; dim++) { double force_component = @@ -402,20 +410,21 @@ void SGHRZ::get_force_rz(const Material_t& Materials, } // end loop over dimension + // ---- add hoop stress terms ---- - // ---- add hoop stress terms ---- + double node_radius = node_coords(1, node_gid, 1); - double node_radius = node_coords(1, node_gid, 1); + // Wilkins used elem_area*0.25 for the corner area, we will use the corner + // areas calculated using Barlow's symmetry and energy preserving area partitioning + if (node_radius > tiny) { + // sigma_RZ / R_p + corner_force(corner_gid, 0) += tau(1, 0) * corner_areas(corner_lid) / node_radius; - // Wilkins used elem_area*0.25 for the corner area, we will use the corner - // areas calculated using Barlow's symmetry and energy preserving area partitioning - if (node_radius > tiny) { - // sigma_RZ / R_p - corner_force(corner_gid, 0) += tau(1, 0) * corner_areas(corner_lid) / node_radius; + // (sigma_RR - sigma_theta) / R_p + corner_force(corner_gid, 1) += (tau(1, 1) - tau(2, 2)) * corner_areas(corner_lid) / node_radius; + } // end if radius >0 - // (sigma_RR - sigma_theta) / R_p - corner_force(corner_gid, 1) += (tau(1, 1) - tau(2, 2)) * corner_areas(corner_lid) / node_radius; - } // end if radius >0 + } // end if eroded } // end for loop over nodes in elem // --- Update Stress --- @@ -429,21 +438,21 @@ void SGHRZ::get_force_rz(const Material_t& Materials, ViewCArrayKokkos elem_node_gids(&mesh.nodes_in_elem(elem_gid, 0), 4); // --- call strength model --- - // Materials.MaterialFunctions(mat_id).strength_model(MaterialPoints_pres, - // MaterialPoints_stress, - // elem_gid, - // mat_id, - // MaterialPoints_statev, - // MaterialPoints_sspd, - // MaterialPoints_den(elem_gid), - // MaterialPoints_sie(1,elem_gid), - // vel_grad, - // elem_node_gids, - // node_coords, - // node_vel, - // GaussPoints_vol(elem_gid), - // dt, - // rk_alpha); + Materials.MaterialFunctions(mat_id).calc_stress(MaterialPoints_pres, + MaterialPoints_stress, + mat_point_lid, + mat_id, + MaterialPoints_statev, + MaterialPoints_sspd, + MaterialPoints_den(mat_point_lid), + MaterialPoints_sie(1,mat_point_lid), + vel_grad, + elem_node_gids, + node_coords, + node_vel, + GaussPoints_vol(elem_gid), + dt, + rk_alpha); } // end logical on increment_based strength model }); // end parallel for loop over elements diff --git a/single-node-refactor/src/Solvers/SGH_solver_rz/src/properties_rz.cpp b/single-node-refactor/src/Solvers/SGH_solver_rz/src/properties_rz.cpp index 43b6e2162..36b908dbf 100644 --- a/single-node-refactor/src/Solvers/SGH_solver_rz/src/properties_rz.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver_rz/src/properties_rz.cpp @@ -233,12 +233,10 @@ void SGHRZ::update_state_rz( // loop over all the elements the material lives in FOR_ALL(mat_elem_lid, 0, num_material_elems, { - // get elem gid size_t elem_gid = MaterialToMeshMaps_elem(mat_elem_lid); - - // get the material points for this material + // get the material points for this material // Note, with the SGH method, they are equal size_t mat_point_lid = mat_elem_lid; @@ -258,18 +256,19 @@ void SGHRZ::update_state_rz( mat_point_lid); // apply a void eos if mat_point is eroded - double phi_fail = 1.0 - (double)MaterialPoints_eroded(mat_point_lid); - MaterialPoints_pres(mat_point_lid) *= phi_fail; // phi_fail = 1 or 0 - MaterialPoints_sspd(mat_point_lid) *= phi_fail; - MaterialPoints_sspd(mat_point_lid) = fmax(MaterialPoints_sspd(mat_point_lid), 1e-32); - - for (size_t i = 0; i < 3; i++) { - for (size_t j = 0; j < 3; j++) { - MaterialPoints_stress(1, mat_point_lid, i, j) *= phi_fail; - } - } // end for i,j - + if (MaterialPoints_eroded(mat_point_lid)) { + MaterialPoints_pres(mat_point_lid) = 0.0; + MaterialPoints_sspd(mat_point_lid) = 1.0e-32; + MaterialPoints_den(mat_point_lid) = 1.0e-32; + + for (size_t i = 0; i < 3; i++) { + for (size_t j = 0; j < 3; j++) { + MaterialPoints_stress(1, mat_point_lid, i, j) = 0.0; + } + } // end for i,j + } // end if on eroded }); // end parallel for + } // end if elem errosion return; diff --git a/single-node-refactor/src/Solvers/SGH_solver_rz/src/sgh_execute_rz.cpp b/single-node-refactor/src/Solvers/SGH_solver_rz/src/sgh_execute_rz.cpp index 53937e5be..56b32a4f5 100644 --- a/single-node-refactor/src/Solvers/SGH_solver_rz/src/sgh_execute_rz.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver_rz/src/sgh_execute_rz.cpp @@ -266,6 +266,7 @@ void SGHRZ::execute(SimulationParameters_t& SimulationParamaters, mesh, State.GaussPoints.vol, State.GaussPoints.div, + State.MaterialPoints(mat_id).eroded, State.corner.force, State.node.coords, State.node.vel, diff --git a/single-node-refactor/src/common/geometry_new.h b/single-node-refactor/src/common/geometry_new.h index 3126d2a63..01164cb35 100644 --- a/single-node-refactor/src/common/geometry_new.h +++ b/single-node-refactor/src/common/geometry_new.h @@ -304,7 +304,8 @@ void get_vol_quad(const DCArrayKokkos& elem_vol, elem_vol(elem_gid) = ( (y(2) + y(3) + y(0)) * ((y(2) - y(3)) * (x(0) - x(3)) - (y(0) - y(3)) * (x(2) - x(3)) ) + (y(0) + y(1) + y(2)) * ((y(0) - y(1)) * (x(2) - x(1)) - (y(2) - y(1)) * (x(0) - x(1))) ) / 6.0; - + + elem_vol(elem_gid) = fmax(elem_vol(elem_gid), 1.0E-14); return; } // end subroutine diff --git a/single-node-refactor/src/common/mesh_io.h b/single-node-refactor/src/common/mesh_io.h index 1a441c2a5..9ea9078dd 100644 --- a/single-node-refactor/src/common/mesh_io.h +++ b/single-node-refactor/src/common/mesh_io.h @@ -1272,15 +1272,29 @@ class MeshWriter } fprintf(out[0], "%10lu\n", num_elems); + int convert_ijk_to_ensight[8]; - convert_ijk_to_ensight[0] = 0; - convert_ijk_to_ensight[1] = 1; - convert_ijk_to_ensight[2] = 3; - convert_ijk_to_ensight[3] = 2; - convert_ijk_to_ensight[4] = 4; - convert_ijk_to_ensight[5] = 5; - convert_ijk_to_ensight[6] = 7; - convert_ijk_to_ensight[7] = 6; + if(mesh.num_dims==3){ + convert_ijk_to_ensight[0] = 0; + convert_ijk_to_ensight[1] = 1; + convert_ijk_to_ensight[2] = 3; + convert_ijk_to_ensight[3] = 2; + convert_ijk_to_ensight[4] = 4; + convert_ijk_to_ensight[5] = 5; + convert_ijk_to_ensight[6] = 7; + convert_ijk_to_ensight[7] = 6; + } + else{ + + convert_ijk_to_ensight[0] = 0; + convert_ijk_to_ensight[1] = 1; + convert_ijk_to_ensight[2] = 2; + convert_ijk_to_ensight[3] = 3; + convert_ijk_to_ensight[4] = 4; + convert_ijk_to_ensight[5] = 5; + convert_ijk_to_ensight[6] = 6; + convert_ijk_to_ensight[7] = 7; + } // end if // write all global point numbers for this cell From 66431e15a02cb69843cd9a992fe2f692357ab9d7 Mon Sep 17 00:00:00 2001 From: Nathaniel Morgan Date: Wed, 21 Aug 2024 14:13:34 -0600 Subject: [PATCH 152/233] fixed multimaterial bug with rz --- single-node-refactor/input-rz.yaml | 15 +++++++++++++++ .../Solvers/SGH_solver_rz/src/force_sgh_rz.cpp | 9 ++------- 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/single-node-refactor/input-rz.yaml b/single-node-refactor/input-rz.yaml index a7ed09c38..f652bc89c 100644 --- a/single-node-refactor/input-rz.yaml +++ b/single-node-refactor/input-rz.yaml @@ -70,6 +70,21 @@ materials: - 1.0E-14 - 1.0 + - material: + id: 1 + eos_model_type: decoupled + eos_model: gamma_law_gas + # strength_model: none + q1: 1.0 + q2: 1.333 + q1ex: 1.0 + q2ex: 1.333 + eos_global_vars: + - 1.666666666666667 + - 1.0E-14 + - 1.0 + + regions: - fill_volume: type: global diff --git a/single-node-refactor/src/Solvers/SGH_solver_rz/src/force_sgh_rz.cpp b/single-node-refactor/src/Solvers/SGH_solver_rz/src/force_sgh_rz.cpp index 23a1f1a07..5dcad4b31 100644 --- a/single-node-refactor/src/Solvers/SGH_solver_rz/src/force_sgh_rz.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver_rz/src/force_sgh_rz.cpp @@ -92,13 +92,6 @@ void SGHRZ::get_force_rz(const Material_t& Materials, const size_t num_dims = 2; const size_t num_nodes_in_elem = 4; - // set corner force to zero - FOR_ALL(corner_gid, 0, mesh.num_corners, { - for (int dim = 0; dim < num_dims; dim++) { - corner_force(corner_gid, dim) = 0.0; - } - }); // end parallel for corners - // --- calculate the forces acting on the nodes from the element --- FOR_ALL(mat_elem_lid, 0, num_mat_elems, { @@ -408,6 +401,8 @@ void SGHRZ::get_force_rz(const Material_t& Materials, MaterialCorners_force(mat_corner_lid, dim) = force_component; corner_force(corner_gid, dim) += force_component; // tally all forces to the corner + printf("corner_force(corner_gid, dim)=%f \n", corner_force(corner_gid, dim)); + } // end loop over dimension // ---- add hoop stress terms ---- From 35c8855a8f4199c38f934b088d170e6a4d994bf9 Mon Sep 17 00:00:00 2001 From: Nathaniel Morgan Date: Wed, 21 Aug 2024 18:46:34 -0600 Subject: [PATCH 153/233] added positive radius contraints, used extensive mass in tallies, and fixed time step bug --- .../SGH_solver_3D/src/time_integration.cpp | 2 +- .../SGH_solver_rz/include/sgh_solver_rz.h | 8 ++--- .../SGH_solver_rz/src/force_sgh_rz.cpp | 2 -- .../Solvers/SGH_solver_rz/src/position_rz.cpp | 2 ++ .../SGH_solver_rz/src/sgh_execute_rz.cpp | 35 ++++++++----------- .../SGH_solver_rz/src/time_integration_rz.cpp | 4 +-- 6 files changed, 23 insertions(+), 30 deletions(-) diff --git a/single-node-refactor/src/Solvers/SGH_solver_3D/src/time_integration.cpp b/single-node-refactor/src/Solvers/SGH_solver_3D/src/time_integration.cpp index 31dca5abf..ce00b2c30 100644 --- a/single-node-refactor/src/Solvers/SGH_solver_3D/src/time_integration.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver_3D/src/time_integration.cpp @@ -177,7 +177,7 @@ void SGH3D::get_timestep(Mesh_t& mesh, // local dt calc based on CFL double dt_lcl_ = dt_cfl * dist_min / (MaterialPoints_sspd(mat_elem_lid) + fuzz); - if (MaterialToMeshMaps_elem(mat_elem_lid) == true) { + if (MaterialPoints_eroded(mat_elem_lid) == true) { dt_lcl_ = 1.0e32; // a huge time step as this element doesn't exist } diff --git a/single-node-refactor/src/Solvers/SGH_solver_rz/include/sgh_solver_rz.h b/single-node-refactor/src/Solvers/SGH_solver_rz/include/sgh_solver_rz.h index 1dab442a7..db93ad45d 100644 --- a/single-node-refactor/src/Solvers/SGH_solver_rz/include/sgh_solver_rz.h +++ b/single-node-refactor/src/Solvers/SGH_solver_rz/include/sgh_solver_rz.h @@ -333,15 +333,13 @@ double sum_domain_internal_energy_rz(const DCArrayKokkos& MaterialPoints double sum_domain_kinetic_energy_rz(const Mesh_t& mesh, const DCArrayKokkos& node_vel, - const DCArrayKokkos& node_coords, - const DCArrayKokkos& node_mass); + const CArrayKokkos& node_extensive_mass); double sum_domain_material_mass_rz(const DCArrayKokkos& MaterialPoints_mass, const size_t num_mat_points); -double sum_domain_node_mass_rz(const Mesh_t& mesh, - const DCArrayKokkos& node_coords, - const DCArrayKokkos& node_mass); +double sum_domain_node_mass_rz(const CArrayKokkos& extensive_node_mass, + const size_t num_nodes); void set_corner_force_zero_rz(const Mesh_t& mesh, const DCArrayKokkos& corner_force); diff --git a/single-node-refactor/src/Solvers/SGH_solver_rz/src/force_sgh_rz.cpp b/single-node-refactor/src/Solvers/SGH_solver_rz/src/force_sgh_rz.cpp index 5dcad4b31..eb4c128a7 100644 --- a/single-node-refactor/src/Solvers/SGH_solver_rz/src/force_sgh_rz.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver_rz/src/force_sgh_rz.cpp @@ -401,8 +401,6 @@ void SGHRZ::get_force_rz(const Material_t& Materials, MaterialCorners_force(mat_corner_lid, dim) = force_component; corner_force(corner_gid, dim) += force_component; // tally all forces to the corner - printf("corner_force(corner_gid, dim)=%f \n", corner_force(corner_gid, dim)); - } // end loop over dimension // ---- add hoop stress terms ---- diff --git a/single-node-refactor/src/Solvers/SGH_solver_rz/src/position_rz.cpp b/single-node-refactor/src/Solvers/SGH_solver_rz/src/position_rz.cpp index 8f040059f..6a7d761c1 100644 --- a/single-node-refactor/src/Solvers/SGH_solver_rz/src/position_rz.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver_rz/src/position_rz.cpp @@ -59,6 +59,8 @@ void SGHRZ::update_position_rz(double rk_alpha, for (int dim = 0; dim < num_dims; dim++) { double half_vel = (node_vel(1, node_gid, dim) + node_vel(0, node_gid, dim)) * 0.5; node_coords(1, node_gid, dim) = node_coords(0, node_gid, dim) + rk_alpha * dt * half_vel; + + node_coords(1, node_gid, dim) = fmax(0.0, node_coords(1, node_gid, dim)); } }); // end parallel for over nodes } // end subroutine \ No newline at end of file diff --git a/single-node-refactor/src/Solvers/SGH_solver_rz/src/sgh_execute_rz.cpp b/single-node-refactor/src/Solvers/SGH_solver_rz/src/sgh_execute_rz.cpp index 56b32a4f5..239fde485 100644 --- a/single-node-refactor/src/Solvers/SGH_solver_rz/src/sgh_execute_rz.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver_rz/src/sgh_execute_rz.cpp @@ -130,8 +130,7 @@ void SGHRZ::execute(SimulationParameters_t& SimulationParamaters, // extensive KE KE_t0 = sum_domain_kinetic_energy_rz(mesh, State.node.vel, - State.node.coords, - State.node.mass); + node_extensive_mass); // extensive TE TE_t0 = IE_t0 + KE_t0; @@ -151,9 +150,8 @@ void SGHRZ::execute(SimulationParameters_t& SimulationParamaters, } // end for // node mass of the domain - mass_domain_nodes_t0 = sum_domain_node_mass_rz(mesh, - State.node.coords, - State.node.mass); + mass_domain_nodes_t0 = sum_domain_node_mass_rz(node_extensive_mass, + mesh.num_nodes); printf("nodal mass domain = %f \n", mass_domain_nodes_t0); @@ -438,8 +436,7 @@ void SGHRZ::execute(SimulationParameters_t& SimulationParamaters, // extensive KE KE_tend = sum_domain_kinetic_energy_rz(mesh, State.node.vel, - State.node.coords, - State.node.mass); + node_extensive_mass); // extensive TE TE_tend = IE_tend + KE_tend; @@ -462,9 +459,8 @@ void SGHRZ::execute(SimulationParameters_t& SimulationParamaters, } // end for // node mass of the domain - mass_domain_nodes_tend = sum_domain_node_mass_rz(mesh, - State.node.coords, - State.node.mass); + mass_domain_nodes_tend = sum_domain_node_mass_rz(node_extensive_mass, + mesh.num_nodes); printf("material mass conservation error = %f \n",mass_domain_all_mats_tend - mass_domain_all_mats_t0); printf("nodal mass conservation error = %f \n", mass_domain_nodes_tend - mass_domain_nodes_t0); @@ -496,8 +492,7 @@ double sum_domain_internal_energy_rz(const DCArrayKokkos& MaterialPoints double sum_domain_kinetic_energy_rz(const Mesh_t& mesh, const DCArrayKokkos& node_vel, - const DCArrayKokkos& node_coords, - const DCArrayKokkos& node_mass) + const CArrayKokkos& node_extensive_mass) { // extensive KE double KE_sum = 0.0; @@ -507,10 +502,10 @@ double sum_domain_kinetic_energy_rz(const Mesh_t& mesh, double ke = 0; for (size_t dim = 0; dim < mesh.num_dims; dim++) { - ke += node_vel(1, node_gid, dim) * node_vel(1, node_gid, dim); // 1/2 at end + ke += node_vel(1, node_gid, dim) * node_vel(1, node_gid, dim); // 1/2 at end, in the return } // end for - KE_loc_sum += node_mass(node_gid) * node_coords(1, node_gid, 1) * ke; + KE_loc_sum += node_extensive_mass(node_gid) * ke; // 1/2 in the return }, KE_sum); Kokkos::fence(); @@ -539,17 +534,15 @@ double sum_domain_material_mass_rz(const DCArrayKokkos& MaterialPoints_m } // end function -double sum_domain_node_mass_rz(const Mesh_t& mesh, - const DCArrayKokkos& node_coords, - const DCArrayKokkos& node_mass) +double sum_domain_node_mass_rz(const CArrayKokkos& node_extensive_mass, + const size_t num_nodes) { - double mass_domain = 0.0; double mass_loc_domain; - REDUCE_SUM(node_gid, 0, mesh.num_nodes, mass_loc_domain, { + REDUCE_SUM(node_gid, 0, num_nodes, mass_loc_domain, { - mass_loc_domain += node_mass(node_gid) * node_coords(1, node_gid, 1); + mass_loc_domain += node_extensive_mass(node_gid); }, mass_domain); Kokkos::fence(); @@ -634,6 +627,8 @@ void calc_node_areal_mass_rz(const Mesh_t& mesh, // if the node is off the axis, use it's areal mass on the boundary if (node_coords(1, node_neighbor_gid, 1) > tiny) { node_mass(node_gid) = fmax(node_mass(node_gid), node_mass(node_neighbor_gid) / 2.0); + // Why half, the on axis node is half the total area mass of the off-axis node + // node_mass = rho*A } } // end for over neighboring nodes } // end if diff --git a/single-node-refactor/src/Solvers/SGH_solver_rz/src/time_integration_rz.cpp b/single-node-refactor/src/Solvers/SGH_solver_rz/src/time_integration_rz.cpp index 588ad0ffe..28fdfc603 100644 --- a/single-node-refactor/src/Solvers/SGH_solver_rz/src/time_integration_rz.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver_rz/src/time_integration_rz.cpp @@ -164,10 +164,10 @@ void SGHRZ::get_timestep_rz(Mesh_t& mesh, } // local dt calc based on CFL - double dt_lcl_ = dt_cfl * dist_min / (MaterialPoints_sspd(elem_gid) + fuzz); + double dt_lcl_ = dt_cfl * dist_min / (MaterialPoints_sspd(mat_elem_lid) + fuzz); - if (MaterialToMeshMaps_elem(mat_elem_lid) == true){ + if (MaterialPoints_eroded(mat_elem_lid) == true){ dt_lcl_ = 1.0e32; // a huge time step as this element doesn't exist } From c6534807d380f8acd4962aa3cd79e3017ebdcf5a Mon Sep 17 00:00:00 2001 From: Nathaniel Morgan Date: Wed, 21 Aug 2024 19:47:44 -0600 Subject: [PATCH 154/233] added volfrac to 3D and 2DRZ solvers --- .../src/Solvers/SGH_solver_3D/include/sgh_solver_3D.h | 1 + .../src/Solvers/SGH_solver_3D/src/force_sgh.cpp | 6 +++++- .../src/Solvers/SGH_solver_3D/src/sgh_execute.cpp | 1 + .../src/Solvers/SGH_solver_3D/src/sgh_setup.cpp | 5 +++++ .../src/Solvers/SGH_solver_rz/include/sgh_solver_rz.h | 1 + .../src/Solvers/SGH_solver_rz/src/force_sgh_rz.cpp | 6 +++++- .../src/Solvers/SGH_solver_rz/src/sgh_execute_rz.cpp | 1 + .../src/Solvers/SGH_solver_rz/src/sgh_setup_rz.cpp | 5 +++++ single-node-refactor/src/common/state.h | 3 +++ 9 files changed, 27 insertions(+), 2 deletions(-) diff --git a/single-node-refactor/src/Solvers/SGH_solver_3D/include/sgh_solver_3D.h b/single-node-refactor/src/Solvers/SGH_solver_3D/include/sgh_solver_3D.h index 443764c75..8240e6d98 100644 --- a/single-node-refactor/src/Solvers/SGH_solver_3D/include/sgh_solver_3D.h +++ b/single-node-refactor/src/Solvers/SGH_solver_3D/include/sgh_solver_3D.h @@ -196,6 +196,7 @@ class SGH3D : public Solver const DCArrayKokkos& MaterialPoints_sspd, const DCArrayKokkos& MaterialPoints_statev, const DCArrayKokkos& MaterialCorners_force, + const DCArrayKokkos& MaterialPoints_volfrac, const corners_in_mat_t, const DCArrayKokkos& MaterialToMeshMaps_elem, const size_t num_mat_elems, diff --git a/single-node-refactor/src/Solvers/SGH_solver_3D/src/force_sgh.cpp b/single-node-refactor/src/Solvers/SGH_solver_3D/src/force_sgh.cpp index 07a11e886..7de569d13 100644 --- a/single-node-refactor/src/Solvers/SGH_solver_3D/src/force_sgh.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver_3D/src/force_sgh.cpp @@ -78,6 +78,7 @@ void SGH3D::get_force(const Material_t& Materials, const DCArrayKokkos& MaterialPoints_sspd, const DCArrayKokkos& MaterialPoints_statev, const DCArrayKokkos& MaterialCorners_force, + const DCArrayKokkos& MaterialPoints_volfrac, const corners_in_mat_t corners_in_mat_elem, const DCArrayKokkos& MaterialToMeshMaps_elem, const size_t num_mat_elems, @@ -400,8 +401,11 @@ void SGH3D::get_force(const Material_t& Materials, + area_normal(node_lid, 2) * tau(2, dim) + phi * muc(node_lid) * (vel_star(dim) - node_vel(1, node_gid, dim)); + // save the material corner force MaterialCorners_force(mat_corner_lid, dim) = force_component; - corner_force(corner_gid, dim) += force_component; // tally all forces to the corner + + // tally all material forces to the corner + corner_force(corner_gid, dim) += force_component*MaterialPoints_volfrac(mat_point_lid); } // end loop over dimension } // end if diff --git a/single-node-refactor/src/Solvers/SGH_solver_3D/src/sgh_execute.cpp b/single-node-refactor/src/Solvers/SGH_solver_3D/src/sgh_execute.cpp index b57dfc6d0..166649ab7 100644 --- a/single-node-refactor/src/Solvers/SGH_solver_3D/src/sgh_execute.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver_3D/src/sgh_execute.cpp @@ -261,6 +261,7 @@ void SGH3D::execute(SimulationParameters_t& SimulationParamaters, State.MaterialPoints(mat_id).sspd, State.MaterialPoints(mat_id).statev, State.MaterialCorners(mat_id).force, + State.MaterialPoints(mat_id).volfrac, State.corners_in_mat_elem, State.MaterialToMeshMaps(mat_id).elem, num_mat_elems, diff --git a/single-node-refactor/src/Solvers/SGH_solver_3D/src/sgh_setup.cpp b/single-node-refactor/src/Solvers/SGH_solver_3D/src/sgh_setup.cpp index 92b266812..de8973de1 100644 --- a/single-node-refactor/src/Solvers/SGH_solver_3D/src/sgh_setup.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver_3D/src/sgh_setup.cpp @@ -391,6 +391,9 @@ void SGH3D::setup(SimulationParameters_t& SimulationParamaters, State.MaterialPoints(mat_id).den.host(mat_point_lid) = GaussPoint_den.host(gauss_gid); State.MaterialPoints(mat_id).mass.host(mat_point_lid) = GaussPoint_den.host(gauss_gid) * State.GaussPoints.vol.host(gauss_gid); + // --- volume fraction --- + State.MaterialPoints(mat_id).volfrac.host(mat_point_lid) = 1.0; + // --- set eroded flag to false --- State.MaterialPoints(mat_id).eroded.host(mat_point_lid) = false; @@ -415,6 +418,8 @@ void SGH3D::setup(SimulationParameters_t& SimulationParamaters, State.MaterialPoints(mat_id).den.update_device(); State.MaterialPoints(mat_id).mass.update_device(); State.MaterialPoints(mat_id).sie.update_device(); + + State.MaterialPoints(mat_id).volfrac.update_device(); State.MaterialPoints(mat_id).eroded.update_device(); State.MaterialToMeshMaps(mat_id).elem.update_device(); diff --git a/single-node-refactor/src/Solvers/SGH_solver_rz/include/sgh_solver_rz.h b/single-node-refactor/src/Solvers/SGH_solver_rz/include/sgh_solver_rz.h index db93ad45d..fa6ccaf04 100644 --- a/single-node-refactor/src/Solvers/SGH_solver_rz/include/sgh_solver_rz.h +++ b/single-node-refactor/src/Solvers/SGH_solver_rz/include/sgh_solver_rz.h @@ -197,6 +197,7 @@ class SGHRZ : public Solver const DCArrayKokkos& MaterialPoints_sspd, const DCArrayKokkos& MaterialPoints_statev, const DCArrayKokkos& MaterialCorners_force, + const DCArrayKokkos& MaterialPoints_volfrac, const corners_in_mat_t, const DCArrayKokkos& MaterialToMeshMaps_elem, const size_t num_mat_elems, diff --git a/single-node-refactor/src/Solvers/SGH_solver_rz/src/force_sgh_rz.cpp b/single-node-refactor/src/Solvers/SGH_solver_rz/src/force_sgh_rz.cpp index eb4c128a7..c9a18e206 100644 --- a/single-node-refactor/src/Solvers/SGH_solver_rz/src/force_sgh_rz.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver_rz/src/force_sgh_rz.cpp @@ -79,6 +79,7 @@ void SGHRZ::get_force_rz(const Material_t& Materials, const DCArrayKokkos& MaterialPoints_sspd, const DCArrayKokkos& MaterialPoints_statev, const DCArrayKokkos& MaterialCorners_force, + const DCArrayKokkos& MaterialPoints_volfrac, const corners_in_mat_t corners_in_mat_elem, const DCArrayKokkos& MaterialToMeshMaps_elem, const size_t num_mat_elems, @@ -398,8 +399,11 @@ void SGHRZ::get_force_rz(const Material_t& Materials, + area_normal(node_lid, 1) * tau(1, dim) + phi * muc(node_lid) * (vel_star(dim) - node_vel(1, node_gid, dim)); + // save the material corner force MaterialCorners_force(mat_corner_lid, dim) = force_component; - corner_force(corner_gid, dim) += force_component; // tally all forces to the corner + + // tally all forces to the corner + corner_force(corner_gid, dim) += force_component*MaterialPoints_volfrac(mat_point_lid); } // end loop over dimension diff --git a/single-node-refactor/src/Solvers/SGH_solver_rz/src/sgh_execute_rz.cpp b/single-node-refactor/src/Solvers/SGH_solver_rz/src/sgh_execute_rz.cpp index 239fde485..7507d9bf2 100644 --- a/single-node-refactor/src/Solvers/SGH_solver_rz/src/sgh_execute_rz.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver_rz/src/sgh_execute_rz.cpp @@ -275,6 +275,7 @@ void SGHRZ::execute(SimulationParameters_t& SimulationParamaters, State.MaterialPoints(mat_id).sspd, State.MaterialPoints(mat_id).statev, State.MaterialCorners(mat_id).force, + State.MaterialPoints(mat_id).volfrac, State.corners_in_mat_elem, State.MaterialToMeshMaps(mat_id).elem, num_mat_elems, diff --git a/single-node-refactor/src/Solvers/SGH_solver_rz/src/sgh_setup_rz.cpp b/single-node-refactor/src/Solvers/SGH_solver_rz/src/sgh_setup_rz.cpp index 896128beb..099a4a0c5 100644 --- a/single-node-refactor/src/Solvers/SGH_solver_rz/src/sgh_setup_rz.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver_rz/src/sgh_setup_rz.cpp @@ -432,6 +432,9 @@ void SGHRZ::setup(SimulationParameters_t& SimulationParamaters, State.MaterialPoints(mat_id).den.host(mat_point_lid) = GaussPoint_den.host(gauss_gid); State.MaterialPoints(mat_id).mass.host(mat_point_lid) = GaussPoint_den.host(gauss_gid) * State.GaussPoints.vol.host(gauss_gid); + // --- volume fraction --- + State.MaterialPoints(mat_id).volfrac.host(mat_point_lid) = 1.0; + // --- set eroded flag to false --- State.MaterialPoints(mat_id).eroded.host(mat_point_lid) = false; @@ -459,6 +462,8 @@ void SGHRZ::setup(SimulationParameters_t& SimulationParamaters, State.MaterialPoints(mat_id).den.update_device(); State.MaterialPoints(mat_id).mass.update_device(); State.MaterialPoints(mat_id).sie.update_device(); + + State.MaterialPoints(mat_id).volfrac.update_device(); State.MaterialPoints(mat_id).eroded.update_device(); State.MaterialToMeshMaps(mat_id).elem.update_device(); diff --git a/single-node-refactor/src/common/state.h b/single-node-refactor/src/common/state.h index 58c039a8f..6491a2a47 100644 --- a/single-node-refactor/src/common/state.h +++ b/single-node-refactor/src/common/state.h @@ -119,6 +119,8 @@ struct MaterialPoint_t DCArrayKokkos sspd; ///< MaterialPoint sound speed DCArrayKokkos mass; ///< MaterialPoint mass + DCArrayKokkos volfrac; ///< MaterialPoint volume fraction + DCArrayKokkos eroded; ///< MaterialPoint eroded or not flag DCArrayKokkos sie; ///< coefficients for the sie in strong form, only used in some methods e.g., FE-SGH and MPM @@ -137,6 +139,7 @@ struct MaterialPoint_t this->sspd = DCArrayKokkos(num_pts_max, "material_point_sspd"); this->mass = DCArrayKokkos(num_pts_max, "material_point_mass"); this->sie = DCArrayKokkos(num_rk, num_pts_max, "material_point_sie"); + this->volfrac = DCArrayKokkos(num_pts_max, "material_point_volfrac"); this->eroded = DCArrayKokkos(num_pts_max, "material_point_eroded"); }; // end method From 1db71606a4db4769695e70334ac9059fd6f3145f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CAdrian-Diaz=E2=80=9D?= <“adriandiaz1117@gmail.com”> Date: Wed, 21 Aug 2024 20:45:15 -0600 Subject: [PATCH 155/233] ENH: Internal energy objective --- .../Internal_Energy_Minimize.h | 60 ++++++------------- .../Kinetic_Energy_Minimize.h | 1 - 2 files changed, 17 insertions(+), 44 deletions(-) diff --git a/src/Parallel-Solvers/Parallel-Explicit/Topology_Optimization/Internal_Energy_Minimize.h b/src/Parallel-Solvers/Parallel-Explicit/Topology_Optimization/Internal_Energy_Minimize.h index 1cff7d4b5..ff857a3ba 100644 --- a/src/Parallel-Solvers/Parallel-Explicit/Topology_Optimization/Internal_Energy_Minimize.h +++ b/src/Parallel-Solvers/Parallel-Explicit/Topology_Optimization/Internal_Energy_Minimize.h @@ -313,7 +313,6 @@ typedef MV::dual_view_type dual_vec_array; auto optimization_objective_regions = FEM_SGH_->simparam->optimization_options.optimization_objective_regions; const_vec_array all_initial_node_coords = FEM_SGH_->all_initial_node_coords_distributed->getLocalView(Tpetra::Access::ReadOnly); REDUCE_SUM_CLASS(elem_gid, 0, nlocal_elem_non_overlapping, IE_loc_sum, { - double ke = 0; int node_id; double current_elem_coords[3]; bool contained = false; @@ -447,10 +446,8 @@ typedef MV::dual_view_type dual_vec_array; const size_t& rk_level){ - FOR_ALL_CLASS(node_gid, 0, nlocal_nodes, { - for (int idim = 0; idim < num_dim; idim++) { - adjoint_rate_vector(node_gid, idim) = node_mass(node_gid)*node_vel(rk_level, node_gid, idim); - } + FOR_ALL_CLASS(elem_gid, 0, rnum_elem, { + adjoint_rate_vector(elem_gid, 0) = elem_mass(elem_gid); }); // end parallel for Kokkos::fence(); } @@ -461,8 +458,6 @@ typedef MV::dual_view_type dual_vec_array; const DViewCArrayKokkos& node_coords, const DViewCArrayKokkos& elem_sie, const size_t& rk_level, const real_t& global_dt = 0){ size_t current_data_index, next_data_index; - CArrayKokkos current_element_velocities = CArrayKokkos(num_nodes_in_elem, num_dim); - CArrayKokkos current_element_adjoint = CArrayKokkos(num_nodes_in_elem, num_dim); auto optimization_objective_regions = FEM_SGH_->simparam->optimization_options.optimization_objective_regions; auto nodes_in_elem = FEM_SGH_->nodes_in_elem; auto corner_value_storage = FEM_SGH_->corner_value_storage; @@ -481,33 +476,27 @@ typedef MV::dual_view_type dual_vec_array; real_t inner_product; // std::cout << elem_mass(elem_id) < current_element_velocities = CArrayKokkos(num_nodes_in_elem, num_dim); - CArrayKokkos current_element_adjoint = CArrayKokkos(num_nodes_in_elem, num_dim); auto optimization_objective_regions = FEM_SGH_->simparam->optimization_options.optimization_objective_regions; auto nodes_in_elem = FEM_SGH_->nodes_in_elem; auto corner_value_storage = FEM_SGH_->corner_value_storage; From e80b46f25f89d26e350ec5f624d1806cf87cf7bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CAdrian-Diaz=E2=80=9D?= <“adriandiaz1117@gmail.com”> Date: Thu, 22 Aug 2024 18:57:55 -0600 Subject: [PATCH 156/233] BUG: missing recast error --- .../Parallel-Explicit/SGH_Solver/src/sgh_optimization.cpp | 6 +++--- .../Topology_Optimization/Internal_Energy_Minimize.h | 1 - 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/sgh_optimization.cpp b/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/sgh_optimization.cpp index f9f9864a7..3aba79eb2 100644 --- a/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/sgh_optimization.cpp +++ b/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/sgh_optimization.cpp @@ -68,7 +68,7 @@ // optimization #include "ROL_Solver.hpp" -#include "Kinetic_Energy_Minimize.h" +#include "Fierro_Optimization_Objective.hpp" ///////////////////////////////////////////////////////////////////////////// /// @@ -173,8 +173,8 @@ void FEA_Module_SGH::update_forward_solve(Teuchos::RCP zp, bool print_ */ // simple setup to just request KE for now; above loop to be expanded and used later for scanning modules obj_pointer = problem->getObjective(); - KineticEnergyMinimize_TopOpt& kinetic_energy_minimize_function = dynamic_cast(*obj_pointer); - kinetic_energy_minimize_function.objective_accumulation = 0; + objective_function = dynamic_cast(obj_pointer.getRawPtr()); + objective_function->objective_accumulation = 0; // interface trial density vector diff --git a/src/Parallel-Solvers/Parallel-Explicit/Topology_Optimization/Internal_Energy_Minimize.h b/src/Parallel-Solvers/Parallel-Explicit/Topology_Optimization/Internal_Energy_Minimize.h index ff857a3ba..f74208455 100644 --- a/src/Parallel-Solvers/Parallel-Explicit/Topology_Optimization/Internal_Energy_Minimize.h +++ b/src/Parallel-Solvers/Parallel-Explicit/Topology_Optimization/Internal_Energy_Minimize.h @@ -511,7 +511,6 @@ typedef MV::dual_view_type dual_vec_array; } else{ FOR_ALL_CLASS(elem_id, 0, rnum_elem, { - size_t node_id; size_t corner_id; real_t inner_product; // std::cout << elem_mass(elem_id) < Date: Sat, 24 Aug 2024 00:28:56 -0600 Subject: [PATCH 157/233] BUG: elem_sie access bug in objective --- .../Internal_Energy_Minimize.h | 13 ++++++++----- .../Topology_Optimization/Kinetic_Energy_Minimize.h | 3 +++ 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/Parallel-Solvers/Parallel-Explicit/Topology_Optimization/Internal_Energy_Minimize.h b/src/Parallel-Solvers/Parallel-Explicit/Topology_Optimization/Internal_Energy_Minimize.h index f74208455..b41516140 100644 --- a/src/Parallel-Solvers/Parallel-Explicit/Topology_Optimization/Internal_Energy_Minimize.h +++ b/src/Parallel-Solvers/Parallel-Explicit/Topology_Optimization/Internal_Energy_Minimize.h @@ -280,6 +280,9 @@ typedef MV::dual_view_type dual_vec_array; } FEM_SGH_->comm_variables(zp); FEM_SGH_->update_forward_solve(zp); + if(Explicit_Solver_Pointer_->myrank == 0){ + std::cout << "CURRENT TIME INTEGRAL OF INTERNAL ENERGY " << objective_accumulation << std::endl; + } FEM_SGH_->compute_topology_optimization_adjoint_full(zp); } } @@ -342,6 +345,7 @@ typedef MV::dual_view_type dual_vec_array; IE_loc_sum += elem_mass(elem_gid) * 0.5 * (current_elem_sie(elem_gid,0)+previous_elem_sie(elem_gid,0)); }, IE_sum); } + Kokkos::fence(); objective_accumulation += IE_sum * dt; } @@ -457,7 +461,6 @@ typedef MV::dual_view_type dual_vec_array; const DViewCArrayKokkos& elem_mass, const DViewCArrayKokkos& node_vel, const DViewCArrayKokkos& node_coords, const DViewCArrayKokkos& elem_sie, const size_t& rk_level, const real_t& global_dt = 0){ - size_t current_data_index, next_data_index; auto optimization_objective_regions = FEM_SGH_->simparam->optimization_options.optimization_objective_regions; auto nodes_in_elem = FEM_SGH_->nodes_in_elem; auto corner_value_storage = FEM_SGH_->corner_value_storage; @@ -496,7 +499,7 @@ typedef MV::dual_view_type dual_vec_array; } } if(contained){ - inner_product = elem_mass(elem_id) * elem_sie(elem_id); + inner_product = elem_mass(elem_id) * elem_sie(rk_level, elem_id); } } @@ -515,13 +518,13 @@ typedef MV::dual_view_type dual_vec_array; real_t inner_product; // std::cout << elem_mass(elem_id) <comm_variables(zp); FEM_SGH_->update_forward_solve(zp); + if(Explicit_Solver_Pointer_->myrank == 0){ + std::cout << "CURRENT TIME INTEGRAL OF KINETIC ENERGY " << objective_accumulation << std::endl; + } FEM_SGH_->compute_topology_optimization_adjoint_full(zp); } } From ca8d67ba93e1961f9da8db4286dfaa3801c76c7b Mon Sep 17 00:00:00 2001 From: Nathaniel Morgan Date: Sat, 24 Aug 2024 18:05:38 -0600 Subject: [PATCH 158/233] added state node output --- single-node-refactor/input-rz-polar.yaml | 13 ++- single-node-refactor/src/common/mesh_io.h | 86 +++++++++++++++++++ .../material_models/eos/user_defined_eos.h | 2 + 3 files changed, 97 insertions(+), 4 deletions(-) diff --git a/single-node-refactor/input-rz-polar.yaml b/single-node-refactor/input-rz-polar.yaml index 6cb90e8de..0fa132aad 100644 --- a/single-node-refactor/input-rz-polar.yaml +++ b/single-node-refactor/input-rz-polar.yaml @@ -1,11 +1,11 @@ # num_dims: 3 dynamic_options: - time_final: 1.0 + time_final: 10.0 dt_min: 1.e-8 dt_max: 1.e-2 dt_start: 1.e-5 - cycle_stop: 10000 + cycle_stop: 10000000 # mesh_options: @@ -28,7 +28,7 @@ mesh_options: output_options: timer_output_level: thorough - output_file_format: state #ensight state + output_file_format: ensight #ensight state graphics_time_step: 0.25 #graphics_iteration_step: 2 @@ -65,7 +65,12 @@ boundary_conditions: value: 0.025 type: zero_velocity - + # Tag outer circle + - boundary_condition: + solver: SGHRZ + geometry: cylinder + value: 1.2 + type: zero_velocity materials: - material: diff --git a/single-node-refactor/src/common/mesh_io.h b/single-node-refactor/src/common/mesh_io.h index 9ea9078dd..66892a474 100644 --- a/single-node-refactor/src/common/mesh_io.h +++ b/single-node-refactor/src/common/mesh_io.h @@ -1911,6 +1911,92 @@ class MeshWriter } // end for materials fclose(out_elem_state); + + // printing nodal state + + FILE* out_point_state; // element average state + + snprintf(filename, max_len, "state/node_state_t_%6.4e.txt", time_value); + + // output files + out_point_state = fopen(filename, "w"); + + // write state dump + fprintf(out_point_state, "# state node dump file\n"); + fprintf(out_point_state, "# x y z radius_2D radius_3D vel_x vel_y vel_z speed ||err_v_dot_r|| \n"); + + // get the coordinates of the node + for (size_t node_gid = 0; node_gid < mesh.num_nodes; node_gid++) { + + double node_coords[3]; + + node_coords[0] = State.node.coords.host(1, node_gid, 0); + node_coords[1] = State.node.coords.host(1, node_gid, 1); + if (num_dims == 3) { + node_coords[2] = State.node.coords.host(1, node_gid, 2); + } + else{ + node_coords[2] = 0.0; + } + + double rad2 = sqrt(node_coords[0] * node_coords[0] + + node_coords[1] * node_coords[1]); + double rad3 = sqrt(node_coords[0] * node_coords[0] + + node_coords[1] * node_coords[1] + + node_coords[2] * node_coords[2]); + + double node_vel[3]; + + node_vel[0] = State.node.vel.host(1, node_gid, 0); + node_vel[1] = State.node.vel.host(1, node_gid, 1); + if (num_dims == 3) { + node_vel[2] = State.node.vel.host(1, node_gid, 2); + } + else{ + node_vel[2] = 0.0; + } + + double speed = sqrt(node_vel[0] * node_vel[0] + + node_vel[1] * node_vel[1] + + node_vel[2] * node_vel[2]); + + + + // looking at perfect radial motion + double unit_r_vec[2]; + unit_r_vec[0] = node_coords[0]/rad2; + unit_r_vec[1] = node_coords[1]/rad2; + + //the radial motion + double v_dot_r = node_vel[0] * unit_r_vec[0] + + node_vel[1] * unit_r_vec[1]; + + + double err_v_dot_r[3]; + err_v_dot_r[0] = node_vel[0]-unit_r_vec[0]*v_dot_r; + err_v_dot_r[1] = node_vel[1]-unit_r_vec[1]*v_dot_r; + + double mag_err_v_dot_r = sqrt(err_v_dot_r[0]*err_v_dot_r[0] + err_v_dot_r[1]*err_v_dot_r[1]); + + fprintf(out_point_state, "%4.12e\t %4.12e\t %4.12e\t %4.12e\t %4.12e\t %4.12e\t %4.12e\t %4.12e\t %4.12e\t %4.12e\t \n", + node_coords[0], + node_coords[1], + node_coords[2], + rad2, + rad3, + node_vel[0], + node_vel[1], + node_vel[2], + speed, + mag_err_v_dot_r); + + + } // end loop over nodes in element + + + fclose(out_point_state); + + return; } // end of state output }; // end class diff --git a/single-node-refactor/src/material_models/eos/user_defined_eos.h b/single-node-refactor/src/material_models/eos/user_defined_eos.h index d7132022f..50a28e48b 100644 --- a/single-node-refactor/src/material_models/eos/user_defined_eos.h +++ b/single-node-refactor/src/material_models/eos/user_defined_eos.h @@ -35,6 +35,8 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef USER_DEFINED_EOS_H #define USER_DEFINED_EOS_H + + ///////////////////////////////////////////////////////////////////////////// /// /// \fn UserDefinedEOSModel From 721432462e9870c0c4f62b610453e627cc961561 Mon Sep 17 00:00:00 2001 From: Nathaniel Morgan Date: Sat, 24 Aug 2024 18:08:50 -0600 Subject: [PATCH 159/233] change input back to Sedov in RZ coords --- single-node-refactor/input-rz-polar.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/single-node-refactor/input-rz-polar.yaml b/single-node-refactor/input-rz-polar.yaml index 0fa132aad..287f1cf7a 100644 --- a/single-node-refactor/input-rz-polar.yaml +++ b/single-node-refactor/input-rz-polar.yaml @@ -1,7 +1,7 @@ # num_dims: 3 dynamic_options: - time_final: 10.0 + time_final: 1.0 dt_min: 1.e-8 dt_max: 1.e-2 dt_start: 1.e-5 @@ -28,7 +28,7 @@ mesh_options: output_options: timer_output_level: thorough - output_file_format: ensight #ensight state + output_file_format: state #ensight state graphics_time_step: 0.25 #graphics_iteration_step: 2 From 4a8eba1c3c7d90c710a88d11ccd99481780975ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CAdrian-Diaz=E2=80=9D?= <“adriandiaz1117@gmail.com”> Date: Mon, 26 Aug 2024 21:34:20 -0600 Subject: [PATCH 160/233] ENH: taylor anvil yaml example script for optimization --- .../taylor_anvil_opt.yaml | 96 +++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 src/Parallel-Solvers/Parallel-Explicit/Example_Yaml_Scripts/taylor_anvil_opt.yaml diff --git a/src/Parallel-Solvers/Parallel-Explicit/Example_Yaml_Scripts/taylor_anvil_opt.yaml b/src/Parallel-Solvers/Parallel-Explicit/Example_Yaml_Scripts/taylor_anvil_opt.yaml new file mode 100644 index 000000000..116dba50a --- /dev/null +++ b/src/Parallel-Solvers/Parallel-Explicit/Example_Yaml_Scripts/taylor_anvil_opt.yaml @@ -0,0 +1,96 @@ +num_dims: 3 +dynamic_options: + time_final: 20.0 + dt_min: 1.e-8 + dt_max: 1.e-2 + dt_start: 1.e-5 + cycle_stop: 2000000 + output_time_sequence_level: extreme + print_cycle: 20 + +num_dims: 3 +input_options: + mesh_file_format: ensight + mesh_file_name: mesh_z_taylorAnvil.geo + zero_index_base: false + topology_optimization_restart: false + +output_options: + timer_output_level: thorough + output_file_format: vtk + graphics_step: 5.0 + write_initial: true + write_final: false + optimization_restart_file: true + +fea_module_parameters: + - type: SGH + material_id: 0 + boundary_conditions: + # Tag X plane + - surface: + type: x_plane + plane_position: 0.0 + type: reflected + + # Tag Y plane + - surface: + type: y_plane + plane_position: 0.0 + type: reflected + + # Tag Z plane + - surface: + type: z_plane + plane_position: 0.0 + type: reflected + +materials: + - id: 0 + eos_model: ideal_gas + strength_model: none + elastic_modulus: 10 + poisson_ratio: 0.3 + maximum_limiter: true + q1: 2.0 + q2: 4.0 + q1ex: 2.0 + q2ex: 4.0 + eos_global_vars: + - 2.666666666666667 + - 1.0E-14 + - 1.0 + +regions: + - volume: + type: global + material_id: 0 + den: 1.0 + sie: 1.0e-9 + + velocity: cartesian + u: 0 + v: 0 + w: -0.5 + +optimization_options: + optimization_process: topology_optimization + optimization_objective: maximize_internal_energy + use_gradient_tally: true + use_solve_checkpoints: true + num_solve_checkpoints: 100 + disable_forward_solve_output: true + optimization_output_freq: 1 + rol_params: + subproblem_algorithm: line_search + initial_constraint_penalty: 1.e3 + step_tolerance: 1.e-3 + gradient_tolerance: 1.e-5 + constraint_tolerance: 1.e-5 + iteration_limit: 20 + density_epsilon: 0.4 + variable_outer_shell: true + constraints: + - type: mass + relation: equality + value: 0.60 From a281805976f590afe7fce2a9ca33bebcb4e2df96 Mon Sep 17 00:00:00 2001 From: Jacob Moore Date: Tue, 27 Aug 2024 10:11:13 -0500 Subject: [PATCH 161/233] BUG: Fix missing .host for GPU runs in output --- single-node-refactor/src/common/mesh_io.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/single-node-refactor/src/common/mesh_io.h b/single-node-refactor/src/common/mesh_io.h index 66892a474..c516a6eaf 100644 --- a/single-node-refactor/src/common/mesh_io.h +++ b/single-node-refactor/src/common/mesh_io.h @@ -1673,9 +1673,9 @@ class MeshWriter for (size_t node_gid = 0; node_gid < mesh.num_nodes; node_gid++) { fprintf(out[0], "%f %f %f\n", - State.node.coords(1, node_gid, 0), - State.node.coords(1, node_gid, 1), - State.node.coords(1, node_gid, 2)); + State.node.coords.host(1, node_gid, 0), + State.node.coords.host(1, node_gid, 1), + State.node.coords.host(1, node_gid, 2)); } // end for /* From 086302d9121e957c415d10bd63e9f1a95c719b13 Mon Sep 17 00:00:00 2001 From: Nathaniel Morgan Date: Tue, 27 Aug 2024 16:14:00 -0600 Subject: [PATCH 162/233] fixed 2d rz bug with max on node_coords --- single-node-refactor/input-rz-polar.yaml | 2 +- .../src/Solvers/SGH_solver_rz/src/position_rz.cpp | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/single-node-refactor/input-rz-polar.yaml b/single-node-refactor/input-rz-polar.yaml index 287f1cf7a..c931b37ca 100644 --- a/single-node-refactor/input-rz-polar.yaml +++ b/single-node-refactor/input-rz-polar.yaml @@ -5,7 +5,7 @@ dynamic_options: dt_min: 1.e-8 dt_max: 1.e-2 dt_start: 1.e-5 - cycle_stop: 10000000 + cycle_stop: 10000 # mesh_options: diff --git a/single-node-refactor/src/Solvers/SGH_solver_rz/src/position_rz.cpp b/single-node-refactor/src/Solvers/SGH_solver_rz/src/position_rz.cpp index 6a7d761c1..970c21050 100644 --- a/single-node-refactor/src/Solvers/SGH_solver_rz/src/position_rz.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver_rz/src/position_rz.cpp @@ -56,11 +56,14 @@ void SGHRZ::update_position_rz(double rk_alpha, { // loop over all the nodes in the mesh FOR_ALL(node_gid, 0, num_nodes, { + for (int dim = 0; dim < num_dims; dim++) { double half_vel = (node_vel(1, node_gid, dim) + node_vel(0, node_gid, dim)) * 0.5; node_coords(1, node_gid, dim) = node_coords(0, node_gid, dim) + rk_alpha * dt * half_vel; - - node_coords(1, node_gid, dim) = fmax(0.0, node_coords(1, node_gid, dim)); } + + // radius must always be positive in RZ coordinates, the coords are (z,r) + node_coords(1, node_gid, 1) = fmax(0.0, node_coords(1, node_gid, 1)); + }); // end parallel for over nodes } // end subroutine \ No newline at end of file From b2d7e09ea06f7e19b98452884d6ca590f9680f70 Mon Sep 17 00:00:00 2001 From: Jacob Moore Date: Wed, 28 Aug 2024 09:58:04 -0500 Subject: [PATCH 163/233] ENH: Add checks for rz solver that r>0 for polar mesh generation and SGHRZ setup --- .../src/Solvers/SGH_solver_rz/src/sgh_setup_rz.cpp | 7 +++++++ single-node-refactor/src/common/mesh_io.h | 5 +++++ 2 files changed, 12 insertions(+) diff --git a/single-node-refactor/src/Solvers/SGH_solver_rz/src/sgh_setup_rz.cpp b/single-node-refactor/src/Solvers/SGH_solver_rz/src/sgh_setup_rz.cpp index 099a4a0c5..e1a5cda75 100644 --- a/single-node-refactor/src/Solvers/SGH_solver_rz/src/sgh_setup_rz.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver_rz/src/sgh_setup_rz.cpp @@ -297,6 +297,13 @@ void SGHRZ::setup(SimulationParameters_t& SimulationParamaters, DCArrayKokkos voxel_elem_mat_id; // 1 or 0 if material exist, or it is the material_id + // Verify all node radii are positive + for(int i = 0; i Date: Wed, 28 Aug 2024 11:05:14 -0500 Subject: [PATCH 164/233] BUG: Fix incorrect index --- .../src/Solvers/SGH_solver_rz/src/sgh_setup_rz.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/single-node-refactor/src/Solvers/SGH_solver_rz/src/sgh_setup_rz.cpp b/single-node-refactor/src/Solvers/SGH_solver_rz/src/sgh_setup_rz.cpp index e1a5cda75..844804244 100644 --- a/single-node-refactor/src/Solvers/SGH_solver_rz/src/sgh_setup_rz.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver_rz/src/sgh_setup_rz.cpp @@ -298,7 +298,7 @@ void SGHRZ::setup(SimulationParameters_t& SimulationParamaters, // Verify all node radii are positive - for(int i = 0; i Date: Wed, 28 Aug 2024 11:06:28 -0500 Subject: [PATCH 165/233] ENH: Update regression testing for erosion after bugfix --- .../state/mat_pt_state_t_4.2500e+00.txt | 206 +++++++++--------- 1 file changed, 103 insertions(+), 103 deletions(-) diff --git a/single-node-refactor/regression_tests/standard_results/Sedov_Erosion/state/mat_pt_state_t_4.2500e+00.txt b/single-node-refactor/regression_tests/standard_results/Sedov_Erosion/state/mat_pt_state_t_4.2500e+00.txt index c699fb904..fb3330d73 100644 --- a/single-node-refactor/regression_tests/standard_results/Sedov_Erosion/state/mat_pt_state_t_4.2500e+00.txt +++ b/single-node-refactor/regression_tests/standard_results/Sedov_Erosion/state/mat_pt_state_t_4.2500e+00.txt @@ -1,7 +1,7 @@ # state dump file # x y z radius_2D radius_3D den pres sie sspd vol mass -4.336700469946e-02 4.336700469946e-02 4.336700469946e-02 6.133020620547e-02 7.511385551154e-02 1.000000000000e+11 0.000000000000e+00 7.762296898175e+00 1.000000000000e-32 1.000000000000e-14 1.000000000000e-03 -3.699232263673e-01 1.363453020654e-01 1.363453020654e-01 3.942502185178e-01 4.171609715645e-01 2.636265707486e-02 0.000000000000e+00 7.879287159264e-01 1.000000000000e-32 3.793244349992e-02 1.000000000000e-03 +4.336700469946e-02 4.336700469946e-02 4.336700469946e-02 6.133020620547e-02 7.511385551154e-02 1.000000000000e-32 0.000000000000e+00 7.762296898175e+00 1.000000000000e-32 1.000000000000e-14 1.000000000000e-03 +3.699232263673e-01 1.363453020654e-01 1.363453020654e-01 3.942502185178e-01 4.171609715645e-01 1.000000000000e-32 0.000000000000e+00 7.879287159264e-01 1.000000000000e-32 3.793244349992e-02 1.000000000000e-03 7.474787891692e-01 1.435996413686e-01 1.435996413686e-01 7.611474215019e-01 7.745748861538e-01 6.350485480573e-02 6.953960756385e-03 1.642542316881e-01 4.272056903596e-01 1.574682759388e-02 1.000000000000e-03 9.111308109915e-01 1.230939711829e-01 1.230939711829e-01 9.194082229780e-01 9.276117755942e-01 1.190367002232e-01 5.851029117584e-03 7.372972923411e-02 2.862200575977e-01 8.400770502922e-03 1.000000000000e-03 1.036173938274e+00 1.108277236740e-01 1.108277236740e-01 1.042084072757e+00 1.047960876669e+00 1.834262349479e-01 6.010302317250e-03 4.915029454995e-02 2.336909035218e-01 5.451782839484e-03 1.000000000000e-03 @@ -12,7 +12,7 @@ 1.636469103365e+00 7.387522244524e-02 7.387522244524e-02 1.638135731482e+00 1.639800665706e+00 2.850952917612e-01 2.169528686925e-03 1.141475543242e-02 1.126190995861e-01 3.507599139300e-03 1.000000000000e-03 1.814688658443e+00 7.502520181018e-02 7.502520181018e-02 1.816238890672e+00 1.817787800844e+00 2.263915272180e-01 1.372942183668e-03 9.096688824042e-03 1.005357251265e-01 4.417126437055e-03 1.000000000000e-03 2.020819520716e+00 7.998315076266e-02 7.998315076266e-02 2.022401750324e+00 2.023982743039e+00 1.792946737639e-01 6.359474464643e-04 5.320409969079e-03 7.688671297637e-02 5.577410522058e-03 1.000000000000e-03 -1.363453020654e-01 3.699232263673e-01 1.363453020654e-01 3.942502185178e-01 4.171609715645e-01 2.636265707486e-02 0.000000000000e+00 7.879287159264e-01 1.000000000000e-32 3.793244349992e-02 1.000000000000e-03 +1.363453020654e-01 3.699232263673e-01 1.363453020654e-01 3.942502185178e-01 4.171609715645e-01 1.000000000000e-32 0.000000000000e+00 7.879287159264e-01 1.000000000000e-32 3.793244349992e-02 1.000000000000e-03 4.518423607327e-01 4.518423607327e-01 1.508966476655e-01 6.390015946028e-01 6.565766034376e-01 2.603549095659e-02 7.459736321089e-03 4.297827338954e-01 6.910400646814e-01 3.840910861513e-02 1.000000000000e-03 7.336680399356e-01 4.263324498264e-01 1.425376760892e-01 8.485447251606e-01 8.604331116960e-01 6.420450578599e-02 6.091901678523e-03 1.423241625478e-01 3.976656364164e-01 1.557523086204e-02 1.000000000000e-03 9.026754672765e-01 3.692803592801e-01 1.238339207224e-01 9.752902044894e-01 9.831204518747e-01 1.267383659059e-01 6.019154824087e-03 7.123914034709e-02 2.813442737744e-01 7.890270581070e-03 1.000000000000e-03 @@ -74,7 +74,7 @@ 1.694208277854e+00 7.590680751711e-01 6.866633100748e-02 1.856482165681e+00 1.857751624009e+00 3.950027763486e-01 1.537601642797e-03 5.838952539818e-03 8.054641546489e-02 2.531627775491e-03 1.000000000000e-03 8.866905544943e-02 1.252614998406e+00 8.866905544943e-02 1.255749392047e+00 1.258875981588e+00 2.935696210117e-01 5.239355191863e-03 2.677059281785e-02 1.724676872082e-01 3.406347007410e-03 1.000000000000e-03 2.642515130219e-01 1.241990491814e+00 8.804600576280e-02 1.269791023709e+00 1.272839873284e+00 3.098946912126e-01 5.429415556615e-03 2.628029316364e-02 1.708810280206e-01 3.226902649048e-03 1.000000000000e-03 -4.343646135052e-01 1.219359194077e+00 8.680973908880e-02 1.294414717795e+00 1.297322393411e+00 3.463460180090e-01 5.809585825264e-03 2.516090350335e-02 1.672021514460e-01 2.887285974149e-03 1.000000000000e-03 +4.343646135052e-01 1.219359194077e+00 8.680973908880e-02 1.294414717795e+00 1.297322393411e+00 3.463460180090e-01 5.809585825264e-03 2.516090350335e-02 1.672021514460e-01 2.887285974150e-03 1.000000000000e-03 5.958213623021e-01 1.183728515681e+00 8.500674652494e-02 1.325223111258e+00 1.327946701327e+00 4.021201615519e-01 6.410802855880e-03 2.391375813317e-02 1.630056513443e-01 2.486818855689e-03 1.000000000000e-03 7.467867542766e-01 1.135770118338e+00 8.272386986111e-02 1.359288129159e+00 1.361803016856e+00 4.772442581691e-01 7.142477499569e-03 2.244912550746e-02 1.579350271031e-01 2.095363082704e-03 1.000000000000e-03 8.855785166779e-01 1.076654825200e+00 7.978553534258e-02 1.394071347467e+00 1.396352625048e+00 5.715975083103e-01 7.935044307390e-03 2.082333510563e-02 1.521086421156e-01 1.749482783709e-03 1.000000000000e-03 @@ -83,7 +83,7 @@ 1.233896793680e+00 8.986415355632e-01 6.852224185870e-02 1.526452720163e+00 1.527989922913e+00 7.852777850876e-01 6.632457870852e-03 1.266900324344e-02 1.186451443191e-01 1.273434724616e-03 1.000000000000e-03 1.344960916087e+00 8.632463147484e-01 6.592880282032e-02 1.598159587065e+00 1.599518887906e+00 7.229530639530e-01 4.921182577874e-03 1.021058521621e-02 1.065133544898e-01 1.383215660685e-03 1.000000000000e-03 1.466257821884e+00 8.491323997058e-01 6.490656965719e-02 1.694384204502e+00 1.695626932804e+00 6.062470187133e-01 3.625131766219e-03 8.969442292464e-03 9.983009061213e-02 1.649492647605e-03 1.000000000000e-03 -1.601280409531e+00 8.558616643000e-01 6.543810294358e-02 1.815653639428e+00 1.816832486413e+00 5.355668834531e-01 2.134241820419e-03 5.977521817607e-03 8.149656991833e-02 1.867180423017e-03 1.000000000000e-03 +1.601280409531e+00 8.558616643000e-01 6.543810294358e-02 1.815653639428e+00 1.816832486413e+00 5.355668834531e-01 2.134241820419e-03 5.977521817608e-03 8.149656991833e-02 1.867180423017e-03 1.000000000000e-03 8.129674901507e-02 1.365026826285e+00 8.129674901507e-02 1.367445574009e+00 1.369860050983e+00 3.268656301899e-01 4.412251070888e-03 2.024800405747e-02 1.499926074381e-01 3.059361118571e-03 1.000000000000e-03 2.427195460667e-01 1.353235867777e+00 8.084220105216e-02 1.374830932108e+00 1.377205704807e+00 3.434614561681e-01 4.561001096006e-03 1.991927047750e-02 1.487700331141e-01 2.911534852139e-03 1.000000000000e-03 4.000899330102e-01 1.328951817877e+00 7.990258490470e-02 1.387870631123e+00 1.390168806947e+00 3.815693148208e-01 4.893217504283e-03 1.923589233026e-02 1.461958060284e-01 2.620755813317e-03 1.000000000000e-03 @@ -93,7 +93,7 @@ 9.497049526125e-01 1.125779209258e+00 7.214282992530e-02 1.472860592525e+00 1.474626363837e+00 7.612979572913e-01 7.894117050175e-03 1.555393057587e-02 1.314615726526e-01 1.313546148945e-03 1.000000000000e-03 1.063470849840e+00 1.063470849840e+00 6.922611054622e-02 1.503974899032e+00 1.505567252334e+00 8.691217708911e-01 8.160484157316e-03 1.408401750588e-02 1.250955968045e-01 1.150586757221e-03 1.000000000000e-03 1.170347280862e+00 1.008302717297e+00 6.624062416669e-02 1.544793554987e+00 1.546213099097e+00 9.518402303401e-01 7.524429070652e-03 1.185770809660e-02 1.147834100315e-01 1.050596484709e-03 1.000000000000e-03 -1.276407817314e+00 9.670498751036e-01 6.379466977995e-02 1.601375151873e+00 1.602645355944e+00 9.142735026360e-01 6.009757009697e-03 9.859889287566e-03 1.046682021520e-01 1.093764608858e-03 1.000000000000e-03 +1.276407817314e+00 9.670498751036e-01 6.379466977995e-02 1.601375151873e+00 1.602645355944e+00 9.142735026360e-01 6.009757009698e-03 9.859889287566e-03 1.046682021520e-01 1.093764608858e-03 1.000000000000e-03 1.388637024867e+00 9.452165486884e-01 6.247913831093e-02 1.679805676483e+00 1.680967207732e+00 8.114045646364e-01 4.852796124912e-03 8.971103324554e-03 9.983933384612e-02 1.232430828693e-03 1.000000000000e-03 1.511747493122e+00 9.411571745653e-01 6.226367886473e-02 1.780774356901e+00 1.781862530024e+00 7.547646008263e-01 3.103112203385e-03 6.167046387685e-03 8.277846195777e-02 1.324916402949e-03 1.000000000000e-03 7.630594105272e-02 1.489574777163e+00 7.630594105272e-02 1.491527945900e+00 1.493478560288e+00 3.236078908952e-01 3.260983994054e-03 1.511544102819e-02 1.295952718110e-01 3.090159505177e-03 1.000000000000e-03 @@ -105,7 +105,7 @@ 8.986415355632e-01 1.233896793680e+00 6.852224185870e-02 1.526452720163e+00 1.527989922913e+00 7.852777850876e-01 6.632457870852e-03 1.266900324344e-02 1.186451443191e-01 1.273434724616e-03 1.000000000000e-03 1.008302717297e+00 1.170347280862e+00 6.624062416669e-02 1.544793554987e+00 1.546213099097e+00 9.518402303401e-01 7.524429070652e-03 1.185770809660e-02 1.147834100315e-01 1.050596484709e-03 1.000000000000e-03 1.111915710219e+00 1.111915710219e+00 6.384481791227e-02 1.572486277608e+00 1.573781831780e+00 1.078724521984e+00 7.815488837560e-03 1.086768031821e-02 1.098872165157e-01 9.270207357116e-04 1.000000000000e-03 -1.212914349692e+00 1.064450496378e+00 6.163607124851e-02 1.613758370676e+00 1.614935009283e+00 1.135665123048e+00 7.157605696407e-03 9.453850723001e-03 1.024903828713e-01 8.805412614209e-04 1.000000000000e-03 +1.212914349692e+00 1.064450496378e+00 6.163607124851e-02 1.613758370676e+00 1.614935009283e+00 1.135665123048e+00 7.157605696407e-03 9.453850723001e-03 1.024903828713e-01 8.805412614208e-04 1.000000000000e-03 1.316679761772e+00 1.033430331067e+00 6.008689741434e-02 1.673805199009e+00 1.674883362945e+00 1.101084815190e+00 6.610739498881e-03 9.005763326785e-03 1.000320133579e-01 9.081952509054e-04 1.000000000000e-03 1.430085777156e+00 1.017755915460e+00 5.928121547195e-02 1.755269903313e+00 1.756270678451e+00 1.051324174627e+00 4.464358262941e-03 6.369621812213e-03 8.412703233281e-02 9.511813997379e-04 1.000000000000e-03 7.387522244524e-02 1.636469103365e+00 7.387522244524e-02 1.638135731482e+00 1.639800665706e+00 2.850952917612e-01 2.169528686925e-03 1.141475543242e-02 1.126190995861e-01 3.507599139300e-03 1.000000000000e-03 @@ -117,7 +117,7 @@ 8.632463147484e-01 1.344960916087e+00 6.592880282032e-02 1.598159587065e+00 1.599518887906e+00 7.229530639530e-01 4.921182577874e-03 1.021058521621e-02 1.065133544898e-01 1.383215660685e-03 1.000000000000e-03 9.670498751036e-01 1.276407817314e+00 6.379466977995e-02 1.601375151873e+00 1.602645355944e+00 9.142735026360e-01 6.009757009697e-03 9.859889287566e-03 1.046682021520e-01 1.093764608858e-03 1.000000000000e-03 1.064450496378e+00 1.212914349692e+00 6.163607124851e-02 1.613758370676e+00 1.614935009283e+00 1.135665123048e+00 7.157605696407e-03 9.453850723001e-03 1.024903828713e-01 8.805412614209e-04 1.000000000000e-03 -1.158406393543e+00 1.158406393543e+00 5.957952108330e-02 1.638234032489e+00 1.639317072606e+00 1.348342187885e+00 8.164505858429e-03 9.082826969062e-03 1.004590959825e-01 7.416514954329e-04 1.000000000000e-03 +1.158406393543e+00 1.158406393543e+00 5.957952108330e-02 1.638234032489e+00 1.639317072606e+00 1.348342187885e+00 8.164505858429e-03 9.082826969062e-03 1.004590959825e-01 7.416514954330e-04 1.000000000000e-03 1.253361651229e+00 1.116774932033e+00 5.784907143963e-02 1.678720249949e+00 1.679716700118e+00 1.450791165152e+00 8.466325700597e-03 8.753491788438e-03 9.862100175497e-02 6.892790802839e-04 1.000000000000e-03 1.358586021467e+00 1.089316721140e+00 5.660505783159e-02 1.741369259141e+00 1.742289020011e+00 1.344396010927e+00 5.466830024164e-03 6.099575548867e-03 8.232439593102e-02 7.438284492606e-04 1.000000000000e-03 7.502520181018e-02 1.814688658443e+00 7.502520181018e-02 1.816238890672e+00 1.817787800844e+00 2.263915272180e-01 1.372942183668e-03 9.096688824042e-03 1.005357251265e-01 4.417126437055e-03 1.000000000000e-03 @@ -141,10 +141,10 @@ 8.558616643000e-01 1.601280409531e+00 6.543810294358e-02 1.815653639428e+00 1.816832486413e+00 5.355668834531e-01 2.134241820419e-03 5.977521817608e-03 8.149656991833e-02 1.867180423017e-03 1.000000000000e-03 9.411571745653e-01 1.511747493122e+00 6.226367886473e-02 1.780774356901e+00 1.781862530024e+00 7.547646008263e-01 3.103112203385e-03 6.167046387685e-03 8.277846195777e-02 1.324916402949e-03 1.000000000000e-03 1.017755915460e+00 1.430085777156e+00 5.928121547195e-02 1.755269903313e+00 1.756270678451e+00 1.051324174627e+00 4.464358262941e-03 6.369621812213e-03 8.412703233281e-02 9.511813997379e-04 1.000000000000e-03 -1.089316721140e+00 1.358586021467e+00 5.660505783159e-02 1.741369259141e+00 1.742289020011e+00 1.344396010927e+00 5.466830024164e-03 6.099575548867e-03 8.232439593102e-02 7.438284492606e-04 1.000000000000e-03 +1.089316721140e+00 1.358586021467e+00 5.660505783159e-02 1.741369259141e+00 1.742289020011e+00 1.344396010927e+00 5.466830024163e-03 6.099575548867e-03 8.232439593102e-02 7.438284492606e-04 1.000000000000e-03 1.162172677002e+00 1.298330300283e+00 5.430564311828e-02 1.742500186457e+00 1.743346208496e+00 1.379840548527e+00 4.765118926291e-03 5.180075623279e-03 7.586593162561e-02 7.247214187666e-04 1.000000000000e-03 1.254300260084e+00 1.254300260084e+00 5.257104397790e-02 1.773848439099e+00 1.774627284688e+00 8.932758086250e-01 1.455413745440e-03 2.443949110769e-03 5.211045012246e-02 1.119475071803e-03 1.000000000000e-03 -1.363453020654e-01 1.363453020654e-01 3.699232263673e-01 1.928213753468e-01 4.171609715645e-01 2.636265707486e-02 0.000000000000e+00 7.879287159264e-01 1.000000000000e-32 3.793244349992e-02 1.000000000000e-03 +1.363453020654e-01 1.363453020654e-01 3.699232263673e-01 1.928213753468e-01 4.171609715645e-01 1.000000000000e-32 0.000000000000e+00 7.879287159264e-01 1.000000000000e-32 3.793244349992e-02 1.000000000000e-03 4.518423607327e-01 1.508966476655e-01 4.518423607327e-01 4.763730861721e-01 6.565766034376e-01 2.603549095659e-02 7.459736321089e-03 4.297827338954e-01 6.910400646814e-01 3.840910861513e-02 1.000000000000e-03 7.336680399356e-01 1.425376760892e-01 4.263324498264e-01 7.473859658355e-01 8.604331116960e-01 6.420450578599e-02 6.091901678523e-03 1.423241625478e-01 3.976656364164e-01 1.557523086204e-02 1.000000000000e-03 9.026754672765e-01 1.238339207224e-01 3.692803592801e-01 9.111299792808e-01 9.831204518747e-01 1.267383659059e-01 6.019154824087e-03 7.123914034709e-02 2.813442737744e-01 7.890270581070e-03 1.000000000000e-03 @@ -177,7 +177,7 @@ 1.208017210963e+00 4.312137265753e-01 2.586398042249e-01 1.282673325508e+00 1.308489743292e+00 3.641697438528e-01 6.025063514997e-03 2.481698555426e-02 1.660554979325e-01 2.745972220043e-03 1.000000000000e-03 1.317106755366e+00 3.977259226431e-01 2.384730999897e-01 1.375847416894e+00 1.396361534128e+00 3.999382461205e-01 5.075355447087e-03 1.903552171986e-02 1.454323887198e-01 2.500386021343e-03 1.000000000000e-03 1.434762508299e+00 3.742266168404e-01 2.243204852877e-01 1.482763978512e+00 1.499636187911e+00 3.932259393126e-01 3.801879933063e-03 1.450265440160e-02 1.269411692329e-01 2.543067229360e-03 1.000000000000e-03 -1.570113924096e+00 3.617051426564e-01 2.167582136539e-01 1.611238140333e+00 1.625752892678e+00 3.472511924655e-01 2.562875699764e-03 1.107069934692e-02 1.109088682303e-01 2.879759729261e-03 1.000000000000e-03 +1.570113924096e+00 3.617051426564e-01 2.167582136539e-01 1.611238140333e+00 1.625752892678e+00 3.472511924655e-01 2.562875699764e-03 1.107069934692e-02 1.109088682304e-01 2.879759729261e-03 1.000000000000e-03 1.731164105974e+00 3.643589411072e-01 2.183205013157e-01 1.769092026938e+00 1.782512395769e+00 2.760835954578e-01 1.693287471750e-03 9.199862829276e-03 1.011042521871e-01 3.622091339190e-03 1.000000000000e-03 1.915595553628e+00 3.829528984387e-01 2.294464522640e-01 1.953499231508e+00 1.966927787683e+00 2.243185508728e-01 8.438396619191e-04 5.642687543913e-03 7.918113933614e-02 4.457946059784e-03 1.000000000000e-03 1.238339207224e-01 9.026754672765e-01 3.692803592801e-01 9.111299792808e-01 9.831204518747e-01 1.267383659059e-01 6.019154824087e-03 7.123914034709e-02 2.813442737744e-01 7.890270581070e-03 1.000000000000e-03 @@ -197,7 +197,7 @@ 5.280728725484e-01 9.845974350752e-01 3.177179866690e-01 1.117270364718e+00 1.161566953271e+00 2.361039380684e-01 6.973456928627e-03 4.430330759629e-02 2.218690995367e-01 4.235422789561e-03 1.000000000000e-03 7.127750758195e-01 9.366457393342e-01 3.058672854687e-01 1.177010428893e+00 1.216103756282e+00 2.743739760280e-01 7.475667493102e-03 4.086940533496e-02 2.130972791290e-01 3.644660526762e-03 1.000000000000e-03 8.729251167043e-01 8.729251167043e-01 2.881438548229e-01 1.234502538979e+00 1.267684266613e+00 3.336532408813e-01 7.967630736331e-03 3.581996108573e-02 1.994992650661e-01 2.997123592622e-03 1.000000000000e-03 -1.008150116816e+00 8.045266494517e-01 2.669754436934e-01 1.289817734300e+00 1.317158181559e+00 4.187542424717e-01 7.877570904901e-03 2.821787855236e-02 1.770683438436e-01 2.388035507646e-03 1.000000000000e-03 +1.008150116816e+00 8.045266494517e-01 2.669754436934e-01 1.289817734300e+00 1.317158181559e+00 4.187542424717e-01 7.877570904902e-03 2.821787855236e-02 1.770683438436e-01 2.388035507646e-03 1.000000000000e-03 1.124985614616e+00 7.416645060217e-01 2.464476179506e-01 1.347463866894e+00 1.369815790892e+00 4.972302850621e-01 7.374194286146e-03 2.224581197390e-02 1.572182205086e-01 2.011140572170e-03 1.000000000000e-03 1.233924564050e+00 6.896983607286e-01 2.292348071855e-01 1.413596002597e+00 1.432062238656e+00 5.444700215859e-01 6.388065834227e-03 1.759894644600e-02 1.398369941753e-01 1.836648411031e-03 1.000000000000e-03 1.344987562612e+00 6.507396204496e-01 2.162900742030e-01 1.494139751564e+00 1.509713546804e+00 5.385667175713e-01 4.933741081869e-03 1.374130888774e-02 1.235642382989e-01 1.856780167385e-03 1.000000000000e-03 @@ -208,10 +208,10 @@ 2.901675643229e-01 1.123677479395e+00 2.901675643229e-01 1.160537932635e+00 1.196263143489e+00 2.732840295168e-01 6.238090750400e-03 3.423960098269e-02 1.950487146635e-01 3.659196630582e-03 1.000000000000e-03 4.746858661961e-01 1.099768310693e+00 2.849674241331e-01 1.197838473573e+00 1.231269037046e+00 3.062123805644e-01 6.670383902441e-03 3.267528189168e-02 1.905409897333e-01 3.265707278579e-03 1.000000000000e-03 6.472224466501e-01 1.061369645916e+00 2.774580632929e-01 1.243142156280e+00 1.273728934117e+00 3.551234225588e-01 7.248027121628e-03 3.061482288075e-02 1.844355439374e-01 2.815922399020e-03 1.000000000000e-03 -8.045266494517e-01 1.008150116816e+00 2.669754436934e-01 1.289817734300e+00 1.317158181559e+00 4.187542424717e-01 7.877570904902e-03 2.821787855236e-02 1.770683438436e-01 2.388035507646e-03 1.000000000000e-03 +8.045266494517e-01 1.008150116816e+00 2.669754436934e-01 1.289817734300e+00 1.317158181559e+00 4.187542424717e-01 7.877570904901e-03 2.821787855236e-02 1.770683438436e-01 2.388035507646e-03 1.000000000000e-03 9.443566036490e-01 9.443566036490e-01 2.532143619562e-01 1.335521916597e+00 1.359314644522e+00 4.954925321743e-01 8.272672767563e-03 2.504378642578e-02 1.668125575668e-01 2.018193888033e-03 1.000000000000e-03 1.067277622235e+00 8.795163140958e-01 2.376755389406e-01 1.382978839203e+00 1.403253409579e+00 5.921193119027e-01 8.127237315273e-03 2.058851269981e-02 1.512485544460e-01 1.688848817963e-03 1.000000000000e-03 -1.178484326317e+00 8.222095263211e-01 2.228932477459e-01 1.436959920300e+00 1.454144151190e+00 6.548417916231e-01 7.269200899363e-03 1.665104684602e-02 1.360189808896e-01 1.527086408950e-03 1.000000000000e-03 +1.178484326317e+00 8.222095263211e-01 2.228932477459e-01 1.436959920300e+00 1.454144151190e+00 6.548417916230e-01 7.269200899363e-03 1.665104684602e-02 1.360189808896e-01 1.527086408950e-03 1.000000000000e-03 1.287323269750e+00 7.771014912182e-01 2.109139225528e-01 1.503691433936e+00 1.518411212821e+00 6.571487577045e-01 5.814873957337e-03 1.327296267967e-02 1.214402581962e-01 1.521725466686e-03 1.000000000000e-03 1.402843597748e+00 7.475692298135e-01 2.029890806535e-01 1.589600551430e+00 1.602508808079e+00 5.949248995141e-01 4.167776904765e-03 1.050832695396e-02 1.080551657152e-01 1.680884428970e-03 1.000000000000e-03 1.532257007337e+00 7.393855398180e-01 2.008062243713e-01 1.701323753148e+00 1.713133285175e+00 4.863466868039e-01 2.943073671338e-03 9.077085599203e-03 1.004273402305e-01 2.056146422158e-03 1.000000000000e-03 @@ -233,8 +233,8 @@ 3.977259226431e-01 1.317106755366e+00 2.384730999897e-01 1.375847416894e+00 1.396361534128e+00 3.999382461205e-01 5.075355447087e-03 1.903552171986e-02 1.454323887198e-01 2.500386021343e-03 1.000000000000e-03 5.477783933652e-01 1.280887767293e+00 2.344329126219e-01 1.393102523377e+00 1.412690139825e+00 4.597447597017e-01 5.625382917006e-03 1.835382393697e-02 1.428045437223e-01 2.175119952751e-03 1.000000000000e-03 6.896983607286e-01 1.233924564050e+00 2.292348071855e-01 1.413596002597e+00 1.432062238656e+00 5.444700215859e-01 6.388065834227e-03 1.759894644600e-02 1.398369941753e-01 1.836648411031e-03 1.000000000000e-03 -8.222095263211e-01 1.178484326317e+00 2.228932477459e-01 1.436959920300e+00 1.454144151190e+00 6.548417916230e-01 7.269200899363e-03 1.665104684602e-02 1.360189808896e-01 1.527086408950e-03 1.000000000000e-03 -9.446219722581e-01 1.117887905520e+00 2.153403498435e-01 1.463551857564e+00 1.479309131335e+00 7.847612751355e-01 8.099952312561e-03 1.548232418418e-02 1.311586155267e-01 1.274272867029e-03 1.000000000000e-03 +8.222095263211e-01 1.178484326317e+00 2.228932477459e-01 1.436959920300e+00 1.454144151190e+00 6.548417916231e-01 7.269200899363e-03 1.665104684602e-02 1.360189808896e-01 1.527086408950e-03 1.000000000000e-03 +9.446219722581e-01 1.117887905520e+00 2.153403498435e-01 1.463551857564e+00 1.479309131335e+00 7.847612751356e-01 8.099952312561e-03 1.548232418418e-02 1.311586155267e-01 1.274272867029e-03 1.000000000000e-03 1.057505156566e+00 1.057505156566e+00 2.067220437504e-01 1.495538134695e+00 1.509757700991e+00 8.982693625722e-01 8.356376492221e-03 1.395412696971e-02 1.245174105172e-01 1.113251816957e-03 1.000000000000e-03 1.163572208273e+00 1.003799810096e+00 1.979474687855e-01 1.536721947072e+00 1.549418453166e+00 9.792322698850e-01 7.742933125135e-03 1.186071991793e-02 1.147979864222e-01 1.021208175786e-03 1.000000000000e-03 1.268791875367e+00 9.630664597915e-01 1.906994493147e-01 1.592899817620e+00 1.604274324716e+00 9.422061735044e-01 6.213128253088e-03 9.891351427860e-03 1.048350631964e-01 1.061338832329e-03 1.000000000000e-03 @@ -254,13 +254,13 @@ 1.421993301426e+00 1.012303580495e+00 1.769989334638e-01 1.745515250115e+00 1.754466332202e+00 1.085076913543e+00 4.700243882661e-03 6.497572417213e-03 8.496778747275e-02 9.215936561905e-04 1.000000000000e-03 7.345352825586e-02 1.619365114728e+00 2.206605648923e-01 1.621030164929e+00 1.635979792207e+00 2.989832606072e-01 2.258790240944e-03 1.133235805421e-02 1.122118930823e-01 3.344668855270e-03 1.000000000000e-03 2.193520252234e-01 1.602654333952e+00 2.193520252234e-01 1.617595816360e+00 1.632400544007e+00 3.137380930421e-01 2.354249134384e-03 1.125580151053e-02 1.118322230970e-01 3.187371958259e-03 1.000000000000e-03 -3.617051426564e-01 1.570113924096e+00 2.167582136539e-01 1.611238140333e+00 1.625752892678e+00 3.472511924655e-01 2.562875699764e-03 1.107069934692e-02 1.109088682304e-01 2.879759729261e-03 1.000000000000e-03 +3.617051426564e-01 1.570113924096e+00 2.167582136539e-01 1.611238140333e+00 1.625752892678e+00 3.472511924655e-01 2.562875699764e-03 1.107069934692e-02 1.109088682303e-01 2.879759729261e-03 1.000000000000e-03 4.980818900474e-01 1.523793356160e+00 2.130225360422e-01 1.603131860288e+00 1.617223040379e+00 4.013682570940e-01 2.911069828668e-03 1.087929766698e-02 1.099459345263e-01 2.491477545435e-03 1.000000000000e-03 6.270158773188e-01 1.466836612338e+00 2.083703770526e-01 1.595229938819e+00 1.608781144761e+00 4.812943975971e-01 3.435239682368e-03 1.070625286577e-02 1.090680361862e-01 2.077730397429e-03 1.000000000000e-03 7.475692298135e-01 1.402843597748e+00 2.029890806535e-01 1.589600551430e+00 1.602508808079e+00 5.949248995141e-01 4.167776904765e-03 1.050832695396e-02 1.080551657152e-01 1.680884428970e-03 1.000000000000e-03 8.594238605484e-01 1.335501334625e+00 1.970305897936e-01 1.588135128654e+00 1.600310669895e+00 7.475935010263e-01 5.097112757624e-03 1.022704066574e-02 1.065991487653e-01 1.337625325297e-03 1.000000000000e-03 9.630664597915e-01 1.268791875367e+00 1.906994493147e-01 1.592899817620e+00 1.604274324716e+00 9.422061735044e-01 6.213128253088e-03 9.891351427860e-03 1.048350631964e-01 1.061338832329e-03 1.000000000000e-03 -1.060150968893e+00 1.206876174523e+00 1.842782033153e-01 1.606384193609e+00 1.616919488933e+00 1.174130940601e+00 7.459339961738e-03 9.529609991269e-03 1.029002213110e-01 8.516937638049e-04 1.000000000000e-03 +1.060150968893e+00 1.206876174523e+00 1.842782033153e-01 1.606384193609e+00 1.616919488933e+00 1.174130940601e+00 7.459339961738e-03 9.529609991270e-03 1.029002213110e-01 8.516937638049e-04 1.000000000000e-03 1.153458196436e+00 1.153458196436e+00 1.781478653405e-01 1.631236225031e+00 1.640935185733e+00 1.396720173270e+00 8.517536244764e-03 9.147361519975e-03 1.008153511237e-01 7.159630247615e-04 1.000000000000e-03 1.247650836693e+00 1.112166984406e+00 1.729468384733e-01 1.671391040871e+00 1.680315036069e+00 1.500560135050e+00 8.793287599560e-03 8.790005206225e-03 9.882647646942e-02 6.664178106843e-04 1.000000000000e-03 1.352396204916e+00 1.084475727711e+00 1.691657718358e-01 1.733511782211e+00 1.741746295367e+00 1.364104245673e+00 5.563498269483e-03 6.117749014195e-03 8.244694599960e-02 7.330818030749e-04 1.000000000000e-03 @@ -271,11 +271,11 @@ 6.242060412632e-01 1.606972277217e+00 2.074300686996e-01 1.723946948631e+00 1.736381385265e+00 3.868122113671e-01 2.353506056874e-03 9.126545082002e-03 1.007005742122e-01 2.585233792040e-03 1.000000000000e-03 7.393855398180e-01 1.532257007337e+00 2.008062243713e-01 1.701323753148e+00 1.713133285175e+00 4.863466868039e-01 2.943073671338e-03 9.077085599203e-03 1.004273402305e-01 2.056146422158e-03 1.000000000000e-03 8.446325348486e-01 1.455113460470e+00 1.937976245685e-01 1.682486048016e+00 1.693610587194e+00 6.332878750210e-01 3.822175624372e-03 9.053171018580e-03 1.002949595420e-01 1.579060707529e-03 1.000000000000e-03 -9.407003196342e-01 1.379695390770e+00 1.866336474901e-01 1.669873187602e+00 1.680270389267e+00 8.464019021195e-01 5.120356838817e-03 9.074336008687e-03 1.004121285762e-01 1.181471825023e-03 1.000000000000e-03 +9.407003196342e-01 1.379695390770e+00 1.866336474901e-01 1.669873187602e+00 1.680270389267e+00 8.464019021195e-01 5.120356838816e-03 9.074336008687e-03 1.004121285762e-01 1.181471825023e-03 1.000000000000e-03 1.028912315955e+00 1.309603655166e+00 1.795714094445e-01 1.665449575204e+00 1.675102438252e+00 1.143910079484e+00 6.955349439950e-03 9.120493251206e-03 1.006671812967e-01 8.741945874371e-04 1.000000000000e-03 1.112166984406e+00 1.247650836693e+00 1.729468384733e-01 1.671391040871e+00 1.680315036069e+00 1.500560135050e+00 8.793287599560e-03 8.790005206225e-03 9.882647646942e-02 6.664178106843e-04 1.000000000000e-03 -1.195764558924e+00 1.195764558924e+00 1.670301782390e-01 1.691066456636e+00 1.699295395510e+00 1.794011031134e+00 9.850791185960e-03 8.236396835087e-03 9.566374464229e-02 5.574101734302e-04 1.000000000000e-03 -1.293543981943e+00 1.157889545021e+00 1.624007249792e-01 1.736077253952e+00 1.743656568010e+00 1.375266716499e+00 4.721061920971e-03 5.149250539184e-03 7.563986705423e-02 7.271316814424e-04 1.000000000000e-03 +1.195764558924e+00 1.195764558924e+00 1.670301782390e-01 1.691066456636e+00 1.699295395510e+00 1.794011031134e+00 9.850791185960e-03 8.236396835087e-03 9.566374464229e-02 5.574101734303e-04 1.000000000000e-03 +1.293543981943e+00 1.157889545021e+00 1.624007249792e-01 1.736077253952e+00 1.743656568010e+00 1.375266716499e+00 4.721061920970e-03 5.149250539184e-03 7.563986705423e-02 7.271316814424e-04 1.000000000000e-03 7.903561733592e-02 1.992805772590e+00 2.376558932080e-01 1.994372451694e+00 2.008482461873e+00 1.887607948443e-01 6.905139083839e-04 5.487213928244e-03 7.808267646998e-02 5.297710262478e-03 1.000000000000e-03 2.348118975979e-01 1.965922938548e+00 2.348118975979e-01 1.979896367885e+00 1.993771866292e+00 1.992065608078e-01 7.477865161520e-04 5.630737108655e-03 7.909724751957e-02 5.019914986459e-03 1.000000000000e-03 3.829528984387e-01 1.915595553628e+00 2.294464522640e-01 1.953499231508e+00 1.966927787683e+00 2.243185508728e-01 8.438396619191e-04 5.642687543913e-03 7.918113933614e-02 4.457946059784e-03 1.000000000000e-03 @@ -309,7 +309,7 @@ 1.208017210963e+00 2.586398042249e-01 4.312137265753e-01 1.235394726520e+00 1.308489743292e+00 3.641697438528e-01 6.025063514997e-03 2.481698555426e-02 1.660554979325e-01 2.745972220043e-03 1.000000000000e-03 1.317106755366e+00 2.384730999897e-01 3.977259226431e-01 1.338521432197e+00 1.396361534128e+00 3.999382461205e-01 5.075355447087e-03 1.903552171986e-02 1.454323887198e-01 2.500386021343e-03 1.000000000000e-03 1.434762508299e+00 2.243204852877e-01 3.742266168404e-01 1.452192526954e+00 1.499636187911e+00 3.932259393126e-01 3.801879933063e-03 1.450265440160e-02 1.269411692329e-01 2.543067229360e-03 1.000000000000e-03 -1.570113924096e+00 2.167582136539e-01 3.617051426564e-01 1.585005317917e+00 1.625752892678e+00 3.472511924655e-01 2.562875699764e-03 1.107069934692e-02 1.109088682303e-01 2.879759729261e-03 1.000000000000e-03 +1.570113924096e+00 2.167582136539e-01 3.617051426564e-01 1.585005317917e+00 1.625752892678e+00 3.472511924655e-01 2.562875699764e-03 1.107069934692e-02 1.109088682304e-01 2.879759729261e-03 1.000000000000e-03 1.731164105974e+00 2.183205013157e-01 3.643589411072e-01 1.744876214264e+00 1.782512395769e+00 2.760835954578e-01 1.693287471750e-03 9.199862829276e-03 1.011042521871e-01 3.622091339190e-03 1.000000000000e-03 1.915595553628e+00 2.294464522640e-01 3.829528984387e-01 1.929287951431e+00 1.966927787683e+00 2.243185508728e-01 8.438396619191e-04 5.642687543913e-03 7.918113933614e-02 4.457946059784e-03 1.000000000000e-03 1.343413358637e-01 6.771775886281e-01 6.771775886281e-01 6.903745947396e-01 9.670504472891e-01 8.535345767981e-02 6.422573225928e-03 1.128701765666e-01 3.541345892401e-01 1.171598699319e-02 1.000000000000e-03 @@ -379,7 +379,7 @@ 6.822745565445e-01 1.212910345700e+00 3.781383534598e-01 1.391635755941e+00 1.442095243585e+00 5.890264760672e-01 6.778797676044e-03 1.726271556069e-02 1.384947474363e-01 1.697716555420e-03 1.000000000000e-03 8.134642273388e-01 1.159901534316e+00 3.676708372428e-01 1.416720021200e+00 1.463652097675e+00 7.021434004773e-01 7.651544257747e-03 1.634611445300e-02 1.347677609528e-01 1.424210495064e-03 1.000000000000e-03 9.344539005368e-01 1.102529972862e+00 3.552556576459e-01 1.445259988129e+00 1.488281900574e+00 8.353450433376e-01 8.450394454291e-03 1.517407900188e-02 1.298464007197e-01 1.197110113929e-03 1.000000000000e-03 -1.045733458648e+00 1.045733458648e+00 3.413140138209e-01 1.478890439847e+00 1.517765525074e+00 9.577080109888e-01 8.688119221084e-03 1.360767444993e-02 1.229619383293e-01 1.044159585725e-03 1.000000000000e-03 +1.045733458648e+00 1.045733458648e+00 3.413140138209e-01 1.478890439847e+00 1.517765525074e+00 9.577080109889e-01 8.688119221085e-03 1.360767444993e-02 1.229619383293e-01 1.044159585725e-03 1.000000000000e-03 1.150328667086e+00 9.947632368294e-01 3.272461487136e-01 1.520792536695e+00 1.555602771120e+00 1.036915855887e+00 8.121246056575e-03 1.174817514430e-02 1.142520369101e-01 9.643984073757e-04 1.000000000000e-03 1.253897867818e+00 9.550618739851e-01 3.154477305142e-01 1.576198923378e+00 1.607454607989e+00 1.004913731125e+00 6.624779957316e-03 9.888580112094e-03 1.048203760519e-01 9.951102955677e-04 1.000000000000e-03 1.362338852483e+00 9.317656069060e-01 3.083352685409e-01 1.650501225446e+00 1.679054773682e+00 9.198562424836e-01 5.634525805361e-03 9.188162582038e-03 1.010399402989e-01 1.087126394120e-03 1.000000000000e-03 @@ -392,16 +392,16 @@ 7.698240001369e-01 1.267659888161e+00 3.484732366630e-01 1.483101676636e+00 1.523490787603e+00 7.079545229466e-01 6.190732165912e-03 1.311680051173e-02 1.207237457620e-01 1.412520109114e-03 1.000000000000e-03 8.864980510889e-01 1.208881648692e+00 3.383772957955e-01 1.499090936244e+00 1.536806048088e+00 8.644395695503e-01 7.216036831176e-03 1.252147128387e-02 1.179523033729e-01 1.156818863024e-03 1.000000000000e-03 9.947632368294e-01 1.150328667086e+00 3.272461487136e-01 1.520792536695e+00 1.555602771120e+00 1.036915855887e+00 8.121246056575e-03 1.174817514430e-02 1.142520369101e-01 9.643984073757e-04 1.000000000000e-03 -1.096411696061e+00 1.096411696061e+00 3.156725080602e-01 1.550560290514e+00 1.582367323621e+00 1.173827099631e+00 8.372863832690e-03 1.069944266322e-02 1.090333418079e-01 8.519142217062e-04 1.000000000000e-03 -1.195000584812e+00 1.051512747459e+00 3.049667002885e-01 1.591761745919e+00 1.620712850586e+00 1.254459887436e+00 8.018345317123e-03 9.587805952304e-03 1.032139415233e-01 7.971558198197e-04 1.000000000000e-03 -1.295788766245e+00 1.019979466566e+00 2.969611539952e-01 1.649068415483e+00 1.675593198221e+00 1.231308602163e+00 7.578522799459e-03 9.232278714873e-03 1.012822169039e-01 8.121440865787e-04 1.000000000000e-03 +1.096411696061e+00 1.096411696061e+00 3.156725080602e-01 1.550560290514e+00 1.582367323621e+00 1.173827099631e+00 8.372863832689e-03 1.069944266322e-02 1.090333418079e-01 8.519142217062e-04 1.000000000000e-03 +1.195000584812e+00 1.051512747459e+00 3.049667002885e-01 1.591761745919e+00 1.620712850586e+00 1.254459887436e+00 8.018345317123e-03 9.587805952304e-03 1.032139415233e-01 7.971558198198e-04 1.000000000000e-03 +1.295788766245e+00 1.019979466566e+00 2.969611539952e-01 1.649068415483e+00 1.675593198221e+00 1.231308602163e+00 7.578522799458e-03 9.232278714873e-03 1.012822169039e-01 8.121440865787e-04 1.000000000000e-03 1.406329538503e+00 1.001746850452e+00 2.921808884763e-01 1.726632422739e+00 1.751179372550e+00 1.154826508349e+00 5.063706081964e-03 6.577229625432e-03 8.548703362000e-02 8.659309366130e-04 1.000000000000e-03 7.258749009733e-02 1.585966257751e+00 3.638521823974e-01 1.587626503445e+00 1.628786764766e+00 3.314737311419e-01 2.455942137433e-03 1.111374102997e-02 1.111242599274e-01 3.016830312782e-03 1.000000000000e-03 2.167582136539e-01 1.570113924096e+00 3.617051426564e-01 1.585005317917e+00 1.625752892678e+00 3.472511924655e-01 2.562875699764e-03 1.107069934692e-02 1.109088682304e-01 2.879759729261e-03 1.000000000000e-03 3.575285251468e-01 1.539291683050e+00 3.575285251468e-01 1.580267550702e+00 1.620207449093e+00 3.827082580452e-01 2.789411582023e-03 1.093291635359e-02 1.102165361337e-01 2.612956420402e-03 1.000000000000e-03 4.926385370326e-01 1.495443610372e+00 3.515543281331e-01 1.574498116853e+00 1.613268348912e+00 4.398491264323e-01 3.165912833219e-03 1.079658674861e-02 1.095271998111e-01 2.273506845657e-03 1.000000000000e-03 6.206081682477e-01 1.441501261589e+00 3.440761316809e-01 1.569420398000e+00 1.606694983515e+00 5.243665719285e-01 3.720286492040e-03 1.064223014358e-02 1.087414371780e-01 1.907062832633e-03 1.000000000000e-03 -7.404551470496e-01 1.380857569138e+00 3.353726492569e-01 1.566857189101e+00 1.602347111243e+00 6.432024447667e-01 4.480666227501e-03 1.044927517912e-02 1.077511287856e-01 1.554720458755e-03 1.000000000000e-03 +7.404551470496e-01 1.380857569138e+00 3.353726492569e-01 1.566857189101e+00 1.602347111243e+00 6.432024447668e-01 4.480666227501e-03 1.044927517912e-02 1.077511287856e-01 1.554720458755e-03 1.000000000000e-03 8.518107871974e-01 1.317075771580e+00 3.257224536298e-01 1.568524850064e+00 1.601987928190e+00 8.014682682590e-01 5.440106264800e-03 1.018151275649e-02 1.063616093882e-01 1.247710033701e-03 1.000000000000e-03 9.550618739851e-01 1.253897867818e+00 3.154477305142e-01 1.576198923378e+00 1.607454607989e+00 1.004913731125e+00 6.624779957316e-03 9.888580112094e-03 1.048203760519e-01 9.951102955677e-04 1.000000000000e-03 1.051512747459e+00 1.195000584812e+00 3.049667002885e-01 1.591761745919e+00 1.620712850586e+00 1.254459887436e+00 8.018345317123e-03 9.587805952304e-03 1.032139415233e-01 7.971558198198e-04 1.000000000000e-03 @@ -416,13 +416,13 @@ 7.307558486012e-01 1.506345751312e+00 3.310522362219e-01 1.674240613759e+00 1.706656736391e+00 5.330062446019e-01 3.239666903538e-03 9.117154638471e-03 1.006487546894e-01 1.876150626991e-03 1.000000000000e-03 8.357768441223e-01 1.433597458347e+00 3.198395015379e-01 1.659435026071e+00 1.689976897030e+00 6.914072014261e-01 4.207719858567e-03 9.128600012890e-03 1.007119104337e-01 1.446325693365e-03 1.000000000000e-03 9.317656069060e-01 1.362338852483e+00 3.083352685409e-01 1.650501225446e+00 1.679054773682e+00 9.198562424836e-01 5.634525805361e-03 9.188162582038e-03 1.010399402989e-01 1.087126394120e-03 1.000000000000e-03 -1.019979466566e+00 1.295788766245e+00 2.969611539952e-01 1.649068415483e+00 1.675593198221e+00 1.231308602163e+00 7.578522799459e-03 9.232278714873e-03 1.012822169039e-01 8.121440865786e-04 1.000000000000e-03 +1.019979466566e+00 1.295788766245e+00 2.969611539952e-01 1.649068415483e+00 1.675593198221e+00 1.231308602163e+00 7.578522799458e-03 9.232278714872e-03 1.012822169039e-01 8.121440865786e-04 1.000000000000e-03 1.103122328323e+00 1.236511166045e+00 2.862259112608e-01 1.657057251576e+00 1.681595672948e+00 1.600796209087e+00 9.427415295099e-03 8.833805866339e-03 9.907239702101e-02 6.246891355210e-04 1.000000000000e-03 1.186321215023e+00 1.186321215023e+00 2.765219321198e-01 1.677711551617e+00 1.700347149664e+00 1.882396034612e+00 1.038491412380e-02 8.275288993000e-03 9.588934011546e-02 5.312378381662e-04 1.000000000000e-03 -1.284312852455e+00 1.149543289754e+00 2.689395732064e-01 1.723632582078e+00 1.744487825133e+00 1.364033383743e+00 4.609265375183e-03 5.068716165730e-03 7.504603154605e-02 7.331198868870e-04 1.000000000000e-03 +1.284312852455e+00 1.149543289754e+00 2.689395732064e-01 1.723632582078e+00 1.744487825133e+00 1.364033383743e+00 4.609265375184e-03 5.068716165730e-03 7.504603154605e-02 7.331198868869e-04 1.000000000000e-03 7.721110465645e-02 1.940439407973e+00 3.873893559028e-01 1.941974935651e+00 1.980236643374e+00 2.127667951046e-01 7.797320708366e-04 5.497089457404e-03 7.815290893430e-02 4.699981496213e-03 1.000000000000e-03 2.294464522640e-01 1.915595553628e+00 3.829528984387e-01 1.929287951431e+00 1.966927787683e+00 2.243185508728e-01 8.438396619191e-04 5.642687543913e-03 7.918113933614e-02 4.457946059784e-03 1.000000000000e-03 -3.746426239233e-01 1.868948178284e+00 3.746426239233e-01 1.906128114469e+00 1.942596583038e+00 2.514116834691e-01 9.534253153948e-04 5.688430837255e-03 7.950143840247e-02 3.977539890753e-03 1.000000000000e-03 +3.746426239233e-01 1.868948178284e+00 3.746426239233e-01 1.906128114469e+00 1.942596583038e+00 2.514116834691e-01 9.534253153948e-04 5.688430837255e-03 7.950143840247e-02 3.977539890754e-03 1.000000000000e-03 5.090888282599e-01 1.805055564456e+00 3.633401548096e-01 1.875472480692e+00 1.910343710941e+00 2.947228394796e-01 1.137940629498e-03 5.791580141058e-03 8.021900676037e-02 3.393018341455e-03 1.000000000000e-03 6.311907282125e-01 1.729163669784e+00 3.500235143508e-01 1.840763084235e+00 1.873746298964e+00 3.617548569438e-01 1.427903806970e-03 5.920737950973e-03 8.110855517948e-02 2.764302899617e-03 1.000000000000e-03 7.404059246714e-01 1.646437631693e+00 3.355174108090e-01 1.805258377170e+00 1.836172579389e+00 4.666536534155e-01 1.887293718703e-03 6.066470405482e-03 8.210068618933e-02 2.142916899248e-03 1.000000000000e-03 @@ -484,7 +484,7 @@ 3.058672854687e-01 9.366457393342e-01 7.127750758195e-01 9.853223012461e-01 1.216103756282e+00 2.743739760280e-01 7.475667493102e-03 4.086940533496e-02 2.130972791290e-01 3.644660526762e-03 1.000000000000e-03 4.960061384200e-01 9.086475631292e-01 6.950344331284e-01 1.035211323031e+00 1.246890270459e+00 3.105855359957e-01 7.844500981299e-03 3.788570331914e-02 2.051712112119e-01 3.219724952079e-03 1.000000000000e-03 6.685072924725e-01 8.690437941069e-01 6.685072924725e-01 1.096421048760e+00 1.284149958632e+00 3.688150002599e-01 8.318365571842e-03 3.383145574060e-02 1.938827129438e-01 2.711386465559e-03 1.000000000000e-03 -8.209894636906e-01 8.209894636906e-01 6.342326303024e-01 1.161054434117e+00 1.322988446027e+00 4.437111596629e-01 8.573326530910e-03 2.898279548825e-02 1.794522390444e-01 2.253718389142e-03 1.000000000000e-03 +8.209894636906e-01 8.209894636906e-01 6.342326303024e-01 1.161054434117e+00 1.322988446027e+00 4.437111596629e-01 8.573326530910e-03 2.898279548825e-02 1.794522390444e-01 2.253718389143e-03 1.000000000000e-03 9.546078168356e-01 7.683963048749e-01 5.951774714261e-01 1.225442354951e+00 1.362330792356e+00 5.224877596901e-01 8.685195075921e-03 2.493415849896e-02 1.664470503025e-01 1.913920434410e-03 1.000000000000e-03 1.073121613548e+00 7.167595143331e-01 5.560938351535e-01 1.290478282983e+00 1.405195556621e+00 6.022614894245e-01 8.306096169591e-03 2.068726703129e-02 1.516108579785e-01 1.660408340164e-03 1.000000000000e-03 1.182377717789e+00 6.712488482019e-01 5.212368848228e-01 1.359629392054e+00 1.456118118092e+00 6.581659673552e-01 7.359978055620e-03 1.677383461164e-02 1.365195737356e-01 1.519373607266e-03 1.000000000000e-03 @@ -525,7 +525,7 @@ 9.192980541230e-01 1.080533449336e+00 4.899438587439e-01 1.418682997518e+00 1.500901872931e+00 9.115285738940e-01 8.918715257812e-03 1.467652607923e-02 1.276998480780e-01 1.097058313518e-03 1.000000000000e-03 1.028602387866e+00 1.028602387866e+00 4.712775715951e-01 1.454663447210e+00 1.529100485297e+00 1.042348190135e+00 9.147609645967e-03 1.316394521410e-02 1.209405051810e-01 9.593723186403e-04 1.000000000000e-03 1.131322484528e+00 9.813317522683e-01 4.526051947345e-01 1.497632322036e+00 1.564529972327e+00 1.121880358256e+00 8.624994772169e-03 1.153197135777e-02 1.131958546442e-01 8.913606452250e-04 1.000000000000e-03 -1.232546706303e+00 9.431582898824e-01 4.365971604806e-01 1.552004814101e+00 1.612245646150e+00 1.107525806278e+00 7.301247988693e-03 9.888593043121e-03 1.048204445872e-01 9.029134981156e-04 1.000000000000e-03 +1.232546706303e+00 9.431582898824e-01 4.365971604806e-01 1.552004814101e+00 1.612245646150e+00 1.107525806278e+00 7.301247988693e-03 9.888593043121e-03 1.048204445872e-01 9.029134981157e-04 1.000000000000e-03 1.337640979816e+00 9.187365206375e-01 4.260618971927e-01 1.622763132819e+00 1.677763071913e+00 1.036377402053e+00 6.455032921571e-03 9.342686711592e-03 1.018860295275e-01 9.648994642482e-04 1.000000000000e-03 1.452459295838e+00 9.074057842127e-01 4.211871957204e-01 1.712607153812e+00 1.763638828425e+00 9.759409679073e-01 4.362858745987e-03 6.705618817308e-03 8.631736543006e-02 1.024652138689e-03 1.000000000000e-03 7.390677203284e-02 1.407522977630e+00 5.187384612411e-01 1.409462004989e+00 1.501889721211e+00 4.337614804821e-01 4.104957049311e-03 1.419544116071e-02 1.255894597520e-01 2.305414484681e-03 1.000000000000e-03 @@ -547,7 +547,7 @@ 6.112806939623e-01 1.405414206452e+00 4.748956421031e-01 1.532596874102e+00 1.604487160870e+00 5.933762475224e-01 4.168663451750e-03 1.053799373287e-02 1.082075871897e-01 1.685271367325e-03 1.000000000000e-03 7.300280921211e-01 1.349549207628e+00 4.633068332181e-01 1.534348095804e+00 1.602771755679e+00 7.195787748576e-01 4.963529335300e-03 1.034673931902e-02 1.072211593909e-01 1.389701913036e-03 1.000000000000e-03 8.405917670280e-01 1.290815278279e+00 4.504065298032e-01 1.540389107152e+00 1.604887735489e+00 8.874156489450e-01 5.983220743756e-03 1.011344698091e-02 1.060054871793e-01 1.126867664762e-03 1.000000000000e-03 -9.431582898824e-01 1.232546706303e+00 4.365971604806e-01 1.552004814101e+00 1.612245646150e+00 1.107525806278e+00 7.301247988693e-03 9.888593043121e-03 1.048204445872e-01 9.029134981157e-04 1.000000000000e-03 +9.431582898824e-01 1.232546706303e+00 4.365971604806e-01 1.552004814101e+00 1.612245646150e+00 1.107525806278e+00 7.301247988693e-03 9.888593043121e-03 1.048204445872e-01 9.029134981156e-04 1.000000000000e-03 1.038703247058e+00 1.177848750951e+00 4.224156346172e-01 1.570424183323e+00 1.626243242548e+00 1.377700454173e+00 8.854761863461e-03 9.640805993029e-03 1.034988244326e-01 7.258471875878e-04 1.000000000000e-03 1.129543891040e+00 1.129543891040e+00 4.087066196306e-01 1.597416290005e+00 1.648872312977e+00 1.624967965295e+00 1.003146883962e-02 9.259999938952e-03 1.014341600303e-01 6.153967471097e-04 1.000000000000e-03 1.220532347930e+00 1.090014880287e+00 3.965450756751e-01 1.636408155563e+00 1.683769476096e+00 1.751940775812e+00 1.035997289584e-02 8.870139652152e-03 9.927593225255e-02 5.707955507436e-04 1.000000000000e-03 @@ -559,7 +559,7 @@ 6.046598150465e-01 1.534247348602e+00 4.697659619661e-01 1.649099274945e+00 1.714703612187e+00 4.881216931900e-01 2.978233586532e-03 9.152124238942e-03 1.008415932647e-01 2.048669448524e-03 1.000000000000e-03 7.183707844328e-01 1.469878075327e+00 4.560153958703e-01 1.636031216161e+00 1.698395767048e+00 6.093382556013e-01 3.722223875666e-03 9.162949744538e-03 1.009012154124e-01 1.641124598378e-03 1.000000000000e-03 8.229410200483e-01 1.403204210522e+00 4.412805355858e-01 1.626718776835e+00 1.685509563898e+00 7.859568510859e-01 4.832671658811e-03 9.223162159857e-03 1.012321982148e-01 1.272334478182e-03 1.000000000000e-03 -9.187365206375e-01 1.337640979816e+00 4.260618971927e-01 1.622763132819e+00 1.677763071913e+00 1.036377402053e+00 6.455032921571e-03 9.342686711592e-03 1.018860295275e-01 9.648994642482e-04 1.000000000000e-03 +9.187365206375e-01 1.337640979816e+00 4.260618971927e-01 1.622763132819e+00 1.677763071913e+00 1.036377402053e+00 6.455032921570e-03 9.342686711592e-03 1.018860295275e-01 9.648994642482e-04 1.000000000000e-03 1.006945781093e+00 1.275981790990e+00 4.109412087111e-01 1.625444350631e+00 1.676586417103e+00 1.366368737595e+00 8.473820272142e-03 9.302562374623e-03 1.016670075110e-01 7.318668617668e-04 1.000000000000e-03 1.090014880287e+00 1.220532347930e+00 3.965450756751e-01 1.636408155563e+00 1.683769476096e+00 1.751940775812e+00 1.035997289584e-02 8.870139652152e-03 9.927593225255e-02 5.707955507436e-04 1.000000000000e-03 1.172850167435e+00 1.172850167435e+00 3.833356990626e-01 1.658660613418e+00 1.702381064474e+00 1.994361002634e+00 1.099126999138e-02 8.266760614199e-03 9.583991637795e-02 5.014137353664e-04 1.000000000000e-03 @@ -593,10 +593,10 @@ 5.280728725484e-01 3.177179866690e-01 9.845974350752e-01 6.162837640036e-01 1.161566953271e+00 2.361039380684e-01 6.973456928627e-03 4.430330759629e-02 2.218690995367e-01 4.235422789561e-03 1.000000000000e-03 7.127750758195e-01 3.058672854687e-01 9.366457393342e-01 7.756307788049e-01 1.216103756282e+00 2.743739760280e-01 7.475667493102e-03 4.086940533496e-02 2.130972791290e-01 3.644660526762e-03 1.000000000000e-03 8.729251167043e-01 2.881438548229e-01 8.729251167043e-01 9.192524900404e-01 1.267684266613e+00 3.336532408813e-01 7.967630736331e-03 3.581996108573e-02 1.994992650661e-01 2.997123592622e-03 1.000000000000e-03 -1.008150116816e+00 2.669754436934e-01 8.045266494517e-01 1.042901023861e+00 1.317158181559e+00 4.187542424717e-01 7.877570904901e-03 2.821787855236e-02 1.770683438436e-01 2.388035507646e-03 1.000000000000e-03 +1.008150116816e+00 2.669754436934e-01 8.045266494517e-01 1.042901023861e+00 1.317158181559e+00 4.187542424717e-01 7.877570904902e-03 2.821787855236e-02 1.770683438436e-01 2.388035507646e-03 1.000000000000e-03 1.124985614616e+00 2.464476179506e-01 7.416645060217e-01 1.151663606044e+00 1.369815790892e+00 4.972302850621e-01 7.374194286146e-03 2.224581197390e-02 1.572182205086e-01 2.011140572170e-03 1.000000000000e-03 1.233924564050e+00 2.292348071855e-01 6.896983607286e-01 1.255037221198e+00 1.432062238656e+00 5.444700215859e-01 6.388065834227e-03 1.759894644600e-02 1.398369941753e-01 1.836648411031e-03 1.000000000000e-03 -1.344987562612e+00 2.162900742030e-01 6.507396204496e-01 1.362267572755e+00 1.509713546804e+00 5.385667175713e-01 4.933741081869e-03 1.374130888774e-02 1.235642382989e-01 1.856780167385e-03 1.000000000000e-03 +1.344987562612e+00 2.162900742030e-01 6.507396204496e-01 1.362267572755e+00 1.509713546804e+00 5.385667175713e-01 4.933741081868e-03 1.374130888774e-02 1.235642382989e-01 1.856780167385e-03 1.000000000000e-03 1.466836612338e+00 2.083703770526e-01 6.270158773188e-01 1.481562641716e+00 1.608781144761e+00 4.812943975971e-01 3.435239682368e-03 1.070625286577e-02 1.090680361862e-01 2.077730397429e-03 1.000000000000e-03 1.606972277217e+00 2.074300686996e-01 6.242060412632e-01 1.620304642080e+00 1.736381385265e+00 3.868122113671e-01 2.353506056874e-03 9.126545082002e-03 1.007005742122e-01 2.585233792040e-03 1.000000000000e-03 1.765900051482e+00 2.136660155356e-01 6.428412066421e-01 1.778779401168e+00 1.891375418836e+00 3.235982960808e-01 1.261659524891e-03 5.848267157944e-03 8.061063589836e-02 3.090251129599e-03 1.000000000000e-03 @@ -656,7 +656,7 @@ 8.267036106271e-01 9.908776946171e-01 6.730598542171e-01 1.290456301280e+00 1.455433623657e+00 7.984414739101e-01 9.434057334768e-03 1.772338545097e-02 1.403305045280e-01 1.252439950423e-03 1.000000000000e-03 9.447995901570e-01 9.447995901570e-01 6.459797522229e-01 1.336148394125e+00 1.484109959337e+00 9.164944910283e-01 9.716698181948e-03 1.590303860590e-02 1.329287135853e-01 1.091114032642e-03 1.000000000000e-03 1.053203146443e+00 8.996155885726e-01 6.178877525311e-01 1.385115545679e+00 1.516683997941e+00 1.013209020788e+00 9.457828429045e-03 1.400179267308e-02 1.247298978374e-01 9.869631828016e-04 1.000000000000e-03 -1.155879521794e+00 8.585962680211e-01 5.913496497440e-01 1.439876737906e+00 1.556579400035e+00 1.060336523705e+00 8.465168463376e-03 1.197521014432e-02 1.153507219277e-01 9.430968165712e-04 1.000000000000e-03 +1.155879521794e+00 8.585962680211e-01 5.913496497440e-01 1.439876737906e+00 1.556579400035e+00 1.060336523705e+00 8.465168463376e-03 1.197521014432e-02 1.153507219277e-01 9.430968165711e-04 1.000000000000e-03 1.258398420208e+00 8.261099109503e-01 5.698130105336e-01 1.505331913218e+00 1.609568586897e+00 1.013058765502e+00 6.782837894410e-03 1.004310627189e-02 1.056362010334e-01 9.871095676311e-04 1.000000000000e-03 1.366017705788e+00 8.067348567609e-01 5.568258523935e-01 1.586450598550e+00 1.681332962721e+00 9.260192904560e-01 5.779637366267e-03 9.362068521415e-03 1.019916582723e-01 1.079891110592e-03 1.000000000000e-03 1.483645056167e+00 7.997222988291e-01 5.521820047680e-01 1.685454955771e+00 1.773601808276e+00 8.691015335352e-01 3.894431745073e-03 6.721478897693e-03 8.641938374188e-02 1.150613549066e-03 1.000000000000e-03 @@ -676,8 +676,8 @@ 2.162900742030e-01 1.344987562612e+00 6.507396204496e-01 1.362267572755e+00 1.509713546804e+00 5.385667175713e-01 4.933741081869e-03 1.374130888774e-02 1.235642382989e-01 1.856780167385e-03 1.000000000000e-03 3.572657420984e-01 1.322623506139e+00 6.444248431329e-01 1.370026185688e+00 1.514019526927e+00 5.844019064159e-01 5.287744309360e-03 1.357219471217e-02 1.228015323473e-01 1.711151159880e-03 1.000000000000e-03 4.933351493422e-01 1.290379558926e+00 6.350962438914e-01 1.381469860573e+00 1.520462500253e+00 6.573300340945e-01 5.838046612278e-03 1.332218134606e-02 1.216652116171e-01 1.521305810068e-03 1.000000000000e-03 -6.229630474472e-01 1.250168256490e+00 6.229630474472e-01 1.396783314627e+00 1.529407266396e+00 7.608854929122e-01 6.592289235990e-03 1.299595529958e-02 1.201663444267e-01 1.314258202207e-03 1.000000000000e-03 -7.449586701205e-01 1.204397596594e+00 6.082717093348e-01 1.416169831224e+00 1.541275920543e+00 8.971738501315e-01 7.511230078343e-03 1.255815148409e-02 1.181249408423e-01 1.114611175809e-03 1.000000000000e-03 +6.229630474472e-01 1.250168256490e+00 6.229630474472e-01 1.396783314627e+00 1.529407266396e+00 7.608854929122e-01 6.592289235991e-03 1.299595529958e-02 1.201663444267e-01 1.314258202207e-03 1.000000000000e-03 +7.449586701205e-01 1.204397596594e+00 6.082717093348e-01 1.416169831224e+00 1.541275920543e+00 8.971738501314e-01 7.511230078343e-03 1.255815148409e-02 1.181249408423e-01 1.114611175809e-03 1.000000000000e-03 8.585962680211e-01 1.155879521794e+00 5.913496497440e-01 1.439876737906e+00 1.556579400035e+00 1.060336523705e+00 8.465168463376e-03 1.197521014432e-02 1.153507219277e-01 9.430968165712e-04 1.000000000000e-03 9.639221108131e-01 1.107612449498e+00 5.727946728954e-01 1.468315760999e+00 1.576085312188e+00 1.235836971653e+00 9.247376119921e-03 1.122402428318e-02 1.116742499076e-01 8.091682179266e-04 1.000000000000e-03 1.062220707059e+00 1.062220707059e+00 5.536574239752e-01 1.502206930156e+00 1.600987883818e+00 1.408737341041e+00 9.760959682253e-03 1.039330689748e-02 1.074621736937e-01 7.098555357817e-04 1.000000000000e-03 @@ -693,7 +693,7 @@ 8.261099109503e-01 1.258398420208e+00 5.698130105336e-01 1.505331913218e+00 1.609568586897e+00 1.013058765502e+00 6.782837894410e-03 1.004310627189e-02 1.056362010334e-01 9.871095676311e-04 1.000000000000e-03 9.276844804483e-01 1.205983782141e+00 5.529446082486e-01 1.521510886603e+00 1.618870939217e+00 1.257040031465e+00 8.287200943221e-03 9.888946337167e-03 1.048223170532e-01 7.955196135117e-04 1.000000000000e-03 1.022155802474e+00 1.156306063684e+00 5.355335358284e-01 1.543323102090e+00 1.633597981586e+00 1.543510279290e+00 9.962744647840e-03 9.681903108953e-03 1.037191887794e-01 6.478738842348e-04 1.000000000000e-03 -1.111608269261e+00 1.111608269261e+00 5.185506873350e-01 1.572051490436e+00 1.655367241405e+00 1.795550997312e+00 1.104414605326e-02 9.226259295718e-03 1.012491936633e-01 5.569321069113e-04 1.000000000000e-03 +1.111608269261e+00 1.111608269261e+00 5.185506873350e-01 1.572051490436e+00 1.655367241405e+00 1.795550997312e+00 1.104414605326e-02 9.226259295718e-03 1.012491936633e-01 5.569321069114e-04 1.000000000000e-03 1.200581386481e+00 1.073427001732e+00 5.029733265701e-01 1.610478560433e+00 1.687193931015e+00 1.950273910227e+00 1.154916491706e-02 8.882725285279e-03 9.934633743335e-02 5.127484886897e-04 1.000000000000e-03 1.302083856970e+00 1.044736188792e+00 4.906337568632e-01 1.669399914566e+00 1.740005045432e+00 1.497552032017e+00 5.792580146321e-03 5.802048966391e-03 8.029147572294e-02 6.677564309088e-04 1.000000000000e-03 6.953194517343e-02 1.622727110525e+00 6.283698932303e-01 1.624216108353e+00 1.741529985200e+00 3.695145391020e-01 2.231197325279e-03 9.057278222534e-03 1.003177076566e-01 2.706253460094e-03 1.000000000000e-03 @@ -714,7 +714,7 @@ 4.778841505316e-01 1.678393464991e+00 6.150513519900e-01 1.745101110152e+00 1.850315121875e+00 4.243004317546e-01 1.708131520275e-03 6.038639342922e-03 8.191214360468e-02 2.356820604365e-03 1.000000000000e-03 5.956712005356e-01 1.617649690695e+00 5.956712005356e-01 1.723837202567e+00 1.823852757242e+00 5.213125906322e-01 2.155211756503e-03 6.201303580321e-03 8.300805570225e-02 1.918234890102e-03 1.000000000000e-03 7.028060921514e-01 1.551298905478e+00 5.743060497944e-01 1.703075070954e+00 1.797301348170e+00 6.668346943914e-01 2.860701269265e-03 6.434955979327e-03 8.455738340406e-02 1.499622032883e-03 1.000000000000e-03 -7.997222988291e-01 1.483645056167e+00 5.521820047680e-01 1.685454955771e+00 1.773601808276e+00 8.691015335352e-01 3.894431745073e-03 6.721478897693e-03 8.641938374188e-02 1.150613549066e-03 1.000000000000e-03 +7.997222988291e-01 1.483645056167e+00 5.521820047680e-01 1.685454955771e+00 1.773601808276e+00 8.691015335353e-01 3.894431745073e-03 6.721478897693e-03 8.641938374188e-02 1.150613549066e-03 1.000000000000e-03 8.876523563570e-01 1.418139600977e+00 5.303611276441e-01 1.673035156118e+00 1.755086766893e+00 1.117189143742e+00 5.089842583569e-03 6.833904462927e-03 8.713912543186e-02 8.951035781196e-04 1.000000000000e-03 9.683771682937e-01 1.356991453066e+00 5.096311092160e-01 1.667087323377e+00 1.743245252753e+00 1.371965396800e+00 5.949600532187e-03 6.504829363112e-03 8.501522323229e-02 7.288813568711e-04 1.000000000000e-03 1.044736188792e+00 1.302083856970e+00 4.906337568632e-01 1.669399914566e+00 1.740005045432e+00 1.497552032017e+00 5.792580146321e-03 5.802048966391e-03 8.029147572294e-02 6.677564309088e-04 1.000000000000e-03 @@ -769,14 +769,14 @@ 1.469878075327e+00 4.560153958703e-01 7.183707844328e-01 1.538990447533e+00 1.698395767048e+00 6.093382556013e-01 3.722223875666e-03 9.162949744538e-03 1.009012154124e-01 1.641124598378e-03 1.000000000000e-03 1.603129480414e+00 4.592770182242e-01 7.233657887623e-01 1.667620913290e+00 1.817750691045e+00 5.468027163270e-01 2.264859207591e-03 6.213006464574e-03 8.308634374067e-02 1.828813153521e-03 1.000000000000e-03 8.989120231782e-02 8.120246258461e-01 1.019519860458e+00 8.169849577774e-01 1.306478154085e+00 4.009455493668e-01 7.711885812937e-03 2.885137081001e-02 1.790449068748e-01 2.494104253257e-03 1.000000000000e-03 -2.669754436934e-01 8.045266494517e-01 1.008150116816e+00 8.476668078988e-01 1.317158181559e+00 4.187542424717e-01 7.877570904902e-03 2.821787855236e-02 1.770683438436e-01 2.388035507646e-03 1.000000000000e-03 +2.669754436934e-01 8.045266494517e-01 1.008150116816e+00 8.476668078988e-01 1.317158181559e+00 4.187542424717e-01 7.877570904901e-03 2.821787855236e-02 1.770683438436e-01 2.388035507646e-03 1.000000000000e-03 4.365936071392e-01 7.899276016480e-01 9.860948956526e-01 9.025517124465e-01 1.336780736274e+00 4.588711307163e-01 8.215568075145e-03 2.685580174434e-02 1.727419454444e-01 2.179261088923e-03 1.000000000000e-03 5.951774714261e-01 7.683963048749e-01 9.546078168356e-01 9.719408952393e-01 1.362330792356e+00 5.224877596901e-01 8.685195075921e-03 2.493415849896e-02 1.664470503025e-01 1.913920434410e-03 1.000000000000e-03 7.405872273152e-01 7.405872273152e-01 9.158065362147e-01 1.047348500989e+00 1.391272976198e+00 6.061540632701e-01 9.136292216585e-03 2.260883685402e-02 1.584958353958e-01 1.649745601976e-03 1.000000000000e-03 8.721452398395e-01 7.079975636705e-01 8.721452398395e-01 1.123342276218e+00 1.422158637042e+00 7.025151796157e-01 9.443428426319e-03 2.016346842103e-02 1.496791695633e-01 1.423456786438e-03 1.000000000000e-03 9.908776946171e-01 6.730598542171e-01 8.267036106271e-01 1.197851482050e+00 1.455433623657e+00 7.984414739101e-01 9.434057334768e-03 1.772338545097e-02 1.403305045280e-01 1.252439950423e-03 1.000000000000e-03 1.099925008405e+00 6.387509447545e-01 7.830856691585e-01 1.271942527609e+00 1.493673645339e+00 8.748039759151e-01 8.850455777216e-03 1.517560965808e-02 1.298529495582e-01 1.143113231686e-03 1.000000000000e-03 -1.204397596594e+00 6.082717093348e-01 7.449586701205e-01 1.349284270663e+00 1.541275920543e+00 8.971738501314e-01 7.511230078343e-03 1.255815148409e-02 1.181249408423e-01 1.114611175809e-03 1.000000000000e-03 +1.204397596594e+00 6.082717093348e-01 7.449586701205e-01 1.349284270663e+00 1.541275920543e+00 8.971738501315e-01 7.511230078343e-03 1.255815148409e-02 1.181249408423e-01 1.114611175809e-03 1.000000000000e-03 1.310995998895e+00 5.854613415948e-01 7.166804475103e-01 1.435783929295e+00 1.604713792383e+00 8.292209325307e-01 5.648198433361e-03 1.021717773596e-02 1.065477344040e-01 1.205951225746e-03 1.000000000000e-03 1.425485468111e+00 5.743229015866e-01 7.029097008226e-01 1.536832982169e+00 1.689951970499e+00 7.243023106277e-01 4.460797282004e-03 9.238125883110e-03 1.013142848495e-01 1.380638975366e-03 1.000000000000e-03 1.551298905478e+00 5.743060497944e-01 7.028060921514e-01 1.654193378348e+00 1.797301348170e+00 6.668346943914e-01 2.860701269265e-03 6.434955979327e-03 8.455738340406e-02 1.499622032883e-03 1.000000000000e-03 @@ -787,7 +787,7 @@ 7.079975636705e-01 8.721452398395e-01 8.721452398395e-01 1.123342276218e+00 1.422158637042e+00 7.025151796157e-01 9.443428426319e-03 2.016346842103e-02 1.496791695633e-01 1.423456786438e-03 1.000000000000e-03 8.369385978920e-01 8.369385978920e-01 8.369385978920e-01 1.183609916012e+00 1.449620174364e+00 8.001539482845e-01 9.791486982141e-03 1.835550584322e-02 1.428110867281e-01 1.249759502086e-03 1.000000000000e-03 9.542871674284e-01 7.993498374836e-01 7.993498374836e-01 1.244839009914e+00 1.479386468536e+00 9.087543270747e-01 9.888753419737e-03 1.632248638348e-02 1.346703233145e-01 1.100407415081e-03 1.000000000000e-03 -1.062134515577e+00 7.620254788696e-01 7.620254788696e-01 1.307215575040e+00 1.513107858043e+00 9.978778006765e-01 9.490134490388e-03 1.426547591893e-02 1.258988832310e-01 1.002126712632e-03 1.000000000000e-03 +1.062134515577e+00 7.620254788696e-01 7.620254788696e-01 1.307215575040e+00 1.513107858043e+00 9.978778006765e-01 9.490134490387e-03 1.426547591893e-02 1.258988832310e-01 1.002126712632e-03 1.000000000000e-03 1.164671476563e+00 7.278673917621e-01 7.278673917621e-01 1.373408383661e+00 1.554362096907e+00 1.036168897483e+00 8.360203274292e-03 1.210256835724e-02 1.159624860664e-01 9.650936275242e-04 1.000000000000e-03 1.267577343030e+00 7.008343299362e-01 7.008343299362e-01 1.448420200971e+00 1.609064895086e+00 9.813596249908e-01 6.602810982539e-03 1.009234150417e-02 1.058948194314e-01 1.018994438465e-03 1.000000000000e-03 1.376049516029e+00 6.850801574062e-01 6.850801574062e-01 1.537155519990e+00 1.682908766008e+00 8.906393814080e-01 5.561586651297e-03 9.366731531406e-03 1.020170548455e-01 1.122788887259e-03 1.000000000000e-03 @@ -809,7 +809,7 @@ 3.676708372428e-01 1.159901534316e+00 8.134642273388e-01 1.216779936500e+00 1.463652097675e+00 7.021434004773e-01 7.651544257747e-03 1.634611445300e-02 1.347677609528e-01 1.424210495064e-03 1.000000000000e-03 5.068716274082e-01 1.133178119548e+00 8.003647430270e-01 1.241374841574e+00 1.477022416612e+00 7.752937246721e-01 8.198947007324e-03 1.586291765252e-02 1.327609282069e-01 1.289833734206e-03 1.000000000000e-03 6.387509447545e-01 1.099925008405e+00 7.830856691585e-01 1.271942527609e+00 1.493673645339e+00 8.748039759151e-01 8.850455777216e-03 1.517560965808e-02 1.298529495582e-01 1.143113231686e-03 1.000000000000e-03 -7.620254788696e-01 1.062134515577e+00 7.620254788696e-01 1.307215575040e+00 1.513107858043e+00 9.978778006765e-01 9.490134490387e-03 1.426547591893e-02 1.258988832310e-01 1.002126712632e-03 1.000000000000e-03 +7.620254788696e-01 1.062134515577e+00 7.620254788696e-01 1.307215575040e+00 1.513107858043e+00 9.978778006765e-01 9.490134490388e-03 1.426547591893e-02 1.258988832310e-01 1.002126712632e-03 1.000000000000e-03 8.761406937612e-01 1.021972709290e+00 7.380264537571e-01 1.346124338164e+00 1.535165717518e+00 1.135684400057e+00 9.992289916662e-03 1.319771133093e-02 1.210955147849e-01 8.805263151889e-04 1.000000000000e-03 9.815887052312e-01 9.815887052312e-01 7.124006989306e-01 1.388176059610e+00 1.560303665416e+00 1.271702051394e+00 1.022810220115e-02 1.206426716454e-02 1.157788464873e-01 7.863477132113e-04 1.000000000000e-03 1.080304183965e+00 9.430941610296e-01 6.868269924762e-01 1.434044534336e+00 1.590036176964e+00 1.385195348735e+00 1.004955990916e-02 1.088246497326e-02 1.099619377242e-01 7.219198367315e-04 1.000000000000e-03 @@ -819,7 +819,7 @@ 7.059037062518e-02 1.297378946438e+00 7.807658845044e-01 1.299297937767e+00 1.515839865386e+00 6.339384166198e-01 5.621391028571e-03 1.330111304473e-02 1.215689701122e-01 1.577440290387e-03 1.000000000000e-03 2.109139225528e-01 1.287323269750e+00 7.771014912182e-01 1.304486827670e+00 1.518411212821e+00 6.571487577045e-01 5.814873957337e-03 1.327296267967e-02 1.214402581962e-01 1.521725466686e-03 1.000000000000e-03 3.484732366630e-01 1.267659888161e+00 7.698240001369e-01 1.314684444543e+00 1.523490787603e+00 7.079545229466e-01 6.190732165912e-03 1.311680051173e-02 1.207237457620e-01 1.412520109114e-03 1.000000000000e-03 -4.814189017862e-01 1.239437352077e+00 7.590389767492e-01 1.329649994818e+00 1.531048424102e+00 7.873176210909e-01 6.763196445724e-03 1.288526307150e-02 1.196534954288e-01 1.270135423381e-03 1.000000000000e-03 +4.814189017862e-01 1.239437352077e+00 7.590389767492e-01 1.329649994818e+00 1.531048424102e+00 7.873176210909e-01 6.763196445724e-03 1.288526307150e-02 1.196534954288e-01 1.270135423382e-03 1.000000000000e-03 6.082717093348e-01 1.204397596594e+00 7.449586701205e-01 1.349284270663e+00 1.541275920543e+00 8.971738501315e-01 7.511230078343e-03 1.255815148409e-02 1.181249408423e-01 1.114611175809e-03 1.000000000000e-03 7.278673917621e-01 1.164671476563e+00 7.278673917621e-01 1.373408383661e+00 1.554362096907e+00 1.036168897483e+00 8.360203274292e-03 1.210256835724e-02 1.159624860664e-01 9.650936275242e-04 1.000000000000e-03 8.394862520898e-01 1.122584769250e+00 7.082391637587e-01 1.401760939533e+00 1.570521074256e+00 1.199543580278e+00 9.218004306089e-03 1.152688963242e-02 1.131709112234e-01 8.336504120748e-04 1.000000000000e-03 @@ -836,7 +836,7 @@ 7.008343299362e-01 1.267577343030e+00 7.008343299362e-01 1.448420200971e+00 1.609064895086e+00 9.813596249908e-01 6.602810982539e-03 1.009234150417e-02 1.058948194314e-01 1.018994438465e-03 1.000000000000e-03 8.087670544992e-01 1.221692510630e+00 6.829306390525e-01 1.465140518508e+00 1.616487239891e+00 1.189724758353e+00 7.923011285901e-03 9.989299495881e-03 1.053528436355e-01 8.405305453880e-04 1.000000000000e-03 9.090969277711e-01 1.175609025319e+00 6.635299945133e-01 1.486106929024e+00 1.627509096169e+00 1.456592627898e+00 9.599676966886e-03 9.885753349660e-03 1.048053929362e-01 6.865337506503e-04 1.000000000000e-03 -1.002449873478e+00 1.131373274735e+00 6.434460203626e-01 1.511592284851e+00 1.642843272117e+00 1.744579158762e+00 1.122913497496e-02 9.654880019541e-03 1.035743427020e-01 5.732041420865e-04 1.000000000000e-03 +1.002449873478e+00 1.131373274735e+00 6.434460203626e-01 1.511592284851e+00 1.642843272117e+00 1.744579158762e+00 1.122913497496e-02 9.654880019541e-03 1.035743427020e-01 5.732041420866e-04 1.000000000000e-03 1.090596979153e+00 1.090596979153e+00 6.236341842757e-01 1.542337039001e+00 1.663647540097e+00 2.004458153756e+00 1.225078724166e-02 9.167655023404e-03 1.009271190480e-01 4.988879404272e-04 1.000000000000e-03 1.177690065573e+00 1.054094481575e+00 6.048311205815e-01 1.580528097389e+00 1.692303090779e+00 2.166316017304e+00 1.272096306861e-02 8.808246096370e-03 9.892896495505e-02 4.616131681677e-04 1.000000000000e-03 1.278687168889e+00 1.025934507210e+00 5.897488812202e-01 1.639384789781e+00 1.742235986274e+00 1.479043837951e+00 5.372001952722e-03 5.448116358910e-03 7.780400131748e-02 6.761124818218e-04 1.000000000000e-03 @@ -943,7 +943,7 @@ 6.459797522229e-01 9.447995901570e-01 9.447995901570e-01 1.144524401593e+00 1.484109959337e+00 9.164944910283e-01 9.716698181948e-03 1.590303860590e-02 1.329287135853e-01 1.091114032642e-03 1.000000000000e-03 7.691505090644e-01 9.152624465907e-01 9.152624465907e-01 1.195532455324e+00 1.505657065162e+00 1.026670333329e+00 1.014720110462e-02 1.482540321154e-02 1.283459007333e-01 9.740224953779e-04 1.000000000000e-03 8.830535452864e-01 8.830535452864e-01 8.830535452864e-01 1.248826300046e+00 1.529493606240e+00 1.148298648207e+00 1.042631993527e-02 1.361969721668e-02 1.230162465182e-01 8.708535898402e-04 1.000000000000e-03 -9.882908547279e-01 8.498685720436e-01 8.498685720436e-01 1.303455178856e+00 1.556043698947e+00 1.271863998940e+00 1.045484725337e-02 1.233014763617e-02 1.170476998500e-01 7.862475868754e-04 1.000000000000e-03 +9.882908547279e-01 8.498685720436e-01 8.498685720436e-01 1.303455178856e+00 1.556043698947e+00 1.271863998940e+00 1.045484725337e-02 1.233014763617e-02 1.170476998500e-01 7.862475868753e-04 1.000000000000e-03 1.086967104595e+00 8.176829658098e-01 8.176829658098e-01 1.360184884142e+00 1.587043903496e+00 1.370266975986e+00 1.007991539158e-02 1.103425343553e-02 1.107261558758e-01 7.297847919603e-04 1.000000000000e-03 1.182581701991e+00 7.890648378152e-01 7.890648378152e-01 1.421661985199e+00 1.625960060529e+00 1.423473141202e+00 9.435052544299e-03 9.942287217653e-03 1.051046421306e-01 7.025071081814e-04 1.000000000000e-03 1.280177786094e+00 7.671214493751e-01 7.671214493751e-01 1.492424363946e+00 1.678036292871e+00 1.381982514719e+00 8.815347492348e-03 9.568153791880e-03 1.031081082698e-01 7.235981565246e-04 1.000000000000e-03 @@ -970,7 +970,7 @@ 9.195131354821e-01 1.050438651132e+00 7.939885475833e-01 1.396039313958e+00 1.606033492742e+00 1.574688822482e+00 1.108233395502e-02 1.055668948378e-02 1.083035317152e-01 6.350461029017e-04 1.000000000000e-03 1.014353370118e+00 1.014353370118e+00 7.694868377954e-01 1.434512293060e+00 1.627862252306e+00 1.790009354272e+00 1.201737302890e-02 1.007037169964e-02 1.057794965411e-01 5.586562984229e-04 1.000000000000e-03 1.104052824594e+00 9.802600292904e-01 7.455177973868e-01 1.476428922948e+00 1.653976768500e+00 1.976524839335e+00 1.248259589324e-02 9.473138645792e-03 1.025948809953e-01 5.059384937134e-04 1.000000000000e-03 -1.192923960506e+00 9.495091400692e-01 7.232918773267e-01 1.524675435174e+00 1.687538539539e+00 2.090961170123e+00 1.267319859218e-02 9.091416024312e-03 1.005065836667e-01 4.782489576030e-04 1.000000000000e-03 +1.192923960506e+00 9.495091400692e-01 7.232918773267e-01 1.524675435174e+00 1.687538539540e+00 2.090961170124e+00 1.267319859218e-02 9.091416024312e-03 1.005065836667e-01 4.782489576030e-04 1.000000000000e-03 1.294643329114e+00 9.254486437728e-01 7.055774653037e-01 1.591400811198e+00 1.740803291996e+00 1.532660046737e+00 6.008521988247e-03 5.880484065306e-03 8.083236470421e-02 6.524604083787e-04 1.000000000000e-03 6.592880282032e-02 1.344960916087e+00 8.632463147484e-01 1.346575832563e+00 1.599518887906e+00 7.229530639530e-01 4.921182577874e-03 1.021058521621e-02 1.065133544898e-01 1.383215660685e-03 1.000000000000e-03 1.970305897936e-01 1.335501334625e+00 8.594238605484e-01 1.349957357881e+00 1.600310669895e+00 7.475935010263e-01 5.097112757624e-03 1.022704066574e-02 1.065991487653e-01 1.337625325297e-03 1.000000000000e-03 @@ -987,12 +987,12 @@ 6.490656965719e-02 1.466257821884e+00 8.491323997058e-01 1.467693722484e+00 1.695626932804e+00 6.062470187133e-01 3.625131766219e-03 8.969442292464e-03 9.983009061213e-02 1.649492647605e-03 1.000000000000e-03 1.937976245685e-01 1.455113460470e+00 8.446325348486e-01 1.467962091517e+00 1.693610587194e+00 6.332878750210e-01 3.822175624372e-03 9.053171018580e-03 1.002949595420e-01 1.579060707529e-03 1.000000000000e-03 3.198395015379e-01 1.433597458347e+00 8.357768441223e-01 1.468842734715e+00 1.689976897030e+00 6.914072014261e-01 4.207719858567e-03 9.128600012890e-03 1.007119104337e-01 1.446325693365e-03 1.000000000000e-03 -4.412805355857e-01 1.403204210522e+00 8.229410200483e-01 1.470955664701e+00 1.685509563898e+00 7.859568510859e-01 4.832671658811e-03 9.223162159857e-03 1.012321982148e-01 1.272334478182e-03 1.000000000000e-03 +4.412805355858e-01 1.403204210522e+00 8.229410200483e-01 1.470955664701e+00 1.685509563898e+00 7.859568510859e-01 4.832671658811e-03 9.223162159857e-03 1.012321982148e-01 1.272334478182e-03 1.000000000000e-03 5.568258523935e-01 1.366017705788e+00 8.067348567609e-01 1.475147247708e+00 1.681332962721e+00 9.260192904560e-01 5.779637366267e-03 9.362068521415e-03 1.019916582723e-01 1.079891110592e-03 1.000000000000e-03 6.655840150743e-01 1.324283316631e+00 7.878658606411e-01 1.482136425512e+00 1.678529415349e+00 1.121648662096e+00 7.138684173176e-03 9.546684823533e-03 1.029923666186e-01 8.915447713651e-04 1.000000000000e-03 7.671214493751e-01 1.280177786094e+00 7.671214493751e-01 1.492424363946e+00 1.678036292871e+00 1.381982514719e+00 8.815347492348e-03 9.568153791880e-03 1.031081082698e-01 7.235981565246e-04 1.000000000000e-03 8.615339747593e-01 1.235779076697e+00 7.453316303499e-01 1.506449705788e+00 1.680746844491e+00 1.713513572033e+00 1.069527559836e-02 9.362583208782e-03 1.019944617711e-01 5.835961945801e-04 1.000000000000e-03 -9.495091400692e-01 1.192923960506e+00 7.232918773267e-01 1.524675435174e+00 1.687538539539e+00 2.090961170124e+00 1.267319859218e-02 9.091416024312e-03 1.005065836667e-01 4.782489576030e-04 1.000000000000e-03 +9.495091400692e-01 1.192923960506e+00 7.232918773267e-01 1.524675435174e+00 1.687538539539e+00 2.090961170123e+00 1.267319859218e-02 9.091416024312e-03 1.005065836667e-01 4.782489576030e-04 1.000000000000e-03 1.032936857347e+00 1.153039319625e+00 7.017987214843e-01 1.548049813110e+00 1.699699876256e+00 2.297642445977e+00 1.291270964554e-02 8.429973298162e-03 9.678138766291e-02 4.352287283649e-04 1.000000000000e-03 1.117806969241e+00 1.117806969241e+00 6.820608308668e-01 1.580817776016e+00 1.721682844769e+00 1.849141598927e+00 7.801262938981e-03 6.328284656655e-03 8.385360693663e-02 5.407914680955e-04 1.000000000000e-03 1.223509073280e+00 1.093410852323e+00 6.680440732049e-01 1.640890533940e+00 1.771667188870e+00 1.001630601892e+00 1.834343250417e-03 2.747035554254e-03 5.524727800488e-02 9.983720526423e-04 1.000000000000e-03 @@ -1000,14 +1000,14 @@ 1.949966110315e-01 1.587759557766e+00 8.494963814940e-01 1.599688748348e+00 1.811255971353e+00 5.655938521239e-01 2.310970112305e-03 6.128877029764e-03 8.252189628459e-02 1.768053164377e-03 1.000000000000e-03 3.205856847968e-01 1.562045660895e+00 8.373278875865e-01 1.594603972157e+00 1.801077405152e+00 6.297049527655e-01 2.627017794599e-03 6.257734951254e-03 8.338488373037e-02 1.588045314886e-03 1.000000000000e-03 4.400644077378e-01 1.526387798595e+00 8.203186901819e-01 1.588557960749e+00 1.787858816607e+00 7.298602155055e-01 3.148385439480e-03 6.470524161875e-03 8.479075003190e-02 1.370125372990e-03 1.000000000000e-03 -5.521820047680e-01 1.483645056167e+00 7.997222988291e-01 1.583069050635e+00 1.773601808276e+00 8.691015335352e-01 3.894431745073e-03 6.721478897693e-03 8.641938374188e-02 1.150613549066e-03 1.000000000000e-03 +5.521820047680e-01 1.483645056167e+00 7.997222988291e-01 1.583069050635e+00 1.773601808276e+00 8.691015335353e-01 3.894431745073e-03 6.721478897693e-03 8.641938374188e-02 1.150613549066e-03 1.000000000000e-03 6.564056432539e-01 1.436704731948e+00 7.768281403543e-01 1.579553372095e+00 1.760241692196e+00 1.045370944752e+00 4.812862277301e-03 6.905963335019e-03 8.759733211957e-02 9.565982343591e-04 1.000000000000e-03 7.528170305330e-01 1.388073832062e+00 7.528170305330e-01 1.579076453094e+00 1.749347285754e+00 1.249101335458e+00 5.715604024385e-03 6.863659331078e-03 8.732862157187e-02 8.005755590946e-04 1.000000000000e-03 -8.420175437379e-01 1.339927156580e+00 7.287085233619e-01 1.582529092593e+00 1.742244081902e+00 1.447301858080e+00 6.283886414010e-03 6.512690886419e-03 8.506658102411e-02 6.909408665629e-04 1.000000000000e-03 +8.420175437379e-01 1.339927156580e+00 7.287085233620e-01 1.582529092593e+00 1.742244081902e+00 1.447301858080e+00 6.283886414010e-03 6.512690886419e-03 8.506658102411e-02 6.909408665629e-04 1.000000000000e-03 9.254486437728e-01 1.294643329114e+00 7.055774653037e-01 1.591400811198e+00 1.740803291996e+00 1.532660046737e+00 6.008521988247e-03 5.880484065306e-03 8.083236470421e-02 6.524604083787e-04 1.000000000000e-03 1.006517982826e+00 1.254854971374e+00 6.847713183369e-01 1.608645221587e+00 1.748328117760e+00 1.374574734162e+00 4.286414628282e-03 4.677535373398e-03 7.209203510789e-02 7.274977308597e-04 1.000000000000e-03 1.093410852323e+00 1.223509073280e+00 6.680440732049e-01 1.640890533940e+00 1.771667188870e+00 1.001630601892e+00 1.834343250417e-03 2.747035554254e-03 5.524727800488e-02 9.983720526423e-04 1.000000000000e-03 -1.204939320086e+00 1.204939320086e+00 6.579451172730e-01 1.704041528302e+00 1.826649749548e+00 6.174631320618e-01 4.584291786793e-04 1.113659637820e-03 3.517669111184e-02 1.619529892677e-03 1.000000000000e-03 +1.204939320086e+00 1.204939320086e+00 6.579451172730e-01 1.704041528302e+00 1.826649749548e+00 6.174631320618e-01 4.584291786794e-04 1.113659637820e-03 3.517669111184e-02 1.619529892677e-03 1.000000000000e-03 8.129674901507e-02 8.129674901507e-02 1.365026826285e+00 1.149709650340e-01 1.369860050983e+00 3.268656301899e-01 4.412251070888e-03 2.024800405747e-02 1.499926074381e-01 3.059361118571e-03 1.000000000000e-03 2.427195460667e-01 8.084220105216e-02 1.353235867777e+00 2.558285353782e-01 1.377205704807e+00 3.434614561681e-01 4.561001096006e-03 1.991927047750e-02 1.487700331141e-01 2.911534852139e-03 1.000000000000e-03 4.000899330102e-01 7.990258490470e-02 1.328951817877e+00 4.079906586805e-01 1.390168806947e+00 3.815693148208e-01 4.893217504283e-03 1.923589233026e-02 1.461958060284e-01 2.620755813317e-03 1.000000000000e-03 @@ -1026,7 +1026,7 @@ 5.477783933652e-01 2.344329126219e-01 1.280887767293e+00 5.958355131730e-01 1.412690139825e+00 4.597447597017e-01 5.625382917006e-03 1.835382393697e-02 1.428045437223e-01 2.175119952751e-03 1.000000000000e-03 6.896983607286e-01 2.292348071855e-01 1.233924564050e+00 7.267960000007e-01 1.432062238656e+00 5.444700215859e-01 6.388065834227e-03 1.759894644600e-02 1.398369941753e-01 1.836648411031e-03 1.000000000000e-03 8.222095263211e-01 2.228932477459e-01 1.178484326317e+00 8.518860869059e-01 1.454144151190e+00 6.548417916230e-01 7.269200899363e-03 1.665104684602e-02 1.360189808896e-01 1.527086408950e-03 1.000000000000e-03 -9.446219722581e-01 2.153403498435e-01 1.117887905520e+00 9.688560970255e-01 1.479309131335e+00 7.847612751356e-01 8.099952312561e-03 1.548232418418e-02 1.311586155267e-01 1.274272867029e-03 1.000000000000e-03 +9.446219722581e-01 2.153403498435e-01 1.117887905520e+00 9.688560970255e-01 1.479309131335e+00 7.847612751355e-01 8.099952312561e-03 1.548232418418e-02 1.311586155267e-01 1.274272867029e-03 1.000000000000e-03 1.057505156566e+00 2.067220437504e-01 1.057505156566e+00 1.077520839491e+00 1.509757700991e+00 8.982693625722e-01 8.356376492221e-03 1.395412696971e-02 1.245174105172e-01 1.113251816957e-03 1.000000000000e-03 1.163572208273e+00 1.979474687855e-01 1.003799810096e+00 1.180289576445e+00 1.549418453166e+00 9.792322698850e-01 7.742933125135e-03 1.186071991793e-02 1.147979864222e-01 1.021208175786e-03 1.000000000000e-03 1.268791875367e+00 1.906994493147e-01 9.630664597915e-01 1.283042907688e+00 1.604274324716e+00 9.422061735044e-01 6.213128253088e-03 9.891351427860e-03 1.048350631964e-01 1.061338832329e-03 1.000000000000e-03 @@ -1042,7 +1042,7 @@ 1.045733458648e+00 3.413140138209e-01 1.045733458648e+00 1.100024419077e+00 1.517765525074e+00 9.577080109889e-01 8.688119221084e-03 1.360767444993e-02 1.229619383293e-01 1.044159585725e-03 1.000000000000e-03 1.150328667086e+00 3.272461487136e-01 9.947632368294e-01 1.195970770616e+00 1.555602771120e+00 1.036915855887e+00 8.121246056575e-03 1.174817514430e-02 1.142520369101e-01 9.643984073757e-04 1.000000000000e-03 1.253897867818e+00 3.154477305142e-01 9.550618739851e-01 1.292968342073e+00 1.607454607989e+00 1.004913731125e+00 6.624779957316e-03 9.888580112094e-03 1.048203760519e-01 9.951102955677e-04 1.000000000000e-03 -1.362338852483e+00 3.083352685409e-01 9.317656069060e-01 1.396795542237e+00 1.679054773682e+00 9.198562424836e-01 5.634525805361e-03 9.188162582038e-03 1.010399402989e-01 1.087126394120e-03 1.000000000000e-03 +1.362338852483e+00 3.083352685409e-01 9.317656069060e-01 1.396795542237e+00 1.679054773682e+00 9.198562424835e-01 5.634525805361e-03 9.188162582038e-03 1.010399402989e-01 1.087126394120e-03 1.000000000000e-03 1.480816504718e+00 3.059345046369e-01 9.236158899365e-01 1.512089098491e+00 1.771857712661e+00 8.660427328443e-01 3.766405165215e-03 6.523474574133e-03 8.513697834884e-02 1.154677433428e-03 1.000000000000e-03 7.853283421262e-02 5.508652899948e-01 1.292309462142e+00 5.564350579992e-01 1.407012338152e+00 4.406593123166e-01 5.430569075066e-03 1.848560415023e-02 1.433162941432e-01 2.269326829252e-03 1.000000000000e-03 2.344329126219e-01 5.477783933652e-01 1.280887767293e+00 5.958355131730e-01 1.412690139825e+00 4.597447597017e-01 5.625382917006e-03 1.835382393697e-02 1.428045437223e-01 2.175119952751e-03 1.000000000000e-03 @@ -1053,8 +1053,8 @@ 9.192980541230e-01 4.899438587439e-01 1.080533449336e+00 1.041707203122e+00 1.500901872931e+00 9.115285738940e-01 8.918715257812e-03 1.467652607923e-02 1.276998480780e-01 1.097058313518e-03 1.000000000000e-03 1.028602387866e+00 4.712775715951e-01 1.028602387866e+00 1.131426277675e+00 1.529100485297e+00 1.042348190135e+00 9.147609645967e-03 1.316394521410e-02 1.209405051810e-01 9.593723186403e-04 1.000000000000e-03 1.131322484528e+00 4.526051947345e-01 9.813317522683e-01 1.218499908206e+00 1.564529972327e+00 1.121880358256e+00 8.624994772169e-03 1.153197135777e-02 1.131958546442e-01 8.913606452250e-04 1.000000000000e-03 -1.232546706303e+00 4.365971604806e-01 9.431582898824e-01 1.307588797657e+00 1.612245646150e+00 1.107525806278e+00 7.301247988693e-03 9.888593043121e-03 1.048204445872e-01 9.029134981156e-04 1.000000000000e-03 -1.337640979816e+00 4.260618971927e-01 9.187365206375e-01 1.403856164684e+00 1.677763071913e+00 1.036377402053e+00 6.455032921571e-03 9.342686711592e-03 1.018860295275e-01 9.648994642482e-04 1.000000000000e-03 +1.232546706303e+00 4.365971604806e-01 9.431582898824e-01 1.307588797657e+00 1.612245646150e+00 1.107525806278e+00 7.301247988693e-03 9.888593043121e-03 1.048204445872e-01 9.029134981157e-04 1.000000000000e-03 +1.337640979816e+00 4.260618971927e-01 9.187365206375e-01 1.403856164684e+00 1.677763071913e+00 1.036377402053e+00 6.455032921570e-03 9.342686711592e-03 1.018860295275e-01 9.648994642482e-04 1.000000000000e-03 1.452459295838e+00 4.211871957204e-01 9.074057842127e-01 1.512295162958e+00 1.763638828425e+00 9.759409679073e-01 4.362858745987e-03 6.705618817308e-03 8.631736543006e-02 1.024652138689e-03 1.000000000000e-03 7.678903568998e-02 6.934545992361e-01 1.244585980340e+00 6.976932257117e-01 1.426804156030e+00 5.238804842355e-01 6.184764171381e-03 1.770851661063e-02 1.402716278061e-01 1.908832319759e-03 1.000000000000e-03 2.292348071855e-01 6.896983607286e-01 1.233924564050e+00 7.267960000007e-01 1.432062238656e+00 5.444700215859e-01 6.388065834227e-03 1.759894644600e-02 1.398369941753e-01 1.836648411031e-03 1.000000000000e-03 @@ -1073,7 +1073,7 @@ 3.676708372428e-01 8.134642273388e-01 1.159901534316e+00 8.926958573438e-01 1.463652097675e+00 7.021434004773e-01 7.651544257747e-03 1.634611445300e-02 1.347677609528e-01 1.424210495064e-03 1.000000000000e-03 5.068716274082e-01 8.003647430270e-01 1.133178119548e+00 9.473661217037e-01 1.477022416612e+00 7.752937246721e-01 8.198947007324e-03 1.586291765252e-02 1.327609282069e-01 1.289833734206e-03 1.000000000000e-03 6.387509447545e-01 7.830856691585e-01 1.099925008405e+00 1.010557239678e+00 1.493673645339e+00 8.748039759151e-01 8.850455777216e-03 1.517560965808e-02 1.298529495582e-01 1.143113231686e-03 1.000000000000e-03 -7.620254788696e-01 7.620254788696e-01 1.062134515577e+00 1.077666767091e+00 1.513107858043e+00 9.978778006765e-01 9.490134490388e-03 1.426547591893e-02 1.258988832310e-01 1.002126712632e-03 1.000000000000e-03 +7.620254788696e-01 7.620254788696e-01 1.062134515577e+00 1.077666767091e+00 1.513107858043e+00 9.978778006765e-01 9.490134490387e-03 1.426547591893e-02 1.258988832310e-01 1.002126712632e-03 1.000000000000e-03 8.761406937612e-01 7.380264537571e-01 1.021972709290e+00 1.145559060769e+00 1.535165717518e+00 1.135684400057e+00 9.992289916662e-03 1.319771133093e-02 1.210955147849e-01 8.805263151889e-04 1.000000000000e-03 9.815887052312e-01 7.124006989306e-01 9.815887052312e-01 1.212860726578e+00 1.560303665416e+00 1.271702051394e+00 1.022810220115e-02 1.206426716454e-02 1.157788464873e-01 7.863477132113e-04 1.000000000000e-03 1.080304183965e+00 6.868269924762e-01 9.430941610296e-01 1.280151728306e+00 1.590036176964e+00 1.385195348735e+00 1.004955990916e-02 1.088246497326e-02 1.099619377242e-01 7.219198367315e-04 1.000000000000e-03 @@ -1081,7 +1081,7 @@ 1.272600348991e+00 6.451971592202e-01 8.828657922736e-01 1.426811488081e+00 1.677868597264e+00 1.425638633191e+00 9.032264740145e-03 9.503388021896e-03 1.027585520739e-01 7.014400260478e-04 1.000000000000e-03 1.379943112132e+00 6.328888137222e-01 8.654932401105e-01 1.518153893140e+00 1.747532486660e+00 1.282679069200e+00 5.798781339222e-03 6.781253563495e-03 8.680280054043e-02 7.796182412361e-04 1.000000000000e-03 7.214282992530e-02 9.497049526125e-01 1.125779209258e+00 9.524411188763e-01 1.474626363837e+00 7.612979572913e-01 7.894117050175e-03 1.555393057587e-02 1.314615726526e-01 1.313546148945e-03 1.000000000000e-03 -2.153403498435e-01 9.446219722581e-01 1.117887905520e+00 9.688560970255e-01 1.479309131335e+00 7.847612751355e-01 8.099952312561e-03 1.548232418418e-02 1.311586155267e-01 1.274272867029e-03 1.000000000000e-03 +2.153403498435e-01 9.446219722581e-01 1.117887905520e+00 9.688560970255e-01 1.479309131335e+00 7.847612751356e-01 8.099952312561e-03 1.548232418418e-02 1.311586155267e-01 1.274272867029e-03 1.000000000000e-03 3.552556576459e-01 9.344539005368e-01 1.102529972862e+00 9.997052938330e-01 1.488281900574e+00 8.353450433376e-01 8.450394454291e-03 1.517407900188e-02 1.298464007197e-01 1.197110113929e-03 1.000000000000e-03 4.899438587439e-01 9.192980541230e-01 1.080533449336e+00 1.041707203122e+00 1.500901872931e+00 9.115285738940e-01 8.918715257812e-03 1.467652607923e-02 1.276998480780e-01 1.097058313518e-03 1.000000000000e-03 6.178877525311e-01 8.996155885726e-01 1.053203146443e+00 1.091372293001e+00 1.516683997941e+00 1.013209020788e+00 9.457828429045e-03 1.400179267308e-02 1.247298978374e-01 9.869631828016e-04 1.000000000000e-03 @@ -1091,7 +1091,7 @@ 1.050438651132e+00 7.939885475833e-01 9.195131354821e-01 1.316753269783e+00 1.606033492742e+00 1.574688822482e+00 1.108233395502e-02 1.055668948378e-02 1.083035317152e-01 6.350461029017e-04 1.000000000000e-03 1.142857216510e+00 7.676939760236e-01 8.880138304412e-01 1.376763108945e+00 1.638305594572e+00 1.696318858507e+00 1.112152777744e-02 9.834407949013e-03 1.045328653742e-01 5.895118096371e-04 1.000000000000e-03 1.235779076697e+00 7.453316303499e-01 8.615339747593e-01 1.443145580184e+00 1.680746844491e+00 1.713513572033e+00 1.069527559836e-02 9.362583208782e-03 1.019944617711e-01 5.835961945801e-04 1.000000000000e-03 -1.339927156580e+00 7.287085233619e-01 8.420175437379e-01 1.525260927500e+00 1.742244081902e+00 1.447301858080e+00 6.283886414010e-03 6.512690886419e-03 8.506658102411e-02 6.909408665629e-04 1.000000000000e-03 +1.339927156580e+00 7.287085233620e-01 8.420175437379e-01 1.525260927500e+00 1.742244081902e+00 1.447301858080e+00 6.283886414010e-03 6.512690886419e-03 8.506658102411e-02 6.909408665629e-04 1.000000000000e-03 6.922611054622e-02 1.063470849840e+00 1.063470849840e+00 1.065721587865e+00 1.505567252334e+00 8.691217708911e-01 8.160484157316e-03 1.408401750588e-02 1.250955968045e-01 1.150586757221e-03 1.000000000000e-03 2.067220437504e-01 1.057505156566e+00 1.057505156566e+00 1.077520839491e+00 1.509757700991e+00 8.982693625722e-01 8.356376492221e-03 1.395412696971e-02 1.245174105172e-01 1.113251816957e-03 1.000000000000e-03 3.413140138209e-01 1.045733458648e+00 1.045733458648e+00 1.100024419077e+00 1.517765525074e+00 9.577080109889e-01 8.688119221084e-03 1.360767444993e-02 1.229619383293e-01 1.044159585725e-03 1.000000000000e-03 @@ -1102,7 +1102,7 @@ 9.240000517663e-01 9.240000517663e-01 9.240000517663e-01 1.306733404841e+00 1.600415035855e+00 1.600704766102e+00 1.154619527958e-02 1.081979218538e-02 1.096448417258e-01 6.247248219515e-04 1.000000000000e-03 1.019045851185e+00 8.940044556464e-01 8.940044556464e-01 1.355617355131e+00 1.623866490894e+00 1.793208443551e+00 1.221034678811e-02 1.021382664577e-02 1.065302598940e-01 5.576596538992e-04 1.000000000000e-03 1.109049931063e+00 8.651909314930e-01 8.651909314930e-01 1.406608366791e+00 1.651394091507e+00 1.959174277886e+00 1.250668263013e-02 9.575474809441e-03 1.031475470137e-01 5.104191144644e-04 1.000000000000e-03 -1.198391366680e+00 8.390085616902e-01 8.390085616902e-01 1.462900281743e+00 1.686420054705e+00 2.054618660847e+00 1.256766077990e-02 9.175177627407e-03 1.009685188969e-01 4.867083216249e-04 1.000000000000e-03 +1.198391366680e+00 8.390085616902e-01 8.390085616902e-01 1.462900281743e+00 1.686420054705e+00 2.054618660847e+00 1.256766077991e-02 9.175177627407e-03 1.009685188969e-01 4.867083216249e-04 1.000000000000e-03 1.300333684171e+00 8.183822969362e-01 8.183822969362e-01 1.536430042055e+00 1.740794892590e+00 1.538123440614e+00 6.168755900769e-03 6.015859070101e-03 8.175749418657e-02 6.501428777398e-04 1.000000000000e-03 6.624062416669e-02 1.170347280862e+00 1.008302717297e+00 1.172220362436e+00 1.546213099097e+00 9.518402303401e-01 7.524429070652e-03 1.185770809660e-02 1.147834100315e-01 1.050596484709e-03 1.000000000000e-03 1.979474687855e-01 1.163572208273e+00 1.003799810096e+00 1.180289576445e+00 1.549418453166e+00 9.792322698850e-01 7.742933125135e-03 1.186071991793e-02 1.147979864222e-01 1.021208175786e-03 1.000000000000e-03 @@ -1115,22 +1115,22 @@ 9.872803069993e-01 9.872803069993e-01 8.676139354610e-01 1.396225200022e+00 1.643836594733e+00 2.018943272188e+00 1.312730962242e-02 9.753104361521e-03 1.040998685105e-01 4.953086170254e-04 1.000000000000e-03 1.075246285938e+00 9.562829596557e-01 8.414032030634e-01 1.438968962261e+00 1.666910622822e+00 2.245278033217e+00 1.389104906807e-02 9.280175236141e-03 1.015446001417e-01 4.453791402249e-04 1.000000000000e-03 1.161960657065e+00 9.268580347225e-01 8.161644911380e-01 1.486343965944e+00 1.695683597164e+00 2.325069367826e+00 1.354901341025e-02 8.741038180024e-03 9.855082264736e-02 4.300946947381e-04 1.000000000000e-03 -1.263696685220e+00 9.035920146539e-01 7.960401650370e-01 1.553514673630e+00 1.745590955962e+00 1.457388900449e+00 4.971092826364e-03 5.116437511804e-03 7.539847855674e-02 6.861586496862e-04 1.000000000000e-03 +1.263696685220e+00 9.035920146539e-01 7.960401650370e-01 1.553514673630e+00 1.745590955962e+00 1.457388900449e+00 4.971092826365e-03 5.116437511804e-03 7.539847855674e-02 6.861586496862e-04 1.000000000000e-03 6.379466977995e-02 1.276407817314e+00 9.670498751036e-01 1.278001046945e+00 1.602645355944e+00 9.142735026360e-01 6.009757009697e-03 9.859889287566e-03 1.046682021520e-01 1.093764608858e-03 1.000000000000e-03 1.906994493147e-01 1.268791875367e+00 9.630664597915e-01 1.283042907688e+00 1.604274324716e+00 9.422061735044e-01 6.213128253088e-03 9.891351427860e-03 1.048350631964e-01 1.061338832329e-03 1.000000000000e-03 3.154477305142e-01 1.253897867818e+00 9.550618739851e-01 1.292968342073e+00 1.607454607989e+00 1.004913731125e+00 6.624779957316e-03 9.888580112094e-03 1.048203760519e-01 9.951102955677e-04 1.000000000000e-03 -4.365971604806e-01 1.232546706303e+00 9.431582898824e-01 1.307588797657e+00 1.612245646150e+00 1.107525806278e+00 7.301247988693e-03 9.888593043121e-03 1.048204445872e-01 9.029134981156e-04 1.000000000000e-03 +4.365971604806e-01 1.232546706303e+00 9.431582898824e-01 1.307588797657e+00 1.612245646150e+00 1.107525806278e+00 7.301247988693e-03 9.888593043121e-03 1.048204445872e-01 9.029134981157e-04 1.000000000000e-03 5.529446082486e-01 1.205983782141e+00 9.276844804483e-01 1.326704421707e+00 1.618870939217e+00 1.257040031465e+00 8.287200943221e-03 9.888946337167e-03 1.048223170532e-01 7.955196135117e-04 1.000000000000e-03 6.635299945133e-01 1.175609025319e+00 9.090969277711e-01 1.349936529630e+00 1.627509096169e+00 1.456592627898e+00 9.599676966886e-03 9.885753349660e-03 1.048053929362e-01 6.865337506503e-04 1.000000000000e-03 7.676939760236e-01 1.142857216510e+00 8.880138304412e-01 1.376763108945e+00 1.638305594572e+00 1.696318858507e+00 1.112152777744e-02 9.834407949013e-03 1.045328653742e-01 5.895118096371e-04 1.000000000000e-03 8.651909314930e-01 1.109049931063e+00 8.651909314930e-01 1.406608366791e+00 1.651394091507e+00 1.959174277886e+00 1.250668263013e-02 9.575474809441e-03 1.031475470137e-01 5.104191144644e-04 1.000000000000e-03 9.562829596557e-01 1.075246285938e+00 8.414032030634e-01 1.438968962261e+00 1.666910622822e+00 2.245278033217e+00 1.389104906807e-02 9.280175236141e-03 1.015446001417e-01 4.453791402249e-04 1.000000000000e-03 1.042248641364e+00 1.042248641364e+00 8.173733086010e-01 1.473962163982e+00 1.685426826197e+00 2.476902956043e+00 1.462932060890e-02 8.859443144440e-03 9.921605573719e-02 4.037299877092e-04 1.000000000000e-03 -1.128115221185e+00 1.011231070120e+00 7.942060883177e-01 1.515002385954e+00 1.710554161717e+00 2.177539414007e+00 1.070338896958e-02 7.373039197861e-03 9.051113619550e-02 4.592339378876e-04 1.000000000000e-03 +1.128115221185e+00 1.011231070120e+00 7.942060883177e-01 1.515002385954e+00 1.710554161717e+00 2.177539414007e+00 1.070338896958e-02 7.373039197861e-03 9.051113619551e-02 4.592339378876e-04 1.000000000000e-03 1.232747497838e+00 9.882726896745e-01 7.768084067885e-01 1.579983956432e+00 1.760619380627e+00 1.195040731370e+00 2.815238107385e-03 3.533651239014e-03 6.266002836306e-02 8.367915617852e-04 1.000000000000e-03 6.247913831093e-02 1.388637024867e+00 9.452165486884e-01 1.390041880504e+00 1.680967207732e+00 8.114045646364e-01 4.852796124912e-03 8.971103324554e-03 9.983933384612e-02 1.232430828693e-03 1.000000000000e-03 1.866336474901e-01 1.379695390770e+00 9.407003196342e-01 1.392261286428e+00 1.680270389267e+00 8.464019021195e-01 5.120356838817e-03 9.074336008687e-03 1.004121285762e-01 1.181471825023e-03 1.000000000000e-03 -3.083352685409e-01 1.362338852483e+00 9.317656069060e-01 1.396795542237e+00 1.679054773682e+00 9.198562424836e-01 5.634525805361e-03 9.188162582038e-03 1.010399402989e-01 1.087126394120e-03 1.000000000000e-03 +3.083352685409e-01 1.362338852483e+00 9.317656069060e-01 1.396795542237e+00 1.679054773682e+00 9.198562424835e-01 5.634525805361e-03 9.188162582038e-03 1.010399402989e-01 1.087126394120e-03 1.000000000000e-03 4.260618971927e-01 1.337640979816e+00 9.187365206375e-01 1.403856164684e+00 1.677763071913e+00 1.036377402053e+00 6.455032921571e-03 9.342686711592e-03 1.018860295275e-01 9.648994642482e-04 1.000000000000e-03 5.386256755352e-01 1.307150433121e+00 9.021973537173e-01 1.413775043334e+00 1.677116554748e+00 1.202500683800e+00 7.613799585492e-03 9.497457699689e-03 1.027264852773e-01 8.316003587123e-04 1.000000000000e-03 6.451971592202e-01 1.272600348991e+00 8.828657922736e-01 1.426811488081e+00 1.677868597264e+00 1.425638633191e+00 9.032264740145e-03 9.503388021896e-03 1.027585520739e-01 7.014400260478e-04 1.000000000000e-03 @@ -1146,7 +1146,7 @@ 4.211871957204e-01 1.452459295838e+00 9.074057842127e-01 1.512295162958e+00 1.763638828425e+00 9.759409679073e-01 4.362858745987e-03 6.705618817308e-03 8.631736543006e-02 1.024652138689e-03 1.000000000000e-03 5.303611276441e-01 1.418139600977e+00 8.876523563570e-01 1.514068312057e+00 1.755086766893e+00 1.117189143742e+00 5.089842583569e-03 6.833904462927e-03 8.713912543186e-02 8.951035781196e-04 1.000000000000e-03 6.328888137222e-01 1.379943112132e+00 8.654932401105e-01 1.518153893140e+00 1.747532486660e+00 1.282679069200e+00 5.798781339222e-03 6.781253563495e-03 8.680280054043e-02 7.796182412361e-04 1.000000000000e-03 -7.287085233619e-01 1.339927156580e+00 8.420175437379e-01 1.525260927500e+00 1.742244081902e+00 1.447301858080e+00 6.283886414010e-03 6.512690886419e-03 8.506658102411e-02 6.909408665629e-04 1.000000000000e-03 +7.287085233620e-01 1.339927156580e+00 8.420175437379e-01 1.525260927500e+00 1.742244081902e+00 1.447301858080e+00 6.283886414010e-03 6.512690886419e-03 8.506658102411e-02 6.909408665629e-04 1.000000000000e-03 8.183822969362e-01 1.300333684171e+00 8.183822969362e-01 1.536430042055e+00 1.740794892590e+00 1.538123440614e+00 6.168755900769e-03 6.015859070101e-03 8.175749418657e-02 6.501428777398e-04 1.000000000000e-03 9.035920146539e-01 1.263696685220e+00 7.960401650370e-01 1.553514673630e+00 1.745590955962e+00 1.457388900449e+00 4.971092826364e-03 5.116437511804e-03 7.539847855674e-02 6.861586496862e-04 1.000000000000e-03 9.882726896745e-01 1.232747497838e+00 7.768084067885e-01 1.579983956432e+00 1.760619380627e+00 1.195040731370e+00 2.815238107385e-03 3.533651239014e-03 6.266002836306e-02 8.367915617852e-04 1.000000000000e-03 @@ -1168,7 +1168,7 @@ 2.267585919039e-01 2.267585919039e-01 1.462015768428e+00 3.206850760552e-01 1.496772870257e+00 3.560430161959e-01 3.517812872320e-03 1.482045446322e-02 1.283244778903e-01 2.808649389291e-03 1.000000000000e-03 3.742266168404e-01 2.243204852877e-01 1.434762508299e+00 4.363086532164e-01 1.499636187911e+00 3.932259393126e-01 3.801879933063e-03 1.450265440160e-02 1.269411692329e-01 2.543067229360e-03 1.000000000000e-03 5.160623458897e-01 2.207826495233e-01 1.395048523246e+00 5.613067995096e-01 1.503737246126e+00 4.525076619204e-01 4.264639527181e-03 1.413668724110e-02 1.253292873509e-01 2.209907332300e-03 1.000000000000e-03 -6.507396204496e-01 2.162900742030e-01 1.344987562612e+00 6.857429910846e-01 1.509713546804e+00 5.385667175713e-01 4.933741081869e-03 1.374130888774e-02 1.235642382989e-01 1.856780167385e-03 1.000000000000e-03 +6.507396204496e-01 2.162900742030e-01 1.344987562612e+00 6.857429910846e-01 1.509713546804e+00 5.385667175713e-01 4.933741081868e-03 1.374130888774e-02 1.235642382989e-01 1.856780167385e-03 1.000000000000e-03 7.771014912182e-01 2.109139225528e-01 1.287323269750e+00 8.052151329801e-01 1.518411212821e+00 6.571487577045e-01 5.814873957337e-03 1.327296267967e-02 1.214402581962e-01 1.521725466686e-03 1.000000000000e-03 8.945961223218e-01 2.047476209810e-01 1.225420072392e+00 9.177275251242e-01 1.530972946917e+00 8.100004310845e-01 6.831858717718e-03 1.265158348479e-02 1.185635482899e-01 1.234567244194e-03 1.000000000000e-03 1.003799810096e+00 1.979474687855e-01 1.163572208273e+00 1.023131105551e+00 1.549418453166e+00 9.792322698850e-01 7.742933125135e-03 1.186071991793e-02 1.147979864222e-01 1.021208175786e-03 1.000000000000e-03 @@ -1186,7 +1186,7 @@ 9.947632368294e-01 3.272461487136e-01 1.150328667086e+00 1.047207686753e+00 1.555602771120e+00 1.036915855887e+00 8.121246056575e-03 1.174817514430e-02 1.142520369101e-01 9.643984073757e-04 1.000000000000e-03 1.096411696061e+00 3.156725080602e-01 1.096411696061e+00 1.140950366845e+00 1.582367323621e+00 1.173827099631e+00 8.372863832689e-03 1.069944266322e-02 1.090333418079e-01 8.519142217062e-04 1.000000000000e-03 1.195000584812e+00 3.049667002885e-01 1.051512747459e+00 1.233300890288e+00 1.620712850586e+00 1.254459887436e+00 8.018345317123e-03 9.587805952304e-03 1.032139415233e-01 7.971558198198e-04 1.000000000000e-03 -1.295788766245e+00 2.969611539952e-01 1.019979466566e+00 1.329381229636e+00 1.675593198221e+00 1.231308602163e+00 7.578522799459e-03 9.232278714873e-03 1.012822169039e-01 8.121440865786e-04 1.000000000000e-03 +1.295788766245e+00 2.969611539952e-01 1.019979466566e+00 1.329381229636e+00 1.675593198221e+00 1.231308602163e+00 7.578522799459e-03 9.232278714872e-03 1.012822169039e-01 8.121440865786e-04 1.000000000000e-03 1.406329538503e+00 2.921808884763e-01 1.001746850452e+00 1.436360832958e+00 1.751179372550e+00 1.154826508349e+00 5.063706081964e-03 6.577229625432e-03 8.548703362000e-02 8.659309366130e-04 1.000000000000e-03 7.390677203284e-02 5.187384612411e-01 1.407522977630e+00 5.239769099140e-01 1.501889721211e+00 4.337614804821e-01 4.104957049311e-03 1.419544116071e-02 1.255894597520e-01 2.305414484681e-03 1.000000000000e-03 2.207826495233e-01 5.160623458897e-01 1.395048523246e+00 5.613067995096e-01 1.503737246126e+00 4.525076619204e-01 4.264639527181e-03 1.413668724110e-02 1.253292873509e-01 2.209907332300e-03 1.000000000000e-03 @@ -1215,8 +1215,8 @@ 7.059037062518e-02 7.807658845044e-01 1.297378946438e+00 7.839504874869e-01 1.515839865386e+00 6.339384166198e-01 5.621391028571e-03 1.330111304473e-02 1.215689701122e-01 1.577440290387e-03 1.000000000000e-03 2.109139225528e-01 7.771014912182e-01 1.287323269750e+00 8.052151329801e-01 1.518411212821e+00 6.571487577045e-01 5.814873957337e-03 1.327296267967e-02 1.214402581962e-01 1.521725466686e-03 1.000000000000e-03 3.484732366630e-01 7.698240001369e-01 1.267659888161e+00 8.450222410430e-01 1.523490787603e+00 7.079545229466e-01 6.190732165912e-03 1.311680051173e-02 1.207237457620e-01 1.412520109114e-03 1.000000000000e-03 -4.814189017862e-01 7.590389767492e-01 1.239437352077e+00 8.988349833098e-01 1.531048424102e+00 7.873176210909e-01 6.763196445724e-03 1.288526307150e-02 1.196534954288e-01 1.270135423381e-03 1.000000000000e-03 -6.082717093348e-01 7.449586701205e-01 1.204397596594e+00 9.617473122213e-01 1.541275920543e+00 8.971738501315e-01 7.511230078343e-03 1.255815148409e-02 1.181249408423e-01 1.114611175809e-03 1.000000000000e-03 +4.814189017862e-01 7.590389767492e-01 1.239437352077e+00 8.988349833098e-01 1.531048424102e+00 7.873176210909e-01 6.763196445724e-03 1.288526307150e-02 1.196534954288e-01 1.270135423382e-03 1.000000000000e-03 +6.082717093348e-01 7.449586701205e-01 1.204397596594e+00 9.617473122213e-01 1.541275920543e+00 8.971738501314e-01 7.511230078343e-03 1.255815148409e-02 1.181249408423e-01 1.114611175809e-03 1.000000000000e-03 7.278673917621e-01 7.278673917621e-01 1.164671476563e+00 1.029359937039e+00 1.554362096907e+00 1.036168897483e+00 8.360203274292e-03 1.210256835724e-02 1.159624860664e-01 9.650936275242e-04 1.000000000000e-03 8.394862520898e-01 7.082391637587e-01 1.122584769250e+00 1.098335049304e+00 1.570521074256e+00 1.199543580278e+00 9.218004306089e-03 1.152688963242e-02 1.131709112234e-01 8.336504120748e-04 1.000000000000e-03 9.430941610296e-01 6.868269924762e-01 1.080304183965e+00 1.166686724945e+00 1.590036176964e+00 1.385195348735e+00 1.004955990916e-02 1.088246497326e-02 1.099619377242e-01 7.219198367315e-04 1.000000000000e-03 @@ -1234,7 +1234,7 @@ 9.195131354821e-01 7.939885475833e-01 1.050438651132e+00 1.214875392794e+00 1.606033492742e+00 1.574688822482e+00 1.108233395502e-02 1.055668948378e-02 1.083035317152e-01 6.350461029017e-04 1.000000000000e-03 1.014353370118e+00 7.694868377954e-01 1.014353370118e+00 1.273193918070e+00 1.627862252306e+00 1.790009354272e+00 1.201737302890e-02 1.007037169964e-02 1.057794965411e-01 5.586562984229e-04 1.000000000000e-03 1.104052824594e+00 7.455177973868e-01 9.802600292904e-01 1.332189710857e+00 1.653976768500e+00 1.976524839335e+00 1.248259589324e-02 9.473138645792e-03 1.025948809953e-01 5.059384937134e-04 1.000000000000e-03 -1.192923960506e+00 7.232918773267e-01 9.495091400692e-01 1.395069430300e+00 1.687538539539e+00 2.090961170124e+00 1.267319859218e-02 9.091416024312e-03 1.005065836667e-01 4.782489576030e-04 1.000000000000e-03 +1.192923960506e+00 7.232918773267e-01 9.495091400692e-01 1.395069430300e+00 1.687538539540e+00 2.090961170124e+00 1.267319859218e-02 9.091416024312e-03 1.005065836667e-01 4.782489576030e-04 1.000000000000e-03 1.294643329114e+00 7.055774653037e-01 9.254486437728e-01 1.474429011233e+00 1.740803291996e+00 1.532660046737e+00 6.008521988247e-03 5.880484065306e-03 8.083236470421e-02 6.524604083787e-04 1.000000000000e-03 6.624062416669e-02 1.008302717297e+00 1.170347280862e+00 1.010476219413e+00 1.546213099097e+00 9.518402303401e-01 7.524429070652e-03 1.185770809660e-02 1.147834100315e-01 1.050596484709e-03 1.000000000000e-03 1.979474687855e-01 1.003799810096e+00 1.163572208273e+00 1.023131105551e+00 1.549418453166e+00 9.792322698850e-01 7.742933125135e-03 1.186071991793e-02 1.147979864222e-01 1.021208175786e-03 1.000000000000e-03 @@ -1251,7 +1251,7 @@ 6.384481791227e-02 1.111915710219e+00 1.111915710219e+00 1.113747146980e+00 1.573781831780e+00 1.078724521984e+00 7.815488837560e-03 1.086768031821e-02 1.098872165157e-01 9.270207357116e-04 1.000000000000e-03 1.908358166265e-01 1.106715464272e+00 1.106715464272e+00 1.123048274905e+00 1.576723357671e+00 1.109123704971e+00 8.011150621936e-03 1.083443251555e-02 1.097189972184e-01 9.016126835247e-04 1.000000000000e-03 3.156725080602e-01 1.096411696061e+00 1.096411696061e+00 1.140950366845e+00 1.582367323621e+00 1.173827099631e+00 8.372863832689e-03 1.069944266322e-02 1.090333418079e-01 8.519142217062e-04 1.000000000000e-03 -4.369906222469e-01 1.081375171137e+00 1.081375171137e+00 1.166333170532e+00 1.590504739206e+00 1.272787805474e+00 8.945106025720e-03 1.054194499733e-02 1.082278717302e-01 7.856769177855e-04 1.000000000000e-03 +4.369906222469e-01 1.081375171137e+00 1.081375171137e+00 1.166333170532e+00 1.590504739206e+00 1.272787805474e+00 8.945106025721e-03 1.054194499733e-02 1.082278717302e-01 7.856769177855e-04 1.000000000000e-03 5.536574239752e-01 1.062220707059e+00 1.062220707059e+00 1.197851983188e+00 1.600987883818e+00 1.408737341041e+00 9.760959682253e-03 1.039330689748e-02 1.074621736937e-01 7.098555357817e-04 1.000000000000e-03 6.647262066859e-01 1.039624863115e+00 1.039624863115e+00 1.233969523879e+00 1.613536687488e+00 1.582997828370e+00 1.081729720842e-02 1.025013775877e-02 1.067194544317e-01 6.317128059674e-04 1.000000000000e-03 7.694868377954e-01 1.014353370118e+00 1.014353370118e+00 1.273193918070e+00 1.627862252306e+00 1.790009354272e+00 1.201737302890e-02 1.007037169964e-02 1.057794965411e-01 5.586562984229e-04 1.000000000000e-03 @@ -1261,11 +1261,11 @@ 1.131902077485e+00 9.042788228805e-01 9.042788228805e-01 1.448765854969e+00 1.707818108592e+00 2.256940287225e+00 1.152727687952e-02 7.661219668574e-03 9.226302779779e-02 4.430777392120e-04 1.000000000000e-03 1.236173654298e+00 8.838190581457e-01 8.838190581457e-01 1.519625424611e+00 1.757952661099e+00 1.252559973522e+00 3.161155211164e-03 3.785633356471e-03 6.485568043717e-02 7.983649654619e-04 1.000000000000e-03 6.163607124851e-02 1.212914349692e+00 1.064450496378e+00 1.214479404917e+00 1.614935009283e+00 1.135665123048e+00 7.157605696407e-03 9.453850723001e-03 1.024903828713e-01 8.805412614209e-04 1.000000000000e-03 -1.842782033153e-01 1.206876174523e+00 1.060150968893e+00 1.220863856803e+00 1.616919488933e+00 1.174130940601e+00 7.459339961738e-03 9.529609991269e-03 1.029002213110e-01 8.516937638049e-04 1.000000000000e-03 +1.842782033153e-01 1.206876174523e+00 1.060150968893e+00 1.220863856803e+00 1.616919488933e+00 1.174130940601e+00 7.459339961738e-03 9.529609991270e-03 1.029002213110e-01 8.516937638049e-04 1.000000000000e-03 3.049667002885e-01 1.195000584812e+00 1.051512747459e+00 1.233300890288e+00 1.620712850586e+00 1.254459887436e+00 8.018345317123e-03 9.587805952304e-03 1.032139415233e-01 7.971558198198e-04 1.000000000000e-03 4.224156346172e-01 1.177848750951e+00 1.038703247058e+00 1.251304378832e+00 1.626243242548e+00 1.377700454173e+00 8.854761863461e-03 9.640805993029e-03 1.034988244326e-01 7.258471875878e-04 1.000000000000e-03 5.355335358284e-01 1.156306063684e+00 1.022155802474e+00 1.274299761010e+00 1.633597981586e+00 1.543510279290e+00 9.962744647840e-03 9.681903108953e-03 1.037191887794e-01 6.478738842348e-04 1.000000000000e-03 -6.434460203626e-01 1.131373274735e+00 1.002449873478e+00 1.301548411664e+00 1.642843272117e+00 1.744579158762e+00 1.122913497496e-02 9.654880019541e-03 1.035743427020e-01 5.732041420866e-04 1.000000000000e-03 +6.434460203626e-01 1.131373274735e+00 1.002449873478e+00 1.301548411664e+00 1.642843272117e+00 1.744579158762e+00 1.122913497496e-02 9.654880019541e-03 1.035743427020e-01 5.732041420865e-04 1.000000000000e-03 7.455177973868e-01 1.104052824594e+00 9.802600292904e-01 1.332189710857e+00 1.653976768500e+00 1.976524839335e+00 1.248259589324e-02 9.473138645792e-03 1.025948809953e-01 5.059384937134e-04 1.000000000000e-03 8.414032030634e-01 1.075246285938e+00 9.562829596557e-01 1.365325574926e+00 1.666910622822e+00 2.245278033217e+00 1.389104906807e-02 9.280175236141e-03 1.015446001417e-01 4.453791402249e-04 1.000000000000e-03 9.312756973440e-01 1.045808648562e+00 9.312756973440e-01 1.400353581733e+00 1.681744504476e+00 2.502999818366e+00 1.499338049137e-02 8.985246651650e-03 9.991800333635e-02 3.995206043015e-04 1.000000000000e-03 @@ -1274,12 +1274,12 @@ 1.214611559462e+00 9.731243314145e-01 8.681250339553e-01 1.556358636294e+00 1.782103610722e+00 9.907738747659e-01 1.502494191589e-03 2.274728214766e-03 5.027400714271e-02 1.009312039275e-03 1.000000000000e-03 6.008689741434e-02 1.316679761772e+00 1.033430331067e+00 1.318050086416e+00 1.674883362945e+00 1.101084815190e+00 6.610739498881e-03 9.005763326785e-03 1.000320133579e-01 9.081952509054e-04 1.000000000000e-03 1.795714094445e-01 1.309603655166e+00 1.028912315955e+00 1.321857641622e+00 1.675102438252e+00 1.143910079484e+00 6.955349439950e-03 9.120493251206e-03 1.006671812967e-01 8.741945874371e-04 1.000000000000e-03 -2.969611539952e-01 1.295788766245e+00 1.019979466566e+00 1.329381229636e+00 1.675593198221e+00 1.231308602163e+00 7.578522799459e-03 9.232278714873e-03 1.012822169039e-01 8.121440865786e-04 1.000000000000e-03 +2.969611539952e-01 1.295788766245e+00 1.019979466566e+00 1.329381229636e+00 1.675593198221e+00 1.231308602163e+00 7.578522799458e-03 9.232278714873e-03 1.012822169039e-01 8.121440865786e-04 1.000000000000e-03 4.109412087111e-01 1.275981790990e+00 1.006945781093e+00 1.340523109817e+00 1.676586417103e+00 1.366368737595e+00 8.473820272142e-03 9.302562374623e-03 1.016670075110e-01 7.318668617668e-04 1.000000000000e-03 5.204497174913e-01 1.251328482693e+00 9.903793681916e-01 1.355245689916e+00 1.678553595503e+00 1.554923246001e+00 9.617857616112e-03 9.278134120943e-03 1.015334324849e-01 6.431185607212e-04 1.000000000000e-03 6.247174631815e-01 1.223175560708e+00 9.709783902237e-01 1.373473829790e+00 1.682031330089e+00 1.801304254948e+00 1.106376075363e-02 9.213124925932e-03 1.011770995495e-01 5.551532992015e-04 1.000000000000e-03 7.232918773267e-01 1.192923960506e+00 9.495091400692e-01 1.395069430300e+00 1.687538539539e+00 2.090961170124e+00 1.267319859218e-02 9.091416024312e-03 1.005065836667e-01 4.782489576030e-04 1.000000000000e-03 -8.161644911380e-01 1.161960657065e+00 9.268580347225e-01 1.419956705383e+00 1.695683597164e+00 2.325069367826e+00 1.354901341025e-02 8.741038180023e-03 9.855082264736e-02 4.300946947381e-04 1.000000000000e-03 +8.161644911380e-01 1.161960657065e+00 9.268580347225e-01 1.419956705383e+00 1.695683597164e+00 2.325069367826e+00 1.354901341025e-02 8.741038180024e-03 9.855082264736e-02 4.300946947381e-04 1.000000000000e-03 9.042788228805e-01 1.131902077485e+00 9.042788228805e-01 1.448765854969e+00 1.707818108592e+00 2.256940287225e+00 1.152727687952e-02 7.661219668574e-03 9.226302779779e-02 4.430777392120e-04 1.000000000000e-03 9.908258514853e-01 1.104943433479e+00 8.836419975174e-01 1.484127979374e+00 1.727269243325e+00 1.785452212478e+00 6.361098757683e-03 5.344107263044e-03 7.705775080378e-02 5.600821982303e-04 1.000000000000e-03 1.083826381180e+00 1.083826381180e+00 8.672965028306e-01 1.532761967522e+00 1.761125342758e+00 1.196606082144e+00 2.163227985742e-03 2.711704400499e-03 5.489084522435e-02 8.356969055419e-04 1.000000000000e-03 @@ -1305,12 +1305,12 @@ 8.632463147484e-01 6.592880282032e-02 1.344960916087e+00 8.657602479717e-01 1.599518887906e+00 7.229530639530e-01 4.921182577874e-03 1.021058521621e-02 1.065133544898e-01 1.383215660685e-03 1.000000000000e-03 9.670498751036e-01 6.379466977995e-02 1.276407817314e+00 9.691518048429e-01 1.602645355944e+00 9.142735026360e-01 6.009757009697e-03 9.859889287566e-03 1.046682021520e-01 1.093764608858e-03 1.000000000000e-03 1.064450496378e+00 6.163607124851e-02 1.212914349692e+00 1.066233494370e+00 1.614935009283e+00 1.135665123048e+00 7.157605696407e-03 9.453850723001e-03 1.024903828713e-01 8.805412614209e-04 1.000000000000e-03 -1.158406393543e+00 5.957952108330e-02 1.158406393543e+00 1.159937537945e+00 1.639317072606e+00 1.348342187885e+00 8.164505858429e-03 9.082826969062e-03 1.004590959825e-01 7.416514954329e-04 1.000000000000e-03 +1.158406393543e+00 5.957952108330e-02 1.158406393543e+00 1.159937537945e+00 1.639317072606e+00 1.348342187885e+00 8.164505858429e-03 9.082826969062e-03 1.004590959825e-01 7.416514954330e-04 1.000000000000e-03 1.253361651229e+00 5.784907143963e-02 1.116774932033e+00 1.254695956731e+00 1.679716700118e+00 1.450791165152e+00 8.466325700597e-03 8.753491788438e-03 9.862100175497e-02 6.892790802839e-04 1.000000000000e-03 1.358586021467e+00 5.660505783159e-02 1.089316721140e+00 1.359764726082e+00 1.742289020011e+00 1.344396010927e+00 5.466830024163e-03 6.099575548867e-03 8.232439593102e-02 7.438284492606e-04 1.000000000000e-03 7.345352825586e-02 2.206605648923e-01 1.619365114728e+00 2.325650569450e-01 1.635979792207e+00 2.989832606072e-01 2.258790240944e-03 1.133235805421e-02 1.122118930823e-01 3.344668855270e-03 1.000000000000e-03 2.193520252234e-01 2.193520252234e-01 1.602654333952e+00 3.102106090049e-01 1.632400544007e+00 3.137380930421e-01 2.354249134384e-03 1.125580151053e-02 1.118322230970e-01 3.187371958259e-03 1.000000000000e-03 -3.617051426564e-01 2.167582136539e-01 1.570113924096e+00 4.216808430679e-01 1.625752892678e+00 3.472511924655e-01 2.562875699764e-03 1.107069934692e-02 1.109088682303e-01 2.879759729261e-03 1.000000000000e-03 +3.617051426564e-01 2.167582136539e-01 1.570113924096e+00 4.216808430679e-01 1.625752892678e+00 3.472511924655e-01 2.562875699764e-03 1.107069934692e-02 1.109088682304e-01 2.879759729261e-03 1.000000000000e-03 4.980818900474e-01 2.130225360422e-01 1.523793356160e+00 5.417233334970e-01 1.617223040379e+00 4.013682570940e-01 2.911069828668e-03 1.087929766698e-02 1.099459345263e-01 2.491477545435e-03 1.000000000000e-03 6.270158773188e-01 2.083703770526e-01 1.466836612338e+00 6.607322638126e-01 1.608781144761e+00 4.812943975971e-01 3.435239682368e-03 1.070625286577e-02 1.090680361862e-01 2.077730397429e-03 1.000000000000e-03 7.475692298135e-01 2.029890806535e-01 1.402843597748e+00 7.746381866579e-01 1.602508808079e+00 5.949248995141e-01 4.167776904765e-03 1.050832695396e-02 1.080551657152e-01 1.680884428970e-03 1.000000000000e-03 @@ -1321,7 +1321,7 @@ 1.247650836693e+00 1.729468384733e-01 1.112166984406e+00 1.259580572746e+00 1.680315036069e+00 1.500560135050e+00 8.793287599560e-03 8.790005206225e-03 9.882647646942e-02 6.664178106843e-04 1.000000000000e-03 1.352396204916e+00 1.691657718358e-01 1.084475727711e+00 1.362935271182e+00 1.741746295367e+00 1.364104245673e+00 5.563498269483e-03 6.117749014195e-03 8.244694599960e-02 7.330818030749e-04 1.000000000000e-03 7.258749009733e-02 3.638521823974e-01 1.585966257751e+00 3.710220402537e-01 1.628786764766e+00 3.314737311419e-01 2.455942137433e-03 1.111374102997e-02 1.111242599274e-01 3.016830312782e-03 1.000000000000e-03 -2.167582136539e-01 3.617051426564e-01 1.570113924096e+00 4.216808430679e-01 1.625752892678e+00 3.472511924655e-01 2.562875699764e-03 1.107069934692e-02 1.109088682303e-01 2.879759729261e-03 1.000000000000e-03 +2.167582136539e-01 3.617051426564e-01 1.570113924096e+00 4.216808430679e-01 1.625752892678e+00 3.472511924655e-01 2.562875699764e-03 1.107069934692e-02 1.109088682304e-01 2.879759729261e-03 1.000000000000e-03 3.575285251468e-01 3.575285251468e-01 1.539291683050e+00 5.056216891979e-01 1.620207449093e+00 3.827082580452e-01 2.789411582023e-03 1.093291635359e-02 1.102165361337e-01 2.612956420402e-03 1.000000000000e-03 4.926385370326e-01 3.515543281331e-01 1.495443610372e+00 6.052133291648e-01 1.613268348912e+00 4.398491264323e-01 3.165912833219e-03 1.079658674861e-02 1.095271998111e-01 2.273506845657e-03 1.000000000000e-03 6.206081682477e-01 3.440761316809e-01 1.441501261589e+00 7.096075555462e-01 1.606694983515e+00 5.243665719285e-01 3.720286492040e-03 1.064223014358e-02 1.087414371780e-01 1.907062832633e-03 1.000000000000e-03 @@ -1362,9 +1362,9 @@ 4.633068332181e-01 7.300280921211e-01 1.349549207628e+00 8.646353202319e-01 1.602771755679e+00 7.195787748576e-01 4.963529335300e-03 1.034673931902e-02 1.072211593909e-01 1.389701913036e-03 1.000000000000e-03 5.854613415948e-01 7.166804475103e-01 1.310995998895e+00 9.254165798955e-01 1.604713792383e+00 8.292209325307e-01 5.648198433361e-03 1.021717773596e-02 1.065477344040e-01 1.205951225746e-03 1.000000000000e-03 7.008343299362e-01 7.008343299362e-01 1.267577343030e+00 9.911294143724e-01 1.609064895086e+00 9.813596249908e-01 6.602810982539e-03 1.009234150417e-02 1.058948194314e-01 1.018994438465e-03 1.000000000000e-03 -8.087670544992e-01 6.829306390525e-01 1.221692510630e+00 1.058535973031e+00 1.616487239891e+00 1.189724758353e+00 7.923011285901e-03 9.989299495881e-03 1.053528436355e-01 8.405305453881e-04 1.000000000000e-03 -9.090969277711e-01 6.635299945133e-01 1.175609025319e+00 1.125490683081e+00 1.627509096169e+00 1.456592627898e+00 9.599676966886e-03 9.885753349660e-03 1.048053929362e-01 6.865337506503e-04 1.000000000000e-03 -1.002449873478e+00 6.434460203626e-01 1.131373274735e+00 1.191187865098e+00 1.642843272117e+00 1.744579158762e+00 1.122913497496e-02 9.654880019541e-03 1.035743427020e-01 5.732041420866e-04 1.000000000000e-03 +8.087670544992e-01 6.829306390525e-01 1.221692510630e+00 1.058535973031e+00 1.616487239891e+00 1.189724758353e+00 7.923011285901e-03 9.989299495881e-03 1.053528436355e-01 8.405305453880e-04 1.000000000000e-03 +9.090969277711e-01 6.635299945133e-01 1.175609025319e+00 1.125490683081e+00 1.627509096169e+00 1.456592627897e+00 9.599676966886e-03 9.885753349660e-03 1.048053929362e-01 6.865337506503e-04 1.000000000000e-03 +1.002449873478e+00 6.434460203626e-01 1.131373274735e+00 1.191187865098e+00 1.642843272117e+00 1.744579158762e+00 1.122913497496e-02 9.654880019541e-03 1.035743427020e-01 5.732041420865e-04 1.000000000000e-03 1.090596979153e+00 6.236341842757e-01 1.090596979153e+00 1.256312607091e+00 1.663647540097e+00 2.004458153756e+00 1.225078724166e-02 9.167655023404e-03 1.009271190480e-01 4.988879404272e-04 1.000000000000e-03 1.177690065573e+00 6.048311205815e-01 1.054094481575e+00 1.323923930962e+00 1.692303090779e+00 2.166316017304e+00 1.272096306861e-02 8.808246096370e-03 9.892896495505e-02 4.616131681677e-04 1.000000000000e-03 1.278687168889e+00 5.897488812202e-01 1.025934507210e+00 1.408135156433e+00 1.742235986274e+00 1.479043837951e+00 5.372001952722e-03 5.448116358910e-03 7.780400131748e-02 6.761124818218e-04 1.000000000000e-03 @@ -1383,7 +1383,7 @@ 6.379466977995e-02 9.670498751036e-01 1.276407817314e+00 9.691518048429e-01 1.602645355944e+00 9.142735026360e-01 6.009757009697e-03 9.859889287566e-03 1.046682021520e-01 1.093764608858e-03 1.000000000000e-03 1.906994493147e-01 9.630664597915e-01 1.268791875367e+00 9.817653925171e-01 1.604274324716e+00 9.422061735044e-01 6.213128253088e-03 9.891351427860e-03 1.048350631964e-01 1.061338832329e-03 1.000000000000e-03 3.154477305142e-01 9.550618739851e-01 1.253897867818e+00 1.005808358400e+00 1.607454607989e+00 1.004913731125e+00 6.624779957316e-03 9.888580112094e-03 1.048203760519e-01 9.951102955677e-04 1.000000000000e-03 -4.365971604806e-01 9.431582898824e-01 1.232546706303e+00 1.039309694130e+00 1.612245646150e+00 1.107525806278e+00 7.301247988693e-03 9.888593043121e-03 1.048204445872e-01 9.029134981156e-04 1.000000000000e-03 +4.365971604806e-01 9.431582898824e-01 1.232546706303e+00 1.039309694130e+00 1.612245646150e+00 1.107525806278e+00 7.301247988693e-03 9.888593043121e-03 1.048204445872e-01 9.029134981157e-04 1.000000000000e-03 5.529446082486e-01 9.276844804483e-01 1.205983782141e+00 1.079975108535e+00 1.618870939217e+00 1.257040031465e+00 8.287200943221e-03 9.888946337167e-03 1.048223170532e-01 7.955196135117e-04 1.000000000000e-03 6.635299945133e-01 9.090969277711e-01 1.175609025319e+00 1.125490683081e+00 1.627509096169e+00 1.456592627898e+00 9.599676966886e-03 9.885753349660e-03 1.048053929362e-01 6.865337506503e-04 1.000000000000e-03 7.676939760236e-01 8.880138304412e-01 1.142857216510e+00 1.173849480929e+00 1.638305594572e+00 1.696318858507e+00 1.112152777744e-02 9.834407949013e-03 1.045328653742e-01 5.895118096371e-04 1.000000000000e-03 @@ -1408,7 +1408,7 @@ 1.781478653405e-01 1.153458196436e+00 1.153458196436e+00 1.167134299407e+00 1.640935185733e+00 1.396720173270e+00 8.517536244764e-03 9.147361519975e-03 1.008153511237e-01 7.159630247615e-04 1.000000000000e-03 2.949108295225e-01 1.143703230613e+00 1.143703230613e+00 1.181113659681e+00 1.644106613575e+00 1.491005935444e+00 9.156507946655e-03 9.211741947822e-03 1.011695054397e-01 6.706881416284e-04 1.000000000000e-03 4.087066196306e-01 1.129543891040e+00 1.129543891040e+00 1.201212097307e+00 1.648872312977e+00 1.624967965295e+00 1.003146883962e-02 9.259999938952e-03 1.014341600303e-01 6.153967471097e-04 1.000000000000e-03 -5.185506873350e-01 1.111608269261e+00 1.111608269261e+00 1.226608233963e+00 1.655367241405e+00 1.795550997312e+00 1.104414605326e-02 9.226259295718e-03 1.012491936633e-01 5.569321069113e-04 1.000000000000e-03 +5.185506873350e-01 1.111608269261e+00 1.111608269261e+00 1.226608233963e+00 1.655367241405e+00 1.795550997312e+00 1.104414605326e-02 9.226259295718e-03 1.012491936633e-01 5.569321069114e-04 1.000000000000e-03 6.236341842757e-01 1.090596979153e+00 1.090596979153e+00 1.256312607091e+00 1.663647540097e+00 2.004458153756e+00 1.225078724166e-02 9.167655023404e-03 1.009271190480e-01 4.988879404272e-04 1.000000000000e-03 7.233361674103e-01 1.067213435118e+00 1.067213435118e+00 1.289247736930e+00 1.673649976332e+00 2.251837144882e+00 1.364568985306e-02 9.089704744463e-03 1.004971240300e-01 4.440818476917e-04 1.000000000000e-03 8.173733086010e-01 1.042248641364e+00 1.042248641364e+00 1.324530617252e+00 1.685426826197e+00 2.476902956043e+00 1.462932060890e-02 8.859443144440e-03 9.921605573719e-02 4.037299877092e-04 1.000000000000e-03 @@ -1423,7 +1423,7 @@ 5.029733265701e-01 1.200581386481e+00 1.073427001732e+00 1.301682692827e+00 1.687193931015e+00 1.950273910227e+00 1.154916491706e-02 8.882725285279e-03 9.934633743335e-02 5.127484886897e-04 1.000000000000e-03 6.048311205815e-01 1.177690065573e+00 1.054094481575e+00 1.323923930962e+00 1.692303090779e+00 2.166316017304e+00 1.272096306861e-02 8.808246096370e-03 9.892896495505e-02 4.616131681677e-04 1.000000000000e-03 7.017987214843e-01 1.153039319625e+00 1.032936857347e+00 1.349822624673e+00 1.699699876256e+00 2.297642445977e+00 1.291270964554e-02 8.429973298162e-03 9.678138766291e-02 4.352287283649e-04 1.000000000000e-03 -7.942060883177e-01 1.128115221185e+00 1.011231070120e+00 1.379640265790e+00 1.710554161717e+00 2.177539414007e+00 1.070338896958e-02 7.373039197861e-03 9.051113619550e-02 4.592339378876e-04 1.000000000000e-03 +7.942060883177e-01 1.128115221185e+00 1.011231070120e+00 1.379640265790e+00 1.710554161717e+00 2.177539414007e+00 1.070338896958e-02 7.373039197861e-03 9.051113619551e-02 4.592339378876e-04 1.000000000000e-03 8.836419975174e-01 1.104943433479e+00 9.908258514853e-01 1.414822664141e+00 1.727269243325e+00 1.785452212478e+00 6.361098757683e-03 5.344107263044e-03 7.705775080378e-02 5.600821982303e-04 1.000000000000e-03 9.739128711009e-01 1.085864278179e+00 9.739128711009e-01 1.458632068453e+00 1.753885341639e+00 1.327614272590e+00 2.717945542275e-03 3.070860563632e-03 5.841290347966e-02 7.532308296512e-04 1.000000000000e-03 1.072729733568e+00 1.072729733568e+00 9.622576740030e-01 1.517068937973e+00 1.796507164957e+00 9.431600055070e-01 9.399833961891e-04 1.494947926175e-03 4.075602104359e-02 1.060265484288e-03 1.000000000000e-03 @@ -1437,11 +1437,11 @@ 6.847713183369e-01 1.254854971374e+00 1.006517982826e+00 1.429535853904e+00 1.748328117760e+00 1.374574734162e+00 4.286414628282e-03 4.677535373398e-03 7.209203510789e-02 7.274977308597e-04 1.000000000000e-03 7.768084067885e-01 1.232747497838e+00 9.882726896745e-01 1.457085342141e+00 1.760619380627e+00 1.195040731370e+00 2.815238107385e-03 3.533651239014e-03 6.266002836306e-02 8.367915617852e-04 1.000000000000e-03 8.681250339553e-01 1.214611559462e+00 9.731243314145e-01 1.492957573060e+00 1.782103610722e+00 9.907738747659e-01 1.502494191589e-03 2.274728214766e-03 5.027400714271e-02 1.009312039275e-03 1.000000000000e-03 -9.624888800652e-01 1.202013475611e+00 9.624888800652e-01 1.539877020998e+00 1.815931189238e+00 8.071049583994e-01 7.256082793626e-04 1.348538882976e-03 3.870886896616e-02 1.238996229168e-03 1.000000000000e-03 +9.624888800652e-01 1.202013475611e+00 9.624888800652e-01 1.539877020998e+00 1.815931189238e+00 8.071049583994e-01 7.256082793627e-04 1.348538882976e-03 3.870886896616e-02 1.238996229168e-03 1.000000000000e-03 1.066257919723e+00 1.194973549164e+00 9.565290788272e-01 1.601520444632e+00 1.865426389117e+00 6.464506273144e-01 3.944837525842e-04 9.153454322327e-04 3.189122889226e-02 1.546908546062e-03 1.000000000000e-03 1.192167331410e+00 1.192167331410e+00 9.541757636728e-01 1.685979208698e+00 1.937260251010e+00 4.860155096566e-01 2.629922746421e-04 8.116786483663e-04 3.003106999179e-02 2.057547506471e-03 1.000000000000e-03 7.502520181018e-02 7.502520181018e-02 1.814688658443e+00 1.061016579197e-01 1.817787800844e+00 2.263915272180e-01 1.372942183668e-03 9.096688824042e-03 1.005357251265e-01 4.417126437055e-03 1.000000000000e-03 -2.236659649978e-01 7.442429884766e-02 1.792764079138e+00 2.357232278698e-01 1.808194813510e+00 2.372392021135e-01 1.450588623995e-03 9.171683754654e-03 1.009492928524e-01 4.215154962127e-03 1.000000000000e-03 +2.236659649978e-01 7.442429884766e-02 1.792764079138e+00 2.357232278698e-01 1.808194813510e+00 2.372392021135e-01 1.450588623995e-03 9.171683754653e-03 1.009492928524e-01 4.215154962127e-03 1.000000000000e-03 3.672666287525e-01 7.323829529244e-02 1.750963033217e+00 3.744978297568e-01 1.790564203871e+00 2.633058010030e-01 1.604122314014e-03 9.138361030616e-03 1.007657405990e-01 3.797865433237e-03 1.000000000000e-03 5.026549077567e-01 7.155850358378e-02 1.692728296636e+00 5.077229320476e-01 1.767232769603e+00 3.055242546353e-01 1.852190812833e-03 9.093504614113e-03 1.005181277963e-01 3.273062563211e-03 1.000000000000e-03 6.283698932303e-01 6.953194517343e-02 1.622727110525e+00 6.322051993759e-01 1.741529985200e+00 3.695145391020e-01 2.231197325279e-03 9.057278222534e-03 1.003177076566e-01 2.706253460094e-03 1.000000000000e-03 @@ -1451,8 +1451,8 @@ 1.033430331067e+00 6.008689741434e-02 1.316679761772e+00 1.035175678042e+00 1.674883362945e+00 1.101084815190e+00 6.610739498881e-03 9.005763326785e-03 1.000320133579e-01 9.081952509054e-04 1.000000000000e-03 1.116774932033e+00 5.784907143963e-02 1.253361651229e+00 1.118272222620e+00 1.679716700118e+00 1.450791165152e+00 8.466325700597e-03 8.753491788438e-03 9.862100175497e-02 6.892790802839e-04 1.000000000000e-03 1.200635941474e+00 5.586324528300e-02 1.200635941474e+00 1.201934842715e+00 1.698874342054e+00 1.746327852798e+00 9.539908799339e-03 8.194259271581e-03 9.541872208314e-02 5.726301612827e-04 1.000000000000e-03 -1.298330300283e+00 5.430564311828e-02 1.162172677002e+00 1.299465533021e+00 1.743346208496e+00 1.379840548527e+00 4.765118926291e-03 5.180075623279e-03 7.586593162561e-02 7.247214187666e-04 1.000000000000e-03 -7.442429884766e-02 2.236659649978e-01 1.792764079138e+00 2.357232278698e-01 1.808194813510e+00 2.372392021135e-01 1.450588623995e-03 9.171683754654e-03 1.009492928524e-01 4.215154962127e-03 1.000000000000e-03 +1.298330300283e+00 5.430564311828e-02 1.162172677002e+00 1.299465533021e+00 1.743346208496e+00 1.379840548527e+00 4.765118926291e-03 5.180075623280e-03 7.586593162561e-02 7.247214187666e-04 1.000000000000e-03 +7.442429884766e-02 2.236659649978e-01 1.792764079138e+00 2.357232278698e-01 1.808194813510e+00 2.372392021135e-01 1.450588623995e-03 9.171683754653e-03 1.009492928524e-01 4.215154962127e-03 1.000000000000e-03 2.218406349285e-01 2.218406349285e-01 1.771584394374e+00 3.137300346013e-01 1.799149188089e+00 2.489518161987e-01 1.530660461625e-03 9.222630818671e-03 1.012292822078e-01 4.016841552993e-03 1.000000000000e-03 3.643589411072e-01 2.183205013157e-01 1.731164105974e+00 4.247602609231e-01 1.782512395769e+00 2.760835954578e-01 1.693287471750e-03 9.199862829276e-03 1.011042521871e-01 3.622091339190e-03 1.000000000000e-03 4.989802018336e-01 2.133852440128e-01 1.674814854749e+00 5.426919053978e-01 1.760545171778e+00 3.200447976029e-01 1.955545957297e-03 9.165338596083e-03 1.009143674172e-01 3.124562584644e-03 1.000000000000e-03 @@ -1504,7 +1504,7 @@ 2.008062243713e-01 7.393855398180e-01 1.532257007337e+00 7.661684646592e-01 1.713133285175e+00 4.863466868039e-01 2.943073671338e-03 9.077085599203e-03 1.004273402305e-01 2.056146422158e-03 1.000000000000e-03 3.310522362219e-01 7.307558486012e-01 1.506345751312e+00 8.022466536997e-01 1.706656736391e+00 5.330062446019e-01 3.239666903538e-03 9.117154638471e-03 1.006487546894e-01 1.876150626991e-03 1.000000000000e-03 4.560153958703e-01 7.183707844328e-01 1.469878075327e+00 8.508857885741e-01 1.698395767048e+00 6.093382556013e-01 3.722223875666e-03 9.162949744538e-03 1.009012154124e-01 1.641124598378e-03 1.000000000000e-03 -5.743229015866e-01 7.029097008226e-01 1.425485468111e+00 9.077052620743e-01 1.689951970499e+00 7.243023106277e-01 4.460797282004e-03 9.238125883110e-03 1.013142848495e-01 1.380638975366e-03 1.000000000000e-03 +5.743229015866e-01 7.029097008226e-01 1.425485468111e+00 9.077052620743e-01 1.689951970499e+00 7.243023106276e-01 4.460797282004e-03 9.238125883110e-03 1.013142848495e-01 1.380638975366e-03 1.000000000000e-03 6.850801574062e-01 6.850801574062e-01 1.376049516029e+00 9.688496499165e-01 1.682908766008e+00 8.906393814080e-01 5.561586651297e-03 9.366731531406e-03 1.020170548455e-01 1.122788887259e-03 1.000000000000e-03 7.878658606411e-01 6.655840150743e-01 1.324283316631e+00 1.031375147794e+00 1.678529415349e+00 1.121648662096e+00 7.138684173176e-03 9.546684823533e-03 1.029923666186e-01 8.915447713651e-04 1.000000000000e-03 8.828657922736e-01 6.451971592202e-01 1.272600348991e+00 1.093495030365e+00 1.677868597264e+00 1.425638633191e+00 9.032264740145e-03 9.503388021896e-03 1.027585520739e-01 7.014400260478e-04 1.000000000000e-03 @@ -1520,7 +1520,7 @@ 6.655840150743e-01 7.878658606411e-01 1.324283316631e+00 1.031375147794e+00 1.678529415349e+00 1.121648662096e+00 7.138684173176e-03 9.546684823533e-03 1.029923666186e-01 8.915447713651e-04 1.000000000000e-03 7.671214493751e-01 7.671214493751e-01 1.280177786094e+00 1.084873557694e+00 1.678036292871e+00 1.381982514719e+00 8.815347492348e-03 9.568153791880e-03 1.031081082698e-01 7.235981565246e-04 1.000000000000e-03 8.615339747593e-01 7.453316303499e-01 1.235779076697e+00 1.139192709275e+00 1.680746844491e+00 1.713513572033e+00 1.069527559836e-02 9.362583208782e-03 1.019944617711e-01 5.835961945801e-04 1.000000000000e-03 -9.495091400692e-01 7.232918773267e-01 1.192923960506e+00 1.193615828850e+00 1.687538539539e+00 2.090961170124e+00 1.267319859218e-02 9.091416024312e-03 1.005065836667e-01 4.782489576030e-04 1.000000000000e-03 +9.495091400692e-01 7.232918773267e-01 1.192923960506e+00 1.193615828850e+00 1.687538539540e+00 2.090961170124e+00 1.267319859218e-02 9.091416024312e-03 1.005065836667e-01 4.782489576030e-04 1.000000000000e-03 1.032936857347e+00 7.017987214843e-01 1.153039319625e+00 1.248791414426e+00 1.699699876256e+00 2.297642445977e+00 1.291270964554e-02 8.429973298162e-03 9.678138766291e-02 4.352287283649e-04 1.000000000000e-03 1.117806969241e+00 6.820608308668e-01 1.117806969241e+00 1.309465309768e+00 1.721682844769e+00 1.849141598927e+00 7.801262938981e-03 6.328284656655e-03 8.385360693663e-02 5.407914680955e-04 1.000000000000e-03 1.223509073280e+00 6.680440732049e-01 1.093410852323e+00 1.394007652828e+00 1.771667188870e+00 1.001630601892e+00 1.834343250417e-03 2.747035554254e-03 5.524727800488e-02 9.983720526423e-04 1.000000000000e-03 @@ -1531,7 +1531,7 @@ 5.386256755352e-01 9.021973537173e-01 1.307150433121e+00 1.050751009231e+00 1.677116554748e+00 1.202500683800e+00 7.613799585492e-03 9.497457699689e-03 1.027264852773e-01 8.316003587123e-04 1.000000000000e-03 6.451971592202e-01 8.828657922736e-01 1.272600348991e+00 1.093495030365e+00 1.677868597264e+00 1.425638633191e+00 9.032264740145e-03 9.503388021896e-03 1.027585520739e-01 7.014400260478e-04 1.000000000000e-03 7.453316303499e-01 8.615339747593e-01 1.235779076697e+00 1.139192709275e+00 1.680746844491e+00 1.713513572033e+00 1.069527559836e-02 9.362583208782e-03 1.019944617711e-01 5.835961945801e-04 1.000000000000e-03 -8.390085616902e-01 8.390085616902e-01 1.198391366680e+00 1.186537286889e+00 1.686420054705e+00 2.054618660847e+00 1.256766077991e-02 9.175177627407e-03 1.009685188969e-01 4.867083216249e-04 1.000000000000e-03 +8.390085616902e-01 8.390085616902e-01 1.198391366680e+00 1.186537286889e+00 1.686420054705e+00 2.054618660847e+00 1.256766077990e-02 9.175177627407e-03 1.009685188969e-01 4.867083216249e-04 1.000000000000e-03 9.268580347225e-01 8.161644911380e-01 1.161960657065e+00 1.234985948553e+00 1.695683597164e+00 2.325069367826e+00 1.354901341025e-02 8.741038180024e-03 9.855082264736e-02 4.300946947381e-04 1.000000000000e-03 1.011231070120e+00 7.942060883177e-01 1.128115221185e+00 1.285827199859e+00 1.710554161717e+00 2.177539414007e+00 1.070338896958e-02 7.373039197861e-03 9.051113619551e-02 4.592339378876e-04 1.000000000000e-03 1.099323601866e+00 7.750692994304e-01 1.099323601866e+00 1.345081707756e+00 1.737169301525e+00 1.519986195056e+00 4.568366828904e-03 4.508297684313e-03 7.077584085856e-02 6.579007120282e-04 1.000000000000e-03 @@ -1542,7 +1542,7 @@ 4.109412087111e-01 1.006945781093e+00 1.275981790990e+00 1.087571828928e+00 1.676586417103e+00 1.366368737595e+00 8.473820272142e-03 9.302562374623e-03 1.016670075110e-01 7.318668617668e-04 1.000000000000e-03 5.204497174913e-01 9.903793681916e-01 1.251328482693e+00 1.118802574799e+00 1.678553595503e+00 1.554923246001e+00 9.617857616112e-03 9.278134120943e-03 1.015334324849e-01 6.431185607212e-04 1.000000000000e-03 6.247174631815e-01 9.709783902237e-01 1.223175560708e+00 1.154586914479e+00 1.682031330089e+00 1.801304254948e+00 1.106376075363e-02 9.213124925932e-03 1.011770995495e-01 5.551532992015e-04 1.000000000000e-03 -7.232918773267e-01 9.495091400692e-01 1.192923960506e+00 1.193615828850e+00 1.687538539539e+00 2.090961170124e+00 1.267319859218e-02 9.091416024312e-03 1.005065836667e-01 4.782489576030e-04 1.000000000000e-03 +7.232918773267e-01 9.495091400692e-01 1.192923960506e+00 1.193615828850e+00 1.687538539539e+00 2.090961170123e+00 1.267319859218e-02 9.091416024312e-03 1.005065836667e-01 4.782489576030e-04 1.000000000000e-03 8.161644911380e-01 9.268580347225e-01 1.161960657065e+00 1.234985948553e+00 1.695683597164e+00 2.325069367826e+00 1.354901341025e-02 8.741038180024e-03 9.855082264736e-02 4.300946947381e-04 1.000000000000e-03 9.042788228805e-01 9.042788228805e-01 1.131902077485e+00 1.278843375484e+00 1.707818108592e+00 2.256940287225e+00 1.152727687952e-02 7.661219668574e-03 9.226302779779e-02 4.430777392120e-04 1.000000000000e-03 9.908258514853e-01 8.836419975174e-01 1.104943433479e+00 1.327614043217e+00 1.727269243325e+00 1.785452212478e+00 6.361098757683e-03 5.344107263044e-03 7.705775080378e-02 5.600821982303e-04 1.000000000000e-03 @@ -1561,18 +1561,18 @@ 1.072729733568e+00 9.622576740030e-01 1.072729733568e+00 1.441072139922e+00 1.796507164957e+00 9.431600055070e-01 9.399833961891e-04 1.494947926175e-03 4.075602104359e-02 1.060265484288e-03 1.000000000000e-03 1.194973549164e+00 9.565290788272e-01 1.066257919723e+00 1.530656611341e+00 1.865426389117e+00 6.464506273144e-01 3.944837525842e-04 9.153454322327e-04 3.189122889226e-02 1.546908546062e-03 1.000000000000e-03 5.586324528300e-02 1.200635941474e+00 1.200635941474e+00 1.201934842715e+00 1.698874342054e+00 1.746327852798e+00 9.539908799339e-03 8.194259271581e-03 9.541872208314e-02 5.726301612827e-04 1.000000000000e-03 -1.670301782390e-01 1.195764558924e+00 1.195764558924e+00 1.207373993766e+00 1.699295395510e+00 1.794011031134e+00 9.850791185960e-03 8.236396835087e-03 9.566374464229e-02 5.574101734302e-04 1.000000000000e-03 +1.670301782390e-01 1.195764558924e+00 1.195764558924e+00 1.207373993766e+00 1.699295395510e+00 1.794011031134e+00 9.850791185960e-03 8.236396835087e-03 9.566374464229e-02 5.574101734303e-04 1.000000000000e-03 2.765219321198e-01 1.186321215023e+00 1.186321215023e+00 1.218122491442e+00 1.700347149664e+00 1.882396034612e+00 1.038491412380e-02 8.275288993000e-03 9.588934011546e-02 5.312378381662e-04 1.000000000000e-03 3.833356990626e-01 1.172850167435e+00 1.172850167435e+00 1.233905901367e+00 1.702381064474e+00 1.994361002634e+00 1.099126999138e-02 8.266760614199e-03 9.583991637795e-02 5.014137353664e-04 1.000000000000e-03 4.867172805775e-01 1.156164794123e+00 1.156164794123e+00 1.254436424209e+00 1.705968280347e+00 2.081286155557e+00 1.123729531029e-02 8.098810882124e-03 9.486136599225e-02 4.804721336997e-04 1.000000000000e-03 5.862518666845e-01 1.137347756551e+00 1.137347756551e+00 1.279551159791e+00 1.711961182344e+00 2.055106567130e+00 1.037664892944e-02 7.573803540464e-03 9.173514739282e-02 4.865927713893e-04 1.000000000000e-03 6.820608308668e-01 1.117806969241e+00 1.117806969241e+00 1.309465309768e+00 1.721682844769e+00 1.849141598927e+00 7.801262938981e-03 6.328284656655e-03 8.385360693663e-02 5.407914680955e-04 1.000000000000e-03 -7.750692994304e-01 1.099323601866e+00 1.099323601866e+00 1.345081707756e+00 1.737169301525e+00 1.519986195055e+00 4.568366828904e-03 4.508297684313e-03 7.077584085856e-02 6.579007120282e-04 1.000000000000e-03 +7.750692994304e-01 1.099323601866e+00 1.099323601866e+00 1.345081707756e+00 1.737169301525e+00 1.519986195056e+00 4.568366828904e-03 4.508297684313e-03 7.077584085856e-02 6.579007120282e-04 1.000000000000e-03 8.672965028306e-01 1.083826381180e+00 1.083826381180e+00 1.388122058165e+00 1.761125342758e+00 1.196606082144e+00 2.163227985742e-03 2.711704400499e-03 5.489084522435e-02 8.356969055419e-04 1.000000000000e-03 9.622576740030e-01 1.072729733568e+00 1.072729733568e+00 1.441072139922e+00 1.796507164957e+00 9.431600055070e-01 9.399833961891e-04 1.494947926175e-03 4.075602104359e-02 1.060265484288e-03 1.000000000000e-03 1.066259785919e+00 1.066259785919e+00 1.066259785919e+00 1.507919050260e+00 1.846816123279e+00 7.430338872767e-01 4.643006494015e-04 9.373071484732e-04 3.227154144432e-02 1.345833638443e-03 1.000000000000e-03 1.192274995337e+00 1.063542290730e+00 1.063542290730e+00 1.597698929298e+00 1.919313437886e+00 5.549611365251e-01 2.983166104132e-04 8.063175710314e-04 2.993172918923e-02 1.801927980510e-03 1.000000000000e-03 -5.430564311828e-02 1.298330300283e+00 1.162172677002e+00 1.299465533021e+00 1.743346208496e+00 1.379840548527e+00 4.765118926291e-03 5.180075623279e-03 7.586593162561e-02 7.247214187666e-04 1.000000000000e-03 +5.430564311828e-02 1.298330300283e+00 1.162172677002e+00 1.299465533021e+00 1.743346208496e+00 1.379840548527e+00 4.765118926291e-03 5.180075623280e-03 7.586593162561e-02 7.247214187666e-04 1.000000000000e-03 1.624007249792e-01 1.293543981943e+00 1.157889545021e+00 1.303698595802e+00 1.743656568010e+00 1.375266716499e+00 4.721061920970e-03 5.149250539184e-03 7.563986705423e-02 7.271316814424e-04 1.000000000000e-03 2.689395732064e-01 1.284312852455e+00 1.149543289754e+00 1.312169195271e+00 1.744487825133e+00 1.364033383743e+00 4.609265375184e-03 5.068716165730e-03 7.504603154605e-02 7.331198868870e-04 1.000000000000e-03 3.730423835197e-01 1.271371561724e+00 1.137731754167e+00 1.324970289426e+00 1.746419139927e+00 1.331142874546e+00 4.288473731024e-03 4.832471945381e-03 7.327628042310e-02 7.512341606014e-04 1.000000000000e-03 @@ -1594,7 +1594,7 @@ 9.411571745653e-01 6.226367886473e-02 1.511747493122e+00 9.432144999636e-01 1.781862530024e+00 7.547646008263e-01 3.103112203385e-03 6.167046387685e-03 8.277846195777e-02 1.324916402949e-03 1.000000000000e-03 1.017755915460e+00 5.928121547195e-02 1.430085777156e+00 1.019480929670e+00 1.756270678451e+00 1.051324174627e+00 4.464358262941e-03 6.369621812213e-03 8.412703233281e-02 9.511813997379e-04 1.000000000000e-03 1.089316721140e+00 5.660505783159e-02 1.358586021467e+00 1.090786437176e+00 1.742289020011e+00 1.344396010927e+00 5.466830024163e-03 6.099575548867e-03 8.232439593102e-02 7.438284492606e-04 1.000000000000e-03 -1.162172677002e+00 5.430564311828e-02 1.298330300283e+00 1.163440773759e+00 1.743346208496e+00 1.379840548527e+00 4.765118926291e-03 5.180075623279e-03 7.586593162561e-02 7.247214187666e-04 1.000000000000e-03 +1.162172677002e+00 5.430564311828e-02 1.298330300283e+00 1.163440773759e+00 1.743346208496e+00 1.379840548527e+00 4.765118926291e-03 5.180075623280e-03 7.586593162561e-02 7.247214187666e-04 1.000000000000e-03 1.254300260084e+00 5.257104397790e-02 1.254300260084e+00 1.255401472483e+00 1.774627284688e+00 8.932758086250e-01 1.455413745440e-03 2.443949110769e-03 5.211045012246e-02 1.119475071803e-03 1.000000000000e-03 7.903561733592e-02 2.376558932080e-01 1.992805772590e+00 2.504534934557e-01 2.008482461873e+00 1.887607948443e-01 6.905139083839e-04 5.487213928244e-03 7.808267646998e-02 5.297710262478e-03 1.000000000000e-03 2.348118975979e-01 2.348118975979e-01 1.965922938548e+00 3.320741701895e-01 1.993771866292e+00 1.992065608078e-01 7.477865161520e-04 5.630737108655e-03 7.909724751957e-02 5.019914986459e-03 1.000000000000e-03 @@ -1610,7 +1610,7 @@ 1.250922585696e+00 1.573420272077e-01 1.250922585696e+00 1.260779056350e+00 1.776054938434e+00 8.716316221762e-01 1.395449705155e-03 2.401444032637e-03 5.165531093097e-02 1.147273658456e-03 1.000000000000e-03 7.721110465645e-02 3.873893559028e-01 1.940439407973e+00 3.950089464165e-01 1.980236643374e+00 2.127667951046e-01 7.797320708366e-04 5.497089457404e-03 7.815290893430e-02 4.699981496213e-03 1.000000000000e-03 2.294464522640e-01 3.829528984387e-01 1.915595553628e+00 4.464287142188e-01 1.966927787683e+00 2.243185508728e-01 8.438396619191e-04 5.642687543913e-03 7.918113933614e-02 4.457946059784e-03 1.000000000000e-03 -3.746426239233e-01 3.746426239233e-01 1.868948178284e+00 5.298246797954e-01 1.942596583038e+00 2.514116834691e-01 9.534253153948e-04 5.688430837255e-03 7.950143840247e-02 3.977539890753e-03 1.000000000000e-03 +3.746426239233e-01 3.746426239233e-01 1.868948178284e+00 5.298246797954e-01 1.942596583038e+00 2.514116834691e-01 9.534253153948e-04 5.688430837255e-03 7.950143840247e-02 3.977539890754e-03 1.000000000000e-03 5.090888282599e-01 3.633401548096e-01 1.805055564456e+00 6.254498406395e-01 1.910343710941e+00 2.947228394796e-01 1.137940629498e-03 5.791580141058e-03 8.021900676037e-02 3.393018341455e-03 1.000000000000e-03 6.311907282125e-01 3.500235143508e-01 1.729163669784e+00 7.217466286585e-01 1.873746298964e+00 3.617548569438e-01 1.427903806970e-03 5.920737950973e-03 8.110855517948e-02 2.764302899617e-03 1.000000000000e-03 7.404059246714e-01 3.355174108090e-01 1.646437631693e+00 8.128793675844e-01 1.836172579389e+00 4.666536534155e-01 1.887293718703e-03 6.066470405482e-03 8.210068618933e-02 2.142916899248e-03 1.000000000000e-03 @@ -1655,7 +1655,7 @@ 9.475341739796e-01 6.103642834997e-01 1.326490652259e+00 1.127104950495e+00 1.740673151388e+00 1.483823192264e+00 6.232062452178e-03 6.300005099665e-03 8.366603651599e-02 6.739347418299e-04 1.000000000000e-03 1.025934507210e+00 5.897488812202e-01 1.278687168889e+00 1.183361887161e+00 1.742235986274e+00 1.479043837951e+00 5.372001952722e-03 5.448116358910e-03 7.780400131748e-02 6.761124818218e-04 1.000000000000e-03 1.108165352215e+00 5.723294249028e-01 1.239337071444e+00 1.247233505988e+00 1.758279782945e+00 1.144744203412e+00 2.802043404239e-03 3.671619470821e-03 6.387156792972e-02 8.735576009200e-04 1.000000000000e-03 -1.214052568014e+00 5.608662615668e-01 1.214052568014e+00 1.337346103768e+00 1.806216553785e+00 6.791641429449e-01 6.386989975039e-04 1.410628794538e-03 3.958996498185e-02 1.472398109335e-03 1.000000000000e-03 +1.214052568014e+00 5.608662615668e-01 1.214052568014e+00 1.337346103768e+00 1.806216553785e+00 6.791641429449e-01 6.386989975039e-04 1.410628794538e-03 3.958996498186e-02 1.472398109335e-03 1.000000000000e-03 6.543810294358e-02 8.558616643000e-01 1.601280409531e+00 8.583596762053e-01 1.816832486413e+00 5.355668834531e-01 2.134241820419e-03 5.977521817608e-03 8.149656991833e-02 1.867180423017e-03 1.000000000000e-03 1.949966110315e-01 8.494963814940e-01 1.587759557766e+00 8.715892269212e-01 1.811255971353e+00 5.655938521239e-01 2.310970112305e-03 6.128877029764e-03 8.252189628459e-02 1.768053164377e-03 1.000000000000e-03 3.205856847968e-01 8.373278875865e-01 1.562045660895e+00 8.966008993006e-01 1.801077405152e+00 6.297049527655e-01 2.627017794599e-03 6.257734951254e-03 8.338488373037e-02 1.588045314886e-03 1.000000000000e-03 @@ -1667,7 +1667,7 @@ 9.254486437728e-01 7.055774653037e-01 1.294643329114e+00 1.163741703217e+00 1.740803291996e+00 1.532660046737e+00 6.008521988247e-03 5.880484065306e-03 8.083236470421e-02 6.524604083787e-04 1.000000000000e-03 1.006517982826e+00 6.847713183369e-01 1.254854971374e+00 1.217370201775e+00 1.748328117760e+00 1.374574734162e+00 4.286414628282e-03 4.677535373398e-03 7.209203510789e-02 7.274977308597e-04 1.000000000000e-03 1.093410852323e+00 6.680440732049e-01 1.223509073280e+00 1.281339211810e+00 1.771667188870e+00 1.001630601892e+00 1.834343250417e-03 2.747035554254e-03 5.524727800488e-02 9.983720526423e-04 1.000000000000e-03 -1.204939320086e+00 6.579451172730e-01 1.204939320086e+00 1.372869455714e+00 1.826649749548e+00 6.174631320618e-01 4.584291786793e-04 1.113659637820e-03 3.517669111184e-02 1.619529892677e-03 1.000000000000e-03 +1.204939320086e+00 6.579451172730e-01 1.204939320086e+00 1.372869455714e+00 1.826649749548e+00 6.174631320618e-01 4.584291786794e-04 1.113659637820e-03 3.517669111184e-02 1.619529892677e-03 1.000000000000e-03 6.226367886473e-02 9.411571745653e-01 1.511747493122e+00 9.432144999636e-01 1.781862530024e+00 7.547646008263e-01 3.103112203385e-03 6.167046387685e-03 8.277846195777e-02 1.324916402949e-03 1.000000000000e-03 1.857099051805e-01 9.351533819682e-01 1.501128392218e+00 9.534149236763e-01 1.778310002955e+00 7.912542586118e-01 3.350186071698e-03 6.351029460951e-03 8.400416299837e-02 1.263816262745e-03 1.000000000000e-03 3.059345046369e-01 9.236158899365e-01 1.480816504718e+00 9.729656896678e-01 1.771857712661e+00 8.660427328443e-01 3.766405165215e-03 6.523474574133e-03 8.513697834884e-02 1.154677433428e-03 1.000000000000e-03 @@ -1687,7 +1687,7 @@ 5.096311092160e-01 9.683771682937e-01 1.356991453066e+00 1.094293474144e+00 1.743245252753e+00 1.371965396800e+00 5.949600532187e-03 6.504829363112e-03 8.501522323229e-02 7.288813568711e-04 1.000000000000e-03 6.103642834997e-01 9.475341739796e-01 1.326490652259e+00 1.127104950495e+00 1.740673151388e+00 1.483823192264e+00 6.232062452178e-03 6.300005099665e-03 8.366603651599e-02 6.739347418299e-04 1.000000000000e-03 7.055774653037e-01 9.254486437728e-01 1.294643329114e+00 1.163741703217e+00 1.740803291996e+00 1.532660046737e+00 6.008521988247e-03 5.880484065306e-03 8.083236470421e-02 6.524604083787e-04 1.000000000000e-03 -7.960401650370e-01 9.035920146539e-01 1.263696685220e+00 1.204225258537e+00 1.745590955962e+00 1.457388900449e+00 4.971092826365e-03 5.116437511804e-03 7.539847855674e-02 6.861586496862e-04 1.000000000000e-03 +7.960401650370e-01 9.035920146539e-01 1.263696685220e+00 1.204225258537e+00 1.745590955962e+00 1.457388900449e+00 4.971092826364e-03 5.116437511804e-03 7.539847855674e-02 6.861586496862e-04 1.000000000000e-03 8.838190581457e-01 8.838190581457e-01 1.236173654298e+00 1.249908898714e+00 1.757952661099e+00 1.252559973522e+00 3.161155211164e-03 3.785633356471e-03 6.485568043717e-02 7.983649654619e-04 1.000000000000e-03 9.731243314145e-01 8.681250339553e-01 1.214611559462e+00 1.304075166151e+00 1.782103610722e+00 9.907738747659e-01 1.502494191589e-03 2.274728214766e-03 5.027400714271e-02 1.009312039275e-03 1.000000000000e-03 1.071761708362e+00 8.578749342770e-01 1.200619956825e+00 1.372815560216e+00 1.823762825341e+00 7.403215299386e-01 5.999412428887e-04 1.215568949356e-03 3.675094782385e-02 1.350764444312e-03 1.000000000000e-03 @@ -1704,7 +1704,7 @@ 9.624888800652e-01 9.624888800652e-01 1.202013475611e+00 1.361164827822e+00 1.815931189238e+00 8.071049583994e-01 7.256082793627e-04 1.348538882976e-03 3.870886896616e-02 1.238996229168e-03 1.000000000000e-03 1.066257919723e+00 9.565290788272e-01 1.194973549164e+00 1.432429345558e+00 1.865426389117e+00 6.464506273144e-01 3.944837525842e-04 9.153454322327e-04 3.189122889226e-02 1.546908546062e-03 1.000000000000e-03 1.192167331410e+00 9.541757636728e-01 1.192167331410e+00 1.526995197786e+00 1.937260251010e+00 4.860155096566e-01 2.629922746421e-04 8.116786483663e-04 3.003106999179e-02 2.057547506471e-03 1.000000000000e-03 -5.430564311828e-02 1.162172677002e+00 1.298330300283e+00 1.163440773759e+00 1.743346208496e+00 1.379840548527e+00 4.765118926291e-03 5.180075623279e-03 7.586593162561e-02 7.247214187666e-04 1.000000000000e-03 +5.430564311828e-02 1.162172677002e+00 1.298330300283e+00 1.163440773759e+00 1.743346208496e+00 1.379840548527e+00 4.765118926291e-03 5.180075623280e-03 7.586593162561e-02 7.247214187666e-04 1.000000000000e-03 1.624007249792e-01 1.157889545021e+00 1.293543981943e+00 1.169222901735e+00 1.743656568010e+00 1.375266716499e+00 4.721061920970e-03 5.149250539184e-03 7.563986705423e-02 7.271316814424e-04 1.000000000000e-03 2.689395732064e-01 1.149543289754e+00 1.284312852455e+00 1.180583867862e+00 1.744487825133e+00 1.364033383743e+00 4.609265375184e-03 5.068716165730e-03 7.504603154605e-02 7.331198868870e-04 1.000000000000e-03 3.730423835197e-01 1.137731754167e+00 1.271371561724e+00 1.197327926819e+00 1.746419139927e+00 1.331142874546e+00 4.288473731024e-03 4.832471945381e-03 7.327628042310e-02 7.512341606014e-04 1.000000000000e-03 From 215ce88ba98561ee665acdd3f291da55c5c4a8f5 Mon Sep 17 00:00:00 2001 From: Jacob Moore Date: Wed, 28 Aug 2024 13:12:54 -0500 Subject: [PATCH 166/233] ENH: Restructuring common to seperate .cpp from .h --- single-node-refactor/src/CMakeLists.txt | 7 +- .../src/common/CMakeLists.txt | 26 + .../{ => include}/boundary_conditions.h | 0 .../common/{ => include}/dynamic_options.h | 0 .../src/common/{ => include}/geometry_new.h | 0 .../common/{ => include}/initial_conditions.h | 0 .../src/common/{ => include}/material.h | 0 .../src/common/{ => include}/mesh.h | 0 .../src/common/{ => include}/mesh_inputs.h | 0 .../src/common/{ => include}/mesh_io.h | 0 .../src/common/{ => include}/output_options.h | 0 .../src/common/{ => include}/ref_elem.h | 0 .../src/common/{ => include}/ref_surf_elem.h | 0 .../src/common/{ => include}/region.h | 0 .../src/common/{ => include}/region_fill.h | 0 .../{ => include}/simulation_parameters.h | 0 .../src/common/{ => include}/solver_inputs.h | 0 .../src/common/{ => include}/state.h | 0 .../src/common/{ => include}/string_utils.h | 0 single-node-refactor/src/common/mesh_old.h | 965 ------------------ .../src/common/simulation_state.h | 57 -- .../src/common/{ => src}/region_fill.cpp | 0 22 files changed, 30 insertions(+), 1025 deletions(-) create mode 100644 single-node-refactor/src/common/CMakeLists.txt rename single-node-refactor/src/common/{ => include}/boundary_conditions.h (100%) rename single-node-refactor/src/common/{ => include}/dynamic_options.h (100%) rename single-node-refactor/src/common/{ => include}/geometry_new.h (100%) rename single-node-refactor/src/common/{ => include}/initial_conditions.h (100%) rename single-node-refactor/src/common/{ => include}/material.h (100%) rename single-node-refactor/src/common/{ => include}/mesh.h (100%) rename single-node-refactor/src/common/{ => include}/mesh_inputs.h (100%) rename single-node-refactor/src/common/{ => include}/mesh_io.h (100%) rename single-node-refactor/src/common/{ => include}/output_options.h (100%) rename single-node-refactor/src/common/{ => include}/ref_elem.h (100%) rename single-node-refactor/src/common/{ => include}/ref_surf_elem.h (100%) rename single-node-refactor/src/common/{ => include}/region.h (100%) rename single-node-refactor/src/common/{ => include}/region_fill.h (100%) rename single-node-refactor/src/common/{ => include}/simulation_parameters.h (100%) rename single-node-refactor/src/common/{ => include}/solver_inputs.h (100%) rename single-node-refactor/src/common/{ => include}/state.h (100%) rename single-node-refactor/src/common/{ => include}/string_utils.h (100%) delete mode 100644 single-node-refactor/src/common/mesh_old.h delete mode 100644 single-node-refactor/src/common/simulation_state.h rename single-node-refactor/src/common/{ => src}/region_fill.cpp (100%) diff --git a/single-node-refactor/src/CMakeLists.txt b/single-node-refactor/src/CMakeLists.txt index ba1ba8063..24d9d7c41 100755 --- a/single-node-refactor/src/CMakeLists.txt +++ b/single-node-refactor/src/CMakeLists.txt @@ -57,8 +57,9 @@ elseif (THREADS) add_definitions(-DHAVE_THREADS=1) endif() -include_directories(common) -# add_subdirectory(Solvers/SGH_solver) +# Add common files +include_directories(common/include) +add_subdirectory(common) # Add SGH Solver include_directories(Solvers/SGH_solver_3D/include) @@ -68,5 +69,5 @@ add_subdirectory(Solvers/SGH_solver_3D) include_directories(Solvers/SGH_solver_rz/include) add_subdirectory(Solvers/SGH_solver_rz) -add_executable(Fierro main.cpp driver.cpp solver.cpp common/region_fill.cpp ${YAML_SRC_Files} ${SGH_3D_SRC_Files} ${SGH_RZ_SRC_Files}) +add_executable(Fierro main.cpp driver.cpp solver.cpp ${COMMON_Files} ${YAML_SRC_Files} ${SGH_3D_SRC_Files} ${SGH_RZ_SRC_Files}) target_link_libraries(Fierro PRIVATE matar Kokkos::kokkos) diff --git a/single-node-refactor/src/common/CMakeLists.txt b/single-node-refactor/src/common/CMakeLists.txt new file mode 100644 index 000000000..be51952df --- /dev/null +++ b/single-node-refactor/src/common/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.1.3) + +find_package(Matar REQUIRED) +find_package(Kokkos REQUIRED) + +add_definitions(-DHAVE_KOKKOS=1) + +if (CUDA) + add_definitions(-DHAVE_CUDA=1) +elseif (HIP) + add_definitions(-DHAVE_HIP=1) +elseif (OPENMP) + add_definitions(-DHAVE_OPENMP=1) +elseif (THREADS) + add_definitions(-DHAVE_THREADS=1) +endif() + +include_directories(include) +include_directories(src) + +message("\n ****** ADDING COMMON SOURCE FILES ******** \n ") + +set(COMMON_Files +${CMAKE_CURRENT_SOURCE_DIR}/src/region_fill.cpp +PARENT_SCOPE +) \ No newline at end of file diff --git a/single-node-refactor/src/common/boundary_conditions.h b/single-node-refactor/src/common/include/boundary_conditions.h similarity index 100% rename from single-node-refactor/src/common/boundary_conditions.h rename to single-node-refactor/src/common/include/boundary_conditions.h diff --git a/single-node-refactor/src/common/dynamic_options.h b/single-node-refactor/src/common/include/dynamic_options.h similarity index 100% rename from single-node-refactor/src/common/dynamic_options.h rename to single-node-refactor/src/common/include/dynamic_options.h diff --git a/single-node-refactor/src/common/geometry_new.h b/single-node-refactor/src/common/include/geometry_new.h similarity index 100% rename from single-node-refactor/src/common/geometry_new.h rename to single-node-refactor/src/common/include/geometry_new.h diff --git a/single-node-refactor/src/common/initial_conditions.h b/single-node-refactor/src/common/include/initial_conditions.h similarity index 100% rename from single-node-refactor/src/common/initial_conditions.h rename to single-node-refactor/src/common/include/initial_conditions.h diff --git a/single-node-refactor/src/common/material.h b/single-node-refactor/src/common/include/material.h similarity index 100% rename from single-node-refactor/src/common/material.h rename to single-node-refactor/src/common/include/material.h diff --git a/single-node-refactor/src/common/mesh.h b/single-node-refactor/src/common/include/mesh.h similarity index 100% rename from single-node-refactor/src/common/mesh.h rename to single-node-refactor/src/common/include/mesh.h diff --git a/single-node-refactor/src/common/mesh_inputs.h b/single-node-refactor/src/common/include/mesh_inputs.h similarity index 100% rename from single-node-refactor/src/common/mesh_inputs.h rename to single-node-refactor/src/common/include/mesh_inputs.h diff --git a/single-node-refactor/src/common/mesh_io.h b/single-node-refactor/src/common/include/mesh_io.h similarity index 100% rename from single-node-refactor/src/common/mesh_io.h rename to single-node-refactor/src/common/include/mesh_io.h diff --git a/single-node-refactor/src/common/output_options.h b/single-node-refactor/src/common/include/output_options.h similarity index 100% rename from single-node-refactor/src/common/output_options.h rename to single-node-refactor/src/common/include/output_options.h diff --git a/single-node-refactor/src/common/ref_elem.h b/single-node-refactor/src/common/include/ref_elem.h similarity index 100% rename from single-node-refactor/src/common/ref_elem.h rename to single-node-refactor/src/common/include/ref_elem.h diff --git a/single-node-refactor/src/common/ref_surf_elem.h b/single-node-refactor/src/common/include/ref_surf_elem.h similarity index 100% rename from single-node-refactor/src/common/ref_surf_elem.h rename to single-node-refactor/src/common/include/ref_surf_elem.h diff --git a/single-node-refactor/src/common/region.h b/single-node-refactor/src/common/include/region.h similarity index 100% rename from single-node-refactor/src/common/region.h rename to single-node-refactor/src/common/include/region.h diff --git a/single-node-refactor/src/common/region_fill.h b/single-node-refactor/src/common/include/region_fill.h similarity index 100% rename from single-node-refactor/src/common/region_fill.h rename to single-node-refactor/src/common/include/region_fill.h diff --git a/single-node-refactor/src/common/simulation_parameters.h b/single-node-refactor/src/common/include/simulation_parameters.h similarity index 100% rename from single-node-refactor/src/common/simulation_parameters.h rename to single-node-refactor/src/common/include/simulation_parameters.h diff --git a/single-node-refactor/src/common/solver_inputs.h b/single-node-refactor/src/common/include/solver_inputs.h similarity index 100% rename from single-node-refactor/src/common/solver_inputs.h rename to single-node-refactor/src/common/include/solver_inputs.h diff --git a/single-node-refactor/src/common/state.h b/single-node-refactor/src/common/include/state.h similarity index 100% rename from single-node-refactor/src/common/state.h rename to single-node-refactor/src/common/include/state.h diff --git a/single-node-refactor/src/common/string_utils.h b/single-node-refactor/src/common/include/string_utils.h similarity index 100% rename from single-node-refactor/src/common/string_utils.h rename to single-node-refactor/src/common/include/string_utils.h diff --git a/single-node-refactor/src/common/mesh_old.h b/single-node-refactor/src/common/mesh_old.h deleted file mode 100644 index bd6bc386a..000000000 --- a/single-node-refactor/src/common/mesh_old.h +++ /dev/null @@ -1,965 +0,0 @@ -/********************************************************************************************** -� 2020. Triad National Security, LLC. All rights reserved. -This program was produced under U.S. Government contract 89233218CNA000001 for Los Alamos -National Laboratory (LANL), which is operated by Triad National Security, LLC for the U.S. -Department of Energy/National Nuclear Security Administration. All rights in the program are -reserved by Triad National Security, LLC, and the U.S. Department of Energy/National Nuclear -Security Administration. The Government is granted for itself and others acting on its behalf a -nonexclusive, paid-up, irrevocable worldwide license in this material to reproduce, prepare -derivative works, distribute copies to the public, perform publicly and display publicly, and -to permit others to do so. -This program is open source under the BSD-3 License. -Redistribution and use in source and binary forms, with or without modification, are permitted -provided that the following conditions are met: -1. Redistributions of source code must retain the above copyright notice, this list of -conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright notice, this list of -conditions and the following disclaimer in the documentation and/or other materials -provided with the distribution. -3. Neither the name of the copyright holder nor the names of its contributors may be used -to endorse or promote products derived from this software without specific prior -written permission. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS -IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; -OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, -WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR -OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF -ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -**********************************************************************************************/ -#ifndef MESH_H -#define MESH_H - -#include "matar.h" -#include "state.h" - -#define PI 3.141592653589793 - -struct boundary_condition_t; - -using namespace mtr; - -/* -========================== -Nodal indexing convention -========================== - - K - ^ J - | / - | / - | / - 7------------------6 - /| /| - / | / | - / | / | - / | / | - / | / | -4------------------5 | -| | | | ----> I -| | | | -| | | | -| | | | -| 3------------|-----2 -| / | / -| / | / -| / | / -| / | / -|/ |/ -0------------------1 - -nodes are ordered for outward normal -patch 0: [0,4,7,3] xi-minus dir -patch 1: [1,2,6,5] xi-plus dir -patch 2: [0,1,5,4] eta-minus dir -patch 3: [2,3,7,6] eta-plus dir -patch 4: [0,3,2,1] zeta-minus dir -patch 6: [4,5,6,7] zeta-plus dir - -*/ - -// sort in ascending order using bubble sort -KOKKOS_INLINE_FUNCTION -void bubble_sort(size_t arr[], const size_t num) -{ - for (size_t i = 0; i < (num - 1); i++) { - for (size_t j = 0; j < (num - i - 1); j++) { - if (arr[j] > arr[j + 1]) { - size_t temp = arr[j]; - arr[j] = arr[j + 1]; - arr[j + 1] = temp; - } // end if - } // end for j - } // end for i -} // end function - -// mesh sizes and connectivity data structures -struct Mesh_t -{ - size_t num_dims; - - size_t num_nodes; - - size_t num_elems; - size_t num_nodes_in_elem; - size_t num_patches_in_elem; - size_t num_surfs_in_elem; - size_t num_patches_in_surf; // high-order mesh class - - size_t num_corners; - - size_t num_patches; - size_t num_surfs; // high_order mesh class - - size_t num_bdy_patches; - size_t num_bdy_nodes; - size_t num_bdy_sets; - size_t num_nodes_in_patch; - - // ---- nodes ---- - - // corner ids in node - RaggedRightArrayKokkos corners_in_node; - CArrayKokkos num_corners_in_node; - - // elem ids in node - RaggedRightArrayKokkos elems_in_node; - - // node ids in node - RaggedRightArrayKokkos nodes_in_node; - CArrayKokkos num_nodes_in_node; - - // ---- elems ---- - - // node ids in elem - DCArrayKokkos nodes_in_elem; - - // corner ids in elem - CArrayKokkos corners_in_elem; - - // elem ids in elem - RaggedRightArrayKokkos elems_in_elem; - CArrayKokkos num_elems_in_elem; - - // patch ids in elem - CArrayKokkos patches_in_elem; - - // surface ids in elem - CArrayKokkos surfs_in_elem; // high-order mesh class - - // surface ids in elem - CArrayKokkos zones_in_elem; // high-order mesh class - - // ---- patches / surfaces ---- - - // node ids in a patch - CArrayKokkos nodes_in_patch; - - // element ids in a patch - CArrayKokkos elems_in_patch; - - // the two element ids sharing a surface - CArrayKokkos elems_in_surf; - - // patch ids in a surface - CArrayKokkos patches_in_surf; // high-order mesh class - - CArrayKokkos surf_in_patch; // high-order mesh class - - // ---- bdy ---- - - // bdy_patches - CArrayKokkos bdy_patches; - - // bdy nodes - CArrayKokkos bdy_nodes; - - // patch ids in bdy set - DynamicRaggedRightArrayKokkos bdy_patches_in_set; - - // node ids in bdy_patch set - RaggedRightArrayKokkos bdy_nodes_in_set; - DCArrayKokkos num_bdy_nodes_in_set; - - // initialization methods - void initialize_nodes(const size_t num_nodes_inp) - { - num_nodes = num_nodes_inp; - - return; - }; // end method - - // initialization methods - void initialize_elems(const size_t num_elems_inp, const size_t num_dims_inp) - { - num_dims = num_dims_inp; - num_nodes_in_elem = 1; - for (int dim = 0; dim < num_dims; dim++) { - num_nodes_in_elem *= 2; - } - num_elems = num_elems_inp; - nodes_in_elem = DCArrayKokkos(num_elems, num_nodes_in_elem, "mesh.nodes_in_elem"); - corners_in_elem = CArrayKokkos(num_elems, num_nodes_in_elem, "mesh.corners_in_elem"); - - return; - }; // end method - - // initialization methods - void initialize_corners(const size_t num_corners_inp) - { - num_corners = num_corners_inp; - - return; - }; // end method - - // build the corner mesh connectivity arrays - void build_corner_connectivity() - { - num_corners_in_node = CArrayKokkos(num_nodes, "mesh.num_corners_in_node"); // stride sizes - - // initializing the number of corners (node-cell pair) to be zero - FOR_ALL_CLASS(node_gid, 0, num_nodes, { - num_corners_in_node(node_gid) = 0; - }); - - for (size_t elem_gid = 0; elem_gid < num_elems; elem_gid++) { - FOR_ALL_CLASS(node_lid, 0, num_nodes_in_elem, { - // get the global_id of the node - size_t node_gid = nodes_in_elem(elem_gid, node_lid); - - // increment the number of corners attached to this point - num_corners_in_node(node_gid) = num_corners_in_node(node_gid) + 1; - }); // end FOR_ALL over nodes in element - } // end for elem_gid - - // the stride sizes are the num_corners_in_node at the node - corners_in_node = RaggedRightArrayKokkos(num_corners_in_node, "mesh.corners_in_node"); - - CArrayKokkos count_saved_corners_in_node(num_nodes, "count_saved_corners_in_node"); - - // reset num_corners to zero - FOR_ALL_CLASS(node_gid, 0, num_nodes, { - count_saved_corners_in_node(node_gid) = 0; - }); - - // he elems_in_elem data type - elems_in_node = RaggedRightArrayKokkos(num_corners_in_node, "mesh.elems_in_node"); - - // populate the elems connected to a node list and corners in a node - for (size_t elem_gid = 0; elem_gid < num_elems; elem_gid++) { - FOR_ALL_CLASS(node_lid, 0, num_nodes_in_elem, { - // get the global_id of the node - size_t node_gid = nodes_in_elem(elem_gid, node_lid); - - // the column index is the num corners saved - size_t j = count_saved_corners_in_node(node_gid); - - // Save corner index to this node_gid - size_t corner_gid = node_lid + elem_gid * num_nodes_in_elem; - corners_in_node(node_gid, j) = corner_gid; - - elems_in_node(node_gid, j) = elem_gid; // save the elem_gid - - // Save corner index to element - size_t corner_lid = node_lid; - corners_in_elem(elem_gid, corner_lid) = corner_gid; - - // increment the number of corners saved to this node_gid - count_saved_corners_in_node(node_gid) = count_saved_corners_in_node(node_gid) + 1; - }); // end FOR_ALL over nodes in element - } // end for elem_gid - - return; - } // end of build_corner_connectivity - - // build elem connectivity arrays - void build_elem_elem_connectivity() - { - // find the max number of elems around a node - size_t max_num_elems_in_node; - size_t max_num_lcl; - REDUCE_MAX_CLASS(node_gid, 0, num_nodes, max_num_lcl, { - // num_corners_in_node = num_elems_in_node - size_t max_num = num_corners_in_node(node_gid); - - if (max_num > max_num_lcl) { - max_num_lcl = max_num; - } - }, max_num_elems_in_node); // end parallel reduction on max - Kokkos::fence(); - - // a temporary ragged array to save the elems around an elem - DynamicRaggedRightArrayKokkos temp_elems_in_elem(num_nodes, num_nodes_in_elem * max_num_elems_in_node, "temp_elems_in_elem"); - - num_elems_in_elem = CArrayKokkos(num_elems, "mesh.num_elems_in_elem"); - FOR_ALL_CLASS(elem_gid, 0, num_elems, { - num_elems_in_elem(elem_gid) = 0; - }); - Kokkos::fence(); - - // find and save neighboring elem_gids of an elem - FOR_ALL_CLASS(elem_gid, 0, num_elems, { - for (int node_lid = 0; node_lid < num_nodes_in_elem; node_lid++) { - // get the gid for the node - size_t node_id = nodes_in_elem(elem_gid, node_lid); - - // loop over all elems connected to node_gid - for (int elem_lid = 0; elem_lid < num_corners_in_node(node_id); elem_lid++) { - // get the global id for the neighboring elem - size_t neighbor_elem_gid = elems_in_node(node_id, elem_lid); - - // a flag to save (=1) or not (=0) - size_t save = 1; - - // a true neighbor_elem_id is not equal to elem_gid - if (neighbor_elem_gid == elem_gid) { - save = 0; // don't save - } // end if - - // check to see if the neighbor_elem_gid has been saved already - size_t num_saved = temp_elems_in_elem.stride(elem_gid); - for (size_t i = 0; i < num_saved; i++) { - if (neighbor_elem_gid == temp_elems_in_elem(elem_gid, i)) { - save = 0; // don't save, it has been saved already - } // end if - } // end for i - - if (save == 1) { - // increment the number of neighboring elements saved - temp_elems_in_elem.stride(elem_gid)++; - - // save the neighboring elem_gid - temp_elems_in_elem(elem_gid, num_saved) = neighbor_elem_gid; - } // end if save - } // end for elem_lid in a node - } // end for node_lid in an elem - - // save the actial stride size - num_elems_in_elem(elem_gid) = temp_elems_in_elem.stride(elem_gid); - }); // end FOR_ALL elems - Kokkos::fence(); - - // compress out the extra space in the temp_elems_in_elem - elems_in_elem = RaggedRightArrayKokkos(num_elems_in_elem, "mesh.elems_in_elem"); - - FOR_ALL_CLASS(elem_gid, 0, num_elems, { - for (size_t i = 0; i < num_elems_in_elem(elem_gid); i++) { - elems_in_elem(elem_gid, i) = temp_elems_in_elem(elem_gid, i); - } // end for i - }); // end FOR_ALL elems - Kokkos::fence(); - - return; - } // end of build_elem_elem_connectivity - - // build the patches - void build_patch_connectivity() - { - size_t high_order = 0; - - // building patches - DViewCArrayKokkos node_ordering_in_elem; // node lids in a patch - - num_nodes_in_patch = 2 * (num_dims - 1); // 2 (2D) or 4 (3D) - num_patches_in_elem = 2 * num_dims; // 4 (2D) or 6 (3D) - - size_t node_lids_in_patch_in_elem[24]; - - if (num_dims == 3) { - size_t temp_node_lids[24] = { 0, 4, 7, 3, - 1, 2, 6, 5, - 0, 1, 5, 4, - 2, 3, 7, 6, - 0, 3, 2, 1, - 4, 5, 6, 7 }; - - for (size_t i = 0; i < 24; i++) { - node_lids_in_patch_in_elem[i] = temp_node_lids[i]; - } // end for i - } - else{ - // J - // | - // 3---2 - // | | -- I - // 0---1 - // - size_t temp_node_lids[8] = - { 0, 3, - 1, 2, - 0, 1, - 3, 2 }; - - for (size_t i = 0; i < 8; i++) { - node_lids_in_patch_in_elem[i] = temp_node_lids[i]; - } // end for i - } // end if on dims - - node_ordering_in_elem = DViewCArrayKokkos(&node_lids_in_patch_in_elem[0], num_patches_in_elem, num_nodes_in_patch); - - // for saviong the hash keys of the patches and then the nighboring elem_gid - CArrayKokkos hash_keys_in_elem(num_elems, num_patches_in_elem, num_nodes_in_patch, "hash_keys_in_elem"); // always 4 ids in 3D - - // for saving the adjacient patch_lid, which is the slide_lid - // CArrayKokkos neighboring_side_lids (num_elems, num_patches_in_elem); - - // allocate memory for the patches in the elem - patches_in_elem = CArrayKokkos(num_elems, num_patches_in_elem, "mesh.patches_in_elem"); - - // a temporary storaage for the patch_gids that are on the mesh boundary - CArrayKokkos temp_bdy_patches(num_elems * num_patches_in_elem, "temp_bdy_patches"); - - // step 1) calculate the hash values for each patch in the element - FOR_ALL_CLASS(elem_gid, 0, num_elems, { - for (size_t patch_lid = 0; patch_lid < num_patches_in_elem; patch_lid++) { - size_t sorted_patch_nodes[4]; // note: cannot be allocated with num_nodes_in_patch - - // first save the patch nodes - for (size_t patch_node_lid = 0; patch_node_lid < num_nodes_in_patch; patch_node_lid++) { - // get the local node index of the element for this patch and node in patch - size_t node_lid = node_ordering_in_elem(patch_lid, patch_node_lid); - - // get and save the global index of the node - sorted_patch_nodes[patch_node_lid] = nodes_in_elem(elem_gid, node_lid); - } // end for node_lid - - // sort nodes from smallest to largest - bubble_sort(sorted_patch_nodes, num_nodes_in_patch); - - // save hash_keys in the this elem - for (size_t key_lid = 0; key_lid < num_nodes_in_patch; key_lid++) { - hash_keys_in_elem(elem_gid, patch_lid, key_lid) = sorted_patch_nodes[key_lid]; // 4 node values are keys - } // for - } // end for patch_lid - }); // end FOR_ALL elem_gid - - DCArrayKokkos num_values(2); - - // 8x8x8 mesh - // num_patches = 8*8*9*3 = 1728 - // bdy_patches = 8*8*6 = 384 - // - - // step 2: walk around the elements and save the elem pairs that have the same hash_key - RUN_CLASS({ - // serial execution on GPU - - size_t patch_gid = 0; - size_t bdy_patch_gid = 0; - - for (size_t elem_gid = 0; elem_gid < num_elems; elem_gid++) { - // loop over the patches in this elem - for (size_t patch_lid = 0; patch_lid < num_patches_in_elem; patch_lid++) { - size_t exit = 0; - - // negative values mean the patch has not been saved - if (hash_keys_in_elem(elem_gid, patch_lid, 0) >= 0) { - // find the nighboring patch with the same hash_key - - for (size_t neighbor_elem_lid = 0; neighbor_elem_lid < num_elems_in_elem(elem_gid); neighbor_elem_lid++) { - // get the neighboring element global index - size_t neighbor_elem_gid = elems_in_elem(elem_gid, neighbor_elem_lid); - - for (size_t neighbor_patch_lid = 0; neighbor_patch_lid < num_patches_in_elem; neighbor_patch_lid++) { - size_t save_it = 0; - for (size_t key_lid = 0; key_lid < num_nodes_in_patch; key_lid++) { - if (hash_keys_in_elem(neighbor_elem_gid, neighbor_patch_lid, key_lid) == hash_keys_in_elem(elem_gid, patch_lid, key_lid)) { - save_it++; // if save_it == num_nodes after this loop, then it is a match - } - } // end key loop - - // this hash is from the nodes on the patch - if (save_it == num_nodes_in_patch) { - // make it negative, because we saved it - hash_keys_in_elem(elem_gid, patch_lid, 0) = -1; - hash_keys_in_elem(neighbor_elem_gid, neighbor_patch_lid, 0) = -1; - - // save the patch_lids for the adjacient sides - // neighboring_side_lids(elem_gid, patch_lid) = neighbor_patch_lid; - // neighboring_side_lids(neighbor_elem_gid, neighbor_patch_lid) = patch_lid; - - // save the patch_gid - patches_in_elem(elem_gid, patch_lid) = patch_gid; - patches_in_elem(neighbor_elem_gid, neighbor_patch_lid) = patch_gid; - - patch_gid++; - - exit = 1; - break; - } // end if - } // end for loop over a neighbors patch set - - if (exit == 1) { - break; - } - } // end for loop over elem neighbors - } // end if hash<0 - } // end for patch_lid - - // loop over the patches in this element again - // remaining postive hash key values are the boundary patches - for (size_t patch_lid = 0; patch_lid < num_patches_in_elem; patch_lid++) { - if (hash_keys_in_elem(elem_gid, patch_lid, 0) >= 0) { - hash_keys_in_elem(elem_gid, patch_lid, 0) = -1; // make it negative, because we saved it - - // neighboring_side_lids(elem_gid, patch_lid) = patch_lid; - - patches_in_elem(elem_gid, patch_lid) = patch_gid; - temp_bdy_patches(bdy_patch_gid) = patch_gid; - - patch_gid++; - bdy_patch_gid++; - } // end if - } // end for over patch_lid - } // end for over elem_gid - - // the num_values is because the values passed in are const, so a const pointer is needed - num_values(0) = patch_gid; // num_patches = patch_gid; - num_values(1) = bdy_patch_gid; // num_bdy_patches = bdy_patch_gid; - }); // end RUN - Kokkos::fence(); - - num_values.update_host(); - Kokkos::fence(); - - num_patches = num_values.host(0); - num_bdy_patches = num_values.host(1); - - // size_t mesh_1D = 60; - // size_t exact_num_patches = (mesh_1D*mesh_1D)*(mesh_1D+1)*3; - // size_t exact_num_bdy_patches = (mesh_1D*mesh_1D)*6; - // printf("num_patches = %lu, exact = %lu \n", num_patches, exact_num_patches); - // printf("num_bdy_patches = %lu exact = %lu \n", num_bdy_patches, exact_num_bdy_patches); - printf("Num patches = %lu \n", num_patches); - printf("Num boundary patches = %lu \n", num_bdy_patches); - - elems_in_patch = CArrayKokkos(num_patches, 2, "mesh.elems_in_patch"); - nodes_in_patch = CArrayKokkos(num_patches, num_nodes_in_patch, "mesh.nodes_in_patch"); - - // a temporary variable to help populate patch structures - CArrayKokkos num_elems_in_patch_saved(num_patches, "num_elems_in_patch_saved"); - - // initialize the number of elems in a patch saved to zero - FOR_ALL_CLASS(patch_gid, 0, num_patches, { - num_elems_in_patch_saved(patch_gid) = 0; - }); - - for (size_t elem_gid = 0; elem_gid < num_elems; elem_gid++) { - FOR_ALL_CLASS(patch_lid, 0, num_patches_in_elem, { - size_t patch_gid = patches_in_elem(elem_gid, patch_lid); - - size_t num_saved = num_elems_in_patch_saved(patch_gid); - - elems_in_patch(patch_gid, num_saved) = elem_gid; - - // record that an elem_gid was saved - num_elems_in_patch_saved(patch_gid)++; - - // save the nodes on this patch - for (size_t patch_node_lid = 0; patch_node_lid < num_nodes_in_patch; patch_node_lid++) { - // get the local node index of the element for this patch and node in patch - size_t node_lid = node_ordering_in_elem(patch_lid, patch_node_lid); - - // get and save the global index of the node - nodes_in_patch(patch_gid, patch_node_lid) = nodes_in_elem(elem_gid, node_lid); - } // end for node_lid - }); // end FOR_ALL patch_lid - } // end for - - // Surfaces and patches in surface - if (high_order == 1) { - num_surfs_in_elem = 2 * num_dims; // 4 (2D) or 6 (3D) - num_patches_in_surf = 1; // =Pn_order, must update for high-order mesh class - - // allocate memory for the surfaces in the elem - surfs_in_elem = CArrayKokkos(num_elems, num_surfs_in_elem, "mesh.surfs_in_elem"); - - // allocate memory for surface data structures - num_surfs = num_patches / num_patches_in_surf; - - patches_in_surf = CArrayKokkos(num_surfs, num_patches_in_surf, "mesh.patches_in_surf"); - elems_in_surf = CArrayKokkos(num_surfs, 2, "mesh.elems_in_surf"); - surf_in_patch = CArrayKokkos(num_patches, "mesh.surf_in_patch"); - - FOR_ALL_CLASS(surf_gid, 0, num_surfs, { - // loop over the patches in this surface - for (size_t patch_lid = 0; patch_lid < num_patches_in_surf; patch_lid++) { - // get patch_gid - size_t patch_gid = patch_lid + surf_gid * num_patches_in_surf; - - // save the patch_gids - patches_in_surf(surf_gid, patch_lid) = patch_gid; - - // save the surface this patch belongs to - surf_in_patch(patch_gid) = surf_gid; - } // end for - - // get first patch in the surface, and populate elem surface structures - size_t this_patch_gid = surf_gid * num_patches_in_surf; - - elems_in_surf(surf_gid, 0) = elems_in_patch(this_patch_gid, 0); // elem_gid0 - elems_in_surf(surf_gid, 1) = elems_in_patch(this_patch_gid, 1); // elem_gid1 - }); // end FOR_ALL over surfaces - - // save surfaces in elem - FOR_ALL_CLASS(elem_gid, 0, num_elems, { - for (size_t surf_lid = 0; surf_lid < num_surfs_in_elem; surf_lid++) { - // get the local patch_lid - size_t patch_lid = surf_lid * num_patches_in_surf; - - // get the patch_gids in this element - size_t patch_gid = patches_in_elem(elem_gid, patch_lid); - - // save the surface gid - surfs_in_elem(elem_gid, surf_lid) = surf_in_patch(patch_gid); - } // end surf_lid - }); - } // end of high-order mesh objects - - // ---------------- - - // allocate memory for boundary patches - bdy_patches = CArrayKokkos(num_bdy_patches, "mesh.bdy_patches"); - - FOR_ALL_CLASS(bdy_patch_gid, 0, num_bdy_patches, { - bdy_patches(bdy_patch_gid) = temp_bdy_patches(bdy_patch_gid); - }); // end FOR_ALL bdy_patch_gid - - // find and store the boundary nodes - CArrayKokkos temp_bdy_nodes(num_nodes); - CArrayKokkos hash_bdy_nodes(num_nodes); - - FOR_ALL_CLASS(node_gid, 0, num_nodes, { - hash_bdy_nodes(node_gid) = -1; - }); // end for node_gid - - // Parallel loop over boundary patches - DCArrayKokkos num_bdy_nodes_saved(1); - - RUN_CLASS({ - num_bdy_nodes_saved(0) = 0; - for (size_t bdy_patch_gid = 0; bdy_patch_gid < num_bdy_patches; bdy_patch_gid++) { - // get the global index of the patch that is on the boundary - size_t patch_gid = bdy_patches(bdy_patch_gid); - - // tag the boundary nodes - for (size_t node_lid = 0; node_lid < num_nodes_in_patch; node_lid++) { - size_t node_gid = nodes_in_patch(patch_gid, node_lid); - - if (hash_bdy_nodes(node_gid) < 0) { - hash_bdy_nodes(node_gid) = node_gid; - temp_bdy_nodes(num_bdy_nodes_saved(0)) = node_gid; - - // printf("bdy_node = %lu \n", node_gid); - num_bdy_nodes_saved(0)++; - } // end if - } // end for node_lid - } // end for loop over bdy_patch_gid - }); // end RUN - Kokkos::fence(); - - // copy value to host (CPU) - num_bdy_nodes_saved.update_host(); - Kokkos::fence(); - - // save the number of bdy_nodes to Mesh_t - num_bdy_nodes = num_bdy_nodes_saved.host(0); - - bdy_nodes = CArrayKokkos(num_bdy_nodes, "mesh.bdy_nodes"); - - FOR_ALL_CLASS(node_gid, 0, num_bdy_nodes, { - bdy_nodes(node_gid) = temp_bdy_nodes(node_gid); - }); // end for boundary node_gid - - printf("Num boundary nodes = %lu \n", num_bdy_nodes); - - return; - } // end patch connectivity method - - // build the node-node connectivity - void build_node_node_connectivity() - { - // find the max number of elems around a node - size_t max_num_elems_in_node; - size_t max_num_lcl; - REDUCE_MAX_CLASS(node_gid, 0, num_nodes, max_num_lcl, { - // num_corners_in_node = num_elems_in_node - size_t max_num = num_corners_in_node(node_gid); - - if (max_num > max_num_lcl) { - max_num_lcl = max_num; - } - }, max_num_elems_in_node); // end parallel reduction on max - Kokkos::fence(); - - // each elem corner will contribute 3 edges to the node. Those edges will likely be the same - // ones from an adjacent element so it is a safe estimate to multiply by 3 - DynamicRaggedRightArrayKokkos temp_nodes_in_nodes(num_nodes, max_num_elems_in_node * 3, "temp_nodes_in_nodes"); - - num_nodes_in_node = CArrayKokkos(num_nodes, "mesh.num_nodes_in_node"); - - // walk over the patches and save the node node connectivity - RUN_CLASS({ - if (num_dims == 3) { - for (size_t patch_gid = 0; patch_gid < num_patches; patch_gid++) { - for (size_t node_lid = 0; node_lid < num_nodes_in_patch; node_lid++) { - // the first node on the edge - size_t node_gid_0 = nodes_in_patch(patch_gid, node_lid); - - // second node on this edge - size_t node_gid_1; - - if (node_lid == num_nodes_in_patch - 1) { - node_gid_1 = nodes_in_patch(patch_gid, 0); - } - else{ - node_gid_1 = nodes_in_patch(patch_gid, node_lid + 1); - } // end if - - size_t num_saved_0 = temp_nodes_in_nodes.stride(node_gid_0); - size_t num_saved_1 = temp_nodes_in_nodes.stride(node_gid_1); - - size_t save_0 = 1; - size_t save_1 = 1; - - // check to see if the node_gid_1 was already saved - for (size_t contents_lid = 0; contents_lid < num_saved_0; contents_lid++) { - if (temp_nodes_in_nodes(node_gid_0, contents_lid) == node_gid_1) { - save_0 = 0; // don't save, it was already saved - } - } - - // check to see if the node_gid_0 was already saved - for (size_t contents_lid = 0; contents_lid < num_saved_1; contents_lid++) { - if (temp_nodes_in_nodes(node_gid_1, contents_lid) == node_gid_0) { - save_1 = 0; // don't save, it was already saved - } - } - - if (save_0 == 1) { - // increment the number of nodes in a node saved - temp_nodes_in_nodes.stride(node_gid_0)++; - - // save the second node to the first node - temp_nodes_in_nodes(node_gid_0, num_saved_0) = node_gid_1; - } - - if (save_1 == 1) { - // increment the number of nodes in a node saved - temp_nodes_in_nodes.stride(node_gid_1)++; - - // save the first node to the second node - temp_nodes_in_nodes(node_gid_1, num_saved_1) = node_gid_0; - } - - // save the strides - num_nodes_in_node(node_gid_0) = temp_nodes_in_nodes.stride(node_gid_0); - num_nodes_in_node(node_gid_1) = temp_nodes_in_nodes.stride(node_gid_1); - } // end for node in patch - } // end for patches - } // end if 3D - else{ - for (size_t patch_gid = 0; patch_gid < num_patches; patch_gid++) { - // the first node on the edge - size_t node_gid_0 = nodes_in_patch(patch_gid, 0); - - // second node on this edge - size_t node_gid_1 = nodes_in_patch(patch_gid, 1); - - size_t num_saved_0 = temp_nodes_in_nodes.stride(node_gid_0); - size_t num_saved_1 = temp_nodes_in_nodes.stride(node_gid_1); - - // increment the number of nodes in a node saved - temp_nodes_in_nodes.stride(node_gid_0)++; - temp_nodes_in_nodes.stride(node_gid_1)++; - - // save the second node to the first node - temp_nodes_in_nodes(node_gid_0, num_saved_0) = node_gid_1; - - // save the first node to the second node - temp_nodes_in_nodes(node_gid_1, num_saved_1) = node_gid_0; - - // save the strides - num_nodes_in_node(node_gid_0) = temp_nodes_in_nodes.stride(node_gid_0); - num_nodes_in_node(node_gid_1) = temp_nodes_in_nodes.stride(node_gid_1); - } // end for patches - } // end if 2D - }); // end RUN - Kokkos::fence(); - - nodes_in_node = RaggedRightArrayKokkos(num_nodes_in_node, "mesh.nodes_in_node"); - - // save the connectivity - FOR_ALL_CLASS(node_gid, 0, num_nodes, { - size_t num_saved = 0; - for (size_t node_lid = 0; node_lid < num_nodes_in_node(node_gid); node_lid++) { - nodes_in_node(node_gid, num_saved) = temp_nodes_in_nodes(node_gid, num_saved); - - // increment the number of nodes in node saved - num_saved++; - } // end for node_lid - }); // end parallel for over nodes - } // end of node node connectivity - - ///////////////////////////////////////////////////////////////////////////// - /// - /// \fn build_connectivity - /// - /// \brief Calls multiple build connectivity function - /// - ///////////////////////////////////////////////////////////////////////////// - void build_connectivity() - { - build_corner_connectivity(); - build_elem_elem_connectivity(); - build_patch_connectivity(); - build_node_node_connectivity(); - } - - ///////////////////////////////////////////////////////////////////////////// - /// - /// \fn init_bdy_sets - /// - /// \brief Initializes memory for boundary sets - /// - ///////////////////////////////////////////////////////////////////////////// - void init_bdy_sets(size_t num_bcs) - { - if (num_bcs == 0) { - printf("ERROR: number of boundary sets = 0, set it = 1"); - num_bcs = 1; - } - num_bdy_sets = num_bcs; - bdy_patches_in_set = DynamicRaggedRightArrayKokkos(num_bcs, num_bdy_patches, "mesh.bdy_patches_in_set"); - - return; - } // end of init_bdy_sets method - - ///////////////////////////////////////////////////////////////////////////// - /// - /// \fn build_boundry_node_sets - /// - /// REMOVE TO SETUP - /// - ///////////////////////////////////////////////////////////////////////////// - void build_boundry_node_sets(const CArrayKokkos& boundary, - Mesh_t& mesh) - { - // build boundary nodes in each boundary set - mesh.num_bdy_nodes_in_set = DCArrayKokkos(mesh.num_bdy_sets, "mesh.num_bdy_nodes_in_set"); - CArrayKokkos temp_count_num_bdy_nodes_in_set(mesh.num_bdy_sets, mesh.num_nodes, "temp_count_num_bdy_nodes_in_set"); - - DynamicRaggedRightArrayKokkos temp_nodes_in_set(mesh.num_bdy_sets, mesh.num_bdy_patches * mesh.num_nodes_in_patch, "temp_nodes_in_set"); - - // Parallel loop over boundary sets on device - FOR_ALL(bdy_set, 0, mesh.num_bdy_sets, { - // finde the number of patches_in_set - size_t num_bdy_patches_in_set = mesh.bdy_patches_in_set.stride(bdy_set); - - // Loop over boundary patches in boundary set - for (size_t bdy_patch_gid = 0; bdy_patch_gid < num_bdy_patches_in_set; bdy_patch_gid++) { - // get the global id for this boundary patch - size_t patch_gid = mesh.bdy_patches_in_set(bdy_set, bdy_patch_gid); - - // apply boundary condition at nodes on boundary - for (size_t node_lid = 0; node_lid < mesh.num_nodes_in_patch; node_lid++) { - size_t node_gid = mesh.nodes_in_patch(patch_gid, node_lid); - - temp_count_num_bdy_nodes_in_set(bdy_set, node_gid) = -1; - } // end for node_lid - } // end for bdy_patch_gid - - // Loop over boundary patches in boundary set - for (size_t bdy_patch_gid = 0; bdy_patch_gid < num_bdy_patches_in_set; bdy_patch_gid++) { - // get the global id for this boundary patch - size_t patch_gid = mesh.bdy_patches_in_set(bdy_set, bdy_patch_gid); - - // apply boundary condition at nodes on boundary - for (size_t node_lid = 0; node_lid < mesh.num_nodes_in_patch; node_lid++) { - size_t node_gid = mesh.nodes_in_patch(patch_gid, node_lid); - - if (temp_count_num_bdy_nodes_in_set(bdy_set, node_gid) == -1) { - size_t num_saved = mesh.num_bdy_nodes_in_set(bdy_set); - - mesh.num_bdy_nodes_in_set(bdy_set)++; - - // replace -1 with node_gid to denote the node was already saved - temp_count_num_bdy_nodes_in_set(bdy_set, node_gid) = node_gid; - - // increment the number of saved nodes, create memory - temp_nodes_in_set.stride(bdy_set)++; - temp_nodes_in_set(bdy_set, num_saved) = node_gid; - } // end if - } // end for node_lid - } // end for bdy_patch_gid - }); // end FOR_ALL bdy_set - Kokkos::fence(); - - // allocate the RaggedRight bdy_nodes_in_set array - mesh.bdy_nodes_in_set = RaggedRightArrayKokkos(mesh.num_bdy_nodes_in_set); - - FOR_ALL(bdy_set, 0, mesh.num_bdy_sets, { - // Loop over boundary patches in boundary set - for (size_t bdy_node_lid = 0; bdy_node_lid < mesh.num_bdy_nodes_in_set(bdy_set); bdy_node_lid++) { - // save the bdy_node_gid - mesh.bdy_nodes_in_set(bdy_set, bdy_node_lid) = temp_nodes_in_set(bdy_set, bdy_node_lid); - } // end for - }); // end FOR_ALL bdy_set - - // update the host side for the number nodes in a bdy_set - mesh.num_bdy_nodes_in_set.update_host(); - - return; - } // end method to build boundary nodes -}; // end Mesh_t - -void ensight(const Mesh_t& mesh, - const DCArrayKokkos& node_coords, - const DCArrayKokkos& node_vel, - const DCArrayKokkos& node_mass, - const DCArrayKokkos& elem_den, - const DCArrayKokkos& elem_pres, - const DCArrayKokkos& elem_stress, - const DCArrayKokkos& elem_sspd, - const DCArrayKokkos& elem_sie, - const DCArrayKokkos& elem_vol, - const DCArrayKokkos& elem_mass, - const DCArrayKokkos& elem_mat_id, - CArray& graphics_times, - size_t& graphics_id, - const double time_value); - -void state_file(const Mesh_t& mesh, - const DCArrayKokkos& node_coords, - const DCArrayKokkos& node_vel, - const DCArrayKokkos& node_mass, - const DCArrayKokkos& elem_den, - const DCArrayKokkos& elem_pres, - const DCArrayKokkos& elem_stress, - const DCArrayKokkos& elem_sspd, - const DCArrayKokkos& elem_sie, - const DCArrayKokkos& elem_vol, - const DCArrayKokkos& elem_mass, - const DCArrayKokkos& elem_mat_id, - const double time_value); - -void user_model_init(const DCArrayKokkos& file_state_vars, - const size_t num_state_vars, - const size_t mat_id, - const size_t num_elems); - -KOKKOS_FUNCTION -void decompose_vel_grad(ViewCArrayKokkos& D_tensor, - ViewCArrayKokkos& W_tensor, - const ViewCArrayKokkos& vel_grad, - const ViewCArrayKokkos& elem_node_gids, - const size_t elem_gid, - const DCArrayKokkos& node_coords, - const DCArrayKokkos& node_vel, - const double vol); - -#endif diff --git a/single-node-refactor/src/common/simulation_state.h b/single-node-refactor/src/common/simulation_state.h deleted file mode 100644 index 83e8abf97..000000000 --- a/single-node-refactor/src/common/simulation_state.h +++ /dev/null @@ -1,57 +0,0 @@ -/********************************************************************************************** -� 2020. Triad National Security, LLC. All rights reserved. -This program was produced under U.S. Government contract 89233218CNA000001 for Los Alamos -National Laboratory (LANL), which is operated by Triad National Security, LLC for the U.S. -Department of Energy/National Nuclear Security Administration. All rights in the program are -reserved by Triad National Security, LLC, and the U.S. Department of Energy/National Nuclear -Security Administration. The Government is granted for itself and others acting on its behalf a -nonexclusive, paid-up, irrevocable worldwide license in this material to reproduce, prepare -derivative works, distribute copies to the public, perform publicly and display publicly, and -to permit others to do so. -This program is open source under the BSD-3 License. -Redistribution and use in source and binary forms, with or without modification, are permitted -provided that the following conditions are met: -1. Redistributions of source code must retain the above copyright notice, this list of -conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright notice, this list of -conditions and the following disclaimer in the documentation and/or other materials -provided with the distribution. -3. Neither the name of the copyright holder nor the names of its contributors may be used -to endorse or promote products derived from this software without specific prior -written permission. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS -IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; -OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, -WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR -OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF -ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -**********************************************************************************************/ - -#ifndef FIERRO_SIM_STATE_H -#define FIERRO_SIM_STATE_H -#include -#include "matar.h" - -#include "state.h" - -///////////////////////////////////////////////////////////////////////////// -/// -/// \struct simulation_state_t -/// -/// \brief Struct for holding state entities for Fierro, currently unused... -/// -///////////////////////////////////////////////////////////////////////////// -struct simulation_state_t -{ - // MaterialPoint_t MaterialPoints; - // node_t node; - // corner_t corner; - // zone_t zone; -}; // simulation_state_t - -#endif // end Header Guard \ No newline at end of file diff --git a/single-node-refactor/src/common/region_fill.cpp b/single-node-refactor/src/common/src/region_fill.cpp similarity index 100% rename from single-node-refactor/src/common/region_fill.cpp rename to single-node-refactor/src/common/src/region_fill.cpp From 6b0b0ca52f9f3b29a56ec7c0f41a122318e64bb1 Mon Sep 17 00:00:00 2001 From: Jacob Moore Date: Wed, 28 Aug 2024 13:35:46 -0500 Subject: [PATCH 167/233] ENH: Cleanup geometry --- .../src/common/CMakeLists.txt | 1 + .../src/common/include/geometry_new.h | 559 +------------ .../src/common/src/geometry_new.cpp | 750 ++++++++++++++++++ 3 files changed, 771 insertions(+), 539 deletions(-) create mode 100644 single-node-refactor/src/common/src/geometry_new.cpp diff --git a/single-node-refactor/src/common/CMakeLists.txt b/single-node-refactor/src/common/CMakeLists.txt index be51952df..c8824f6e1 100644 --- a/single-node-refactor/src/common/CMakeLists.txt +++ b/single-node-refactor/src/common/CMakeLists.txt @@ -22,5 +22,6 @@ message("\n ****** ADDING COMMON SOURCE FILES ******** \n ") set(COMMON_Files ${CMAKE_CURRENT_SOURCE_DIR}/src/region_fill.cpp +${CMAKE_CURRENT_SOURCE_DIR}/src/geometry_new.cpp PARENT_SCOPE ) \ No newline at end of file diff --git a/single-node-refactor/src/common/include/geometry_new.h b/single-node-refactor/src/common/include/geometry_new.h index 01164cb35..e8277d45b 100644 --- a/single-node-refactor/src/common/include/geometry_new.h +++ b/single-node-refactor/src/common/include/geometry_new.h @@ -67,201 +67,11 @@ namespace geometry /// \param View of the elements node ids /// ///////////////////////////////////////////////////////////////////////////// -KOKKOS_INLINE_FUNCTION +KOKKOS_FUNCTION void get_bmatrix(const ViewCArrayKokkos& B_matrix, const size_t elem_gid, const DCArrayKokkos& node_coords, - const ViewCArrayKokkos& elem_node_gids) -{ - const size_t num_nodes = 8; - - double x_array[8]; - double y_array[8]; - double z_array[8]; - - // x, y, z coordinates of elem vertices - auto x = ViewCArrayKokkos(x_array, num_nodes); - auto y = ViewCArrayKokkos(y_array, num_nodes); - auto z = ViewCArrayKokkos(z_array, num_nodes); - - // get the coordinates of the nodes(rk,elem,node) in this element - for (int node_lid = 0; node_lid < num_nodes; node_lid++) { - x(node_lid) = node_coords(1, elem_node_gids(node_lid), 0); - y(node_lid) = node_coords(1, elem_node_gids(node_lid), 1); - z(node_lid) = node_coords(1, elem_node_gids(node_lid), 2); - } // end for - - - double twelth = 1. / 12.; - - B_matrix(0, 0) = (+y(1) * (-z(3) - z(2) + z(4) + z(5) ) - + y(3) * (+z(1) - z(2) ) - + y(2) * (+z(1) + z(3) - z(4) - z(6) ) - + y(4) * (-z(1) + z(2) - z(5) + z(6) ) - + y(5) * (-z(1) + z(4) ) - + y(6) * (+z(2) - z(4) ) ) * twelth; - - B_matrix(1, 0) = (+y(0) * (+z(3) + z(2) - z(4) - z(5) ) - + y(3) * (-z(0) - z(2) + z(5) + z(7) ) - + y(2) * (-z(0) + z(3) ) - + y(4) * (+z(0) - z(5) ) - + y(5) * (+z(0) - z(3) + z(4) - z(7) ) - + y(7) * (-z(3) + z(5) ) ) * twelth; - - B_matrix(2, 0) = (+y(0) * (-z(1) - z(3) + z(4) + z(6) ) - + y(1) * (+z(0) - z(3) ) - + y(3) * (+z(0) + z(1) - z(7) - z(6) ) - + y(4) * (-z(0) + z(6) ) - + y(7) * (+z(3) - z(6) ) - + y(6) * (-z(0) + z(3) - z(4) + z(7) ) ) * twelth; - - B_matrix(3, 0) = (+y(0) * (-z(1) + z(2) ) - + y(1) * (+z(0) + z(2) - z(5) - z(7) ) - + y(2) * (-z(0) - z(1) + z(7) + z(6) ) - + y(5) * (+z(1) - z(7) ) - + y(7) * (+z(1) - z(2) + z(5) - z(6) ) - + y(6) * (-z(2) + z(7) ) ) * twelth; - - B_matrix(4, 0) = (+y(0) * (+z(1) - z(2) + z(5) - z(6) ) - + y(1) * (-z(0) + z(5) ) - + y(2) * (+z(0) - z(6) ) - + y(5) * (-z(0) - z(1) + z(7) + z(6) ) - + y(7) * (-z(5) + z(6) ) - + y(6) * (+z(0) + z(2) - z(5) - z(7) ) ) * twelth; - - B_matrix(5, 0) = (+y(0) * (+z(1) - z(4) ) - + y(1) * (-z(0) + z(3) - z(4) + z(7) ) - + y(3) * (-z(1) + z(7) ) - + y(4) * (+z(0) + z(1) - z(7) - z(6) ) - + y(7) * (-z(1) - z(3) + z(4) + z(6) ) - + y(6) * (+z(4) - z(7) ) ) * twelth; - - B_matrix(6, 0) = (+y(0) * (-z(2) + z(4) ) - + y(3) * (+z(2) - z(7) ) - + y(2) * (+z(0) - z(3) + z(4) - z(7) ) - + y(4) * (-z(0) - z(2) + z(5) + z(7) ) - + y(5) * (-z(4) + z(7) ) - + y(7) * (+z(3) + z(2) - z(4) - z(5) ) ) * twelth; - - B_matrix(7, 0) = (+y(1) * (+z(3) - z(5) ) - + y(3) * (-z(1) + z(2) - z(5) + z(6) ) - + y(2) * (-z(3) + z(6) ) - + y(4) * (+z(5) - z(6) ) - + y(5) * (+z(1) + z(3) - z(4) - z(6) ) - + y(6) * (-z(3) - z(2) + z(4) + z(5) ) ) * twelth; - - B_matrix(0, 1) = (+z(1) * (-x(3) - x(2) + x(4) + x(5) ) - + z(3) * (+x(1) - x(2) ) - + z(2) * (+x(1) + x(3) - x(4) - x(6) ) - + z(4) * (-x(1) + x(2) - x(5) + x(6) ) - + z(5) * (-x(1) + x(4) ) - + z(6) * (+x(2) - x(4) ) ) * twelth; - - B_matrix(1, 1) = (+z(0) * (+x(3) + x(2) - x(4) - x(5) ) - + z(3) * (-x(0) - x(2) + x(5) + x(7) ) - + z(2) * (-x(0) + x(3) ) - + z(4) * (+x(0) - x(5) ) - + z(5) * (+x(0) - x(3) + x(4) - x(7) ) - + z(7) * (-x(3) + x(5) ) ) * twelth; - - B_matrix(2, 1) = (+z(0) * (-x(1) - x(3) + x(4) + x(6) ) - + z(1) * (+x(0) - x(3) ) - + z(3) * (+x(0) + x(1) - x(7) - x(6) ) - + z(4) * (-x(0) + x(6) ) - + z(7) * (+x(3) - x(6) ) - + z(6) * (-x(0) + x(3) - x(4) + x(7) ) ) * twelth; - - B_matrix(3, 1) = (+z(0) * (-x(1) + x(2) ) - + z(1) * (+x(0) + x(2) - x(5) - x(7) ) - + z(2) * (-x(0) - x(1) + x(7) + x(6) ) - + z(5) * (+x(1) - x(7) ) - + z(7) * (+x(1) - x(2) + x(5) - x(6) ) - + z(6) * (-x(2) + x(7) ) ) * twelth; - - B_matrix(4, 1) = (+z(0) * (+x(1) - x(2) + x(5) - x(6) ) - + z(1) * (-x(0) + x(5) ) - + z(2) * (+x(0) - x(6) ) - + z(5) * (-x(0) - x(1) + x(7) + x(6) ) - + z(7) * (-x(5) + x(6) ) - + z(6) * (+x(0) + x(2) - x(5) - x(7) ) ) * twelth; - - B_matrix(5, 1) = (+z(0) * (+x(1) - x(4) ) - + z(1) * (-x(0) + x(3) - x(4) + x(7) ) - + z(3) * (-x(1) + x(7) ) - + z(4) * (+x(0) + x(1) - x(7) - x(6) ) - + z(7) * (-x(1) - x(3) + x(4) + x(6) ) - + z(6) * (+x(4) - x(7) ) ) * twelth; - - B_matrix(6, 1) = (+z(0) * (-x(2) + x(4) ) - + z(3) * (+x(2) - x(7) ) - + z(2) * (+x(0) - x(3) + x(4) - x(7) ) - + z(4) * (-x(0) - x(2) + x(5) + x(7) ) - + z(5) * (-x(4) + x(7) ) - + z(7) * (+x(3) + x(2) - x(4) - x(5) ) ) * twelth; - - B_matrix(7, 1) = (+z(1) * (+x(3) - x(5) ) - + z(3) * (-x(1) + x(2) - x(5) + x(6) ) - + z(2) * (-x(3) + x(6) ) - + z(4) * (+x(5) - x(6) ) - + z(5) * (+x(1) + x(3) - x(4) - x(6) ) - + z(6) * (-x(3) - x(2) + x(4) + x(5) ) ) * twelth; - - B_matrix(0, 2) = (+x(1) * (-y(3) - y(2) + y(4) + y(5) ) - + x(3) * (+y(1) - y(2) ) - + x(2) * (+y(1) + y(3) - y(4) - y(6) ) - + x(4) * (-y(1) + y(2) - y(5) + y(6) ) - + x(5) * (-y(1) + y(4) ) - + x(6) * (+y(2) - y(4) ) ) * twelth; - - B_matrix(1, 2) = (+x(0) * (+y(3) + y(2) - y(4) - y(5) ) - + x(3) * (-y(0) - y(2) + y(5) + y(7) ) - + x(2) * (-y(0) + y(3) ) - + x(4) * (+y(0) - y(5) ) - + x(5) * (+y(0) - y(3) + y(4) - y(7) ) - + x(7) * (-y(3) + y(5) ) ) * twelth; - - B_matrix(2, 2) = (+x(0) * (-y(1) - y(3) + y(4) + y(6) ) - + x(1) * (+y(0) - y(3) ) - + x(3) * (+y(0) + y(1) - y(7) - y(6) ) - + x(4) * (-y(0) + y(6) ) - + x(7) * (+y(3) - y(6) ) - + x(6) * (-y(0) + y(3) - y(4) + y(7) ) ) * twelth; - - B_matrix(3, 2) = (+x(0) * (-y(1) + y(2) ) - + x(1) * (+y(0) + y(2) - y(5) - y(7) ) - + x(2) * (-y(0) - y(1) + y(7) + y(6) ) - + x(5) * (+y(1) - y(7) ) - + x(7) * (+y(1) - y(2) + y(5) - y(6) ) - + x(6) * (-y(2) + y(7) ) ) * twelth; - - B_matrix(4, 2) = (+x(0) * (+y(1) - y(2) + y(5) - y(6) ) - + x(1) * (-y(0) + y(5) ) - + x(2) * (+y(0) - y(6) ) - + x(5) * (-y(0) - y(1) + y(7) + y(6) ) - + x(7) * (-y(5) + y(6) ) - + x(6) * (+y(0) + y(2) - y(5) - y(7) ) ) * twelth; - - B_matrix(5, 2) = (+x(0) * (+y(1) - y(4) ) - + x(1) * (-y(0) + y(3) - y(4) + y(7) ) - + x(3) * (-y(1) + y(7) ) - + x(4) * (+y(0) + y(1) - y(7) - y(6) ) - + x(7) * (-y(1) - y(3) + y(4) + y(6) ) - + x(6) * (+y(4) - y(7) ) ) * twelth; - - B_matrix(6, 2) = (+x(0) * (-y(2) + y(4) ) - + x(3) * (+y(2) - y(7) ) - + x(2) * (+y(0) - y(3) + y(4) - y(7) ) - + x(4) * (-y(0) - y(2) + y(5) + y(7) ) - + x(5) * (-y(4) + y(7) ) - + x(7) * (+y(3) + y(2) - y(4) - y(5) ) ) * twelth; - - B_matrix(7, 2) = (+x(1) * (+y(3) - y(5) ) - + x(3) * (-y(1) + y(2) - y(5) + y(6) ) - + x(2) * (-y(3) + y(6) ) - + x(4) * (+y(5) - y(6) ) - + x(5) * (+y(1) + y(3) - y(4) - y(6) ) - + x(6) * (-y(3) - y(2) + y(4) + y(5) ) ) * twelth; -} // end subroutine + const ViewCArrayKokkos& elem_node_gids); ///////////////////////////////////////////////////////////////////////////// /// @@ -275,39 +85,11 @@ void get_bmatrix(const ViewCArrayKokkos& B_matrix, /// \param Global ids of the nodes in this element /// ///////////////////////////////////////////////////////////////////////////// -KOKKOS_INLINE_FUNCTION +KOKKOS_FUNCTION void get_vol_quad(const DCArrayKokkos& elem_vol, const size_t elem_gid, const DCArrayKokkos& node_coords, - const ViewCArrayKokkos& elem_node_gids) -{ - elem_vol(elem_gid) = 0.0; - - const size_t num_nodes = 4; - - double x_array[4]; - double y_array[4]; - - // x, y coordinates of elem vertices - auto x = ViewCArrayKokkos(x_array, num_nodes); - auto y = ViewCArrayKokkos(y_array, num_nodes); - - // get the coordinates of the nodes(rk,elem,node) in this element - for (int node_lid = 0; node_lid < num_nodes; node_lid++) { - x(node_lid) = node_coords(1, elem_node_gids(node_lid), 0); - y(node_lid) = node_coords(1, elem_node_gids(node_lid), 1); - } // end for - - /* ensight node order 0 1 2 3 - Flanaghan node order 3 4 1 2 - */ - elem_vol(elem_gid) = - ( (y(2) + y(3) + y(0)) * ((y(2) - y(3)) * (x(0) - x(3)) - (y(0) - y(3)) * (x(2) - x(3)) ) - + (y(0) + y(1) + y(2)) * ((y(0) - y(1)) * (x(2) - x(1)) - (y(2) - y(1)) * (x(0) - x(1))) ) / 6.0; - - elem_vol(elem_gid) = fmax(elem_vol(elem_gid), 1.0E-14); - return; -} // end subroutine + const ViewCArrayKokkos& elem_node_gids); ///////////////////////////////////////////////////////////////////////////// /// @@ -321,50 +103,11 @@ void get_vol_quad(const DCArrayKokkos& elem_vol, /// \param Runge Kutta time integration level /// ///////////////////////////////////////////////////////////////////////////// -KOKKOS_INLINE_FUNCTION +KOKKOS_FUNCTION void get_vol_hex(const DCArrayKokkos& elem_vol, const size_t elem_gid, const DCArrayKokkos& node_coords, - const ViewCArrayKokkos& elem_node_gids) -{ - const size_t num_nodes = 8; - - double x_array[8]; - double y_array[8]; - double z_array[8]; - - // x, y, z coordinates of elem vertices - auto x = ViewCArrayKokkos(x_array, num_nodes); - auto y = ViewCArrayKokkos(y_array, num_nodes); - auto z = ViewCArrayKokkos(z_array, num_nodes); - - // get the coordinates of the nodes(rk,elem,node) in this element - for (int node_lid = 0; node_lid < num_nodes; node_lid++) { - x(node_lid) = node_coords(1, elem_node_gids(node_lid), 0); - y(node_lid) = node_coords(1, elem_node_gids(node_lid), 1); - z(node_lid) = node_coords(1, elem_node_gids(node_lid), 2); - } // end for - - double twelth = 1. / 12.; - - // element volume - elem_vol(elem_gid) = - (x(1) * (y(2) * (-z(0) + z(3)) + y(4) * (z(0) - z(5)) + y(0) * (z(3) + z(2) - z(4) - z(5)) + y(7) * (-z(3) + z(5)) + y(5) * (z(0) - z(3) + z(4) - z(7)) + y(3) * (-z(0) - z(2) + z(5) + z(7))) + - x(6) * (y(0) * (-z(2) + z(4)) + y(7) * (z(3) + z(2) - z(4) - z(5)) + y(3) * (z(2) - z(7)) + y(2) * (z(0) - z(3) + z(4) - z(7)) + y(5) * (-z(4) + z(7)) + y(4) * (-z(0) - z(2) + z(5) + z(7))) + - x(2) * (y(1) * (z(0) - z(3)) + y(6) * (-z(0) + z(3) - z(4) + z(7)) + y(7) * (z(3) - z(6)) + y(3) * (z(0) + z(1) - z(7) - z(6)) + y(4) * (-z(0) + z(6)) + y(0) * (-z(1) - z(3) + z(4) + z(6))) + - x(5) * (y(0) * (z(1) - z(4)) + y(6) * (z(4) - z(7)) + y(3) * (-z(1) + z(7)) + y(1) * (-z(0) + z(3) - z(4) + z(7)) + y(4) * (z(0) + z(1) - z(7) - z(6)) + y(7) * (-z(1) - z(3) + z(4) + z(6))) + - x(7) * (y(1) * (z(3) - z(5)) + y(6) * (-z(3) - z(2) + z(4) + z(5)) + y(5) * (z(1) + z(3) - z(4) - z(6)) + y(4) * (z(5) - z(6)) + y(2) * (-z(3) + z(6)) + y(3) * (-z(1) + z(2) - z(5) + z(6))) + - x(0) * (y(3) * (z(1) - z(2)) + y(6) * (z(2) - z(4)) + y(5) * (-z(1) + z(4)) + y(1) * (-z(3) - z(2) + z(4) + z(5)) + y(2) * (z(1) + z(3) - z(4) - z(6)) + y(4) * (-z(1) + z(2) - z(5) + z(6))) + - x(3) * (y(0) * (-z(1) + z(2)) + y(5) * (z(1) - z(7)) + y(1) * (z(0) + z(2) - z(5) - z(7)) + y(6) * (-z(2) + z(7)) + y(7) * (z(1) - z(2) + z(5) - z(6)) + y(2) * (-z(0) - z(1) + z(7) + z(6))) + - x(4) * - (y(1) * (-z(0) + z(5)) + y(6) * (z(0) + z(2) - z(5) - z(7)) + y(2) * (z(0) - z(6)) + y(0) * (z(1) - z(2) + z(5) - z(6)) + y(7) * (-z(5) + z(6)) + y(5) * (-z(0) - z(1) + z(7) + z(6)))) * - twelth; - - // std::cout<<"Calculating volume for hex = "<& elem_node_gids); ///////////////////////////////////////////////////////////////////////////// /// @@ -373,31 +116,9 @@ void get_vol_hex(const DCArrayKokkos& elem_vol, /// \brief Compute Volume of each finite element /// ///////////////////////////////////////////////////////////////////////////// -inline void get_vol(const DCArrayKokkos& elem_vol, +void get_vol(const DCArrayKokkos& elem_vol, const DCArrayKokkos& node_coords, - const Mesh_t& mesh) -{ - const size_t num_dims = mesh.num_dims; - - if (num_dims == 2) { - FOR_ALL(elem_gid, 0, mesh.num_elems, { - // cut out the node_gids for this element - ViewCArrayKokkos elem_node_gids(&mesh.nodes_in_elem(elem_gid, 0), 4); - get_vol_quad(elem_vol, elem_gid, node_coords, elem_node_gids); - }); - Kokkos::fence(); - } - else{ - FOR_ALL(elem_gid, 0, mesh.num_elems, { - // cut out the node_gids for this element - ViewCArrayKokkos elem_node_gids(&mesh.nodes_in_elem(elem_gid, 0), 8); - get_vol_hex(elem_vol, elem_gid, node_coords, elem_node_gids); - }); - Kokkos::fence(); - } // end if - - return; -} // end subroutine + const Mesh_t& mesh); ///////////////////////////////////////////////////////////////////////////// /// @@ -411,67 +132,11 @@ inline void get_vol(const DCArrayKokkos& elem_vol, /// \param Global indices of the nodes of this element /// ///////////////////////////////////////////////////////////////////////////// -KOKKOS_INLINE_FUNCTION +KOKKOS_FUNCTION void get_bmatrix2D(const ViewCArrayKokkos& B_matrix, const size_t elem_gid, const DCArrayKokkos& node_coords, - const ViewCArrayKokkos& elem_node_gids) -{ - const size_t num_nodes = 4; - - double x_array[4]; - double y_array[4]; - - // x, y coordinates of elem vertices - auto x = ViewCArrayKokkos(x_array, num_nodes); - auto y = ViewCArrayKokkos(y_array, num_nodes); - - // get the coordinates of the nodes(rk,elem,node) in this element - for (int node_lid = 0; node_lid < num_nodes; node_lid++) { - x(node_lid) = node_coords(1, elem_node_gids(node_lid), 0); - y(node_lid) = node_coords(1, elem_node_gids(node_lid), 1); - } // end for - - /* ensight node order 0 1 2 3 - Flanaghan node order 3 4 1 2 - */ - - B_matrix(0, 0) = -0.5 * (y(3) - y(1)); - - B_matrix(1, 0) = -0.5 * (y(0) - y(2)); - - B_matrix(2, 0) = -0.5 * (y(1) - y(3)); - - B_matrix(3, 0) = -0.5 * (y(2) - y(0)); - - B_matrix(0, 1) = -0.5 * (x(1) - x(3)); - - B_matrix(1, 1) = -0.5 * (x(2) - x(0)); - - B_matrix(2, 1) = -0.5 * (x(3) - x(1)); - - B_matrix(3, 1) = -0.5 * (x(0) - x(2)); - - // - /* - The Flanagan and Belytschko paper has: - x y - node 1: 0.5*(y2 - y4) , 0.5*(x4 - x2) - node 2: 0.5*(y3 - y1) , 0.5*(x1 - x3) - node 3: 0.5*(y4 - y2) , 0.5*(x2 - x4) - node 4: 0.5*(y1 - y3) , 0.5*(x3 - x1) - - Ensight order would be - - node 2: 0.5*(y3 - y1) , 0.5*(x1 - x3) - node 3: 0.5*(y0 - y2) , 0.5*(x2 - x0) - node 0: 0.5*(y1 - y3) , 0.5*(x3 - x1) - node 1: 0.5*(y2 - y0) , 0.5*(x0 - x2) - - */ - - return; -} // end subroutine + const ViewCArrayKokkos& elem_node_gids); ///////////////////////////////////////////////////////////////////////////// /// @@ -486,37 +151,10 @@ void get_bmatrix2D(const ViewCArrayKokkos& B_matrix, /// \return Elements face area (double) /// ///////////////////////////////////////////////////////////////////////////// -KOKKOS_INLINE_FUNCTION +KOKKOS_FUNCTION double get_area_quad(const size_t elem_gid, const DCArrayKokkos& node_coords, - const ViewCArrayKokkos& elem_node_gids) -{ - double elem_area = 0.0; - - const size_t num_nodes = 4; - - double x_array[4]; - double y_array[4]; - - // x, y coordinates of elem vertices - auto x = ViewCArrayKokkos(x_array, num_nodes); - auto y = ViewCArrayKokkos(y_array, num_nodes); - - // get the coordinates of the nodes(rk,elem,node) in this element - for (int node_lid = 0; node_lid < num_nodes; node_lid++) { - x(node_lid) = node_coords(1, elem_node_gids(node_lid), 0); - y(node_lid) = node_coords(1, elem_node_gids(node_lid), 1); - } // end for - - /* ensight node order 0 1 2 3 - Flanaghan node order 3 4 1 2 - */ - - // element facial area - elem_area = 0.5 * ((x(0) - x(2)) * (y(1) - y(3)) + (x(3) - x(1)) * (y(0) - y(2))); - - return elem_area; -} // end subroutine + const ViewCArrayKokkos& elem_node_gids); ///////////////////////////////////////////////////////////////////////////// /// @@ -534,29 +172,13 @@ double get_area_quad(const size_t elem_gid, /// \return Triangle area (double) /// ///////////////////////////////////////////////////////////////////////////// -KOKKOS_INLINE_FUNCTION +KOKKOS_FUNCTION double heron(const double x1, const double y1, const double x2, const double y2, const double x3, - const double y3) -{ - double S, a, b, c, area; - - S = 0.0; - a = sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1)); - S += a; - b = sqrt((x3 - x2) * (x3 - x2) + (y3 - y2) * (y3 - y2)); - S += b; - c = sqrt((x3 - x1) * (x3 - x1) + (y3 - y1) * (y3 - y1)); - S += c; - - S *= 0.5; - area = sqrt(S * (S - a) * (S - b) * (S - c)); - - return area; -} + const double y3); ///////////////////////////////////////////////////////////////////////////// /// @@ -570,49 +192,12 @@ double heron(const double x1, /// \param Node global IDs associated with this element /// ///////////////////////////////////////////////////////////////////////////// -KOKKOS_INLINE_FUNCTION +KOKKOS_FUNCTION void get_area_weights2D(const ViewCArrayKokkos& corner_areas, const size_t elem_gid, const DCArrayKokkos& node_coords, - const ViewCArrayKokkos& elem_node_gids) -{ - const size_t num_nodes = 4; + const ViewCArrayKokkos& elem_node_gids); - double x_array[4]; - double y_array[4]; - - double rc, zc; - double A12, A23, A34, A41; - - // x, y coordinates of elem vertices - ViewCArrayKokkos x(x_array, num_nodes); - ViewCArrayKokkos y(y_array, num_nodes); - - // get the coordinates of the nodes(rk,elem,node) in this element - rc = zc = 0.0; - for (int node_lid = 0; node_lid < num_nodes; node_lid++) { - x(node_lid) = node_coords(1, elem_node_gids(node_lid), 0); - y(node_lid) = node_coords(1, elem_node_gids(node_lid), 1); - rc += 0.25 * y(node_lid); - zc += 0.25 * x(node_lid); - } // end for - - /* ensight node order 0 1 2 3 - Barlow node order 1 2 3 4 - */ - - A12 = heron(x(0), y(0), zc, rc, x(1), y(1)); - A23 = heron(x(1), y(1), zc, rc, x(2), y(2)); - A34 = heron(x(2), y(2), zc, rc, x(3), y(3)); - A41 = heron(x(3), y(3), zc, rc, x(0), y(0)); - - corner_areas(0) = (5. * A41 + 5. * A12 + A23 + A34) / 12.; - corner_areas(1) = (A41 + 5. * A12 + 5. * A23 + A34) / 12.; - corner_areas(2) = (A41 + A12 + 5. * A23 + 5. * A34) / 12.; - corner_areas(3) = (5. * A41 + A12 + A23 + 5. * A34) / 12.; - - return; -} // end subroutine } // end namespace ///////////////////////////////////////////////////////////////////////////// @@ -628,79 +213,12 @@ void get_area_weights2D(const ViewCArrayKokkos& corner_areas, /// \param Nodal coordinates /// ///////////////////////////////////////////////////////////////////////////// -KOKKOS_INLINE_FUNCTION +KOKKOS_FUNCTION size_t check_bdy(const size_t patch_gid, const int this_bc_tag, const double val, const Mesh_t& mesh, - const DCArrayKokkos& node_coords) -{ - size_t num_dims = mesh.num_dims; - - // default bool is not on the boundary - size_t is_on_bdy = 0; - - // the patch coordinates - double these_patch_coords[3]; // Note: cannot allocated array with num_dims - - // loop over the nodes on the patch - for (size_t patch_node_lid = 0; patch_node_lid < mesh.num_nodes_in_patch; patch_node_lid++) { - // get the nodal_gid for this node in the patch - size_t node_gid = mesh.nodes_in_patch(patch_gid, patch_node_lid); - - for (size_t dim = 0; dim < num_dims; dim++) { - these_patch_coords[dim] = node_coords(1, node_gid, dim); // (rk, node_gid, dim) - } // end for dim - - // a x-plane - if (this_bc_tag == 0) { - if (fabs(these_patch_coords[0] - val) <= 1.0e-7) { - is_on_bdy += 1; - } - } // end if on type - // a y-plane - else if (this_bc_tag == 1) { - if (fabs(these_patch_coords[1] - val) <= 1.0e-7) { - is_on_bdy += 1; - } - } // end if on type - // a z-plane - else if (this_bc_tag == 2) { - if (fabs(these_patch_coords[2] - val) <= 1.0e-7) { - is_on_bdy += 1; - } - } // end if on type - // cylinderical shell where radius = sqrt(x^2 + y^2) - else if (this_bc_tag == 3) { - real_t R = sqrt(these_patch_coords[0] * these_patch_coords[0] + - these_patch_coords[1] * these_patch_coords[1]); - - if (fabs(R - val) <= 1.0e-7) { - is_on_bdy += 1; - } - } // end if on type - // spherical shell where radius = sqrt(x^2 + y^2 + z^2) - else if (this_bc_tag == 4) { - real_t R = sqrt(these_patch_coords[0] * these_patch_coords[0] + - these_patch_coords[1] * these_patch_coords[1] + - these_patch_coords[2] * these_patch_coords[2]); - - if (fabs(R - val) <= 1.0e-7) { - is_on_bdy += 1; - } - } // end if on type - } // end for nodes in the patch - - // if all nodes in the patch are on the geometry - if (is_on_bdy == mesh.num_nodes_in_patch) { - is_on_bdy = 1; - } - else{ - is_on_bdy = 0; - } - - return is_on_bdy; -} // end method to check bdy + const DCArrayKokkos& node_coords); ///////////////////////////////////////////////////////////////////////////// /// @@ -713,45 +231,8 @@ size_t check_bdy(const size_t patch_gid, /// \param Nodal coordinates /// ///////////////////////////////////////////////////////////////////////////// -inline void tag_bdys(const BoundaryCondition_t& boundary, +void tag_bdys(const BoundaryCondition_t& boundary, Mesh_t& mesh, - const DCArrayKokkos& node_coords) -{ - // if (bdy_set == mesh.num_bdy_sets){ - // printf(" ERROR: number of boundary sets must be increased by %zu", - // bdy_set-mesh.num_bdy_sets+1); - // exit(0); - // } // end if - - FOR_ALL(bdy_set, 0, mesh.num_bdy_sets, { - // tag boundaries - int bc_tag_id = boundary.BoundaryConditionSetup(bdy_set).geometry; - double val = boundary.BoundaryConditionSetup(bdy_set).value; - - // save the boundary patches to this set that are on the plane, spheres, etc. - for (size_t bdy_patch_lid = 0; bdy_patch_lid < mesh.num_bdy_patches; bdy_patch_lid++) { - // save the patch index - size_t bdy_patch_gid = mesh.bdy_patches(bdy_patch_lid); - - // check to see if this patch is on the specified plane - size_t is_on_bdy = check_bdy(bdy_patch_gid, - bc_tag_id, - val, - mesh, - node_coords); // no=0, yes=1 - - if (is_on_bdy == 1) { - size_t index = mesh.bdy_patches_in_set.stride(bdy_set); - - // increment the number of boundary patches saved - mesh.bdy_patches_in_set.stride(bdy_set)++; - - mesh.bdy_patches_in_set(bdy_set, index) = bdy_patch_gid; - } // end if - } // end for bdy_patch - }); // end FOR_ALL bdy_sets - - return; -} // end tag + const DCArrayKokkos& node_coords); #endif \ No newline at end of file diff --git a/single-node-refactor/src/common/src/geometry_new.cpp b/single-node-refactor/src/common/src/geometry_new.cpp new file mode 100644 index 000000000..967e2bdb2 --- /dev/null +++ b/single-node-refactor/src/common/src/geometry_new.cpp @@ -0,0 +1,750 @@ +/********************************************************************************************** +� 2020. Triad National Security, LLC. All rights reserved. +This program was produced under U.S. Government contract 89233218CNA000001 for Los Alamos +National Laboratory (LANL), which is operated by Triad National Security, LLC for the U.S. +Department of Energy/National Nuclear Security Administration. All rights in the program are +reserved by Triad National Security, LLC, and the U.S. Department of Energy/National Nuclear +Security Administration. The Government is granted for itself and others acting on its behalf a +nonexclusive, paid-up, irrevocable worldwide license in this material to reproduce, prepare +derivative works, distribute copies to the public, perform publicly and display publicly, and +to permit others to do so. +This program is open source under the BSD-3 License. +Redistribution and use in source and binary forms, with or without modification, are permitted +provided that the following conditions are met: +1. Redistributions of source code must retain the above copyright notice, this list of +conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, this list of +conditions and the following disclaimer in the documentation and/or other materials +provided with the distribution. +3. Neither the name of the copyright holder nor the names of its contributors may be used +to endorse or promote products derived from this software without specific prior +written permission. +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +**********************************************************************************************/ + +///////////////////////////////////////////////////////////////////////////////////// +// ********** WARNING WARNING WARNING: TO BE REPLACED BY ELEMENTS ****************/// +///////////////////////////////////////////////////////////////////////////////////// + + +#include "geometry_new.h" + +///////////////////////////////////////////////////////////////////////////// +/// +/// \fn get_bmatrix +/// +/// \brief This function calculate the finite element B matrix: +/// +/// B_p = J^{-T} \cdot (\nabla_{xi} \phi_p w, where: +/// \phi_p is the basis function for vertex p +/// w is the 1 gauss point for the cell (everything is evaluated at this point) +/// J^{-T} is the inverse transpose of the Jacobi matrix +/// \nabla_{xi} is the gradient operator in the reference coordinates +/// B_p is the OUTWARD corner area normal at node p +/// +/// \param B matrix +/// \param Global index of the element +/// \param View of nodal position data +/// \param View of the elements node ids +/// +///////////////////////////////////////////////////////////////////////////// +KOKKOS_FUNCTION +void geometry::get_bmatrix(const ViewCArrayKokkos& B_matrix, + const size_t elem_gid, + const DCArrayKokkos& node_coords, + const ViewCArrayKokkos& elem_node_gids) +{ + const size_t num_nodes = 8; + + double x_array[8]; + double y_array[8]; + double z_array[8]; + + // x, y, z coordinates of elem vertices + auto x = ViewCArrayKokkos(x_array, num_nodes); + auto y = ViewCArrayKokkos(y_array, num_nodes); + auto z = ViewCArrayKokkos(z_array, num_nodes); + + // get the coordinates of the nodes(rk,elem,node) in this element + for (int node_lid = 0; node_lid < num_nodes; node_lid++) { + x(node_lid) = node_coords(1, elem_node_gids(node_lid), 0); + y(node_lid) = node_coords(1, elem_node_gids(node_lid), 1); + z(node_lid) = node_coords(1, elem_node_gids(node_lid), 2); + } // end for + + + double twelth = 1. / 12.; + + B_matrix(0, 0) = (+y(1) * (-z(3) - z(2) + z(4) + z(5) ) + + y(3) * (+z(1) - z(2) ) + + y(2) * (+z(1) + z(3) - z(4) - z(6) ) + + y(4) * (-z(1) + z(2) - z(5) + z(6) ) + + y(5) * (-z(1) + z(4) ) + + y(6) * (+z(2) - z(4) ) ) * twelth; + + B_matrix(1, 0) = (+y(0) * (+z(3) + z(2) - z(4) - z(5) ) + + y(3) * (-z(0) - z(2) + z(5) + z(7) ) + + y(2) * (-z(0) + z(3) ) + + y(4) * (+z(0) - z(5) ) + + y(5) * (+z(0) - z(3) + z(4) - z(7) ) + + y(7) * (-z(3) + z(5) ) ) * twelth; + + B_matrix(2, 0) = (+y(0) * (-z(1) - z(3) + z(4) + z(6) ) + + y(1) * (+z(0) - z(3) ) + + y(3) * (+z(0) + z(1) - z(7) - z(6) ) + + y(4) * (-z(0) + z(6) ) + + y(7) * (+z(3) - z(6) ) + + y(6) * (-z(0) + z(3) - z(4) + z(7) ) ) * twelth; + + B_matrix(3, 0) = (+y(0) * (-z(1) + z(2) ) + + y(1) * (+z(0) + z(2) - z(5) - z(7) ) + + y(2) * (-z(0) - z(1) + z(7) + z(6) ) + + y(5) * (+z(1) - z(7) ) + + y(7) * (+z(1) - z(2) + z(5) - z(6) ) + + y(6) * (-z(2) + z(7) ) ) * twelth; + + B_matrix(4, 0) = (+y(0) * (+z(1) - z(2) + z(5) - z(6) ) + + y(1) * (-z(0) + z(5) ) + + y(2) * (+z(0) - z(6) ) + + y(5) * (-z(0) - z(1) + z(7) + z(6) ) + + y(7) * (-z(5) + z(6) ) + + y(6) * (+z(0) + z(2) - z(5) - z(7) ) ) * twelth; + + B_matrix(5, 0) = (+y(0) * (+z(1) - z(4) ) + + y(1) * (-z(0) + z(3) - z(4) + z(7) ) + + y(3) * (-z(1) + z(7) ) + + y(4) * (+z(0) + z(1) - z(7) - z(6) ) + + y(7) * (-z(1) - z(3) + z(4) + z(6) ) + + y(6) * (+z(4) - z(7) ) ) * twelth; + + B_matrix(6, 0) = (+y(0) * (-z(2) + z(4) ) + + y(3) * (+z(2) - z(7) ) + + y(2) * (+z(0) - z(3) + z(4) - z(7) ) + + y(4) * (-z(0) - z(2) + z(5) + z(7) ) + + y(5) * (-z(4) + z(7) ) + + y(7) * (+z(3) + z(2) - z(4) - z(5) ) ) * twelth; + + B_matrix(7, 0) = (+y(1) * (+z(3) - z(5) ) + + y(3) * (-z(1) + z(2) - z(5) + z(6) ) + + y(2) * (-z(3) + z(6) ) + + y(4) * (+z(5) - z(6) ) + + y(5) * (+z(1) + z(3) - z(4) - z(6) ) + + y(6) * (-z(3) - z(2) + z(4) + z(5) ) ) * twelth; + + B_matrix(0, 1) = (+z(1) * (-x(3) - x(2) + x(4) + x(5) ) + + z(3) * (+x(1) - x(2) ) + + z(2) * (+x(1) + x(3) - x(4) - x(6) ) + + z(4) * (-x(1) + x(2) - x(5) + x(6) ) + + z(5) * (-x(1) + x(4) ) + + z(6) * (+x(2) - x(4) ) ) * twelth; + + B_matrix(1, 1) = (+z(0) * (+x(3) + x(2) - x(4) - x(5) ) + + z(3) * (-x(0) - x(2) + x(5) + x(7) ) + + z(2) * (-x(0) + x(3) ) + + z(4) * (+x(0) - x(5) ) + + z(5) * (+x(0) - x(3) + x(4) - x(7) ) + + z(7) * (-x(3) + x(5) ) ) * twelth; + + B_matrix(2, 1) = (+z(0) * (-x(1) - x(3) + x(4) + x(6) ) + + z(1) * (+x(0) - x(3) ) + + z(3) * (+x(0) + x(1) - x(7) - x(6) ) + + z(4) * (-x(0) + x(6) ) + + z(7) * (+x(3) - x(6) ) + + z(6) * (-x(0) + x(3) - x(4) + x(7) ) ) * twelth; + + B_matrix(3, 1) = (+z(0) * (-x(1) + x(2) ) + + z(1) * (+x(0) + x(2) - x(5) - x(7) ) + + z(2) * (-x(0) - x(1) + x(7) + x(6) ) + + z(5) * (+x(1) - x(7) ) + + z(7) * (+x(1) - x(2) + x(5) - x(6) ) + + z(6) * (-x(2) + x(7) ) ) * twelth; + + B_matrix(4, 1) = (+z(0) * (+x(1) - x(2) + x(5) - x(6) ) + + z(1) * (-x(0) + x(5) ) + + z(2) * (+x(0) - x(6) ) + + z(5) * (-x(0) - x(1) + x(7) + x(6) ) + + z(7) * (-x(5) + x(6) ) + + z(6) * (+x(0) + x(2) - x(5) - x(7) ) ) * twelth; + + B_matrix(5, 1) = (+z(0) * (+x(1) - x(4) ) + + z(1) * (-x(0) + x(3) - x(4) + x(7) ) + + z(3) * (-x(1) + x(7) ) + + z(4) * (+x(0) + x(1) - x(7) - x(6) ) + + z(7) * (-x(1) - x(3) + x(4) + x(6) ) + + z(6) * (+x(4) - x(7) ) ) * twelth; + + B_matrix(6, 1) = (+z(0) * (-x(2) + x(4) ) + + z(3) * (+x(2) - x(7) ) + + z(2) * (+x(0) - x(3) + x(4) - x(7) ) + + z(4) * (-x(0) - x(2) + x(5) + x(7) ) + + z(5) * (-x(4) + x(7) ) + + z(7) * (+x(3) + x(2) - x(4) - x(5) ) ) * twelth; + + B_matrix(7, 1) = (+z(1) * (+x(3) - x(5) ) + + z(3) * (-x(1) + x(2) - x(5) + x(6) ) + + z(2) * (-x(3) + x(6) ) + + z(4) * (+x(5) - x(6) ) + + z(5) * (+x(1) + x(3) - x(4) - x(6) ) + + z(6) * (-x(3) - x(2) + x(4) + x(5) ) ) * twelth; + + B_matrix(0, 2) = (+x(1) * (-y(3) - y(2) + y(4) + y(5) ) + + x(3) * (+y(1) - y(2) ) + + x(2) * (+y(1) + y(3) - y(4) - y(6) ) + + x(4) * (-y(1) + y(2) - y(5) + y(6) ) + + x(5) * (-y(1) + y(4) ) + + x(6) * (+y(2) - y(4) ) ) * twelth; + + B_matrix(1, 2) = (+x(0) * (+y(3) + y(2) - y(4) - y(5) ) + + x(3) * (-y(0) - y(2) + y(5) + y(7) ) + + x(2) * (-y(0) + y(3) ) + + x(4) * (+y(0) - y(5) ) + + x(5) * (+y(0) - y(3) + y(4) - y(7) ) + + x(7) * (-y(3) + y(5) ) ) * twelth; + + B_matrix(2, 2) = (+x(0) * (-y(1) - y(3) + y(4) + y(6) ) + + x(1) * (+y(0) - y(3) ) + + x(3) * (+y(0) + y(1) - y(7) - y(6) ) + + x(4) * (-y(0) + y(6) ) + + x(7) * (+y(3) - y(6) ) + + x(6) * (-y(0) + y(3) - y(4) + y(7) ) ) * twelth; + + B_matrix(3, 2) = (+x(0) * (-y(1) + y(2) ) + + x(1) * (+y(0) + y(2) - y(5) - y(7) ) + + x(2) * (-y(0) - y(1) + y(7) + y(6) ) + + x(5) * (+y(1) - y(7) ) + + x(7) * (+y(1) - y(2) + y(5) - y(6) ) + + x(6) * (-y(2) + y(7) ) ) * twelth; + + B_matrix(4, 2) = (+x(0) * (+y(1) - y(2) + y(5) - y(6) ) + + x(1) * (-y(0) + y(5) ) + + x(2) * (+y(0) - y(6) ) + + x(5) * (-y(0) - y(1) + y(7) + y(6) ) + + x(7) * (-y(5) + y(6) ) + + x(6) * (+y(0) + y(2) - y(5) - y(7) ) ) * twelth; + + B_matrix(5, 2) = (+x(0) * (+y(1) - y(4) ) + + x(1) * (-y(0) + y(3) - y(4) + y(7) ) + + x(3) * (-y(1) + y(7) ) + + x(4) * (+y(0) + y(1) - y(7) - y(6) ) + + x(7) * (-y(1) - y(3) + y(4) + y(6) ) + + x(6) * (+y(4) - y(7) ) ) * twelth; + + B_matrix(6, 2) = (+x(0) * (-y(2) + y(4) ) + + x(3) * (+y(2) - y(7) ) + + x(2) * (+y(0) - y(3) + y(4) - y(7) ) + + x(4) * (-y(0) - y(2) + y(5) + y(7) ) + + x(5) * (-y(4) + y(7) ) + + x(7) * (+y(3) + y(2) - y(4) - y(5) ) ) * twelth; + + B_matrix(7, 2) = (+x(1) * (+y(3) - y(5) ) + + x(3) * (-y(1) + y(2) - y(5) + y(6) ) + + x(2) * (-y(3) + y(6) ) + + x(4) * (+y(5) - y(6) ) + + x(5) * (+y(1) + y(3) - y(4) - y(6) ) + + x(6) * (-y(3) - y(2) + y(4) + y(5) ) ) * twelth; +} // end get_bmatrix + +///////////////////////////////////////////////////////////////////////////// +/// +/// \fn get_vol_quad +/// +/// \brief True volume of a quad in RZ coords +/// +/// \param Element volume +/// \param Global index of the element +/// \param Nodal coordinates +/// \param Global ids of the nodes in this element +/// +///////////////////////////////////////////////////////////////////////////// +KOKKOS_FUNCTION +void geometry::get_vol_quad(const DCArrayKokkos& elem_vol, + const size_t elem_gid, + const DCArrayKokkos& node_coords, + const ViewCArrayKokkos& elem_node_gids) +{ + elem_vol(elem_gid) = 0.0; + + const size_t num_nodes = 4; + + double x_array[4]; + double y_array[4]; + + // x, y coordinates of elem vertices + auto x = ViewCArrayKokkos(x_array, num_nodes); + auto y = ViewCArrayKokkos(y_array, num_nodes); + + // get the coordinates of the nodes(rk,elem,node) in this element + for (int node_lid = 0; node_lid < num_nodes; node_lid++) { + x(node_lid) = node_coords(1, elem_node_gids(node_lid), 0); + y(node_lid) = node_coords(1, elem_node_gids(node_lid), 1); + } // end for + + /* ensight node order 0 1 2 3 + Flanaghan node order 3 4 1 2 + */ + elem_vol(elem_gid) = + ( (y(2) + y(3) + y(0)) * ((y(2) - y(3)) * (x(0) - x(3)) - (y(0) - y(3)) * (x(2) - x(3)) ) + + (y(0) + y(1) + y(2)) * ((y(0) - y(1)) * (x(2) - x(1)) - (y(2) - y(1)) * (x(0) - x(1))) ) / 6.0; + + elem_vol(elem_gid) = fmax(elem_vol(elem_gid), 1.0E-14); + return; +} // end get_vol_quad + +///////////////////////////////////////////////////////////////////////////// +/// +/// \fn get_vol_hex +/// +/// \brief Exact volume for a hex element +/// +/// \param View of element volume data +/// \param Global element index +/// \param View into nodal position data +/// \param Runge Kutta time integration level +/// +///////////////////////////////////////////////////////////////////////////// +KOKKOS_FUNCTION +void geometry::get_vol_hex(const DCArrayKokkos& elem_vol, + const size_t elem_gid, + const DCArrayKokkos& node_coords, + const ViewCArrayKokkos& elem_node_gids) +{ + const size_t num_nodes = 8; + + double x_array[8]; + double y_array[8]; + double z_array[8]; + + // x, y, z coordinates of elem vertices + auto x = ViewCArrayKokkos(x_array, num_nodes); + auto y = ViewCArrayKokkos(y_array, num_nodes); + auto z = ViewCArrayKokkos(z_array, num_nodes); + + // get the coordinates of the nodes(rk,elem,node) in this element + for (int node_lid = 0; node_lid < num_nodes; node_lid++) { + x(node_lid) = node_coords(1, elem_node_gids(node_lid), 0); + y(node_lid) = node_coords(1, elem_node_gids(node_lid), 1); + z(node_lid) = node_coords(1, elem_node_gids(node_lid), 2); + } // end for + + double twelth = 1. / 12.; + + // element volume + elem_vol(elem_gid) = + (x(1) * (y(2) * (-z(0) + z(3)) + y(4) * (z(0) - z(5)) + y(0) * (z(3) + z(2) - z(4) - z(5)) + y(7) * (-z(3) + z(5)) + y(5) * (z(0) - z(3) + z(4) - z(7)) + y(3) * (-z(0) - z(2) + z(5) + z(7))) + + x(6) * (y(0) * (-z(2) + z(4)) + y(7) * (z(3) + z(2) - z(4) - z(5)) + y(3) * (z(2) - z(7)) + y(2) * (z(0) - z(3) + z(4) - z(7)) + y(5) * (-z(4) + z(7)) + y(4) * (-z(0) - z(2) + z(5) + z(7))) + + x(2) * (y(1) * (z(0) - z(3)) + y(6) * (-z(0) + z(3) - z(4) + z(7)) + y(7) * (z(3) - z(6)) + y(3) * (z(0) + z(1) - z(7) - z(6)) + y(4) * (-z(0) + z(6)) + y(0) * (-z(1) - z(3) + z(4) + z(6))) + + x(5) * (y(0) * (z(1) - z(4)) + y(6) * (z(4) - z(7)) + y(3) * (-z(1) + z(7)) + y(1) * (-z(0) + z(3) - z(4) + z(7)) + y(4) * (z(0) + z(1) - z(7) - z(6)) + y(7) * (-z(1) - z(3) + z(4) + z(6))) + + x(7) * (y(1) * (z(3) - z(5)) + y(6) * (-z(3) - z(2) + z(4) + z(5)) + y(5) * (z(1) + z(3) - z(4) - z(6)) + y(4) * (z(5) - z(6)) + y(2) * (-z(3) + z(6)) + y(3) * (-z(1) + z(2) - z(5) + z(6))) + + x(0) * (y(3) * (z(1) - z(2)) + y(6) * (z(2) - z(4)) + y(5) * (-z(1) + z(4)) + y(1) * (-z(3) - z(2) + z(4) + z(5)) + y(2) * (z(1) + z(3) - z(4) - z(6)) + y(4) * (-z(1) + z(2) - z(5) + z(6))) + + x(3) * (y(0) * (-z(1) + z(2)) + y(5) * (z(1) - z(7)) + y(1) * (z(0) + z(2) - z(5) - z(7)) + y(6) * (-z(2) + z(7)) + y(7) * (z(1) - z(2) + z(5) - z(6)) + y(2) * (-z(0) - z(1) + z(7) + z(6))) + + x(4) * + (y(1) * (-z(0) + z(5)) + y(6) * (z(0) + z(2) - z(5) - z(7)) + y(2) * (z(0) - z(6)) + y(0) * (z(1) - z(2) + z(5) - z(6)) + y(7) * (-z(5) + z(6)) + y(5) * (-z(0) - z(1) + z(7) + z(6)))) * + twelth; + + // std::cout<<"Calculating volume for hex = "<& elem_vol, + const DCArrayKokkos& node_coords, + const Mesh_t& mesh) +{ + const size_t num_dims = mesh.num_dims; + + if (num_dims == 2) { + FOR_ALL(elem_gid, 0, mesh.num_elems, { + // cut out the node_gids for this element + ViewCArrayKokkos elem_node_gids(&mesh.nodes_in_elem(elem_gid, 0), 4); + get_vol_quad(elem_vol, elem_gid, node_coords, elem_node_gids); + }); + Kokkos::fence(); + } + else{ + FOR_ALL(elem_gid, 0, mesh.num_elems, { + // cut out the node_gids for this element + ViewCArrayKokkos elem_node_gids(&mesh.nodes_in_elem(elem_gid, 0), 8); + get_vol_hex(elem_vol, elem_gid, node_coords, elem_node_gids); + }); + Kokkos::fence(); + } // end if + + return; +} // end get_vol + + +///////////////////////////////////////////////////////////////////////////// +/// +/// \fn get_bmatrix2D +/// +/// \brief Calculate the 2D finite element B matrix +/// +/// \param B Matrix +/// \param Global index of the element +/// \param Nodal coordinates +/// \param Global indices of the nodes of this element +/// +///////////////////////////////////////////////////////////////////////////// +KOKKOS_FUNCTION +void geometry::get_bmatrix2D(const ViewCArrayKokkos& B_matrix, + const size_t elem_gid, + const DCArrayKokkos& node_coords, + const ViewCArrayKokkos& elem_node_gids) +{ + const size_t num_nodes = 4; + + double x_array[4]; + double y_array[4]; + + // x, y coordinates of elem vertices + auto x = ViewCArrayKokkos(x_array, num_nodes); + auto y = ViewCArrayKokkos(y_array, num_nodes); + + // get the coordinates of the nodes(rk,elem,node) in this element + for (int node_lid = 0; node_lid < num_nodes; node_lid++) { + x(node_lid) = node_coords(1, elem_node_gids(node_lid), 0); + y(node_lid) = node_coords(1, elem_node_gids(node_lid), 1); + } // end for + + /* ensight node order 0 1 2 3 + Flanaghan node order 3 4 1 2 + */ + + B_matrix(0, 0) = -0.5 * (y(3) - y(1)); + + B_matrix(1, 0) = -0.5 * (y(0) - y(2)); + + B_matrix(2, 0) = -0.5 * (y(1) - y(3)); + + B_matrix(3, 0) = -0.5 * (y(2) - y(0)); + + B_matrix(0, 1) = -0.5 * (x(1) - x(3)); + + B_matrix(1, 1) = -0.5 * (x(2) - x(0)); + + B_matrix(2, 1) = -0.5 * (x(3) - x(1)); + + B_matrix(3, 1) = -0.5 * (x(0) - x(2)); + + // + /* + The Flanagan and Belytschko paper has: + x y + node 1: 0.5*(y2 - y4) , 0.5*(x4 - x2) + node 2: 0.5*(y3 - y1) , 0.5*(x1 - x3) + node 3: 0.5*(y4 - y2) , 0.5*(x2 - x4) + node 4: 0.5*(y1 - y3) , 0.5*(x3 - x1) + + Ensight order would be + + node 2: 0.5*(y3 - y1) , 0.5*(x1 - x3) + node 3: 0.5*(y0 - y2) , 0.5*(x2 - x0) + node 0: 0.5*(y1 - y3) , 0.5*(x3 - x1) + node 1: 0.5*(y2 - y0) , 0.5*(x0 - x2) + + */ + + return; +} // end get_bmatrix2D + + +///////////////////////////////////////////////////////////////////////////// +/// +/// \fn get_area_quad +/// +/// \brief Calculate the area of a elements face +/// +/// \param Global index of the element +/// \param Nodal coordinates +/// \param Global ids of the nodes in this element +/// +/// \return Elements face area (double) +/// +///////////////////////////////////////////////////////////////////////////// +KOKKOS_FUNCTION +double geometry::get_area_quad(const size_t elem_gid, + const DCArrayKokkos& node_coords, + const ViewCArrayKokkos& elem_node_gids) +{ + double elem_area = 0.0; + + const size_t num_nodes = 4; + + double x_array[4]; + double y_array[4]; + + // x, y coordinates of elem vertices + auto x = ViewCArrayKokkos(x_array, num_nodes); + auto y = ViewCArrayKokkos(y_array, num_nodes); + + // get the coordinates of the nodes(rk,elem,node) in this element + for (int node_lid = 0; node_lid < num_nodes; node_lid++) { + x(node_lid) = node_coords(1, elem_node_gids(node_lid), 0); + y(node_lid) = node_coords(1, elem_node_gids(node_lid), 1); + } // end for + + /* ensight node order 0 1 2 3 + Flanaghan node order 3 4 1 2 + */ + + // element facial area + elem_area = 0.5 * ((x(0) - x(2)) * (y(1) - y(3)) + (x(3) - x(1)) * (y(0) - y(2))); + + return elem_area; +} // end get_area_quad + +///////////////////////////////////////////////////////////////////////////// +/// +/// \fn heron +/// +/// \brief Calculate the area of a triangle using the heron algorithm +/// +/// \param Node 1 X coordinate +/// \param Node 1 Y coordinate +/// \param Node 2 X coordinate +/// \param Node 2 Y coordinate +/// \param Node 3 X coordinate +/// \param Node 3 Y coordinate +/// +/// \return Triangle area (double) +/// +///////////////////////////////////////////////////////////////////////////// +KOKKOS_FUNCTION +double geometry::heron(const double x1, + const double y1, + const double x2, + const double y2, + const double x3, + const double y3) +{ + double S, a, b, c, area; + + S = 0.0; + a = sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1)); + S += a; + b = sqrt((x3 - x2) * (x3 - x2) + (y3 - y2) * (y3 - y2)); + S += b; + c = sqrt((x3 - x1) * (x3 - x1) + (y3 - y1) * (y3 - y1)); + S += c; + + S *= 0.5; + area = sqrt(S * (S - a) * (S - b) * (S - c)); + + return area; +} // end heron + + +///////////////////////////////////////////////////////////////////////////// +/// +/// \fn get_area_weights2D +/// +/// \brief Calculate the corner weighted area +/// +/// \param Corner areas +/// \param Element global index +/// \param Nodal coordinates +/// \param Node global IDs associated with this element +/// +///////////////////////////////////////////////////////////////////////////// +KOKKOS_FUNCTION +void geometry::get_area_weights2D(const ViewCArrayKokkos& corner_areas, + const size_t elem_gid, + const DCArrayKokkos& node_coords, + const ViewCArrayKokkos& elem_node_gids) +{ + const size_t num_nodes = 4; + + double x_array[4]; + double y_array[4]; + + double rc, zc; + double A12, A23, A34, A41; + + // x, y coordinates of elem vertices + ViewCArrayKokkos x(x_array, num_nodes); + ViewCArrayKokkos y(y_array, num_nodes); + + // get the coordinates of the nodes(rk,elem,node) in this element + rc = zc = 0.0; + for (int node_lid = 0; node_lid < num_nodes; node_lid++) { + x(node_lid) = node_coords(1, elem_node_gids(node_lid), 0); + y(node_lid) = node_coords(1, elem_node_gids(node_lid), 1); + rc += 0.25 * y(node_lid); + zc += 0.25 * x(node_lid); + } // end for + + /* ensight node order 0 1 2 3 + Barlow node order 1 2 3 4 + */ + + A12 = heron(x(0), y(0), zc, rc, x(1), y(1)); + A23 = heron(x(1), y(1), zc, rc, x(2), y(2)); + A34 = heron(x(2), y(2), zc, rc, x(3), y(3)); + A41 = heron(x(3), y(3), zc, rc, x(0), y(0)); + + corner_areas(0) = (5. * A41 + 5. * A12 + A23 + A34) / 12.; + corner_areas(1) = (A41 + 5. * A12 + 5. * A23 + A34) / 12.; + corner_areas(2) = (A41 + A12 + 5. * A23 + 5. * A34) / 12.; + corner_areas(3) = (5. * A41 + A12 + A23 + 5. * A34) / 12.; + + return; +} // end get_area_weights2D + + +///////////////////////////////////////////////////////////////////////////// +/// +/// \fn check_bdy +/// +/// \brief routine for checking to see if a vertex is on a boundary +/// +/// \param Global id of a patch +/// \param Boundary condition tag (bc_tag = 0 xplane, 1 yplane, 2 zplane, 3 cylinder, 4 is shell) +/// \param Plane value +/// \param Simulation mesh +/// \param Nodal coordinates +/// +///////////////////////////////////////////////////////////////////////////// +KOKKOS_FUNCTION +size_t check_bdy(const size_t patch_gid, + const int this_bc_tag, + const double val, + const Mesh_t& mesh, + const DCArrayKokkos& node_coords) +{ + size_t num_dims = mesh.num_dims; + + // default bool is not on the boundary + size_t is_on_bdy = 0; + + // the patch coordinates + double these_patch_coords[3]; // Note: cannot allocated array with num_dims + + // loop over the nodes on the patch + for (size_t patch_node_lid = 0; patch_node_lid < mesh.num_nodes_in_patch; patch_node_lid++) { + // get the nodal_gid for this node in the patch + size_t node_gid = mesh.nodes_in_patch(patch_gid, patch_node_lid); + + for (size_t dim = 0; dim < num_dims; dim++) { + these_patch_coords[dim] = node_coords(1, node_gid, dim); // (rk, node_gid, dim) + } // end for dim + + // a x-plane + if (this_bc_tag == 0) { + if (fabs(these_patch_coords[0] - val) <= 1.0e-7) { + is_on_bdy += 1; + } + } // end if on type + // a y-plane + else if (this_bc_tag == 1) { + if (fabs(these_patch_coords[1] - val) <= 1.0e-7) { + is_on_bdy += 1; + } + } // end if on type + // a z-plane + else if (this_bc_tag == 2) { + if (fabs(these_patch_coords[2] - val) <= 1.0e-7) { + is_on_bdy += 1; + } + } // end if on type + // cylinderical shell where radius = sqrt(x^2 + y^2) + else if (this_bc_tag == 3) { + real_t R = sqrt(these_patch_coords[0] * these_patch_coords[0] + + these_patch_coords[1] * these_patch_coords[1]); + + if (fabs(R - val) <= 1.0e-7) { + is_on_bdy += 1; + } + } // end if on type + // spherical shell where radius = sqrt(x^2 + y^2 + z^2) + else if (this_bc_tag == 4) { + real_t R = sqrt(these_patch_coords[0] * these_patch_coords[0] + + these_patch_coords[1] * these_patch_coords[1] + + these_patch_coords[2] * these_patch_coords[2]); + + if (fabs(R - val) <= 1.0e-7) { + is_on_bdy += 1; + } + } // end if on type + } // end for nodes in the patch + + // if all nodes in the patch are on the geometry + if (is_on_bdy == mesh.num_nodes_in_patch) { + is_on_bdy = 1; + } + else{ + is_on_bdy = 0; + } + + return is_on_bdy; +} // end method to check bdy + + +///////////////////////////////////////////////////////////////////////////// +/// +/// \fn tag_bdys +/// +/// \brief set planes for tagging sub sets of boundary patches +/// +/// \param Boundary condition +/// \param Simulation mesh +/// \param Nodal coordinates +/// +///////////////////////////////////////////////////////////////////////////// +void tag_bdys(const BoundaryCondition_t& boundary, + Mesh_t& mesh, + const DCArrayKokkos& node_coords) +{ + // if (bdy_set == mesh.num_bdy_sets){ + // printf(" ERROR: number of boundary sets must be increased by %zu", + // bdy_set-mesh.num_bdy_sets+1); + // exit(0); + // } // end if + + FOR_ALL(bdy_set, 0, mesh.num_bdy_sets, { + // tag boundaries + int bc_tag_id = boundary.BoundaryConditionSetup(bdy_set).geometry; + double val = boundary.BoundaryConditionSetup(bdy_set).value; + + // save the boundary patches to this set that are on the plane, spheres, etc. + for (size_t bdy_patch_lid = 0; bdy_patch_lid < mesh.num_bdy_patches; bdy_patch_lid++) { + // save the patch index + size_t bdy_patch_gid = mesh.bdy_patches(bdy_patch_lid); + + // check to see if this patch is on the specified plane + size_t is_on_bdy = check_bdy(bdy_patch_gid, + bc_tag_id, + val, + mesh, + node_coords); // no=0, yes=1 + + if (is_on_bdy == 1) { + size_t index = mesh.bdy_patches_in_set.stride(bdy_set); + + // increment the number of boundary patches saved + mesh.bdy_patches_in_set.stride(bdy_set)++; + + mesh.bdy_patches_in_set(bdy_set, index) = bdy_patch_gid; + } // end if + } // end for bdy_patch + }); // end FOR_ALL bdy_sets + + return; +} // end tag \ No newline at end of file From 25c3a61afe2a033696f64a3e78e66184e9de1e4c Mon Sep 17 00:00:00 2001 From: Jacob Moore Date: Wed, 28 Aug 2024 13:41:43 -0500 Subject: [PATCH 168/233] ENH: Tidy up mesh (removed unused function definition) --- single-node-refactor/src/common/include/mesh.h | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/single-node-refactor/src/common/include/mesh.h b/single-node-refactor/src/common/include/mesh.h index 2d5dac76c..8a84ba624 100644 --- a/single-node-refactor/src/common/include/mesh.h +++ b/single-node-refactor/src/common/include/mesh.h @@ -1530,14 +1530,4 @@ struct Mesh_t } // end method to build boundary nodes }; // end Mesh_t -KOKKOS_FUNCTION -void decompose_vel_grad(ViewCArrayKokkos& D_tensor, - ViewCArrayKokkos& W_tensor, - const ViewCArrayKokkos& vel_grad, - const ViewCArrayKokkos& elem_node_gids, - const size_t elem_gid, - const DCArrayKokkos& node_coords, - const DCArrayKokkos& node_vel, - const double vol); - #endif \ No newline at end of file From b745a8bcbaf311a9a8f755506b17bf89f1f1dcc4 Mon Sep 17 00:00:00 2001 From: Jacob Moore Date: Wed, 28 Aug 2024 13:58:36 -0500 Subject: [PATCH 169/233] ENH: Silence cuda warnings --- .../src/Solvers/SGH_solver_3D/src/sgh_execute.cpp | 7 ++----- .../src/Solvers/SGH_solver_rz/src/properties_rz.cpp | 6 ------ .../src/Solvers/SGH_solver_rz/src/sgh_execute_rz.cpp | 12 +++--------- single-node-refactor/src/common/include/mesh_io.h | 12 +++++------- single-node-refactor/src/common/src/region_fill.cpp | 6 ------ single-node-refactor/src/solver.cpp | 2 +- 6 files changed, 11 insertions(+), 34 deletions(-) diff --git a/single-node-refactor/src/Solvers/SGH_solver_3D/src/sgh_execute.cpp b/single-node-refactor/src/Solvers/SGH_solver_3D/src/sgh_execute.cpp index 166649ab7..48d15cd65 100644 --- a/single-node-refactor/src/Solvers/SGH_solver_3D/src/sgh_execute.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver_3D/src/sgh_execute.cpp @@ -64,7 +64,7 @@ void SGH3D::execute(SimulationParameters_t& SimulationParamaters, double graphics_dt_ival = SimulationParamaters.output_options.graphics_time_step; int graphics_cyc_ival = SimulationParamaters.output_options.graphics_iteration_step; - double time_initial = SimulationParamaters.dynamic_options.time_initial; + // double time_initial = SimulationParamaters.dynamic_options.time_initial; double time_final = SimulationParamaters.dynamic_options.time_final; double dt_min = SimulationParamaters.dynamic_options.dt_min; double dt_max = SimulationParamaters.dynamic_options.dt_max; @@ -81,13 +81,10 @@ void SGH3D::execute(SimulationParameters_t& SimulationParamaters, // Create mesh writer MeshWriter mesh_writer; // Note: Pull to driver after refactoring evolution - // --- num vars ---- - size_t num_dims = 3; - + // --- Graphics vars ---- CArray graphics_times = CArray(20000); graphics_times(0) = 0.0; double graphics_time = 0.0; // the times for writing graphics dump - size_t graphics_id = 0; CArrayKokkos node_extensive_mass(mesh.num_nodes); diff --git a/single-node-refactor/src/Solvers/SGH_solver_rz/src/properties_rz.cpp b/single-node-refactor/src/Solvers/SGH_solver_rz/src/properties_rz.cpp index 36b908dbf..8dae70a32 100644 --- a/single-node-refactor/src/Solvers/SGH_solver_rz/src/properties_rz.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver_rz/src/properties_rz.cpp @@ -120,9 +120,6 @@ void SGHRZ::update_state_rz( // Note, with the SGH method, they are equal size_t mat_point_lid = mat_elem_lid; - // for this method, gauss point is equal to elem_gid - size_t gauss_gid = elem_gid; - // --- Pressure --- Materials.MaterialFunctions(mat_id).calc_pressure( MaterialPoints_pres, @@ -240,9 +237,6 @@ void SGHRZ::update_state_rz( // Note, with the SGH method, they are equal size_t mat_point_lid = mat_elem_lid; - // for this method, gauss point is equal to elem_gid - size_t gauss_gid = elem_gid; - // --- Element erosion model --- Materials.MaterialFunctions(mat_id).erode( MaterialPoints_eroded, diff --git a/single-node-refactor/src/Solvers/SGH_solver_rz/src/sgh_execute_rz.cpp b/single-node-refactor/src/Solvers/SGH_solver_rz/src/sgh_execute_rz.cpp index 7507d9bf2..44c41d7d7 100644 --- a/single-node-refactor/src/Solvers/SGH_solver_rz/src/sgh_execute_rz.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver_rz/src/sgh_execute_rz.cpp @@ -58,13 +58,13 @@ void SGHRZ::execute(SimulationParameters_t& SimulationParamaters, std::cout << "In execute function in SGHRZ solver" << std::endl; double fuzz = SimulationParamaters.dynamic_options.fuzz; - double tiny = SimulationParamaters.dynamic_options.tiny; + // double tiny = SimulationParamaters.dynamic_options.tiny; double small = SimulationParamaters.dynamic_options.small; double graphics_dt_ival = SimulationParamaters.output_options.graphics_time_step; int graphics_cyc_ival = SimulationParamaters.output_options.graphics_iteration_step; - double time_initial = SimulationParamaters.dynamic_options.time_initial; + // double time_initial = SimulationParamaters.dynamic_options.time_initial; double time_final = SimulationParamaters.dynamic_options.time_final; double dt_min = SimulationParamaters.dynamic_options.dt_min; double dt_max = SimulationParamaters.dynamic_options.dt_max; @@ -81,19 +81,13 @@ void SGHRZ::execute(SimulationParameters_t& SimulationParamaters, // Create mesh writer MeshWriter mesh_writer; // Note: Pull to driver after refactoring evolution - // --- num vars ---- - + // --- graphics vars ---- CArray graphics_times = CArray(20000); graphics_times(0) = 0.0; double graphics_time = 0.0; // the times for writing graphics dump - size_t graphics_id = 0; double cached_pregraphics_dt = dt_start; - - // printf("Writing outputs to file at %f \n", time_value); - // mesh_writer.write_mesh(mesh, MaterialPoints, node, corner, SimulationParamaters, time_value, graphics_times); - CArrayKokkos node_extensive_mass(mesh.num_nodes); // calculate the extensive node mass, its key to 2D diff --git a/single-node-refactor/src/common/include/mesh_io.h b/single-node-refactor/src/common/include/mesh_io.h index a47bbdf17..7a71eea6e 100644 --- a/single-node-refactor/src/common/include/mesh_io.h +++ b/single-node-refactor/src/common/include/mesh_io.h @@ -845,16 +845,16 @@ class MeshBuilder const double dz = lz/((double)num_zones_k); // len/(num_zones_k) const int num_elems = num_elems_i*num_elems_j*num_elems_k; - const int num_zones = num_zones_i*num_zones_j*num_zones_k; // accounts for Pn + // const int num_zones = num_zones_i*num_zones_j*num_zones_k; // accounts for Pn std::vector origin(num_dim); // SimulationParamaters.mesh_input.origin.update_host(); for (int i = 0; i < num_dim; i++) { origin[i] = SimulationParamaters.mesh_input.origin[i]; } // --- 3D parameters --- - const int num_faces_in_zone = 6; // number of faces in zone - const int num_points_in_zone = 8; // number of points in zone - const int num_points_in_face = 4; // number of points in a face + // const int num_faces_in_zone = 6; // number of faces in zone + // const int num_points_in_zone = 8; // number of points in zone + // const int num_points_in_face = 4; // number of points in a face // p_order = 1, 2, 3, 4, 5 // num_nodes = 2, 3, 4, 5, 6 @@ -863,13 +863,11 @@ class MeshBuilder // --- elem --- - int elem_id = 0; auto elem_coords = CArray (num_elems, num_dim); auto elem_point_list = CArray (num_elems, num_points_in_elem); // --- point --- - int point_id = 0; int num_points = num_points_i * num_points_j * num_points_k; auto pt_coords = CArray (num_points, num_dim); @@ -1695,7 +1693,7 @@ class MeshWriter int Pn_order = mesh.Pn; int order[3] = { Pn_order, Pn_order, Pn_order }; - const int num_1D_points = Pn_order+1; + // const int num_1D_points = Pn_order+1; // write all global point numbers for this elem for (size_t elem_gid = 0; elem_gid < mesh.num_elems; elem_gid++) { diff --git a/single-node-refactor/src/common/src/region_fill.cpp b/single-node-refactor/src/common/src/region_fill.cpp index 4df0abbe2..b9f01bfbe 100644 --- a/single-node-refactor/src/common/src/region_fill.cpp +++ b/single-node-refactor/src/common/src/region_fill.cpp @@ -84,16 +84,11 @@ void user_voxel_init(DCArrayKokkos& elem_values, } // end if size_t i; // used for writing information to file - size_t point_id; // the global id for the point - size_t elem_id; // the global id for the elem - size_t this_point; // a local id for a point in a elem (0:7 for a Hexahedral elem) size_t num_points_i; size_t num_points_j; size_t num_points_k; - size_t num_dims = 3; - std::string token; bool found = false; @@ -129,7 +124,6 @@ void user_voxel_init(DCArrayKokkos& elem_values, found = false; - int num_points = num_points_i * num_points_j * num_points_k; CArray pt_coords_x(num_points_i); CArray pt_coords_y(num_points_j); CArray pt_coords_z(num_points_k); diff --git a/single-node-refactor/src/solver.cpp b/single-node-refactor/src/solver.cpp index d028970e5..341e6dedc 100644 --- a/single-node-refactor/src/solver.cpp +++ b/single-node-refactor/src/solver.cpp @@ -81,6 +81,6 @@ double Solver::CPU_Time() ///////////////////////////////////////////////////////////////////////////// void Solver::init_clock() { - double current_cpu = 0; + // double current_cpu = 0; initial_CPU_time = CPU_Time(); } From 9aff31cdd1e49756ec81e6e20950d9140f8f63be Mon Sep 17 00:00:00 2001 From: Jacob Moore Date: Wed, 28 Aug 2024 14:11:30 -0500 Subject: [PATCH 170/233] ENH: Pull RZ functions from 3D solver --- .../SGH_solver_3D/include/sgh_solver_3D.h | 12 --- .../Solvers/SGH_solver_3D/src/sgh_execute.cpp | 84 +------------------ .../SGH_solver_rz/src/sgh_execute_rz.cpp | 2 +- .../src/common/include/mesh_io.h | 5 +- 4 files changed, 6 insertions(+), 97 deletions(-) diff --git a/single-node-refactor/src/Solvers/SGH_solver_3D/include/sgh_solver_3D.h b/single-node-refactor/src/Solvers/SGH_solver_3D/include/sgh_solver_3D.h index 8240e6d98..93d9f4e79 100644 --- a/single-node-refactor/src/Solvers/SGH_solver_3D/include/sgh_solver_3D.h +++ b/single-node-refactor/src/Solvers/SGH_solver_3D/include/sgh_solver_3D.h @@ -329,18 +329,6 @@ class SGH3D : public Solver const double rk_alpha); }; -void calc_extensive_node_mass(const CArrayKokkos& node_extensive_mass, - const DCArrayKokkos& node_coords, - const DCArrayKokkos& node_mass, - const double num_dims, - const double num_nodes); - -void calc_node_areal_mass(const Mesh_t& mesh, - const DCArrayKokkos& node_coords, - const DCArrayKokkos& node_mass, - CArrayKokkos node_extensive_mass, - double tiny); - double sum_domain_internal_energy(const DCArrayKokkos& MaterialPoints_mass, const DCArrayKokkos& MaterialPoints_sie, const size_t num_mat_points); diff --git a/single-node-refactor/src/Solvers/SGH_solver_3D/src/sgh_execute.cpp b/single-node-refactor/src/Solvers/SGH_solver_3D/src/sgh_execute.cpp index 48d15cd65..b375ee883 100644 --- a/single-node-refactor/src/Solvers/SGH_solver_3D/src/sgh_execute.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver_3D/src/sgh_execute.cpp @@ -58,7 +58,7 @@ void SGH3D::execute(SimulationParameters_t& SimulationParamaters, std::cout << "In execute function in SGH3D solver" << std::endl; double fuzz = SimulationParamaters.dynamic_options.fuzz; - double tiny = SimulationParamaters.dynamic_options.tiny; + // double tiny = SimulationParamaters.dynamic_options.tiny; double small = SimulationParamaters.dynamic_options.small; double graphics_dt_ival = SimulationParamaters.output_options.graphics_time_step; @@ -86,8 +86,6 @@ void SGH3D::execute(SimulationParameters_t& SimulationParamaters, graphics_times(0) = 0.0; double graphics_time = 0.0; // the times for writing graphics dump - CArrayKokkos node_extensive_mass(mesh.num_nodes); - std::cout << "Applying initial boundary conditions" << std::endl; boundary_velocity(mesh, BoundaryConditions, State.node.vel, time_value); // Time value = 0.0; @@ -98,13 +96,6 @@ void SGH3D::execute(SimulationParameters_t& SimulationParamaters, double cached_pregraphics_dt = fuzz; - // calculate the extensive node mass, its key to 2D - calc_extensive_node_mass(node_extensive_mass, - State.node.coords, - State.node.mass, - mesh.num_dims, - mesh.num_nodes); - // the number of materials specified by the user input const size_t num_mats = Materials.num_mats; @@ -412,7 +403,7 @@ void SGH3D::execute(SimulationParameters_t& SimulationParamaters, printf("Time=0: KE = %f, IE = %f, TE = %f \n", KE_t0, IE_t0, TE_t0); printf("Time=End: KE = %f, IE = %f, TE = %f \n", KE_tend, IE_tend, TE_tend); - printf("total energy change = %e \n\n", TE_tend - TE_t0); + printf("total energy change = %.15e \n\n", TE_tend - TE_t0); // domain mass for each material (they are at material points) double mass_domain_all_mats_tend = 0.0; @@ -515,69 +506,6 @@ double max_Eigen3D(const ViewCArrayKokkos tensor) return abs_max_val; } -///////////////////////////////////////////////////////////////////////////// -/// -/// \fn max_Eigen2D -/// -/// \brief Get the maximum eigenvalues of a given tensor -/// -/// \param Input tensor -/// -///////////////////////////////////////////////////////////////////////////// -KOKKOS_FUNCTION -double max_Eigen2D(const ViewCArrayKokkos tensor) -{ - // Compute largest eigenvalue of a 2x2 tensor - // Algorithm only works if tensor is symmetric - size_t dim = tensor.dims(0); - double trace, det; - - trace = tensor(0, 0) + tensor(1, 1); - det = tensor(0, 0) * tensor(1, 1) - tensor(0, 1) * tensor(1, 0); - - double eig1, eig2; - - eig1 = (trace / 2.) + sqrt(0.25 * trace * trace - det); - eig2 = (trace / 2.) - sqrt(0.25 * trace * trace - det); - - double abs_max_val = fmax(fabs(eig1), fabs(eig2)); - return abs_max_val; -} // end 2D max eignen value - -///////////////////////////////////////////////////////////////////////////// -/// -/// \fn calc_extensive_node_mass -/// -/// \brief -/// -/// -/// -/// \param -/// \param -/// \param -/// -/// \return -/// -///////////////////////////////////////////////////////////////////////////// -void calc_extensive_node_mass(const CArrayKokkos& node_extensive_mass, - const DCArrayKokkos& node_coords, - const DCArrayKokkos& node_mass, - double num_dims, - double num_nodes) -{ - // save the nodal mass - FOR_ALL(node_gid, 0, num_nodes, { - double radius = 1.0; - - if (num_dims == 2) { - radius = node_coords(1, node_gid, 1); - } - - node_extensive_mass(node_gid) = node_mass(node_gid) * radius; - }); // end parallel for -} // end function - // a function to tally the internal energy double sum_domain_internal_energy(const DCArrayKokkos& MaterialPoints_mass, const DCArrayKokkos& MaterialPoints_sie, @@ -627,12 +555,8 @@ double sum_domain_kinetic_energy(const Mesh_t& mesh, ke += node_vel(1, node_gid, dim) * node_vel(1, node_gid, dim); // 1/2 at end } // end for - if (mesh.num_dims == 2) { - KE_loc_sum += node_mass(node_gid) * node_coords(1, node_gid, 1) * ke; - } - else{ - KE_loc_sum += node_mass(node_gid) * ke; - } + KE_loc_sum += node_mass(node_gid) * ke; + }, KE_sum); Kokkos::fence(); diff --git a/single-node-refactor/src/Solvers/SGH_solver_rz/src/sgh_execute_rz.cpp b/single-node-refactor/src/Solvers/SGH_solver_rz/src/sgh_execute_rz.cpp index 44c41d7d7..c71c8001f 100644 --- a/single-node-refactor/src/Solvers/SGH_solver_rz/src/sgh_execute_rz.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver_rz/src/sgh_execute_rz.cpp @@ -58,7 +58,7 @@ void SGHRZ::execute(SimulationParameters_t& SimulationParamaters, std::cout << "In execute function in SGHRZ solver" << std::endl; double fuzz = SimulationParamaters.dynamic_options.fuzz; - // double tiny = SimulationParamaters.dynamic_options.tiny; + double tiny = SimulationParamaters.dynamic_options.tiny; double small = SimulationParamaters.dynamic_options.small; double graphics_dt_ival = SimulationParamaters.output_options.graphics_time_step; diff --git a/single-node-refactor/src/common/include/mesh_io.h b/single-node-refactor/src/common/include/mesh_io.h index 7a71eea6e..b07107116 100644 --- a/single-node-refactor/src/common/include/mesh_io.h +++ b/single-node-refactor/src/common/include/mesh_io.h @@ -153,12 +153,9 @@ class MeshReader // Check mesh file extension // and read based on extension read_ensight_mesh(mesh, State.GaussPoints, State.node, State.corner, num_dims, rk_num_bins); + } - // void write_mesh(Mesh_t& mesh, - // State_t& State, - // SimulationParameters_t& SimulationParamaters, - ///////////////////////////////////////////////////////////////////////////// /// /// \fn read_ensight_mesh From 2a43bdfb818ce7f546fb98e9baef63ab436f2091 Mon Sep 17 00:00:00 2001 From: Jacob Moore Date: Wed, 28 Aug 2024 14:15:29 -0500 Subject: [PATCH 171/233] ENH: Add basic abaqus mesh reader --- .../src/common/include/mesh_io.h | 221 +++++++++++++++++- 1 file changed, 216 insertions(+), 5 deletions(-) diff --git a/single-node-refactor/src/common/include/mesh_io.h b/single-node-refactor/src/common/include/mesh_io.h index b07107116..998216022 100644 --- a/single-node-refactor/src/common/include/mesh_io.h +++ b/single-node-refactor/src/common/include/mesh_io.h @@ -44,6 +44,10 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include #include #include +#include +#include +#include +#include ///////////////////////////////////////////////////////////////////////////// /// @@ -104,6 +108,18 @@ int get_id_device(int i, int j, int k, int num_i, int num_j) ///////////////////////////////////////////////////////////////////////////// class MeshReader { +private: + // Handy structs for parsing input meshes + struct Node { + int id; + double x, y, z; + }; + + struct Element { + int id; + std::vector connectivity; + }; + public: char* mesh_file_ = NULL; @@ -146,14 +162,37 @@ class MeshReader int rk_num_bins) { if (mesh_file_ == NULL) { - printf("No mesh given\n"); - exit(0); + throw std::runtime_error("**** No mesh path given for read_mesh ****"); } // Check mesh file extension // and read based on extension - read_ensight_mesh(mesh, State.GaussPoints, State.node, State.corner, num_dims, rk_num_bins); - + std::string filePathStr(mesh_file_); + std::string extension; + + size_t pos = filePathStr.rfind('.'); + if (pos != std::string::npos) { + extension = filePathStr.substr(pos + 1); + } else { + extension = ""; + } + + std::cout << "File extension is: " << extension << std::endl; + + if(extension == "geo"){ // Ensight meshfile extension + read_ensight_mesh(mesh, State.GaussPoints, State.node, State.corner, num_dims, rk_num_bins); + } + else if(extension == "inp"){ // Abaqus meshfile extension + read_Abaqus_mesh(mesh, State, num_dims, rk_num_bins); + } + else if(extension == "vtk"){ // vtk file format + throw std::runtime_error("**** VTK mesh reader not yet implemented ****"); + // read_VTK_mesh(mesh, State, num_dims, rk_num_bins); + } + else{ + throw std::runtime_error("**** Mesh file extension not understood ****"); + } + } ///////////////////////////////////////////////////////////////////////////// @@ -309,7 +348,179 @@ class MeshReader mesh.build_connectivity(); return; - } + } // end read ensight mesh + + ///////////////////////////////////////////////////////////////////////////// + /// + /// \fn read_ensight_mesh + /// + /// \brief Read .geo mesh file + /// + /// \param Simulation mesh + /// \param Simulation state + /// \param Node state struct + /// \param Number of dimensions + /// \param Number of RK bins + /// + ///////////////////////////////////////////////////////////////////////////// + void read_Abaqus_mesh(Mesh_t& mesh, + State_t& State, + int num_dims, + int rk_num_bins) + { + + std::cout<<"Reading abaqus input file for mesh"< nodes; + std::vector elements; + + std::string line; + bool readingNodes = false; + bool readingElements = false; + + int nodeCount = 0; + int elemCount = 0; + + while (std::getline(inputFile, line)) { + if (line.find("*Node") != std::string::npos) { + readingNodes = true; + std::cout<<"Found *Node"<> node.id && std::getline(iss, token, ',') && iss >> node.x && + std::getline(iss, token, ',') && iss >> node.y && + std::getline(iss, token, ',') && iss >> node.z)) { + std::cerr << "Failed to parse line: " << line << std::endl; + continue; // Skip this line if parsing failed + } + nodes.push_back(node); + } + + if (line.find("*Element") != std::string::npos) { + readingElements = true; + std::cout<<"Found *Element*"<> element.id)){ + std::cout << "Failed to parse line: " << line << std::endl; + continue; // Skip this line if parsing failed + } + + while ((std::getline(iss, token, ','))) { + // Now extract the integer, ignoring any trailing whitespace + int val; + iss >> val; + element.connectivity.push_back(val); + } + + // Convert from abaqus to IJK mesh + int convert_abq_to_ijk[8]; + convert_abq_to_ijk[0] = 0; + convert_abq_to_ijk[1] = 1; + convert_abq_to_ijk[2] = 3; + convert_abq_to_ijk[3] = 2; + convert_abq_to_ijk[4] = 4; + convert_abq_to_ijk[5] = 5; + convert_abq_to_ijk[6] = 7; + convert_abq_to_ijk[7] = 6; + + int tmp_ijk_indx[8]; + + for (int node_lid = 0; node_lid < 8; node_lid++) { + tmp_ijk_indx[node_lid] = element.connectivity[convert_abq_to_ijk[node_lid]]; + } + + for (int node_lid = 0; node_lid < 8; node_lid++){ + element.connectivity[node_lid] = tmp_ijk_indx[node_lid]; + } + + elements.push_back(element); + } + } + + inputFile.close(); + + size_t num_nodes = nodes.size(); + + printf("Number if nodes read in %lu\n", num_nodes); + + // initialize node variables + mesh.initialize_nodes(num_nodes); + State.node.initialize(rk_num_bins, num_nodes, num_dims); + + + // Copy nodes to mesh + for(int node_gid = 0; node_gid < num_nodes; node_gid++){ + State.node.coords.host(0, node_gid, 0) = nodes[node_gid].x; + State.node.coords.host(0, node_gid, 1) = nodes[node_gid].y; + State.node.coords.host(0, node_gid, 2) = nodes[node_gid].z; + } + + // save the node coords to the current RK value + for (size_t node_gid = 0; node_gid < num_nodes; node_gid++) { + for (int rk = 1; rk < rk_num_bins; rk++) { + for (int dim = 0; dim < num_dims; dim++) { + State.node.coords.host(rk, node_gid, dim) = State.node.coords.host(0, node_gid, dim); + } // end for dim + } // end for rk + } // end parallel for + + // Update device nodal positions + State.node.coords.update_device(); + + + // --- read in the elements in the mesh --- + size_t num_elem = elements.size(); + printf("Number of elements read in %lu\n", num_elem); + + // initialize elem variables + mesh.initialize_elems(num_elem, num_dims); + State.GaussPoints.initialize(rk_num_bins, num_elem, 3); // always 3D here, even for 2D + + + // for each cell read the list of associated nodes + for (int elem_gid = 0; elem_gid < num_elem; elem_gid++) { + for (int node_lid = 0; node_lid < 8; node_lid++) { + mesh.nodes_in_elem.host(elem_gid, node_lid) = elements[elem_gid].connectivity[node_lid]; + + // shift to start node index space at 0 + mesh.nodes_in_elem.host(elem_gid, node_lid) -= 1; + } + } + + // update device side + mesh.nodes_in_elem.update_device(); + + // initialize corner variables + int num_corners = num_elem * mesh.num_nodes_in_elem; + mesh.initialize_corners(num_corners); + State.corner.initialize(num_corners, num_dims); + + // Build connectivity + mesh.build_connectivity(); + } // end read abaqus mesh }; ///////////////////////////////////////////////////////////////////////////// From 937f9dcc13d28a886471b85068ae81f0ab2aa521 Mon Sep 17 00:00:00 2001 From: Jacob Moore Date: Wed, 28 Aug 2024 14:39:04 -0500 Subject: [PATCH 172/233] ENH: Adding Abaqus mesh reader and testing --- .../standard_inputs/Abaqus_read.yaml | 134 ++ .../standard_inputs/meshes/abaqus.inp | 1559 +++++++++++++++++ .../state/mat_pt_state_t_1.0000e+00.txt | 642 +++++++ .../regression_tests/test_refactor.py | 4 +- .../src/common/include/mesh_io.h | 11 +- 5 files changed, 2345 insertions(+), 5 deletions(-) create mode 100644 single-node-refactor/regression_tests/standard_inputs/Abaqus_read.yaml create mode 100644 single-node-refactor/regression_tests/standard_inputs/meshes/abaqus.inp create mode 100644 single-node-refactor/regression_tests/standard_results/Abaqus_read/state/mat_pt_state_t_1.0000e+00.txt diff --git a/single-node-refactor/regression_tests/standard_inputs/Abaqus_read.yaml b/single-node-refactor/regression_tests/standard_inputs/Abaqus_read.yaml new file mode 100644 index 000000000..b9d527322 --- /dev/null +++ b/single-node-refactor/regression_tests/standard_inputs/Abaqus_read.yaml @@ -0,0 +1,134 @@ +# num_dims: 3 + +dynamic_options: + time_final: 1.0 + dt_min: 1.e-8 + dt_max: 1.e-2 + dt_start: 1.e-5 + cycle_stop: 50000 + +mesh_options: + source: file + file_path: /var/tmp/repos/Fierro/single-node-refactor/regression_tests/standard_inputs/meshes/abaqus.inp + num_dims: 3 + +# mesh_options: +# source: generate +# num_dims: 3 +# type: box +# origin: [-4.0,-4.0, 0.0] +# length: [8.0, 8.0, 10.0] +# num_elems: [20, 20, 10] + +output_options: + timer_output_level: thorough + output_file_format: state + graphics_time_step: 1.0 + # graphics_iteration_step: 10 + +solver_options: + - solver: + method: SGH3D + # solver_vars: + # - blah + # - blah + # - blah + +boundary_conditions: + # Tag X plane + - boundary_condition: + solver: SGH3D + geometry: x_plane + direction: x_dir + value: -4.0 + type: reflected_velocity + + - boundary_condition: + solver: SGH3D + geometry: x_plane + direction: x_dir + value: 4.0 + type: reflected_velocity + + + # Tag Y plane + - boundary_condition: + solver: SGH3D + geometry: y_plane + direction: y_dir + value: -4.0 + type: reflected_velocity + + - boundary_condition: + solver: SGH3D + geometry: y_plane + direction: y_dir + value: 4.0 + type: reflected_velocity + + # Tag z plane + - boundary_condition: + solver: SGH3D + geometry: z_plane + direction: z_dir + value: 0.0 + type: reflected_velocity + + + +materials: + - material: + id: 0 + eos_model_type: decoupled + eos_model: gamma_law_gas + # strength_model: none + q1: 1.0 + q2: 1.333 + q1ex: 1.0 + q2ex: 1.333 + eos_global_vars: + - 1.666666666666667 + - 1.0E-14 + - 1.0 + +regions: + - fill_volume: + type: global + material_id: 0 + den: 1.0 + sie: 1.e-10 + velocity: cartesian + u: 0.0 + v: 0.0 + w: 0.0 + + # energy source initial conditions + # - fill_volume: + # type: sphere + # origin: [0.0, 0.0, 0.0] + # radius1: 0.0 + # radius2: 1.0 + # material_id: 0 + # den: 1.0 + # # ie: 0.25833839995946534 + # sie: 61.67375002 # 963.652344 + # velocity: cartesian + # u: 0.0 + # v: 0.0 + # w: 0.0 + + - fill_volume: + type: box + x1: -4.0 + x2: 4.0 + y1: -4.0 + y2: 4.0 + z1: 0.0 + z2: 1.0 + material_id: 0 + den: 1.0 + sie: 61.67375002 + velocity: cartesian + u: 0.0 + v: 0.0 + w: 0.0 \ No newline at end of file diff --git a/single-node-refactor/regression_tests/standard_inputs/meshes/abaqus.inp b/single-node-refactor/regression_tests/standard_inputs/meshes/abaqus.inp new file mode 100644 index 000000000..15dacc294 --- /dev/null +++ b/single-node-refactor/regression_tests/standard_inputs/meshes/abaqus.inp @@ -0,0 +1,1559 @@ +*Heading + test +** Job name: Job-1 Model name: Model-1 +** Generated by: Abaqus/CAE 2023 +*Preprint, echo=NO, model=NO, history=NO, contact=NO +** +** PARTS +** +*Part, name=Part-1 +*Node + 1, -4., -4., 10. + 2, -4., -3., 10. + 3, -4., -2., 10. + 4, -4., -1., 10. + 5, -4., 0., 10. + 6, -4., 1., 10. + 7, -4., 2., 10. + 8, -4., 3., 10. + 9, -4., 4., 10. + 10, -4., -4., 9. + 11, -4., -3., 9. + 12, -4., -2., 9. + 13, -4., -1., 9. + 14, -4., 0., 9. + 15, -4., 1., 9. + 16, -4., 2., 9. + 17, -4., 3., 9. + 18, -4., 4., 9. + 19, -4., -4., 8. + 20, -4., -3., 8. + 21, -4., -2., 8. + 22, -4., -1., 8. + 23, -4., 0., 8. + 24, -4., 1., 8. + 25, -4., 2., 8. + 26, -4., 3., 8. + 27, -4., 4., 8. + 28, -4., -4., 7. + 29, -4., -3., 7. + 30, -4., -2., 7. + 31, -4., -1., 7. + 32, -4., 0., 7. + 33, -4., 1., 7. + 34, -4., 2., 7. + 35, -4., 3., 7. + 36, -4., 4., 7. + 37, -4., -4., 6. + 38, -4., -3., 6. + 39, -4., -2., 6. + 40, -4., -1., 6. + 41, -4., 0., 6. + 42, -4., 1., 6. + 43, -4., 2., 6. + 44, -4., 3., 6. + 45, -4., 4., 6. + 46, -4., -4., 5. + 47, -4., -3., 5. + 48, -4., -2., 5. + 49, -4., -1., 5. + 50, -4., 0., 5. + 51, -4., 1., 5. + 52, -4., 2., 5. + 53, -4., 3., 5. + 54, -4., 4., 5. + 55, -4., -4., 4. + 56, -4., -3., 4. + 57, -4., -2., 4. + 58, -4., -1., 4. + 59, -4., 0., 4. + 60, -4., 1., 4. + 61, -4., 2., 4. + 62, -4., 3., 4. + 63, -4., 4., 4. + 64, -4., -4., 3. + 65, -4., -3., 3. + 66, -4., -2., 3. + 67, -4., -1., 3. + 68, -4., 0., 3. + 69, -4., 1., 3. + 70, -4., 2., 3. + 71, -4., 3., 3. + 72, -4., 4., 3. + 73, -4., -4., 2. + 74, -4., -3., 2. + 75, -4., -2., 2. + 76, -4., -1., 2. + 77, -4., 0., 2. + 78, -4., 1., 2. + 79, -4., 2., 2. + 80, -4., 3., 2. + 81, -4., 4., 2. + 82, -4., -4., 1. + 83, -4., -3., 1. + 84, -4., -2., 1. + 85, -4., -1., 1. + 86, -4., 0., 1. + 87, -4., 1., 1. + 88, -4., 2., 1. + 89, -4., 3., 1. + 90, -4., 4., 1. + 91, -4., -4., 0. + 92, -4., -3., 0. + 93, -4., -2., 0. + 94, -4., -1., 0. + 95, -4., 0., 0. + 96, -4., 1., 0. + 97, -4., 2., 0. + 98, -4., 3., 0. + 99, -4., 4., 0. + 100, -3., -4., 10. + 101, -3., -3., 10. + 102, -3., -2., 10. + 103, -3., -1., 10. + 104, -3., 0., 10. + 105, -3., 1., 10. + 106, -3., 2., 10. + 107, -3., 3., 10. + 108, -3., 4., 10. + 109, -3., -4., 9. + 110, -3., -3., 9. + 111, -3., -2., 9. + 112, -3., -1., 9. + 113, -3., 0., 9. + 114, -3., 1., 9. + 115, -3., 2., 9. + 116, -3., 3., 9. + 117, -3., 4., 9. + 118, -3., -4., 8. + 119, -3., -3., 8. + 120, -3., -2., 8. + 121, -3., -1., 8. + 122, -3., 0., 8. + 123, -3., 1., 8. + 124, -3., 2., 8. + 125, -3., 3., 8. + 126, -3., 4., 8. + 127, -3., -4., 7. + 128, -3., -3., 7. + 129, -3., -2., 7. + 130, -3., -1., 7. + 131, -3., 0., 7. + 132, -3., 1., 7. + 133, -3., 2., 7. + 134, -3., 3., 7. + 135, -3., 4., 7. + 136, -3., -4., 6. + 137, -3., -3., 6. + 138, -3., -2., 6. + 139, -3., -1., 6. + 140, -3., 0., 6. + 141, -3., 1., 6. + 142, -3., 2., 6. + 143, -3., 3., 6. + 144, -3., 4., 6. + 145, -3., -4., 5. + 146, -3., -3., 5. + 147, -3., -2., 5. + 148, -3., -1., 5. + 149, -3., 0., 5. + 150, -3., 1., 5. + 151, -3., 2., 5. + 152, -3., 3., 5. + 153, -3., 4., 5. + 154, -3., -4., 4. + 155, -3., -3., 4. + 156, -3., -2., 4. + 157, -3., -1., 4. + 158, -3., 0., 4. + 159, -3., 1., 4. + 160, -3., 2., 4. + 161, -3., 3., 4. + 162, -3., 4., 4. + 163, -3., -4., 3. + 164, -3., -3., 3. + 165, -3., -2., 3. + 166, -3., -1., 3. + 167, -3., 0., 3. + 168, -3., 1., 3. + 169, -3., 2., 3. + 170, -3., 3., 3. + 171, -3., 4., 3. + 172, -3., -4., 2. + 173, -3., -3., 2. + 174, -3., -2., 2. + 175, -3., -1., 2. + 176, -3., 0., 2. + 177, -3., 1., 2. + 178, -3., 2., 2. + 179, -3., 3., 2. + 180, -3., 4., 2. + 181, -3., -4., 1. + 182, -3., -3., 1. + 183, -3., -2., 1. + 184, -3., -1., 1. + 185, -3., 0., 1. + 186, -3., 1., 1. + 187, -3., 2., 1. + 188, -3., 3., 1. + 189, -3., 4., 1. + 190, -3., -4., 0. + 191, -3., -3., 0. + 192, -3., -2., 0. + 193, -3., -1., 0. + 194, -3., 0., 0. + 195, -3., 1., 0. + 196, -3., 2., 0. + 197, -3., 3., 0. + 198, -3., 4., 0. + 199, -2., -4., 10. + 200, -2., -3., 10. + 201, -2., -2., 10. + 202, -2., -1., 10. + 203, -2., 0., 10. + 204, -2., 1., 10. + 205, -2., 2., 10. + 206, -2., 3., 10. + 207, -2., 4., 10. + 208, -2., -4., 9. + 209, -2., -3., 9. + 210, -2., -2., 9. + 211, -2., -1., 9. + 212, -2., 0., 9. + 213, -2., 1., 9. + 214, -2., 2., 9. + 215, -2., 3., 9. + 216, -2., 4., 9. + 217, -2., -4., 8. + 218, -2., -3., 8. + 219, -2., -2., 8. + 220, -2., -1., 8. + 221, -2., 0., 8. + 222, -2., 1., 8. + 223, -2., 2., 8. + 224, -2., 3., 8. + 225, -2., 4., 8. + 226, -2., -4., 7. + 227, -2., -3., 7. + 228, -2., -2., 7. + 229, -2., -1., 7. + 230, -2., 0., 7. + 231, -2., 1., 7. + 232, -2., 2., 7. + 233, -2., 3., 7. + 234, -2., 4., 7. + 235, -2., -4., 6. + 236, -2., -3., 6. + 237, -2., -2., 6. + 238, -2., -1., 6. + 239, -2., 0., 6. + 240, -2., 1., 6. + 241, -2., 2., 6. + 242, -2., 3., 6. + 243, -2., 4., 6. + 244, -2., -4., 5. + 245, -2., -3., 5. + 246, -2., -2., 5. + 247, -2., -1., 5. + 248, -2., 0., 5. + 249, -2., 1., 5. + 250, -2., 2., 5. + 251, -2., 3., 5. + 252, -2., 4., 5. + 253, -2., -4., 4. + 254, -2., -3., 4. + 255, -2., -2., 4. + 256, -2., -1., 4. + 257, -2., 0., 4. + 258, -2., 1., 4. + 259, -2., 2., 4. + 260, -2., 3., 4. + 261, -2., 4., 4. + 262, -2., -4., 3. + 263, -2., -3., 3. + 264, -2., -2., 3. + 265, -2., -1., 3. + 266, -2., 0., 3. + 267, -2., 1., 3. + 268, -2., 2., 3. + 269, -2., 3., 3. + 270, -2., 4., 3. + 271, -2., -4., 2. + 272, -2., -3., 2. + 273, -2., -2., 2. + 274, -2., -1., 2. + 275, -2., 0., 2. + 276, -2., 1., 2. + 277, -2., 2., 2. + 278, -2., 3., 2. + 279, -2., 4., 2. + 280, -2., -4., 1. + 281, -2., -3., 1. + 282, -2., -2., 1. + 283, -2., -1., 1. + 284, -2., 0., 1. + 285, -2., 1., 1. + 286, -2., 2., 1. + 287, -2., 3., 1. + 288, -2., 4., 1. + 289, -2., -4., 0. + 290, -2., -3., 0. + 291, -2., -2., 0. + 292, -2., -1., 0. + 293, -2., 0., 0. + 294, -2., 1., 0. + 295, -2., 2., 0. + 296, -2., 3., 0. + 297, -2., 4., 0. + 298, -1., -4., 10. + 299, -1., -3., 10. + 300, -1., -2., 10. + 301, -1., -1., 10. + 302, -1., 0., 10. + 303, -1., 1., 10. + 304, -1., 2., 10. + 305, -1., 3., 10. + 306, -1., 4., 10. + 307, -1., -4., 9. + 308, -1., -3., 9. + 309, -1., -2., 9. + 310, -1., -1., 9. + 311, -1., 0., 9. + 312, -1., 1., 9. + 313, -1., 2., 9. + 314, -1., 3., 9. + 315, -1., 4., 9. + 316, -1., -4., 8. + 317, -1., -3., 8. + 318, -1., -2., 8. + 319, -1., -1., 8. + 320, -1., 0., 8. + 321, -1., 1., 8. + 322, -1., 2., 8. + 323, -1., 3., 8. + 324, -1., 4., 8. + 325, -1., -4., 7. + 326, -1., -3., 7. + 327, -1., -2., 7. + 328, -1., -1., 7. + 329, -1., 0., 7. + 330, -1., 1., 7. + 331, -1., 2., 7. + 332, -1., 3., 7. + 333, -1., 4., 7. + 334, -1., -4., 6. + 335, -1., -3., 6. + 336, -1., -2., 6. + 337, -1., -1., 6. + 338, -1., 0., 6. + 339, -1., 1., 6. + 340, -1., 2., 6. + 341, -1., 3., 6. + 342, -1., 4., 6. + 343, -1., -4., 5. + 344, -1., -3., 5. + 345, -1., -2., 5. + 346, -1., -1., 5. + 347, -1., 0., 5. + 348, -1., 1., 5. + 349, -1., 2., 5. + 350, -1., 3., 5. + 351, -1., 4., 5. + 352, -1., -4., 4. + 353, -1., -3., 4. + 354, -1., -2., 4. + 355, -1., -1., 4. + 356, -1., 0., 4. + 357, -1., 1., 4. + 358, -1., 2., 4. + 359, -1., 3., 4. + 360, -1., 4., 4. + 361, -1., -4., 3. + 362, -1., -3., 3. + 363, -1., -2., 3. + 364, -1., -1., 3. + 365, -1., 0., 3. + 366, -1., 1., 3. + 367, -1., 2., 3. + 368, -1., 3., 3. + 369, -1., 4., 3. + 370, -1., -4., 2. + 371, -1., -3., 2. + 372, -1., -2., 2. + 373, -1., -1., 2. + 374, -1., 0., 2. + 375, -1., 1., 2. + 376, -1., 2., 2. + 377, -1., 3., 2. + 378, -1., 4., 2. + 379, -1., -4., 1. + 380, -1., -3., 1. + 381, -1., -2., 1. + 382, -1., -1., 1. + 383, -1., 0., 1. + 384, -1., 1., 1. + 385, -1., 2., 1. + 386, -1., 3., 1. + 387, -1., 4., 1. + 388, -1., -4., 0. + 389, -1., -3., 0. + 390, -1., -2., 0. + 391, -1., -1., 0. + 392, -1., 0., 0. + 393, -1., 1., 0. + 394, -1., 2., 0. + 395, -1., 3., 0. + 396, -1., 4., 0. + 397, 0., -4., 10. + 398, 0., -3., 10. + 399, 0., -2., 10. + 400, 0., -1., 10. + 401, 0., 0., 10. + 402, 0., 1., 10. + 403, 0., 2., 10. + 404, 0., 3., 10. + 405, 0., 4., 10. + 406, 0., -4., 9. + 407, 0., -3., 9. + 408, 0., -2., 9. + 409, 0., -1., 9. + 410, 0., 0., 9. + 411, 0., 1., 9. + 412, 0., 2., 9. + 413, 0., 3., 9. + 414, 0., 4., 9. + 415, 0., -4., 8. + 416, 0., -3., 8. + 417, 0., -2., 8. + 418, 0., -1., 8. + 419, 0., 0., 8. + 420, 0., 1., 8. + 421, 0., 2., 8. + 422, 0., 3., 8. + 423, 0., 4., 8. + 424, 0., -4., 7. + 425, 0., -3., 7. + 426, 0., -2., 7. + 427, 0., -1., 7. + 428, 0., 0., 7. + 429, 0., 1., 7. + 430, 0., 2., 7. + 431, 0., 3., 7. + 432, 0., 4., 7. + 433, 0., -4., 6. + 434, 0., -3., 6. + 435, 0., -2., 6. + 436, 0., -1., 6. + 437, 0., 0., 6. + 438, 0., 1., 6. + 439, 0., 2., 6. + 440, 0., 3., 6. + 441, 0., 4., 6. + 442, 0., -4., 5. + 443, 0., -3., 5. + 444, 0., -2., 5. + 445, 0., -1., 5. + 446, 0., 0., 5. + 447, 0., 1., 5. + 448, 0., 2., 5. + 449, 0., 3., 5. + 450, 0., 4., 5. + 451, 0., -4., 4. + 452, 0., -3., 4. + 453, 0., -2., 4. + 454, 0., -1., 4. + 455, 0., 0., 4. + 456, 0., 1., 4. + 457, 0., 2., 4. + 458, 0., 3., 4. + 459, 0., 4., 4. + 460, 0., -4., 3. + 461, 0., -3., 3. + 462, 0., -2., 3. + 463, 0., -1., 3. + 464, 0., 0., 3. + 465, 0., 1., 3. + 466, 0., 2., 3. + 467, 0., 3., 3. + 468, 0., 4., 3. + 469, 0., -4., 2. + 470, 0., -3., 2. + 471, 0., -2., 2. + 472, 0., -1., 2. + 473, 0., 0., 2. + 474, 0., 1., 2. + 475, 0., 2., 2. + 476, 0., 3., 2. + 477, 0., 4., 2. + 478, 0., -4., 1. + 479, 0., -3., 1. + 480, 0., -2., 1. + 481, 0., -1., 1. + 482, 0., 0., 1. + 483, 0., 1., 1. + 484, 0., 2., 1. + 485, 0., 3., 1. + 486, 0., 4., 1. + 487, 0., -4., 0. + 488, 0., -3., 0. + 489, 0., -2., 0. + 490, 0., -1., 0. + 491, 0., 0., 0. + 492, 0., 1., 0. + 493, 0., 2., 0. + 494, 0., 3., 0. + 495, 0., 4., 0. + 496, 1., -4., 10. + 497, 1., -3., 10. + 498, 1., -2., 10. + 499, 1., -1., 10. + 500, 1., 0., 10. + 501, 1., 1., 10. + 502, 1., 2., 10. + 503, 1., 3., 10. + 504, 1., 4., 10. + 505, 1., -4., 9. + 506, 1., -3., 9. + 507, 1., -2., 9. + 508, 1., -1., 9. + 509, 1., 0., 9. + 510, 1., 1., 9. + 511, 1., 2., 9. + 512, 1., 3., 9. + 513, 1., 4., 9. + 514, 1., -4., 8. + 515, 1., -3., 8. + 516, 1., -2., 8. + 517, 1., -1., 8. + 518, 1., 0., 8. + 519, 1., 1., 8. + 520, 1., 2., 8. + 521, 1., 3., 8. + 522, 1., 4., 8. + 523, 1., -4., 7. + 524, 1., -3., 7. + 525, 1., -2., 7. + 526, 1., -1., 7. + 527, 1., 0., 7. + 528, 1., 1., 7. + 529, 1., 2., 7. + 530, 1., 3., 7. + 531, 1., 4., 7. + 532, 1., -4., 6. + 533, 1., -3., 6. + 534, 1., -2., 6. + 535, 1., -1., 6. + 536, 1., 0., 6. + 537, 1., 1., 6. + 538, 1., 2., 6. + 539, 1., 3., 6. + 540, 1., 4., 6. + 541, 1., -4., 5. + 542, 1., -3., 5. + 543, 1., -2., 5. + 544, 1., -1., 5. + 545, 1., 0., 5. + 546, 1., 1., 5. + 547, 1., 2., 5. + 548, 1., 3., 5. + 549, 1., 4., 5. + 550, 1., -4., 4. + 551, 1., -3., 4. + 552, 1., -2., 4. + 553, 1., -1., 4. + 554, 1., 0., 4. + 555, 1., 1., 4. + 556, 1., 2., 4. + 557, 1., 3., 4. + 558, 1., 4., 4. + 559, 1., -4., 3. + 560, 1., -3., 3. + 561, 1., -2., 3. + 562, 1., -1., 3. + 563, 1., 0., 3. + 564, 1., 1., 3. + 565, 1., 2., 3. + 566, 1., 3., 3. + 567, 1., 4., 3. + 568, 1., -4., 2. + 569, 1., -3., 2. + 570, 1., -2., 2. + 571, 1., -1., 2. + 572, 1., 0., 2. + 573, 1., 1., 2. + 574, 1., 2., 2. + 575, 1., 3., 2. + 576, 1., 4., 2. + 577, 1., -4., 1. + 578, 1., -3., 1. + 579, 1., -2., 1. + 580, 1., -1., 1. + 581, 1., 0., 1. + 582, 1., 1., 1. + 583, 1., 2., 1. + 584, 1., 3., 1. + 585, 1., 4., 1. + 586, 1., -4., 0. + 587, 1., -3., 0. + 588, 1., -2., 0. + 589, 1., -1., 0. + 590, 1., 0., 0. + 591, 1., 1., 0. + 592, 1., 2., 0. + 593, 1., 3., 0. + 594, 1., 4., 0. + 595, 2., -4., 10. + 596, 2., -3., 10. + 597, 2., -2., 10. + 598, 2., -1., 10. + 599, 2., 0., 10. + 600, 2., 1., 10. + 601, 2., 2., 10. + 602, 2., 3., 10. + 603, 2., 4., 10. + 604, 2., -4., 9. + 605, 2., -3., 9. + 606, 2., -2., 9. + 607, 2., -1., 9. + 608, 2., 0., 9. + 609, 2., 1., 9. + 610, 2., 2., 9. + 611, 2., 3., 9. + 612, 2., 4., 9. + 613, 2., -4., 8. + 614, 2., -3., 8. + 615, 2., -2., 8. + 616, 2., -1., 8. + 617, 2., 0., 8. + 618, 2., 1., 8. + 619, 2., 2., 8. + 620, 2., 3., 8. + 621, 2., 4., 8. + 622, 2., -4., 7. + 623, 2., -3., 7. + 624, 2., -2., 7. + 625, 2., -1., 7. + 626, 2., 0., 7. + 627, 2., 1., 7. + 628, 2., 2., 7. + 629, 2., 3., 7. + 630, 2., 4., 7. + 631, 2., -4., 6. + 632, 2., -3., 6. + 633, 2., -2., 6. + 634, 2., -1., 6. + 635, 2., 0., 6. + 636, 2., 1., 6. + 637, 2., 2., 6. + 638, 2., 3., 6. + 639, 2., 4., 6. + 640, 2., -4., 5. + 641, 2., -3., 5. + 642, 2., -2., 5. + 643, 2., -1., 5. + 644, 2., 0., 5. + 645, 2., 1., 5. + 646, 2., 2., 5. + 647, 2., 3., 5. + 648, 2., 4., 5. + 649, 2., -4., 4. + 650, 2., -3., 4. + 651, 2., -2., 4. + 652, 2., -1., 4. + 653, 2., 0., 4. + 654, 2., 1., 4. + 655, 2., 2., 4. + 656, 2., 3., 4. + 657, 2., 4., 4. + 658, 2., -4., 3. + 659, 2., -3., 3. + 660, 2., -2., 3. + 661, 2., -1., 3. + 662, 2., 0., 3. + 663, 2., 1., 3. + 664, 2., 2., 3. + 665, 2., 3., 3. + 666, 2., 4., 3. + 667, 2., -4., 2. + 668, 2., -3., 2. + 669, 2., -2., 2. + 670, 2., -1., 2. + 671, 2., 0., 2. + 672, 2., 1., 2. + 673, 2., 2., 2. + 674, 2., 3., 2. + 675, 2., 4., 2. + 676, 2., -4., 1. + 677, 2., -3., 1. + 678, 2., -2., 1. + 679, 2., -1., 1. + 680, 2., 0., 1. + 681, 2., 1., 1. + 682, 2., 2., 1. + 683, 2., 3., 1. + 684, 2., 4., 1. + 685, 2., -4., 0. + 686, 2., -3., 0. + 687, 2., -2., 0. + 688, 2., -1., 0. + 689, 2., 0., 0. + 690, 2., 1., 0. + 691, 2., 2., 0. + 692, 2., 3., 0. + 693, 2., 4., 0. + 694, 3., -4., 10. + 695, 3., -3., 10. + 696, 3., -2., 10. + 697, 3., -1., 10. + 698, 3., 0., 10. + 699, 3., 1., 10. + 700, 3., 2., 10. + 701, 3., 3., 10. + 702, 3., 4., 10. + 703, 3., -4., 9. + 704, 3., -3., 9. + 705, 3., -2., 9. + 706, 3., -1., 9. + 707, 3., 0., 9. + 708, 3., 1., 9. + 709, 3., 2., 9. + 710, 3., 3., 9. + 711, 3., 4., 9. + 712, 3., -4., 8. + 713, 3., -3., 8. + 714, 3., -2., 8. + 715, 3., -1., 8. + 716, 3., 0., 8. + 717, 3., 1., 8. + 718, 3., 2., 8. + 719, 3., 3., 8. + 720, 3., 4., 8. + 721, 3., -4., 7. + 722, 3., -3., 7. + 723, 3., -2., 7. + 724, 3., -1., 7. + 725, 3., 0., 7. + 726, 3., 1., 7. + 727, 3., 2., 7. + 728, 3., 3., 7. + 729, 3., 4., 7. + 730, 3., -4., 6. + 731, 3., -3., 6. + 732, 3., -2., 6. + 733, 3., -1., 6. + 734, 3., 0., 6. + 735, 3., 1., 6. + 736, 3., 2., 6. + 737, 3., 3., 6. + 738, 3., 4., 6. + 739, 3., -4., 5. + 740, 3., -3., 5. + 741, 3., -2., 5. + 742, 3., -1., 5. + 743, 3., 0., 5. + 744, 3., 1., 5. + 745, 3., 2., 5. + 746, 3., 3., 5. + 747, 3., 4., 5. + 748, 3., -4., 4. + 749, 3., -3., 4. + 750, 3., -2., 4. + 751, 3., -1., 4. + 752, 3., 0., 4. + 753, 3., 1., 4. + 754, 3., 2., 4. + 755, 3., 3., 4. + 756, 3., 4., 4. + 757, 3., -4., 3. + 758, 3., -3., 3. + 759, 3., -2., 3. + 760, 3., -1., 3. + 761, 3., 0., 3. + 762, 3., 1., 3. + 763, 3., 2., 3. + 764, 3., 3., 3. + 765, 3., 4., 3. + 766, 3., -4., 2. + 767, 3., -3., 2. + 768, 3., -2., 2. + 769, 3., -1., 2. + 770, 3., 0., 2. + 771, 3., 1., 2. + 772, 3., 2., 2. + 773, 3., 3., 2. + 774, 3., 4., 2. + 775, 3., -4., 1. + 776, 3., -3., 1. + 777, 3., -2., 1. + 778, 3., -1., 1. + 779, 3., 0., 1. + 780, 3., 1., 1. + 781, 3., 2., 1. + 782, 3., 3., 1. + 783, 3., 4., 1. + 784, 3., -4., 0. + 785, 3., -3., 0. + 786, 3., -2., 0. + 787, 3., -1., 0. + 788, 3., 0., 0. + 789, 3., 1., 0. + 790, 3., 2., 0. + 791, 3., 3., 0. + 792, 3., 4., 0. + 793, 4., -4., 10. + 794, 4., -3., 10. + 795, 4., -2., 10. + 796, 4., -1., 10. + 797, 4., 0., 10. + 798, 4., 1., 10. + 799, 4., 2., 10. + 800, 4., 3., 10. + 801, 4., 4., 10. + 802, 4., -4., 9. + 803, 4., -3., 9. + 804, 4., -2., 9. + 805, 4., -1., 9. + 806, 4., 0., 9. + 807, 4., 1., 9. + 808, 4., 2., 9. + 809, 4., 3., 9. + 810, 4., 4., 9. + 811, 4., -4., 8. + 812, 4., -3., 8. + 813, 4., -2., 8. + 814, 4., -1., 8. + 815, 4., 0., 8. + 816, 4., 1., 8. + 817, 4., 2., 8. + 818, 4., 3., 8. + 819, 4., 4., 8. + 820, 4., -4., 7. + 821, 4., -3., 7. + 822, 4., -2., 7. + 823, 4., -1., 7. + 824, 4., 0., 7. + 825, 4., 1., 7. + 826, 4., 2., 7. + 827, 4., 3., 7. + 828, 4., 4., 7. + 829, 4., -4., 6. + 830, 4., -3., 6. + 831, 4., -2., 6. + 832, 4., -1., 6. + 833, 4., 0., 6. + 834, 4., 1., 6. + 835, 4., 2., 6. + 836, 4., 3., 6. + 837, 4., 4., 6. + 838, 4., -4., 5. + 839, 4., -3., 5. + 840, 4., -2., 5. + 841, 4., -1., 5. + 842, 4., 0., 5. + 843, 4., 1., 5. + 844, 4., 2., 5. + 845, 4., 3., 5. + 846, 4., 4., 5. + 847, 4., -4., 4. + 848, 4., -3., 4. + 849, 4., -2., 4. + 850, 4., -1., 4. + 851, 4., 0., 4. + 852, 4., 1., 4. + 853, 4., 2., 4. + 854, 4., 3., 4. + 855, 4., 4., 4. + 856, 4., -4., 3. + 857, 4., -3., 3. + 858, 4., -2., 3. + 859, 4., -1., 3. + 860, 4., 0., 3. + 861, 4., 1., 3. + 862, 4., 2., 3. + 863, 4., 3., 3. + 864, 4., 4., 3. + 865, 4., -4., 2. + 866, 4., -3., 2. + 867, 4., -2., 2. + 868, 4., -1., 2. + 869, 4., 0., 2. + 870, 4., 1., 2. + 871, 4., 2., 2. + 872, 4., 3., 2. + 873, 4., 4., 2. + 874, 4., -4., 1. + 875, 4., -3., 1. + 876, 4., -2., 1. + 877, 4., -1., 1. + 878, 4., 0., 1. + 879, 4., 1., 1. + 880, 4., 2., 1. + 881, 4., 3., 1. + 882, 4., 4., 1. + 883, 4., -4., 0. + 884, 4., -3., 0. + 885, 4., -2., 0. + 886, 4., -1., 0. + 887, 4., 0., 0. + 888, 4., 1., 0. + 889, 4., 2., 0. + 890, 4., 3., 0. + 891, 4., 4., 0. +*Element, type=C3D8R + 1, 100, 101, 110, 109, 1, 2, 11, 10 + 2, 101, 102, 111, 110, 2, 3, 12, 11 + 3, 102, 103, 112, 111, 3, 4, 13, 12 + 4, 103, 104, 113, 112, 4, 5, 14, 13 + 5, 104, 105, 114, 113, 5, 6, 15, 14 + 6, 105, 106, 115, 114, 6, 7, 16, 15 + 7, 106, 107, 116, 115, 7, 8, 17, 16 + 8, 107, 108, 117, 116, 8, 9, 18, 17 + 9, 109, 110, 119, 118, 10, 11, 20, 19 + 10, 110, 111, 120, 119, 11, 12, 21, 20 + 11, 111, 112, 121, 120, 12, 13, 22, 21 + 12, 112, 113, 122, 121, 13, 14, 23, 22 + 13, 113, 114, 123, 122, 14, 15, 24, 23 + 14, 114, 115, 124, 123, 15, 16, 25, 24 + 15, 115, 116, 125, 124, 16, 17, 26, 25 + 16, 116, 117, 126, 125, 17, 18, 27, 26 + 17, 118, 119, 128, 127, 19, 20, 29, 28 + 18, 119, 120, 129, 128, 20, 21, 30, 29 + 19, 120, 121, 130, 129, 21, 22, 31, 30 + 20, 121, 122, 131, 130, 22, 23, 32, 31 + 21, 122, 123, 132, 131, 23, 24, 33, 32 + 22, 123, 124, 133, 132, 24, 25, 34, 33 + 23, 124, 125, 134, 133, 25, 26, 35, 34 + 24, 125, 126, 135, 134, 26, 27, 36, 35 + 25, 127, 128, 137, 136, 28, 29, 38, 37 + 26, 128, 129, 138, 137, 29, 30, 39, 38 + 27, 129, 130, 139, 138, 30, 31, 40, 39 + 28, 130, 131, 140, 139, 31, 32, 41, 40 + 29, 131, 132, 141, 140, 32, 33, 42, 41 + 30, 132, 133, 142, 141, 33, 34, 43, 42 + 31, 133, 134, 143, 142, 34, 35, 44, 43 + 32, 134, 135, 144, 143, 35, 36, 45, 44 + 33, 136, 137, 146, 145, 37, 38, 47, 46 + 34, 137, 138, 147, 146, 38, 39, 48, 47 + 35, 138, 139, 148, 147, 39, 40, 49, 48 + 36, 139, 140, 149, 148, 40, 41, 50, 49 + 37, 140, 141, 150, 149, 41, 42, 51, 50 + 38, 141, 142, 151, 150, 42, 43, 52, 51 + 39, 142, 143, 152, 151, 43, 44, 53, 52 + 40, 143, 144, 153, 152, 44, 45, 54, 53 + 41, 145, 146, 155, 154, 46, 47, 56, 55 + 42, 146, 147, 156, 155, 47, 48, 57, 56 + 43, 147, 148, 157, 156, 48, 49, 58, 57 + 44, 148, 149, 158, 157, 49, 50, 59, 58 + 45, 149, 150, 159, 158, 50, 51, 60, 59 + 46, 150, 151, 160, 159, 51, 52, 61, 60 + 47, 151, 152, 161, 160, 52, 53, 62, 61 + 48, 152, 153, 162, 161, 53, 54, 63, 62 + 49, 154, 155, 164, 163, 55, 56, 65, 64 + 50, 155, 156, 165, 164, 56, 57, 66, 65 + 51, 156, 157, 166, 165, 57, 58, 67, 66 + 52, 157, 158, 167, 166, 58, 59, 68, 67 + 53, 158, 159, 168, 167, 59, 60, 69, 68 + 54, 159, 160, 169, 168, 60, 61, 70, 69 + 55, 160, 161, 170, 169, 61, 62, 71, 70 + 56, 161, 162, 171, 170, 62, 63, 72, 71 + 57, 163, 164, 173, 172, 64, 65, 74, 73 + 58, 164, 165, 174, 173, 65, 66, 75, 74 + 59, 165, 166, 175, 174, 66, 67, 76, 75 + 60, 166, 167, 176, 175, 67, 68, 77, 76 + 61, 167, 168, 177, 176, 68, 69, 78, 77 + 62, 168, 169, 178, 177, 69, 70, 79, 78 + 63, 169, 170, 179, 178, 70, 71, 80, 79 + 64, 170, 171, 180, 179, 71, 72, 81, 80 + 65, 172, 173, 182, 181, 73, 74, 83, 82 + 66, 173, 174, 183, 182, 74, 75, 84, 83 + 67, 174, 175, 184, 183, 75, 76, 85, 84 + 68, 175, 176, 185, 184, 76, 77, 86, 85 + 69, 176, 177, 186, 185, 77, 78, 87, 86 + 70, 177, 178, 187, 186, 78, 79, 88, 87 + 71, 178, 179, 188, 187, 79, 80, 89, 88 + 72, 179, 180, 189, 188, 80, 81, 90, 89 + 73, 181, 182, 191, 190, 82, 83, 92, 91 + 74, 182, 183, 192, 191, 83, 84, 93, 92 + 75, 183, 184, 193, 192, 84, 85, 94, 93 + 76, 184, 185, 194, 193, 85, 86, 95, 94 + 77, 185, 186, 195, 194, 86, 87, 96, 95 + 78, 186, 187, 196, 195, 87, 88, 97, 96 + 79, 187, 188, 197, 196, 88, 89, 98, 97 + 80, 188, 189, 198, 197, 89, 90, 99, 98 + 81, 199, 200, 209, 208, 100, 101, 110, 109 + 82, 200, 201, 210, 209, 101, 102, 111, 110 + 83, 201, 202, 211, 210, 102, 103, 112, 111 + 84, 202, 203, 212, 211, 103, 104, 113, 112 + 85, 203, 204, 213, 212, 104, 105, 114, 113 + 86, 204, 205, 214, 213, 105, 106, 115, 114 + 87, 205, 206, 215, 214, 106, 107, 116, 115 + 88, 206, 207, 216, 215, 107, 108, 117, 116 + 89, 208, 209, 218, 217, 109, 110, 119, 118 + 90, 209, 210, 219, 218, 110, 111, 120, 119 + 91, 210, 211, 220, 219, 111, 112, 121, 120 + 92, 211, 212, 221, 220, 112, 113, 122, 121 + 93, 212, 213, 222, 221, 113, 114, 123, 122 + 94, 213, 214, 223, 222, 114, 115, 124, 123 + 95, 214, 215, 224, 223, 115, 116, 125, 124 + 96, 215, 216, 225, 224, 116, 117, 126, 125 + 97, 217, 218, 227, 226, 118, 119, 128, 127 + 98, 218, 219, 228, 227, 119, 120, 129, 128 + 99, 219, 220, 229, 228, 120, 121, 130, 129 +100, 220, 221, 230, 229, 121, 122, 131, 130 +101, 221, 222, 231, 230, 122, 123, 132, 131 +102, 222, 223, 232, 231, 123, 124, 133, 132 +103, 223, 224, 233, 232, 124, 125, 134, 133 +104, 224, 225, 234, 233, 125, 126, 135, 134 +105, 226, 227, 236, 235, 127, 128, 137, 136 +106, 227, 228, 237, 236, 128, 129, 138, 137 +107, 228, 229, 238, 237, 129, 130, 139, 138 +108, 229, 230, 239, 238, 130, 131, 140, 139 +109, 230, 231, 240, 239, 131, 132, 141, 140 +110, 231, 232, 241, 240, 132, 133, 142, 141 +111, 232, 233, 242, 241, 133, 134, 143, 142 +112, 233, 234, 243, 242, 134, 135, 144, 143 +113, 235, 236, 245, 244, 136, 137, 146, 145 +114, 236, 237, 246, 245, 137, 138, 147, 146 +115, 237, 238, 247, 246, 138, 139, 148, 147 +116, 238, 239, 248, 247, 139, 140, 149, 148 +117, 239, 240, 249, 248, 140, 141, 150, 149 +118, 240, 241, 250, 249, 141, 142, 151, 150 +119, 241, 242, 251, 250, 142, 143, 152, 151 +120, 242, 243, 252, 251, 143, 144, 153, 152 +121, 244, 245, 254, 253, 145, 146, 155, 154 +122, 245, 246, 255, 254, 146, 147, 156, 155 +123, 246, 247, 256, 255, 147, 148, 157, 156 +124, 247, 248, 257, 256, 148, 149, 158, 157 +125, 248, 249, 258, 257, 149, 150, 159, 158 +126, 249, 250, 259, 258, 150, 151, 160, 159 +127, 250, 251, 260, 259, 151, 152, 161, 160 +128, 251, 252, 261, 260, 152, 153, 162, 161 +129, 253, 254, 263, 262, 154, 155, 164, 163 +130, 254, 255, 264, 263, 155, 156, 165, 164 +131, 255, 256, 265, 264, 156, 157, 166, 165 +132, 256, 257, 266, 265, 157, 158, 167, 166 +133, 257, 258, 267, 266, 158, 159, 168, 167 +134, 258, 259, 268, 267, 159, 160, 169, 168 +135, 259, 260, 269, 268, 160, 161, 170, 169 +136, 260, 261, 270, 269, 161, 162, 171, 170 +137, 262, 263, 272, 271, 163, 164, 173, 172 +138, 263, 264, 273, 272, 164, 165, 174, 173 +139, 264, 265, 274, 273, 165, 166, 175, 174 +140, 265, 266, 275, 274, 166, 167, 176, 175 +141, 266, 267, 276, 275, 167, 168, 177, 176 +142, 267, 268, 277, 276, 168, 169, 178, 177 +143, 268, 269, 278, 277, 169, 170, 179, 178 +144, 269, 270, 279, 278, 170, 171, 180, 179 +145, 271, 272, 281, 280, 172, 173, 182, 181 +146, 272, 273, 282, 281, 173, 174, 183, 182 +147, 273, 274, 283, 282, 174, 175, 184, 183 +148, 274, 275, 284, 283, 175, 176, 185, 184 +149, 275, 276, 285, 284, 176, 177, 186, 185 +150, 276, 277, 286, 285, 177, 178, 187, 186 +151, 277, 278, 287, 286, 178, 179, 188, 187 +152, 278, 279, 288, 287, 179, 180, 189, 188 +153, 280, 281, 290, 289, 181, 182, 191, 190 +154, 281, 282, 291, 290, 182, 183, 192, 191 +155, 282, 283, 292, 291, 183, 184, 193, 192 +156, 283, 284, 293, 292, 184, 185, 194, 193 +157, 284, 285, 294, 293, 185, 186, 195, 194 +158, 285, 286, 295, 294, 186, 187, 196, 195 +159, 286, 287, 296, 295, 187, 188, 197, 196 +160, 287, 288, 297, 296, 188, 189, 198, 197 +161, 298, 299, 308, 307, 199, 200, 209, 208 +162, 299, 300, 309, 308, 200, 201, 210, 209 +163, 300, 301, 310, 309, 201, 202, 211, 210 +164, 301, 302, 311, 310, 202, 203, 212, 211 +165, 302, 303, 312, 311, 203, 204, 213, 212 +166, 303, 304, 313, 312, 204, 205, 214, 213 +167, 304, 305, 314, 313, 205, 206, 215, 214 +168, 305, 306, 315, 314, 206, 207, 216, 215 +169, 307, 308, 317, 316, 208, 209, 218, 217 +170, 308, 309, 318, 317, 209, 210, 219, 218 +171, 309, 310, 319, 318, 210, 211, 220, 219 +172, 310, 311, 320, 319, 211, 212, 221, 220 +173, 311, 312, 321, 320, 212, 213, 222, 221 +174, 312, 313, 322, 321, 213, 214, 223, 222 +175, 313, 314, 323, 322, 214, 215, 224, 223 +176, 314, 315, 324, 323, 215, 216, 225, 224 +177, 316, 317, 326, 325, 217, 218, 227, 226 +178, 317, 318, 327, 326, 218, 219, 228, 227 +179, 318, 319, 328, 327, 219, 220, 229, 228 +180, 319, 320, 329, 328, 220, 221, 230, 229 +181, 320, 321, 330, 329, 221, 222, 231, 230 +182, 321, 322, 331, 330, 222, 223, 232, 231 +183, 322, 323, 332, 331, 223, 224, 233, 232 +184, 323, 324, 333, 332, 224, 225, 234, 233 +185, 325, 326, 335, 334, 226, 227, 236, 235 +186, 326, 327, 336, 335, 227, 228, 237, 236 +187, 327, 328, 337, 336, 228, 229, 238, 237 +188, 328, 329, 338, 337, 229, 230, 239, 238 +189, 329, 330, 339, 338, 230, 231, 240, 239 +190, 330, 331, 340, 339, 231, 232, 241, 240 +191, 331, 332, 341, 340, 232, 233, 242, 241 +192, 332, 333, 342, 341, 233, 234, 243, 242 +193, 334, 335, 344, 343, 235, 236, 245, 244 +194, 335, 336, 345, 344, 236, 237, 246, 245 +195, 336, 337, 346, 345, 237, 238, 247, 246 +196, 337, 338, 347, 346, 238, 239, 248, 247 +197, 338, 339, 348, 347, 239, 240, 249, 248 +198, 339, 340, 349, 348, 240, 241, 250, 249 +199, 340, 341, 350, 349, 241, 242, 251, 250 +200, 341, 342, 351, 350, 242, 243, 252, 251 +201, 343, 344, 353, 352, 244, 245, 254, 253 +202, 344, 345, 354, 353, 245, 246, 255, 254 +203, 345, 346, 355, 354, 246, 247, 256, 255 +204, 346, 347, 356, 355, 247, 248, 257, 256 +205, 347, 348, 357, 356, 248, 249, 258, 257 +206, 348, 349, 358, 357, 249, 250, 259, 258 +207, 349, 350, 359, 358, 250, 251, 260, 259 +208, 350, 351, 360, 359, 251, 252, 261, 260 +209, 352, 353, 362, 361, 253, 254, 263, 262 +210, 353, 354, 363, 362, 254, 255, 264, 263 +211, 354, 355, 364, 363, 255, 256, 265, 264 +212, 355, 356, 365, 364, 256, 257, 266, 265 +213, 356, 357, 366, 365, 257, 258, 267, 266 +214, 357, 358, 367, 366, 258, 259, 268, 267 +215, 358, 359, 368, 367, 259, 260, 269, 268 +216, 359, 360, 369, 368, 260, 261, 270, 269 +217, 361, 362, 371, 370, 262, 263, 272, 271 +218, 362, 363, 372, 371, 263, 264, 273, 272 +219, 363, 364, 373, 372, 264, 265, 274, 273 +220, 364, 365, 374, 373, 265, 266, 275, 274 +221, 365, 366, 375, 374, 266, 267, 276, 275 +222, 366, 367, 376, 375, 267, 268, 277, 276 +223, 367, 368, 377, 376, 268, 269, 278, 277 +224, 368, 369, 378, 377, 269, 270, 279, 278 +225, 370, 371, 380, 379, 271, 272, 281, 280 +226, 371, 372, 381, 380, 272, 273, 282, 281 +227, 372, 373, 382, 381, 273, 274, 283, 282 +228, 373, 374, 383, 382, 274, 275, 284, 283 +229, 374, 375, 384, 383, 275, 276, 285, 284 +230, 375, 376, 385, 384, 276, 277, 286, 285 +231, 376, 377, 386, 385, 277, 278, 287, 286 +232, 377, 378, 387, 386, 278, 279, 288, 287 +233, 379, 380, 389, 388, 280, 281, 290, 289 +234, 380, 381, 390, 389, 281, 282, 291, 290 +235, 381, 382, 391, 390, 282, 283, 292, 291 +236, 382, 383, 392, 391, 283, 284, 293, 292 +237, 383, 384, 393, 392, 284, 285, 294, 293 +238, 384, 385, 394, 393, 285, 286, 295, 294 +239, 385, 386, 395, 394, 286, 287, 296, 295 +240, 386, 387, 396, 395, 287, 288, 297, 296 +241, 397, 398, 407, 406, 298, 299, 308, 307 +242, 398, 399, 408, 407, 299, 300, 309, 308 +243, 399, 400, 409, 408, 300, 301, 310, 309 +244, 400, 401, 410, 409, 301, 302, 311, 310 +245, 401, 402, 411, 410, 302, 303, 312, 311 +246, 402, 403, 412, 411, 303, 304, 313, 312 +247, 403, 404, 413, 412, 304, 305, 314, 313 +248, 404, 405, 414, 413, 305, 306, 315, 314 +249, 406, 407, 416, 415, 307, 308, 317, 316 +250, 407, 408, 417, 416, 308, 309, 318, 317 +251, 408, 409, 418, 417, 309, 310, 319, 318 +252, 409, 410, 419, 418, 310, 311, 320, 319 +253, 410, 411, 420, 419, 311, 312, 321, 320 +254, 411, 412, 421, 420, 312, 313, 322, 321 +255, 412, 413, 422, 421, 313, 314, 323, 322 +256, 413, 414, 423, 422, 314, 315, 324, 323 +257, 415, 416, 425, 424, 316, 317, 326, 325 +258, 416, 417, 426, 425, 317, 318, 327, 326 +259, 417, 418, 427, 426, 318, 319, 328, 327 +260, 418, 419, 428, 427, 319, 320, 329, 328 +261, 419, 420, 429, 428, 320, 321, 330, 329 +262, 420, 421, 430, 429, 321, 322, 331, 330 +263, 421, 422, 431, 430, 322, 323, 332, 331 +264, 422, 423, 432, 431, 323, 324, 333, 332 +265, 424, 425, 434, 433, 325, 326, 335, 334 +266, 425, 426, 435, 434, 326, 327, 336, 335 +267, 426, 427, 436, 435, 327, 328, 337, 336 +268, 427, 428, 437, 436, 328, 329, 338, 337 +269, 428, 429, 438, 437, 329, 330, 339, 338 +270, 429, 430, 439, 438, 330, 331, 340, 339 +271, 430, 431, 440, 439, 331, 332, 341, 340 +272, 431, 432, 441, 440, 332, 333, 342, 341 +273, 433, 434, 443, 442, 334, 335, 344, 343 +274, 434, 435, 444, 443, 335, 336, 345, 344 +275, 435, 436, 445, 444, 336, 337, 346, 345 +276, 436, 437, 446, 445, 337, 338, 347, 346 +277, 437, 438, 447, 446, 338, 339, 348, 347 +278, 438, 439, 448, 447, 339, 340, 349, 348 +279, 439, 440, 449, 448, 340, 341, 350, 349 +280, 440, 441, 450, 449, 341, 342, 351, 350 +281, 442, 443, 452, 451, 343, 344, 353, 352 +282, 443, 444, 453, 452, 344, 345, 354, 353 +283, 444, 445, 454, 453, 345, 346, 355, 354 +284, 445, 446, 455, 454, 346, 347, 356, 355 +285, 446, 447, 456, 455, 347, 348, 357, 356 +286, 447, 448, 457, 456, 348, 349, 358, 357 +287, 448, 449, 458, 457, 349, 350, 359, 358 +288, 449, 450, 459, 458, 350, 351, 360, 359 +289, 451, 452, 461, 460, 352, 353, 362, 361 +290, 452, 453, 462, 461, 353, 354, 363, 362 +291, 453, 454, 463, 462, 354, 355, 364, 363 +292, 454, 455, 464, 463, 355, 356, 365, 364 +293, 455, 456, 465, 464, 356, 357, 366, 365 +294, 456, 457, 466, 465, 357, 358, 367, 366 +295, 457, 458, 467, 466, 358, 359, 368, 367 +296, 458, 459, 468, 467, 359, 360, 369, 368 +297, 460, 461, 470, 469, 361, 362, 371, 370 +298, 461, 462, 471, 470, 362, 363, 372, 371 +299, 462, 463, 472, 471, 363, 364, 373, 372 +300, 463, 464, 473, 472, 364, 365, 374, 373 +301, 464, 465, 474, 473, 365, 366, 375, 374 +302, 465, 466, 475, 474, 366, 367, 376, 375 +303, 466, 467, 476, 475, 367, 368, 377, 376 +304, 467, 468, 477, 476, 368, 369, 378, 377 +305, 469, 470, 479, 478, 370, 371, 380, 379 +306, 470, 471, 480, 479, 371, 372, 381, 380 +307, 471, 472, 481, 480, 372, 373, 382, 381 +308, 472, 473, 482, 481, 373, 374, 383, 382 +309, 473, 474, 483, 482, 374, 375, 384, 383 +310, 474, 475, 484, 483, 375, 376, 385, 384 +311, 475, 476, 485, 484, 376, 377, 386, 385 +312, 476, 477, 486, 485, 377, 378, 387, 386 +313, 478, 479, 488, 487, 379, 380, 389, 388 +314, 479, 480, 489, 488, 380, 381, 390, 389 +315, 480, 481, 490, 489, 381, 382, 391, 390 +316, 481, 482, 491, 490, 382, 383, 392, 391 +317, 482, 483, 492, 491, 383, 384, 393, 392 +318, 483, 484, 493, 492, 384, 385, 394, 393 +319, 484, 485, 494, 493, 385, 386, 395, 394 +320, 485, 486, 495, 494, 386, 387, 396, 395 +321, 496, 497, 506, 505, 397, 398, 407, 406 +322, 497, 498, 507, 506, 398, 399, 408, 407 +323, 498, 499, 508, 507, 399, 400, 409, 408 +324, 499, 500, 509, 508, 400, 401, 410, 409 +325, 500, 501, 510, 509, 401, 402, 411, 410 +326, 501, 502, 511, 510, 402, 403, 412, 411 +327, 502, 503, 512, 511, 403, 404, 413, 412 +328, 503, 504, 513, 512, 404, 405, 414, 413 +329, 505, 506, 515, 514, 406, 407, 416, 415 +330, 506, 507, 516, 515, 407, 408, 417, 416 +331, 507, 508, 517, 516, 408, 409, 418, 417 +332, 508, 509, 518, 517, 409, 410, 419, 418 +333, 509, 510, 519, 518, 410, 411, 420, 419 +334, 510, 511, 520, 519, 411, 412, 421, 420 +335, 511, 512, 521, 520, 412, 413, 422, 421 +336, 512, 513, 522, 521, 413, 414, 423, 422 +337, 514, 515, 524, 523, 415, 416, 425, 424 +338, 515, 516, 525, 524, 416, 417, 426, 425 +339, 516, 517, 526, 525, 417, 418, 427, 426 +340, 517, 518, 527, 526, 418, 419, 428, 427 +341, 518, 519, 528, 527, 419, 420, 429, 428 +342, 519, 520, 529, 528, 420, 421, 430, 429 +343, 520, 521, 530, 529, 421, 422, 431, 430 +344, 521, 522, 531, 530, 422, 423, 432, 431 +345, 523, 524, 533, 532, 424, 425, 434, 433 +346, 524, 525, 534, 533, 425, 426, 435, 434 +347, 525, 526, 535, 534, 426, 427, 436, 435 +348, 526, 527, 536, 535, 427, 428, 437, 436 +349, 527, 528, 537, 536, 428, 429, 438, 437 +350, 528, 529, 538, 537, 429, 430, 439, 438 +351, 529, 530, 539, 538, 430, 431, 440, 439 +352, 530, 531, 540, 539, 431, 432, 441, 440 +353, 532, 533, 542, 541, 433, 434, 443, 442 +354, 533, 534, 543, 542, 434, 435, 444, 443 +355, 534, 535, 544, 543, 435, 436, 445, 444 +356, 535, 536, 545, 544, 436, 437, 446, 445 +357, 536, 537, 546, 545, 437, 438, 447, 446 +358, 537, 538, 547, 546, 438, 439, 448, 447 +359, 538, 539, 548, 547, 439, 440, 449, 448 +360, 539, 540, 549, 548, 440, 441, 450, 449 +361, 541, 542, 551, 550, 442, 443, 452, 451 +362, 542, 543, 552, 551, 443, 444, 453, 452 +363, 543, 544, 553, 552, 444, 445, 454, 453 +364, 544, 545, 554, 553, 445, 446, 455, 454 +365, 545, 546, 555, 554, 446, 447, 456, 455 +366, 546, 547, 556, 555, 447, 448, 457, 456 +367, 547, 548, 557, 556, 448, 449, 458, 457 +368, 548, 549, 558, 557, 449, 450, 459, 458 +369, 550, 551, 560, 559, 451, 452, 461, 460 +370, 551, 552, 561, 560, 452, 453, 462, 461 +371, 552, 553, 562, 561, 453, 454, 463, 462 +372, 553, 554, 563, 562, 454, 455, 464, 463 +373, 554, 555, 564, 563, 455, 456, 465, 464 +374, 555, 556, 565, 564, 456, 457, 466, 465 +375, 556, 557, 566, 565, 457, 458, 467, 466 +376, 557, 558, 567, 566, 458, 459, 468, 467 +377, 559, 560, 569, 568, 460, 461, 470, 469 +378, 560, 561, 570, 569, 461, 462, 471, 470 +379, 561, 562, 571, 570, 462, 463, 472, 471 +380, 562, 563, 572, 571, 463, 464, 473, 472 +381, 563, 564, 573, 572, 464, 465, 474, 473 +382, 564, 565, 574, 573, 465, 466, 475, 474 +383, 565, 566, 575, 574, 466, 467, 476, 475 +384, 566, 567, 576, 575, 467, 468, 477, 476 +385, 568, 569, 578, 577, 469, 470, 479, 478 +386, 569, 570, 579, 578, 470, 471, 480, 479 +387, 570, 571, 580, 579, 471, 472, 481, 480 +388, 571, 572, 581, 580, 472, 473, 482, 481 +389, 572, 573, 582, 581, 473, 474, 483, 482 +390, 573, 574, 583, 582, 474, 475, 484, 483 +391, 574, 575, 584, 583, 475, 476, 485, 484 +392, 575, 576, 585, 584, 476, 477, 486, 485 +393, 577, 578, 587, 586, 478, 479, 488, 487 +394, 578, 579, 588, 587, 479, 480, 489, 488 +395, 579, 580, 589, 588, 480, 481, 490, 489 +396, 580, 581, 590, 589, 481, 482, 491, 490 +397, 581, 582, 591, 590, 482, 483, 492, 491 +398, 582, 583, 592, 591, 483, 484, 493, 492 +399, 583, 584, 593, 592, 484, 485, 494, 493 +400, 584, 585, 594, 593, 485, 486, 495, 494 +401, 595, 596, 605, 604, 496, 497, 506, 505 +402, 596, 597, 606, 605, 497, 498, 507, 506 +403, 597, 598, 607, 606, 498, 499, 508, 507 +404, 598, 599, 608, 607, 499, 500, 509, 508 +405, 599, 600, 609, 608, 500, 501, 510, 509 +406, 600, 601, 610, 609, 501, 502, 511, 510 +407, 601, 602, 611, 610, 502, 503, 512, 511 +408, 602, 603, 612, 611, 503, 504, 513, 512 +409, 604, 605, 614, 613, 505, 506, 515, 514 +410, 605, 606, 615, 614, 506, 507, 516, 515 +411, 606, 607, 616, 615, 507, 508, 517, 516 +412, 607, 608, 617, 616, 508, 509, 518, 517 +413, 608, 609, 618, 617, 509, 510, 519, 518 +414, 609, 610, 619, 618, 510, 511, 520, 519 +415, 610, 611, 620, 619, 511, 512, 521, 520 +416, 611, 612, 621, 620, 512, 513, 522, 521 +417, 613, 614, 623, 622, 514, 515, 524, 523 +418, 614, 615, 624, 623, 515, 516, 525, 524 +419, 615, 616, 625, 624, 516, 517, 526, 525 +420, 616, 617, 626, 625, 517, 518, 527, 526 +421, 617, 618, 627, 626, 518, 519, 528, 527 +422, 618, 619, 628, 627, 519, 520, 529, 528 +423, 619, 620, 629, 628, 520, 521, 530, 529 +424, 620, 621, 630, 629, 521, 522, 531, 530 +425, 622, 623, 632, 631, 523, 524, 533, 532 +426, 623, 624, 633, 632, 524, 525, 534, 533 +427, 624, 625, 634, 633, 525, 526, 535, 534 +428, 625, 626, 635, 634, 526, 527, 536, 535 +429, 626, 627, 636, 635, 527, 528, 537, 536 +430, 627, 628, 637, 636, 528, 529, 538, 537 +431, 628, 629, 638, 637, 529, 530, 539, 538 +432, 629, 630, 639, 638, 530, 531, 540, 539 +433, 631, 632, 641, 640, 532, 533, 542, 541 +434, 632, 633, 642, 641, 533, 534, 543, 542 +435, 633, 634, 643, 642, 534, 535, 544, 543 +436, 634, 635, 644, 643, 535, 536, 545, 544 +437, 635, 636, 645, 644, 536, 537, 546, 545 +438, 636, 637, 646, 645, 537, 538, 547, 546 +439, 637, 638, 647, 646, 538, 539, 548, 547 +440, 638, 639, 648, 647, 539, 540, 549, 548 +441, 640, 641, 650, 649, 541, 542, 551, 550 +442, 641, 642, 651, 650, 542, 543, 552, 551 +443, 642, 643, 652, 651, 543, 544, 553, 552 +444, 643, 644, 653, 652, 544, 545, 554, 553 +445, 644, 645, 654, 653, 545, 546, 555, 554 +446, 645, 646, 655, 654, 546, 547, 556, 555 +447, 646, 647, 656, 655, 547, 548, 557, 556 +448, 647, 648, 657, 656, 548, 549, 558, 557 +449, 649, 650, 659, 658, 550, 551, 560, 559 +450, 650, 651, 660, 659, 551, 552, 561, 560 +451, 651, 652, 661, 660, 552, 553, 562, 561 +452, 652, 653, 662, 661, 553, 554, 563, 562 +453, 653, 654, 663, 662, 554, 555, 564, 563 +454, 654, 655, 664, 663, 555, 556, 565, 564 +455, 655, 656, 665, 664, 556, 557, 566, 565 +456, 656, 657, 666, 665, 557, 558, 567, 566 +457, 658, 659, 668, 667, 559, 560, 569, 568 +458, 659, 660, 669, 668, 560, 561, 570, 569 +459, 660, 661, 670, 669, 561, 562, 571, 570 +460, 661, 662, 671, 670, 562, 563, 572, 571 +461, 662, 663, 672, 671, 563, 564, 573, 572 +462, 663, 664, 673, 672, 564, 565, 574, 573 +463, 664, 665, 674, 673, 565, 566, 575, 574 +464, 665, 666, 675, 674, 566, 567, 576, 575 +465, 667, 668, 677, 676, 568, 569, 578, 577 +466, 668, 669, 678, 677, 569, 570, 579, 578 +467, 669, 670, 679, 678, 570, 571, 580, 579 +468, 670, 671, 680, 679, 571, 572, 581, 580 +469, 671, 672, 681, 680, 572, 573, 582, 581 +470, 672, 673, 682, 681, 573, 574, 583, 582 +471, 673, 674, 683, 682, 574, 575, 584, 583 +472, 674, 675, 684, 683, 575, 576, 585, 584 +473, 676, 677, 686, 685, 577, 578, 587, 586 +474, 677, 678, 687, 686, 578, 579, 588, 587 +475, 678, 679, 688, 687, 579, 580, 589, 588 +476, 679, 680, 689, 688, 580, 581, 590, 589 +477, 680, 681, 690, 689, 581, 582, 591, 590 +478, 681, 682, 691, 690, 582, 583, 592, 591 +479, 682, 683, 692, 691, 583, 584, 593, 592 +480, 683, 684, 693, 692, 584, 585, 594, 593 +481, 694, 695, 704, 703, 595, 596, 605, 604 +482, 695, 696, 705, 704, 596, 597, 606, 605 +483, 696, 697, 706, 705, 597, 598, 607, 606 +484, 697, 698, 707, 706, 598, 599, 608, 607 +485, 698, 699, 708, 707, 599, 600, 609, 608 +486, 699, 700, 709, 708, 600, 601, 610, 609 +487, 700, 701, 710, 709, 601, 602, 611, 610 +488, 701, 702, 711, 710, 602, 603, 612, 611 +489, 703, 704, 713, 712, 604, 605, 614, 613 +490, 704, 705, 714, 713, 605, 606, 615, 614 +491, 705, 706, 715, 714, 606, 607, 616, 615 +492, 706, 707, 716, 715, 607, 608, 617, 616 +493, 707, 708, 717, 716, 608, 609, 618, 617 +494, 708, 709, 718, 717, 609, 610, 619, 618 +495, 709, 710, 719, 718, 610, 611, 620, 619 +496, 710, 711, 720, 719, 611, 612, 621, 620 +497, 712, 713, 722, 721, 613, 614, 623, 622 +498, 713, 714, 723, 722, 614, 615, 624, 623 +499, 714, 715, 724, 723, 615, 616, 625, 624 +500, 715, 716, 725, 724, 616, 617, 626, 625 +501, 716, 717, 726, 725, 617, 618, 627, 626 +502, 717, 718, 727, 726, 618, 619, 628, 627 +503, 718, 719, 728, 727, 619, 620, 629, 628 +504, 719, 720, 729, 728, 620, 621, 630, 629 +505, 721, 722, 731, 730, 622, 623, 632, 631 +506, 722, 723, 732, 731, 623, 624, 633, 632 +507, 723, 724, 733, 732, 624, 625, 634, 633 +508, 724, 725, 734, 733, 625, 626, 635, 634 +509, 725, 726, 735, 734, 626, 627, 636, 635 +510, 726, 727, 736, 735, 627, 628, 637, 636 +511, 727, 728, 737, 736, 628, 629, 638, 637 +512, 728, 729, 738, 737, 629, 630, 639, 638 +513, 730, 731, 740, 739, 631, 632, 641, 640 +514, 731, 732, 741, 740, 632, 633, 642, 641 +515, 732, 733, 742, 741, 633, 634, 643, 642 +516, 733, 734, 743, 742, 634, 635, 644, 643 +517, 734, 735, 744, 743, 635, 636, 645, 644 +518, 735, 736, 745, 744, 636, 637, 646, 645 +519, 736, 737, 746, 745, 637, 638, 647, 646 +520, 737, 738, 747, 746, 638, 639, 648, 647 +521, 739, 740, 749, 748, 640, 641, 650, 649 +522, 740, 741, 750, 749, 641, 642, 651, 650 +523, 741, 742, 751, 750, 642, 643, 652, 651 +524, 742, 743, 752, 751, 643, 644, 653, 652 +525, 743, 744, 753, 752, 644, 645, 654, 653 +526, 744, 745, 754, 753, 645, 646, 655, 654 +527, 745, 746, 755, 754, 646, 647, 656, 655 +528, 746, 747, 756, 755, 647, 648, 657, 656 +529, 748, 749, 758, 757, 649, 650, 659, 658 +530, 749, 750, 759, 758, 650, 651, 660, 659 +531, 750, 751, 760, 759, 651, 652, 661, 660 +532, 751, 752, 761, 760, 652, 653, 662, 661 +533, 752, 753, 762, 761, 653, 654, 663, 662 +534, 753, 754, 763, 762, 654, 655, 664, 663 +535, 754, 755, 764, 763, 655, 656, 665, 664 +536, 755, 756, 765, 764, 656, 657, 666, 665 +537, 757, 758, 767, 766, 658, 659, 668, 667 +538, 758, 759, 768, 767, 659, 660, 669, 668 +539, 759, 760, 769, 768, 660, 661, 670, 669 +540, 760, 761, 770, 769, 661, 662, 671, 670 +541, 761, 762, 771, 770, 662, 663, 672, 671 +542, 762, 763, 772, 771, 663, 664, 673, 672 +543, 763, 764, 773, 772, 664, 665, 674, 673 +544, 764, 765, 774, 773, 665, 666, 675, 674 +545, 766, 767, 776, 775, 667, 668, 677, 676 +546, 767, 768, 777, 776, 668, 669, 678, 677 +547, 768, 769, 778, 777, 669, 670, 679, 678 +548, 769, 770, 779, 778, 670, 671, 680, 679 +549, 770, 771, 780, 779, 671, 672, 681, 680 +550, 771, 772, 781, 780, 672, 673, 682, 681 +551, 772, 773, 782, 781, 673, 674, 683, 682 +552, 773, 774, 783, 782, 674, 675, 684, 683 +553, 775, 776, 785, 784, 676, 677, 686, 685 +554, 776, 777, 786, 785, 677, 678, 687, 686 +555, 777, 778, 787, 786, 678, 679, 688, 687 +556, 778, 779, 788, 787, 679, 680, 689, 688 +557, 779, 780, 789, 788, 680, 681, 690, 689 +558, 780, 781, 790, 789, 681, 682, 691, 690 +559, 781, 782, 791, 790, 682, 683, 692, 691 +560, 782, 783, 792, 791, 683, 684, 693, 692 +561, 793, 794, 803, 802, 694, 695, 704, 703 +562, 794, 795, 804, 803, 695, 696, 705, 704 +563, 795, 796, 805, 804, 696, 697, 706, 705 +564, 796, 797, 806, 805, 697, 698, 707, 706 +565, 797, 798, 807, 806, 698, 699, 708, 707 +566, 798, 799, 808, 807, 699, 700, 709, 708 +567, 799, 800, 809, 808, 700, 701, 710, 709 +568, 800, 801, 810, 809, 701, 702, 711, 710 +569, 802, 803, 812, 811, 703, 704, 713, 712 +570, 803, 804, 813, 812, 704, 705, 714, 713 +571, 804, 805, 814, 813, 705, 706, 715, 714 +572, 805, 806, 815, 814, 706, 707, 716, 715 +573, 806, 807, 816, 815, 707, 708, 717, 716 +574, 807, 808, 817, 816, 708, 709, 718, 717 +575, 808, 809, 818, 817, 709, 710, 719, 718 +576, 809, 810, 819, 818, 710, 711, 720, 719 +577, 811, 812, 821, 820, 712, 713, 722, 721 +578, 812, 813, 822, 821, 713, 714, 723, 722 +579, 813, 814, 823, 822, 714, 715, 724, 723 +580, 814, 815, 824, 823, 715, 716, 725, 724 +581, 815, 816, 825, 824, 716, 717, 726, 725 +582, 816, 817, 826, 825, 717, 718, 727, 726 +583, 817, 818, 827, 826, 718, 719, 728, 727 +584, 818, 819, 828, 827, 719, 720, 729, 728 +585, 820, 821, 830, 829, 721, 722, 731, 730 +586, 821, 822, 831, 830, 722, 723, 732, 731 +587, 822, 823, 832, 831, 723, 724, 733, 732 +588, 823, 824, 833, 832, 724, 725, 734, 733 +589, 824, 825, 834, 833, 725, 726, 735, 734 +590, 825, 826, 835, 834, 726, 727, 736, 735 +591, 826, 827, 836, 835, 727, 728, 737, 736 +592, 827, 828, 837, 836, 728, 729, 738, 737 +593, 829, 830, 839, 838, 730, 731, 740, 739 +594, 830, 831, 840, 839, 731, 732, 741, 740 +595, 831, 832, 841, 840, 732, 733, 742, 741 +596, 832, 833, 842, 841, 733, 734, 743, 742 +597, 833, 834, 843, 842, 734, 735, 744, 743 +598, 834, 835, 844, 843, 735, 736, 745, 744 +599, 835, 836, 845, 844, 736, 737, 746, 745 +600, 836, 837, 846, 845, 737, 738, 747, 746 +601, 838, 839, 848, 847, 739, 740, 749, 748 +602, 839, 840, 849, 848, 740, 741, 750, 749 +603, 840, 841, 850, 849, 741, 742, 751, 750 +604, 841, 842, 851, 850, 742, 743, 752, 751 +605, 842, 843, 852, 851, 743, 744, 753, 752 +606, 843, 844, 853, 852, 744, 745, 754, 753 +607, 844, 845, 854, 853, 745, 746, 755, 754 +608, 845, 846, 855, 854, 746, 747, 756, 755 +609, 847, 848, 857, 856, 748, 749, 758, 757 +610, 848, 849, 858, 857, 749, 750, 759, 758 +611, 849, 850, 859, 858, 750, 751, 760, 759 +612, 850, 851, 860, 859, 751, 752, 761, 760 +613, 851, 852, 861, 860, 752, 753, 762, 761 +614, 852, 853, 862, 861, 753, 754, 763, 762 +615, 853, 854, 863, 862, 754, 755, 764, 763 +616, 854, 855, 864, 863, 755, 756, 765, 764 +617, 856, 857, 866, 865, 757, 758, 767, 766 +618, 857, 858, 867, 866, 758, 759, 768, 767 +619, 858, 859, 868, 867, 759, 760, 769, 768 +620, 859, 860, 869, 868, 760, 761, 770, 769 +621, 860, 861, 870, 869, 761, 762, 771, 770 +622, 861, 862, 871, 870, 762, 763, 772, 771 +623, 862, 863, 872, 871, 763, 764, 773, 772 +624, 863, 864, 873, 872, 764, 765, 774, 773 +625, 865, 866, 875, 874, 766, 767, 776, 775 +626, 866, 867, 876, 875, 767, 768, 777, 776 +627, 867, 868, 877, 876, 768, 769, 778, 777 +628, 868, 869, 878, 877, 769, 770, 779, 778 +629, 869, 870, 879, 878, 770, 771, 780, 779 +630, 870, 871, 880, 879, 771, 772, 781, 780 +631, 871, 872, 881, 880, 772, 773, 782, 781 +632, 872, 873, 882, 881, 773, 774, 783, 782 +633, 874, 875, 884, 883, 775, 776, 785, 784 +634, 875, 876, 885, 884, 776, 777, 786, 785 +635, 876, 877, 886, 885, 777, 778, 787, 786 +636, 877, 878, 887, 886, 778, 779, 788, 787 +637, 878, 879, 888, 887, 779, 780, 789, 788 +638, 879, 880, 889, 888, 780, 781, 790, 789 +639, 880, 881, 890, 889, 781, 782, 791, 790 +640, 881, 882, 891, 890, 782, 783, 792, 791 +*End Part +** +** +** ASSEMBLY +** +*Assembly, name=Assembly +** +*Instance, name=Part-1-1, part=Part-1 +*End Instance +** +*End Assembly +** +** MATERIALS +** +*Material, name=Material-1 +*Elastic +10., 0.49 diff --git a/single-node-refactor/regression_tests/standard_results/Abaqus_read/state/mat_pt_state_t_1.0000e+00.txt b/single-node-refactor/regression_tests/standard_results/Abaqus_read/state/mat_pt_state_t_1.0000e+00.txt new file mode 100644 index 000000000..64c795946 --- /dev/null +++ b/single-node-refactor/regression_tests/standard_results/Abaqus_read/state/mat_pt_state_t_1.0000e+00.txt @@ -0,0 +1,642 @@ +# state dump file +# x y z radius_2D radius_3D den pres sie sspd vol mass +-3.500000000000e+00 -3.500000000000e+00 9.500000000033e+00 4.949747468306e+00 1.071214264284e+01 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +-3.500000000000e+00 -2.500000000000e+00 9.500000000033e+00 4.301162633521e+00 1.042832680734e+01 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +-3.500000000000e+00 -1.500000000000e+00 9.500000000033e+00 3.807886552932e+00 1.023474474526e+01 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +-3.500000000000e+00 -5.000000000000e-01 9.500000000033e+00 3.535533905933e+00 1.013656746639e+01 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +-3.500000000000e+00 5.000000000000e-01 9.500000000033e+00 3.535533905933e+00 1.013656746639e+01 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +-3.500000000000e+00 1.500000000000e+00 9.500000000033e+00 3.807886552932e+00 1.023474474526e+01 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +-3.500000000000e+00 2.500000000000e+00 9.500000000033e+00 4.301162633521e+00 1.042832680734e+01 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +-3.500000000000e+00 3.500000000000e+00 9.500000000033e+00 4.949747468306e+00 1.071214264284e+01 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +-3.500000000000e+00 -3.500000000000e+00 8.500000000000e+00 4.949747468306e+00 9.836157786453e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +-3.500000000000e+00 -2.500000000000e+00 8.500000000000e+00 4.301162633521e+00 9.526279441629e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +-3.500000000000e+00 -1.500000000000e+00 8.500000000000e+00 3.807886552932e+00 9.313968005099e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +-3.500000000000e+00 -5.000000000000e-01 8.500000000000e+00 3.535533905933e+00 9.205976319761e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +-3.500000000000e+00 5.000000000000e-01 8.500000000000e+00 3.535533905933e+00 9.205976319761e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +-3.500000000000e+00 1.500000000000e+00 8.500000000000e+00 3.807886552932e+00 9.313968005099e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +-3.500000000000e+00 2.500000000000e+00 8.500000000000e+00 4.301162633521e+00 9.526279441629e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +-3.500000000000e+00 3.500000000000e+00 8.500000000000e+00 4.949747468306e+00 9.836157786453e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +-3.500000000000e+00 -3.500000000000e+00 7.500000000008e+00 4.949747468306e+00 8.986100377812e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +-3.500000000000e+00 -2.500000000000e+00 7.500000000008e+00 4.301162633521e+00 8.645808232902e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +-3.500000000000e+00 -1.500000000000e+00 7.500000000008e+00 3.807886552932e+00 8.411301920637e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +-3.500000000000e+00 -5.000000000000e-01 7.500000000008e+00 3.535533905933e+00 8.291561975895e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +-3.500000000000e+00 5.000000000000e-01 7.500000000008e+00 3.535533905933e+00 8.291561975895e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +-3.500000000000e+00 1.500000000000e+00 7.500000000008e+00 3.807886552932e+00 8.411301920637e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +-3.500000000000e+00 2.500000000000e+00 7.500000000008e+00 4.301162633521e+00 8.645808232902e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +-3.500000000000e+00 3.500000000000e+00 7.500000000008e+00 4.949747468306e+00 8.986100377812e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +-3.500000000000e+00 -3.500000000000e+00 6.500004552938e+00 4.949747468306e+00 8.170070941443e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +-3.500000000000e+00 -2.500000000000e+00 6.500004552938e+00 4.301162633521e+00 7.794232430985e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +-3.500000000000e+00 -1.500000000000e+00 6.500004552938e+00 3.807886552932e+00 7.533263515119e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +-3.500000000000e+00 -5.000000000000e-01 6.500004552938e+00 3.535533905933e+00 7.399328293042e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +-3.500000000000e+00 5.000000000000e-01 6.500004552938e+00 3.535533905933e+00 7.399328293042e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +-3.500000000000e+00 1.500000000000e+00 6.500004552938e+00 3.807886552932e+00 7.533263515119e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +-3.500000000000e+00 2.500000000000e+00 6.500004552938e+00 4.301162633521e+00 7.794232430985e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +-3.500000000000e+00 3.500000000000e+00 6.500004552938e+00 4.949747468306e+00 8.170070941443e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +-3.500000000000e+00 -3.500000000000e+00 5.503774481144e+00 4.949747468306e+00 7.402130337902e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +-3.500000000000e+00 -2.500000000000e+00 5.503774481144e+00 4.301162633521e+00 6.985093667181e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +-3.500000000000e+00 -1.500000000000e+00 5.503774481144e+00 3.807886552932e+00 6.692647722635e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +-3.500000000000e+00 -5.000000000000e-01 5.503774481144e+00 3.535533905933e+00 6.541523793375e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +-3.500000000000e+00 5.000000000000e-01 5.503774481144e+00 3.535533905933e+00 6.541523793375e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +-3.500000000000e+00 1.500000000000e+00 5.503774481144e+00 3.807886552932e+00 6.692647722635e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +-3.500000000000e+00 2.500000000000e+00 5.503774481144e+00 4.301162633521e+00 6.985093667181e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +-3.500000000000e+00 3.500000000000e+00 5.503774481144e+00 4.949747468306e+00 7.402130337902e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +-3.500000000000e+00 -3.500000000000e+00 4.601481985862e+00 4.949747468306e+00 6.758227316850e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +-3.500000000000e+00 -2.500000000000e+00 4.601481985862e+00 4.301162633521e+00 6.298701172957e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +-3.500000000000e+00 -1.500000000000e+00 4.601481985862e+00 3.807886552932e+00 5.972741118298e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +-3.500000000000e+00 -5.000000000000e-01 4.601481985862e+00 3.535533905933e+00 5.802898970878e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +-3.500000000000e+00 5.000000000000e-01 4.601481985862e+00 3.535533905933e+00 5.802898970878e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +-3.500000000000e+00 1.500000000000e+00 4.601481985862e+00 3.807886552932e+00 5.972741118298e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +-3.500000000000e+00 2.500000000000e+00 4.601481985862e+00 4.301162633521e+00 6.298701172957e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +-3.500000000000e+00 3.500000000000e+00 4.601481985862e+00 4.949747468306e+00 6.758227316850e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +-3.500000000000e+00 -3.500000000000e+00 4.014394513860e+00 4.949747468306e+00 6.373018383224e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +-3.500000000000e+00 -2.500000000000e+00 4.014394513860e+00 4.301162633521e+00 5.883482243783e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +-3.500000000000e+00 -1.500000000000e+00 4.014394513860e+00 3.807886552932e+00 5.533115154496e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +-3.500000000000e+00 -5.000000000000e-01 4.014394513860e+00 3.535533905933e+00 5.349332978317e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +-3.500000000000e+00 5.000000000000e-01 4.014394513860e+00 3.535533905933e+00 5.349332978317e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +-3.500000000000e+00 1.500000000000e+00 4.014394513860e+00 3.807886552932e+00 5.533115154496e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +-3.500000000000e+00 2.500000000000e+00 4.014394513860e+00 4.301162633521e+00 5.883482243783e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +-3.500000000000e+00 3.500000000000e+00 4.014394513860e+00 4.949747468306e+00 6.373018383224e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +-3.500000000000e+00 -3.500000000000e+00 3.680096178300e+00 4.949747468306e+00 6.167909522807e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +-3.500000000000e+00 -2.500000000000e+00 3.680096178300e+00 4.301162633521e+00 5.660663201564e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +-3.500000000000e+00 -1.500000000000e+00 3.680096178300e+00 3.807886552932e+00 5.295574367482e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +-3.500000000000e+00 -5.000000000000e-01 3.680096178300e+00 3.535533905933e+00 5.103244838486e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +-3.500000000000e+00 5.000000000000e-01 3.680096178300e+00 3.535533905933e+00 5.103244838486e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +-3.500000000000e+00 1.500000000000e+00 3.680096178300e+00 3.807886552932e+00 5.295574367482e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +-3.500000000000e+00 2.500000000000e+00 3.680096178300e+00 4.301162633521e+00 5.660663201564e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +-3.500000000000e+00 3.500000000000e+00 3.680096178300e+00 4.949747468306e+00 6.167909522807e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +-3.500000000000e+00 -3.500000000000e+00 3.296094971545e+00 4.949747468306e+00 5.946784178146e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +-3.500000000000e+00 -2.500000000000e+00 3.296094971545e+00 4.301162633521e+00 5.418878302882e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +-3.500000000000e+00 -1.500000000000e+00 3.296094971545e+00 3.807886552932e+00 5.036292491649e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +-3.500000000000e+00 -5.000000000000e-01 3.296094971545e+00 3.535533905933e+00 4.833657213895e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +-3.500000000000e+00 5.000000000000e-01 3.296094971545e+00 3.535533905933e+00 4.833657213895e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +-3.500000000000e+00 1.500000000000e+00 3.296094971545e+00 3.807886552932e+00 5.036292491649e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +-3.500000000000e+00 2.500000000000e+00 3.296094971545e+00 4.301162633521e+00 5.418878302882e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +-3.500000000000e+00 3.500000000000e+00 3.296094971545e+00 4.949747468306e+00 5.946784178146e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +-3.500000000000e+00 -3.500000000000e+00 1.532681249456e+00 4.949747468306e+00 5.181612858216e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +-3.500000000000e+00 -2.500000000000e+00 1.532681249456e+00 4.301162633521e+00 4.566082764519e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +-3.500000000000e+00 -1.500000000000e+00 1.532681249456e+00 3.807886552932e+00 4.104766962013e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +-3.500000000000e+00 -5.000000000000e-01 1.532681249456e+00 3.535533905933e+00 3.853454529696e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +-3.500000000000e+00 5.000000000000e-01 1.532681249456e+00 3.535533905933e+00 3.853454529696e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +-3.500000000000e+00 1.500000000000e+00 1.532681249456e+00 3.807886552932e+00 4.104766962013e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +-3.500000000000e+00 2.500000000000e+00 1.532681249456e+00 4.301162633521e+00 4.566082764519e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +-3.500000000000e+00 3.500000000000e+00 1.532681249456e+00 4.949747468306e+00 5.181612858216e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +-2.500000000000e+00 -3.500000000000e+00 9.500000000033e+00 4.301162633521e+00 1.042832680734e+01 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +-2.500000000000e+00 -2.500000000000e+00 9.500000000033e+00 3.535533905933e+00 1.013656746639e+01 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +-2.500000000000e+00 -1.500000000000e+00 9.500000000033e+00 2.915475947423e+00 9.937303457208e+00 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +-2.500000000000e+00 -5.000000000000e-01 9.500000000033e+00 2.549509756796e+00 9.836157786485e+00 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +-2.500000000000e+00 5.000000000000e-01 9.500000000033e+00 2.549509756796e+00 9.836157786485e+00 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +-2.500000000000e+00 1.500000000000e+00 9.500000000033e+00 2.915475947423e+00 9.937303457208e+00 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +-2.500000000000e+00 2.500000000000e+00 9.500000000033e+00 3.535533905933e+00 1.013656746639e+01 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +-2.500000000000e+00 3.500000000000e+00 9.500000000033e+00 4.301162633521e+00 1.042832680734e+01 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +-2.500000000000e+00 -3.500000000000e+00 8.500000000000e+00 4.301162633521e+00 9.526279441629e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +-2.500000000000e+00 -2.500000000000e+00 8.500000000000e+00 3.535533905933e+00 9.205976319761e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +-2.500000000000e+00 -1.500000000000e+00 8.500000000000e+00 2.915475947423e+00 8.986100377806e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +-2.500000000000e+00 -5.000000000000e-01 8.500000000000e+00 2.549509756796e+00 8.874119674649e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +-2.500000000000e+00 5.000000000000e-01 8.500000000000e+00 2.549509756796e+00 8.874119674649e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +-2.500000000000e+00 1.500000000000e+00 8.500000000000e+00 2.915475947423e+00 8.986100377806e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +-2.500000000000e+00 2.500000000000e+00 8.500000000000e+00 3.535533905933e+00 9.205976319761e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +-2.500000000000e+00 3.500000000000e+00 8.500000000000e+00 4.301162633521e+00 9.526279441629e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +-2.500000000000e+00 -3.500000000000e+00 7.500000000008e+00 4.301162633521e+00 8.645808232902e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +-2.500000000000e+00 -2.500000000000e+00 7.500000000008e+00 3.535533905933e+00 8.291561975895e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +-2.500000000000e+00 -1.500000000000e+00 7.500000000008e+00 2.915475947423e+00 8.046738469723e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +-2.500000000000e+00 -5.000000000000e-01 7.500000000008e+00 2.549509756796e+00 7.921489758885e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +-2.500000000000e+00 5.000000000000e-01 7.500000000008e+00 2.549509756796e+00 7.921489758885e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +-2.500000000000e+00 1.500000000000e+00 7.500000000008e+00 2.915475947423e+00 8.046738469723e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +-2.500000000000e+00 2.500000000000e+00 7.500000000008e+00 3.535533905933e+00 8.291561975895e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +-2.500000000000e+00 3.500000000000e+00 7.500000000008e+00 4.301162633521e+00 8.645808232902e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +-2.500000000000e+00 -3.500000000000e+00 6.500004552938e+00 4.301162633521e+00 7.794232430985e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +-2.500000000000e+00 -2.500000000000e+00 6.500004552938e+00 3.535533905933e+00 7.399328293042e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +-2.500000000000e+00 -1.500000000000e+00 6.500004552938e+00 2.915475947423e+00 7.123907578585e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +-2.500000000000e+00 -5.000000000000e-01 6.500004552938e+00 2.549509756796e+00 6.982124260439e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +-2.500000000000e+00 5.000000000000e-01 6.500004552938e+00 2.549509756796e+00 6.982124260439e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +-2.500000000000e+00 1.500000000000e+00 6.500004552938e+00 2.915475947423e+00 7.123907578585e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +-2.500000000000e+00 2.500000000000e+00 6.500004552938e+00 3.535533905933e+00 7.399328293042e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +-2.500000000000e+00 3.500000000000e+00 6.500004552938e+00 4.301162633521e+00 7.794232430985e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +-2.500000000000e+00 -3.500000000000e+00 5.503774481144e+00 4.301162633521e+00 6.985093667181e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +-2.500000000000e+00 -2.500000000000e+00 5.503774481144e+00 3.535533905933e+00 6.541523793375e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +-2.500000000000e+00 -1.500000000000e+00 5.503774481144e+00 2.915475947423e+00 6.228284959705e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +-2.500000000000e+00 -5.000000000000e-01 5.503774481144e+00 2.549509756796e+00 6.065602487741e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +-2.500000000000e+00 5.000000000000e-01 5.503774481144e+00 2.549509756796e+00 6.065602487741e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +-2.500000000000e+00 1.500000000000e+00 5.503774481144e+00 2.915475947423e+00 6.228284959705e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +-2.500000000000e+00 2.500000000000e+00 5.503774481144e+00 3.535533905933e+00 6.541523793375e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +-2.500000000000e+00 3.500000000000e+00 5.503774481144e+00 4.301162633521e+00 6.985093667181e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +-2.500000000000e+00 -3.500000000000e+00 4.601481985862e+00 4.301162633521e+00 6.298701172957e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +-2.500000000000e+00 -2.500000000000e+00 4.601481985862e+00 3.535533905933e+00 5.802898970878e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +-2.500000000000e+00 -1.500000000000e+00 4.601481985862e+00 2.915475947423e+00 5.447351325756e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +-2.500000000000e+00 -5.000000000000e-01 4.601481985862e+00 2.549509756796e+00 5.260573777281e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +-2.500000000000e+00 5.000000000000e-01 4.601481985862e+00 2.549509756796e+00 5.260573777281e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +-2.500000000000e+00 1.500000000000e+00 4.601481985862e+00 2.915475947423e+00 5.447351325756e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +-2.500000000000e+00 2.500000000000e+00 4.601481985862e+00 3.535533905933e+00 5.802898970878e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +-2.500000000000e+00 3.500000000000e+00 4.601481985862e+00 4.301162633521e+00 6.298701172957e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +-2.500000000000e+00 -3.500000000000e+00 4.014394513860e+00 4.301162633521e+00 5.883482243783e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +-2.500000000000e+00 -2.500000000000e+00 4.014394513860e+00 3.535533905933e+00 5.349332978317e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +-2.500000000000e+00 -1.500000000000e+00 4.014394513860e+00 2.915475947423e+00 4.961387236742e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +-2.500000000000e+00 -5.000000000000e-01 4.014394513860e+00 2.549509756796e+00 4.755561303664e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +-2.500000000000e+00 5.000000000000e-01 4.014394513860e+00 2.549509756796e+00 4.755561303664e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +-2.500000000000e+00 1.500000000000e+00 4.014394513860e+00 2.915475947423e+00 4.961387236742e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +-2.500000000000e+00 2.500000000000e+00 4.014394513860e+00 3.535533905933e+00 5.349332978317e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +-2.500000000000e+00 3.500000000000e+00 4.014394513860e+00 4.301162633521e+00 5.883482243783e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +-2.500000000000e+00 -3.500000000000e+00 3.680096178300e+00 4.301162633521e+00 5.660663201564e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +-2.500000000000e+00 -2.500000000000e+00 3.680096178300e+00 3.535533905933e+00 5.103244838486e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +-2.500000000000e+00 -1.500000000000e+00 3.680096178300e+00 2.915475947423e+00 4.695008826566e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +-2.500000000000e+00 -5.000000000000e-01 3.680096178300e+00 2.549509756796e+00 4.476952968430e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +-2.500000000000e+00 5.000000000000e-01 3.680096178300e+00 2.549509756796e+00 4.476952968430e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +-2.500000000000e+00 1.500000000000e+00 3.680096178300e+00 2.915475947423e+00 4.695008826566e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +-2.500000000000e+00 2.500000000000e+00 3.680096178300e+00 3.535533905933e+00 5.103244838486e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +-2.500000000000e+00 3.500000000000e+00 3.680096178300e+00 4.301162633521e+00 5.660663201564e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +-2.500000000000e+00 -3.500000000000e+00 3.296094971545e+00 4.301162633521e+00 5.418878302882e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +-2.500000000000e+00 -2.500000000000e+00 3.296094971545e+00 3.535533905933e+00 4.833657213895e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +-2.500000000000e+00 -1.500000000000e+00 3.296094971545e+00 2.915475947423e+00 4.400482026033e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +-2.500000000000e+00 -5.000000000000e-01 3.296094971545e+00 2.549509756796e+00 4.167042363769e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +-2.500000000000e+00 5.000000000000e-01 3.296094971545e+00 2.549509756796e+00 4.167042363769e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +-2.500000000000e+00 1.500000000000e+00 3.296094971545e+00 2.915475947423e+00 4.400482026033e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +-2.500000000000e+00 2.500000000000e+00 3.296094971545e+00 3.535533905933e+00 4.833657213895e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +-2.500000000000e+00 3.500000000000e+00 3.296094971545e+00 4.301162633521e+00 5.418878302882e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +-2.500000000000e+00 -3.500000000000e+00 1.532681249456e+00 4.301162633521e+00 4.566082764519e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +-2.500000000000e+00 -2.500000000000e+00 1.532681249456e+00 3.535533905933e+00 3.853454529696e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +-2.500000000000e+00 -1.500000000000e+00 1.532681249456e+00 2.915475947423e+00 3.293798993933e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +-2.500000000000e+00 -5.000000000000e-01 1.532681249456e+00 2.549509756796e+00 2.974745671891e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +-2.500000000000e+00 5.000000000000e-01 1.532681249456e+00 2.549509756796e+00 2.974745671891e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +-2.500000000000e+00 1.500000000000e+00 1.532681249456e+00 2.915475947423e+00 3.293798993933e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +-2.500000000000e+00 2.500000000000e+00 1.532681249456e+00 3.535533905933e+00 3.853454529696e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +-2.500000000000e+00 3.500000000000e+00 1.532681249456e+00 4.301162633521e+00 4.566082764519e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +-1.500000000000e+00 -3.500000000000e+00 9.500000000033e+00 3.807886552932e+00 1.023474474526e+01 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +-1.500000000000e+00 -2.500000000000e+00 9.500000000033e+00 2.915475947423e+00 9.937303457208e+00 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +-1.500000000000e+00 -1.500000000000e+00 9.500000000033e+00 2.121320343560e+00 9.733961166998e+00 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +-1.500000000000e+00 -5.000000000000e-01 9.500000000033e+00 1.581138830084e+00 9.630680142162e+00 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +-1.500000000000e+00 5.000000000000e-01 9.500000000033e+00 1.581138830084e+00 9.630680142162e+00 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +-1.500000000000e+00 1.500000000000e+00 9.500000000033e+00 2.121320343560e+00 9.733961166998e+00 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +-1.500000000000e+00 2.500000000000e+00 9.500000000033e+00 2.915475947423e+00 9.937303457208e+00 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +-1.500000000000e+00 3.500000000000e+00 9.500000000033e+00 3.807886552932e+00 1.023474474526e+01 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +-1.500000000000e+00 -3.500000000000e+00 8.500000000000e+00 3.807886552932e+00 9.313968005099e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +-1.500000000000e+00 -2.500000000000e+00 8.500000000000e+00 2.915475947423e+00 8.986100377806e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +-1.500000000000e+00 -1.500000000000e+00 8.500000000000e+00 2.121320343560e+00 8.760707733968e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +-1.500000000000e+00 -5.000000000000e-01 8.500000000000e+00 1.581138830084e+00 8.645808232895e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +-1.500000000000e+00 5.000000000000e-01 8.500000000000e+00 1.581138830084e+00 8.645808232895e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +-1.500000000000e+00 1.500000000000e+00 8.500000000000e+00 2.121320343560e+00 8.760707733968e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +-1.500000000000e+00 2.500000000000e+00 8.500000000000e+00 2.915475947423e+00 8.986100377806e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +-1.500000000000e+00 3.500000000000e+00 8.500000000000e+00 3.807886552932e+00 9.313968005099e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +-1.500000000000e+00 -3.500000000000e+00 7.500000000008e+00 3.807886552932e+00 8.411301920637e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +-1.500000000000e+00 -2.500000000000e+00 7.500000000008e+00 2.915475947423e+00 8.046738469723e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +-1.500000000000e+00 -1.500000000000e+00 7.500000000008e+00 2.121320343560e+00 7.794228634067e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +-1.500000000000e+00 -5.000000000000e-01 7.500000000008e+00 1.581138830084e+00 7.664854858385e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +-1.500000000000e+00 5.000000000000e-01 7.500000000008e+00 1.581138830084e+00 7.664854858385e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +-1.500000000000e+00 1.500000000000e+00 7.500000000008e+00 2.121320343560e+00 7.794228634067e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +-1.500000000000e+00 2.500000000000e+00 7.500000000008e+00 2.915475947423e+00 8.046738469723e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +-1.500000000000e+00 3.500000000000e+00 7.500000000008e+00 3.807886552932e+00 8.411301920637e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +-1.500000000000e+00 -3.500000000000e+00 6.500004552938e+00 3.807886552932e+00 7.533263515119e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +-1.500000000000e+00 -2.500000000000e+00 6.500004552938e+00 2.915475947423e+00 7.123907578585e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +-1.500000000000e+00 -1.500000000000e+00 6.500004552938e+00 2.121320343560e+00 6.837401493858e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +-1.500000000000e+00 -5.000000000000e-01 6.500004552938e+00 1.581138830084e+00 6.689548504063e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +-1.500000000000e+00 5.000000000000e-01 6.500004552938e+00 1.581138830084e+00 6.689548504063e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +-1.500000000000e+00 1.500000000000e+00 6.500004552938e+00 2.121320343560e+00 6.837401493858e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +-1.500000000000e+00 2.500000000000e+00 6.500004552938e+00 2.915475947423e+00 7.123907578585e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +-1.500000000000e+00 3.500000000000e+00 6.500004552938e+00 3.807886552932e+00 7.533263515119e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +-1.500000000000e+00 -3.500000000000e+00 5.503774481144e+00 3.807886552932e+00 6.692647722635e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +-1.500000000000e+00 -2.500000000000e+00 5.503774481144e+00 2.915475947423e+00 6.228284959705e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +-1.500000000000e+00 -1.500000000000e+00 5.503774481144e+00 2.121320343560e+00 5.898434838098e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +-1.500000000000e+00 -5.000000000000e-01 5.503774481144e+00 1.581138830084e+00 5.726389223524e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +-1.500000000000e+00 5.000000000000e-01 5.503774481144e+00 1.581138830084e+00 5.726389223524e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +-1.500000000000e+00 1.500000000000e+00 5.503774481144e+00 2.121320343560e+00 5.898434838098e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +-1.500000000000e+00 2.500000000000e+00 5.503774481144e+00 2.915475947423e+00 6.228284959705e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +-1.500000000000e+00 3.500000000000e+00 5.503774481144e+00 3.807886552932e+00 6.692647722635e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +-1.500000000000e+00 -3.500000000000e+00 4.601481985862e+00 3.807886552932e+00 5.972741118298e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +-1.500000000000e+00 -2.500000000000e+00 4.601481985862e+00 2.915475947423e+00 5.447351325756e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +-1.500000000000e+00 -1.500000000000e+00 4.601481985862e+00 2.121320343560e+00 5.066915873212e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +-1.500000000000e+00 -5.000000000000e-01 4.601481985862e+00 1.581138830084e+00 4.865556131236e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +-1.500000000000e+00 5.000000000000e-01 4.601481985862e+00 1.581138830084e+00 4.865556131236e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +-1.500000000000e+00 1.500000000000e+00 4.601481985862e+00 2.121320343560e+00 5.066915873212e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +-1.500000000000e+00 2.500000000000e+00 4.601481985862e+00 2.915475947423e+00 5.447351325756e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +-1.500000000000e+00 3.500000000000e+00 4.601481985862e+00 3.807886552932e+00 5.972741118298e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +-1.500000000000e+00 -3.500000000000e+00 4.014394513860e+00 3.807886552932e+00 5.533115154496e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +-1.500000000000e+00 -2.500000000000e+00 4.014394513860e+00 2.915475947423e+00 4.961387236742e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +-1.500000000000e+00 -1.500000000000e+00 4.014394513860e+00 2.121320343560e+00 4.540414442857e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +-1.500000000000e+00 -5.000000000000e-01 4.014394513860e+00 1.581138830084e+00 4.314552504363e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +-1.500000000000e+00 5.000000000000e-01 4.014394513860e+00 1.581138830084e+00 4.314552504363e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +-1.500000000000e+00 1.500000000000e+00 4.014394513860e+00 2.121320343560e+00 4.540414442857e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +-1.500000000000e+00 2.500000000000e+00 4.014394513860e+00 2.915475947423e+00 4.961387236742e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +-1.500000000000e+00 3.500000000000e+00 4.014394513860e+00 3.807886552932e+00 5.533115154496e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +-1.500000000000e+00 -3.500000000000e+00 3.680096178300e+00 3.807886552932e+00 5.295574367482e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +-1.500000000000e+00 -2.500000000000e+00 3.680096178300e+00 2.915475947423e+00 4.695008826566e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +-1.500000000000e+00 -1.500000000000e+00 3.680096178300e+00 2.121320343560e+00 4.247717961628e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +-1.500000000000e+00 -5.000000000000e-01 3.680096178300e+00 1.581138830084e+00 4.005384860602e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +-1.500000000000e+00 5.000000000000e-01 3.680096178300e+00 1.581138830084e+00 4.005384860602e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +-1.500000000000e+00 1.500000000000e+00 3.680096178300e+00 2.121320343560e+00 4.247717961628e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +-1.500000000000e+00 2.500000000000e+00 3.680096178300e+00 2.915475947423e+00 4.695008826566e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +-1.500000000000e+00 3.500000000000e+00 3.680096178300e+00 3.807886552932e+00 5.295574367482e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +-1.500000000000e+00 -3.500000000000e+00 3.296094971545e+00 3.807886552932e+00 5.036292491649e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +-1.500000000000e+00 -2.500000000000e+00 3.296094971545e+00 2.915475947423e+00 4.400482026033e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +-1.500000000000e+00 -1.500000000000e+00 3.296094971545e+00 2.121320343560e+00 3.919724743071e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +-1.500000000000e+00 -5.000000000000e-01 3.296094971545e+00 1.581138830084e+00 3.655713618631e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +-1.500000000000e+00 5.000000000000e-01 3.296094971545e+00 1.581138830084e+00 3.655713618631e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +-1.500000000000e+00 1.500000000000e+00 3.296094971545e+00 2.121320343560e+00 3.919724743071e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +-1.500000000000e+00 2.500000000000e+00 3.296094971545e+00 2.915475947423e+00 4.400482026033e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +-1.500000000000e+00 3.500000000000e+00 3.296094971545e+00 3.807886552932e+00 5.036292491649e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +-1.500000000000e+00 -3.500000000000e+00 1.532681249456e+00 3.807886552932e+00 4.104766962013e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +-1.500000000000e+00 -2.500000000000e+00 1.532681249456e+00 2.915475947423e+00 3.293798993933e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +-1.500000000000e+00 -1.500000000000e+00 1.532681249456e+00 2.121320343560e+00 2.617080780647e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +-1.500000000000e+00 -5.000000000000e-01 1.532681249456e+00 1.581138830084e+00 2.202069892722e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +-1.500000000000e+00 5.000000000000e-01 1.532681249456e+00 1.581138830084e+00 2.202069892722e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +-1.500000000000e+00 1.500000000000e+00 1.532681249456e+00 2.121320343560e+00 2.617080780647e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +-1.500000000000e+00 2.500000000000e+00 1.532681249456e+00 2.915475947423e+00 3.293798993933e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +-1.500000000000e+00 3.500000000000e+00 1.532681249456e+00 3.807886552932e+00 4.104766962013e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +-5.000000000000e-01 -3.500000000000e+00 9.500000000033e+00 3.535533905933e+00 1.013656746639e+01 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +-5.000000000000e-01 -2.500000000000e+00 9.500000000033e+00 2.549509756796e+00 9.836157786485e+00 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +-5.000000000000e-01 -1.500000000000e+00 9.500000000033e+00 1.581138830084e+00 9.630680142162e+00 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +-5.000000000000e-01 -5.000000000000e-01 9.500000000033e+00 7.071067811865e-01 9.526279441662e+00 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +-5.000000000000e-01 5.000000000000e-01 9.500000000033e+00 7.071067811865e-01 9.526279441662e+00 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +-5.000000000000e-01 1.500000000000e+00 9.500000000033e+00 1.581138830084e+00 9.630680142162e+00 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +-5.000000000000e-01 2.500000000000e+00 9.500000000033e+00 2.549509756796e+00 9.836157786485e+00 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +-5.000000000000e-01 3.500000000000e+00 9.500000000033e+00 3.535533905933e+00 1.013656746639e+01 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +-5.000000000000e-01 -3.500000000000e+00 8.500000000000e+00 3.535533905933e+00 9.205976319761e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +-5.000000000000e-01 -2.500000000000e+00 8.500000000000e+00 2.549509756796e+00 8.874119674649e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +-5.000000000000e-01 -1.500000000000e+00 8.500000000000e+00 1.581138830084e+00 8.645808232895e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +-5.000000000000e-01 -5.000000000000e-01 8.500000000000e+00 7.071067811865e-01 8.529361054616e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +-5.000000000000e-01 5.000000000000e-01 8.500000000000e+00 7.071067811865e-01 8.529361054616e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +-5.000000000000e-01 1.500000000000e+00 8.500000000000e+00 1.581138830084e+00 8.645808232895e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +-5.000000000000e-01 2.500000000000e+00 8.500000000000e+00 2.549509756796e+00 8.874119674649e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +-5.000000000000e-01 3.500000000000e+00 8.500000000000e+00 3.535533905933e+00 9.205976319761e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +-5.000000000000e-01 -3.500000000000e+00 7.500000000008e+00 3.535533905933e+00 8.291561975895e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +-5.000000000000e-01 -2.500000000000e+00 7.500000000008e+00 2.549509756796e+00 7.921489758885e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +-5.000000000000e-01 -1.500000000000e+00 7.500000000008e+00 1.581138830084e+00 7.664854858385e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +-5.000000000000e-01 -5.000000000000e-01 7.500000000008e+00 7.071067811865e-01 7.533259586667e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +-5.000000000000e-01 5.000000000000e-01 7.500000000008e+00 7.071067811865e-01 7.533259586667e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +-5.000000000000e-01 1.500000000000e+00 7.500000000008e+00 1.581138830084e+00 7.664854858385e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +-5.000000000000e-01 2.500000000000e+00 7.500000000008e+00 2.549509756796e+00 7.921489758885e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +-5.000000000000e-01 3.500000000000e+00 7.500000000008e+00 3.535533905933e+00 8.291561975895e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +-5.000000000000e-01 -3.500000000000e+00 6.500004552938e+00 3.535533905933e+00 7.399328293042e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +-5.000000000000e-01 -2.500000000000e+00 6.500004552938e+00 2.549509756796e+00 6.982124260439e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +-5.000000000000e-01 -1.500000000000e+00 6.500004552938e+00 1.581138830084e+00 6.689548504063e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +-5.000000000000e-01 -5.000000000000e-01 6.500004552938e+00 7.071067811865e-01 6.538352941546e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +-5.000000000000e-01 5.000000000000e-01 6.500004552938e+00 7.071067811865e-01 6.538352941546e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +-5.000000000000e-01 1.500000000000e+00 6.500004552938e+00 1.581138830084e+00 6.689548504063e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +-5.000000000000e-01 2.500000000000e+00 6.500004552938e+00 2.549509756796e+00 6.982124260439e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +-5.000000000000e-01 3.500000000000e+00 6.500004552938e+00 3.535533905933e+00 7.399328293042e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +-5.000000000000e-01 -3.500000000000e+00 5.503774481144e+00 3.535533905933e+00 6.541523793375e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +-5.000000000000e-01 -2.500000000000e+00 5.503774481144e+00 2.549509756796e+00 6.065602487741e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +-5.000000000000e-01 -1.500000000000e+00 5.503774481144e+00 1.581138830084e+00 5.726389223524e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +-5.000000000000e-01 -5.000000000000e-01 5.503774481144e+00 7.071067811865e-01 5.549011942615e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +-5.000000000000e-01 5.000000000000e-01 5.503774481144e+00 7.071067811865e-01 5.549011942615e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +-5.000000000000e-01 1.500000000000e+00 5.503774481144e+00 1.581138830084e+00 5.726389223524e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +-5.000000000000e-01 2.500000000000e+00 5.503774481144e+00 2.549509756796e+00 6.065602487741e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +-5.000000000000e-01 3.500000000000e+00 5.503774481144e+00 3.535533905933e+00 6.541523793375e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +-5.000000000000e-01 -3.500000000000e+00 4.601481985862e+00 3.535533905933e+00 5.802898970878e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +-5.000000000000e-01 -2.500000000000e+00 4.601481985862e+00 2.549509756796e+00 5.260573777281e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +-5.000000000000e-01 -1.500000000000e+00 4.601481985862e+00 1.581138830084e+00 4.865556131236e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +-5.000000000000e-01 -5.000000000000e-01 4.601481985862e+00 7.071067811865e-01 4.655495297625e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +-5.000000000000e-01 5.000000000000e-01 4.601481985862e+00 7.071067811865e-01 4.655495297625e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +-5.000000000000e-01 1.500000000000e+00 4.601481985862e+00 1.581138830084e+00 4.865556131236e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +-5.000000000000e-01 2.500000000000e+00 4.601481985862e+00 2.549509756796e+00 5.260573777281e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +-5.000000000000e-01 3.500000000000e+00 4.601481985862e+00 3.535533905933e+00 5.802898970878e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +-5.000000000000e-01 -3.500000000000e+00 4.014394513860e+00 3.535533905933e+00 5.349332978317e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +-5.000000000000e-01 -2.500000000000e+00 4.014394513860e+00 2.549509756796e+00 4.755561303664e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +-5.000000000000e-01 -1.500000000000e+00 4.014394513860e+00 1.581138830084e+00 4.314552504363e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +-5.000000000000e-01 -5.000000000000e-01 4.014394513860e+00 7.071067811865e-01 4.076194709887e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +-5.000000000000e-01 5.000000000000e-01 4.014394513860e+00 7.071067811865e-01 4.076194709887e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +-5.000000000000e-01 1.500000000000e+00 4.014394513860e+00 1.581138830084e+00 4.314552504363e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +-5.000000000000e-01 2.500000000000e+00 4.014394513860e+00 2.549509756796e+00 4.755561303664e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +-5.000000000000e-01 3.500000000000e+00 4.014394513860e+00 3.535533905933e+00 5.349332978317e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +-5.000000000000e-01 -3.500000000000e+00 3.680096178300e+00 3.535533905933e+00 5.103244838486e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +-5.000000000000e-01 -2.500000000000e+00 3.680096178300e+00 2.549509756796e+00 4.476952968430e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +-5.000000000000e-01 -1.500000000000e+00 3.680096178300e+00 1.581138830084e+00 4.005384860602e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +-5.000000000000e-01 -5.000000000000e-01 3.680096178300e+00 7.071067811865e-01 3.747413492202e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +-5.000000000000e-01 5.000000000000e-01 3.680096178300e+00 7.071067811865e-01 3.747413492202e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +-5.000000000000e-01 1.500000000000e+00 3.680096178300e+00 1.581138830084e+00 4.005384860602e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +-5.000000000000e-01 2.500000000000e+00 3.680096178300e+00 2.549509756796e+00 4.476952968430e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +-5.000000000000e-01 3.500000000000e+00 3.680096178300e+00 3.535533905933e+00 5.103244838486e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +-5.000000000000e-01 -3.500000000000e+00 3.296094971545e+00 3.535533905933e+00 4.833657213895e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +-5.000000000000e-01 -2.500000000000e+00 3.296094971545e+00 2.549509756796e+00 4.167042363769e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +-5.000000000000e-01 -1.500000000000e+00 3.296094971545e+00 1.581138830084e+00 3.655713618631e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +-5.000000000000e-01 -5.000000000000e-01 3.296094971545e+00 7.071067811865e-01 3.371089150622e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +-5.000000000000e-01 5.000000000000e-01 3.296094971545e+00 7.071067811865e-01 3.371089150622e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +-5.000000000000e-01 1.500000000000e+00 3.296094971545e+00 1.581138830084e+00 3.655713618631e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +-5.000000000000e-01 2.500000000000e+00 3.296094971545e+00 2.549509756796e+00 4.167042363769e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +-5.000000000000e-01 3.500000000000e+00 3.296094971545e+00 3.535533905933e+00 4.833657213895e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +-5.000000000000e-01 -3.500000000000e+00 1.532681249456e+00 3.535533905933e+00 3.853454529696e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +-5.000000000000e-01 -2.500000000000e+00 1.532681249456e+00 2.549509756796e+00 2.974745671891e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +-5.000000000000e-01 -1.500000000000e+00 1.532681249456e+00 1.581138830084e+00 2.202069892722e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +-5.000000000000e-01 -5.000000000000e-01 1.532681249456e+00 7.071067811865e-01 1.687931222661e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +-5.000000000000e-01 5.000000000000e-01 1.532681249456e+00 7.071067811865e-01 1.687931222661e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +-5.000000000000e-01 1.500000000000e+00 1.532681249456e+00 1.581138830084e+00 2.202069892722e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +-5.000000000000e-01 2.500000000000e+00 1.532681249456e+00 2.549509756796e+00 2.974745671891e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +-5.000000000000e-01 3.500000000000e+00 1.532681249456e+00 3.535533905933e+00 3.853454529696e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +5.000000000000e-01 -3.500000000000e+00 9.500000000033e+00 3.535533905933e+00 1.013656746639e+01 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +5.000000000000e-01 -2.500000000000e+00 9.500000000033e+00 2.549509756796e+00 9.836157786485e+00 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +5.000000000000e-01 -1.500000000000e+00 9.500000000033e+00 1.581138830084e+00 9.630680142162e+00 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +5.000000000000e-01 -5.000000000000e-01 9.500000000033e+00 7.071067811865e-01 9.526279441662e+00 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +5.000000000000e-01 5.000000000000e-01 9.500000000033e+00 7.071067811865e-01 9.526279441662e+00 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +5.000000000000e-01 1.500000000000e+00 9.500000000033e+00 1.581138830084e+00 9.630680142162e+00 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +5.000000000000e-01 2.500000000000e+00 9.500000000033e+00 2.549509756796e+00 9.836157786485e+00 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +5.000000000000e-01 3.500000000000e+00 9.500000000033e+00 3.535533905933e+00 1.013656746639e+01 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +5.000000000000e-01 -3.500000000000e+00 8.500000000000e+00 3.535533905933e+00 9.205976319761e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +5.000000000000e-01 -2.500000000000e+00 8.500000000000e+00 2.549509756796e+00 8.874119674649e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +5.000000000000e-01 -1.500000000000e+00 8.500000000000e+00 1.581138830084e+00 8.645808232895e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +5.000000000000e-01 -5.000000000000e-01 8.500000000000e+00 7.071067811865e-01 8.529361054616e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +5.000000000000e-01 5.000000000000e-01 8.500000000000e+00 7.071067811865e-01 8.529361054616e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +5.000000000000e-01 1.500000000000e+00 8.500000000000e+00 1.581138830084e+00 8.645808232895e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +5.000000000000e-01 2.500000000000e+00 8.500000000000e+00 2.549509756796e+00 8.874119674649e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +5.000000000000e-01 3.500000000000e+00 8.500000000000e+00 3.535533905933e+00 9.205976319761e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +5.000000000000e-01 -3.500000000000e+00 7.500000000008e+00 3.535533905933e+00 8.291561975895e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +5.000000000000e-01 -2.500000000000e+00 7.500000000008e+00 2.549509756796e+00 7.921489758885e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +5.000000000000e-01 -1.500000000000e+00 7.500000000008e+00 1.581138830084e+00 7.664854858385e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +5.000000000000e-01 -5.000000000000e-01 7.500000000008e+00 7.071067811865e-01 7.533259586667e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +5.000000000000e-01 5.000000000000e-01 7.500000000008e+00 7.071067811865e-01 7.533259586667e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +5.000000000000e-01 1.500000000000e+00 7.500000000008e+00 1.581138830084e+00 7.664854858385e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +5.000000000000e-01 2.500000000000e+00 7.500000000008e+00 2.549509756796e+00 7.921489758885e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +5.000000000000e-01 3.500000000000e+00 7.500000000008e+00 3.535533905933e+00 8.291561975895e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +5.000000000000e-01 -3.500000000000e+00 6.500004552938e+00 3.535533905933e+00 7.399328293042e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +5.000000000000e-01 -2.500000000000e+00 6.500004552938e+00 2.549509756796e+00 6.982124260439e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +5.000000000000e-01 -1.500000000000e+00 6.500004552938e+00 1.581138830084e+00 6.689548504063e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +5.000000000000e-01 -5.000000000000e-01 6.500004552938e+00 7.071067811865e-01 6.538352941546e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +5.000000000000e-01 5.000000000000e-01 6.500004552938e+00 7.071067811865e-01 6.538352941546e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +5.000000000000e-01 1.500000000000e+00 6.500004552938e+00 1.581138830084e+00 6.689548504063e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +5.000000000000e-01 2.500000000000e+00 6.500004552938e+00 2.549509756796e+00 6.982124260439e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +5.000000000000e-01 3.500000000000e+00 6.500004552938e+00 3.535533905933e+00 7.399328293042e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +5.000000000000e-01 -3.500000000000e+00 5.503774481144e+00 3.535533905933e+00 6.541523793375e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +5.000000000000e-01 -2.500000000000e+00 5.503774481144e+00 2.549509756796e+00 6.065602487741e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +5.000000000000e-01 -1.500000000000e+00 5.503774481144e+00 1.581138830084e+00 5.726389223524e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +5.000000000000e-01 -5.000000000000e-01 5.503774481144e+00 7.071067811865e-01 5.549011942615e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +5.000000000000e-01 5.000000000000e-01 5.503774481144e+00 7.071067811865e-01 5.549011942615e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +5.000000000000e-01 1.500000000000e+00 5.503774481144e+00 1.581138830084e+00 5.726389223524e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +5.000000000000e-01 2.500000000000e+00 5.503774481144e+00 2.549509756796e+00 6.065602487741e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +5.000000000000e-01 3.500000000000e+00 5.503774481144e+00 3.535533905933e+00 6.541523793375e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +5.000000000000e-01 -3.500000000000e+00 4.601481985862e+00 3.535533905933e+00 5.802898970878e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +5.000000000000e-01 -2.500000000000e+00 4.601481985862e+00 2.549509756796e+00 5.260573777281e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +5.000000000000e-01 -1.500000000000e+00 4.601481985862e+00 1.581138830084e+00 4.865556131236e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +5.000000000000e-01 -5.000000000000e-01 4.601481985862e+00 7.071067811865e-01 4.655495297625e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +5.000000000000e-01 5.000000000000e-01 4.601481985862e+00 7.071067811865e-01 4.655495297625e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +5.000000000000e-01 1.500000000000e+00 4.601481985862e+00 1.581138830084e+00 4.865556131236e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +5.000000000000e-01 2.500000000000e+00 4.601481985862e+00 2.549509756796e+00 5.260573777281e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +5.000000000000e-01 3.500000000000e+00 4.601481985862e+00 3.535533905933e+00 5.802898970878e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +5.000000000000e-01 -3.500000000000e+00 4.014394513860e+00 3.535533905933e+00 5.349332978317e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +5.000000000000e-01 -2.500000000000e+00 4.014394513860e+00 2.549509756796e+00 4.755561303664e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +5.000000000000e-01 -1.500000000000e+00 4.014394513860e+00 1.581138830084e+00 4.314552504363e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +5.000000000000e-01 -5.000000000000e-01 4.014394513860e+00 7.071067811865e-01 4.076194709887e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +5.000000000000e-01 5.000000000000e-01 4.014394513860e+00 7.071067811865e-01 4.076194709887e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +5.000000000000e-01 1.500000000000e+00 4.014394513860e+00 1.581138830084e+00 4.314552504363e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +5.000000000000e-01 2.500000000000e+00 4.014394513860e+00 2.549509756796e+00 4.755561303664e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +5.000000000000e-01 3.500000000000e+00 4.014394513860e+00 3.535533905933e+00 5.349332978317e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +5.000000000000e-01 -3.500000000000e+00 3.680096178300e+00 3.535533905933e+00 5.103244838486e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +5.000000000000e-01 -2.500000000000e+00 3.680096178300e+00 2.549509756796e+00 4.476952968430e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +5.000000000000e-01 -1.500000000000e+00 3.680096178300e+00 1.581138830084e+00 4.005384860602e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +5.000000000000e-01 -5.000000000000e-01 3.680096178300e+00 7.071067811865e-01 3.747413492202e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +5.000000000000e-01 5.000000000000e-01 3.680096178300e+00 7.071067811865e-01 3.747413492202e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +5.000000000000e-01 1.500000000000e+00 3.680096178300e+00 1.581138830084e+00 4.005384860602e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +5.000000000000e-01 2.500000000000e+00 3.680096178300e+00 2.549509756796e+00 4.476952968430e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +5.000000000000e-01 3.500000000000e+00 3.680096178300e+00 3.535533905933e+00 5.103244838486e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +5.000000000000e-01 -3.500000000000e+00 3.296094971545e+00 3.535533905933e+00 4.833657213895e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +5.000000000000e-01 -2.500000000000e+00 3.296094971545e+00 2.549509756796e+00 4.167042363769e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +5.000000000000e-01 -1.500000000000e+00 3.296094971545e+00 1.581138830084e+00 3.655713618631e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +5.000000000000e-01 -5.000000000000e-01 3.296094971545e+00 7.071067811865e-01 3.371089150622e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +5.000000000000e-01 5.000000000000e-01 3.296094971545e+00 7.071067811865e-01 3.371089150622e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +5.000000000000e-01 1.500000000000e+00 3.296094971545e+00 1.581138830084e+00 3.655713618631e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +5.000000000000e-01 2.500000000000e+00 3.296094971545e+00 2.549509756796e+00 4.167042363769e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +5.000000000000e-01 3.500000000000e+00 3.296094971545e+00 3.535533905933e+00 4.833657213895e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +5.000000000000e-01 -3.500000000000e+00 1.532681249456e+00 3.535533905933e+00 3.853454529696e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +5.000000000000e-01 -2.500000000000e+00 1.532681249456e+00 2.549509756796e+00 2.974745671891e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +5.000000000000e-01 -1.500000000000e+00 1.532681249456e+00 1.581138830084e+00 2.202069892722e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +5.000000000000e-01 -5.000000000000e-01 1.532681249456e+00 7.071067811865e-01 1.687931222661e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +5.000000000000e-01 5.000000000000e-01 1.532681249456e+00 7.071067811865e-01 1.687931222661e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +5.000000000000e-01 1.500000000000e+00 1.532681249456e+00 1.581138830084e+00 2.202069892722e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +5.000000000000e-01 2.500000000000e+00 1.532681249456e+00 2.549509756796e+00 2.974745671891e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +5.000000000000e-01 3.500000000000e+00 1.532681249456e+00 3.535533905933e+00 3.853454529696e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +1.500000000000e+00 -3.500000000000e+00 9.500000000033e+00 3.807886552932e+00 1.023474474526e+01 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +1.500000000000e+00 -2.500000000000e+00 9.500000000033e+00 2.915475947423e+00 9.937303457208e+00 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +1.500000000000e+00 -1.500000000000e+00 9.500000000033e+00 2.121320343560e+00 9.733961166998e+00 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +1.500000000000e+00 -5.000000000000e-01 9.500000000033e+00 1.581138830084e+00 9.630680142162e+00 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +1.500000000000e+00 5.000000000000e-01 9.500000000033e+00 1.581138830084e+00 9.630680142162e+00 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +1.500000000000e+00 1.500000000000e+00 9.500000000033e+00 2.121320343560e+00 9.733961166998e+00 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +1.500000000000e+00 2.500000000000e+00 9.500000000033e+00 2.915475947423e+00 9.937303457208e+00 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +1.500000000000e+00 3.500000000000e+00 9.500000000033e+00 3.807886552932e+00 1.023474474526e+01 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +1.500000000000e+00 -3.500000000000e+00 8.500000000000e+00 3.807886552932e+00 9.313968005099e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +1.500000000000e+00 -2.500000000000e+00 8.500000000000e+00 2.915475947423e+00 8.986100377806e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +1.500000000000e+00 -1.500000000000e+00 8.500000000000e+00 2.121320343560e+00 8.760707733968e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +1.500000000000e+00 -5.000000000000e-01 8.500000000000e+00 1.581138830084e+00 8.645808232895e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +1.500000000000e+00 5.000000000000e-01 8.500000000000e+00 1.581138830084e+00 8.645808232895e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +1.500000000000e+00 1.500000000000e+00 8.500000000000e+00 2.121320343560e+00 8.760707733968e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +1.500000000000e+00 2.500000000000e+00 8.500000000000e+00 2.915475947423e+00 8.986100377806e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +1.500000000000e+00 3.500000000000e+00 8.500000000000e+00 3.807886552932e+00 9.313968005099e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +1.500000000000e+00 -3.500000000000e+00 7.500000000008e+00 3.807886552932e+00 8.411301920637e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +1.500000000000e+00 -2.500000000000e+00 7.500000000008e+00 2.915475947423e+00 8.046738469723e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +1.500000000000e+00 -1.500000000000e+00 7.500000000008e+00 2.121320343560e+00 7.794228634067e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +1.500000000000e+00 -5.000000000000e-01 7.500000000008e+00 1.581138830084e+00 7.664854858385e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +1.500000000000e+00 5.000000000000e-01 7.500000000008e+00 1.581138830084e+00 7.664854858385e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +1.500000000000e+00 1.500000000000e+00 7.500000000008e+00 2.121320343560e+00 7.794228634067e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +1.500000000000e+00 2.500000000000e+00 7.500000000008e+00 2.915475947423e+00 8.046738469723e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +1.500000000000e+00 3.500000000000e+00 7.500000000008e+00 3.807886552932e+00 8.411301920637e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +1.500000000000e+00 -3.500000000000e+00 6.500004552938e+00 3.807886552932e+00 7.533263515119e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +1.500000000000e+00 -2.500000000000e+00 6.500004552938e+00 2.915475947423e+00 7.123907578585e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +1.500000000000e+00 -1.500000000000e+00 6.500004552938e+00 2.121320343560e+00 6.837401493858e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +1.500000000000e+00 -5.000000000000e-01 6.500004552938e+00 1.581138830084e+00 6.689548504063e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +1.500000000000e+00 5.000000000000e-01 6.500004552938e+00 1.581138830084e+00 6.689548504063e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +1.500000000000e+00 1.500000000000e+00 6.500004552938e+00 2.121320343560e+00 6.837401493858e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +1.500000000000e+00 2.500000000000e+00 6.500004552938e+00 2.915475947423e+00 7.123907578585e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +1.500000000000e+00 3.500000000000e+00 6.500004552938e+00 3.807886552932e+00 7.533263515119e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +1.500000000000e+00 -3.500000000000e+00 5.503774481144e+00 3.807886552932e+00 6.692647722635e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +1.500000000000e+00 -2.500000000000e+00 5.503774481144e+00 2.915475947423e+00 6.228284959705e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +1.500000000000e+00 -1.500000000000e+00 5.503774481144e+00 2.121320343560e+00 5.898434838098e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +1.500000000000e+00 -5.000000000000e-01 5.503774481144e+00 1.581138830084e+00 5.726389223524e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +1.500000000000e+00 5.000000000000e-01 5.503774481144e+00 1.581138830084e+00 5.726389223524e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +1.500000000000e+00 1.500000000000e+00 5.503774481144e+00 2.121320343560e+00 5.898434838098e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +1.500000000000e+00 2.500000000000e+00 5.503774481144e+00 2.915475947423e+00 6.228284959705e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +1.500000000000e+00 3.500000000000e+00 5.503774481144e+00 3.807886552932e+00 6.692647722635e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +1.500000000000e+00 -3.500000000000e+00 4.601481985862e+00 3.807886552932e+00 5.972741118298e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +1.500000000000e+00 -2.500000000000e+00 4.601481985862e+00 2.915475947423e+00 5.447351325756e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +1.500000000000e+00 -1.500000000000e+00 4.601481985862e+00 2.121320343560e+00 5.066915873212e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +1.500000000000e+00 -5.000000000000e-01 4.601481985862e+00 1.581138830084e+00 4.865556131236e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +1.500000000000e+00 5.000000000000e-01 4.601481985862e+00 1.581138830084e+00 4.865556131236e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +1.500000000000e+00 1.500000000000e+00 4.601481985862e+00 2.121320343560e+00 5.066915873212e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +1.500000000000e+00 2.500000000000e+00 4.601481985862e+00 2.915475947423e+00 5.447351325756e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +1.500000000000e+00 3.500000000000e+00 4.601481985862e+00 3.807886552932e+00 5.972741118298e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +1.500000000000e+00 -3.500000000000e+00 4.014394513860e+00 3.807886552932e+00 5.533115154496e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +1.500000000000e+00 -2.500000000000e+00 4.014394513860e+00 2.915475947423e+00 4.961387236742e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +1.500000000000e+00 -1.500000000000e+00 4.014394513860e+00 2.121320343560e+00 4.540414442857e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +1.500000000000e+00 -5.000000000000e-01 4.014394513860e+00 1.581138830084e+00 4.314552504363e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +1.500000000000e+00 5.000000000000e-01 4.014394513860e+00 1.581138830084e+00 4.314552504363e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +1.500000000000e+00 1.500000000000e+00 4.014394513860e+00 2.121320343560e+00 4.540414442857e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +1.500000000000e+00 2.500000000000e+00 4.014394513860e+00 2.915475947423e+00 4.961387236742e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +1.500000000000e+00 3.500000000000e+00 4.014394513860e+00 3.807886552932e+00 5.533115154496e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +1.500000000000e+00 -3.500000000000e+00 3.680096178300e+00 3.807886552932e+00 5.295574367482e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +1.500000000000e+00 -2.500000000000e+00 3.680096178300e+00 2.915475947423e+00 4.695008826566e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +1.500000000000e+00 -1.500000000000e+00 3.680096178300e+00 2.121320343560e+00 4.247717961628e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +1.500000000000e+00 -5.000000000000e-01 3.680096178300e+00 1.581138830084e+00 4.005384860602e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +1.500000000000e+00 5.000000000000e-01 3.680096178300e+00 1.581138830084e+00 4.005384860602e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +1.500000000000e+00 1.500000000000e+00 3.680096178300e+00 2.121320343560e+00 4.247717961628e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +1.500000000000e+00 2.500000000000e+00 3.680096178300e+00 2.915475947423e+00 4.695008826566e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +1.500000000000e+00 3.500000000000e+00 3.680096178300e+00 3.807886552932e+00 5.295574367482e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +1.500000000000e+00 -3.500000000000e+00 3.296094971545e+00 3.807886552932e+00 5.036292491649e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +1.500000000000e+00 -2.500000000000e+00 3.296094971545e+00 2.915475947423e+00 4.400482026033e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +1.500000000000e+00 -1.500000000000e+00 3.296094971545e+00 2.121320343560e+00 3.919724743071e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +1.500000000000e+00 -5.000000000000e-01 3.296094971545e+00 1.581138830084e+00 3.655713618631e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +1.500000000000e+00 5.000000000000e-01 3.296094971545e+00 1.581138830084e+00 3.655713618631e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +1.500000000000e+00 1.500000000000e+00 3.296094971545e+00 2.121320343560e+00 3.919724743071e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +1.500000000000e+00 2.500000000000e+00 3.296094971545e+00 2.915475947423e+00 4.400482026033e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +1.500000000000e+00 3.500000000000e+00 3.296094971545e+00 3.807886552932e+00 5.036292491649e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +1.500000000000e+00 -3.500000000000e+00 1.532681249456e+00 3.807886552932e+00 4.104766962013e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +1.500000000000e+00 -2.500000000000e+00 1.532681249456e+00 2.915475947423e+00 3.293798993933e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +1.500000000000e+00 -1.500000000000e+00 1.532681249456e+00 2.121320343560e+00 2.617080780647e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +1.500000000000e+00 -5.000000000000e-01 1.532681249456e+00 1.581138830084e+00 2.202069892722e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +1.500000000000e+00 5.000000000000e-01 1.532681249456e+00 1.581138830084e+00 2.202069892722e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +1.500000000000e+00 1.500000000000e+00 1.532681249456e+00 2.121320343560e+00 2.617080780647e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +1.500000000000e+00 2.500000000000e+00 1.532681249456e+00 2.915475947423e+00 3.293798993933e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +1.500000000000e+00 3.500000000000e+00 1.532681249456e+00 3.807886552932e+00 4.104766962013e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +2.500000000000e+00 -3.500000000000e+00 9.500000000033e+00 4.301162633521e+00 1.042832680734e+01 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +2.500000000000e+00 -2.500000000000e+00 9.500000000033e+00 3.535533905933e+00 1.013656746639e+01 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +2.500000000000e+00 -1.500000000000e+00 9.500000000033e+00 2.915475947423e+00 9.937303457208e+00 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +2.500000000000e+00 -5.000000000000e-01 9.500000000033e+00 2.549509756796e+00 9.836157786485e+00 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +2.500000000000e+00 5.000000000000e-01 9.500000000033e+00 2.549509756796e+00 9.836157786485e+00 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +2.500000000000e+00 1.500000000000e+00 9.500000000033e+00 2.915475947423e+00 9.937303457208e+00 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +2.500000000000e+00 2.500000000000e+00 9.500000000033e+00 3.535533905933e+00 1.013656746639e+01 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +2.500000000000e+00 3.500000000000e+00 9.500000000033e+00 4.301162633521e+00 1.042832680734e+01 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +2.500000000000e+00 -3.500000000000e+00 8.500000000000e+00 4.301162633521e+00 9.526279441629e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +2.500000000000e+00 -2.500000000000e+00 8.500000000000e+00 3.535533905933e+00 9.205976319761e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +2.500000000000e+00 -1.500000000000e+00 8.500000000000e+00 2.915475947423e+00 8.986100377806e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +2.500000000000e+00 -5.000000000000e-01 8.500000000000e+00 2.549509756796e+00 8.874119674649e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +2.500000000000e+00 5.000000000000e-01 8.500000000000e+00 2.549509756796e+00 8.874119674649e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +2.500000000000e+00 1.500000000000e+00 8.500000000000e+00 2.915475947423e+00 8.986100377806e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +2.500000000000e+00 2.500000000000e+00 8.500000000000e+00 3.535533905933e+00 9.205976319761e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +2.500000000000e+00 3.500000000000e+00 8.500000000000e+00 4.301162633521e+00 9.526279441629e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +2.500000000000e+00 -3.500000000000e+00 7.500000000008e+00 4.301162633521e+00 8.645808232902e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +2.500000000000e+00 -2.500000000000e+00 7.500000000008e+00 3.535533905933e+00 8.291561975895e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +2.500000000000e+00 -1.500000000000e+00 7.500000000008e+00 2.915475947423e+00 8.046738469723e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +2.500000000000e+00 -5.000000000000e-01 7.500000000008e+00 2.549509756796e+00 7.921489758885e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +2.500000000000e+00 5.000000000000e-01 7.500000000008e+00 2.549509756796e+00 7.921489758885e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +2.500000000000e+00 1.500000000000e+00 7.500000000008e+00 2.915475947423e+00 8.046738469723e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +2.500000000000e+00 2.500000000000e+00 7.500000000008e+00 3.535533905933e+00 8.291561975895e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +2.500000000000e+00 3.500000000000e+00 7.500000000008e+00 4.301162633521e+00 8.645808232902e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +2.500000000000e+00 -3.500000000000e+00 6.500004552938e+00 4.301162633521e+00 7.794232430985e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +2.500000000000e+00 -2.500000000000e+00 6.500004552938e+00 3.535533905933e+00 7.399328293042e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +2.500000000000e+00 -1.500000000000e+00 6.500004552938e+00 2.915475947423e+00 7.123907578585e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +2.500000000000e+00 -5.000000000000e-01 6.500004552938e+00 2.549509756796e+00 6.982124260439e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +2.500000000000e+00 5.000000000000e-01 6.500004552938e+00 2.549509756796e+00 6.982124260439e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +2.500000000000e+00 1.500000000000e+00 6.500004552938e+00 2.915475947423e+00 7.123907578585e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +2.500000000000e+00 2.500000000000e+00 6.500004552938e+00 3.535533905933e+00 7.399328293042e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +2.500000000000e+00 3.500000000000e+00 6.500004552938e+00 4.301162633521e+00 7.794232430985e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +2.500000000000e+00 -3.500000000000e+00 5.503774481144e+00 4.301162633521e+00 6.985093667181e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +2.500000000000e+00 -2.500000000000e+00 5.503774481144e+00 3.535533905933e+00 6.541523793375e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +2.500000000000e+00 -1.500000000000e+00 5.503774481144e+00 2.915475947423e+00 6.228284959705e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +2.500000000000e+00 -5.000000000000e-01 5.503774481144e+00 2.549509756796e+00 6.065602487741e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +2.500000000000e+00 5.000000000000e-01 5.503774481144e+00 2.549509756796e+00 6.065602487741e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +2.500000000000e+00 1.500000000000e+00 5.503774481144e+00 2.915475947423e+00 6.228284959705e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +2.500000000000e+00 2.500000000000e+00 5.503774481144e+00 3.535533905933e+00 6.541523793375e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +2.500000000000e+00 3.500000000000e+00 5.503774481144e+00 4.301162633521e+00 6.985093667181e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +2.500000000000e+00 -3.500000000000e+00 4.601481985862e+00 4.301162633521e+00 6.298701172957e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +2.500000000000e+00 -2.500000000000e+00 4.601481985862e+00 3.535533905933e+00 5.802898970878e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +2.500000000000e+00 -1.500000000000e+00 4.601481985862e+00 2.915475947423e+00 5.447351325756e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +2.500000000000e+00 -5.000000000000e-01 4.601481985862e+00 2.549509756796e+00 5.260573777281e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +2.500000000000e+00 5.000000000000e-01 4.601481985862e+00 2.549509756796e+00 5.260573777281e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +2.500000000000e+00 1.500000000000e+00 4.601481985862e+00 2.915475947423e+00 5.447351325756e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +2.500000000000e+00 2.500000000000e+00 4.601481985862e+00 3.535533905933e+00 5.802898970878e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +2.500000000000e+00 3.500000000000e+00 4.601481985862e+00 4.301162633521e+00 6.298701172957e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +2.500000000000e+00 -3.500000000000e+00 4.014394513860e+00 4.301162633521e+00 5.883482243783e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +2.500000000000e+00 -2.500000000000e+00 4.014394513860e+00 3.535533905933e+00 5.349332978317e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +2.500000000000e+00 -1.500000000000e+00 4.014394513860e+00 2.915475947423e+00 4.961387236742e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +2.500000000000e+00 -5.000000000000e-01 4.014394513860e+00 2.549509756796e+00 4.755561303664e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +2.500000000000e+00 5.000000000000e-01 4.014394513860e+00 2.549509756796e+00 4.755561303664e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +2.500000000000e+00 1.500000000000e+00 4.014394513860e+00 2.915475947423e+00 4.961387236742e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +2.500000000000e+00 2.500000000000e+00 4.014394513860e+00 3.535533905933e+00 5.349332978317e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +2.500000000000e+00 3.500000000000e+00 4.014394513860e+00 4.301162633521e+00 5.883482243783e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +2.500000000000e+00 -3.500000000000e+00 3.680096178300e+00 4.301162633521e+00 5.660663201564e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +2.500000000000e+00 -2.500000000000e+00 3.680096178300e+00 3.535533905933e+00 5.103244838486e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +2.500000000000e+00 -1.500000000000e+00 3.680096178300e+00 2.915475947423e+00 4.695008826566e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +2.500000000000e+00 -5.000000000000e-01 3.680096178300e+00 2.549509756796e+00 4.476952968430e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +2.500000000000e+00 5.000000000000e-01 3.680096178300e+00 2.549509756796e+00 4.476952968430e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +2.500000000000e+00 1.500000000000e+00 3.680096178300e+00 2.915475947423e+00 4.695008826566e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +2.500000000000e+00 2.500000000000e+00 3.680096178300e+00 3.535533905933e+00 5.103244838486e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +2.500000000000e+00 3.500000000000e+00 3.680096178300e+00 4.301162633521e+00 5.660663201564e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +2.500000000000e+00 -3.500000000000e+00 3.296094971545e+00 4.301162633521e+00 5.418878302882e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +2.500000000000e+00 -2.500000000000e+00 3.296094971545e+00 3.535533905933e+00 4.833657213895e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +2.500000000000e+00 -1.500000000000e+00 3.296094971545e+00 2.915475947423e+00 4.400482026033e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +2.500000000000e+00 -5.000000000000e-01 3.296094971545e+00 2.549509756796e+00 4.167042363769e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +2.500000000000e+00 5.000000000000e-01 3.296094971545e+00 2.549509756796e+00 4.167042363769e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +2.500000000000e+00 1.500000000000e+00 3.296094971545e+00 2.915475947423e+00 4.400482026033e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +2.500000000000e+00 2.500000000000e+00 3.296094971545e+00 3.535533905933e+00 4.833657213895e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +2.500000000000e+00 3.500000000000e+00 3.296094971545e+00 4.301162633521e+00 5.418878302882e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +2.500000000000e+00 -3.500000000000e+00 1.532681249456e+00 4.301162633521e+00 4.566082764519e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +2.500000000000e+00 -2.500000000000e+00 1.532681249456e+00 3.535533905933e+00 3.853454529696e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +2.500000000000e+00 -1.500000000000e+00 1.532681249456e+00 2.915475947423e+00 3.293798993933e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +2.500000000000e+00 -5.000000000000e-01 1.532681249456e+00 2.549509756796e+00 2.974745671891e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +2.500000000000e+00 5.000000000000e-01 1.532681249456e+00 2.549509756796e+00 2.974745671891e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +2.500000000000e+00 1.500000000000e+00 1.532681249456e+00 2.915475947423e+00 3.293798993933e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +2.500000000000e+00 2.500000000000e+00 1.532681249456e+00 3.535533905933e+00 3.853454529696e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +2.500000000000e+00 3.500000000000e+00 1.532681249456e+00 4.301162633521e+00 4.566082764519e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +3.500000000000e+00 -3.500000000000e+00 9.500000000033e+00 4.949747468306e+00 1.071214264284e+01 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +3.500000000000e+00 -2.500000000000e+00 9.500000000033e+00 4.301162633521e+00 1.042832680734e+01 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +3.500000000000e+00 -1.500000000000e+00 9.500000000033e+00 3.807886552932e+00 1.023474474526e+01 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +3.500000000000e+00 -5.000000000000e-01 9.500000000033e+00 3.535533905933e+00 1.013656746639e+01 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +3.500000000000e+00 5.000000000000e-01 9.500000000033e+00 3.535533905933e+00 1.013656746639e+01 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +3.500000000000e+00 1.500000000000e+00 9.500000000033e+00 3.807886552932e+00 1.023474474526e+01 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +3.500000000000e+00 2.500000000000e+00 9.500000000033e+00 4.301162633521e+00 1.042832680734e+01 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +3.500000000000e+00 3.500000000000e+00 9.500000000033e+00 4.949747468306e+00 1.071214264284e+01 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +3.500000000000e+00 -3.500000000000e+00 8.500000000000e+00 4.949747468306e+00 9.836157786453e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +3.500000000000e+00 -2.500000000000e+00 8.500000000000e+00 4.301162633521e+00 9.526279441629e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +3.500000000000e+00 -1.500000000000e+00 8.500000000000e+00 3.807886552932e+00 9.313968005099e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +3.500000000000e+00 -5.000000000000e-01 8.500000000000e+00 3.535533905933e+00 9.205976319761e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +3.500000000000e+00 5.000000000000e-01 8.500000000000e+00 3.535533905933e+00 9.205976319761e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +3.500000000000e+00 1.500000000000e+00 8.500000000000e+00 3.807886552932e+00 9.313968005099e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +3.500000000000e+00 2.500000000000e+00 8.500000000000e+00 4.301162633521e+00 9.526279441629e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +3.500000000000e+00 3.500000000000e+00 8.500000000000e+00 4.949747468306e+00 9.836157786453e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +3.500000000000e+00 -3.500000000000e+00 7.500000000008e+00 4.949747468306e+00 8.986100377812e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +3.500000000000e+00 -2.500000000000e+00 7.500000000008e+00 4.301162633521e+00 8.645808232902e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +3.500000000000e+00 -1.500000000000e+00 7.500000000008e+00 3.807886552932e+00 8.411301920637e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +3.500000000000e+00 -5.000000000000e-01 7.500000000008e+00 3.535533905933e+00 8.291561975895e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +3.500000000000e+00 5.000000000000e-01 7.500000000008e+00 3.535533905933e+00 8.291561975895e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +3.500000000000e+00 1.500000000000e+00 7.500000000008e+00 3.807886552932e+00 8.411301920637e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +3.500000000000e+00 2.500000000000e+00 7.500000000008e+00 4.301162633521e+00 8.645808232902e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +3.500000000000e+00 3.500000000000e+00 7.500000000008e+00 4.949747468306e+00 8.986100377812e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +3.500000000000e+00 -3.500000000000e+00 6.500004552938e+00 4.949747468306e+00 8.170070941443e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +3.500000000000e+00 -2.500000000000e+00 6.500004552938e+00 4.301162633521e+00 7.794232430985e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +3.500000000000e+00 -1.500000000000e+00 6.500004552938e+00 3.807886552932e+00 7.533263515119e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +3.500000000000e+00 -5.000000000000e-01 6.500004552938e+00 3.535533905933e+00 7.399328293042e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +3.500000000000e+00 5.000000000000e-01 6.500004552938e+00 3.535533905933e+00 7.399328293042e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +3.500000000000e+00 1.500000000000e+00 6.500004552938e+00 3.807886552932e+00 7.533263515119e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +3.500000000000e+00 2.500000000000e+00 6.500004552938e+00 4.301162633521e+00 7.794232430985e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +3.500000000000e+00 3.500000000000e+00 6.500004552938e+00 4.949747468306e+00 8.170070941443e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +3.500000000000e+00 -3.500000000000e+00 5.503774481144e+00 4.949747468306e+00 7.402130337902e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +3.500000000000e+00 -2.500000000000e+00 5.503774481144e+00 4.301162633521e+00 6.985093667181e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +3.500000000000e+00 -1.500000000000e+00 5.503774481144e+00 3.807886552932e+00 6.692647722635e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +3.500000000000e+00 -5.000000000000e-01 5.503774481144e+00 3.535533905933e+00 6.541523793375e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +3.500000000000e+00 5.000000000000e-01 5.503774481144e+00 3.535533905933e+00 6.541523793375e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +3.500000000000e+00 1.500000000000e+00 5.503774481144e+00 3.807886552932e+00 6.692647722635e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +3.500000000000e+00 2.500000000000e+00 5.503774481144e+00 4.301162633521e+00 6.985093667181e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +3.500000000000e+00 3.500000000000e+00 5.503774481144e+00 4.949747468306e+00 7.402130337902e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +3.500000000000e+00 -3.500000000000e+00 4.601481985862e+00 4.949747468306e+00 6.758227316850e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +3.500000000000e+00 -2.500000000000e+00 4.601481985862e+00 4.301162633521e+00 6.298701172957e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +3.500000000000e+00 -1.500000000000e+00 4.601481985862e+00 3.807886552932e+00 5.972741118298e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +3.500000000000e+00 -5.000000000000e-01 4.601481985862e+00 3.535533905933e+00 5.802898970878e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +3.500000000000e+00 5.000000000000e-01 4.601481985862e+00 3.535533905933e+00 5.802898970878e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +3.500000000000e+00 1.500000000000e+00 4.601481985862e+00 3.807886552932e+00 5.972741118298e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +3.500000000000e+00 2.500000000000e+00 4.601481985862e+00 4.301162633521e+00 6.298701172957e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +3.500000000000e+00 3.500000000000e+00 4.601481985862e+00 4.949747468306e+00 6.758227316850e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +3.500000000000e+00 -3.500000000000e+00 4.014394513860e+00 4.949747468306e+00 6.373018383224e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +3.500000000000e+00 -2.500000000000e+00 4.014394513860e+00 4.301162633521e+00 5.883482243783e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +3.500000000000e+00 -1.500000000000e+00 4.014394513860e+00 3.807886552932e+00 5.533115154496e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +3.500000000000e+00 -5.000000000000e-01 4.014394513860e+00 3.535533905933e+00 5.349332978317e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +3.500000000000e+00 5.000000000000e-01 4.014394513860e+00 3.535533905933e+00 5.349332978317e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +3.500000000000e+00 1.500000000000e+00 4.014394513860e+00 3.807886552932e+00 5.533115154496e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +3.500000000000e+00 2.500000000000e+00 4.014394513860e+00 4.301162633521e+00 5.883482243783e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +3.500000000000e+00 3.500000000000e+00 4.014394513860e+00 4.949747468306e+00 6.373018383224e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +3.500000000000e+00 -3.500000000000e+00 3.680096178300e+00 4.949747468306e+00 6.167909522807e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +3.500000000000e+00 -2.500000000000e+00 3.680096178300e+00 4.301162633521e+00 5.660663201564e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +3.500000000000e+00 -1.500000000000e+00 3.680096178300e+00 3.807886552932e+00 5.295574367482e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +3.500000000000e+00 -5.000000000000e-01 3.680096178300e+00 3.535533905933e+00 5.103244838486e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +3.500000000000e+00 5.000000000000e-01 3.680096178300e+00 3.535533905933e+00 5.103244838486e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +3.500000000000e+00 1.500000000000e+00 3.680096178300e+00 3.807886552932e+00 5.295574367482e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +3.500000000000e+00 2.500000000000e+00 3.680096178300e+00 4.301162633521e+00 5.660663201564e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +3.500000000000e+00 3.500000000000e+00 3.680096178300e+00 4.949747468306e+00 6.167909522807e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +3.500000000000e+00 -3.500000000000e+00 3.296094971545e+00 4.949747468306e+00 5.946784178146e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +3.500000000000e+00 -2.500000000000e+00 3.296094971545e+00 4.301162633521e+00 5.418878302882e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +3.500000000000e+00 -1.500000000000e+00 3.296094971545e+00 3.807886552932e+00 5.036292491649e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +3.500000000000e+00 -5.000000000000e-01 3.296094971545e+00 3.535533905933e+00 4.833657213895e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +3.500000000000e+00 5.000000000000e-01 3.296094971545e+00 3.535533905933e+00 4.833657213895e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +3.500000000000e+00 1.500000000000e+00 3.296094971545e+00 3.807886552932e+00 5.036292491649e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +3.500000000000e+00 2.500000000000e+00 3.296094971545e+00 4.301162633521e+00 5.418878302882e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +3.500000000000e+00 3.500000000000e+00 3.296094971545e+00 4.949747468306e+00 5.946784178146e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +3.500000000000e+00 -3.500000000000e+00 1.532681249456e+00 4.949747468306e+00 5.181612858216e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +3.500000000000e+00 -2.500000000000e+00 1.532681249456e+00 4.301162633521e+00 4.566082764519e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +3.500000000000e+00 -1.500000000000e+00 1.532681249456e+00 3.807886552932e+00 4.104766962013e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +3.500000000000e+00 -5.000000000000e-01 1.532681249456e+00 3.535533905933e+00 3.853454529696e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +3.500000000000e+00 5.000000000000e-01 1.532681249456e+00 3.535533905933e+00 3.853454529696e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +3.500000000000e+00 1.500000000000e+00 1.532681249456e+00 3.807886552932e+00 4.104766962013e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +3.500000000000e+00 2.500000000000e+00 1.532681249456e+00 4.301162633521e+00 4.566082764519e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +3.500000000000e+00 3.500000000000e+00 1.532681249456e+00 4.949747468306e+00 5.181612858216e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 diff --git a/single-node-refactor/regression_tests/test_refactor.py b/single-node-refactor/regression_tests/test_refactor.py index adbfff9c8..9186f745c 100644 --- a/single-node-refactor/regression_tests/test_refactor.py +++ b/single-node-refactor/regression_tests/test_refactor.py @@ -7,13 +7,13 @@ import glob # Builds being tested -builds = ["openmp"] +builds = ["cuda"] # Name(s) of the solver being used solvers = ["Fierro"] # Add names of each test -tests = ["Sedov", "Sod_X", "Sod_Y", "Sod_Z", "Sedov_Erosion","Sedov_Read_Ensight", "Sedov_rz_polar"] +tests = ["Sedov", "Sod_X", "Sod_Y", "Sod_Z", "Sedov_Erosion","Sedov_Read_Ensight", "Sedov_rz_polar", "Abaqus_read"] # Extract data from txt file def extract_state_data(filename): diff --git a/single-node-refactor/src/common/include/mesh_io.h b/single-node-refactor/src/common/include/mesh_io.h index 998216022..bc9c0ca3a 100644 --- a/single-node-refactor/src/common/include/mesh_io.h +++ b/single-node-refactor/src/common/include/mesh_io.h @@ -165,6 +165,14 @@ class MeshReader throw std::runtime_error("**** No mesh path given for read_mesh ****"); } + std::ifstream file(mesh_file_); + if (file.is_open()) { + std::cout << "The file exists." << std::endl; + file.close(); + } else { + throw std::runtime_error("**** Mesh path given does not exists ****"); + } + // Check mesh file extension // and read based on extension std::string filePathStr(mesh_file_); @@ -383,9 +391,6 @@ class MeshReader bool readingNodes = false; bool readingElements = false; - int nodeCount = 0; - int elemCount = 0; - while (std::getline(inputFile, line)) { if (line.find("*Node") != std::string::npos) { readingNodes = true; From f2b3109cbaaac7dddfd1927b0a2b265dd97e17f4 Mon Sep 17 00:00:00 2001 From: Jacob Moore Date: Wed, 28 Aug 2024 15:00:43 -0500 Subject: [PATCH 173/233] ENH: Add gitattributes file to ignore data/meshes from code statistics --- .gitattributes | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 .gitattributes diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 000000000..1dea52a55 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,33 @@ +special-vendored-path/* linguist-documentation + + + +dev-utils/* linguist-documentation +dev-utils/* linguist-documentation +docs/* linguist-documentation + +integrated-tests/Test-scripts/Solver-Inputs/* linguist-documentation +integrated-tests/Test-scripts/standard-results/* linguist-documentation + +legacy/* linguist-documentation + +python/stl_files/* linguist-documentation + +scripts/* linguist-documentation + +single-node/cbin/* linguist-documentation +single-node/scripts/* linguist-documentation +single-node/src/Explicit-Lagrange/meshes/* linguist-documentation +single-node/testing/tests-for-Explicit-Lagrange-Kokkos/* linguist-documentation + +single-node-refactor/regression_tests/standard_inputs/* linguist-documentation +single-node-refactor/regression_tests/standard_results/* linguist-documentation + +src/EVPFFT/example_input_files/* linguist-documentation +src/EVPFFT/scripts/* linguist-documentation +src/LS-EVPFFT/example_input_files/* linguist-documentation +src/LS-EVPFFT/scripts/* linguist-documentation + +src/Mesh-Builder/examples/* linguist-documentation +src/Parallel-Solvers/Implicit-Lagrange/Mesh_Examples/* linguist-documentation +src/Parallel-Solvers/Implicit-Lagrange/MueLu_XML_Examples/* linguist-documentation \ No newline at end of file From bb94150d64e9d82ae230779788bee08e694a3f4b Mon Sep 17 00:00:00 2001 From: Jacob Moore Date: Wed, 28 Aug 2024 15:03:49 -0500 Subject: [PATCH 174/233] BUG: remove bug line from .gitattributes --- .gitattributes | 15 ++------------- 1 file changed, 2 insertions(+), 13 deletions(-) diff --git a/.gitattributes b/.gitattributes index 1dea52a55..aba1307ed 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,33 +1,22 @@ -special-vendored-path/* linguist-documentation - - - dev-utils/* linguist-documentation dev-utils/* linguist-documentation docs/* linguist-documentation - integrated-tests/Test-scripts/Solver-Inputs/* linguist-documentation integrated-tests/Test-scripts/standard-results/* linguist-documentation - legacy/* linguist-documentation - python/stl_files/* linguist-documentation - scripts/* linguist-documentation - single-node/cbin/* linguist-documentation single-node/scripts/* linguist-documentation single-node/src/Explicit-Lagrange/meshes/* linguist-documentation single-node/testing/tests-for-Explicit-Lagrange-Kokkos/* linguist-documentation - single-node-refactor/regression_tests/standard_inputs/* linguist-documentation single-node-refactor/regression_tests/standard_results/* linguist-documentation - src/EVPFFT/example_input_files/* linguist-documentation src/EVPFFT/scripts/* linguist-documentation src/LS-EVPFFT/example_input_files/* linguist-documentation src/LS-EVPFFT/scripts/* linguist-documentation - src/Mesh-Builder/examples/* linguist-documentation src/Parallel-Solvers/Implicit-Lagrange/Mesh_Examples/* linguist-documentation -src/Parallel-Solvers/Implicit-Lagrange/MueLu_XML_Examples/* linguist-documentation \ No newline at end of file +src/Parallel-Solvers/Implicit-Lagrange/MueLu_XML_Examples/* linguist-documentation +src/Parallel-Solvers/Parallel-Explicit/Example_Yaml_Scripts/* linguist-documentation \ No newline at end of file From 92b30507a394de1c1322b853dc614bc81c85d175 Mon Sep 17 00:00:00 2001 From: Jacob Moore Date: Wed, 28 Aug 2024 15:23:31 -0500 Subject: [PATCH 175/233] ENH: Add extra * to make sure it grabs both files and directories for ignoring data files --- .gitattributes | 44 ++++++++++++++++++++++---------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/.gitattributes b/.gitattributes index aba1307ed..f638ecafd 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,22 +1,22 @@ -dev-utils/* linguist-documentation -dev-utils/* linguist-documentation -docs/* linguist-documentation -integrated-tests/Test-scripts/Solver-Inputs/* linguist-documentation -integrated-tests/Test-scripts/standard-results/* linguist-documentation -legacy/* linguist-documentation -python/stl_files/* linguist-documentation -scripts/* linguist-documentation -single-node/cbin/* linguist-documentation -single-node/scripts/* linguist-documentation -single-node/src/Explicit-Lagrange/meshes/* linguist-documentation -single-node/testing/tests-for-Explicit-Lagrange-Kokkos/* linguist-documentation -single-node-refactor/regression_tests/standard_inputs/* linguist-documentation -single-node-refactor/regression_tests/standard_results/* linguist-documentation -src/EVPFFT/example_input_files/* linguist-documentation -src/EVPFFT/scripts/* linguist-documentation -src/LS-EVPFFT/example_input_files/* linguist-documentation -src/LS-EVPFFT/scripts/* linguist-documentation -src/Mesh-Builder/examples/* linguist-documentation -src/Parallel-Solvers/Implicit-Lagrange/Mesh_Examples/* linguist-documentation -src/Parallel-Solvers/Implicit-Lagrange/MueLu_XML_Examples/* linguist-documentation -src/Parallel-Solvers/Parallel-Explicit/Example_Yaml_Scripts/* linguist-documentation \ No newline at end of file +dev-utils/** linguist-documentation +dev-utils/** linguist-documentation +docs/** linguist-documentation +integrated-tests/Test-scripts/Solver-Inputs/** linguist-documentation +integrated-tests/Test-scripts/standard-results/** linguist-documentation +legacy/** linguist-documentation +python/stl_files/** linguist-documentation +scripts/** linguist-documentation +single-node/cbin/** linguist-documentation +single-node/scripts/** linguist-documentation +single-node/src/Explicit-Lagrange/meshes/** linguist-documentation +single-node/testing/tests-for-Explicit-Lagrange-Kokkos/** linguist-documentation +single-node-refactor/regression_tests/standard_inputs/** linguist-documentation +single-node-refactor/regression_tests/standard_results/** linguist-documentation +src/EVPFFT/example_input_files/** linguist-documentation +src/EVPFFT/scripts/** linguist-documentation +src/LS-EVPFFT/example_input_files/** linguist-documentation +src/LS-EVPFFT/scripts/** linguist-documentation +src/Mesh-Builder/examples/** linguist-documentation +src/Parallel-Solvers/Implicit-Lagrange/Mesh_Examples/** linguist-documentation +src/Parallel-Solvers/Implicit-Lagrange/MueLu_XML_Examples/** linguist-documentation +src/Parallel-Solvers/Parallel-Explicit/Example_Yaml_Scripts/** linguist-documentation \ No newline at end of file From 382962ef9a8f4530b229c9e6752ccc0917343d5e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CAdrian-Diaz=E2=80=9D?= <“adriandiaz1117@gmail.com”> Date: Wed, 28 Aug 2024 23:21:11 -0600 Subject: [PATCH 176/233] WIP: pressure vessel UI --- .../FEA_Module/Elasticity_Parameters.h | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/Parallel-Solvers/Simulation_Parameters/FEA_Module/Elasticity_Parameters.h b/src/Parallel-Solvers/Simulation_Parameters/FEA_Module/Elasticity_Parameters.h index 71eedd88a..3bfef3e97 100644 --- a/src/Parallel-Solvers/Simulation_Parameters/FEA_Module/Elasticity_Parameters.h +++ b/src/Parallel-Solvers/Simulation_Parameters/FEA_Module/Elasticity_Parameters.h @@ -5,7 +5,7 @@ #include "yaml-serializable.h" struct Elasticity_Parameters - : virtual ImplicitModule, FEA_Module_Parameters::Register { + : virtual ImplicitModule, FEA_Module_Parameters::Register, Yaml::ValidatedYaml { bool strain_max_flag = false; bool modal_analysis = false; bool anisotropic_lattice = false; @@ -16,6 +16,7 @@ struct Elasticity_Parameters real_t constant_pressure = 0; real_t constant_stress[6]; bool constant_stress_flag = false; + bool pressure_vessel_flag = false; bool muelu_parameters_xml_file = false; std::string xml_parameters_file_name = "elasticity3D.xml"; @@ -32,8 +33,15 @@ struct Elasticity_Parameters constant_stress[3] = constant_stress[4] = constant_stress[5] = 0; } } + + void validate() { + if (pressure_vessel_flag&&!constant_pressure) { + std::cerr << "ERROR: Pressure vessel simulation requested without setting \"constant_pressure\" " << std::endl; + } + } }; IMPL_YAML_SERIALIZABLE_WITH_BASE(Elasticity_Parameters, ImplicitModule, strain_max_flag, modal_analysis, anisotropic_lattice, num_modes, smallest_modes, largest_modes, - convergence_tolerance, constant_pressure, constant_stress, muelu_parameters_xml_file, xml_parameters_file_name + convergence_tolerance, constant_pressure, constant_stress, muelu_parameters_xml_file, + xml_parameters_file_name, pressure_vessel_flag ) From 6e7fa5ba9216061f9cd414e406cdf2420338ad3f Mon Sep 17 00:00:00 2001 From: Jacob Moore Date: Thu, 29 Aug 2024 14:15:11 -0500 Subject: [PATCH 177/233] ENH: Add timer outputs for driver --- single-node-refactor/src/main.cpp | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/single-node-refactor/src/main.cpp b/single-node-refactor/src/main.cpp index 01ce598e2..8e832b21c 100644 --- a/single-node-refactor/src/main.cpp +++ b/single-node-refactor/src/main.cpp @@ -66,11 +66,38 @@ int main(int argc, char* argv[]) // Create driver Driver* driver = new Driver(argv[1]); + + // Timing data for each step + auto time_start = std::chrono::high_resolution_clock::now(); + auto time_init = std::chrono::high_resolution_clock::now(); + driver->initialize(); + + auto time_now = std::chrono::high_resolution_clock::now(); + auto calc_time = std::chrono::duration_cast(time_now - time_init).count(); + printf("\n**** Total time to initialize driver in seconds %f ****\n\n", calc_time * 1e-9); + + auto time_setup = std::chrono::high_resolution_clock::now(); driver->setup(); + time_now = std::chrono::high_resolution_clock::now(); + calc_time = std::chrono::duration_cast(time_now - time_setup).count(); + printf("\n**** Total time to setup driver in seconds %f ****\n\n", calc_time * 1e-9); + + + auto time_run = std::chrono::high_resolution_clock::now(); driver->run(); + time_now = std::chrono::high_resolution_clock::now(); + calc_time = std::chrono::duration_cast(time_now - time_setup).count(); + printf("\n**** Total time to run driver in seconds %f ****\n\n", calc_time * 1e-9); + + driver->finalize(); + time_now = std::chrono::high_resolution_clock::now(); + calc_time = std::chrono::duration_cast(time_now - time_start).count(); + + printf("\n**** Total time to run simulation in seconds %f ****\n\n", calc_time * 1e-9); + // Delete driver delete driver; } From 533ecc93a05c85c9da91c50668d2fe27a9c23e47 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CAdrian-Diaz=E2=80=9D?= <“adriandiaz1117@gmail.com”> Date: Thu, 29 Aug 2024 14:21:32 -0600 Subject: [PATCH 178/233] DOC: remove unused params in yaml files, add new yaml example --- ...mple_opt.yaml => example_elastic_opt.yaml} | 0 .../example_implosion.yaml | 2 - .../example_sedov_sgh_opt.yaml | 2 - .../example_sgh_opt_region.yaml | 2 - .../example_sgh_opt_restart.yaml | 2 - .../Example_Yaml_Scripts/example_simple.yaml | 2 - .../implosion_vel_opt.yaml | 84 +++++++++++++++++++ 7 files changed, 84 insertions(+), 10 deletions(-) rename src/Parallel-Solvers/Parallel-Explicit/Example_Yaml_Scripts/{example_simple_opt.yaml => example_elastic_opt.yaml} (100%) create mode 100644 src/Parallel-Solvers/Parallel-Explicit/Example_Yaml_Scripts/implosion_vel_opt.yaml diff --git a/src/Parallel-Solvers/Parallel-Explicit/Example_Yaml_Scripts/example_simple_opt.yaml b/src/Parallel-Solvers/Parallel-Explicit/Example_Yaml_Scripts/example_elastic_opt.yaml similarity index 100% rename from src/Parallel-Solvers/Parallel-Explicit/Example_Yaml_Scripts/example_simple_opt.yaml rename to src/Parallel-Solvers/Parallel-Explicit/Example_Yaml_Scripts/example_elastic_opt.yaml diff --git a/src/Parallel-Solvers/Parallel-Explicit/Example_Yaml_Scripts/example_implosion.yaml b/src/Parallel-Solvers/Parallel-Explicit/Example_Yaml_Scripts/example_implosion.yaml index ea43b3273..d85f75081 100644 --- a/src/Parallel-Solvers/Parallel-Explicit/Example_Yaml_Scripts/example_implosion.yaml +++ b/src/Parallel-Solvers/Parallel-Explicit/Example_Yaml_Scripts/example_implosion.yaml @@ -54,8 +54,6 @@ materials: - id: 0 eos_model: ideal_gas strength_model: none - elastic_modulus: 10 - poisson_ratio: 0.3 maximum_limiter: 1 q1: 2.0 q2: 4.0 diff --git a/src/Parallel-Solvers/Parallel-Explicit/Example_Yaml_Scripts/example_sedov_sgh_opt.yaml b/src/Parallel-Solvers/Parallel-Explicit/Example_Yaml_Scripts/example_sedov_sgh_opt.yaml index 6ffd94127..2d8fbe9fd 100644 --- a/src/Parallel-Solvers/Parallel-Explicit/Example_Yaml_Scripts/example_sedov_sgh_opt.yaml +++ b/src/Parallel-Solvers/Parallel-Explicit/Example_Yaml_Scripts/example_sedov_sgh_opt.yaml @@ -64,8 +64,6 @@ materials: - id: 0 eos_model: ideal_gas strength_model: none - elastic_modulus: 10 - poisson_ratio: 0.3 maximum_limiter: true q1: 1.0 q2: 1.33 diff --git a/src/Parallel-Solvers/Parallel-Explicit/Example_Yaml_Scripts/example_sgh_opt_region.yaml b/src/Parallel-Solvers/Parallel-Explicit/Example_Yaml_Scripts/example_sgh_opt_region.yaml index 1f457dfdb..f416ee02d 100644 --- a/src/Parallel-Solvers/Parallel-Explicit/Example_Yaml_Scripts/example_sgh_opt_region.yaml +++ b/src/Parallel-Solvers/Parallel-Explicit/Example_Yaml_Scripts/example_sgh_opt_region.yaml @@ -64,8 +64,6 @@ materials: - id: 0 eos_model: ideal_gas strength_model: none - elastic_modulus: 10 - poisson_ratio: 0.3 maximum_limiter: true q1: 1.0 q2: 1.33 diff --git a/src/Parallel-Solvers/Parallel-Explicit/Example_Yaml_Scripts/example_sgh_opt_restart.yaml b/src/Parallel-Solvers/Parallel-Explicit/Example_Yaml_Scripts/example_sgh_opt_restart.yaml index 9f5b45796..50702df5a 100644 --- a/src/Parallel-Solvers/Parallel-Explicit/Example_Yaml_Scripts/example_sgh_opt_restart.yaml +++ b/src/Parallel-Solvers/Parallel-Explicit/Example_Yaml_Scripts/example_sgh_opt_restart.yaml @@ -67,8 +67,6 @@ materials: - id: 0 eos_model: ideal_gas strength_model: none - elastic_modulus: 10 - poisson_ratio: 0.3 maximum_limiter: true q1: 1.0 q2: 1.33 diff --git a/src/Parallel-Solvers/Parallel-Explicit/Example_Yaml_Scripts/example_simple.yaml b/src/Parallel-Solvers/Parallel-Explicit/Example_Yaml_Scripts/example_simple.yaml index 08ad95f71..8ad2b63a6 100644 --- a/src/Parallel-Solvers/Parallel-Explicit/Example_Yaml_Scripts/example_simple.yaml +++ b/src/Parallel-Solvers/Parallel-Explicit/Example_Yaml_Scripts/example_simple.yaml @@ -61,8 +61,6 @@ materials: - id: 0 eos_model: ideal_gas strength_model: none - elastic_modulus: 10 - poisson_ratio: 0.3 q1: 1.0 q2: 1.33 q1ex: 1.0 diff --git a/src/Parallel-Solvers/Parallel-Explicit/Example_Yaml_Scripts/implosion_vel_opt.yaml b/src/Parallel-Solvers/Parallel-Explicit/Example_Yaml_Scripts/implosion_vel_opt.yaml new file mode 100644 index 000000000..a16f376f5 --- /dev/null +++ b/src/Parallel-Solvers/Parallel-Explicit/Example_Yaml_Scripts/implosion_vel_opt.yaml @@ -0,0 +1,84 @@ +num_dims: 3 +dynamic_options: + time_final: 50.0 + dt_min: 1.e-8 + dt_max: 1.e-2 + dt_start: 1.e-5 + cycle_stop: 2000000 + +mesh_generation_options: + type: Box + origin: [0, 0, 0] + length: [1.2, 1.2, 1.2] + num_elems: [128, 128, 128] + +output_options: + timer_output_level: thorough + output_file_format: vtk + graphics_step: 10 + +fea_module_parameters: + - type: SGH + material_id: 0 + boundary_conditions: + # Tag X plane + - surface: + type: x_plane + plane_position: 0.0 + type: reflected + + # Tag Y plane + - surface: + type: y_plane + plane_position: 0.0 + type: reflected + + # Tag Z plane + - surface: + type: z_plane + plane_position: 0.0 + type: reflected + + +materials: + - id: 0 + eos_model: ideal_gas + strength_model: none + maximum_limiter: 1 + q1: 4.0 + q2: 8.0 + q1ex: 4.0 + q2ex: 8.0 + eos_global_vars: + - 1.666666666666667 + - 1.0E-14 + - 1.0 + +regions: + - volume: + type: global + material_id: 0 + den: 1.0 + sie: 1.e-9 + + velocity: spherical + speed: -0.01 + +optimization_options: + optimization_process: topology_optimization + optimization_objective: maximize_internal_energy + use_solve_checkpoints: true + num_solve_checkpoints: 100 + rol_params: + subproblem_algorithm: line_search + initial_constraint_penalty: 1.e-3 + step_tolerance: 1.e-3 + gradient_tolerance: 1.e-4 + constraint_tolerance: 1.e-5 + iteration_limit: 4 + density_epsilon: 0.4 + variable_outer_shell: true + constraints: + - type: mass + relation: equality + value: 0.60 From 3a5aad9760490e4c8bdb710f00e2d0b53fc30b0f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CAdrian-Diaz=E2=80=9D?= <“adriandiaz1117@gmail.com”> Date: Thu, 29 Aug 2024 15:02:58 -0600 Subject: [PATCH 179/233] DOC: missing params in yaml file example --- .../Example_Yaml_Scripts/implosion_vel_opt.yaml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/Parallel-Solvers/Parallel-Explicit/Example_Yaml_Scripts/implosion_vel_opt.yaml b/src/Parallel-Solvers/Parallel-Explicit/Example_Yaml_Scripts/implosion_vel_opt.yaml index a16f376f5..69b5c6b8f 100644 --- a/src/Parallel-Solvers/Parallel-Explicit/Example_Yaml_Scripts/implosion_vel_opt.yaml +++ b/src/Parallel-Solvers/Parallel-Explicit/Example_Yaml_Scripts/implosion_vel_opt.yaml @@ -16,6 +16,9 @@ output_options: timer_output_level: thorough output_file_format: vtk graphics_step: 10 + write_initial: true + write_final: false + optimization_restart_file: true fea_module_parameters: - type: SGH @@ -69,6 +72,8 @@ optimization_options: optimization_objective: maximize_internal_energy use_solve_checkpoints: true num_solve_checkpoints: 100 + disable_forward_solve_output: true + optimization_output_freq: 1 rol_params: subproblem_algorithm: line_search initial_constraint_penalty: 1.e-3 From 9cb544b8c95079bdbb85bcc34e0cf084a57f5165 Mon Sep 17 00:00:00 2001 From: Nathaniel Morgan Date: Fri, 30 Aug 2024 12:47:01 -0600 Subject: [PATCH 180/233] updated var name for eos_state_vars --- single-node-refactor/src/common/material.h | 6 +- .../src/material_models/eos/gamma_law_eos.h | 5 +- .../src/material_models/eos/no_eos.h | 22 ++++++- .../material_models/eos/user_defined_eos.h | 43 ++++++++++++-- .../src/material_models/eos/void_eos.h | 58 ++++++++++++------- 5 files changed, 103 insertions(+), 31 deletions(-) diff --git a/single-node-refactor/src/common/material.h b/single-node-refactor/src/common/material.h index 309c37dbb..ee935004e 100644 --- a/single-node-refactor/src/common/material.h +++ b/single-node-refactor/src/common/material.h @@ -184,7 +184,7 @@ struct MaterialFunctions_t const DCArrayKokkos& MaterialPoints_stress, const size_t MaterialPoints_lid, const size_t mat_id, - const DCArrayKokkos& MaterialPoints_state_vars, + const DCArrayKokkos& MaterialPoints_eos_state_vars, const DCArrayKokkos& MaterialPoints_sspd, const double den, const double sie, @@ -194,7 +194,7 @@ struct MaterialFunctions_t const DCArrayKokkos& MaterialPoints_stress, const size_t MaterialPoints_lid, const size_t mat_id, - const DCArrayKokkos& MaterialPoints_state_vars, + const DCArrayKokkos& MaterialPoints_eos_state_vars, const DCArrayKokkos& MaterialPoints_sspd, const double den, const double sie, @@ -207,7 +207,7 @@ struct MaterialFunctions_t const DCArrayKokkos& MaterialPoints_stress, const size_t MaterialPoints_lid, const size_t mat_id, - const DCArrayKokkos& MaterialPoints_state_vars, + const DCArrayKokkos& MaterialPoints_strength_state_vars, const DCArrayKokkos& MaterialPoints_sspd, const double den, const double sie, diff --git a/single-node-refactor/src/material_models/eos/gamma_law_eos.h b/single-node-refactor/src/material_models/eos/gamma_law_eos.h index f7f5ae415..81b076861 100644 --- a/single-node-refactor/src/material_models/eos/gamma_law_eos.h +++ b/single-node-refactor/src/material_models/eos/gamma_law_eos.h @@ -75,6 +75,7 @@ namespace GammaLawGasEOSModel { const DCArrayKokkos& MaterialPoints_stress, const size_t mat_pt_lid, const size_t mat_id, + const DCArrayKokkos& MaterialPoints_eos_state_vars, const DCArrayKokkos& MaterialPoints_sspd, const double den, const double sie, @@ -92,7 +93,7 @@ namespace GammaLawGasEOSModel { const DCArrayKokkos& MaterialPoints_stress, const size_t mat_pt_lid, const size_t mat_id, - const DCArrayKokkos& MaterialPoints_state_vars, + const DCArrayKokkos& MaterialPoints_eos_state_vars, const DCArrayKokkos& MaterialPoints_sspd, const double den, const double sie, @@ -113,7 +114,7 @@ namespace GammaLawGasEOSModel { const DCArrayKokkos& MaterialPoints_stress, const size_t mat_pt_lid, const size_t mat_id, - const DCArrayKokkos& MaterialPoints_state_vars, + const DCArrayKokkos& MaterialPoints_eos_state_vars, const DCArrayKokkos& MaterialPoints_sspd, const double den, const double sie, diff --git a/single-node-refactor/src/material_models/eos/no_eos.h b/single-node-refactor/src/material_models/eos/no_eos.h index 6dd9f889f..611b3130b 100644 --- a/single-node-refactor/src/material_models/eos/no_eos.h +++ b/single-node-refactor/src/material_models/eos/no_eos.h @@ -54,13 +54,31 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /// ///////////////////////////////////////////////////////////////////////////// namespace NoEOSModel { + + // host side function + static void initialize(const DCArrayKokkos& MaterialPoints_pres, + const DCArrayKokkos& MaterialPoints_stress, + const size_t mat_pt_lid, + const size_t mat_id, + const DCArrayKokkos& MaterialPoints_eos_state_vars, + const DCArrayKokkos& MaterialPoints_sspd, + const double den, + const double sie, + const RaggedRightArrayKokkos &eos_global_vars, + const size_t num_vars) + { + + + + return; + } // end func KOKKOS_FUNCTION static void calc_pressure(const DCArrayKokkos& MaterialPoints_pres, const DCArrayKokkos& MaterialPoints_stress, const size_t mat_pt_lid, const size_t mat_id, - const DCArrayKokkos& MaterialPoints_state_vars, + const DCArrayKokkos& MaterialPoints_eos_state_vars, const DCArrayKokkos& MaterialPoints_sspd, const double den, const double sie, @@ -74,7 +92,7 @@ namespace NoEOSModel { const DCArrayKokkos& MaterialPoints_stress, const size_t mat_pt_lid, const size_t mat_id, - const DCArrayKokkos& MaterialPoints_state_vars, + const DCArrayKokkos& MaterialPoints_eos_state_vars, const DCArrayKokkos& MaterialPoints_sspd, const double den, const double sie, diff --git a/single-node-refactor/src/material_models/eos/user_defined_eos.h b/single-node-refactor/src/material_models/eos/user_defined_eos.h index 50a28e48b..4529956c5 100644 --- a/single-node-refactor/src/material_models/eos/user_defined_eos.h +++ b/single-node-refactor/src/material_models/eos/user_defined_eos.h @@ -60,13 +60,30 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ///////////////////////////////////////////////////////////////////////////// namespace UserDefinedEOSModel { + // host side function + static void initialize(const DCArrayKokkos& MaterialPoints_pres, + const DCArrayKokkos& MaterialPoints_stress, + const size_t mat_pt_lid, + const size_t mat_id, + const DCArrayKokkos& MaterialPoints_eos_state_vars, + const DCArrayKokkos& MaterialPoints_sspd, + const double den, + const double sie, + const RaggedRightArrayKokkos &eos_global_vars, + const size_t num_vars) + { + + + + return; + } // end func KOKKOS_FUNCTION static void calc_pressure(const DCArrayKokkos& MaterialPoints_pres, const DCArrayKokkos& MaterialPoints_stress, const size_t mat_pt_lid, const size_t mat_id, - const DCArrayKokkos& MaterialPoints_state_vars, + const DCArrayKokkos& MaterialPoints_eos_state_vars, const DCArrayKokkos& MaterialPoints_sspd, const double den, const double sie, @@ -88,7 +105,7 @@ namespace UserDefinedEOSModel const DCArrayKokkos& MaterialPoints_stress, const size_t mat_pt_lid, const size_t mat_id, - const DCArrayKokkos& MaterialPoints_state_vars, + const DCArrayKokkos& MaterialPoints_eos_state_vars, const DCArrayKokkos& MaterialPoints_sspd, const double den, const double sie, @@ -131,12 +148,30 @@ namespace UserDefinedEOSModel // ------------------------------------------------------------------------------ namespace NotionalEOSModel { + // host side function + static void initialize(const DCArrayKokkos& MaterialPoints_pres, + const DCArrayKokkos& MaterialPoints_stress, + const size_t mat_pt_lid, + const size_t mat_id, + const DCArrayKokkos& MaterialPoints_eos_state_vars, + const DCArrayKokkos& MaterialPoints_sspd, + const double den, + const double sie, + const RaggedRightArrayKokkos &eos_global_vars, + const size_t num_vars) + { + + + + return; + } // end func + KOKKOS_FUNCTION static void calc_pressure(const DCArrayKokkos& MaterialPoints_pres, const DCArrayKokkos& MaterialPoints_stress, const size_t mat_pt_lid, const size_t mat_id, - const DCArrayKokkos& MaterialPoints_state_vars, + const DCArrayKokkos& MaterialPoints_eos_state_vars, const DCArrayKokkos& MaterialPoints_sspd, const double den, const double sie, @@ -153,7 +188,7 @@ namespace NotionalEOSModel { const DCArrayKokkos& MaterialPoints_stress, const size_t mat_pt_lid, const size_t mat_id, - const DCArrayKokkos& MaterialPoints_state_vars, + const DCArrayKokkos& MaterialPoints_eos_state_vars, const DCArrayKokkos& MaterialPoints_sspd, const double den, const double sie, diff --git a/single-node-refactor/src/material_models/eos/void_eos.h b/single-node-refactor/src/material_models/eos/void_eos.h index d736d8aba..66d24ff19 100644 --- a/single-node-refactor/src/material_models/eos/void_eos.h +++ b/single-node-refactor/src/material_models/eos/void_eos.h @@ -55,37 +55,55 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ///////////////////////////////////////////////////////////////////////////// namespace VoidEOSModel { + // host side function + static void initialize(const DCArrayKokkos& MaterialPoints_pres, + const DCArrayKokkos& MaterialPoints_stress, + const size_t mat_pt_lid, + const size_t mat_id, + const DCArrayKokkos& MaterialPoints_eos_state_vars, + const DCArrayKokkos& MaterialPoints_sspd, + const double den, + const double sie, + const RaggedRightArrayKokkos &eos_global_vars, + const size_t num_vars) + { + + + + return; + } // end func + KOKKOS_FUNCTION - static void calc_pressure(const DCArrayKokkos& elem_pres, - const DCArrayKokkos& elem_stress, - const size_t mat_pt_lid, - const size_t mat_id, - const DCArrayKokkos& elem_state_vars, - const DCArrayKokkos& elem_sspd, - const double den, - const double sie, - const RaggedRightArrayKokkos &eos_global_vars) + static void calc_pressure(const DCArrayKokkos& MaterialPoints_pres, + const DCArrayKokkos& MaterialPoints_stress, + const size_t mat_pt_lid, + const size_t mat_id, + const DCArrayKokkos& MaterialPoints_eos_state_vars, + const DCArrayKokkos& MaterialPoints_sspd, + const double den, + const double sie, + const RaggedRightArrayKokkos &eos_global_vars) { // pressure of a void is 0 - elem_pres(mat_pt_lid) = 0.0; + MaterialPoints_pres(mat_pt_lid) = 0.0; return; } // end func KOKKOS_FUNCTION - static void calc_sound_speed(const DCArrayKokkos& elem_pres, - const DCArrayKokkos& elem_stress, - const size_t mat_pt_lid, - const size_t mat_id, - const DCArrayKokkos& elem_state_vars, - const DCArrayKokkos& elem_sspd, - const double den, - const double sie, - const RaggedRightArrayKokkos &eos_global_vars) + static void calc_sound_speed(const DCArrayKokkos& MaterialPoints_pres, + const DCArrayKokkos& MaterialPoints_stress, + const size_t mat_pt_lid, + const size_t mat_id, + const DCArrayKokkos& MaterialPoints_eos_state_vars, + const DCArrayKokkos& MaterialPoints_sspd, + const double den, + const double sie, + const RaggedRightArrayKokkos &eos_global_vars) { // sound speed of a void is 0, machine small must be used for CFL calculation - elem_sspd(mat_pt_lid) = 1.0e-32; + MaterialPoints_sspd(mat_pt_lid) = 1.0e-32; return; } // end func From 415275706b288bc028ff6805ca315ddd98c028a2 Mon Sep 17 00:00:00 2001 From: Nathaniel Morgan Date: Fri, 30 Aug 2024 16:02:25 -0600 Subject: [PATCH 181/233] updated and fixed bugs in RZ solver --- .../Solvers/SGH_solver_3D/src/force_sgh.cpp | 3 +- .../Solvers/SGH_solver_3D/src/properties.cpp | 3 +- .../SGH_solver_rz/src/force_sgh_rz.cpp | 17 ++- .../SGH_solver_rz/src/properties_rz.cpp | 3 +- single-node-refactor/src/common/material.h | 5 +- single-node-refactor/src/input/parse_yaml.cpp | 1 + .../material_models/eos/user_defined_eos.h | 3 + .../material_models/strength/no_strength.h | 108 +----------------- .../strength/user_defined_strength.h | 28 ++--- 9 files changed, 45 insertions(+), 126 deletions(-) diff --git a/single-node-refactor/src/Solvers/SGH_solver_3D/src/force_sgh.cpp b/single-node-refactor/src/Solvers/SGH_solver_3D/src/force_sgh.cpp index 7de569d13..6801b53a0 100644 --- a/single-node-refactor/src/Solvers/SGH_solver_3D/src/force_sgh.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver_3D/src/force_sgh.cpp @@ -433,7 +433,8 @@ void SGH3D::get_force(const Material_t& Materials, node_vel, GaussPoints_vol(elem_gid), dt, - rk_alpha); + rk_alpha, + Materials.strength_global_vars); } // end logical on increment_based strength model }); // end parallel for loop over elements diff --git a/single-node-refactor/src/Solvers/SGH_solver_3D/src/properties.cpp b/single-node-refactor/src/Solvers/SGH_solver_3D/src/properties.cpp index 31f89b428..fced3b640 100644 --- a/single-node-refactor/src/Solvers/SGH_solver_3D/src/properties.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver_3D/src/properties.cpp @@ -205,7 +205,8 @@ void SGH3D::update_state( node_vel, GaussPoints_vol(gauss_gid), dt, - rk_alpha); + rk_alpha, + Materials.strength_global_vars); }); // end parallel for over mat elem lid } // end if state_based strength model diff --git a/single-node-refactor/src/Solvers/SGH_solver_rz/src/force_sgh_rz.cpp b/single-node-refactor/src/Solvers/SGH_solver_rz/src/force_sgh_rz.cpp index c9a18e206..d233f73b5 100644 --- a/single-node-refactor/src/Solvers/SGH_solver_rz/src/force_sgh_rz.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver_rz/src/force_sgh_rz.cpp @@ -414,11 +414,21 @@ void SGHRZ::get_force_rz(const Material_t& Materials, // Wilkins used elem_area*0.25 for the corner area, we will use the corner // areas calculated using Barlow's symmetry and energy preserving area partitioning if (node_radius > tiny) { + // sigma_RZ / R_p - corner_force(corner_gid, 0) += tau(1, 0) * corner_areas(corner_lid) / node_radius; + double force_term_1 = tau(1, 0) * corner_areas(corner_lid) / node_radius; + //force_term_1 = tau(1, 0) * 0.25*elem_area / node_radius; // Wilkins + + corner_force(corner_gid, 0) += force_term_1; + MaterialCorners_force(mat_corner_lid, 0) += force_term_1; // (sigma_RR - sigma_theta) / R_p - corner_force(corner_gid, 1) += (tau(1, 1) - tau(2, 2)) * corner_areas(corner_lid) / node_radius; + double force_term_2 = (tau(1, 1) - tau(2, 2)) * corner_areas(corner_lid) / node_radius; + //force_term_2 = (tau(1, 1) - tau(2, 2)) * 0.25*elem_area / node_radius; // Wilkins + + corner_force(corner_gid, 1) += force_term_2; + MaterialCorners_force(mat_corner_lid, 1) += force_term_2; + } // end if radius >0 } // end if eroded @@ -449,7 +459,8 @@ void SGHRZ::get_force_rz(const Material_t& Materials, node_vel, GaussPoints_vol(elem_gid), dt, - rk_alpha); + rk_alpha, + Materials.strength_global_vars); } // end logical on increment_based strength model }); // end parallel for loop over elements diff --git a/single-node-refactor/src/Solvers/SGH_solver_rz/src/properties_rz.cpp b/single-node-refactor/src/Solvers/SGH_solver_rz/src/properties_rz.cpp index 36b908dbf..de820bc4c 100644 --- a/single-node-refactor/src/Solvers/SGH_solver_rz/src/properties_rz.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver_rz/src/properties_rz.cpp @@ -220,7 +220,8 @@ void SGHRZ::update_state_rz( node_vel, GaussPoints_vol(gauss_gid), dt, - rk_alpha); + rk_alpha, + Materials.strength_global_vars); }); // end parallel for over mat elem lid diff --git a/single-node-refactor/src/common/material.h b/single-node-refactor/src/common/material.h index ee935004e..bcefde1a8 100644 --- a/single-node-refactor/src/common/material.h +++ b/single-node-refactor/src/common/material.h @@ -113,7 +113,7 @@ static std::map eos_models_map { "no_eos", model::noEOS }, { "gamma_law_gas", model::gammaLawGasEOS }, { "void", model::voidEOS }, - { "user_defined", model::userDefinedEOS }, + { "user_defined_eos", model::userDefinedEOS }, }; static std::map erosion_model_map @@ -217,7 +217,8 @@ struct MaterialFunctions_t const DCArrayKokkos& node_vel, const double vol, const double dt, - const double rk_alpha) = NULL; + const double rk_alpha, + const RaggedRightArrayKokkos &strength_global_vars) = NULL; // -- Erosion -- diff --git a/single-node-refactor/src/input/parse_yaml.cpp b/single-node-refactor/src/input/parse_yaml.cpp index caaf999fb..9004fc53c 100644 --- a/single-node-refactor/src/input/parse_yaml.cpp +++ b/single-node-refactor/src/input/parse_yaml.cpp @@ -1707,6 +1707,7 @@ void parse_materials(Yaml::Node& root, Material_t& Materials) break; case model::userDefinedStrength: + RUN({ Materials.MaterialFunctions(mat_id).calc_stress = &UserDefinedStrengthModel::calc_stress; }); diff --git a/single-node-refactor/src/material_models/eos/user_defined_eos.h b/single-node-refactor/src/material_models/eos/user_defined_eos.h index 4529956c5..a9cd0f961 100644 --- a/single-node-refactor/src/material_models/eos/user_defined_eos.h +++ b/single-node-refactor/src/material_models/eos/user_defined_eos.h @@ -204,4 +204,7 @@ namespace NotionalEOSModel { } // end namespace + + + #endif // end Header Guard \ No newline at end of file diff --git a/single-node-refactor/src/material_models/strength/no_strength.h b/single-node-refactor/src/material_models/strength/no_strength.h index 35ca884e4..dd7ac1a6a 100644 --- a/single-node-refactor/src/material_models/strength/no_strength.h +++ b/single-node-refactor/src/material_models/strength/no_strength.h @@ -32,68 +32,11 @@ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. **********************************************************************************************/ -#ifndef USER_DEFINED_STRENGTH_H -#define USER_DEFINED_STRENGTH_H +#ifndef NO_STRENGTH_H +#define NO_STRENGTH_H -///////////////////////////////////////////////////////////////////////////// -/// -/// \fn UserDefinedStrengthModel -/// -/// \brief user defined strength model -/// -/// This is the user material model function for the stress tensor -/// -/// \param Element pressure -/// \param Element stress -/// \param Global ID for the element -/// \param Material ID for the element -/// \param Element state variables -/// \param Element Sound speed -/// \param Material density -/// \param Material specific internal energy -/// \param Element velocity gradient -/// \param Element nodes IDs in the element -/// \param Node node coordinates -/// \param Noe velocity -/// \param Element volume -/// \param Element time step -/// \param Element coefficient in the Runge Kutta time integration -/// -///////////////////////////////////////////////////////////////////////////// -namespace UserDefinedStrengthModel { - - KOKKOS_FUNCTION - static void calc_stress(const DCArrayKokkos& elem_pres, - const DCArrayKokkos& elem_stress, - const size_t mat_pt_lid, - const size_t mat_id, - const DCArrayKokkos& elem_state_vars, - const DCArrayKokkos& elem_sspd, - const double den, - const double sie, - const ViewCArrayKokkos& vel_grad, - const ViewCArrayKokkos& elem_node_gids, - const DCArrayKokkos& node_coords, - const DCArrayKokkos& node_vel, - const double vol, - const double dt, - const double rk_alpha) - { - // ----------------------------------------------------------------------------- - // Required variables are here - // ------------------------------------------------------------------------------ - - // ----------------------------------------------------------------------------- - // The user must coding goes here - // ------------------------------------------------------------------------------ - - return; - } // end of user mat - -} // end namespace - // ----------------------------------------------------------------------------- // This is the user material model function for the stress tensor // ------------------------------------------------------------------------------ @@ -114,51 +57,8 @@ namespace NoStrengthModel { const DCArrayKokkos& node_vel, const double vol, const double dt, - const double rk_alpha) - { - return; - } // end of user mat - -} // end namespace - - -///////////////////////////////////////////////////////////////////////////// -/// -/// \fn fcn_name -/// -/// \brief -/// -/// -/// -/// \param -/// \param -/// \param -/// -/// \return -/// -///////////////////////////////////////////////////////////////////////////// -// ----------------------------------------------------------------------------- -// This is place holder for another user strength model -// ------------------------------------------------------------------------------ -namespace NotionalStrengthModel { - - KOKKOS_FUNCTION - static void calc_stress(const DCArrayKokkos& elem_pres, - const DCArrayKokkos& elem_stress, - const size_t mat_pt_lid, - const size_t mat_id, - const DCArrayKokkos& elem_state_vars, - const DCArrayKokkos& elem_sspd, - const double den, - const double sie, - const ViewCArrayKokkos& vel_grad, - const ViewCArrayKokkos& elem_node_gids, - const DCArrayKokkos& node_coords, - const DCArrayKokkos& node_vel, - const double vol, - const double dt, - const double rk_alpha) + const double rk_alpha, + const RaggedRightArrayKokkos &strength_global_vars) { return; } // end of user mat diff --git a/single-node-refactor/src/material_models/strength/user_defined_strength.h b/single-node-refactor/src/material_models/strength/user_defined_strength.h index c194c8a1a..58ae6e5d5 100644 --- a/single-node-refactor/src/material_models/strength/user_defined_strength.h +++ b/single-node-refactor/src/material_models/strength/user_defined_strength.h @@ -65,12 +65,12 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. namespace UserDefinedStrengthModel { KOKKOS_FUNCTION - static void calc_stress(const DCArrayKokkos& elem_pres, - const DCArrayKokkos& elem_stress, - const size_t mat_pt_lid, + static void calc_stress(const DCArrayKokkos& MaterialPoints_pres, + const DCArrayKokkos& MaterialPoints_stress, + const size_t MaterialPoints_lid, const size_t mat_id, - const DCArrayKokkos& elem_state_vars, - const DCArrayKokkos& elem_sspd, + const DCArrayKokkos& MaterialPoints_strength_state_vars, + const DCArrayKokkos& MaterialPoints_sspd, const double den, const double sie, const ViewCArrayKokkos& vel_grad, @@ -79,7 +79,8 @@ namespace UserDefinedStrengthModel { const DCArrayKokkos& node_vel, const double vol, const double dt, - const double rk_alpha) + const double rk_alpha, + const RaggedRightArrayKokkos &strength_global_vars) { // ----------------------------------------------------------------------------- // Required variables are here @@ -118,12 +119,12 @@ namespace UserDefinedStrengthModel { namespace NotionalStrengthModel { KOKKOS_FUNCTION - static void calc_stress(const DCArrayKokkos& elem_pres, - const DCArrayKokkos& elem_stress, - const size_t mat_pt_lid, + static void calc_stress(const DCArrayKokkos& MaterialPoints_pres, + const DCArrayKokkos& MaterialPoints_stress, + const size_t MaterialPoints_lid, const size_t mat_id, - const DCArrayKokkos& elem_state_vars, - const DCArrayKokkos& elem_sspd, + const DCArrayKokkos& MaterialPoints_strength_state_vars, + const DCArrayKokkos& MaterialPoints_sspd, const double den, const double sie, const ViewCArrayKokkos& vel_grad, @@ -132,7 +133,8 @@ namespace NotionalStrengthModel { const DCArrayKokkos& node_vel, const double vol, const double dt, - const double rk_alpha) + const double rk_alpha, + const RaggedRightArrayKokkos &strength_global_vars) { return; } // end of user mat @@ -140,6 +142,4 @@ namespace NotionalStrengthModel { } // end namespace - - #endif // end Header Guard \ No newline at end of file From 67b75472b5b1f49bb8b48278345c046be274782c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CAdrian-Diaz=E2=80=9D?= <“adriandiaz1117@gmail.com”> Date: Fri, 30 Aug 2024 20:47:34 -0600 Subject: [PATCH 182/233] WIP: pressure vessel problem support --- .../FEA_Module_Elasticity.cpp | 25 +++++++++++++++--- .../FEA_Module_Thermo_Elasticity.cpp | 26 ++++++++++++++++--- 2 files changed, 43 insertions(+), 8 deletions(-) diff --git a/src/Parallel-Solvers/Implicit-Lagrange/FEA_Physics_Modules/FEA_Module_Elasticity.cpp b/src/Parallel-Solvers/Implicit-Lagrange/FEA_Physics_Modules/FEA_Module_Elasticity.cpp index 24eed1913..32c9b27ba 100644 --- a/src/Parallel-Solvers/Implicit-Lagrange/FEA_Physics_Modules/FEA_Module_Elasticity.cpp +++ b/src/Parallel-Solvers/Implicit-Lagrange/FEA_Physics_Modules/FEA_Module_Elasticity.cpp @@ -2109,7 +2109,7 @@ void FEA_Module_Elasticity::assemble_vector(){ ViewCArray quad_coordinate_weight(pointer_quad_coordinate_weight,num_dim); ViewCArray interpolated_point(pointer_interpolated_point,num_dim); real_t force_density[3], wedge_product, Jacobian, current_density, weight_multiply, surface_normal[3], pressure, normal_displacement; - real_t resulting_term; + real_t resulting_term, vessel_term; CArray Surface_Nodes; CArrayKokkos JT_row1(num_dim); @@ -2127,7 +2127,8 @@ void FEA_Module_Elasticity::assemble_vector(){ CArrayKokkos nodal_positions(nodes_per_elem,num_dim); CArrayKokkos nodal_density(nodes_per_elem); CArrayKokkos surf_basis_values(nodes_per_elem,num_dim); - real_t constant_stress_flag = module_params->constant_stress_flag; + bool constant_stress_flag = module_params->constant_stress_flag; + bool pressure_vessel_flag = module_params->pressure_vessel_flag; //force vector initialization for(int i=0; i < num_dim*nlocal_nodes; i++) @@ -2578,7 +2579,23 @@ void FEA_Module_Elasticity::assemble_vector(){ //compute shape functions at this point for the element type elem->basis(basis_values,quad_coordinate); - + if(pressure_vessel_flag){ + current_density = 0; + if(nodal_density_flag){ + for(int node_loop=0; node_loop < elem->num_basis(); node_loop++){ + current_density += nodal_density(node_loop)*basis_values(node_loop); + } + } + //default constant element density + else{ + current_density = Element_Densities(ielem,0); + } + vessel_term = 1 - current_density; + } + else{ + vessel_term = 1; + } + //debug print //std::cout << "Current Density " << current_density << std::endl; @@ -2741,7 +2758,7 @@ void FEA_Module_Elasticity::assemble_vector(){ for(int span=0; span < Brows; span++){ resulting_term += stress_matrix(span)*B_matrix_contribution(span,icol); } - Nodal_RHS(num_dim*local_node_id + icol%num_dim,0) += weight_multiply*resulting_term*basis_values(icol/num_dim); + Nodal_RHS(num_dim*local_node_id + icol%num_dim,0) += weight_multiply*resulting_term*vessel_term*basis_values(icol/num_dim); } } }//for diff --git a/src/Parallel-Solvers/Implicit-Lagrange/FEA_Physics_Modules/FEA_Module_Thermo_Elasticity.cpp b/src/Parallel-Solvers/Implicit-Lagrange/FEA_Physics_Modules/FEA_Module_Thermo_Elasticity.cpp index 6bbde04c9..3409c2d9c 100644 --- a/src/Parallel-Solvers/Implicit-Lagrange/FEA_Physics_Modules/FEA_Module_Thermo_Elasticity.cpp +++ b/src/Parallel-Solvers/Implicit-Lagrange/FEA_Physics_Modules/FEA_Module_Thermo_Elasticity.cpp @@ -1447,7 +1447,9 @@ void FEA_Module_Thermo_Elasticity::assemble_vector(){ bool is_hex; int patch_node_count; CArray patch_local_node_ids; - real_t constant_stress_flag = module_params.constant_stress_flag; + bool constant_stress_flag = module_params.constant_stress_flag; + bool pressure_vessel_flag = module_params.pressure_vessel_flag; + //CArrayKokkos legendre_nodes_1D(num_gauss_points); //CArrayKokkos legendre_weights_1D(num_gauss_points); CArray legendre_nodes_1D(num_gauss_points); @@ -1459,7 +1461,7 @@ void FEA_Module_Thermo_Elasticity::assemble_vector(){ ViewCArray quad_coordinate_weight(pointer_quad_coordinate_weight,num_dim); ViewCArray interpolated_point(pointer_interpolated_point,num_dim); real_t force_density[3], wedge_product, Jacobian, current_density, current_temperature, weight_multiply, surface_normal[3], pressure, normal_displacement; - real_t resulting_term; + real_t resulting_term, vessel_term; CArray Surface_Nodes; CArrayKokkos JT_row1(num_dim); @@ -2206,7 +2208,23 @@ void FEA_Module_Thermo_Elasticity::assemble_vector(){ //compute shape functions at this point for the element type elem->basis(basis_values,quad_coordinate); - + + if(pressure_vessel_flag){ + current_density = 0; + if(nodal_density_flag){ + for(int node_loop=0; node_loop < elem->num_basis(); node_loop++){ + current_density += nodal_density(node_loop)*basis_values(node_loop); + } + } + //default constant element density + else{ + current_density = Element_Densities(ielem,0); + } + vessel_term = 1 - current_density; + } + else{ + vessel_term = 1; + } //debug print //std::cout << "Current Density " << current_density << std::endl; @@ -2369,7 +2387,7 @@ void FEA_Module_Thermo_Elasticity::assemble_vector(){ for(int span=0; span < Brows; span++){ resulting_term += stress_matrix(span)*B_matrix_contribution(span,icol); } - Nodal_RHS(num_dim*local_node_id + icol%num_dim,0) += weight_multiply*resulting_term*basis_values(icol/num_dim); + Nodal_RHS(num_dim*local_node_id + icol%num_dim,0) += weight_multiply*vessel_term*resulting_term*basis_values(icol/num_dim); } } }//for From e9fff24e0870044b16503873d77da452b249b9a7 Mon Sep 17 00:00:00 2001 From: Jacob Moore Date: Tue, 3 Sep 2024 11:11:27 -0500 Subject: [PATCH 183/233] ENH: Add precision to conservation outputs --- .../src/Solvers/SGH_solver_3D/src/sgh_execute.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/single-node-refactor/src/Solvers/SGH_solver_3D/src/sgh_execute.cpp b/single-node-refactor/src/Solvers/SGH_solver_3D/src/sgh_execute.cpp index b375ee883..bf8c03828 100644 --- a/single-node-refactor/src/Solvers/SGH_solver_3D/src/sgh_execute.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver_3D/src/sgh_execute.cpp @@ -401,8 +401,8 @@ void SGH3D::execute(SimulationParameters_t& SimulationParamaters, // extensive TE TE_tend = IE_tend + KE_tend; - printf("Time=0: KE = %f, IE = %f, TE = %f \n", KE_t0, IE_t0, TE_t0); - printf("Time=End: KE = %f, IE = %f, TE = %f \n", KE_tend, IE_tend, TE_tend); + printf("Time=0: KE = %.14f, IE = %.14f, TE = %.14f \n", KE_t0, IE_t0, TE_t0); + printf("Time=End: KE = %.14f, IE = %.14f, TE = %.14f \n", KE_tend, IE_tend, TE_tend); printf("total energy change = %.15e \n\n", TE_tend - TE_t0); // domain mass for each material (they are at material points) From 11df2e49f391c7e0465d9cbab5f98766d899488c Mon Sep 17 00:00:00 2001 From: Jacob Moore Date: Tue, 3 Sep 2024 11:31:27 -0500 Subject: [PATCH 184/233] ENH: Add thermomechanical solver WIP --- .../src/Solvers/SGTM_solver_3D/CMakeLists.txt | 35 + .../SGTM_solver_3D/include/sgtm_solver_3D.h | 351 ++++++++++ .../Solvers/SGTM_solver_3D/src/boundary.cpp | 98 +++ .../SGTM_solver_3D/src/energy_sgtm.cpp | 108 +++ .../Solvers/SGTM_solver_3D/src/force_sgtm.cpp | 441 ++++++++++++ .../Solvers/SGTM_solver_3D/src/momentum.cpp | 305 +++++++++ .../Solvers/SGTM_solver_3D/src/position.cpp | 64 ++ .../Solvers/SGTM_solver_3D/src/properties.cpp | 254 +++++++ .../SGTM_solver_3D/src/sgtm_execute.cpp | 628 ++++++++++++++++++ .../Solvers/SGTM_solver_3D/src/sgtm_setup.cpp | 500 ++++++++++++++ .../SGTM_solver_3D/src/time_integration.cpp | 205 ++++++ 11 files changed, 2989 insertions(+) create mode 100755 single-node-refactor/src/Solvers/SGTM_solver_3D/CMakeLists.txt create mode 100644 single-node-refactor/src/Solvers/SGTM_solver_3D/include/sgtm_solver_3D.h create mode 100644 single-node-refactor/src/Solvers/SGTM_solver_3D/src/boundary.cpp create mode 100644 single-node-refactor/src/Solvers/SGTM_solver_3D/src/energy_sgtm.cpp create mode 100644 single-node-refactor/src/Solvers/SGTM_solver_3D/src/force_sgtm.cpp create mode 100644 single-node-refactor/src/Solvers/SGTM_solver_3D/src/momentum.cpp create mode 100644 single-node-refactor/src/Solvers/SGTM_solver_3D/src/position.cpp create mode 100644 single-node-refactor/src/Solvers/SGTM_solver_3D/src/properties.cpp create mode 100644 single-node-refactor/src/Solvers/SGTM_solver_3D/src/sgtm_execute.cpp create mode 100644 single-node-refactor/src/Solvers/SGTM_solver_3D/src/sgtm_setup.cpp create mode 100644 single-node-refactor/src/Solvers/SGTM_solver_3D/src/time_integration.cpp diff --git a/single-node-refactor/src/Solvers/SGTM_solver_3D/CMakeLists.txt b/single-node-refactor/src/Solvers/SGTM_solver_3D/CMakeLists.txt new file mode 100755 index 000000000..0cdb41311 --- /dev/null +++ b/single-node-refactor/src/Solvers/SGTM_solver_3D/CMakeLists.txt @@ -0,0 +1,35 @@ +cmake_minimum_required(VERSION 3.1.3) + +find_package(Matar REQUIRED) +find_package(Kokkos REQUIRED) + +add_definitions(-DHAVE_KOKKOS=1) + +if (CUDA) + add_definitions(-DHAVE_CUDA=1) +elseif (HIP) + add_definitions(-DHAVE_HIP=1) +elseif (OPENMP) + add_definitions(-DHAVE_OPENMP=1) +elseif (THREADS) + add_definitions(-DHAVE_THREADS=1) +endif() + +include_directories(include) +include_directories(src) + +message("\n ****** ADDING SGTM SOURCE FILES ******** \n ") + +set(SGTM_3D_SRC_Files +${CMAKE_CURRENT_SOURCE_DIR}/src/boundary.cpp +${CMAKE_CURRENT_SOURCE_DIR}/src/energy_sgtm.cpp +${CMAKE_CURRENT_SOURCE_DIR}/src/force_sgtm.cpp +${CMAKE_CURRENT_SOURCE_DIR}/src/position.cpp +${CMAKE_CURRENT_SOURCE_DIR}/src/momentum.cpp +${CMAKE_CURRENT_SOURCE_DIR}/src/properties.cpp +${CMAKE_CURRENT_SOURCE_DIR}/src/sgtm_execute.cpp +${CMAKE_CURRENT_SOURCE_DIR}/src/time_integration.cpp +${CMAKE_CURRENT_SOURCE_DIR}/src/sgtm_setup.cpp +${CMAKE_CURRENT_SOURCE_DIR}/include/sgtm_solver_3D.h +PARENT_SCOPE +) \ No newline at end of file diff --git a/single-node-refactor/src/Solvers/SGTM_solver_3D/include/sgtm_solver_3D.h b/single-node-refactor/src/Solvers/SGTM_solver_3D/include/sgtm_solver_3D.h new file mode 100644 index 000000000..f9195f9a3 --- /dev/null +++ b/single-node-refactor/src/Solvers/SGTM_solver_3D/include/sgtm_solver_3D.h @@ -0,0 +1,351 @@ +/********************************************************************************************** +© 2020. Triad National Security, LLC. All rights reserved. +This program was produced under U.S. Government contract 89233218CNA000001 for Los Alamos +National Laboratory (LANL), which is operated by Triad National Security, LLC for the U.S. +Department of Energy/National Nuclear Security Administration. All rights in the program are +reserved by Triad National Security, LLC, and the U.S. Department of Energy/National Nuclear +Security Administration. The Government is granted for itself and others acting on its behalf a +nonexclusive, paid-up, irrevocable worldwide license in this material to reproduce, prepare +derivative works, distribute copies to the public, perform publicly and display publicly, and +to permit others to do so. +This program is open source under the BSD-3 License. +Redistribution and use in source and binary forms, with or without modification, are permitted +provided that the following conditions are met: +1. Redistributions of source code must retain the above copyright notice, this list of +conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, this list of +conditions and the following disclaimer in the documentation and/or other materials +provided with the distribution. +3. Neither the name of the copyright holder nor the names of its contributors may be used +to endorse or promote products derived from this software without specific prior +written permission. +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +**********************************************************************************************/ + +#ifndef SGTM3D_SOLVER_H +#define SGTM3D_SOLVER_H + +#include "solver.h" + +// Forward declare structs +struct SimulationParameters_t; +struct Material_t; +struct Mesh_t; +struct BoundaryCondition_t; +struct State_t; +struct RegionFill_t; +struct RegionFill_host_t; +struct corners_in_mat_t; + +using namespace mtr; // matar namespace + +///////////////////////////////////////////////////////////////////////////// +/// +/// \class SGTM +/// +/// \brief Class for containing functions required to perform staggered grid thermomechanical +/// 3D Cartesian meshes. +/// +/// This class contains the requisite functions requited to perform +/// staggered grid thermomechanical heat transfer. +/// +///////////////////////////////////////////////////////////////////////////// +class SGTM3D : public Solver +{ +public: + + SGTM3D() : Solver() + { + } + + ~SGTM3D() = default; + + // Initialize data specific to the SGTM3D solver + void initialize(SimulationParameters_t& SimulationParamaters, + Material_t& Materials, + Mesh_t& mesh, + BoundaryCondition_t& Boundary, + State_t& State) const override + { + // stuff goes here + } + + ///////////////////////////////////////////////////////////////////////////// + /// + /// \fn setup + /// + /// \brief Calls setup_sgh, which initializes state and material data + /// + ///////////////////////////////////////////////////////////////////////////// + void setup(SimulationParameters_t& SimulationParamaters, + Material_t& Materials, + Mesh_t& mesh, + BoundaryCondition_t& Boundary, + State_t& State) override; + + ///////////////////////////////////////////////////////////////////////////// + /// + /// \fn execute + /// + /// \brief Calls the solve function which evolves the state + /// + /// + ///////////////////////////////////////////////////////////////////////////// + void execute(SimulationParameters_t& SimulationParamaters, + Material_t& Materials, + BoundaryCondition_t& Boundary, + Mesh_t& mesh, + State_t& State) override; + + ///////////////////////////////////////////////////////////////////////////// + /// + /// \fn finalize + /// + /// \brief + /// + /// + /// + /// \param + /// \param + /// \param + /// + /// \return + /// + ///////////////////////////////////////////////////////////////////////////// + void finalize(SimulationParameters_t& SimulationParamaters, + Material_t& Materials, + BoundaryCondition_t& Boundary) const override + { + // Any finalize goes here, remove allocated memory, etc + } + + // **** Functions defined in sgh_setup.cpp **** // + void fill_regions_sgh( + const Material_t& Materials, + const Mesh_t& mesh, + const DCArrayKokkos& node_coords, + DCArrayKokkos& node_vel, + DCArrayKokkos& GaussPoint_den, + DCArrayKokkos& GaussPoint_sie, + DCArrayKokkos& elem_mat_id, + DCArrayKokkos& voxel_elem_mat_id, + const CArrayKokkos& region_fills, + const CArray& region_fills_host, + const size_t num_fills, + const size_t num_elems, + const size_t num_nodes, + const size_t rk_num_bins) const; + + void init_corner_node_masses_zero( + const Mesh_t& mesh, + const DCArrayKokkos& node_mass, + const DCArrayKokkos& corner_mass) const; + + // **** Functions defined in boundary.cpp **** // + void boundary_velocity( + const Mesh_t& mesh, + const BoundaryCondition_t& Boundary, + DCArrayKokkos& node_vel, + const double time_value) const; + + void boundary_contact( + const Mesh_t& mesh, + const BoundaryCondition_t& Boundary, + DCArrayKokkos& node_vel, + const double time_value) const; + + // **** Functions defined in energy_sgh.cpp **** // + void update_energy( + const double rk_alpha, + const double dt, + const Mesh_t& mesh, + const DCArrayKokkos& node_vel, + const DCArrayKokkos& node_coords, + const DCArrayKokkos& MaterialPoints_sie, + const DCArrayKokkos& MaterialPoints_mass, + const DCArrayKokkos& MaterialCorners_force, + const corners_in_mat_t corners_in_mat_elem, + const DCArrayKokkos& MaterialToMeshMaps_elem, + const size_t num_mat_elems) const; + + // **** Functions defined in force_sgh.cpp **** // + void get_force( + const Material_t& Materials, + const Mesh_t& mesh, + const DCArrayKokkos& GaussPoints_vol, + const DCArrayKokkos& GaussPoints_div, + const DCArrayKokkos& GaussPoints_eroded, + const DCArrayKokkos& corner_force, + const DCArrayKokkos& node_coords, + const DCArrayKokkos& node_vel, + const DCArrayKokkos& MaterialPoints_den, + const DCArrayKokkos& MaterialPoints_sie, + const DCArrayKokkos& MaterialPoints_pres, + const DCArrayKokkos& MaterialPoints_stress, + const DCArrayKokkos& MaterialPoints_sspd, + const DCArrayKokkos& MaterialPoints_statev, + const DCArrayKokkos& MaterialCorners_force, + const DCArrayKokkos& MaterialPoints_volfrac, + const corners_in_mat_t, + const DCArrayKokkos& MaterialToMeshMaps_elem, + const size_t num_mat_elems, + const size_t mat_id, + const double fuzz, + const double small, + const double dt, + const double rk_alpha) const; + + // **** Functions defined in geometry.cpp **** // + void update_position( + double rk_alpha, + double dt, + const size_t num_dims, + const size_t num_nodes, + DCArrayKokkos& node_coords, + const DCArrayKokkos& node_vel) const; + + // **** Functions defined in momentum.cpp **** // + void update_velocity( + double rk_alpha, + double dt, + const Mesh_t& mesh, + DCArrayKokkos& node_vel, + const DCArrayKokkos& node_mass, + const DCArrayKokkos& corner_force) const; + + KOKKOS_FUNCTION + void get_velgrad( + ViewCArrayKokkos& vel_grad, + const ViewCArrayKokkos& elem_node_gids, + const DCArrayKokkos& node_vel, + const ViewCArrayKokkos& b_matrix, + const double GaussPoints_vol, + const size_t elem_gid) const; + + void get_divergence( + DCArrayKokkos& GaussPoints_div, + const Mesh_t mesh, + const DCArrayKokkos& node_coords, + const DCArrayKokkos& node_vel, + const DCArrayKokkos& GaussPoints_vol) const; + + KOKKOS_FUNCTION + void decompose_vel_grad( + const ViewCArrayKokkos& D_tensor, + const ViewCArrayKokkos& W_tensor, + const ViewCArrayKokkos& vel_grad) const; + + // **** Functions defined in properties.cpp **** // + void update_state( + const Material_t& Materials, + const Mesh_t& mesh, + const DCArrayKokkos& node_coords, + const DCArrayKokkos& node_vel, + const DCArrayKokkos& MaterialPoints_den, + const DCArrayKokkos& MaterialPoints_pres, + const DCArrayKokkos& MaterialPoints_stress, + const DCArrayKokkos& MaterialPoints_sspd, + const DCArrayKokkos& MaterialPoints_sie, + const DCArrayKokkos& GaussPoints_vol, + const DCArrayKokkos& MaterialPoints_mass, + const DCArrayKokkos& MaterialPoints_statev, + const DCArrayKokkos& GaussPoints_eroded, + const DCArrayKokkos& MaterialToMeshMaps_elem, + const double dt, + const double rk_alpha, + const size_t num_material_elems, + const size_t mat_id) const; + + // **** Functions defined in time_integration.cpp **** // + // NOTE: Consider pulling up + void rk_init( + DCArrayKokkos& node_coords, + DCArrayKokkos& node_vel, + DCArrayKokkos& MaterialPoints_sie, + DCArrayKokkos& MaterialPoints_stress, + const size_t num_dims, + const size_t num_elems, + const size_t num_nodes, + const size_t num_mat_points) const; + + void get_timestep( + Mesh_t& mesh, + DCArrayKokkos& node_coords, + DCArrayKokkos& node_vel, + DCArrayKokkos& GaussPoints_vol, + DCArrayKokkos& MaterialPoints_sspd, + DCArrayKokkos& MaterialPoints_eroded, + DCArrayKokkos& MaterialToMeshMaps_elem, + size_t num_mat_elems, + double time_value, + const double graphics_time, + const double time_final, + const double dt_max, + const double dt_min, + const double dt_cfl, + double& dt, + const double fuzz) const; + + // **** Functions defined in user_mat.cpp **** // + // NOTE: Pull up into high level + KOKKOS_FUNCTION + void user_eos_model( + const DCArrayKokkos& MaterialPoints_pres, + const DCArrayKokkos& MaterialPoints_stress, + const size_t elem_gid, + const size_t mat_id, + const DCArrayKokkos& MaterialPoints_state_vars, + const DCArrayKokkos& MaterialPoints_sspd, + const double den, + const double sie); + + KOKKOS_FUNCTION + void user_strength_model( + const DCArrayKokkos& MaterialPoints_pres, + const DCArrayKokkos& MaterialPoints_stress, + const size_t elem_gid, + const size_t mat_id, + const DCArrayKokkos& MaterialPoints_state_vars, + const DCArrayKokkos& MaterialPoints_sspd, + const double den, + const double sie, + const ViewCArrayKokkos& vel_grad, + const ViewCArrayKokkos& elem_node_gids, + const DCArrayKokkos& node_coords, + const DCArrayKokkos& node_vel, + const double vol, + const double dt, + const double rk_alpha); +}; + +double sum_domain_internal_energy(const DCArrayKokkos& MaterialPoints_mass, + const DCArrayKokkos& MaterialPoints_sie, + const size_t num_mat_points); + +double sum_domain_kinetic_energy(const Mesh_t& mesh, + const DCArrayKokkos& node_vel, + const DCArrayKokkos& node_coords, + const DCArrayKokkos& node_mass); + +double sum_domain_material_mass(const DCArrayKokkos& MaterialPoints_mass, + const size_t num_mat_points); + +double sum_domain_node_mass(const Mesh_t& mesh, + const DCArrayKokkos& node_coords, + const DCArrayKokkos& node_mass); + +void set_corner_force_zero(const Mesh_t& mesh, + const DCArrayKokkos& corner_force); + +#endif // end HEADER_H diff --git a/single-node-refactor/src/Solvers/SGTM_solver_3D/src/boundary.cpp b/single-node-refactor/src/Solvers/SGTM_solver_3D/src/boundary.cpp new file mode 100644 index 000000000..c900c9321 --- /dev/null +++ b/single-node-refactor/src/Solvers/SGTM_solver_3D/src/boundary.cpp @@ -0,0 +1,98 @@ +/********************************************************************************************** +� 2020. Triad National Security, LLC. All rights reserved. +This program was produced under U.S. Government contract 89233218CNA000001 for Los Alamos +National Laboratory (LANL), which is operated by Triad National Security, LLC for the U.S. +Department of Energy/National Nuclear Security Administration. All rights in the program are +reserved by Triad National Security, LLC, and the U.S. Department of Energy/National Nuclear +Security Administration. The Government is granted for itself and others acting on its behalf a +nonexclusive, paid-up, irrevocable worldwide license in this material to reproduce, prepare +derivative works, distribute copies to the public, perform publicly and display publicly, and +to permit others to do so. +This program is open source under the BSD-3 License. +Redistribution and use in source and binary forms, with or without modification, are permitted +provided that the following conditions are met: +1. Redistributions of source code must retain the above copyright notice, this list of +conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, this list of +conditions and the following disclaimer in the documentation and/or other materials +provided with the distribution. +3. Neither the name of the copyright holder nor the names of its contributors may be used +to endorse or promote products derived from this software without specific prior +written permission. +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +**********************************************************************************************/ + +#include "sgh_solver_3D.h" +#include "mesh.h" +#include "boundary_conditions.h" + +///////////////////////////////////////////////////////////////////////////// +/// +/// \fn boundary_velocity +/// +/// \brief Evolves the boundary according to a give velocity +/// +/// \param The simulation mesh +/// \param Boundary contain arrays of information about BCs +/// \param A view into the nodal velocity array +/// \param The current simulation time +/// +///////////////////////////////////////////////////////////////////////////// +void SGH3D::boundary_velocity(const Mesh_t& mesh, + const BoundaryCondition_t& BoundaryConditions, + DCArrayKokkos& node_vel, + const double time_value) const +{ + // Loop over boundary sets + for (size_t bdy_set = 0; bdy_set < mesh.num_bdy_sets; bdy_set++) { + // Loop over boundary nodes in a boundary set + FOR_ALL(bdy_node_lid, 0, mesh.num_bdy_nodes_in_set.host(bdy_set), { + // get the global index for this node on the boundary + size_t bdy_node_gid = mesh.bdy_nodes_in_set(bdy_set, bdy_node_lid); + + // evaluate velocity on this boundary node + BoundaryConditions.BoundaryConditionFunctions(bdy_set).velocity( + mesh, + BoundaryConditions.BoundaryConditionEnums, + BoundaryConditions.bc_global_vars, + BoundaryConditions.bc_state_vars, + node_vel, + time_value, + 1, // rk_stage + bdy_node_gid, + bdy_set); + }); // end for bdy_node_lid + } // end for bdy_set + + return; +} // end boundary_velocity function + +///////////////////////////////////////////////////////////////////////////// +/// +/// \fn boundary_velocity +/// +/// \brief Evolves the boundary according to a give velocity +/// +/// \param The simulation mesh +/// \param An array of BoundaryCondition_t that contain information about BCs +/// \param A view into the nodal velocity array +/// \param The current simulation time +/// +///////////////////////////////////////////////////////////////////////////// +void SGH3D::boundary_contact(const Mesh_t& mesh, + const BoundaryCondition_t& BoundaryConditions, + DCArrayKokkos& node_vel, + const double time_value) const +{ + return; +} // end boundary_contact function diff --git a/single-node-refactor/src/Solvers/SGTM_solver_3D/src/energy_sgtm.cpp b/single-node-refactor/src/Solvers/SGTM_solver_3D/src/energy_sgtm.cpp new file mode 100644 index 000000000..6bdd3ae55 --- /dev/null +++ b/single-node-refactor/src/Solvers/SGTM_solver_3D/src/energy_sgtm.cpp @@ -0,0 +1,108 @@ +/********************************************************************************************** +� 2020. Triad National Security, LLC. All rights reserved. +This program was produced under U.S. Government contract 89233218CNA000001 for Los Alamos +National Laboratory (LANL), which is operated by Triad National Security, LLC for the U.S. +Department of Energy/National Nuclear Security Administration. All rights in the program are +reserved by Triad National Security, LLC, and the U.S. Department of Energy/National Nuclear +Security Administration. The Government is granted for itself and others acting on its behalf a +nonexclusive, paid-up, irrevocable worldwide license in this material to reproduce, prepare +derivative works, distribute copies to the public, perform publicly and display publicly, and +to permit others to do so. +This program is open source under the BSD-3 License. +Redistribution and use in source and binary forms, with or without modification, are permitted +provided that the following conditions are met: +1. Redistributions of source code must retain the above copyright notice, this list of +conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, this list of +conditions and the following disclaimer in the documentation and/or other materials +provided with the distribution. +3. Neither the name of the copyright holder nor the names of its contributors may be used +to endorse or promote products derived from this software without specific prior +written permission. +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +**********************************************************************************************/ + +#include "sgh_solver_3D.h" +#include "mesh.h" +#include "state.h" + +///////////////////////////////////////////////////////////////////////////// +/// +/// \fn update_energy +/// +/// \brief Evolves the specific internal energy +/// +/// \param The current Runge Kutta alpha value +/// \param Time step size +/// \param The simulation mesh +/// \param A view into the nodal velocity data +/// \param A view into the nodal position data +/// \param A view into the element specific internal energy +/// \param A view into the element mass +/// \param A view into the corner force data +/// +///////////////////////////////////////////////////////////////////////////// +void SGH3D::update_energy(const double rk_alpha, + const double dt, + const Mesh_t& mesh, + const DCArrayKokkos& node_vel, + const DCArrayKokkos& node_coords, + const DCArrayKokkos& MaterialPoints_sie, + const DCArrayKokkos& MaterialPoints_mass, + const DCArrayKokkos& MaterialCorners_force, + const corners_in_mat_t corners_in_mat_elem, + const DCArrayKokkos& MaterialToMeshMaps_elem, + const size_t num_mat_elems + ) const +{ + // loop over all the elements in the mesh + FOR_ALL(mat_elem_lid, 0, num_mat_elems, { + // get elem gid + size_t elem_gid = MaterialToMeshMaps_elem(mat_elem_lid); + + // the material point index = the material elem index for a 1-point element + size_t mat_point_lid = mat_elem_lid; + + double MaterialPoints_power = 0.0; + + // --- tally the contribution from each corner to the element --- + + // Loop over the nodes in the element + for (size_t node_lid = 0; node_lid < mesh.num_nodes_in_elem; node_lid++) { + // corner lid and node lid + size_t corner_lid = node_lid; + + // Get node global id for the local node id + size_t node_gid = mesh.nodes_in_elem(elem_gid, node_lid); + + // Get the corner global id for the local corner id + // size_t corner_gid = mesh.corners_in_elem(elem_gid, corner_lid); + + // Get the material corner lid + size_t mat_corner_lid = corners_in_mat_elem(mat_elem_lid, corner_lid); + + // calculate the Power=F dot V for this corner + for (size_t dim = 0; dim < mesh.num_dims; dim++) { + double half_vel = (node_vel(1, node_gid, dim) + node_vel(0, node_gid, dim)) * 0.5; + MaterialPoints_power += MaterialCorners_force(mat_corner_lid, dim) * half_vel; + + } // end for dim + } // end for node_lid + + // update the specific energy + MaterialPoints_sie(1, mat_point_lid) = MaterialPoints_sie(0, mat_point_lid) - + rk_alpha * dt / MaterialPoints_mass(mat_point_lid) * MaterialPoints_power; + }); // end parallel loop over the elements + + return; +} // end subroutine diff --git a/single-node-refactor/src/Solvers/SGTM_solver_3D/src/force_sgtm.cpp b/single-node-refactor/src/Solvers/SGTM_solver_3D/src/force_sgtm.cpp new file mode 100644 index 000000000..7de569d13 --- /dev/null +++ b/single-node-refactor/src/Solvers/SGTM_solver_3D/src/force_sgtm.cpp @@ -0,0 +1,441 @@ +/********************************************************************************************** +� 2020. Triad National Security, LLC. All rights reserved. +This program was produced under U.S. Government contract 89233218CNA000001 for Los Alamos +National Laboratory (LANL), which is operated by Triad National Security, LLC for the U.S. +Department of Energy/National Nuclear Security Administration. All rights in the program are +reserved by Triad National Security, LLC, and the U.S. Department of Energy/National Nuclear +Security Administration. The Government is granted for itself and others acting on its behalf a +nonexclusive, paid-up, irrevocable worldwide license in this material to reproduce, prepare +derivative works, distribute copies to the public, perform publicly and display publicly, and +to permit others to do so. +This program is open source under the BSD-3 License. +Redistribution and use in source and binary forms, with or without modification, are permitted +provided that the following conditions are met: +1. Redistributions of source code must retain the above copyright notice, this list of +conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, this list of +conditions and the following disclaimer in the documentation and/or other materials +provided with the distribution. +3. Neither the name of the copyright holder nor the names of its contributors may be used +to endorse or promote products derived from this software without specific prior +written permission. +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +**********************************************************************************************/ + +#include "sgh_solver_3D.h" +#include "material.h" +#include "mesh.h" +#include "state.h" +#include "geometry_new.h" + +///////////////////////////////////////////////////////////////////////////// +/// +/// \fn get_force +/// +/// \brief This function calculates the corner forces and the evolves stress +/// +/// \param Material that contains material specific data +/// \param The simulation mesh +/// \param A view into the nodal position array +/// \param A view into the nodal velocity array +/// \param A view into the element density array +/// \param A view into the element specific internal energy array +/// \param A view into the element pressure array +/// \param A view into the element stress array +/// \param A view into the element sound speed array +/// \param A view into the element volume array +/// \param A view into the element divergence of velocity array +/// \param A view into the element material identifier array +/// \param fuzz +/// \param small +/// \param Element state variable array +/// \param Time step size +/// \param The current Runge Kutta integration alpha value +/// +///////////////////////////////////////////////////////////////////////////// +void SGH3D::get_force(const Material_t& Materials, + const Mesh_t& mesh, + const DCArrayKokkos& GaussPoints_vol, + const DCArrayKokkos& GaussPoints_div, + const DCArrayKokkos& MaterialPoints_eroded, + const DCArrayKokkos& corner_force, + const DCArrayKokkos& node_coords, + const DCArrayKokkos& node_vel, + const DCArrayKokkos& MaterialPoints_den, + const DCArrayKokkos& MaterialPoints_sie, + const DCArrayKokkos& MaterialPoints_pres, + const DCArrayKokkos& MaterialPoints_stress, + const DCArrayKokkos& MaterialPoints_sspd, + const DCArrayKokkos& MaterialPoints_statev, + const DCArrayKokkos& MaterialCorners_force, + const DCArrayKokkos& MaterialPoints_volfrac, + const corners_in_mat_t corners_in_mat_elem, + const DCArrayKokkos& MaterialToMeshMaps_elem, + const size_t num_mat_elems, + const size_t mat_id, + const double fuzz, + const double small, + const double dt, + const double rk_alpha) const +{ + const size_t num_dims = 3; + const size_t num_nodes_in_elem = 8; + + + + // --- calculate the forces acting on the nodes from the element --- + FOR_ALL(mat_elem_lid, 0, num_mat_elems, { + + // get elem gid + size_t elem_gid = MaterialToMeshMaps_elem(mat_elem_lid); + + // the material point index = the material elem index for a 1-point element + size_t mat_point_lid = mat_elem_lid; + + + // total Cauchy stress + double tau_array[9]; + + // corner area normals + double area_normal_array[24]; + + // estimate of shock direction + double shock_dir_array[3]; + + // the sums in the Riemann solver + double sum_array[4]; + + // corner shock impedance x |corner area normal dot shock_dir| + double muc_array[8]; + + // Riemann velocity + double vel_star_array[3]; + + // velocity gradient + double vel_grad_array[9]; + + // --- Create views of arrays to aid the force calculation --- + + ViewCArrayKokkos tau(tau_array, num_dims, num_dims); + ViewCArrayKokkos area_normal(area_normal_array, num_nodes_in_elem, num_dims); + ViewCArrayKokkos shock_dir(shock_dir_array, num_dims); + ViewCArrayKokkos sum(sum_array, 4); + ViewCArrayKokkos muc(muc_array, num_nodes_in_elem); + ViewCArrayKokkos vel_star(vel_star_array, num_dims); + ViewCArrayKokkos vel_grad(vel_grad_array, num_dims, num_dims); + + // element volume + double vol = GaussPoints_vol(elem_gid); + + + // create a view of the stress_matrix + ViewCArrayKokkos stress(&MaterialPoints_stress(1, mat_point_lid, 0, 0), 3, 3); + + // cut out the node_gids for this element + ViewCArrayKokkos elem_node_gids(&mesh.nodes_in_elem(elem_gid, 0), 8); + + // get the B matrix which are the OUTWARD corner area normals + geometry::get_bmatrix(area_normal, + elem_gid, + node_coords, + elem_node_gids); + + // --- Calculate the velocity gradient --- + SGH3D::get_velgrad(vel_grad, + elem_node_gids, + node_vel, + area_normal, + vol, + elem_gid); + + // the -1 is for the inward surface area normal, + for (size_t node_lid = 0; node_lid < num_nodes_in_elem; node_lid++) { + for (size_t dim = 0; dim < num_dims; dim++) { + area_normal(node_lid, dim) = (-1.0) * area_normal(node_lid, dim); + } // end for + } // end for + + double div = GaussPoints_div(elem_gid); + + // vel = [u,v,w] + // [du/dx, du/dy, du/dz] + // vel_grad = [dv/dx, dv/dy, dv/dz] + // [dw/dx, dw/dy, dw/dz] + double curl[3]; + curl[0] = vel_grad(2, 1) - vel_grad(1, 2); // dw/dy - dv/dz + curl[1] = vel_grad(0, 2) - vel_grad(2, 0); // du/dz - dw/dx + curl[2] = vel_grad(1, 0) - vel_grad(0, 1); // dv/dx - du/dy + + double mag_curl = sqrt(curl[0] * curl[0] + curl[1] * curl[1] + curl[2] * curl[2]); + + // --- Calculate the Cauchy stress --- + for (size_t i = 0; i < 3; i++) { + for (size_t j = 0; j < 3; j++) { + tau(i, j) = stress(i, j); + // artificial viscosity can be added here to tau + } // end for + } // end for + + // add the pressure if a decoupled model is used + if (Materials.MaterialEnums(mat_id).EOSType == model::decoupledEOSType) { + for (int i = 0; i < num_dims; i++) { + tau(i, i) -= MaterialPoints_pres(mat_point_lid); + } // end for + } + + // ---- Multi-directional Approximate Riemann solver (MARS) ---- + // find the average velocity of the elem, it is an + // estimate of the Riemann velocity + + // initialize to Riemann velocity to zero + for (size_t dim = 0; dim < num_dims; dim++) { + vel_star(dim) = 0.0; + } + + // loop over nodes and calculate an average velocity, which is + // an estimate of Riemann velocity + for (size_t node_lid = 0; node_lid < num_nodes_in_elem; node_lid++) { + // Get node global index and create view of nodal velocity + int node_gid = mesh.nodes_in_elem(elem_gid, node_lid); + + ViewCArrayKokkos vel(&node_vel(1, node_gid, 0), num_dims); + + vel_star(0) += 0.125 * vel(0); + vel_star(1) += 0.125 * vel(1); + vel_star(2) += 0.125 * vel(2); + } // end for loop over nodes + + // find shock direction and shock impedance associated with each node + + // initialize sum term in MARS to zero + for (int i = 0; i < 4; i++) { + sum(i) = 0.0; + } + + double mag; // magnitude of the area normal + double mag_vel; // magnitude of velocity + + // loop over the nodes of the elem + for (size_t node_lid = 0; node_lid < num_nodes_in_elem; node_lid++) { + // Get global node id + size_t node_gid = mesh.nodes_in_elem(elem_gid, node_lid); + + // Create view of nodal velocity + ViewCArrayKokkos vel(&node_vel(1, node_gid, 0), num_dims); + + // Get an estimate of the shock direction. + mag_vel = sqrt( (vel(0) - vel_star(0) ) * (vel(0) - vel_star(0) ) + + (vel(1) - vel_star(1) ) * (vel(1) - vel_star(1) ) + + (vel(2) - vel_star(2) ) * (vel(2) - vel_star(2) ) ); + + if (mag_vel > small) { + // estimate of the shock direction, a unit normal + for (int dim = 0; dim < num_dims; dim++) { + shock_dir(dim) = (vel(dim) - vel_star(dim)) / mag_vel; + } + } + else{ + // if there is no velocity change, then use the surface area + // normal as the shock direction + mag = sqrt(area_normal(node_lid, 0) * area_normal(node_lid, 0) + + area_normal(node_lid, 1) * area_normal(node_lid, 1) + + area_normal(node_lid, 2) * area_normal(node_lid, 2) ); + + // estimate of the shock direction + for (int dim = 0; dim < num_dims; dim++) { + shock_dir(dim) = area_normal(node_lid, dim) / mag; + } + } // end if mag_vel + + // cell divergence indicates compression or expansions + if (div < 0) { // element in compression + muc(node_lid) = MaterialPoints_den(mat_point_lid) * + (Materials.MaterialFunctions(mat_id).q1 * MaterialPoints_sspd(mat_point_lid) + + Materials.MaterialFunctions(mat_id).q2 * mag_vel); + } + else{ // element in expansion + muc(node_lid) = MaterialPoints_den(mat_point_lid) * + (Materials.MaterialFunctions(mat_id).q1ex * MaterialPoints_sspd(mat_point_lid) + + Materials.MaterialFunctions(mat_id).q2ex * mag_vel); + } // end if on divergence sign + + size_t use_shock_dir = 0; + double mu_term; + + // Coding to use shock direction + if (use_shock_dir == 1) { + // this is denominator of the Riemann solver and the multiplier + // on velocity in the numerator. It filters on the shock + // direction + mu_term = muc(node_lid) * + fabs(shock_dir(0) * area_normal(node_lid, 0) + + shock_dir(1) * area_normal(node_lid, 1) + + shock_dir(2) * area_normal(node_lid, 2) ); + } + else{ + // Using a full tensoral Riemann jump relation + mu_term = muc(node_lid) + * sqrt(area_normal(node_lid, 0) * area_normal(node_lid, 0) + + area_normal(node_lid, 1) * area_normal(node_lid, 1) + + area_normal(node_lid, 2) * area_normal(node_lid, 2) ); + } + + sum(0) += mu_term * vel(0); + sum(1) += mu_term * vel(1); + sum(2) += mu_term * vel(2); + sum(3) += mu_term; + + muc(node_lid) = mu_term; // the impedance time surface area is stored here + } // end for node_lid loop over nodes of the elem + + // The Riemann velocity, called vel_star + if (sum(3) > fuzz) { + for (size_t i = 0; i < num_dims; i++) { + vel_star(i) = sum(i) / sum(3); + } + } + else{ + for (int i = 0; i < num_dims; i++) { + vel_star(i) = 0.0; + } + } // end if + + // ---- Calculate the shock detector for the Riemann-solver ---- + // + // The dissipation from the Riemann problem is limited by phi + // phi = (1. - max( 0., min( 1. , r_face ) ))^n + // where + // r_face = (C* div(u_+)/div(u_z)) + // The plus denotes the cell center divergence of a neighbor. + // The solution will be first order when phi=1 and have + // zero dissipation when phi=0. + // phi = 0 highest-order solution + // phi = 1 first order solution + // + + double phi = 0.0; // the shock detector + double r_face = 1.0; // the ratio on the face + double r_min = 1.0; // the min ratio for the cell + double r_coef = 0.9; // 0.9; the coefficient on the ratio + // (1=minmod and 2=superbee) + double n_coef = 1.0; // the power on the limiting coefficient + // (1=nominal, and n_coeff > 1 oscillatory) + + // loop over the neighboring cells + for (size_t elem_lid = 0; elem_lid < mesh.num_elems_in_elem(elem_gid); elem_lid++) { + // Get global index for neighboring cell + size_t neighbor_gid = mesh.elems_in_elem(elem_gid, elem_lid); + + // calculate the velocity divergence in neighbor + double div_neighbor = GaussPoints_div(neighbor_gid); + + r_face = r_coef * (div_neighbor + small) / (div + small); + + // store the smallest face ratio + r_min = fmin(r_face, r_min); + } // end for elem_lid + + // calculate standard shock detector + phi = 1.0 - fmax(0.0, r_min); + phi = pow(phi, n_coef); + + // Mach number shock detector + double omega = 20.0; // 20.0; // weighting factor on Mach number + double third = 1.0 / 3.0; + double c_length = pow(vol, third); // characteristic length + double alpha = fmin(1.0, omega * (c_length * fabs(div)) / (MaterialPoints_sspd(mat_point_lid) + fuzz) ); + + // use Mach based detector with standard shock detector + + // turn off dissipation in expansion + // alpha = fmax(-fabs(div0)/div0 * alpha, 0.0); // this should be if(div0<0) alpha=alpha else alpha=0 + + phi = alpha * phi; + + // curl limiter on Q + double phi_curl = fmin(1.0, 1.0 * fabs(div) / (mag_curl + fuzz)); // disable Q when vorticity is high + // phi = phi_curl*phi; + + // ---- Calculate the Riemann force on each node ---- + + // loop over the each node in the elem + for (size_t node_lid = 0; node_lid < num_nodes_in_elem; node_lid++) { + + // the local corner id is the local node id + size_t corner_lid = node_lid; + + // Get corner gid + size_t corner_gid = mesh.corners_in_elem(elem_gid, corner_lid); + + // Get node gid + size_t node_gid = mesh.nodes_in_elem(elem_gid, node_lid); + + // Get the material corner lid + size_t mat_corner_lid = corners_in_mat_elem(mat_elem_lid, corner_lid); + //printf("corner difference = %zu \n", mat_corner_lid-corner_gid); + + // loop over dimensions and calc corner forces + if (MaterialPoints_eroded(mat_point_lid) == true) { // material(mat_id).blank_mat_id) + for (int dim = 0; dim < num_dims; dim++) { + corner_force(corner_gid, dim) = 0.0; + MaterialCorners_force(mat_corner_lid, dim) = 0.0; + } + } + + else{ + for (int dim = 0; dim < num_dims; dim++) { + + double force_component = + area_normal(node_lid, 0) * tau(0, dim) + + area_normal(node_lid, 1) * tau(1, dim) + + area_normal(node_lid, 2) * tau(2, dim) + + phi * muc(node_lid) * (vel_star(dim) - node_vel(1, node_gid, dim)); + + // save the material corner force + MaterialCorners_force(mat_corner_lid, dim) = force_component; + + // tally all material forces to the corner + corner_force(corner_gid, dim) += force_component*MaterialPoints_volfrac(mat_point_lid); + } // end loop over dimension + } // end if + + } // end for loop over nodes in elem + + // --- Update Stress --- + // calculate the new stress at the next rk level, if it is a increment_based model + // increment_based strength model + if (Materials.MaterialEnums(mat_id).StrengthType == model::incrementBased) { + // cut out the node_gids for this element + ViewCArrayKokkos elem_node_gids(&mesh.nodes_in_elem(elem_gid, 0), 8); + + // --- call strength model --- + Materials.MaterialFunctions(mat_id).calc_stress(MaterialPoints_pres, + MaterialPoints_stress, + mat_point_lid, + mat_id, + MaterialPoints_statev, + MaterialPoints_sspd, + MaterialPoints_den(mat_point_lid), + MaterialPoints_sie(1,mat_point_lid), + vel_grad, + elem_node_gids, + node_coords, + node_vel, + GaussPoints_vol(elem_gid), + dt, + rk_alpha); + } // end logical on increment_based strength model + }); // end parallel for loop over elements + + return; +} // end of routine diff --git a/single-node-refactor/src/Solvers/SGTM_solver_3D/src/momentum.cpp b/single-node-refactor/src/Solvers/SGTM_solver_3D/src/momentum.cpp new file mode 100644 index 000000000..23723aeec --- /dev/null +++ b/single-node-refactor/src/Solvers/SGTM_solver_3D/src/momentum.cpp @@ -0,0 +1,305 @@ +/********************************************************************************************** +� 2020. Triad National Security, LLC. All rights reserved. +This program was produced under U.S. Government contract 89233218CNA000001 for Los Alamos +National Laboratory (LANL), which is operated by Triad National Security, LLC for the U.S. +Department of Energy/National Nuclear Security Administration. All rights in the program are +reserved by Triad National Security, LLC, and the U.S. Department of Energy/National Nuclear +Security Administration. The Government is granted for itself and others acting on its behalf a +nonexclusive, paid-up, irrevocable worldwide license in this material to reproduce, prepare +derivative works, distribute copies to the public, perform publicly and display publicly, and +to permit others to do so. +This program is open source under the BSD-3 License. +Redistribution and use in source and binary forms, with or without modification, are permitted +provided that the following conditions are met: +1. Redistributions of source code must retain the above copyright notice, this list of +conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, this list of +conditions and the following disclaimer in the documentation and/or other materials +provided with the distribution. +3. Neither the name of the copyright holder nor the names of its contributors may be used +to endorse or promote products derived from this software without specific prior +written permission. +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +**********************************************************************************************/ + +#include "sgh_solver_3D.h" +#include "mesh.h" +#include "geometry_new.h" + +///////////////////////////////////////////////////////////////////////////// +/// +/// \fn update_velocity +/// +/// \brief This function evolves the velocity at the nodes of the mesh +/// +/// \param Runge Kutta time integration alpha +/// \param Time step size +/// \param View of the nodal velocity array +/// \param View of the nodal mass array +/// \param View of the corner forces +/// +///////////////////////////////////////////////////////////////////////////// +void SGH3D::update_velocity(double rk_alpha, + double dt, + const Mesh_t& mesh, + DCArrayKokkos& node_vel, + const DCArrayKokkos& node_mass, + const DCArrayKokkos& corner_force) const +{ + const size_t num_dims = mesh.num_dims; + + // walk over the nodes to update the velocity + FOR_ALL(node_gid, 0, mesh.num_nodes, { + double node_force[3]; + for (size_t dim = 0; dim < num_dims; dim++) { + node_force[dim] = 0.0; + } // end for dim + + // loop over all corners around the node and calculate the nodal force + for (size_t corner_lid = 0; corner_lid < mesh.num_corners_in_node(node_gid); corner_lid++) { + // Get corner gid + size_t corner_gid = mesh.corners_in_node(node_gid, corner_lid); + + // loop over dimension + for (size_t dim = 0; dim < num_dims; dim++) { + node_force[dim] += corner_force(corner_gid, dim); + } // end for dim + } // end for corner_lid + + // update the velocity + for (int dim = 0; dim < num_dims; dim++) { + node_vel(1, node_gid, dim) = node_vel(0, node_gid, dim) + + rk_alpha * dt * node_force[dim] / node_mass(node_gid); + } // end for dim + }); // end for parallel for over nodes + + return; +} // end subroutine update_velocity + +///////////////////////////////////////////////////////////////////////////// +/// +/// \fn get_velgrad +/// +/// \brief This function calculates the velocity gradient +/// +/// \param Velocity gradient +/// \param Global ids of the nodes in this element +/// \param View of the nodal velocity data +/// \param The finite element B matrix +/// \param The volume of the particular element +/// \param The global id of this particular element +/// +///////////////////////////////////////////////////////////////////////////// +KOKKOS_FUNCTION +void SGH3D::get_velgrad(ViewCArrayKokkos& vel_grad, + const ViewCArrayKokkos& elem_node_gids, + const DCArrayKokkos& node_vel, + const ViewCArrayKokkos& b_matrix, + const double elem_vol, + const size_t elem_gid) const +{ + const size_t num_nodes_in_elem = 8; + + double u_array[num_nodes_in_elem]; + double v_array[num_nodes_in_elem]; + double w_array[num_nodes_in_elem]; + ViewCArrayKokkos u(u_array, num_nodes_in_elem); // x-direction velocity component + ViewCArrayKokkos v(v_array, num_nodes_in_elem); // y-direction velocity component + ViewCArrayKokkos w(w_array, num_nodes_in_elem); // z-direction velocity component + + // get the vertex velocities for the cell + for (size_t node_lid = 0; node_lid < num_nodes_in_elem; node_lid++) { + // Get node gid + size_t node_gid = elem_node_gids(node_lid); + + u(node_lid) = node_vel(1, node_gid, 0); + v(node_lid) = node_vel(1, node_gid, 1); + w(node_lid) = node_vel(1, node_gid, 2); + } // end for + + // --- calculate the velocity gradient terms --- + double inverse_vol = 1.0 / elem_vol; + + // x-dir + vel_grad(0, 0) = (u(0) * b_matrix(0, 0) + u(1) * b_matrix(1, 0) + + u(2) * b_matrix(2, 0) + u(3) * b_matrix(3, 0) + + u(4) * b_matrix(4, 0) + u(5) * b_matrix(5, 0) + + u(6) * b_matrix(6, 0) + u(7) * b_matrix(7, 0)) * inverse_vol; + + vel_grad(0, 1) = (u(0) * b_matrix(0, 1) + u(1) * b_matrix(1, 1) + + u(2) * b_matrix(2, 1) + u(3) * b_matrix(3, 1) + + u(4) * b_matrix(4, 1) + u(5) * b_matrix(5, 1) + + u(6) * b_matrix(6, 1) + u(7) * b_matrix(7, 1)) * inverse_vol; + + vel_grad(0, 2) = (u(0) * b_matrix(0, 2) + u(1) * b_matrix(1, 2) + + u(2) * b_matrix(2, 2) + u(3) * b_matrix(3, 2) + + u(4) * b_matrix(4, 2) + u(5) * b_matrix(5, 2) + + u(6) * b_matrix(6, 2) + u(7) * b_matrix(7, 2)) * inverse_vol; + + // y-dir + vel_grad(1, 0) = (v(0) * b_matrix(0, 0) + v(1) * b_matrix(1, 0) + + v(2) * b_matrix(2, 0) + v(3) * b_matrix(3, 0) + + v(4) * b_matrix(4, 0) + v(5) * b_matrix(5, 0) + + v(6) * b_matrix(6, 0) + v(7) * b_matrix(7, 0)) * inverse_vol; + + vel_grad(1, 1) = (v(0) * b_matrix(0, 1) + v(1) * b_matrix(1, 1) + + v(2) * b_matrix(2, 1) + v(3) * b_matrix(3, 1) + + v(4) * b_matrix(4, 1) + v(5) * b_matrix(5, 1) + + v(6) * b_matrix(6, 1) + v(7) * b_matrix(7, 1)) * inverse_vol; + vel_grad(1, 2) = (v(0) * b_matrix(0, 2) + v(1) * b_matrix(1, 2) + + v(2) * b_matrix(2, 2) + v(3) * b_matrix(3, 2) + + v(4) * b_matrix(4, 2) + v(5) * b_matrix(5, 2) + + v(6) * b_matrix(6, 2) + v(7) * b_matrix(7, 2)) * inverse_vol; + + // z-dir + vel_grad(2, 0) = (w(0) * b_matrix(0, 0) + w(1) * b_matrix(1, 0) + + w(2) * b_matrix(2, 0) + w(3) * b_matrix(3, 0) + + w(4) * b_matrix(4, 0) + w(5) * b_matrix(5, 0) + + w(6) * b_matrix(6, 0) + w(7) * b_matrix(7, 0)) * inverse_vol; + + vel_grad(2, 1) = (w(0) * b_matrix(0, 1) + w(1) * b_matrix(1, 1) + + w(2) * b_matrix(2, 1) + w(3) * b_matrix(3, 1) + + w(4) * b_matrix(4, 1) + w(5) * b_matrix(5, 1) + + w(6) * b_matrix(6, 1) + w(7) * b_matrix(7, 1)) * inverse_vol; + + vel_grad(2, 2) = (w(0) * b_matrix(0, 2) + w(1) * b_matrix(1, 2) + + w(2) * b_matrix(2, 2) + w(3) * b_matrix(3, 2) + + w(4) * b_matrix(4, 2) + w(5) * b_matrix(5, 2) + + w(6) * b_matrix(6, 2) + w(7) * b_matrix(7, 2)) * inverse_vol; + + return; +} // end function + + +///////////////////////////////////////////////////////////////////////////// +/// +/// \fn get_divergence +/// +/// \brief This function calculates the divergence of velocity for all elements +/// +/// \param Divergence of velocity for all elements +/// \param Simulation mesh (POSSIBLY REMOVE) +/// \param View of the nodal position data +/// \param View of the nodal velocity data +/// \param View of the volumes of each element +/// +///////////////////////////////////////////////////////////////////////////// +void SGH3D::get_divergence(DCArrayKokkos& elem_div, + const Mesh_t mesh, + const DCArrayKokkos& node_coords, + const DCArrayKokkos& node_vel, + const DCArrayKokkos& elem_vol) const +{ + // --- calculate the forces acting on the nodes from the element --- + FOR_ALL(elem_gid, 0, mesh.num_elems, { + const size_t num_nodes_in_elem = 8; + const size_t num_dims = 3; + + double u_array[num_nodes_in_elem]; + double v_array[num_nodes_in_elem]; + double w_array[num_nodes_in_elem]; + ViewCArrayKokkos u(u_array, num_nodes_in_elem); // x-dir vel component + ViewCArrayKokkos v(v_array, num_nodes_in_elem); // y-dir vel component + ViewCArrayKokkos w(w_array, num_nodes_in_elem); // z-dir vel component + + // cut out the node_gids for this element + ViewCArrayKokkos elem_node_gids(&mesh.nodes_in_elem(elem_gid, 0), 8); + + // The b_matrix are the outward corner area normals + double b_matrix_array[24]; + ViewCArrayKokkos b_matrix(b_matrix_array, num_nodes_in_elem, num_dims); + geometry::get_bmatrix(b_matrix, elem_gid, node_coords, elem_node_gids); + + // get the vertex velocities for the elem + for (size_t node_lid = 0; node_lid < num_nodes_in_elem; node_lid++) { + // Get node gid + size_t node_gid = elem_node_gids(node_lid); + + u(node_lid) = node_vel(1, node_gid, 0); + v(node_lid) = node_vel(1, node_gid, 1); + w(node_lid) = node_vel(1, node_gid, 2); + } // end for + + // --- calculate the velocity divergence terms --- + double inverse_vol = 1.0 / elem_vol(elem_gid); + + elem_div(elem_gid) = 0.0; + + // x-dir + elem_div(elem_gid) += (u(0) * b_matrix(0, 0) + u(1) * b_matrix(1, 0) + + u(2) * b_matrix(2, 0) + u(3) * b_matrix(3, 0) + + u(4) * b_matrix(4, 0) + u(5) * b_matrix(5, 0) + + u(6) * b_matrix(6, 0) + u(7) * b_matrix(7, 0)) * inverse_vol; + + // y-dir + elem_div(elem_gid) += (v(0) * b_matrix(0, 1) + v(1) * b_matrix(1, 1) + + v(2) * b_matrix(2, 1) + v(3) * b_matrix(3, 1) + + v(4) * b_matrix(4, 1) + v(5) * b_matrix(5, 1) + + v(6) * b_matrix(6, 1) + v(7) * b_matrix(7, 1)) * inverse_vol; + + // z-dir + elem_div(elem_gid) += (w(0) * b_matrix(0, 2) + w(1) * b_matrix(1, 2) + + w(2) * b_matrix(2, 2) + w(3) * b_matrix(3, 2) + + w(4) * b_matrix(4, 2) + w(5) * b_matrix(5, 2) + + w(6) * b_matrix(6, 2) + w(7) * b_matrix(7, 2)) * inverse_vol; + }); // end parallel for over elem_gid + + return; +} // end subroutine + + +///////////////////////////////////////////////////////////////////////////// +/// +/// \fn decompose_vel_grad +/// +/// \brief Decomposes the velocity gradient into symmetric and antisymmetric tensors +/// +/// L = D*W, where L = vel_grad, D = sym(L), W = antisym(L) +/// can span multiple lines if needed> +/// +/// \param Symmetric decomposition of velocity gradient +/// \param Antisymmetric decomposition of velocity gradient +/// \param Gradient of velocity +/// \param Global ids of the nodes associated with this element +/// \param Global id of a specific element +/// \param View of the nodal coordinate data +/// \param View of the nodal velocity data +/// \param Volume of the element +/// +///////////////////////////////////////////////////////////////////////////// +KOKKOS_FUNCTION +void SGH3D::decompose_vel_grad(const ViewCArrayKokkos& D_tensor, + const ViewCArrayKokkos& W_tensor, + const ViewCArrayKokkos& vel_grad) const +{ + // --- Calculate the velocity gradient --- + + const size_t num_dims = 3; + + // initialize to zero + for (size_t i = 0; i < num_dims; i++) { + for (size_t j = 0; j < num_dims; j++) { + D_tensor(i, j) = 0.0; + W_tensor(i, j) = 0.0; + } + } // end for + + for (size_t i = 0; i < num_dims; i++) { + for (size_t j = 0; j < num_dims; j++) { + D_tensor(i, j) = 0.5 * (vel_grad(i, j) + vel_grad(j, i)); + W_tensor(i, j) = 0.5 * (vel_grad(i, j) - vel_grad(j, i)); + } + } // end for + + return; +} // end function to calculate D and W diff --git a/single-node-refactor/src/Solvers/SGTM_solver_3D/src/position.cpp b/single-node-refactor/src/Solvers/SGTM_solver_3D/src/position.cpp new file mode 100644 index 000000000..c2411b929 --- /dev/null +++ b/single-node-refactor/src/Solvers/SGTM_solver_3D/src/position.cpp @@ -0,0 +1,64 @@ +/********************************************************************************************** + 2020. Triad National Security, LLC. All rights reserved. +This program was produced under U.S. Government contract 89233218CNA000001 for Los Alamos +National Laboratory (LANL), which is operated by Triad National Security, LLC for the U.S. +Department of Energy/National Nuclear Security Administration. All rights in the program are +reserved by Triad National Security, LLC, and the U.S. Department of Energy/National Nuclear +Security Administration. The Government is granted for itself and others acting on its behalf a +nonexclusive, paid-up, irrevocable worldwide license in this material to reproduce, prepare +derivative works, distribute copies to the public, perform publicly and display publicly, and +to permit others to do so. +This program is open source under the BSD-3 License. +Redistribution and use in source and binary forms, with or without modification, are permitted +provided that the following conditions are met: +1. Redistributions of source code must retain the above copyright notice, this list of +conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, this list of +conditions and the following disclaimer in the documentation and/or other materials +provided with the distribution. +3. Neither the name of the copyright holder nor the names of its contributors may be used +to endorse or promote products derived from this software without specific prior +written permission. +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +**********************************************************************************************/ +#include "sgh_solver_3D.h" + +///////////////////////////////////////////////////////////////////////////// +/// +/// \fn update_position +/// +/// \brief Updates the nodal positions based on the nodal velocity +/// +/// \param Runge Kutta time integration alpha value +/// \param Time step size +/// \param Number of dimensions in the mesh (REMOVE) +/// \param Number of nodes in the mesh +/// \param View of nodal position data +/// \param View of nodal velocity data +/// +///////////////////////////////////////////////////////////////////////////// +void SGH3D::update_position(double rk_alpha, + double dt, + const size_t num_dims, + const size_t num_nodes, + DCArrayKokkos& node_coords, + const DCArrayKokkos& node_vel) const +{ + // loop over all the nodes in the mesh + FOR_ALL(node_gid, 0, num_nodes, { + for (int dim = 0; dim < num_dims; dim++) { + double half_vel = (node_vel(1, node_gid, dim) + node_vel(0, node_gid, dim)) * 0.5; + node_coords(1, node_gid, dim) = node_coords(0, node_gid, dim) + rk_alpha * dt * half_vel; + } + }); // end parallel for over nodes +} // end subroutine \ No newline at end of file diff --git a/single-node-refactor/src/Solvers/SGTM_solver_3D/src/properties.cpp b/single-node-refactor/src/Solvers/SGTM_solver_3D/src/properties.cpp new file mode 100644 index 000000000..31f89b428 --- /dev/null +++ b/single-node-refactor/src/Solvers/SGTM_solver_3D/src/properties.cpp @@ -0,0 +1,254 @@ +/********************************************************************************************** +� 2020. Triad National Security, LLC. All rights reserved. +This program was produced under U.S. Government contract 89233218CNA000001 for Los Alamos +National Laboratory (LANL), which is operated by Triad National Security, LLC for the U.S. +Department of Energy/National Nuclear Security Administration. All rights in the program are +reserved by Triad National Security, LLC, and the U.S. Department of Energy/National Nuclear +Security Administration. The Government is granted for itself and others acting on its behalf a +nonexclusive, paid-up, irrevocable worldwide license in this material to reproduce, prepare +derivative works, distribute copies to the public, perform publicly and display publicly, and +to permit others to do so. +This program is open source under the BSD-3 License. +Redistribution and use in source and binary forms, with or without modification, are permitted +provided that the following conditions are met: +1. Redistributions of source code must retain the above copyright notice, this list of +conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, this list of +conditions and the following disclaimer in the documentation and/or other materials +provided with the distribution. +3. Neither the name of the copyright holder nor the names of its contributors may be used +to endorse or promote products derived from this software without specific prior +written permission. +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +**********************************************************************************************/ + +#include "sgh_solver_3D.h" +#include "material.h" +#include "mesh.h" +#include "geometry_new.h" + +///////////////////////////////////////////////////////////////////////////// +/// +/// \fn update_state +/// +/// \brief This calls the models to update state +/// +/// \param Material that contains material specific data +/// \param The simulation mesh +/// \param A view into the nodal position array +/// \param A view into the nodal velocity array +/// \param A view into the element density array +/// \param A view into the element pressure array +/// \param A view into the element stress array +/// \param A view into the element sound speed array +/// \param A view into the element specific internal energy array +/// \param A view into the element volume array +/// \param A view into the element mass +/// \param A view into the element material identifier array +/// \param A view into the element state variables +/// \param Time step size +/// \param The current Runge Kutta integration alpha value +/// +///////////////////////////////////////////////////////////////////////////// +void SGH3D::update_state( + const Material_t& Materials, + const Mesh_t& mesh, + const DCArrayKokkos& node_coords, + const DCArrayKokkos& node_vel, + const DCArrayKokkos& MaterialPoints_den, + const DCArrayKokkos& MaterialPoints_pres, + const DCArrayKokkos& MaterialPoints_stress, + const DCArrayKokkos& MaterialPoints_sspd, + const DCArrayKokkos& MaterialPoints_sie, + const DCArrayKokkos& GaussPoints_vol, + const DCArrayKokkos& MaterialPoints_mass, + const DCArrayKokkos& MaterialPoints_statev, + const DCArrayKokkos& MaterialPoints_eroded, + const DCArrayKokkos& MaterialToMeshMaps_elem, + const double dt, + const double rk_alpha, + const size_t num_material_elems, + const size_t mat_id) const +{ + const size_t num_dims = mesh.num_dims; + + // --- pressure --- + if (Materials.MaterialEnums.host(mat_id).EOSType == model::decoupledEOSType) { + // loop over all the elements the material lives in + FOR_ALL(mat_elem_lid, 0, num_material_elems, { + // get elem gid + size_t elem_gid = MaterialToMeshMaps_elem(mat_elem_lid); + + // get the material points for this material + // Note, with the SGH method, they are equal + size_t mat_point_lid = mat_elem_lid; + + // for this method, gauss point is equal to elem_gid + size_t gauss_gid = elem_gid; + + // --- Density --- + MaterialPoints_den(mat_point_lid) = MaterialPoints_mass(mat_point_lid) / GaussPoints_vol(gauss_gid); + + // --- Pressure --- + Materials.MaterialFunctions(mat_id).calc_pressure( + MaterialPoints_pres, + MaterialPoints_stress, + mat_point_lid, + mat_id, + MaterialPoints_statev, + MaterialPoints_sspd, + MaterialPoints_den(mat_point_lid), + MaterialPoints_sie(1, mat_point_lid), + Materials.eos_global_vars); + + // --- Sound Speed --- + Materials.MaterialFunctions(mat_id).calc_sound_speed( + MaterialPoints_pres, + MaterialPoints_stress, + mat_point_lid, + mat_id, + MaterialPoints_statev, + MaterialPoints_sspd, + MaterialPoints_den(mat_point_lid), + MaterialPoints_sie(1, mat_point_lid), + Materials.eos_global_vars); + }); // end parallel for over mat elem lid + } // if decoupled EOS + else { + // only calculate density as pressure and sound speed come from the coupled strength model + + // --- Density --- + // loop over all the elements the material lives in + FOR_ALL(mat_elem_lid, 0, num_material_elems, { + // get elem gid + size_t elem_gid = MaterialToMeshMaps_elem(mat_elem_lid); + + // get the material points for this material + // Note, with the SGH method, they are equal + size_t mat_point_lid = mat_elem_lid; + + // for this method, gauss point is equal to elem_gid + size_t gauss_gid = elem_gid; + + // --- Density --- + MaterialPoints_den(mat_point_lid) = MaterialPoints_mass(mat_point_lid) / GaussPoints_vol(gauss_gid); + }); // end parallel for over mat elem lid + Kokkos::fence(); + } // end if + + // --- Stress --- + + // state_based elastic plastic model + if (Materials.MaterialEnums.host(mat_id).StrengthType == model::stateBased) { + const size_t num_nodes_in_elem = mesh.num_nodes_in_elem; + + // loop over all the elements the material lives in + FOR_ALL(mat_elem_lid, 0, num_material_elems, { + // get elem gid + size_t elem_gid = MaterialToMeshMaps_elem(mat_elem_lid); + + // get the material points for this material + // Note, with the SGH method, they are equal + size_t mat_point_lid = mat_elem_lid; + + // for this method, gauss point is equal to elem_gid + size_t gauss_gid = elem_gid; + + // cut out the node_gids for this element + ViewCArrayKokkos elem_node_gids(&mesh.nodes_in_elem(elem_gid, 0), num_nodes_in_elem); + + // --- Density --- + MaterialPoints_den(mat_point_lid) = MaterialPoints_mass(mat_point_lid) / GaussPoints_vol(gauss_gid); + + // corner area normals + double area_array[24]; + ViewCArrayKokkos area(area_array, num_nodes_in_elem, num_dims); + + // velocity gradient + double vel_grad_array[9]; + ViewCArrayKokkos vel_grad(vel_grad_array, num_dims, num_dims); + + // get the B matrix which are the OUTWARD corner area normals + geometry::get_bmatrix(area, elem_gid, node_coords, elem_node_gids); + + // --- Calculate the velocity gradient --- + get_velgrad(vel_grad, + elem_node_gids, + node_vel, + area, + GaussPoints_vol(elem_gid), + elem_gid); + + // --- call strength model --- + Materials.MaterialFunctions(mat_id).calc_stress( + MaterialPoints_pres, + MaterialPoints_stress, + mat_point_lid, + mat_id, + MaterialPoints_statev, + MaterialPoints_sspd, + MaterialPoints_den(mat_point_lid), + MaterialPoints_sie(1, mat_point_lid), + vel_grad, + elem_node_gids, + node_coords, + node_vel, + GaussPoints_vol(gauss_gid), + dt, + rk_alpha); + }); // end parallel for over mat elem lid + } // end if state_based strength model + + // --- mat point erosion --- + if (Materials.MaterialEnums.host(mat_id).ErosionModels != model::noErosion) { + // loop over all the elements the material lives in + FOR_ALL(mat_elem_lid, 0, num_material_elems, { + // get elem gid + size_t elem_gid = MaterialToMeshMaps_elem(mat_elem_lid); + + // get the material points for this material + // Note, with the SGH method, they are equal + size_t mat_point_lid = mat_elem_lid; + + // for this method, gauss point is equal to elem_gid + size_t gauss_gid = elem_gid; + + // --- Element erosion model --- + Materials.MaterialFunctions(mat_id).erode( + MaterialPoints_eroded, + MaterialPoints_stress, + MaterialPoints_pres(mat_point_lid), + MaterialPoints_den(mat_point_lid), + MaterialPoints_sie(1, mat_point_lid), + MaterialPoints_sspd(mat_point_lid), + Materials.MaterialFunctions(mat_id).erode_tension_val, + Materials.MaterialFunctions(mat_id).erode_density_val, + mat_point_lid); + + // apply a void eos if mat_point is eroded + if (MaterialPoints_eroded(mat_point_lid)) { + MaterialPoints_pres(mat_point_lid) = 0.0; + MaterialPoints_sspd(mat_point_lid) = 1.0e-32; + MaterialPoints_den(mat_point_lid) = 1.0e-32; + + for (size_t i = 0; i < 3; i++) { + for (size_t j = 0; j < 3; j++) { + MaterialPoints_stress(1, mat_point_lid, i, j) = 0.0; + } + } // end for i,j + } // end if on eroded + }); // end parallel for + } // end if elem errosion + + return; +} // end method to update state diff --git a/single-node-refactor/src/Solvers/SGTM_solver_3D/src/sgtm_execute.cpp b/single-node-refactor/src/Solvers/SGTM_solver_3D/src/sgtm_execute.cpp new file mode 100644 index 000000000..bf8c03828 --- /dev/null +++ b/single-node-refactor/src/Solvers/SGTM_solver_3D/src/sgtm_execute.cpp @@ -0,0 +1,628 @@ +/********************************************************************************************** +© 2020. Triad National Security, LLC. All rights reserved. +This program was produced under U.S. Government contract 89233218CNA000001 for Los Alamos +National Laboratory (LANL), which is operated by Triad National Security, LLC for the U.S. +Department of Energy/National Nuclear Security Administration. All rights in the program are +reserved by Triad National Security, LLC, and the U.S. Department of Energy/National Nuclear +Security Administration. The Government is granted for itself and others acting on its behalf a +nonexclusive, paid-up, irrevocable worldwide license in this material to reproduce, prepare +derivative works, distribute copies to the public, perform publicly and display publicly, and +to permit others to do so. +This program is open source under the BSD-3 License. +Redistribution and use in source and binary forms, with or without modification, are permitted +provided that the following conditions are met: +1. Redistributions of source code must retain the above copyright notice, this list of +conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, this list of +conditions and the following disclaimer in the documentation and/or other materials +provided with the distribution. +3. Neither the name of the copyright holder nor the names of its contributors may be used +to endorse or promote products derived from this software without specific prior +written permission. +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +**********************************************************************************************/ + +#include "sgh_solver_3D.h" + +#include "simulation_parameters.h" +#include "material.h" +#include "boundary_conditions.h" +#include "mesh.h" +#include "state.h" +#include "geometry_new.h" +#include "mesh_io.h" + +///////////////////////////////////////////////////////////////////////////// +/// +/// \fn solve +/// +/// Evolve the state according to the SGH method +/// +///////////////////////////////////////////////////////////////////////////// +void SGH3D::execute(SimulationParameters_t& SimulationParamaters, + Material_t& Materials, + BoundaryCondition_t& BoundaryConditions, + Mesh_t& mesh, + State_t& State) +{ + std::cout << "In execute function in SGH3D solver" << std::endl; + + double fuzz = SimulationParamaters.dynamic_options.fuzz; + // double tiny = SimulationParamaters.dynamic_options.tiny; + double small = SimulationParamaters.dynamic_options.small; + + double graphics_dt_ival = SimulationParamaters.output_options.graphics_time_step; + int graphics_cyc_ival = SimulationParamaters.output_options.graphics_iteration_step; + + // double time_initial = SimulationParamaters.dynamic_options.time_initial; + double time_final = SimulationParamaters.dynamic_options.time_final; + double dt_min = SimulationParamaters.dynamic_options.dt_min; + double dt_max = SimulationParamaters.dynamic_options.dt_max; + double dt_start = SimulationParamaters.dynamic_options.dt_start; + double dt_cfl = SimulationParamaters.dynamic_options.dt_cfl; + + int rk_num_stages = SimulationParamaters.dynamic_options.rk_num_stages; + int cycle_stop = SimulationParamaters.dynamic_options.cycle_stop; + + // initialize time, time_step, and cycles + double time_value = 0.0; + double dt = dt_start; + + // Create mesh writer + MeshWriter mesh_writer; // Note: Pull to driver after refactoring evolution + + // --- Graphics vars ---- + CArray graphics_times = CArray(20000); + graphics_times(0) = 0.0; + double graphics_time = 0.0; // the times for writing graphics dump + + std::cout << "Applying initial boundary conditions" << std::endl; + boundary_velocity(mesh, BoundaryConditions, State.node.vel, time_value); // Time value = 0.0; + + // extensive energy tallies over the entire mesh + double IE_t0 = 0.0; + double KE_t0 = 0.0; + double TE_t0 = 0.0; + + double cached_pregraphics_dt = fuzz; + + // the number of materials specified by the user input + const size_t num_mats = Materials.num_mats; + + // extensive IE + for (size_t mat_id = 0; mat_id < num_mats; mat_id++) { + size_t num_mat_points = State.MaterialPoints(mat_id).num_material_points; + + IE_t0 += sum_domain_internal_energy(State.MaterialPoints(mat_id).mass, + State.MaterialPoints(mat_id).sie, + num_mat_points); + } // end loop over mat_id + + // extensive KE + KE_t0 = sum_domain_kinetic_energy(mesh, + State.node.vel, + State.node.coords, + State.node.mass); + // extensive TE + TE_t0 = IE_t0 + KE_t0; + + // domain mass for each material (they are at material points) + double mass_domain_all_mats_t0 = 0.0; + double mass_domain_nodes_t0 = 0.0; + + for (size_t mat_id = 0; mat_id < num_mats; mat_id++) { + size_t num_mat_points = State.MaterialPoints(mat_id).num_material_points; + + double mass_domain_mat = sum_domain_material_mass(State.MaterialPoints(mat_id).mass, + num_mat_points); + + mass_domain_all_mats_t0 += mass_domain_mat; + printf("material %zu mass in domain = %f \n", mat_id, mass_domain_mat); + } // end for + + // node mass of the domain + mass_domain_nodes_t0 = sum_domain_node_mass(mesh, + State.node.coords, + State.node.mass); + + printf("nodal mass domain = %f \n", mass_domain_nodes_t0); + + // a flag to exit the calculation + size_t stop_calc = 0; + + auto time_1 = std::chrono::high_resolution_clock::now(); + + // Write initial state at t=0 + printf("Writing outputs to file at %f \n", graphics_time); + mesh_writer.write_mesh(mesh, State, SimulationParamaters, time_value, graphics_times); + graphics_time = time_value + graphics_dt_ival; + + // loop over the max number of time integration cycles + for (size_t cycle = 0; cycle < cycle_stop; cycle++) { + // stop calculation if flag + if (stop_calc == 1) { + break; + } + + cached_pregraphics_dt = dt; + + // the smallest time step across all materials + double min_dt_calc = dt_max; + + // calculating time step per material + for(size_t mat_id = 0; mat_id < num_mats; mat_id++){ + + // initialize the material dt + double dt_mat = dt; + + // get the stable time step + get_timestep(mesh, + State.node.coords, + State.node.vel, + State.GaussPoints.vol, + State.MaterialPoints(mat_id).sspd, + State.MaterialPoints(mat_id).eroded, + State.MaterialToMeshMaps(mat_id).elem, + State.MaterialToMeshMaps(mat_id).num_material_elems, + time_value, + graphics_time, + time_final, + dt_max, + dt_min, + dt_cfl, + dt_mat, + fuzz); + + // save the smallest dt of all materials + min_dt_calc = fmin(dt_mat, min_dt_calc); + } // end for loop over all mats + + dt = min_dt_calc; // save this dt time step + + if (cycle == 0) { + printf("cycle = %lu, time = %f, time step = %f \n", cycle, time_value, dt); + } + // print time step every 10 cycles + else if (cycle % 20 == 0) { + printf("cycle = %lu, time = %f, time step = %f \n", cycle, time_value, dt); + } // end if + + // --------------------------------------------------------------------- + // integrate the solution forward to t(n+1) via Runge Kutta (RK) method + // --------------------------------------------------------------------- + for(size_t mat_id = 0; mat_id < num_mats; mat_id++){ + // save the values at t_n + rk_init(State.node.coords, + State.node.vel, + State.MaterialPoints(mat_id).sie, + State.MaterialPoints(mat_id).stress, + mesh.num_dims, + mesh.num_elems, + mesh.num_nodes, + State.MaterialPoints(mat_id).num_material_points); + } // end for mat_id + + // integrate solution forward in time + for (size_t rk_stage = 0; rk_stage < rk_num_stages; rk_stage++) { + // ---- RK coefficient ---- + double rk_alpha = 1.0 / ((double)rk_num_stages - (double)rk_stage); + + // ---- Calculate velocity divergence for the element ---- + + get_divergence(State.GaussPoints.div, + mesh, + State.node.coords, + State.node.vel, + State.GaussPoints.vol); + + + set_corner_force_zero(mesh, State.corner.force); + + // ---- calculate the forces on the vertices and evolve stress (hypo model) ---- + for(size_t mat_id = 0; mat_id < num_mats; mat_id++){ + + size_t num_mat_elems = State.MaterialToMeshMaps(mat_id).num_material_elems; + + + get_force(Materials, + mesh, + State.GaussPoints.vol, + State.GaussPoints.div, + State.MaterialPoints(mat_id).eroded, + State.corner.force, + State.node.coords, + State.node.vel, + State.MaterialPoints(mat_id).den, + State.MaterialPoints(mat_id).sie, + State.MaterialPoints(mat_id).pres, + State.MaterialPoints(mat_id).stress, + State.MaterialPoints(mat_id).sspd, + State.MaterialPoints(mat_id).statev, + State.MaterialCorners(mat_id).force, + State.MaterialPoints(mat_id).volfrac, + State.corners_in_mat_elem, + State.MaterialToMeshMaps(mat_id).elem, + num_mat_elems, + mat_id, + fuzz, + small, + dt, + rk_alpha); + + } // end for mat_id + + // ---- Update nodal velocities ---- // + update_velocity(rk_alpha, + dt, + mesh, + State.node.vel, + State.node.mass, + State.corner.force); + + // ---- apply velocity boundary conditions to the boundary patches---- + boundary_velocity(mesh, BoundaryConditions, State.node.vel, time_value); + + // ---- apply contact boundary conditions to the boundary patches---- + boundary_contact(mesh, BoundaryConditions, State.node.vel, time_value); + + // mpi_coms(); + + for (size_t mat_id = 0; mat_id < num_mats; mat_id++) { + // ---- Update specific internal energy in the elements ---- + update_energy(rk_alpha, + dt, + mesh, + State.node.vel, + State.node.coords, + State.MaterialPoints(mat_id).sie, + State.MaterialPoints(mat_id).mass, + State.MaterialCorners(mat_id).force, + State.corners_in_mat_elem, + State.MaterialToMeshMaps(mat_id).elem, + State.MaterialToMeshMaps(mat_id).num_material_elems); + } // end for mat_id + + // ---- Update nodal positions ---- + update_position(rk_alpha, + dt, + mesh.num_dims, + mesh.num_nodes, + State.node.coords, + State.node.vel); + + // ---- Calculate cell volume for next time step ---- + geometry::get_vol(State.GaussPoints.vol, State.node.coords, mesh); + + // ---- Calculate MaterialPoints state (den, pres, sound speed, stress) for next time step ---- + for(size_t mat_id = 0; mat_id < num_mats; mat_id++){ + + size_t num_mat_elems = State.MaterialToMeshMaps(mat_id).num_material_elems; + + update_state(Materials, + mesh, + State.node.coords, + State.node.vel, + State.MaterialPoints(mat_id).den, + State.MaterialPoints(mat_id).pres, + State.MaterialPoints(mat_id).stress, + State.MaterialPoints(mat_id).sspd, + State.MaterialPoints(mat_id).sie, + State.GaussPoints.vol, + State.MaterialPoints(mat_id).mass, + State.MaterialPoints(mat_id).statev, + State.MaterialPoints(mat_id).eroded, + State.MaterialToMeshMaps(mat_id).elem, + dt, + rk_alpha, + num_mat_elems, + mat_id); + } // end for mat_id + + // ---- + // Notes on strength: + // 1) hyper-elastic strength models are called in update_state + // 2) hypo-elastic strength models are called in get_force + // 3) strength models must be added by the user in user_mat.cpp + + } // end of RK loop + + // increment the time + time_value += dt; + + size_t write = 0; + if ((cycle + 1) % graphics_cyc_ival == 0 && cycle > 0) { + write = 1; + } + else if (cycle == cycle_stop) { + write = 1; + } + else if (time_value >= time_final) { + write = 1; + } + else if (time_value >= graphics_time) { + write = 1; + } + + // write outputs + if (write == 1) { + printf("Writing outputs to file at %f \n", graphics_time); + mesh_writer.write_mesh(mesh, + State, + SimulationParamaters, + time_value, + graphics_times); + + graphics_time = time_value + graphics_dt_ival; + + dt = cached_pregraphics_dt; + } // end if + + // end of calculation + if (time_value >= time_final) { + break; + } + } // end for cycle loop + + auto time_2 = std::chrono::high_resolution_clock::now(); + auto calc_time = std::chrono::duration_cast(time_2 - time_1).count(); + + printf("\nCalculation time in seconds: %f \n", calc_time * 1e-9); + + // ---- Calculate energy tallies ---- + double IE_tend = 0.0; + double KE_tend = 0.0; + double TE_tend = 0.0; + + // extensive IE + for(size_t mat_id = 0; mat_id < num_mats; mat_id++){ + + size_t num_mat_points = State.MaterialPoints(mat_id).num_material_points; + + IE_tend += sum_domain_internal_energy(State.MaterialPoints(mat_id).mass, + State.MaterialPoints(mat_id).sie, + num_mat_points); + } // end loop over mat_id + + // extensive KE + KE_tend = sum_domain_kinetic_energy(mesh, + State.node.vel, + State.node.coords, + State.node.mass); + // extensive TE + TE_tend = IE_tend + KE_tend; + + printf("Time=0: KE = %.14f, IE = %.14f, TE = %.14f \n", KE_t0, IE_t0, TE_t0); + printf("Time=End: KE = %.14f, IE = %.14f, TE = %.14f \n", KE_tend, IE_tend, TE_tend); + printf("total energy change = %.15e \n\n", TE_tend - TE_t0); + + // domain mass for each material (they are at material points) + double mass_domain_all_mats_tend = 0.0; + double mass_domain_nodes_tend = 0.0; + + for(size_t mat_id = 0; mat_id < num_mats; mat_id++){ + size_t num_mat_points = State.MaterialPoints(mat_id).num_material_points; + + double mass_domain_mat = sum_domain_material_mass(State.MaterialPoints(mat_id).mass, + num_mat_points); + + mass_domain_all_mats_tend += mass_domain_mat; + } // end for + + // node mass of the domain + mass_domain_nodes_tend = sum_domain_node_mass(mesh, + State.node.coords, + State.node.mass); + + printf("material mass conservation error = %f \n", mass_domain_all_mats_tend - mass_domain_all_mats_t0); + printf("nodal mass conservation error = %f \n", mass_domain_nodes_tend - mass_domain_nodes_t0); + printf("nodal and material mass error = %f \n\n", mass_domain_nodes_tend - mass_domain_all_mats_tend); +} // end of SGH execute + +///////////////////////////////////////////////////////////////////////////// +/// +/// \fn max_Eigen3D +/// +/// \brief Get the maximum eigenvalues of a given tensor +/// +/// \param Input tensor +/// +///////////////////////////////////////////////////////////////////////////// +KOKKOS_FUNCTION +double max_Eigen3D(const ViewCArrayKokkos tensor) +{ + // Compute largest eigenvalue of a 3x3 tensor + // Algorithm only works if tensor is symmetric + double pi = 3.141592653589793; + size_t dim = tensor.dims(0); + double trace, det; + trace = tensor(0, 0) + tensor(1, 1) + tensor(2, 2); + det = tensor(0, 0) * (tensor(1, 1) * tensor(2, 2) - tensor(1, 2) * tensor(2, 1)); + det -= tensor(0, 1) * (tensor(1, 0) * tensor(2, 2) - tensor(1, 2) * tensor(2, 0)); + det += tensor(0, 2) * (tensor(1, 0) * tensor(2, 1) - tensor(1, 1) * tensor(2, 0)); + trace /= 3.; // easier for computation + double p2 = pow((tensor(0, 0) - trace), 2) + pow((tensor(1, 1) - trace), 2) + + pow((tensor(2, 2) - trace), 2); + p2 += 2. * (pow(tensor(0, 1), 2) + pow(tensor(0, 2), 2) + pow(tensor(1, 2), 2)); + + double p = sqrt(p2 / 6.); + + // check for nan + if (det != det) { + return 0; + } + + if (det == 0) { + return 0; + } + + double B_array[9]; + ViewCArrayKokkos B(B_array, 3, 3); + + for (int i = 0; i < 3; i++) { + for (int j = 0; j < 3; j++) { + if (i == j) { + B(i, i) = (1 / p) * (tensor(i, i) - trace); + } + else{ + B(i, j) = (1 / p) * tensor(i, j); + } // end if + } // end for j + } // end for i + + double r, phi; + r = B(0, 0) * (B(1, 1) * B(2, 2) - B(1, 2) * B(2, 1)); + r -= B(0, 1) * (B(1, 0) * B(2, 2) - B(1, 2) * B(2, 0)); + r += B(0, 2) * (B(1, 0) * B(2, 1) - B(1, 1) * B(2, 0)); + r /= 2; + // first two cases are to handle numerical difficulties. + // In exact math -1 <= r <= 1 + if (r <= -1) { + phi = pi / 3; + } + else if (r >= 1) { + phi = 0; + } + else{ + phi = acos(r) / 3.; + } // end if + + double eig1, eig2, eig3; + eig1 = trace + 2 * p * cos(phi); + eig2 = trace + 2 * p * cos(phi + (2 * pi / 3)); + eig3 = 3 * trace - (eig1 + eig2); + + double abs_max_val = fmax(fmax(fabs(eig1), fabs(eig2)), fabs(eig3)); + + return abs_max_val; +} + +// a function to tally the internal energy +double sum_domain_internal_energy(const DCArrayKokkos& MaterialPoints_mass, + const DCArrayKokkos& MaterialPoints_sie, + size_t num_mat_points) +{ + double IE_sum = 0.0; + double IE_loc_sum; + + // loop over the material points and tally IE + REDUCE_SUM(matpt_lid, 0, num_mat_points, IE_loc_sum, { + IE_loc_sum += MaterialPoints_mass(matpt_lid) * MaterialPoints_sie(1, matpt_lid); + }, IE_sum); + Kokkos::fence(); + + return IE_sum; +} // end function + +///////////////////////////////////////////////////////////////////////////// +/// +/// \fn sum_domain_kinetic_energy +/// +/// \brief +/// +/// +/// +/// \param +/// \param +/// \param +/// +/// \return +/// +///////////////////////////////////////////////////////////////////////////// +double sum_domain_kinetic_energy(const Mesh_t& mesh, + const DCArrayKokkos& node_vel, + const DCArrayKokkos& node_coords, + const DCArrayKokkos& node_mass) +{ + // extensive KE + double KE_sum = 0.0; + double KE_loc_sum; + + REDUCE_SUM(node_gid, 0, mesh.num_nodes, KE_loc_sum, { + double ke = 0; + + for (size_t dim = 0; dim < mesh.num_dims; dim++) { + ke += node_vel(1, node_gid, dim) * node_vel(1, node_gid, dim); // 1/2 at end + } // end for + + KE_loc_sum += node_mass(node_gid) * ke; + + }, KE_sum); + Kokkos::fence(); + + return 0.5 * KE_sum; +} // end function + +// a function to tally the material point masses +double sum_domain_material_mass(const DCArrayKokkos& MaterialPoints_mass, + const size_t num_mat_points) +{ + double mass_domain = 0.0; + double mass_loc_domain; + + REDUCE_SUM(matpt_lid, 0, num_mat_points, mass_loc_domain, { + mass_loc_domain += MaterialPoints_mass(matpt_lid); + }, mass_domain); + Kokkos::fence(); + + return mass_domain; +} // end function + +///////////////////////////////////////////////////////////////////////////// +/// +/// \fn sum_domain_node_mass +/// +/// \brief +/// +/// +/// +/// \param +/// \param +/// \param +/// +/// \return +/// +///////////////////////////////////////////////////////////////////////////// +double sum_domain_node_mass(const Mesh_t& mesh, + const DCArrayKokkos& node_coords, + const DCArrayKokkos& node_mass) +{ + double mass_domain = 0.0; + double mass_loc_domain; + + REDUCE_SUM(node_gid, 0, mesh.num_nodes, mass_loc_domain, { + if (mesh.num_dims == 2) { + mass_loc_domain += node_mass(node_gid) * node_coords(1, node_gid, 1); + } + else{ + mass_loc_domain += node_mass(node_gid); + } + }, mass_domain); + Kokkos::fence(); + + return mass_domain; +} // end function + + +// set the corner forces to zero +void set_corner_force_zero(const Mesh_t& mesh, + const DCArrayKokkos& corner_force) +{ + // set corner force to zero + FOR_ALL(corner_gid, 0, mesh.num_corners, { + for (size_t dim = 0; dim < mesh.num_dims; dim++) { + corner_force(corner_gid, dim) = 0.0; + } + }); // end parallel for corners +} // end function diff --git a/single-node-refactor/src/Solvers/SGTM_solver_3D/src/sgtm_setup.cpp b/single-node-refactor/src/Solvers/SGTM_solver_3D/src/sgtm_setup.cpp new file mode 100644 index 000000000..de8973de1 --- /dev/null +++ b/single-node-refactor/src/Solvers/SGTM_solver_3D/src/sgtm_setup.cpp @@ -0,0 +1,500 @@ +/********************************************************************************************** +© 2020. Triad National Security, LLC. All rights reserved. +This program was produced under U.S. Government contract 89233218CNA000001 for Los Alamos +National Laboratory (LANL), which is operated by Triad National Security, LLC for the U.S. +Department of Energy/National Nuclear Security Administration. All rights in the program are +reserved by Triad National Security, LLC, and the U.S. Department of Energy/National Nuclear +Security Administration. The Government is granted for itself and others acting on its behalf a +nonexclusive, paid-up, irrevocable worldwide license in this material to reproduce, prepare +derivative works, distribute copies to the public, perform publicly and display publicly, and +to permit others to do so. +This program is open source under the BSD-3 License. +Redistribution and use in source and binary forms, with or without modification, are permitted +provided that the following conditions are met: +1. Redistributions of source code must retain the above copyright notice, this list of +conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, this list of +conditions and the following disclaimer in the documentation and/or other materials +provided with the distribution. +3. Neither the name of the copyright holder nor the names of its contributors may be used +to endorse or promote products derived from this software without specific prior +written permission. +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +**********************************************************************************************/ + +#include "sgh_solver_3D.h" +#include "mesh.h" +#include "region_fill.h" +#include "material.h" +#include "boundary_conditions.h" +#include "state.h" +#include "simulation_parameters.h" + +///////////////////////////////////////////////////////////////////////////// +/// +/// \fn init_corner_node_masses_zero +/// +/// \brief a function to initialize corner and node masses to zero +/// +/// \param mesh is the simulation mesh +/// \param node_mass is the node mass +/// \param corner_mass is the corner mass +/// +///////////////////////////////////////////////////////////////////////////// +void SGH3D::init_corner_node_masses_zero(const Mesh_t& mesh, + const DCArrayKokkos& node_mass, + const DCArrayKokkos& corner_mass) const +{ + // calculate the nodal mass + FOR_ALL(node_gid, 0, mesh.num_nodes, { + node_mass(node_gid) = 0.0; + }); // end parallel over nodes + + FOR_ALL(corner_gid, 0, mesh.num_corners, { + corner_mass(corner_gid) = 0.0; + }); // end parallel over corners +} // end setting masses equal to zero + +///////////////////////////////////////////////////////////////////////////// +/// +/// \fn fill_regions_sgh +/// +/// \brief a function to paint den, sie, vel, and mat_ids on the mesh +/// The arrays populated (on host and device) are: +/// elem_mat_id +/// GaussPoint_den +/// GaussPoint_sie +/// node_vel +/// +/// \param Materials holds the material models and global parameters +/// \param mesh is the simulation mesh +/// \param node_coords are the coordinates of the nodes +/// \param node_vel is the nodal velocity array +/// \param region_fills are the instructures to paint state on the mesh +/// \param voxel_elem_mat_id are the voxel values on a structured i,j,k mesh +/// \param GaussPoint_den is density at the GaussPoints on the mesh +/// \param GaussPoint_sie is specific internal energy at the GaussPoints on the mesh +/// \param elem_mat_id is the material id in an element +/// \param num_fills is number of fill instruction +/// \param num_elems is number of elements on the mesh +/// \param num_nodes is number of nodes on the mesh +/// \param rk_num_bins is number of time integration storage bins +/// +///////////////////////////////////////////////////////////////////////////// +void SGH3D::fill_regions_sgh(const Material_t& Materials, + const Mesh_t& mesh, + const DCArrayKokkos & node_coords, + DCArrayKokkos & node_vel, + DCArrayKokkos & GaussPoint_den, + DCArrayKokkos & GaussPoint_sie, + DCArrayKokkos & elem_mat_id, + DCArrayKokkos & voxel_elem_mat_id, + const CArrayKokkos & region_fills, + const CArray & region_fills_host, + const size_t num_fills, + const size_t num_elems, + const size_t num_nodes, + const size_t rk_num_bins) const +{ + double voxel_dx, voxel_dy, voxel_dz; // voxel mesh resolution, set by input file + double orig_x, orig_y, orig_z; // origin of voxel elem center mesh, set by input file + size_t voxel_num_i, voxel_num_j, voxel_num_k; // num voxel elements in each direction, set by input file + + // --------------------------------------------- + // copy to host, enum to read a voxel file + // --------------------------------------------- + + DCArrayKokkos read_voxel_file(num_fills); // check to see if readVoxelFile + + FOR_ALL(f_id, 0, num_fills, { + if (region_fills(f_id).volume == region::readVoxelFile) { + read_voxel_file(f_id) = region::readVoxelFile; // read the voxel file + } + // add other mesh voxel files + else{ + read_voxel_file(f_id) = 0; + } + }); // end parallel for + read_voxel_file.update_host(); // copy to CPU if code is to read a file + Kokkos::fence(); + // --------------------------------------------- + + // loop over the fill instructions + for (size_t f_id = 0; f_id < num_fills; f_id++) { + // ---- + // voxel mesh setup + if (read_voxel_file.host(f_id) == region::readVoxelFile) { + // read voxel mesh to get the values in the fcn interface + user_voxel_init(voxel_elem_mat_id, + voxel_dx, + voxel_dy, + voxel_dz, + orig_x, + orig_y, + orig_z, + voxel_num_i, + voxel_num_j, + voxel_num_k, + region_fills_host(f_id).scale_x, + region_fills_host(f_id).scale_y, + region_fills_host(f_id).scale_z, + region_fills_host(f_id).file_path); + + // copy values read from file to device + voxel_elem_mat_id.update_device(); + } // endif + // add else if for other mesh reads including STL-2-voxel + + // parallel loop over elements in mesh + FOR_ALL(elem_gid, 0, num_elems, { + // calculate the coordinates and radius of the element + double elem_coords_1D[3]; // note:initialization with a list won't work + ViewCArrayKokkos elem_coords(&elem_coords_1D[0], 3); + elem_coords(0) = 0.0; + elem_coords(1) = 0.0; + elem_coords(2) = 0.0; + + // get the coordinates of the element center (using rk_level=1 or node coords) + for (int node_lid = 0; node_lid < mesh.num_nodes_in_elem; node_lid++) { + elem_coords(0) += node_coords(1, mesh.nodes_in_elem(elem_gid, node_lid), 0); + elem_coords(1) += node_coords(1, mesh.nodes_in_elem(elem_gid, node_lid), 1); + if (mesh.num_dims == 3) { + elem_coords(2) += node_coords(1, mesh.nodes_in_elem(elem_gid, node_lid), 2); + } + else{ + elem_coords(2) = 0.0; + } + } // end loop over nodes in element + elem_coords(0) = (elem_coords(0) / mesh.num_nodes_in_elem); + elem_coords(1) = (elem_coords(1) / mesh.num_nodes_in_elem); + elem_coords(2) = (elem_coords(2) / mesh.num_nodes_in_elem); + + // calc if we are to fill this element + size_t fill_this = fill_geometric_region(mesh, + voxel_elem_mat_id, + region_fills, + elem_coords, + voxel_dx, + voxel_dy, + voxel_dz, + orig_x, + orig_y, + orig_z, + voxel_num_i, + voxel_num_j, + voxel_num_k, + f_id); + + // paint the material state on the element if fill_this=1 + if (fill_this == 1) { + // default sgh paint + paint_gauss_den_sie(Materials, + mesh, + node_coords, + GaussPoint_den, + GaussPoint_sie, + elem_mat_id, + region_fills, + elem_coords, + elem_gid, + f_id); + + // add user defined paint here + // user_defined_sgh_state(); + + // technically, not thread safe, but making it a separate loop created bad fill behavior + // loop over the nodes of this element and apply velocity + for (size_t node_lid = 0; node_lid < mesh.num_nodes_in_elem; node_lid++) { + // get the mesh node index + size_t node_gid = mesh.nodes_in_elem(elem_gid, node_lid); + + // default sgh paint + paint_node_vel(region_fills, + node_vel, + node_coords, + node_gid, + mesh.num_dims, + f_id, + rk_num_bins); + + // add user defined paint here + // user_defined_vel_state(); + } // end loop over the nodes in elem + } // end if fill this + }); // end FOR_ALL node loop + Kokkos::fence(); + } // end for loop over fills + + elem_mat_id.update_host(); + GaussPoint_den.update_host(); + GaussPoint_sie.update_host(); + node_vel.update_host(); + + Kokkos::fence(); +} // end SGH fill regions + +///////////////////////////////////////////////////////////////////////////// +/// +/// \fn setup the SGH method +/// +/// \brief Allocate state, setup models, and fill mesh regions per the YAML input +/// +///////////////////////////////////////////////////////////////////////////// +void SGH3D::setup(SimulationParameters_t& SimulationParamaters, + Material_t& Materials, + Mesh_t& mesh, + BoundaryCondition_t& Boundary, + State_t& State) +{ + size_t num_fills = SimulationParamaters.region_fills.size(); + printf("Num Fills's = %zu\n", num_fills); + + // the number of elems and nodes in the mesh + const size_t num_elems = mesh.num_elems; + const size_t num_nodes = mesh.num_nodes; + + const size_t rk_num_bins = SimulationParamaters.dynamic_options.rk_num_bins; + + // create temporary state fields + // Painting routine requires only 1 material per GaussPoint + DCArrayKokkos GaussPoint_den(num_elems); + DCArrayKokkos GaussPoint_sie(num_elems); + DCArrayKokkos elem_mat_id(num_elems); // the mat_id in the elem + + DCArrayKokkos voxel_elem_mat_id; // 1 or 0 if material exist, or it is the material_id + + // --------------------------------------------- + // fill den, sie, and velocity on the mesh + // --------------------------------------------- + fill_regions_sgh(Materials, + mesh, + State.node.coords, + State.node.vel, + GaussPoint_den, + GaussPoint_sie, + elem_mat_id, + voxel_elem_mat_id, + SimulationParamaters.region_fills, + SimulationParamaters.region_fills_host, + num_fills, + num_elems, + num_nodes, + rk_num_bins); + + // note: the device and host side are updated in the above function + // --------------------------------------------- + + // ---------------------------------------------------------------- + // Walk over the mesh and find dimensions of material storage arrays + // ---------------------------------------------------------------- + const size_t num_mats = Materials.num_mats; // the number of materials on the mesh + + // a counter for the Material index spaces + DCArrayKokkos num_elems_saved_for_mat(num_mats); + + for (int mat_id = 0; mat_id < num_mats; mat_id++) { + size_t sum_local; + size_t sum_total; + + REDUCE_SUM(elem_gid, 0, num_elems, sum_local, { + if (elem_mat_id(elem_gid) == mat_id) { + // increment the number of elements the materials live in + sum_local++; + } // end if + }, sum_total); + + // material index space size + num_elems_saved_for_mat.host(mat_id) = sum_total; + } // end for + + // --------------------------------------- + // SGH allocation of maps and state + // --------------------------------------- + State.MaterialToMeshMaps = CArray(num_mats); + + State.MaterialPoints = CArray(num_mats); + State.MaterialCorners = CArray(num_mats); + // zones not needed with SGH + + // for ALE SGH, add a buffer to num_elems_for_mat, like 10% of num_elems up to num_elems. + for (int mat_id = 0; mat_id < num_mats; mat_id++) { + const size_t num_mat_pts_in_elem = 1; // 1 mat_point per elem with SGH + + // the following always have the exact memory needed, they omit the buffer + State.MaterialToMeshMaps(mat_id).num_material_elems = num_elems_saved_for_mat.host(mat_id); + State.MaterialPoints(mat_id).num_material_points = num_elems_saved_for_mat.host(mat_id) * num_mat_pts_in_elem; + State.MaterialCorners(mat_id).num_material_corners = num_elems_saved_for_mat.host(mat_id) * mesh.num_nodes_in_elem; + + // ----- + // Allocation after here will include a buffer + // ----- + size_t buffer = 0; // memory buffer to push back into + size_t num_elems_for_mat = num_elems_saved_for_mat.host(mat_id) + buffer; // has a memory buffer for ALE + + size_t num_points_for_mat = num_elems_for_mat * num_mat_pts_in_elem; + size_t num_corners_for_mat = num_elems_for_mat * mesh.num_nodes_in_elem; + + State.MaterialToMeshMaps(mat_id).initialize(num_elems_for_mat); + State.MaterialPoints(mat_id).initialize(rk_num_bins, num_points_for_mat, 3); // aways 3D, even for 2D-RZ calcs + State.MaterialCorners(mat_id).initialize(num_corners_for_mat, mesh.num_dims); + // zones are not used + } // end for mat_id + + // data structures to access indices in other material index spaces + State.corners_in_mat_elem = corners_in_mat_t(mesh.num_nodes_in_elem); + State.points_in_mat_elem = points_in_mat_t(1); // 1 material point per element + // zones_in_mat_elem is not used with SGH + + // now a counter for how many elems have been saved + for (int mat_id = 0; mat_id < num_mats; mat_id++) { + num_elems_saved_for_mat.host(mat_id) = 0; // initializing to zero + } + + // --------------------------------------- + // SGH save data, maps, and state + // --------------------------------------- + State.GaussPoints.vol.update_host(); + Kokkos::fence(); + + // the following loop is not thread safe + for (size_t elem_gid = 0; elem_gid < num_elems; elem_gid++) { + // get the material_id in this element + size_t mat_id = elem_mat_id.host(elem_gid); + + // mat elem lid (compressed storage) to save the data to, for this material mat_id + size_t mat_elem_lid = num_elems_saved_for_mat.host(mat_id); + + // --- mapping from material elem lid to elem --- + State.MaterialToMeshMaps(mat_id).elem.host(mat_elem_lid) = elem_gid; + + // ----------------------- + // Save MaterialPoints + // ----------------------- + + // LOOP OVER Guass points in the element + { + size_t gauss_gid = elem_gid; // 1 gauss point per element + + size_t mat_point_lid = mat_elem_lid; // for more than 1 gauss point, this must increment + + // --- density and mass --- + State.MaterialPoints(mat_id).den.host(mat_point_lid) = GaussPoint_den.host(gauss_gid); + State.MaterialPoints(mat_id).mass.host(mat_point_lid) = GaussPoint_den.host(gauss_gid) * State.GaussPoints.vol.host(gauss_gid); + + // --- volume fraction --- + State.MaterialPoints(mat_id).volfrac.host(mat_point_lid) = 1.0; + + // --- set eroded flag to false --- + State.MaterialPoints(mat_id).eroded.host(mat_point_lid) = false; + + // --- specific internal energy --- + // save state, that is integrated in time, at the RK levels + for (size_t rk_level = 0; rk_level < rk_num_bins; rk_level++) { + State.MaterialPoints(mat_id).sie.host(rk_level, mat_point_lid) = GaussPoint_sie.host(gauss_gid); + } + } // end loop over gauss points in element + + // ----------------------- + // Save MaterialZones + // ----------------------- + // For higher-order FE, least squares fit the sie at gauss points to get zone values + + // update counter for how many mat_elem_lid values have been saved + num_elems_saved_for_mat.host(mat_id)++; + } // end serial for loop over all elements + + // copy the state to the device + for (int mat_id = 0; mat_id < num_mats; mat_id++) { + State.MaterialPoints(mat_id).den.update_device(); + State.MaterialPoints(mat_id).mass.update_device(); + State.MaterialPoints(mat_id).sie.update_device(); + + State.MaterialPoints(mat_id).volfrac.update_device(); + State.MaterialPoints(mat_id).eroded.update_device(); + + State.MaterialToMeshMaps(mat_id).elem.update_device(); + } // end for + Kokkos::fence(); + + // calculate pressure, sound speed, and stress for each material + for (int mat_id = 0; mat_id < num_mats; mat_id++) { + size_t num_mat_points = State.MaterialPoints(mat_id).num_material_points; + + init_press_sspd_stress(Materials, + mesh, + State.MaterialPoints(mat_id).den, + State.MaterialPoints(mat_id).pres, + State.MaterialPoints(mat_id).stress, + State.MaterialPoints(mat_id).sspd, + State.MaterialPoints(mat_id).sie, + State.MaterialPoints(mat_id).statev, + rk_num_bins, + num_mat_points, + mat_id); + } // for loop over mat_id + + // set corner and node masses to zero + init_corner_node_masses_zero(mesh, State.node.mass, State.corner.mass); + + // calculate corner and node masses on the mesh + if (mesh.num_dims == 3) { + for (int mat_id = 0; mat_id < num_mats; mat_id++) { + size_t num_mat_elems = State.MaterialToMeshMaps(mat_id).num_material_elems; + + calc_corner_mass(Materials, + mesh, + State.node.coords, + State.node.mass, + State.corner.mass, + State.MaterialPoints(mat_id).mass, + State.MaterialToMeshMaps(mat_id).elem, + num_mat_elems); + } // end for mat_id + + calc_node_mass(mesh, + State.node.coords, + State.node.mass, + State.corner.mass); + } + else{ + // 2D RZ + // // calculate the corner massess if 2D + // if (mesh.num_dims == 2) { + // FOR_ALL(elem_gid, 0, mesh.num_elems, { + // // facial area of the corners + // double corner_areas_array[4]; + + // ViewCArrayKokkos corner_areas(&corner_areas_array[0], 4); + // ViewCArrayKokkos elem_node_gids(&mesh.nodes_in_elem(elem_gid, 0), 4); + + // geometry::get_area_weights2D(corner_areas, elem_gid, node_coords, elem_node_gids); + + // // loop over the corners of the element and calculate the mass + // for (size_t corner_lid = 0; corner_lid < 4; corner_lid++) { + // size_t corner_gid = mesh.corners_in_elem(elem_gid, corner_lid); + // corner_mass(corner_gid) = corner_areas(corner_lid) * MaterialPoints.den(elem_gid); // node radius is added later + // } // end for over corners + // }); + // + // + // FOR_ALL(nodes_gid=0; nodes_gid& node_coords, + DCArrayKokkos& node_vel, + DCArrayKokkos& MaterialPoints_sie, + DCArrayKokkos& MaterialPoints_stress, + const size_t num_dims, + const size_t num_elems, + const size_t num_nodes, + const size_t num_mat_points) const +{ + // save elem quantities + FOR_ALL(matpt_lid, 0, num_mat_points, { + // stress is always 3D even with 2D-RZ + for (size_t i = 0; i < 3; i++) { + for (size_t j = 0; j < 3; j++) { + MaterialPoints_stress(0, matpt_lid, i, j) = MaterialPoints_stress(1, matpt_lid, i, j); + } + } // end for + + MaterialPoints_sie(0, matpt_lid) = MaterialPoints_sie(1, matpt_lid); + }); // end parallel for + + // save nodal quantities + FOR_ALL(node_gid, 0, num_nodes, { + for (size_t i = 0; i < num_dims; i++) { + node_coords(0, node_gid, i) = node_coords(1, node_gid, i); + node_vel(0, node_gid, i) = node_vel(1, node_gid, i); + } + }); // end parallel for + Kokkos::fence(); + + return; +} // end rk_init + +///////////////////////////////////////////////////////////////////////////// +/// +/// \fn get_timestep +/// +/// \brief This function calculates the time step by finding the shortest distance +/// between any two nodes in the mesh. +/// +/// WARNING WARNING : Only works for 3D, 8 node elements +/// +/// \param Simulation mesh +/// \param View of nodal position data +/// \param View of nodal velocity data +/// \param View of element sound speed +/// \param View of element volume +/// +/// REMOVE EXCESS TIME RELATED VARIABLES +/// +///////////////////////////////////////////////////////////////////////////// +void SGH3D::get_timestep(Mesh_t& mesh, + DCArrayKokkos& node_coords, + DCArrayKokkos& node_vel, + DCArrayKokkos& GaussPoints_vol, + DCArrayKokkos& MaterialPoints_sspd, + DCArrayKokkos& MaterialPoints_eroded, + DCArrayKokkos& MaterialToMeshMaps_elem, + size_t num_mat_elems, + double time_value, + const double graphics_time, + const double time_final, + const double dt_max, + const double dt_min, + const double dt_cfl, + double& dt, + const double fuzz) const +{ + // increase dt by 10%, that is the largest dt value + dt = dt * 1.1; + + double dt_lcl; + double min_dt_calc; + REDUCE_MIN(mat_elem_lid, 0, num_mat_elems, dt_lcl, { + size_t elem_gid = MaterialToMeshMaps_elem(mat_elem_lid); + + double coords0[24]; // element coords + ViewCArrayKokkos coords(coords0, 8, 3); + + double distance0[28]; // array for holding distances between each node + ViewCArrayKokkos dist(distance0, 28); + + // Getting the coordinates of the element + for (size_t node_lid = 0; node_lid < 8; node_lid++) { + for (size_t dim = 0; dim < mesh.num_dims; dim++) { + coords(node_lid, dim) = node_coords(1, mesh.nodes_in_elem(elem_gid, node_lid), dim); + } // end for dim + } // end for loop over node_lid + + // loop conditions needed for distance calculation + size_t countA = 0; + size_t countB = 1; + size_t a; + size_t b; + size_t loop = 0; + + // Only works for 3D + // Solving for the magnitude of distance between each node + for (size_t i = 0; i < 28; i++) { + a = countA; + b = countB; + + // returns magnitude of distance between each node, 28 total options + dist(i) = fabs(sqrt((pow((coords(b, 0) - coords(a, 0)), 2.0) + + pow((coords(b, 1) - coords(a, 1)), 2.0) + + pow((coords(b, 2) - coords(a, 2)), 2.0)))); + + countB++; + countA++; + + // tricky indexing + if (countB > 7) { + loop++; + countB = 1 + loop; + countA = 0; + } + } // end for i + + double dist_min = dist(0); + + for (int i = 0; i < 28; ++i) { + dist_min = fmin(dist(i), dist_min); + } + + // local dt calc based on CFL + double dt_lcl_ = dt_cfl * dist_min / (MaterialPoints_sspd(mat_elem_lid) + fuzz); + + if (MaterialPoints_eroded(mat_elem_lid) == true) { + dt_lcl_ = 1.0e32; // a huge time step as this element doesn't exist + } + + // make dt be in bounds + dt_lcl_ = fmin(dt_lcl_, dt_max); // make dt small than dt_max + dt_lcl_ = fmax(dt_lcl_, dt_min); // make dt larger than dt_min + + if (dt_lcl_ < dt_lcl) { + dt_lcl = dt_lcl_; + } + }, min_dt_calc); // end parallel reduction + Kokkos::fence(); + + // save the min dt + if (min_dt_calc < dt) { + dt = min_dt_calc; + } + + // ensure time step hits the graphics time intervals + dt = fmin(dt, (graphics_time - time_value) + fuzz); + + // make dt be exact for final time + dt = fmin(dt, time_final - time_value); + return; +} // end get_timestep From f724fb8d2de0b2d328163b2acdc80c79f922f4c8 Mon Sep 17 00:00:00 2001 From: Jacob Moore Date: Tue, 3 Sep 2024 12:17:52 -0500 Subject: [PATCH 185/233] ENH: Getting SGTM to build, WIP --- .../SGTM_solver_3D/include/sgtm_solver_3D.h | 53 ++-- .../Solvers/SGTM_solver_3D/src/boundary.cpp | 47 ++-- .../SGTM_solver_3D/src/energy_sgtm.cpp | 4 +- .../Solvers/SGTM_solver_3D/src/force_sgtm.cpp | 6 +- .../Solvers/SGTM_solver_3D/src/momentum.cpp | 10 +- .../Solvers/SGTM_solver_3D/src/position.cpp | 4 +- .../Solvers/SGTM_solver_3D/src/properties.cpp | 4 +- .../SGTM_solver_3D/src/sgtm_execute.cpp | 228 +----------------- .../Solvers/SGTM_solver_3D/src/sgtm_setup.cpp | 10 +- .../SGTM_solver_3D/src/time_integration.cpp | 6 +- 10 files changed, 75 insertions(+), 297 deletions(-) diff --git a/single-node-refactor/src/Solvers/SGTM_solver_3D/include/sgtm_solver_3D.h b/single-node-refactor/src/Solvers/SGTM_solver_3D/include/sgtm_solver_3D.h index f9195f9a3..4501146c1 100644 --- a/single-node-refactor/src/Solvers/SGTM_solver_3D/include/sgtm_solver_3D.h +++ b/single-node-refactor/src/Solvers/SGTM_solver_3D/include/sgtm_solver_3D.h @@ -53,8 +53,8 @@ using namespace mtr; // matar namespace /// /// \class SGTM /// -/// \brief Class for containing functions required to perform staggered grid thermomechanical -/// 3D Cartesian meshes. +/// \brief Class for containing functions required to perform staggered grid +/// thermomechanical 3D Cartesian meshes. /// /// This class contains the requisite functions requited to perform /// staggered grid thermomechanical heat transfer. @@ -84,7 +84,7 @@ class SGTM3D : public Solver /// /// \fn setup /// - /// \brief Calls setup_sgh, which initializes state and material data + /// \brief Calls setup_sgtm, which initializes state and material data /// ///////////////////////////////////////////////////////////////////////////// void setup(SimulationParameters_t& SimulationParamaters, @@ -130,8 +130,8 @@ class SGTM3D : public Solver // Any finalize goes here, remove allocated memory, etc } - // **** Functions defined in sgh_setup.cpp **** // - void fill_regions_sgh( + // **** Functions defined in sgtm_setup.cpp **** // + void fill_regions_sgtm( const Material_t& Materials, const Mesh_t& mesh, const DCArrayKokkos& node_coords, @@ -159,14 +159,14 @@ class SGTM3D : public Solver DCArrayKokkos& node_vel, const double time_value) const; - void boundary_contact( + void boundary_temperature( const Mesh_t& mesh, const BoundaryCondition_t& Boundary, - DCArrayKokkos& node_vel, + DCArrayKokkos& node_temp, const double time_value) const; - // **** Functions defined in energy_sgh.cpp **** // - void update_energy( + // **** Functions defined in energy_sgtm.cpp **** // + void update_temperature( const double rk_alpha, const double dt, const Mesh_t& mesh, @@ -179,7 +179,7 @@ class SGTM3D : public Solver const DCArrayKokkos& MaterialToMeshMaps_elem, const size_t num_mat_elems) const; - // **** Functions defined in force_sgh.cpp **** // + // **** Functions defined in force_sgtm.cpp **** // void get_force( const Material_t& Materials, const Mesh_t& mesh, @@ -327,25 +327,28 @@ class SGTM3D : public Solver const double vol, const double dt, const double rk_alpha); -}; -double sum_domain_internal_energy(const DCArrayKokkos& MaterialPoints_mass, - const DCArrayKokkos& MaterialPoints_sie, - const size_t num_mat_points); -double sum_domain_kinetic_energy(const Mesh_t& mesh, - const DCArrayKokkos& node_vel, - const DCArrayKokkos& node_coords, - const DCArrayKokkos& node_mass); + double sum_domain_internal_energy(const DCArrayKokkos& MaterialPoints_mass, + const DCArrayKokkos& MaterialPoints_sie, + const size_t num_mat_points); + + double sum_domain_kinetic_energy(const Mesh_t& mesh, + const DCArrayKokkos& node_vel, + const DCArrayKokkos& node_coords, + const DCArrayKokkos& node_mass); + + double sum_domain_material_mass(const DCArrayKokkos& MaterialPoints_mass, + const size_t num_mat_points); -double sum_domain_material_mass(const DCArrayKokkos& MaterialPoints_mass, - const size_t num_mat_points); + double sum_domain_node_mass(const Mesh_t& mesh, + const DCArrayKokkos& node_coords, + const DCArrayKokkos& node_mass); + + void set_corner_force_zero(const Mesh_t& mesh, + const DCArrayKokkos& corner_force); +}; -double sum_domain_node_mass(const Mesh_t& mesh, - const DCArrayKokkos& node_coords, - const DCArrayKokkos& node_mass); -void set_corner_force_zero(const Mesh_t& mesh, - const DCArrayKokkos& corner_force); #endif // end HEADER_H diff --git a/single-node-refactor/src/Solvers/SGTM_solver_3D/src/boundary.cpp b/single-node-refactor/src/Solvers/SGTM_solver_3D/src/boundary.cpp index c900c9321..b3177d494 100644 --- a/single-node-refactor/src/Solvers/SGTM_solver_3D/src/boundary.cpp +++ b/single-node-refactor/src/Solvers/SGTM_solver_3D/src/boundary.cpp @@ -32,13 +32,13 @@ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. **********************************************************************************************/ -#include "sgh_solver_3D.h" +#include "sgtm_solver_3D.h" #include "mesh.h" #include "boundary_conditions.h" ///////////////////////////////////////////////////////////////////////////// /// -/// \fn boundary_velocity +/// \fn boundary_temperature /// /// \brief Evolves the boundary according to a give velocity /// @@ -48,9 +48,9 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /// \param The current simulation time /// ///////////////////////////////////////////////////////////////////////////// -void SGH3D::boundary_velocity(const Mesh_t& mesh, +void SGTM3D::boundary_temperature(const Mesh_t& mesh, const BoundaryCondition_t& BoundaryConditions, - DCArrayKokkos& node_vel, + DCArrayKokkos& node_temp, const double time_value) const { // Loop over boundary sets @@ -61,38 +61,19 @@ void SGH3D::boundary_velocity(const Mesh_t& mesh, size_t bdy_node_gid = mesh.bdy_nodes_in_set(bdy_set, bdy_node_lid); // evaluate velocity on this boundary node - BoundaryConditions.BoundaryConditionFunctions(bdy_set).velocity( - mesh, - BoundaryConditions.BoundaryConditionEnums, - BoundaryConditions.bc_global_vars, - BoundaryConditions.bc_state_vars, - node_vel, - time_value, - 1, // rk_stage - bdy_node_gid, - bdy_set); + // BoundaryConditions.BoundaryConditionFunctions(bdy_set).velocity( + // mesh, + // BoundaryConditions.BoundaryConditionEnums, + // BoundaryConditions.bc_global_vars, + // BoundaryConditions.bc_state_vars, + // node_vel, + // time_value, + // 1, // rk_stage + // bdy_node_gid, + // bdy_set); }); // end for bdy_node_lid } // end for bdy_set return; } // end boundary_velocity function -///////////////////////////////////////////////////////////////////////////// -/// -/// \fn boundary_velocity -/// -/// \brief Evolves the boundary according to a give velocity -/// -/// \param The simulation mesh -/// \param An array of BoundaryCondition_t that contain information about BCs -/// \param A view into the nodal velocity array -/// \param The current simulation time -/// -///////////////////////////////////////////////////////////////////////////// -void SGH3D::boundary_contact(const Mesh_t& mesh, - const BoundaryCondition_t& BoundaryConditions, - DCArrayKokkos& node_vel, - const double time_value) const -{ - return; -} // end boundary_contact function diff --git a/single-node-refactor/src/Solvers/SGTM_solver_3D/src/energy_sgtm.cpp b/single-node-refactor/src/Solvers/SGTM_solver_3D/src/energy_sgtm.cpp index 6bdd3ae55..c6bba2380 100644 --- a/single-node-refactor/src/Solvers/SGTM_solver_3D/src/energy_sgtm.cpp +++ b/single-node-refactor/src/Solvers/SGTM_solver_3D/src/energy_sgtm.cpp @@ -32,7 +32,7 @@ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. **********************************************************************************************/ -#include "sgh_solver_3D.h" +#include "sgtm_solver_3D.h" #include "mesh.h" #include "state.h" @@ -52,7 +52,7 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /// \param A view into the corner force data /// ///////////////////////////////////////////////////////////////////////////// -void SGH3D::update_energy(const double rk_alpha, +void SGTM3D::update_temperature(const double rk_alpha, const double dt, const Mesh_t& mesh, const DCArrayKokkos& node_vel, diff --git a/single-node-refactor/src/Solvers/SGTM_solver_3D/src/force_sgtm.cpp b/single-node-refactor/src/Solvers/SGTM_solver_3D/src/force_sgtm.cpp index 7de569d13..3b4eb652f 100644 --- a/single-node-refactor/src/Solvers/SGTM_solver_3D/src/force_sgtm.cpp +++ b/single-node-refactor/src/Solvers/SGTM_solver_3D/src/force_sgtm.cpp @@ -32,7 +32,7 @@ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. **********************************************************************************************/ -#include "sgh_solver_3D.h" +#include "sgtm_solver_3D.h" #include "material.h" #include "mesh.h" #include "state.h" @@ -63,7 +63,7 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /// \param The current Runge Kutta integration alpha value /// ///////////////////////////////////////////////////////////////////////////// -void SGH3D::get_force(const Material_t& Materials, +void SGTM3D::get_force(const Material_t& Materials, const Mesh_t& mesh, const DCArrayKokkos& GaussPoints_vol, const DCArrayKokkos& GaussPoints_div, @@ -151,7 +151,7 @@ void SGH3D::get_force(const Material_t& Materials, elem_node_gids); // --- Calculate the velocity gradient --- - SGH3D::get_velgrad(vel_grad, + SGTM3D::get_velgrad(vel_grad, elem_node_gids, node_vel, area_normal, diff --git a/single-node-refactor/src/Solvers/SGTM_solver_3D/src/momentum.cpp b/single-node-refactor/src/Solvers/SGTM_solver_3D/src/momentum.cpp index 23723aeec..b848a1f78 100644 --- a/single-node-refactor/src/Solvers/SGTM_solver_3D/src/momentum.cpp +++ b/single-node-refactor/src/Solvers/SGTM_solver_3D/src/momentum.cpp @@ -32,7 +32,7 @@ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. **********************************************************************************************/ -#include "sgh_solver_3D.h" +#include "sgtm_solver_3D.h" #include "mesh.h" #include "geometry_new.h" @@ -49,7 +49,7 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /// \param View of the corner forces /// ///////////////////////////////////////////////////////////////////////////// -void SGH3D::update_velocity(double rk_alpha, +void SGTM3D::update_velocity(double rk_alpha, double dt, const Mesh_t& mesh, DCArrayKokkos& node_vel, @@ -101,7 +101,7 @@ void SGH3D::update_velocity(double rk_alpha, /// ///////////////////////////////////////////////////////////////////////////// KOKKOS_FUNCTION -void SGH3D::get_velgrad(ViewCArrayKokkos& vel_grad, +void SGTM3D::get_velgrad(ViewCArrayKokkos& vel_grad, const ViewCArrayKokkos& elem_node_gids, const DCArrayKokkos& node_vel, const ViewCArrayKokkos& b_matrix, @@ -194,7 +194,7 @@ void SGH3D::get_velgrad(ViewCArrayKokkos& vel_grad, /// \param View of the volumes of each element /// ///////////////////////////////////////////////////////////////////////////// -void SGH3D::get_divergence(DCArrayKokkos& elem_div, +void SGTM3D::get_divergence(DCArrayKokkos& elem_div, const Mesh_t mesh, const DCArrayKokkos& node_coords, const DCArrayKokkos& node_vel, @@ -278,7 +278,7 @@ void SGH3D::get_divergence(DCArrayKokkos& elem_div, /// ///////////////////////////////////////////////////////////////////////////// KOKKOS_FUNCTION -void SGH3D::decompose_vel_grad(const ViewCArrayKokkos& D_tensor, +void SGTM3D::decompose_vel_grad(const ViewCArrayKokkos& D_tensor, const ViewCArrayKokkos& W_tensor, const ViewCArrayKokkos& vel_grad) const { diff --git a/single-node-refactor/src/Solvers/SGTM_solver_3D/src/position.cpp b/single-node-refactor/src/Solvers/SGTM_solver_3D/src/position.cpp index c2411b929..00d107280 100644 --- a/single-node-refactor/src/Solvers/SGTM_solver_3D/src/position.cpp +++ b/single-node-refactor/src/Solvers/SGTM_solver_3D/src/position.cpp @@ -31,7 +31,7 @@ WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. **********************************************************************************************/ -#include "sgh_solver_3D.h" +#include "sgtm_solver_3D.h" ///////////////////////////////////////////////////////////////////////////// /// @@ -47,7 +47,7 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /// \param View of nodal velocity data /// ///////////////////////////////////////////////////////////////////////////// -void SGH3D::update_position(double rk_alpha, +void SGTM3D::update_position(double rk_alpha, double dt, const size_t num_dims, const size_t num_nodes, diff --git a/single-node-refactor/src/Solvers/SGTM_solver_3D/src/properties.cpp b/single-node-refactor/src/Solvers/SGTM_solver_3D/src/properties.cpp index 31f89b428..906bc9c11 100644 --- a/single-node-refactor/src/Solvers/SGTM_solver_3D/src/properties.cpp +++ b/single-node-refactor/src/Solvers/SGTM_solver_3D/src/properties.cpp @@ -32,7 +32,7 @@ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. **********************************************************************************************/ -#include "sgh_solver_3D.h" +#include "sgtm_solver_3D.h" #include "material.h" #include "mesh.h" #include "geometry_new.h" @@ -60,7 +60,7 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /// \param The current Runge Kutta integration alpha value /// ///////////////////////////////////////////////////////////////////////////// -void SGH3D::update_state( +void SGTM3D::update_state( const Material_t& Materials, const Mesh_t& mesh, const DCArrayKokkos& node_coords, diff --git a/single-node-refactor/src/Solvers/SGTM_solver_3D/src/sgtm_execute.cpp b/single-node-refactor/src/Solvers/SGTM_solver_3D/src/sgtm_execute.cpp index bf8c03828..b95ecf650 100644 --- a/single-node-refactor/src/Solvers/SGTM_solver_3D/src/sgtm_execute.cpp +++ b/single-node-refactor/src/Solvers/SGTM_solver_3D/src/sgtm_execute.cpp @@ -32,7 +32,7 @@ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. **********************************************************************************************/ -#include "sgh_solver_3D.h" +#include "sgtm_solver_3D.h" #include "simulation_parameters.h" #include "material.h" @@ -44,18 +44,18 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ///////////////////////////////////////////////////////////////////////////// /// -/// \fn solve +/// \fn execute /// /// Evolve the state according to the SGH method /// ///////////////////////////////////////////////////////////////////////////// -void SGH3D::execute(SimulationParameters_t& SimulationParamaters, +void SGTM3D::execute(SimulationParameters_t& SimulationParamaters, Material_t& Materials, BoundaryCondition_t& BoundaryConditions, Mesh_t& mesh, State_t& State) { - std::cout << "In execute function in SGH3D solver" << std::endl; + std::cout << "In execute function in SGHTM solver" << std::endl; double fuzz = SimulationParamaters.dynamic_options.fuzz; // double tiny = SimulationParamaters.dynamic_options.tiny; @@ -87,7 +87,7 @@ void SGH3D::execute(SimulationParameters_t& SimulationParamaters, double graphics_time = 0.0; // the times for writing graphics dump std::cout << "Applying initial boundary conditions" << std::endl; - boundary_velocity(mesh, BoundaryConditions, State.node.vel, time_value); // Time value = 0.0; + boundary_temperature(mesh, BoundaryConditions, State.node.vel, time_value); // Time value = 0.0; // extensive energy tallies over the entire mesh double IE_t0 = 0.0; @@ -149,6 +149,7 @@ void SGH3D::execute(SimulationParameters_t& SimulationParamaters, // loop over the max number of time integration cycles for (size_t cycle = 0; cycle < cycle_stop; cycle++) { + // stop calculation if flag if (stop_calc == 1) { break; @@ -214,125 +215,7 @@ void SGH3D::execute(SimulationParameters_t& SimulationParamaters, // integrate solution forward in time for (size_t rk_stage = 0; rk_stage < rk_num_stages; rk_stage++) { - // ---- RK coefficient ---- - double rk_alpha = 1.0 / ((double)rk_num_stages - (double)rk_stage); - - // ---- Calculate velocity divergence for the element ---- - - get_divergence(State.GaussPoints.div, - mesh, - State.node.coords, - State.node.vel, - State.GaussPoints.vol); - - - set_corner_force_zero(mesh, State.corner.force); - - // ---- calculate the forces on the vertices and evolve stress (hypo model) ---- - for(size_t mat_id = 0; mat_id < num_mats; mat_id++){ - - size_t num_mat_elems = State.MaterialToMeshMaps(mat_id).num_material_elems; - - - get_force(Materials, - mesh, - State.GaussPoints.vol, - State.GaussPoints.div, - State.MaterialPoints(mat_id).eroded, - State.corner.force, - State.node.coords, - State.node.vel, - State.MaterialPoints(mat_id).den, - State.MaterialPoints(mat_id).sie, - State.MaterialPoints(mat_id).pres, - State.MaterialPoints(mat_id).stress, - State.MaterialPoints(mat_id).sspd, - State.MaterialPoints(mat_id).statev, - State.MaterialCorners(mat_id).force, - State.MaterialPoints(mat_id).volfrac, - State.corners_in_mat_elem, - State.MaterialToMeshMaps(mat_id).elem, - num_mat_elems, - mat_id, - fuzz, - small, - dt, - rk_alpha); - - } // end for mat_id - - // ---- Update nodal velocities ---- // - update_velocity(rk_alpha, - dt, - mesh, - State.node.vel, - State.node.mass, - State.corner.force); - - // ---- apply velocity boundary conditions to the boundary patches---- - boundary_velocity(mesh, BoundaryConditions, State.node.vel, time_value); - - // ---- apply contact boundary conditions to the boundary patches---- - boundary_contact(mesh, BoundaryConditions, State.node.vel, time_value); - - // mpi_coms(); - - for (size_t mat_id = 0; mat_id < num_mats; mat_id++) { - // ---- Update specific internal energy in the elements ---- - update_energy(rk_alpha, - dt, - mesh, - State.node.vel, - State.node.coords, - State.MaterialPoints(mat_id).sie, - State.MaterialPoints(mat_id).mass, - State.MaterialCorners(mat_id).force, - State.corners_in_mat_elem, - State.MaterialToMeshMaps(mat_id).elem, - State.MaterialToMeshMaps(mat_id).num_material_elems); - } // end for mat_id - - // ---- Update nodal positions ---- - update_position(rk_alpha, - dt, - mesh.num_dims, - mesh.num_nodes, - State.node.coords, - State.node.vel); - - // ---- Calculate cell volume for next time step ---- - geometry::get_vol(State.GaussPoints.vol, State.node.coords, mesh); - - // ---- Calculate MaterialPoints state (den, pres, sound speed, stress) for next time step ---- - for(size_t mat_id = 0; mat_id < num_mats; mat_id++){ - - size_t num_mat_elems = State.MaterialToMeshMaps(mat_id).num_material_elems; - - update_state(Materials, - mesh, - State.node.coords, - State.node.vel, - State.MaterialPoints(mat_id).den, - State.MaterialPoints(mat_id).pres, - State.MaterialPoints(mat_id).stress, - State.MaterialPoints(mat_id).sspd, - State.MaterialPoints(mat_id).sie, - State.GaussPoints.vol, - State.MaterialPoints(mat_id).mass, - State.MaterialPoints(mat_id).statev, - State.MaterialPoints(mat_id).eroded, - State.MaterialToMeshMaps(mat_id).elem, - dt, - rk_alpha, - num_mat_elems, - mat_id); - } // end for mat_id - - // ---- - // Notes on strength: - // 1) hyper-elastic strength models are called in update_state - // 2) hypo-elastic strength models are called in get_force - // 3) strength models must be added by the user in user_mat.cpp + } // end of RK loop @@ -428,86 +311,9 @@ void SGH3D::execute(SimulationParameters_t& SimulationParamaters, printf("nodal and material mass error = %f \n\n", mass_domain_nodes_tend - mass_domain_all_mats_tend); } // end of SGH execute -///////////////////////////////////////////////////////////////////////////// -/// -/// \fn max_Eigen3D -/// -/// \brief Get the maximum eigenvalues of a given tensor -/// -/// \param Input tensor -/// -///////////////////////////////////////////////////////////////////////////// -KOKKOS_FUNCTION -double max_Eigen3D(const ViewCArrayKokkos tensor) -{ - // Compute largest eigenvalue of a 3x3 tensor - // Algorithm only works if tensor is symmetric - double pi = 3.141592653589793; - size_t dim = tensor.dims(0); - double trace, det; - trace = tensor(0, 0) + tensor(1, 1) + tensor(2, 2); - det = tensor(0, 0) * (tensor(1, 1) * tensor(2, 2) - tensor(1, 2) * tensor(2, 1)); - det -= tensor(0, 1) * (tensor(1, 0) * tensor(2, 2) - tensor(1, 2) * tensor(2, 0)); - det += tensor(0, 2) * (tensor(1, 0) * tensor(2, 1) - tensor(1, 1) * tensor(2, 0)); - trace /= 3.; // easier for computation - double p2 = pow((tensor(0, 0) - trace), 2) + pow((tensor(1, 1) - trace), 2) + - pow((tensor(2, 2) - trace), 2); - p2 += 2. * (pow(tensor(0, 1), 2) + pow(tensor(0, 2), 2) + pow(tensor(1, 2), 2)); - - double p = sqrt(p2 / 6.); - - // check for nan - if (det != det) { - return 0; - } - - if (det == 0) { - return 0; - } - - double B_array[9]; - ViewCArrayKokkos B(B_array, 3, 3); - - for (int i = 0; i < 3; i++) { - for (int j = 0; j < 3; j++) { - if (i == j) { - B(i, i) = (1 / p) * (tensor(i, i) - trace); - } - else{ - B(i, j) = (1 / p) * tensor(i, j); - } // end if - } // end for j - } // end for i - - double r, phi; - r = B(0, 0) * (B(1, 1) * B(2, 2) - B(1, 2) * B(2, 1)); - r -= B(0, 1) * (B(1, 0) * B(2, 2) - B(1, 2) * B(2, 0)); - r += B(0, 2) * (B(1, 0) * B(2, 1) - B(1, 1) * B(2, 0)); - r /= 2; - // first two cases are to handle numerical difficulties. - // In exact math -1 <= r <= 1 - if (r <= -1) { - phi = pi / 3; - } - else if (r >= 1) { - phi = 0; - } - else{ - phi = acos(r) / 3.; - } // end if - - double eig1, eig2, eig3; - eig1 = trace + 2 * p * cos(phi); - eig2 = trace + 2 * p * cos(phi + (2 * pi / 3)); - eig3 = 3 * trace - (eig1 + eig2); - - double abs_max_val = fmax(fmax(fabs(eig1), fabs(eig2)), fabs(eig3)); - - return abs_max_val; -} // a function to tally the internal energy -double sum_domain_internal_energy(const DCArrayKokkos& MaterialPoints_mass, +double SGTM3D::sum_domain_internal_energy(const DCArrayKokkos& MaterialPoints_mass, const DCArrayKokkos& MaterialPoints_sie, size_t num_mat_points) { @@ -539,7 +345,7 @@ double sum_domain_internal_energy(const DCArrayKokkos& MaterialPoints_ma /// \return /// ///////////////////////////////////////////////////////////////////////////// -double sum_domain_kinetic_energy(const Mesh_t& mesh, +double SGTM3D::sum_domain_kinetic_energy(const Mesh_t& mesh, const DCArrayKokkos& node_vel, const DCArrayKokkos& node_coords, const DCArrayKokkos& node_mass) @@ -564,7 +370,7 @@ double sum_domain_kinetic_energy(const Mesh_t& mesh, } // end function // a function to tally the material point masses -double sum_domain_material_mass(const DCArrayKokkos& MaterialPoints_mass, +double SGTM3D::sum_domain_material_mass(const DCArrayKokkos& MaterialPoints_mass, const size_t num_mat_points) { double mass_domain = 0.0; @@ -594,7 +400,7 @@ double sum_domain_material_mass(const DCArrayKokkos& MaterialPoints_mass /// \return /// ///////////////////////////////////////////////////////////////////////////// -double sum_domain_node_mass(const Mesh_t& mesh, +double SGTM3D::sum_domain_node_mass(const Mesh_t& mesh, const DCArrayKokkos& node_coords, const DCArrayKokkos& node_mass) { @@ -614,15 +420,3 @@ double sum_domain_node_mass(const Mesh_t& mesh, return mass_domain; } // end function - -// set the corner forces to zero -void set_corner_force_zero(const Mesh_t& mesh, - const DCArrayKokkos& corner_force) -{ - // set corner force to zero - FOR_ALL(corner_gid, 0, mesh.num_corners, { - for (size_t dim = 0; dim < mesh.num_dims; dim++) { - corner_force(corner_gid, dim) = 0.0; - } - }); // end parallel for corners -} // end function diff --git a/single-node-refactor/src/Solvers/SGTM_solver_3D/src/sgtm_setup.cpp b/single-node-refactor/src/Solvers/SGTM_solver_3D/src/sgtm_setup.cpp index de8973de1..607ca0c94 100644 --- a/single-node-refactor/src/Solvers/SGTM_solver_3D/src/sgtm_setup.cpp +++ b/single-node-refactor/src/Solvers/SGTM_solver_3D/src/sgtm_setup.cpp @@ -32,7 +32,7 @@ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. **********************************************************************************************/ -#include "sgh_solver_3D.h" +#include "sgtm_solver_3D.h" #include "mesh.h" #include "region_fill.h" #include "material.h" @@ -51,7 +51,7 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /// \param corner_mass is the corner mass /// ///////////////////////////////////////////////////////////////////////////// -void SGH3D::init_corner_node_masses_zero(const Mesh_t& mesh, +void SGTM3D::init_corner_node_masses_zero(const Mesh_t& mesh, const DCArrayKokkos& node_mass, const DCArrayKokkos& corner_mass) const { @@ -91,7 +91,7 @@ void SGH3D::init_corner_node_masses_zero(const Mesh_t& mesh, /// \param rk_num_bins is number of time integration storage bins /// ///////////////////////////////////////////////////////////////////////////// -void SGH3D::fill_regions_sgh(const Material_t& Materials, +void SGTM3D::fill_regions_sgtm(const Material_t& Materials, const Mesh_t& mesh, const DCArrayKokkos & node_coords, DCArrayKokkos & node_vel, @@ -250,7 +250,7 @@ void SGH3D::fill_regions_sgh(const Material_t& Materials, /// \brief Allocate state, setup models, and fill mesh regions per the YAML input /// ///////////////////////////////////////////////////////////////////////////// -void SGH3D::setup(SimulationParameters_t& SimulationParamaters, +void SGTM3D::setup(SimulationParameters_t& SimulationParamaters, Material_t& Materials, Mesh_t& mesh, BoundaryCondition_t& Boundary, @@ -276,7 +276,7 @@ void SGH3D::setup(SimulationParameters_t& SimulationParamaters, // --------------------------------------------- // fill den, sie, and velocity on the mesh // --------------------------------------------- - fill_regions_sgh(Materials, + fill_regions_sgtm(Materials, mesh, State.node.coords, State.node.vel, diff --git a/single-node-refactor/src/Solvers/SGTM_solver_3D/src/time_integration.cpp b/single-node-refactor/src/Solvers/SGTM_solver_3D/src/time_integration.cpp index ce00b2c30..f2e9c4763 100644 --- a/single-node-refactor/src/Solvers/SGTM_solver_3D/src/time_integration.cpp +++ b/single-node-refactor/src/Solvers/SGTM_solver_3D/src/time_integration.cpp @@ -32,7 +32,7 @@ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. **********************************************************************************************/ -#include "sgh_solver_3D.h" +#include "sgtm_solver_3D.h" #include "mesh.h" ///////////////////////////////////////////////////////////////////////////// @@ -50,7 +50,7 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /// \param Number of nodes /// ///////////////////////////////////////////////////////////////////////////// -void SGH3D::rk_init(DCArrayKokkos& node_coords, +void SGTM3D::rk_init(DCArrayKokkos& node_coords, DCArrayKokkos& node_vel, DCArrayKokkos& MaterialPoints_sie, DCArrayKokkos& MaterialPoints_stress, @@ -101,7 +101,7 @@ void SGH3D::rk_init(DCArrayKokkos& node_coords, /// REMOVE EXCESS TIME RELATED VARIABLES /// ///////////////////////////////////////////////////////////////////////////// -void SGH3D::get_timestep(Mesh_t& mesh, +void SGTM3D::get_timestep(Mesh_t& mesh, DCArrayKokkos& node_coords, DCArrayKokkos& node_vel, DCArrayKokkos& GaussPoints_vol, From 98dd0aad0b36ec88f66268726302ae38182f0ee5 Mon Sep 17 00:00:00 2001 From: Jacob Moore Date: Tue, 3 Sep 2024 12:48:32 -0500 Subject: [PATCH 186/233] ENH: Adding SGTM solver, WIP --- single-node-refactor/input-sgtm-test.yaml | 109 ++++++++++++++++++ single-node-refactor/src/CMakeLists.txt | 6 +- .../SGTM_solver_3D/include/sgtm_solver_3D.h | 15 ++- .../Solvers/SGTM_solver_3D/src/boundary.cpp | 1 + .../src/common/include/solver_inputs.h | 4 +- single-node-refactor/src/driver.cpp | 20 +++- single-node-refactor/src/driver.h | 7 +- 7 files changed, 151 insertions(+), 11 deletions(-) create mode 100644 single-node-refactor/input-sgtm-test.yaml diff --git a/single-node-refactor/input-sgtm-test.yaml b/single-node-refactor/input-sgtm-test.yaml new file mode 100644 index 000000000..714ccb1cb --- /dev/null +++ b/single-node-refactor/input-sgtm-test.yaml @@ -0,0 +1,109 @@ +# num_dims: 3 + +dynamic_options: + time_final: 1.0 + dt_min: 1.e-8 + dt_max: 1.e-2 + dt_start: 1.e-5 + cycle_stop: 300000 + + +# mesh_options: +# source: file +# file_path: /var/tmp/repos/Fierro/fork/Fierro/testing/meshes/mesh_Sedov_8.geo + +mesh_options: + source: generate + num_dims: 3 + type: box + origin: [0.0, 0.0, 0.0] + length: [1.2, 1.2, 1.2] + num_elems: [12, 12, 12] + + +output_options: + timer_output_level: thorough + output_file_format: state + graphics_time_step: 1.0 + # graphics_iteration_step: 10 + +solver_options: + - solver: + method: SGH3D + # solver_vars: + # - blah + # - blah + # - blah + +boundary_conditions: + # Tag X plane + - boundary_condition: + solver: SGH3D + geometry: x_plane + direction: x_dir + value: 0.0 + type: reflected_velocity + + + # Tag Y plane + - boundary_condition: + solver: SGH3D + geometry: y_plane + direction: y_dir + value: 0.0 + type: reflected_velocity + + # Tag z plane + - boundary_condition: + solver: SGH3D + geometry: z_plane + direction: z_dir + value: 0.0 + type: reflected_velocity + + + +materials: + - material: + id: 0 + eos_model_type: decoupled + eos_model: gamma_law_gas + # strength_model: none + q1: 1.0 + q2: 1.333 + q1ex: 1.0 + q2ex: 1.333 + eos_global_vars: + - 1.666666666666667 + - 1.0E-14 + - 1.0 + +regions: + - fill_volume: + type: global + material_id: 0 + den: 1.0 + sie: 1.e-10 + velocity: cartesian + u: 0.0 + v: 0.0 + w: 0.0 + + + + # energy source initial conditions + - fill_volume: + type: sphere + origin: [0.0, 0.0, 0.0] + radius1: 0.0 + radius2: 0.1 + material_id: 0 + den: 1.0 + # ie: 0.25833839995946534 + sie: 61.67375002 # 963.652344 + velocity: cartesian + u: 0.0 + v: 0.0 + w: 0.0 + + diff --git a/single-node-refactor/src/CMakeLists.txt b/single-node-refactor/src/CMakeLists.txt index 24d9d7c41..c42c01dfc 100755 --- a/single-node-refactor/src/CMakeLists.txt +++ b/single-node-refactor/src/CMakeLists.txt @@ -69,5 +69,9 @@ add_subdirectory(Solvers/SGH_solver_3D) include_directories(Solvers/SGH_solver_rz/include) add_subdirectory(Solvers/SGH_solver_rz) -add_executable(Fierro main.cpp driver.cpp solver.cpp ${COMMON_Files} ${YAML_SRC_Files} ${SGH_3D_SRC_Files} ${SGH_RZ_SRC_Files}) +# Add SGTM Solver +include_directories(Solvers/SGTM_solver_3D/include) +add_subdirectory(Solvers/SGTM_solver_3D) + +add_executable(Fierro main.cpp driver.cpp solver.cpp ${COMMON_Files} ${YAML_SRC_Files} ${SGH_3D_SRC_Files} ${SGH_RZ_SRC_Files} ${SGTM_3D_SRC_Files}) target_link_libraries(Fierro PRIVATE matar Kokkos::kokkos) diff --git a/single-node-refactor/src/Solvers/SGTM_solver_3D/include/sgtm_solver_3D.h b/single-node-refactor/src/Solvers/SGTM_solver_3D/include/sgtm_solver_3D.h index 4501146c1..9712f2ba1 100644 --- a/single-node-refactor/src/Solvers/SGTM_solver_3D/include/sgtm_solver_3D.h +++ b/single-node-refactor/src/Solvers/SGTM_solver_3D/include/sgtm_solver_3D.h @@ -329,23 +329,28 @@ class SGTM3D : public Solver const double rk_alpha); - double sum_domain_internal_energy(const DCArrayKokkos& MaterialPoints_mass, + double sum_domain_internal_energy( + const DCArrayKokkos& MaterialPoints_mass, const DCArrayKokkos& MaterialPoints_sie, const size_t num_mat_points); - double sum_domain_kinetic_energy(const Mesh_t& mesh, + double sum_domain_kinetic_energy( + const Mesh_t& mesh, const DCArrayKokkos& node_vel, const DCArrayKokkos& node_coords, const DCArrayKokkos& node_mass); - double sum_domain_material_mass(const DCArrayKokkos& MaterialPoints_mass, + double sum_domain_material_mass( + const DCArrayKokkos& MaterialPoints_mass, const size_t num_mat_points); - double sum_domain_node_mass(const Mesh_t& mesh, + double sum_domain_node_mass( + const Mesh_t& mesh, const DCArrayKokkos& node_coords, const DCArrayKokkos& node_mass); - void set_corner_force_zero(const Mesh_t& mesh, + void set_corner_force_zero( + const Mesh_t& mesh, const DCArrayKokkos& corner_force); }; diff --git a/single-node-refactor/src/Solvers/SGTM_solver_3D/src/boundary.cpp b/single-node-refactor/src/Solvers/SGTM_solver_3D/src/boundary.cpp index b3177d494..605025c81 100644 --- a/single-node-refactor/src/Solvers/SGTM_solver_3D/src/boundary.cpp +++ b/single-node-refactor/src/Solvers/SGTM_solver_3D/src/boundary.cpp @@ -57,6 +57,7 @@ void SGTM3D::boundary_temperature(const Mesh_t& mesh, for (size_t bdy_set = 0; bdy_set < mesh.num_bdy_sets; bdy_set++) { // Loop over boundary nodes in a boundary set FOR_ALL(bdy_node_lid, 0, mesh.num_bdy_nodes_in_set.host(bdy_set), { + // get the global index for this node on the boundary size_t bdy_node_gid = mesh.bdy_nodes_in_set(bdy_set, bdy_node_lid); diff --git a/single-node-refactor/src/common/include/solver_inputs.h b/single-node-refactor/src/common/include/solver_inputs.h index e54a48a10..2e64e5a3e 100644 --- a/single-node-refactor/src/common/include/solver_inputs.h +++ b/single-node-refactor/src/common/include/solver_inputs.h @@ -45,13 +45,15 @@ enum method NONE = 0, SGH3D = 1, SGHRZ = 2, + SGTM3D = 3, }; } // end of namespace static std::map solver_map { { "SGH3D", solver_input::SGH3D }, - { "SGHRZ", solver_input::SGHRZ } + { "SGHRZ", solver_input::SGHRZ }, + { "SGTM3D", solver_input::SGTM3D } }; ///////////////////////////////////////////////////////////////////////////// diff --git a/single-node-refactor/src/driver.cpp b/single-node-refactor/src/driver.cpp index 830cc12ac..a61a48cbd 100644 --- a/single-node-refactor/src/driver.cpp +++ b/single-node-refactor/src/driver.cpp @@ -35,6 +35,12 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "driver.h" +// Headers for solver classes +#include "sgh_solver_3D.h" +#include "sgh_solver_rz.h" +#include "sgtm_solver_3D.h" + + // Initialize driver data. Solver type, number of solvers // Will be parsed from YAML input void Driver::initialize() @@ -113,7 +119,19 @@ void Driver::initialize() State); solvers.push_back(sgh_solver_rz); - } // end if SGH solver + } // end if SGHRZ solver + else if (SimulationParamaters.solver_inputs[solver_id].method == solver_input::SGTM3D) { + + SGTM3D* sgtm_solver_3d = new SGTM3D(); + + sgtm_solver_3d->initialize(SimulationParamaters, + Materials, + mesh, + BoundaryConditions, + State); + + solvers.push_back(sgtm_solver_3d); + } // end if SGTM solver } // end for loop over solvers diff --git a/single-node-refactor/src/driver.h b/single-node-refactor/src/driver.h index 63be9b634..3641d239b 100644 --- a/single-node-refactor/src/driver.h +++ b/single-node-refactor/src/driver.h @@ -39,9 +39,10 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "geometry_new.h" -// Headers for SGH solver classes -#include "sgh_solver_3D.h" -#include "sgh_solver_rz.h" +// // Headers for solver classes +// #include "sgh_solver_3D.h" +// #include "sgh_solver_rz.h" +// #include "sgtm_solver_3D.h" // Physical state data From 91c21f716d88c8854d799c28d2c343b01821a64f Mon Sep 17 00:00:00 2001 From: Jacob Moore Date: Tue, 3 Sep 2024 13:05:14 -0500 Subject: [PATCH 187/233] ENH: Rename run to execute --- single-node-refactor/src/driver.cpp | 6 +++--- single-node-refactor/src/driver.h | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/single-node-refactor/src/driver.cpp b/single-node-refactor/src/driver.cpp index a61a48cbd..8fc1812b0 100644 --- a/single-node-refactor/src/driver.cpp +++ b/single-node-refactor/src/driver.cpp @@ -162,14 +162,14 @@ void Driver::setup() ///////////////////////////////////////////////////////////////////////////// /// -/// \fn run +/// \fn execute /// /// \brief Calls the execute function for each of the created solvers /// ///////////////////////////////////////////////////////////////////////////// -void Driver::run() +void Driver::execute() { - std::cout << "Inside driver run" << std::endl; + std::cout << "Inside driver execute" << std::endl; for (auto& solver : solvers) { solver->execute(SimulationParamaters, Materials, diff --git a/single-node-refactor/src/driver.h b/single-node-refactor/src/driver.h index 3641d239b..744a6739e 100644 --- a/single-node-refactor/src/driver.h +++ b/single-node-refactor/src/driver.h @@ -113,12 +113,12 @@ class Driver ///////////////////////////////////////////////////////////////////////////// /// - /// \fn run + /// \fn execute /// /// \brief Calls the execute function for each of the created solvers /// ///////////////////////////////////////////////////////////////////////////// - void run(); + void execute(); ///////////////////////////////////////////////////////////////////////////// From 66030f2b85c4d6e3d76796edf08cd9c691ee9f75 Mon Sep 17 00:00:00 2001 From: Jacob Moore Date: Tue, 3 Sep 2024 14:26:59 -0500 Subject: [PATCH 188/233] ENH: Adding state data for thermomechanical solve --- .../Solvers/SGTM_solver_3D/src/sgtm_setup.cpp | 29 ++++++++++--------- .../src/common/include/state.h | 12 +++++++- 2 files changed, 26 insertions(+), 15 deletions(-) diff --git a/single-node-refactor/src/Solvers/SGTM_solver_3D/src/sgtm_setup.cpp b/single-node-refactor/src/Solvers/SGTM_solver_3D/src/sgtm_setup.cpp index 607ca0c94..6da45c10a 100644 --- a/single-node-refactor/src/Solvers/SGTM_solver_3D/src/sgtm_setup.cpp +++ b/single-node-refactor/src/Solvers/SGTM_solver_3D/src/sgtm_setup.cpp @@ -91,20 +91,21 @@ void SGTM3D::init_corner_node_masses_zero(const Mesh_t& mesh, /// \param rk_num_bins is number of time integration storage bins /// ///////////////////////////////////////////////////////////////////////////// -void SGTM3D::fill_regions_sgtm(const Material_t& Materials, - const Mesh_t& mesh, - const DCArrayKokkos & node_coords, - DCArrayKokkos & node_vel, - DCArrayKokkos & GaussPoint_den, - DCArrayKokkos & GaussPoint_sie, - DCArrayKokkos & elem_mat_id, - DCArrayKokkos & voxel_elem_mat_id, - const CArrayKokkos & region_fills, - const CArray & region_fills_host, - const size_t num_fills, - const size_t num_elems, - const size_t num_nodes, - const size_t rk_num_bins) const +void SGTM3D::fill_regions_sgtm( + const Material_t& Materials, + const Mesh_t& mesh, + const DCArrayKokkos & node_coords, + DCArrayKokkos & node_vel, + DCArrayKokkos & GaussPoint_den, + DCArrayKokkos & GaussPoint_sie, + DCArrayKokkos & elem_mat_id, + DCArrayKokkos & voxel_elem_mat_id, + const CArrayKokkos & region_fills, + const CArray & region_fills_host, + const size_t num_fills, + const size_t num_elems, + const size_t num_nodes, + const size_t rk_num_bins) const { double voxel_dx, voxel_dy, voxel_dz; // voxel mesh resolution, set by input file double orig_x, orig_y, orig_z; // origin of voxel elem center mesh, set by input file diff --git a/single-node-refactor/src/common/include/state.h b/single-node-refactor/src/common/include/state.h index 6491a2a47..6aff9ffb5 100644 --- a/single-node-refactor/src/common/include/state.h +++ b/single-node-refactor/src/common/include/state.h @@ -50,6 +50,7 @@ struct node_t DCArrayKokkos coords; ///< Nodal coordinates DCArrayKokkos vel; ///< Nodal velocity DCArrayKokkos mass; ///< Nodal mass + DCArrayKokkos temp; ///< Nodal temperature // initialization method (num_rk_storage_bins, num_nodes, num_dims) void initialize(size_t num_rk, size_t num_nodes, size_t num_dims) @@ -57,6 +58,7 @@ struct node_t this->coords = DCArrayKokkos(num_rk, num_nodes, num_dims, "node_coordinates"); this->vel = DCArrayKokkos(num_rk, num_nodes, num_dims, "node_velocity"); this->mass = DCArrayKokkos(num_nodes, "node_mass"); + this->temp = DCArrayKokkos(num_nodes, "node_temp"); }; // end method }; // end node_t @@ -125,6 +127,8 @@ struct MaterialPoint_t DCArrayKokkos sie; ///< coefficients for the sie in strong form, only used in some methods e.g., FE-SGH and MPM + DCArrayKokkos q_flux; ///< Heat flux + // Material Models are stored on Material points DCArrayKokkos statev; // a place holder to get things to compile DCArrayKokkos eos_state_vars; ///< Array of state variables for the EOS @@ -141,6 +145,7 @@ struct MaterialPoint_t this->sie = DCArrayKokkos(num_rk, num_pts_max, "material_point_sie"); this->volfrac = DCArrayKokkos(num_pts_max, "material_point_volfrac"); this->eroded = DCArrayKokkos(num_pts_max, "material_point_eroded"); + this->q_flux = DCArrayKokkos(num_rk, num_pts_max, num_dims, "material_point_heat_flux"); }; // end method // initialization method for arbitrary-order FE (num_rk_storage_bins, num_pts_max, num_dims) @@ -187,10 +192,13 @@ struct MaterialCorner_t DCArrayKokkos force; ///< Corner force for the material + DCArrayKokkos q_flux; ///< Corner heat flux + // initialization method (num_corners, num_dims) void initialize(size_t num_corners_max, size_t num_dims) { this->force = DCArrayKokkos(num_corners_max, num_dims, "material_corner_force"); + this->q_flux = DCArrayKokkos(2, num_corners_max, num_dims, "material_corner_heat_flux"); // WARNING: hard coding rk2 }; // end method }; // end material corner @@ -205,12 +213,14 @@ struct corner_t { DCArrayKokkos force; ///< Corner force DCArrayKokkos mass; ///< Corner mass + DCArrayKokkos q_flux; ///< Corner heat flux // initialization method (num_corners, num_dims) void initialize(size_t num_corners, size_t num_dims) { this->force = DCArrayKokkos(num_corners, num_dims, "corner_force"); this->mass = DCArrayKokkos(num_corners, "corner_mass"); + this->q_flux = DCArrayKokkos(2, num_corners, num_dims, "corner_heat_flux"); // WARNING: hard coding rk2 }; // end method }; // end corner_t @@ -384,7 +394,7 @@ struct State_t CArray MaterialToMeshMaps; ///< access as MaterialToMeshMaps(mat_id).elem(mat_storage_lid) // --------------------------------------------------------------------- - // materialto material maps + // material to material maps // --------------------------------------------------------------------- corners_in_mat_t corners_in_mat_elem; ///< access the corner mat lid using (mat_elem_lid, corn_lid) points_in_mat_t points_in_mat_elem; ///< for accessing e.g., guass points mat lid with arbitrary-order FE From 699f5fb5ddc4f8a44d0616e0397832349548daf7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CAdrian-Diaz=E2=80=9D?= <“adriandiaz1117@gmail.com”> Date: Wed, 4 Sep 2024 22:39:25 -0600 Subject: [PATCH 189/233] ENH: expose ROL option --- .../Simulation_Parameters/Optimization_Options.h | 3 ++- src/Parallel-Solvers/Solver.cpp | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/Parallel-Solvers/Simulation_Parameters/Optimization_Options.h b/src/Parallel-Solvers/Simulation_Parameters/Optimization_Options.h index f86410f39..df209b375 100644 --- a/src/Parallel-Solvers/Simulation_Parameters/Optimization_Options.h +++ b/src/Parallel-Solvers/Simulation_Parameters/Optimization_Options.h @@ -106,6 +106,7 @@ struct ROL_Params: Yaml::DerivedFields { double gradient_tolerance = 1e-5; double constraint_tolerance = 1e-5; int iteration_limit = 100; + int subproblem_iteration_limit = 20; std::string subproblem_algorithm_string; @@ -131,7 +132,7 @@ struct ROL_Params: Yaml::DerivedFields { IMPL_YAML_SERIALIZABLE_FOR(ROL_Params, subproblem_algorithm, initial_constraint_penalty, step_tolerance, constraint_tolerance, - gradient_tolerance, iteration_limit + gradient_tolerance, iteration_limit, subproblem_iteration_limit ) struct Optimization_Options: Yaml::DerivedFields { diff --git a/src/Parallel-Solvers/Solver.cpp b/src/Parallel-Solvers/Solver.cpp index 71143f055..f0f94699a 100644 --- a/src/Parallel-Solvers/Solver.cpp +++ b/src/Parallel-Solvers/Solver.cpp @@ -4002,7 +4002,7 @@ void Solver::set_rol_params(Teuchos::RCP parlist) parlist->sublist("Step").sublist("Augmented Lagrangian").set("Print Intermediate Optimization History", false); parlist->sublist("Step").sublist("Augmented Lagrangian").set("Subproblem Step Type", simparam.optimization_options.rol_params.subproblem_algorithm_string); - parlist->sublist("Step").sublist("Augmented Lagrangian").set("Subproblem Iteration Limit", (int) 20); + parlist->sublist("Step").sublist("Augmented Lagrangian").set("Subproblem Iteration Limit", simparam.optimization_options.rol_params.subproblem_iteration_limit); parlist->sublist("Step").sublist("Moreau-Yosida Penalty").set("Initial Penalty Parameter", (double) 1e-9); parlist->sublist("Step").sublist("Moreau-Yosida Penalty").set("Penalty Parameter Growth Factor", (double) 1.5); From 8623c2565bd19bd3ab079400fa15774921adb6bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CAdrian-Diaz=E2=80=9D?= <“adriandiaz1117@gmail.com”> Date: Wed, 4 Sep 2024 22:39:40 -0600 Subject: [PATCH 190/233] BUG: missing yaml parameter --- .../FEA_Module/Thermo_Elasticity_Parameters.h | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Parallel-Solvers/Simulation_Parameters/FEA_Module/Thermo_Elasticity_Parameters.h b/src/Parallel-Solvers/Simulation_Parameters/FEA_Module/Thermo_Elasticity_Parameters.h index 54c12cc17..a4859abe7 100644 --- a/src/Parallel-Solvers/Simulation_Parameters/FEA_Module/Thermo_Elasticity_Parameters.h +++ b/src/Parallel-Solvers/Simulation_Parameters/FEA_Module/Thermo_Elasticity_Parameters.h @@ -16,6 +16,7 @@ struct Thermo_Elasticity_Parameters real_t constant_pressure = 0; real_t constant_stress[6]; bool constant_stress_flag = false; + bool pressure_vessel_flag = false; bool muelu_parameters_xml_file = false; std::string xml_parameters_file_name = "elasticity3D.xml"; From 83c984f222fb3a497b57f270f69986078c1d27b1 Mon Sep 17 00:00:00 2001 From: Jacob Moore Date: Thu, 5 Sep 2024 08:32:35 -0500 Subject: [PATCH 191/233] WIP: Save commit --- .../SGTM_solver_3D/include/sgtm_solver_3D.h | 9 +-- .../SGTM_solver_3D/src/energy_sgtm.cpp | 2 +- .../Solvers/SGTM_solver_3D/src/properties.cpp | 2 +- .../SGTM_solver_3D/src/sgtm_execute.cpp | 76 ++++++++++++++++++- .../Solvers/SGTM_solver_3D/src/sgtm_setup.cpp | 69 +++++------------ .../SGTM_solver_3D/src/time_integration.cpp | 6 +- .../src/common/include/state.h | 2 +- single-node-refactor/src/main.cpp | 4 +- 8 files changed, 105 insertions(+), 65 deletions(-) diff --git a/single-node-refactor/src/Solvers/SGTM_solver_3D/include/sgtm_solver_3D.h b/single-node-refactor/src/Solvers/SGTM_solver_3D/include/sgtm_solver_3D.h index 9712f2ba1..21ed78894 100644 --- a/single-node-refactor/src/Solvers/SGTM_solver_3D/include/sgtm_solver_3D.h +++ b/single-node-refactor/src/Solvers/SGTM_solver_3D/include/sgtm_solver_3D.h @@ -153,12 +153,6 @@ class SGTM3D : public Solver const DCArrayKokkos& corner_mass) const; // **** Functions defined in boundary.cpp **** // - void boundary_velocity( - const Mesh_t& mesh, - const BoundaryCondition_t& Boundary, - DCArrayKokkos& node_vel, - const double time_value) const; - void boundary_temperature( const Mesh_t& mesh, const BoundaryCondition_t& Boundary, @@ -272,7 +266,8 @@ class SGTM3D : public Solver void rk_init( DCArrayKokkos& node_coords, DCArrayKokkos& node_vel, - DCArrayKokkos& MaterialPoints_sie, + DCArrayKokkos& node_temp, + DCArrayKokkos& MaterialPoints_q_flux, DCArrayKokkos& MaterialPoints_stress, const size_t num_dims, const size_t num_elems, diff --git a/single-node-refactor/src/Solvers/SGTM_solver_3D/src/energy_sgtm.cpp b/single-node-refactor/src/Solvers/SGTM_solver_3D/src/energy_sgtm.cpp index c6bba2380..b9dbf86e5 100644 --- a/single-node-refactor/src/Solvers/SGTM_solver_3D/src/energy_sgtm.cpp +++ b/single-node-refactor/src/Solvers/SGTM_solver_3D/src/energy_sgtm.cpp @@ -38,7 +38,7 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ///////////////////////////////////////////////////////////////////////////// /// -/// \fn update_energy +/// \fn update_temperature /// /// \brief Evolves the specific internal energy /// diff --git a/single-node-refactor/src/Solvers/SGTM_solver_3D/src/properties.cpp b/single-node-refactor/src/Solvers/SGTM_solver_3D/src/properties.cpp index 906bc9c11..62c63c770 100644 --- a/single-node-refactor/src/Solvers/SGTM_solver_3D/src/properties.cpp +++ b/single-node-refactor/src/Solvers/SGTM_solver_3D/src/properties.cpp @@ -248,7 +248,7 @@ void SGTM3D::update_state( } // end for i,j } // end if on eroded }); // end parallel for - } // end if elem errosion + } // end if elem erosion return; } // end method to update state diff --git a/single-node-refactor/src/Solvers/SGTM_solver_3D/src/sgtm_execute.cpp b/single-node-refactor/src/Solvers/SGTM_solver_3D/src/sgtm_execute.cpp index b95ecf650..a8337fba0 100644 --- a/single-node-refactor/src/Solvers/SGTM_solver_3D/src/sgtm_execute.cpp +++ b/single-node-refactor/src/Solvers/SGTM_solver_3D/src/sgtm_execute.cpp @@ -205,7 +205,8 @@ void SGTM3D::execute(SimulationParameters_t& SimulationParamaters, // save the values at t_n rk_init(State.node.coords, State.node.vel, - State.MaterialPoints(mat_id).sie, + State.node.temp, + State.MaterialPoints(mat_id).q_flux, State.MaterialPoints(mat_id).stress, mesh.num_dims, mesh.num_elems, @@ -217,6 +218,79 @@ void SGTM3D::execute(SimulationParameters_t& SimulationParamaters, for (size_t rk_stage = 0; rk_stage < rk_num_stages; rk_stage++) { + // ---- calculate the temperature gradient ---- + for(size_t mat_id = 0; mat_id < num_mats; mat_id++){ + + size_t num_mat_elems = State.MaterialToMeshMaps(mat_id).num_material_elems; + + + // get_temp_gradient(); + + // calc_elem_heat_flux(); + + + + // get_force(Materials, + // mesh, + // State.GaussPoints.vol, + // State.GaussPoints.div, + // State.MaterialPoints(mat_id).eroded, + // State.corner.force, + // State.node.coords, + // State.node.vel, + // State.MaterialPoints(mat_id).den, + // State.MaterialPoints(mat_id).sie, + // State.MaterialPoints(mat_id).pres, + // State.MaterialPoints(mat_id).stress, + // State.MaterialPoints(mat_id).sspd, + // State.MaterialPoints(mat_id).statev, + // State.MaterialCorners(mat_id).force, + // State.MaterialPoints(mat_id).volfrac, + // State.corners_in_mat_elem, + // State.MaterialToMeshMaps(mat_id).elem, + // num_mat_elems, + // mat_id, + // fuzz, + // small, + // dt, + // rk_alpha); + + } // end for mat_id + + // ---- Update nodal temperature ---- // + + + // ---- apply temperature boundary conditions to the boundary patches---- // + + + // ---- Calculate cell volume for next time step ---- + geometry::get_vol(State.GaussPoints.vol, State.node.coords, mesh); + + // ---- Calculate MaterialPoints state (den, pres, sound speed, stress) for next time step ---- + // for(size_t mat_id = 0; mat_id < num_mats; mat_id++){ + + // size_t num_mat_elems = State.MaterialToMeshMaps(mat_id).num_material_elems; + + // update_state(Materials, + // mesh, + // State.node.coords, + // State.node.vel, + // State.MaterialPoints(mat_id).den, + // State.MaterialPoints(mat_id).pres, + // State.MaterialPoints(mat_id).stress, + // State.MaterialPoints(mat_id).sspd, + // State.MaterialPoints(mat_id).sie, + // State.GaussPoints.vol, + // State.MaterialPoints(mat_id).mass, + // State.MaterialPoints(mat_id).statev, + // State.MaterialPoints(mat_id).eroded, + // State.MaterialToMeshMaps(mat_id).elem, + // dt, + // rk_alpha, + // num_mat_elems, + // mat_id); + // } // end for mat_id + } // end of RK loop // increment the time diff --git a/single-node-refactor/src/Solvers/SGTM_solver_3D/src/sgtm_setup.cpp b/single-node-refactor/src/Solvers/SGTM_solver_3D/src/sgtm_setup.cpp index 6da45c10a..1b1a5e5fb 100644 --- a/single-node-refactor/src/Solvers/SGTM_solver_3D/src/sgtm_setup.cpp +++ b/single-node-refactor/src/Solvers/SGTM_solver_3D/src/sgtm_setup.cpp @@ -448,54 +448,23 @@ void SGTM3D::setup(SimulationParameters_t& SimulationParamaters, init_corner_node_masses_zero(mesh, State.node.mass, State.corner.mass); // calculate corner and node masses on the mesh - if (mesh.num_dims == 3) { - for (int mat_id = 0; mat_id < num_mats; mat_id++) { - size_t num_mat_elems = State.MaterialToMeshMaps(mat_id).num_material_elems; - - calc_corner_mass(Materials, - mesh, - State.node.coords, - State.node.mass, - State.corner.mass, - State.MaterialPoints(mat_id).mass, - State.MaterialToMeshMaps(mat_id).elem, - num_mat_elems); - } // end for mat_id - - calc_node_mass(mesh, - State.node.coords, - State.node.mass, - State.corner.mass); - } - else{ - // 2D RZ - // // calculate the corner massess if 2D - // if (mesh.num_dims == 2) { - // FOR_ALL(elem_gid, 0, mesh.num_elems, { - // // facial area of the corners - // double corner_areas_array[4]; - - // ViewCArrayKokkos corner_areas(&corner_areas_array[0], 4); - // ViewCArrayKokkos elem_node_gids(&mesh.nodes_in_elem(elem_gid, 0), 4); - - // geometry::get_area_weights2D(corner_areas, elem_gid, node_coords, elem_node_gids); - - // // loop over the corners of the element and calculate the mass - // for (size_t corner_lid = 0; corner_lid < 4; corner_lid++) { - // size_t corner_gid = mesh.corners_in_elem(elem_gid, corner_lid); - // corner_mass(corner_gid) = corner_areas(corner_lid) * MaterialPoints.den(elem_gid); // node radius is added later - // } // end for over corners - // }); - // - // - // FOR_ALL(nodes_gid=0; nodes_gid& node_coords, DCArrayKokkos& node_vel, - DCArrayKokkos& MaterialPoints_sie, + DCArrayKokkos& node_temp, + DCArrayKokkos& MaterialPoints_q_flux, DCArrayKokkos& MaterialPoints_stress, const size_t num_dims, const size_t num_elems, @@ -66,9 +67,9 @@ void SGTM3D::rk_init(DCArrayKokkos& node_coords, for (size_t j = 0; j < 3; j++) { MaterialPoints_stress(0, matpt_lid, i, j) = MaterialPoints_stress(1, matpt_lid, i, j); } + MaterialPoints_q_flux(0, matpt_lid, i) = MaterialPoints_q_flux(1, matpt_lid, i); } // end for - MaterialPoints_sie(0, matpt_lid) = MaterialPoints_sie(1, matpt_lid); }); // end parallel for // save nodal quantities @@ -77,6 +78,7 @@ void SGTM3D::rk_init(DCArrayKokkos& node_coords, node_coords(0, node_gid, i) = node_coords(1, node_gid, i); node_vel(0, node_gid, i) = node_vel(1, node_gid, i); } + node_temp(0, node_gid) = node_temp(1, node_gid); }); // end parallel for Kokkos::fence(); diff --git a/single-node-refactor/src/common/include/state.h b/single-node-refactor/src/common/include/state.h index 6aff9ffb5..12ed5127a 100644 --- a/single-node-refactor/src/common/include/state.h +++ b/single-node-refactor/src/common/include/state.h @@ -213,7 +213,7 @@ struct corner_t { DCArrayKokkos force; ///< Corner force DCArrayKokkos mass; ///< Corner mass - DCArrayKokkos q_flux; ///< Corner heat flux + DCArrayKokkos q_flux; ///< Corner heat flux // initialization method (num_corners, num_dims) void initialize(size_t num_corners, size_t num_dims) diff --git a/single-node-refactor/src/main.cpp b/single-node-refactor/src/main.cpp index 8e832b21c..78c7f84b9 100644 --- a/single-node-refactor/src/main.cpp +++ b/single-node-refactor/src/main.cpp @@ -85,10 +85,10 @@ int main(int argc, char* argv[]) auto time_run = std::chrono::high_resolution_clock::now(); - driver->run(); + driver->execute(); time_now = std::chrono::high_resolution_clock::now(); calc_time = std::chrono::duration_cast(time_now - time_setup).count(); - printf("\n**** Total time to run driver in seconds %f ****\n\n", calc_time * 1e-9); + printf("\n**** Total time to execute driver in seconds %f ****\n\n", calc_time * 1e-9); driver->finalize(); From 3c5db1cd4c584a53a68daf3a1914680ede828d33 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CAdrian-Diaz=E2=80=9D?= <“adriandiaz1117@gmail.com”> Date: Mon, 12 Aug 2024 22:56:28 -0600 Subject: [PATCH 192/233] ENH: refactor dynamic objective calls --- .../Fierro_Optimization_Objective.hpp | 14 ++- .../SGH_Solver/include/FEA_Module_SGH.h | 1 - .../SGH_Solver/src/FEA_Module_SGH.cpp | 90 ++----------------- .../Kinetic_Energy_Minimize.h | 85 ++++++++++++++++++ 4 files changed, 105 insertions(+), 85 deletions(-) diff --git a/src/Parallel-Solvers/Optimization_Modules/Fierro_Optimization_Objective.hpp b/src/Parallel-Solvers/Optimization_Modules/Fierro_Optimization_Objective.hpp index d765f13c5..6aad228bf 100644 --- a/src/Parallel-Solvers/Optimization_Modules/Fierro_Optimization_Objective.hpp +++ b/src/Parallel-Solvers/Optimization_Modules/Fierro_Optimization_Objective.hpp @@ -118,13 +118,23 @@ class FierroOptimizationObjective : public ROL::Objective { public: bool time_accumulation; - real_t objective_accumulation; + real_t objective_accumulation, global_objective_accumulation; FierroOptimizationObjective(){ - objective_accumulation = 0; + global_objective_accumulation = objective_accumulation = 0; time_accumulation = false; } + virtual void step_accumulation(const real_t& dt, const size_t& cycle, const size_t& rk_level) {} + + // collect local objective values + virtual void global_reduction() { + + MPI_Allreduce(&objective_accumulation, &global_objective_accumulation, 1, MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD); + + objective_accumulation = global_objective_accumulation; + } + }; // class ObjectiveMMA diff --git a/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/include/FEA_Module_SGH.h b/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/include/FEA_Module_SGH.h index 4d0f4ffac..f0aa4ba94 100644 --- a/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/include/FEA_Module_SGH.h +++ b/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/include/FEA_Module_SGH.h @@ -701,7 +701,6 @@ class FEA_Module_SGH : public FEA_Module int rk_num_bins; // optimization flags and data - bool kinetic_energy_objective; Teuchos::RCP> dynamic_checkpoint_set; Teuchos::RCP> cached_dynamic_checkpoints; int num_active_checkpoints; diff --git a/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/FEA_Module_SGH.cpp b/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/FEA_Module_SGH.cpp index 2036ce050..7d4a5d69b 100644 --- a/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/FEA_Module_SGH.cpp +++ b/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/FEA_Module_SGH.cpp @@ -67,7 +67,7 @@ // optimization #include "ROL_Solver.hpp" -#include "Kinetic_Energy_Minimize.h" +#include "Fierro_Optimization_Objective.hpp" #define MAX_ELEM_NODES 8 #define STRAIN_EPSILON 0.000000001 @@ -137,9 +137,6 @@ FEA_Module_SGH::FEA_Module_SGH( noutput = 0; init_output(); - // optimization flags - kinetic_energy_objective = false; - // set parameters Dynamic_Options dynamic_options = simparam->dynamic_options; time_value = dynamic_options.time_value; @@ -929,6 +926,7 @@ void FEA_Module_SGH::sgh_solve() std::vector> FEA_Module_My_TO_Modules = simparam->FEA_Module_My_TO_Modules; problem = Explicit_Solver_Pointer_->problem; // Pointer to ROL optimization problem object ROL::Ptr> obj_pointer; + FierroOptimizationObjective* objective_function; bool topology_optimization_on = simparam->topology_optimization_on; bool shape_optimization_on = simparam->shape_optimization_on; bool use_solve_checkpoints = simparam->optimization_options.use_solve_checkpoints; @@ -938,6 +936,7 @@ void FEA_Module_SGH::sgh_solve() bool dispensable_found = false; bool optimization_on = simparam->topology_optimization_on||simparam->shape_optimization_on; num_active_checkpoints = 0; + bool time_accumulation; if(simparam->optimization_options.disable_forward_solve_output){ @@ -958,10 +957,8 @@ void FEA_Module_SGH::sgh_solve() // simple setup to just request KE for now; above loop to be expanded and used later for scanning modules if (topology_optimization_on||shape_optimization_on) { obj_pointer = problem->getObjective(); - KineticEnergyMinimize_TopOpt& kinetic_energy_minimize_function = dynamic_cast(*obj_pointer); - kinetic_energy_minimize_function.objective_accumulation = 0; - global_objective_accumulation = objective_accumulation = 0; - kinetic_energy_objective = true; + objective_function = dynamic_cast(obj_pointer.getRawPtr()); + time_accumulation = objective_function->time_accumulation; if(!use_solve_checkpoints){ if (max_time_steps + 1 > forward_solve_velocity_data->size()) { old_max_forward_buffer = forward_solve_velocity_data->size(); @@ -1722,71 +1719,8 @@ void FEA_Module_SGH::sgh_solve() } // kinetic energy accumulation - if (kinetic_energy_objective) { - const_vec_array node_velocities_interface; - const_vec_array previous_node_velocities_interface; - if(use_solve_checkpoints){ - node_velocities_interface = all_node_velocities_distributed->getLocalView(Tpetra::Access::ReadOnly); - previous_node_velocities_interface = previous_node_velocities_distributed->getLocalView(Tpetra::Access::ReadOnly); - } - else{ - node_velocities_interface = (*forward_solve_velocity_data)[cycle + 1]->getLocalView(Tpetra::Access::ReadOnly); - previous_node_velocities_interface = (*forward_solve_velocity_data)[cycle]->getLocalView(Tpetra::Access::ReadOnly); - } - KE_loc_sum = 0.0; - KE_sum = 0.0; - // extensive KE - if(simparam->optimization_options.optimization_objective_regions.size()){ - int nobj_volumes = simparam->optimization_options.optimization_objective_regions.size(); - const_vec_array all_initial_node_coords = all_initial_node_coords_distributed->getLocalView(Tpetra::Access::ReadOnly); - REDUCE_SUM_CLASS(node_gid, 0, nlocal_nodes, KE_loc_sum, { - double ke = 0; - double current_node_coords[3]; - bool contained = false; - current_node_coords[0] = all_initial_node_coords(node_gid, 0); - current_node_coords[1] = all_initial_node_coords(node_gid, 1); - current_node_coords[2] = all_initial_node_coords(node_gid, 2); - for(int ivolume = 0; ivolume < nobj_volumes; ivolume++){ - if(simparam->optimization_options.optimization_objective_regions(ivolume).contains(current_node_coords)){ - contained = true; - } - } - if(contained){ - for (size_t dim = 0; dim < num_dim; dim++) { - // midpoint integration approximation - ke += (node_velocities_interface(node_gid, dim) + previous_node_velocities_interface(node_gid, dim)) * - (node_velocities_interface(node_gid, dim) + previous_node_velocities_interface(node_gid, dim)) / 4; // 1/2 at end - } // end for - } - - if (num_dim == 2) { - KE_loc_sum += node_mass(node_gid) * node_coords(rk_level, node_gid, 1) * ke; - } - else{ - KE_loc_sum += node_mass(node_gid) * ke; - } - }, KE_sum); - } - else{ - REDUCE_SUM_CLASS(node_gid, 0, nlocal_nodes, KE_loc_sum, { - double ke = 0; - for (size_t dim = 0; dim < num_dim; dim++) { - // midpoint integration approximation - ke += (node_velocities_interface(node_gid, dim) + previous_node_velocities_interface(node_gid, dim)) * - (node_velocities_interface(node_gid, dim) + previous_node_velocities_interface(node_gid, dim)) / 4; // 1/2 at end - } // end for - - if (num_dim == 2) { - KE_loc_sum += node_mass(node_gid) * node_coords(rk_level, node_gid, 1) * ke; - } - else{ - KE_loc_sum += node_mass(node_gid) * ke; - } - }, KE_sum); - } - Kokkos::fence(); - KE_sum = 0.5 * KE_sum; - objective_accumulation += KE_sum * dt; + if (time_accumulation) { + objective_function->step_accumulation(dt, cycle, rk_level); } } @@ -1850,15 +1784,7 @@ void FEA_Module_SGH::sgh_solve() // simple setup to just calculate KE minimize objective for now if (topology_optimization_on) { - KineticEnergyMinimize_TopOpt& kinetic_energy_minimize_function = dynamic_cast(*obj_pointer); - - // collect local objective values - MPI_Allreduce(&objective_accumulation, &global_objective_accumulation, 1, MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD); - kinetic_energy_minimize_function.objective_accumulation = global_objective_accumulation; - - // if (myrank == 0) { - // std::cout << "CURRENT TIME INTEGRAL OF KINETIC ENERGY " << global_objective_accumulation << std::endl; - // } + objective_function->global_reduction(); } auto time_2 = std::chrono::high_resolution_clock::now(); diff --git a/src/Parallel-Solvers/Parallel-Explicit/Topology_Optimization/Kinetic_Energy_Minimize.h b/src/Parallel-Solvers/Parallel-Explicit/Topology_Optimization/Kinetic_Energy_Minimize.h index fc7937718..0b6c81581 100644 --- a/src/Parallel-Solvers/Parallel-Explicit/Topology_Optimization/Kinetic_Energy_Minimize.h +++ b/src/Parallel-Solvers/Parallel-Explicit/Topology_Optimization/Kinetic_Energy_Minimize.h @@ -137,7 +137,10 @@ typedef MV::dual_view_type dual_vec_array; public: bool nodal_density_flag_; int last_comm_step, last_solve_step, current_step; + int num_dim; size_t nvalid_modules; + size_t nlocal_nodes; + DViewCArrayKokkos node_mass, node_coords; std::vector valid_fea_modules; // modules that may interface with this objective function FEA_MODULE_TYPE set_module_type; // std::string my_fea_module = "SGH"; @@ -151,16 +154,23 @@ typedef MV::dual_view_type dual_vec_array; valid_fea_modules.push_back(FEA_MODULE_TYPE::Dynamic_Elasticity); nvalid_modules = valid_fea_modules.size(); objective_sign = 1; + num_dim = Explicit_Solver_Pointer_->simparam.num_dims; const Simulation_Parameters& simparam = Explicit_Solver_Pointer_->simparam; for (const auto& fea_module : Explicit_Solver_Pointer_->fea_modules) { for (int ivalid = 0; ivalid < nvalid_modules; ivalid++) { if (fea_module->Module_Type == FEA_MODULE_TYPE::SGH) { FEM_SGH_ = dynamic_cast(fea_module); set_module_type = FEA_MODULE_TYPE::SGH; + node_mass = FEM_SGH_->node_mass; + node_coords = FEM_SGH_->node_coords; + nlocal_nodes = FEM_SGH_->nlocal_nodes; } if (fea_module->Module_Type == FEA_MODULE_TYPE::Dynamic_Elasticity) { FEM_Dynamic_Elasticity_ = dynamic_cast(fea_module); set_module_type = FEA_MODULE_TYPE::Dynamic_Elasticity; + node_mass = FEM_Dynamic_Elasticity_->node_mass; + node_coords = FEM_Dynamic_Elasticity_->node_coords; + nlocal_nodes = FEM_Dynamic_Elasticity_->nlocal_nodes; } } } @@ -355,6 +365,81 @@ typedef MV::dual_view_type dual_vec_array; } } + /* -------------------------------------------------------------------------------------- + Compute time integral contribution for this objective function form + ----------------------------------------------------------------------------------------- */ + void step_accumulation(const real_t& dt, const size_t& cycle, const size_t& rk_level) { + + const_vec_array node_velocities_interface; + const_vec_array previous_node_velocities_interface; + bool use_solve_checkpoints = FEM_SGH_->simparam->optimization_options.use_solve_checkpoints; + if(use_solve_checkpoints){ + node_velocities_interface = FEM_SGH_->all_node_velocities_distributed->getLocalView(Tpetra::Access::ReadOnly); + previous_node_velocities_interface = FEM_SGH_->previous_node_velocities_distributed->getLocalView(Tpetra::Access::ReadOnly); + } + else{ + auto forward_solve_velocity_data = FEM_SGH_->forward_solve_velocity_data; + node_velocities_interface = (*forward_solve_velocity_data)[cycle + 1]->getLocalView(Tpetra::Access::ReadOnly); + previous_node_velocities_interface = (*forward_solve_velocity_data)[cycle]->getLocalView(Tpetra::Access::ReadOnly); + } + + double KE_sum = 0.0; + double KE_loc_sum = 0.0; + + // extensive KE + if(FEM_SGH_->simparam->optimization_options.optimization_objective_regions.size()){ + int nobj_volumes = FEM_SGH_->simparam->optimization_options.optimization_objective_regions.size(); + const_vec_array all_initial_node_coords = FEM_SGH_->all_initial_node_coords_distributed->getLocalView(Tpetra::Access::ReadOnly); + REDUCE_SUM_CLASS(node_gid, 0, nlocal_nodes, KE_loc_sum, { + double ke = 0; + double current_node_coords[3]; + bool contained = false; + current_node_coords[0] = all_initial_node_coords(node_gid, 0); + current_node_coords[1] = all_initial_node_coords(node_gid, 1); + current_node_coords[2] = all_initial_node_coords(node_gid, 2); + for(int ivolume = 0; ivolume < nobj_volumes; ivolume++){ + if(FEM_SGH_->simparam->optimization_options.optimization_objective_regions(ivolume).contains(current_node_coords)){ + contained = true; + } + } + if(contained){ + for (size_t dim = 0; dim < num_dim; dim++) { + // midpoint integration approximation + ke += (node_velocities_interface(node_gid, dim) + previous_node_velocities_interface(node_gid, dim)) * + (node_velocities_interface(node_gid, dim) + previous_node_velocities_interface(node_gid, dim)) / 4; // 1/2 at end + } // end for + } + + if (num_dim == 2) { + KE_loc_sum += node_mass(node_gid) * node_coords(rk_level, node_gid, 1) * ke; + } + else{ + KE_loc_sum += node_mass(node_gid) * ke; + } + }, KE_sum); + } + else{ + REDUCE_SUM_CLASS(node_gid, 0, nlocal_nodes, KE_loc_sum, { + double ke = 0; + for (size_t dim = 0; dim < num_dim; dim++) { + // midpoint integration approximation + ke += (node_velocities_interface(node_gid, dim) + previous_node_velocities_interface(node_gid, dim)) * + (node_velocities_interface(node_gid, dim) + previous_node_velocities_interface(node_gid, dim)) / 4; // 1/2 at end + } // end for + + if (num_dim == 2) { + KE_loc_sum += node_mass(node_gid) * node_coords(rk_level, node_gid, 1) * ke; + } + else{ + KE_loc_sum += node_mass(node_gid) * ke; + } + }, KE_sum); + } + Kokkos::fence(); + KE_sum = 0.5 * KE_sum; + objective_accumulation += KE_sum * dt; + } + /* -------------------------------------------------------------------------------------- Update objective value with the current design variable vector, z ----------------------------------------------------------------------------------------- */ From 05ea48065b49d949a5633b567734079a94eb9833 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CAdrian-Diaz=E2=80=9D?= <“adriandiaz1117@gmail.com”> Date: Tue, 13 Aug 2024 14:12:16 -0600 Subject: [PATCH 193/233] BUG: dont use host class pointer in device kernel --- .../Topology_Optimization/Kinetic_Energy_Minimize.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Parallel-Solvers/Parallel-Explicit/Topology_Optimization/Kinetic_Energy_Minimize.h b/src/Parallel-Solvers/Parallel-Explicit/Topology_Optimization/Kinetic_Energy_Minimize.h index 0b6c81581..49eed273e 100644 --- a/src/Parallel-Solvers/Parallel-Explicit/Topology_Optimization/Kinetic_Energy_Minimize.h +++ b/src/Parallel-Solvers/Parallel-Explicit/Topology_Optimization/Kinetic_Energy_Minimize.h @@ -385,10 +385,10 @@ typedef MV::dual_view_type dual_vec_array; double KE_sum = 0.0; double KE_loc_sum = 0.0; - // extensive KE if(FEM_SGH_->simparam->optimization_options.optimization_objective_regions.size()){ int nobj_volumes = FEM_SGH_->simparam->optimization_options.optimization_objective_regions.size(); + auto optimization_objective_regions = FEM_SGH_->simparam->optimization_options.optimization_objective_regions; const_vec_array all_initial_node_coords = FEM_SGH_->all_initial_node_coords_distributed->getLocalView(Tpetra::Access::ReadOnly); REDUCE_SUM_CLASS(node_gid, 0, nlocal_nodes, KE_loc_sum, { double ke = 0; @@ -398,7 +398,7 @@ typedef MV::dual_view_type dual_vec_array; current_node_coords[1] = all_initial_node_coords(node_gid, 1); current_node_coords[2] = all_initial_node_coords(node_gid, 2); for(int ivolume = 0; ivolume < nobj_volumes; ivolume++){ - if(FEM_SGH_->simparam->optimization_options.optimization_objective_regions(ivolume).contains(current_node_coords)){ + if(optimization_objective_regions(ivolume).contains(current_node_coords)){ contained = true; } } From 8f48419d7663326eb1d9d3e0d731648fa4e7b0d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CAdrian-Diaz=E2=80=9D?= <“adriandiaz1117@gmail.com”> Date: Thu, 15 Aug 2024 01:15:16 -0600 Subject: [PATCH 194/233] WIP: refactor adjoint equations for generic objective --- src/Parallel-Solvers/FEA_Module.h | 4 ++ .../Fierro_Optimization_Objective.hpp | 10 ++++ .../SGH_Solver/src/FEA_Module_SGH.cpp | 2 +- .../SGH_Solver/src/sgh_optimization.cpp | 52 +++++++++++++------ 4 files changed, 51 insertions(+), 17 deletions(-) diff --git a/src/Parallel-Solvers/FEA_Module.h b/src/Parallel-Solvers/FEA_Module.h index 954ec2119..ecd33b2ad 100644 --- a/src/Parallel-Solvers/FEA_Module.h +++ b/src/Parallel-Solvers/FEA_Module.h @@ -67,6 +67,7 @@ class Problem; } // namespace ROL class Simulation_Parameters; +class FierroOptimizationObjective; enum class FEA_MODULE_TYPE; enum class BOUNDARY_TYPE; @@ -349,6 +350,9 @@ class FEA_Module // patch ids in bdy set size_t num_bdy_sets; DynamicRaggedRightArrayKokkos bdy_patches_in_set; + + //optimization data + FierroOptimizationObjective* objective_function; }; #endif // end HEADER_H diff --git a/src/Parallel-Solvers/Optimization_Modules/Fierro_Optimization_Objective.hpp b/src/Parallel-Solvers/Optimization_Modules/Fierro_Optimization_Objective.hpp index 6aad228bf..0bd516100 100644 --- a/src/Parallel-Solvers/Optimization_Modules/Fierro_Optimization_Objective.hpp +++ b/src/Parallel-Solvers/Optimization_Modules/Fierro_Optimization_Objective.hpp @@ -134,6 +134,16 @@ class FierroOptimizationObjective : public ROL::Objective { objective_accumulation = global_objective_accumulation; } + + //NOTE: these functions assign for every component of the gradient vector + //contributes to rate of change of adjoint vector due to term with velocity gradient of objective + virtual void velocity_gradient_adjoint_contribution(vec_array& adjoint_rate_vector){} + + //contributes to rate of change of adjoint vector due to term with displacement gradient of objective + virtual void displacement_gradient_adjoint_contribution(vec_array& adjoint_rate_vector){} + + //contributes to rate of change of adjoint vector due to term with specific internal energy gradient of objective + virtual void sie_gradient_adjoint_contribution(vec_array& adjoint_rate_vector){} }; // class ObjectiveMMA diff --git a/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/FEA_Module_SGH.cpp b/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/FEA_Module_SGH.cpp index 7d4a5d69b..1a429d02a 100644 --- a/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/FEA_Module_SGH.cpp +++ b/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/FEA_Module_SGH.cpp @@ -926,7 +926,7 @@ void FEA_Module_SGH::sgh_solve() std::vector> FEA_Module_My_TO_Modules = simparam->FEA_Module_My_TO_Modules; problem = Explicit_Solver_Pointer_->problem; // Pointer to ROL optimization problem object ROL::Ptr> obj_pointer; - FierroOptimizationObjective* objective_function; + bool topology_optimization_on = simparam->topology_optimization_on; bool shape_optimization_on = simparam->shape_optimization_on; bool use_solve_checkpoints = simparam->optimization_options.use_solve_checkpoints; diff --git a/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/sgh_optimization.cpp b/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/sgh_optimization.cpp index c1c68234a..4b47a9403 100644 --- a/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/sgh_optimization.cpp +++ b/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/sgh_optimization.cpp @@ -915,10 +915,10 @@ void FEA_Module_SGH::compute_topology_optimization_adjoint_full(Teuchos::RCPvelocity_gradient_adjoint_contribution(midpoint_adjoint_vector); + FOR_ALL_CLASS(node_gid, 0, nlocal_nodes, { + real_t rate_of_change; + for (int idim = 0; idim < num_dim; idim++) { + rate_of_change = midpoint_adjoint_vector(node_gid, idim); + midpoint_adjoint_vector(node_gid, idim) = -rate_of_change * global_dt / node_mass(node_gid)/ 2 + previous_adjoint_vector(node_gid, idim); + } + }); // end parallel for + Kokkos::fence(); + // half step update for RK2 scheme; EQUATION 2 FOR_ALL_CLASS(node_gid, 0, nlocal_nodes, { real_t rate_of_change; @@ -1257,10 +1267,10 @@ void FEA_Module_SGH::compute_topology_optimization_adjoint_full(Teuchos::RCPvelocity_gradient_adjoint_contribution(current_adjoint_vector); + FOR_ALL_CLASS(node_gid, 0, nlocal_nodes, { + real_t rate_of_change; + for (int idim = 0; idim < num_dim; idim++) { + rate_of_change = current_adjoint_vector(node_gid, idim); + current_adjoint_vector(node_gid, idim) = -rate_of_change * global_dt / node_mass(node_gid) + previous_adjoint_vector(node_gid, idim); + } + }); // end parallel for + Kokkos::fence(); + // full step update with midpoint gradient for RK2 scheme; EQUATION 2 FOR_ALL_CLASS(node_gid, 0, nlocal_nodes, { real_t rate_of_change; From 03bd8b6a65f1d24a0004ad9a9f8b5e10a3bac7ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CAdrian-Diaz=E2=80=9D?= <“adriandiaz1117@gmail.com”> Date: Thu, 15 Aug 2024 12:18:45 -0600 Subject: [PATCH 195/233] WIP: refactor adjoint for generic objective --- .../Fierro_Optimization_Objective.hpp | 15 ++++- .../SGH_Solver/src/sgh_optimization.cpp | 67 +++++++++---------- .../Kinetic_Energy_Minimize.h | 16 +++++ 3 files changed, 60 insertions(+), 38 deletions(-) diff --git a/src/Parallel-Solvers/Optimization_Modules/Fierro_Optimization_Objective.hpp b/src/Parallel-Solvers/Optimization_Modules/Fierro_Optimization_Objective.hpp index 0bd516100..25928162b 100644 --- a/src/Parallel-Solvers/Optimization_Modules/Fierro_Optimization_Objective.hpp +++ b/src/Parallel-Solvers/Optimization_Modules/Fierro_Optimization_Objective.hpp @@ -137,13 +137,22 @@ class FierroOptimizationObjective : public ROL::Objective { //NOTE: these functions assign for every component of the gradient vector //contributes to rate of change of adjoint vector due to term with velocity gradient of objective - virtual void velocity_gradient_adjoint_contribution(vec_array& adjoint_rate_vector){} + virtual void velocity_gradient_adjoint_contribution(vec_array& adjoint_rate_vector, const DViewCArrayKokkos& node_mass, + const DViewCArrayKokkos& elem_mass, const DViewCArrayKokkos& node_vel, + const DViewCArrayKokkos& node_coords, const DViewCArrayKokkos& elem_sie, + const size_t& rk_level){} //contributes to rate of change of adjoint vector due to term with displacement gradient of objective - virtual void displacement_gradient_adjoint_contribution(vec_array& adjoint_rate_vector){} + virtual void displacement_gradient_adjoint_contribution(vec_array& adjoint_rate_vector, const DViewCArrayKokkos& node_mass, + const DViewCArrayKokkos& elem_mass, const DViewCArrayKokkos& node_vel, + const DViewCArrayKokkos& node_coords, const DViewCArrayKokkos& elem_sie, + const size_t& rk_level){} //contributes to rate of change of adjoint vector due to term with specific internal energy gradient of objective - virtual void sie_gradient_adjoint_contribution(vec_array& adjoint_rate_vector){} + virtual void sie_gradient_adjoint_contribution(vec_array& adjoint_rate_vector, const DViewCArrayKokkos& node_mass, + const DViewCArrayKokkos& elem_mass, const DViewCArrayKokkos& node_vel, + const DViewCArrayKokkos& node_coords, const DViewCArrayKokkos& elem_sie, + const size_t& rk_level){} }; // class ObjectiveMMA diff --git a/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/sgh_optimization.cpp b/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/sgh_optimization.cpp index 4b47a9403..9358339e8 100644 --- a/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/sgh_optimization.cpp +++ b/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/sgh_optimization.cpp @@ -674,7 +674,7 @@ void FEA_Module_SGH::compute_topology_optimization_adjoint_full(Teuchos::RCPgetLocalView(Tpetra::Access::ReadOnly); psi_previous_adjoint_vector = (*psi_adjoint_vector_data)[cycle + 1]->getLocalView(Tpetra::Access::ReadOnly); } + + adjoint_vector_distributed->putScalar(0); + phi_adjoint_vector_distributed->putScalar(0); + psi_adjoint_vector_distributed->putScalar(0); vec_array midpoint_adjoint_vector = adjoint_vector_distributed->getLocalView(Tpetra::Access::ReadWrite); vec_array phi_midpoint_adjoint_vector = phi_adjoint_vector_distributed->getLocalView(Tpetra::Access::ReadWrite); vec_array psi_midpoint_adjoint_vector = psi_adjoint_vector_distributed->getLocalView(Tpetra::Access::ReadWrite); + // half step update for RK2 scheme; EQUATION 1 + objective_function->velocity_gradient_adjoint_contribution(midpoint_adjoint_vector, node_mass, elem_mass, node_vel, node_coords, elem_sie, rk_level); + if(optimization_objective_regions.size()){ int nobj_volumes = optimization_objective_regions.size(); const_vec_array all_initial_node_coords = all_initial_node_coords_distributed->getLocalView(Tpetra::Access::ReadOnly); @@ -915,10 +922,10 @@ void FEA_Module_SGH::compute_topology_optimization_adjoint_full(Teuchos::RCPvelocity_gradient_adjoint_contribution(midpoint_adjoint_vector); - FOR_ALL_CLASS(node_gid, 0, nlocal_nodes, { - real_t rate_of_change; - for (int idim = 0; idim < num_dim; idim++) { - rate_of_change = midpoint_adjoint_vector(node_gid, idim); - midpoint_adjoint_vector(node_gid, idim) = -rate_of_change * global_dt / node_mass(node_gid)/ 2 + previous_adjoint_vector(node_gid, idim); - } - }); // end parallel for - Kokkos::fence(); - // half step update for RK2 scheme; EQUATION 2 + objective_function->displacement_gradient_adjoint_contribution(phi_midpoint_adjoint_vector, node_mass, elem_mass, node_vel, node_coords, elem_sie, rk_level); FOR_ALL_CLASS(node_gid, 0, nlocal_nodes, { real_t rate_of_change; real_t matrix_contribution; @@ -982,9 +980,9 @@ void FEA_Module_SGH::compute_topology_optimization_adjoint_full(Teuchos::RCPdescribe(*fos,Teuchos::VERB_EXTREME); // half step update for RK2 scheme; EQUATION 3 + objective_function->sie_gradient_adjoint_contribution(psi_midpoint_adjoint_vector, node_mass, elem_mass, node_vel, node_coords, elem_sie, rk_level); FOR_ALL_CLASS(elem_gid, 0, rnum_elem, { real_t rate_of_change; real_t matrix_contribution; @@ -1004,9 +1003,9 @@ void FEA_Module_SGH::compute_topology_optimization_adjoint_full(Teuchos::RCPputScalar(0); + phi_adjoint_vector_distributed->putScalar(0); + psi_adjoint_vector_distributed->putScalar(0); vec_array current_adjoint_vector = adjoint_vector_distributed->getLocalView(Tpetra::Access::ReadWrite); vec_array phi_current_adjoint_vector = phi_adjoint_vector_distributed->getLocalView(Tpetra::Access::ReadWrite); vec_array psi_current_adjoint_vector = psi_adjoint_vector_distributed->getLocalView(Tpetra::Access::ReadWrite); + if(use_solve_checkpoints){ midpoint_adjoint_vector = midpoint_adjoint_vector_distributed->getLocalView(Tpetra::Access::ReadWrite); phi_midpoint_adjoint_vector = midpoint_phi_adjoint_vector_distributed->getLocalView(Tpetra::Access::ReadWrite); @@ -1232,6 +1235,7 @@ void FEA_Module_SGH::compute_topology_optimization_adjoint_full(Teuchos::RCPCPU_Time(); // full step update with midpoint gradient for RK2 scheme; EQUATION 1 + objective_function->velocity_gradient_adjoint_contribution(current_adjoint_vector, node_mass, elem_mass, node_vel, node_coords, elem_sie, rk_level); if(optimization_objective_regions.size()){ int nobj_volumes = optimization_objective_regions.size(); const_vec_array all_initial_node_coords = all_initial_node_coords_distributed->getLocalView(Tpetra::Access::ReadOnly); @@ -1267,10 +1271,10 @@ void FEA_Module_SGH::compute_topology_optimization_adjoint_full(Teuchos::RCPvelocity_gradient_adjoint_contribution(current_adjoint_vector); - FOR_ALL_CLASS(node_gid, 0, nlocal_nodes, { - real_t rate_of_change; - for (int idim = 0; idim < num_dim; idim++) { - rate_of_change = current_adjoint_vector(node_gid, idim); - current_adjoint_vector(node_gid, idim) = -rate_of_change * global_dt / node_mass(node_gid) + previous_adjoint_vector(node_gid, idim); - } - }); // end parallel for - Kokkos::fence(); // full step update with midpoint gradient for RK2 scheme; EQUATION 2 + objective_function->displacement_gradient_adjoint_contribution(phi_current_adjoint_vector, node_mass, elem_mass, node_vel, node_coords, elem_sie, rk_level); FOR_ALL_CLASS(node_gid, 0, nlocal_nodes, { real_t rate_of_change; real_t matrix_contribution; @@ -1336,7 +1332,7 @@ void FEA_Module_SGH::compute_topology_optimization_adjoint_full(Teuchos::RCPsie_gradient_adjoint_contribution(psi_current_adjoint_vector, node_mass, elem_mass, node_vel, node_coords, elem_sie, rk_level); FOR_ALL_CLASS(elem_gid, 0, rnum_elem, { real_t rate_of_change; real_t matrix_contribution; @@ -1356,10 +1353,10 @@ void FEA_Module_SGH::compute_topology_optimization_adjoint_full(Teuchos::RCPmyrank << std::endl; } + + //contributes to rate of change of adjoint vector due to term with velocity gradient of objective + void velocity_gradient_adjoint_contribution(vec_array& adjoint_rate_vector, const DViewCArrayKokkos& node_mass, + const DViewCArrayKokkos& elem_mass, const DViewCArrayKokkos& node_vel, + const DViewCArrayKokkos& node_coords, const DViewCArrayKokkos& elem_sie, + const size_t& rk_level){ + + + FOR_ALL_CLASS(node_gid, 0, nlocal_nodes, { + for (int idim = 0; idim < num_dim; idim++) { + adjoint_rate_vector(node_gid, idim) = node_mass(node_gid)*node_vel(rk_level, node_gid, idim); + } + }); // end parallel for + Kokkos::fence(); + } + }; #endif // end header guard From a76b0066de8ee031cd53c6f648a459b221dcb2ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CAdrian-Diaz=E2=80=9D?= <“adriandiaz1117@gmail.com”> Date: Thu, 15 Aug 2024 20:43:05 -0600 Subject: [PATCH 196/233] BUG: use midpoint evaluation --- .../SGH_Solver/src/sgh_optimization.cpp | 330 +++++------------- 1 file changed, 93 insertions(+), 237 deletions(-) diff --git a/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/sgh_optimization.cpp b/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/sgh_optimization.cpp index 9358339e8..7d8a39ce0 100644 --- a/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/sgh_optimization.cpp +++ b/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/sgh_optimization.cpp @@ -674,119 +674,117 @@ void FEA_Module_SGH::compute_topology_optimization_adjoint_full(Teuchos::RCP::iterator last_checkpoint = dynamic_checkpoint_set->end(); - --last_checkpoint; - previous_velocity_vector = previous_node_velocities_distributed->getLocalView(Tpetra::Access::ReadOnly); - previous_coordinate_vector = previous_node_coords_distributed->getLocalView(Tpetra::Access::ReadOnly); - previous_element_internal_energy = previous_element_internal_energy_distributed->getLocalView(Tpetra::Access::ReadOnly); - current_velocity_vector = last_checkpoint->get_vector_pointer(V_DATA)->getLocalView(Tpetra::Access::ReadOnly); - current_coordinate_vector = last_checkpoint->get_vector_pointer(U_DATA)->getLocalView(Tpetra::Access::ReadOnly); - current_element_internal_energy = last_checkpoint->get_vector_pointer(SIE_DATA)->getLocalView(Tpetra::Access::ReadOnly); - - } - else{ - previous_velocity_vector = (*forward_solve_velocity_data)[cycle + 1]->getLocalView(Tpetra::Access::ReadOnly); - current_velocity_vector = (*forward_solve_velocity_data)[cycle]->getLocalView(Tpetra::Access::ReadOnly); - - previous_coordinate_vector = (*forward_solve_coordinate_data)[cycle + 1]->getLocalView(Tpetra::Access::ReadOnly); - current_coordinate_vector = (*forward_solve_coordinate_data)[cycle]->getLocalView(Tpetra::Access::ReadOnly); - - previous_element_internal_energy = (*forward_solve_internal_energy_data)[cycle + 1]->getLocalView(Tpetra::Access::ReadOnly); - current_element_internal_energy = (*forward_solve_internal_energy_data)[cycle]->getLocalView(Tpetra::Access::ReadOnly); - } - - // interface of arrays for current implementation of force calculation - - FOR_ALL_CLASS(node_gid, 0, nlocal_nodes + nghost_nodes, { - for (int idim = 0; idim < num_dim; idim++) { - node_vel(rk_level, node_gid, idim) = current_velocity_vector(node_gid, idim); - node_coords(rk_level, node_gid, idim) = current_coordinate_vector(node_gid, idim); - } - }); - Kokkos::fence(); - - FOR_ALL_CLASS(elem_gid, 0, rnum_elem, { - elem_sie(rk_level, elem_gid) = current_element_internal_energy(elem_gid, 0); - }); - Kokkos::fence(); - - // set state according to phase data at this timestep - get_vol(); - - // ---- Calculate velocity diveregence for the element ---- - if (num_dim == 2) { - get_divergence2D(elem_div, - node_coords, - node_vel, - elem_vol); - } - else{ - get_divergence(elem_div, - node_coords, - node_vel, - elem_vol); - } // end if 2D - - // ---- Calculate elem state (den, pres, sound speed, stress) for next time step ---- - if (num_dim == 2) { - update_state2D(material, - *mesh, - node_coords, - node_vel, - elem_den, - elem_pres, - elem_stress, - elem_sspd, - elem_sie, - elem_vol, - elem_mass, - elem_mat_id, - 1.0, - cycle); - } - else{ - update_state(material, - *mesh, - node_coords, - node_vel, - elem_den, - elem_pres, - elem_stress, - elem_sspd, - elem_sie, - elem_vol, - elem_mass, - elem_mat_id, - 1.0, - cycle); - } - - if (num_dim == 2) { - get_force_sgh2D(material, - *mesh, - node_coords, - node_vel, - elem_den, - elem_sie, - elem_pres, - elem_stress, - elem_sspd, - elem_vol, - elem_div, - elem_mat_id, - corner_force, - 1.0, - cycle); - } - else{ - get_force_sgh(material, - *mesh, - node_coords, - node_vel, - elem_den, - elem_sie, - elem_pres, - elem_stress, - elem_sspd, - elem_vol, - elem_div, - elem_mat_id, - corner_force, - 1.0, - cycle); - } - - if (have_loading_conditions) { - applied_forces(material, - *mesh, - node_coords, - node_vel, - node_mass, - elem_den, - elem_vol, - elem_div, - elem_mat_id, - corner_force, - 1.0, - cycle); - } //state_adjoint_time_start = Explicit_Solver_Pointer_->CPU_Time(); get_force_dgradient_sgh(material, @@ -1943,15 +1795,19 @@ void FEA_Module_SGH::compute_topology_optimization_gradient_tally(Teuchos::RCPgetLocalView(Tpetra::Access::ReadOnly); current_psi_adjoint_vector = psi_adjoint_vector_distributed->getLocalView(Tpetra::Access::ReadOnly); + previous_adjoint_vector = previous_adjoint_vector_distributed->getLocalView(Tpetra::Access::ReadOnly); + previous_psi_adjoint_vector = previous_psi_adjoint_vector_distributed->getLocalView(Tpetra::Access::ReadOnly); } else{ current_adjoint_vector = (*adjoint_vector_data)[cycle]->getLocalView(Tpetra::Access::ReadOnly); current_psi_adjoint_vector = (*psi_adjoint_vector_data)[cycle]->getLocalView(Tpetra::Access::ReadOnly); + previous_adjoint_vector = (*adjoint_vector_data)[cycle+1]->getLocalView(Tpetra::Access::ReadOnly); + previous_psi_adjoint_vector = (*psi_adjoint_vector_data)[cycle+1]->getLocalView(Tpetra::Access::ReadOnly); } // derivatives of forces at corners stored in corner_vector_storage buffer by previous routine FOR_ALL_CLASS(elem_id, 0, rnum_elem, { @@ -1964,7 +1820,7 @@ void FEA_Module_SGH::compute_topology_optimization_gradient_tally(Teuchos::RCP Date: Mon, 19 Aug 2024 11:49:38 -0600 Subject: [PATCH 197/233] BUG: ensure t0 for IVP gradient contribution --- .../SGH_Solver/include/FEA_Module_SGH.h | 3 + .../SGH_Solver/src/sgh_optimization.cpp | 713 +++++++++++------- 2 files changed, 436 insertions(+), 280 deletions(-) diff --git a/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/include/FEA_Module_SGH.h b/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/include/FEA_Module_SGH.h index f0aa4ba94..2d567d597 100644 --- a/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/include/FEA_Module_SGH.h +++ b/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/include/FEA_Module_SGH.h @@ -505,6 +505,9 @@ class FEA_Module_SGH : public FEA_Module void compute_topology_optimization_gradient_tally(Teuchos::RCP design_densities_distributed, Teuchos::RCP design_gradients_distributed, unsigned long cycle, real_t global_dt); + void compute_topology_optimization_gradient_IVP(Teuchos::RCP design_densities_distributed, Teuchos::RCP design_gradients_distributed, + unsigned long cycle, real_t global_dt); + void boundary_adjoint(const mesh_t& mesh, const DCArrayKokkos& boundary, vec_array& node_adjoint, diff --git a/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/sgh_optimization.cpp b/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/sgh_optimization.cpp index 7d8a39ce0..160c9d473 100644 --- a/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/sgh_optimization.cpp +++ b/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/sgh_optimization.cpp @@ -1404,6 +1404,132 @@ void FEA_Module_SGH::compute_topology_optimization_adjoint_full(Teuchos::RCPCPU_Time(); //state_adjoint_time += state_adjoint_time_end-state_adjoint_time_start; compute_topology_optimization_gradient_tally(design_densities_distributed, cached_design_gradients_distributed, cycle, global_dt); + + if(cycle==0){ + std::set::iterator last_checkpoint = dynamic_checkpoint_set->end(); + --last_checkpoint; + const_vec_array current_velocity_vector = last_checkpoint->get_vector_pointer(V_DATA)->getLocalView(Tpetra::Access::ReadOnly); + const_vec_array current_coordinate_vector = last_checkpoint->get_vector_pointer(U_DATA)->getLocalView(Tpetra::Access::ReadOnly); + const_vec_array current_element_internal_energy = last_checkpoint->get_vector_pointer(SIE_DATA)->getLocalView(Tpetra::Access::ReadOnly); + + // compute gradients at midpoint + FOR_ALL_CLASS(node_gid, 0, nlocal_nodes + nghost_nodes, { + for (int idim = 0; idim < num_dim; idim++) { + node_vel(rk_level, node_gid, idim) = current_velocity_vector(node_gid, idim); + node_coords(rk_level, node_gid, idim) = current_coordinate_vector(node_gid, idim); + } + }); + Kokkos::fence(); + + FOR_ALL_CLASS(elem_gid, 0, rnum_elem, { + elem_sie(rk_level, elem_gid) = current_element_internal_energy(elem_gid, 0); + }); + Kokkos::fence(); + + // state_adjoint_time_end = Explicit_Solver_Pointer_->CPU_Time(); + // state_adjoint_time += state_adjoint_time_end-state_adjoint_time_start; + // set state according to phase data at this timestep + get_vol(); + + // ---- Calculate velocity diveregence for the element ---- + if (num_dim == 2) { + get_divergence2D(elem_div, + node_coords, + node_vel, + elem_vol); + } + else{ + get_divergence(elem_div, + node_coords, + node_vel, + elem_vol); + } // end if 2D + + // ---- Calculate elem state (den, pres, sound speed, stress) for next time step ---- + if (num_dim == 2) { + update_state2D(material, + *mesh, + node_coords, + node_vel, + elem_den, + elem_pres, + elem_stress, + elem_sspd, + elem_sie, + elem_vol, + elem_mass, + elem_mat_id, + 1.0, + cycle); + } + else{ + update_state(material, + *mesh, + node_coords, + node_vel, + elem_den, + elem_pres, + elem_stress, + elem_sspd, + elem_sie, + elem_vol, + elem_mass, + elem_mat_id, + 1.0, + cycle); + } + + if (num_dim == 2) { + get_force_sgh2D(material, + *mesh, + node_coords, + node_vel, + elem_den, + elem_sie, + elem_pres, + elem_stress, + elem_sspd, + elem_vol, + elem_div, + elem_mat_id, + corner_force, + 1.0, + cycle); + } + else{ + get_force_sgh(material, + *mesh, + node_coords, + node_vel, + elem_den, + elem_sie, + elem_pres, + elem_stress, + elem_sspd, + elem_vol, + elem_div, + elem_mat_id, + corner_force, + 1.0, + cycle); + } + + if (have_loading_conditions) { + applied_forces(material, + *mesh, + node_coords, + node_vel, + node_mass, + elem_den, + elem_vol, + elem_div, + elem_mat_id, + corner_force, + 1.0, + cycle); + } + compute_topology_optimization_gradient_IVP(design_densities_distributed, cached_design_gradients_distributed, cycle, global_dt); + } } if(use_solve_checkpoints){ @@ -1438,7 +1564,6 @@ void FEA_Module_SGH::compute_topology_optimization_gradient_tally(Teuchos::RCPnum_bdy_nodes; const DCArrayKokkos boundary = module_params->boundary; - const DCArrayKokkos material = simparam->material; const int num_dim = simparam->num_dims; int num_corners = rnum_elem * num_nodes_in_elem; bool element_constant_density = true; @@ -1451,144 +1576,29 @@ void FEA_Module_SGH::compute_topology_optimization_gradient_tally(Teuchos::RCPgetLocalView(Tpetra::Access::ReadWrite); const_vec_array design_densities = design_densities_distributed->getLocalView(Tpetra::Access::ReadOnly); - // view scope - { - - const_vec_array current_velocity_vector; - const_vec_array next_velocity_vector; - if(use_solve_checkpoints){ - //note that these are assigned backwards because the adjoint loop progresses backwards - current_velocity_vector = all_node_velocities_distributed->getLocalView(Tpetra::Access::ReadOnly); - next_velocity_vector = previous_node_velocities_distributed->getLocalView(Tpetra::Access::ReadOnly); - } - else{ - current_velocity_vector = (*forward_solve_velocity_data)[cycle]->getLocalView(Tpetra::Access::ReadOnly); - next_velocity_vector = (*forward_solve_velocity_data)[cycle + 1]->getLocalView(Tpetra::Access::ReadOnly); - } - if(simparam->optimization_options.optimization_objective_regions.size()){ - int nobj_volumes = simparam->optimization_options.optimization_objective_regions.size(); - const_vec_array all_initial_node_coords = all_initial_node_coords_distributed->getLocalView(Tpetra::Access::ReadOnly); - FOR_ALL_CLASS(elem_id, 0, rnum_elem, { - size_t node_id; - size_t corner_id; - real_t inner_product; - // std::cout << elem_mass(elem_id) <optimization_options.optimization_objective_regions(ivolume).contains(current_node_coords)){ - contained = true; - } - } - if(contained){ - for (int idim = 0; idim < num_dim; idim++) { - inner_product += elem_mass(elem_id) * current_element_velocities(ifill, idim) * current_element_velocities(ifill, idim); - } - } - } - - for (int inode = 0; inode < num_nodes_in_elem; inode++) { - // compute gradient of local element contribution to v^t*M*v product - corner_id = elem_id * num_nodes_in_elem + inode; - // division by design ratio recovers nominal element mass used in the gradient operator - corner_value_storage(corner_id) = inner_product * global_dt / relative_element_densities(elem_id); - } - }); // end parallel for - Kokkos::fence(); - } - else{ - FOR_ALL_CLASS(elem_id, 0, rnum_elem, { - size_t node_id; - size_t corner_id; - real_t inner_product; - // std::cout << elem_mass(elem_id) <getLocalView(Tpetra::Access::ReadOnly); - current_adjoint_vector = all_adjoint_vector_distributed->getLocalView(Tpetra::Access::ReadOnly); - next_velocity_vector = previous_node_velocities_distributed->getLocalView(Tpetra::Access::ReadOnly); - next_adjoint_vector = previous_adjoint_vector_distributed->getLocalView(Tpetra::Access::ReadOnly); - } - else{ - current_velocity_vector = (*forward_solve_velocity_data)[cycle]->getLocalView(Tpetra::Access::ReadOnly); - current_adjoint_vector = (*adjoint_vector_data)[cycle]->getLocalView(Tpetra::Access::ReadOnly); - next_velocity_vector = (*forward_solve_velocity_data)[cycle + 1]->getLocalView(Tpetra::Access::ReadOnly); - next_adjoint_vector = (*adjoint_vector_data)[cycle + 1]->getLocalView(Tpetra::Access::ReadOnly); - } - + // view scope + { + + const_vec_array current_velocity_vector; + const_vec_array next_velocity_vector; + if(use_solve_checkpoints){ + //note that these are assigned backwards because the adjoint loop progresses backwards + current_velocity_vector = all_node_velocities_distributed->getLocalView(Tpetra::Access::ReadOnly); + next_velocity_vector = previous_node_velocities_distributed->getLocalView(Tpetra::Access::ReadOnly); + } + else{ + current_velocity_vector = (*forward_solve_velocity_data)[cycle]->getLocalView(Tpetra::Access::ReadOnly); + next_velocity_vector = (*forward_solve_velocity_data)[cycle + 1]->getLocalView(Tpetra::Access::ReadOnly); + } + if(simparam->optimization_options.optimization_objective_regions.size()){ + int nobj_volumes = simparam->optimization_options.optimization_objective_regions.size(); + const_vec_array all_initial_node_coords = all_initial_node_coords_distributed->getLocalView(Tpetra::Access::ReadOnly); FOR_ALL_CLASS(elem_id, 0, rnum_elem, { - real_t lambda_dot_current; - real_t lambda_dot_next; size_t node_id; size_t corner_id; real_t inner_product; // std::cout << elem_mass(elem_id) <optimization_options.optimization_objective_regions(ivolume).contains(current_node_coords)){ + contained = true; + } + } + if(contained){ + for (int idim = 0; idim < num_dim; idim++) { + inner_product += elem_mass(elem_id) * current_element_velocities(ifill, idim) * current_element_velocities(ifill, idim); + } } } for (int inode = 0; inode < num_nodes_in_elem; inode++) { // compute gradient of local element contribution to v^t*M*v product corner_id = elem_id * num_nodes_in_elem + inode; + // division by design ratio recovers nominal element mass used in the gradient operator corner_value_storage(corner_id) = inner_product * global_dt / relative_element_densities(elem_id); } }); // end parallel for Kokkos::fence(); - - // accumulate node values from corner storage - // multiply - FOR_ALL_CLASS(node_id, 0, nlocal_nodes, { - size_t corner_id; - for (int icorner = 0; icorner < num_corners_in_node(node_id); icorner++) { - corner_id = corners_in_node(node_id, icorner); - design_gradients(node_id, 0) += -corner_value_storage(corner_id) / (double)num_nodes_in_elem / (double)num_nodes_in_elem; - } - }); // end parallel for - Kokkos::fence(); - } // end view scope - - // compute adjoint vector for this data point; use velocity midpoint - // view scope - { - const_vec_array current_element_internal_energy; - const_vec_array current_psi_adjoint_vector; - const_vec_array next_element_internal_energy; - const_vec_array next_psi_adjoint_vector; - if(use_solve_checkpoints){ - //note that these are assigned backwards because the adjoint loop progresses backwards - current_element_internal_energy = element_internal_energy_distributed->getLocalView(Tpetra::Access::ReadOnly); - current_psi_adjoint_vector = psi_adjoint_vector_distributed->getLocalView(Tpetra::Access::ReadOnly); - next_element_internal_energy = previous_element_internal_energy_distributed->getLocalView(Tpetra::Access::ReadOnly); - next_psi_adjoint_vector = previous_psi_adjoint_vector_distributed->getLocalView(Tpetra::Access::ReadOnly); - } - else{ - current_element_internal_energy = (*forward_solve_internal_energy_data)[cycle]->getLocalView(Tpetra::Access::ReadOnly); - current_psi_adjoint_vector = (*psi_adjoint_vector_data)[cycle]->getLocalView(Tpetra::Access::ReadOnly); - next_element_internal_energy = (*forward_solve_internal_energy_data)[cycle + 1]->getLocalView(Tpetra::Access::ReadOnly); - next_psi_adjoint_vector = (*psi_adjoint_vector_data)[cycle + 1]->getLocalView(Tpetra::Access::ReadOnly); - } - - FOR_ALL_CLASS(elem_id, 0, rnum_elem, { - real_t psi_dot_current; - real_t psi_dot_next; - size_t node_id; - size_t corner_id; - real_t inner_product; - - psi_dot_current = (next_psi_adjoint_vector(elem_id, 0) - current_psi_adjoint_vector(elem_id, 0)) / global_dt; - inner_product = elem_mass(elem_id) * (psi_dot_current + psi_dot_current) * current_element_internal_energy(elem_id, 0) / 2; - - for (int inode = 0; inode < num_nodes_in_elem; inode++) { - // compute gradient of local element contribution to v^t*M*v product - corner_id = elem_id * num_nodes_in_elem + inode; - corner_value_storage(corner_id) = inner_product * global_dt / relative_element_densities(elem_id); - } - }); // end parallel for - Kokkos::fence(); - - // accumulate node values from corner storage - // multiply - FOR_ALL_CLASS(node_id, 0, nlocal_nodes, { - size_t corner_id; - for (int icorner = 0; icorner < num_corners_in_node(node_id); icorner++) { - corner_id = corners_in_node(node_id, icorner); - design_gradients(node_id, 0) += -corner_value_storage(corner_id) / (double)num_nodes_in_elem; - } - }); // end parallel for - Kokkos::fence(); - } // end view scope - - if(cycle==0){ - // compute initial condition contribution from velocities - // view scope - { - const_vec_array current_velocity_vector; - const_vec_array current_adjoint_vector; - if(use_solve_checkpoints){ - current_velocity_vector = all_node_velocities_distributed->getLocalView(Tpetra::Access::ReadOnly); - current_adjoint_vector = all_adjoint_vector_distributed->getLocalView(Tpetra::Access::ReadOnly); - } - else{ - current_velocity_vector = (*forward_solve_velocity_data)[0]->getLocalView(Tpetra::Access::ReadOnly); - current_adjoint_vector = (*adjoint_vector_data)[0]->getLocalView(Tpetra::Access::ReadOnly); - } - + } + else{ FOR_ALL_CLASS(elem_id, 0, rnum_elem, { - real_t lambda_dot; size_t node_id; size_t corner_id; real_t inner_product; // std::cout << elem_mass(elem_id) <getLocalView(Tpetra::Access::ReadOnly); + current_adjoint_vector = all_adjoint_vector_distributed->getLocalView(Tpetra::Access::ReadOnly); + next_velocity_vector = previous_node_velocities_distributed->getLocalView(Tpetra::Access::ReadOnly); + next_adjoint_vector = previous_adjoint_vector_distributed->getLocalView(Tpetra::Access::ReadOnly); + } + else{ + current_velocity_vector = (*forward_solve_velocity_data)[cycle]->getLocalView(Tpetra::Access::ReadOnly); + current_adjoint_vector = (*adjoint_vector_data)[cycle]->getLocalView(Tpetra::Access::ReadOnly); + next_velocity_vector = (*forward_solve_velocity_data)[cycle + 1]->getLocalView(Tpetra::Access::ReadOnly); + next_adjoint_vector = (*adjoint_vector_data)[cycle + 1]->getLocalView(Tpetra::Access::ReadOnly); + } + + FOR_ALL_CLASS(elem_id, 0, rnum_elem, { + real_t lambda_dot_current; + real_t lambda_dot_next; + size_t node_id; + size_t corner_id; + real_t inner_product; + // std::cout << elem_mass(elem_id) <getLocalView(Tpetra::Access::ReadOnly); - current_psi_adjoint_vector = psi_adjoint_vector_distributed->getLocalView(Tpetra::Access::ReadOnly); + inner_product = 0; + for (int ifill = 0; ifill < num_nodes_in_elem; ifill++) { + node_id = nodes_in_elem(elem_id, ifill); + for (int idim = 0; idim < num_dim; idim++) { + lambda_dot_current = lambda_dot_next = (next_adjoint_vector(node_id, idim) - current_adjoint_vector(node_id, idim)) / global_dt; + // lambda_dot_current = current_velocity_vector(node_id,idim) + damping_constant*current_adjoint_vector(node_id,idim)/node_mass(node_id) - current_phi_adjoint_vector(node_id,idim)/node_mass(node_id); + // lambda_dot_next = next_velocity_vector(node_id,idim) + damping_constant*next_adjoint_vector(node_id,idim)/node_mass(node_id) - next_phi_adjoint_vector(node_id,idim)/node_mass(node_id); + inner_product += elem_mass(elem_id) * (lambda_dot_current + lambda_dot_current) * current_element_velocities(ifill, idim) / 2; + } } - else{ - current_element_internal_energy = (*forward_solve_internal_energy_data)[0]->getLocalView(Tpetra::Access::ReadOnly); - current_psi_adjoint_vector = (*psi_adjoint_vector_data)[0]->getLocalView(Tpetra::Access::ReadOnly); + + for (int inode = 0; inode < num_nodes_in_elem; inode++) { + // compute gradient of local element contribution to v^t*M*v product + corner_id = elem_id * num_nodes_in_elem + inode; + corner_value_storage(corner_id) = inner_product * global_dt / relative_element_densities(elem_id); } + }); // end parallel for + Kokkos::fence(); - // (*psi_adjoint_vector_data)[100]->describe(*fos,Teuchos::VERB_EXTREME); - FOR_ALL_CLASS(elem_id, 0, rnum_elem, { - real_t lambda_dot; - size_t node_id; - size_t corner_id; - real_t inner_product; - // std::cout << elem_mass(elem_id) <getLocalView(Tpetra::Access::ReadOnly); + current_psi_adjoint_vector = psi_adjoint_vector_distributed->getLocalView(Tpetra::Access::ReadOnly); + next_element_internal_energy = previous_element_internal_energy_distributed->getLocalView(Tpetra::Access::ReadOnly); + next_psi_adjoint_vector = previous_psi_adjoint_vector_distributed->getLocalView(Tpetra::Access::ReadOnly); + } + else{ + current_element_internal_energy = (*forward_solve_internal_energy_data)[cycle]->getLocalView(Tpetra::Access::ReadOnly); + current_psi_adjoint_vector = (*psi_adjoint_vector_data)[cycle]->getLocalView(Tpetra::Access::ReadOnly); + next_element_internal_energy = (*forward_solve_internal_energy_data)[cycle + 1]->getLocalView(Tpetra::Access::ReadOnly); + next_psi_adjoint_vector = (*psi_adjoint_vector_data)[cycle + 1]->getLocalView(Tpetra::Access::ReadOnly); + } - for (int inode = 0; inode < num_nodes_in_elem; inode++) { - // compute gradient of local element contribution to v^t*M*v product - corner_id = elem_id * num_nodes_in_elem + inode; - corner_value_storage(corner_id) = inner_product / relative_element_densities(elem_id); - } - }); // end parallel for - Kokkos::fence(); + FOR_ALL_CLASS(elem_id, 0, rnum_elem, { + real_t psi_dot_current; + real_t psi_dot_next; + size_t node_id; + size_t corner_id; + real_t inner_product; - // accumulate node values from corner storage - // multiply - FOR_ALL_CLASS(node_id, 0, nlocal_nodes, { - size_t corner_id; - for (int icorner = 0; icorner < num_corners_in_node(node_id); icorner++) { - corner_id = corners_in_node(node_id, icorner); - design_gradients(node_id, 0) += -corner_value_storage(corner_id) / (double)num_nodes_in_elem; - } - }); // end parallel for - Kokkos::fence(); - } // end view scope - } + psi_dot_current = (next_psi_adjoint_vector(elem_id, 0) - current_psi_adjoint_vector(elem_id, 0)) / global_dt; + inner_product = elem_mass(elem_id) * (psi_dot_current + psi_dot_current) * current_element_internal_energy(elem_id, 0) / 2; + + for (int inode = 0; inode < num_nodes_in_elem; inode++) { + // compute gradient of local element contribution to v^t*M*v product + corner_id = elem_id * num_nodes_in_elem + inode; + corner_value_storage(corner_id) = inner_product * global_dt / relative_element_densities(elem_id); + } + }); // end parallel for + Kokkos::fence(); + + // accumulate node values from corner storage + // multiply + FOR_ALL_CLASS(node_id, 0, nlocal_nodes, { + size_t corner_id; + for (int icorner = 0; icorner < num_corners_in_node(node_id); icorner++) { + corner_id = corners_in_node(node_id, icorner); + design_gradients(node_id, 0) += -corner_value_storage(corner_id) / (double)num_nodes_in_elem; + } + }); // end parallel for + Kokkos::fence(); + } // end view scope //compute terms with gradient of force and gradient of specific internal energy w.r.t design density // view scope @@ -1873,6 +1888,146 @@ void FEA_Module_SGH::compute_topology_optimization_gradient_tally(Teuchos::RCP design_densities_distributed, + Teuchos::RCP design_gradients_distributed, unsigned long cycle, real_t global_dt) +{ + size_t num_bdy_nodes = mesh->num_bdy_nodes; + const int num_dim = simparam->num_dims; + int num_corners = rnum_elem * num_nodes_in_elem; + bool element_constant_density = true; + size_t current_data_index, next_data_index; + CArrayKokkos current_element_velocities = CArrayKokkos(num_nodes_in_elem, num_dim); + CArrayKokkos current_element_adjoint = CArrayKokkos(num_nodes_in_elem, num_dim); + bool use_solve_checkpoints = simparam->optimization_options.use_solve_checkpoints; + + { // view scope + vec_array design_gradients = design_gradients_distributed->getLocalView(Tpetra::Access::ReadWrite); + const_vec_array design_densities = design_densities_distributed->getLocalView(Tpetra::Access::ReadOnly); + + // compute initial condition contribution from velocities + // view scope + { + const_vec_array current_velocity_vector; + const_vec_array current_adjoint_vector; + if(use_solve_checkpoints){ + current_velocity_vector = all_node_velocities_distributed->getLocalView(Tpetra::Access::ReadOnly); + current_adjoint_vector = all_adjoint_vector_distributed->getLocalView(Tpetra::Access::ReadOnly); + } + else{ + current_velocity_vector = (*forward_solve_velocity_data)[0]->getLocalView(Tpetra::Access::ReadOnly); + current_adjoint_vector = (*adjoint_vector_data)[0]->getLocalView(Tpetra::Access::ReadOnly); + } + + FOR_ALL_CLASS(elem_id, 0, rnum_elem, { + real_t lambda_dot; + size_t node_id; + size_t corner_id; + real_t inner_product; + // std::cout << elem_mass(elem_id) <getLocalView(Tpetra::Access::ReadOnly); + current_psi_adjoint_vector = psi_adjoint_vector_distributed->getLocalView(Tpetra::Access::ReadOnly); + } + else{ + current_element_internal_energy = (*forward_solve_internal_energy_data)[0]->getLocalView(Tpetra::Access::ReadOnly); + current_psi_adjoint_vector = (*psi_adjoint_vector_data)[0]->getLocalView(Tpetra::Access::ReadOnly); + } + + // (*psi_adjoint_vector_data)[100]->describe(*fos,Teuchos::VERB_EXTREME); + FOR_ALL_CLASS(elem_id, 0, rnum_elem, { + real_t lambda_dot; + size_t node_id; + size_t corner_id; + real_t inner_product; + // std::cout << elem_mass(elem_id) < design_densities_distributed, Teuchos::RCP design_gradients_distributed) { size_t num_bdy_nodes = mesh->num_bdy_nodes; - const DCArrayKokkos boundary = module_params->boundary; - const DCArrayKokkos material = simparam->material; const int num_dim = simparam->num_dims; int num_corners = rnum_elem * num_nodes_in_elem; real_t global_dt; From b929245abf81a862d2581c7ca667c7d19589f8a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CAdrian-Diaz=E2=80=9D?= <“adriandiaz1117@gmail.com”> Date: Mon, 19 Aug 2024 21:57:56 -0600 Subject: [PATCH 198/233] ENH: generalize objective gradient term tally --- src/Parallel-Solvers/FEA_Module.h | 2 +- .../Fierro_Optimization_Objective.hpp | 18 +- .../SGH_Solver/src/setup_sgh.cpp | 2 +- .../SGH_Solver/src/sgh_optimization.cpp | 359 ++++++------------ .../Kinetic_Energy_Minimize.h | 120 +++++- 5 files changed, 256 insertions(+), 245 deletions(-) diff --git a/src/Parallel-Solvers/FEA_Module.h b/src/Parallel-Solvers/FEA_Module.h index ecd33b2ad..defd5608a 100644 --- a/src/Parallel-Solvers/FEA_Module.h +++ b/src/Parallel-Solvers/FEA_Module.h @@ -239,7 +239,7 @@ class FEA_Module // Local FEA data including ghosts size_t nall_nodes; - size_t rnum_elem; + size_t rnum_elem, num_corners; // Global FEA data long long int num_nodes, num_elem; diff --git a/src/Parallel-Solvers/Optimization_Modules/Fierro_Optimization_Objective.hpp b/src/Parallel-Solvers/Optimization_Modules/Fierro_Optimization_Objective.hpp index 25928162b..db07deade 100644 --- a/src/Parallel-Solvers/Optimization_Modules/Fierro_Optimization_Objective.hpp +++ b/src/Parallel-Solvers/Optimization_Modules/Fierro_Optimization_Objective.hpp @@ -144,15 +144,21 @@ class FierroOptimizationObjective : public ROL::Objective { //contributes to rate of change of adjoint vector due to term with displacement gradient of objective virtual void displacement_gradient_adjoint_contribution(vec_array& adjoint_rate_vector, const DViewCArrayKokkos& node_mass, - const DViewCArrayKokkos& elem_mass, const DViewCArrayKokkos& node_vel, - const DViewCArrayKokkos& node_coords, const DViewCArrayKokkos& elem_sie, - const size_t& rk_level){} + const DViewCArrayKokkos& elem_mass, const DViewCArrayKokkos& node_vel, + const DViewCArrayKokkos& node_coords, const DViewCArrayKokkos& elem_sie, + const size_t& rk_level){} //contributes to rate of change of adjoint vector due to term with specific internal energy gradient of objective virtual void sie_gradient_adjoint_contribution(vec_array& adjoint_rate_vector, const DViewCArrayKokkos& node_mass, - const DViewCArrayKokkos& elem_mass, const DViewCArrayKokkos& node_vel, - const DViewCArrayKokkos& node_coords, const DViewCArrayKokkos& elem_sie, - const size_t& rk_level){} + const DViewCArrayKokkos& elem_mass, const DViewCArrayKokkos& node_vel, + const DViewCArrayKokkos& node_coords, const DViewCArrayKokkos& elem_sie, + const size_t& rk_level){} + + //contributes to gradient tally due to term with design density gradient of objective + virtual void density_gradient_term(vec_array& gradient_vector, const DViewCArrayKokkos& node_mass, + const DViewCArrayKokkos& elem_mass, const DViewCArrayKokkos& node_vel, + const DViewCArrayKokkos& node_coords, const DViewCArrayKokkos& elem_sie, + const size_t& rk_level, const real_t& global_dt = 0){} }; // class ObjectiveMMA diff --git a/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/setup_sgh.cpp b/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/setup_sgh.cpp index f86e6f1b2..bd3823ea8 100644 --- a/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/setup_sgh.cpp +++ b/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/setup_sgh.cpp @@ -81,7 +81,7 @@ void FEA_Module_SGH::setup() // shorthand names const size_t num_nodes = mesh->num_nodes; const size_t num_elems = mesh->num_elems; - const size_t num_corners = mesh->num_corners; + num_corners = mesh->num_corners; // --- make dual views of data on CPU and GPU --- // Notes: diff --git a/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/sgh_optimization.cpp b/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/sgh_optimization.cpp index 160c9d473..f9f9864a7 100644 --- a/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/sgh_optimization.cpp +++ b/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/sgh_optimization.cpp @@ -1406,133 +1406,134 @@ void FEA_Module_SGH::compute_topology_optimization_adjoint_full(Teuchos::RCP::iterator last_checkpoint = dynamic_checkpoint_set->end(); - --last_checkpoint; - const_vec_array current_velocity_vector = last_checkpoint->get_vector_pointer(V_DATA)->getLocalView(Tpetra::Access::ReadOnly); - const_vec_array current_coordinate_vector = last_checkpoint->get_vector_pointer(U_DATA)->getLocalView(Tpetra::Access::ReadOnly); - const_vec_array current_element_internal_energy = last_checkpoint->get_vector_pointer(SIE_DATA)->getLocalView(Tpetra::Access::ReadOnly); - - // compute gradients at midpoint - FOR_ALL_CLASS(node_gid, 0, nlocal_nodes + nghost_nodes, { - for (int idim = 0; idim < num_dim; idim++) { - node_vel(rk_level, node_gid, idim) = current_velocity_vector(node_gid, idim); - node_coords(rk_level, node_gid, idim) = current_coordinate_vector(node_gid, idim); - } - }); - Kokkos::fence(); - - FOR_ALL_CLASS(elem_gid, 0, rnum_elem, { - elem_sie(rk_level, elem_gid) = current_element_internal_energy(elem_gid, 0); - }); - Kokkos::fence(); + //RE-ENABLE STATE SETUP FOR T=0 if IVP term involves computed properties + // std::set::iterator last_checkpoint = dynamic_checkpoint_set->end(); + // --last_checkpoint; + // const_vec_array current_velocity_vector = last_checkpoint->get_vector_pointer(V_DATA)->getLocalView(Tpetra::Access::ReadOnly); + // const_vec_array current_coordinate_vector = last_checkpoint->get_vector_pointer(U_DATA)->getLocalView(Tpetra::Access::ReadOnly); + // const_vec_array current_element_internal_energy = last_checkpoint->get_vector_pointer(SIE_DATA)->getLocalView(Tpetra::Access::ReadOnly); + + // // compute gradients at midpoint + // FOR_ALL_CLASS(node_gid, 0, nlocal_nodes + nghost_nodes, { + // for (int idim = 0; idim < num_dim; idim++) { + // node_vel(rk_level, node_gid, idim) = current_velocity_vector(node_gid, idim); + // node_coords(rk_level, node_gid, idim) = current_coordinate_vector(node_gid, idim); + // } + // }); + // Kokkos::fence(); + + // FOR_ALL_CLASS(elem_gid, 0, rnum_elem, { + // elem_sie(rk_level, elem_gid) = current_element_internal_energy(elem_gid, 0); + // }); + // Kokkos::fence(); - // state_adjoint_time_end = Explicit_Solver_Pointer_->CPU_Time(); - // state_adjoint_time += state_adjoint_time_end-state_adjoint_time_start; - // set state according to phase data at this timestep - get_vol(); - - // ---- Calculate velocity diveregence for the element ---- - if (num_dim == 2) { - get_divergence2D(elem_div, - node_coords, - node_vel, - elem_vol); - } - else{ - get_divergence(elem_div, - node_coords, - node_vel, - elem_vol); - } // end if 2D - - // ---- Calculate elem state (den, pres, sound speed, stress) for next time step ---- - if (num_dim == 2) { - update_state2D(material, - *mesh, - node_coords, - node_vel, - elem_den, - elem_pres, - elem_stress, - elem_sspd, - elem_sie, - elem_vol, - elem_mass, - elem_mat_id, - 1.0, - cycle); - } - else{ - update_state(material, - *mesh, - node_coords, - node_vel, - elem_den, - elem_pres, - elem_stress, - elem_sspd, - elem_sie, - elem_vol, - elem_mass, - elem_mat_id, - 1.0, - cycle); - } + // // state_adjoint_time_end = Explicit_Solver_Pointer_->CPU_Time(); + // // state_adjoint_time += state_adjoint_time_end-state_adjoint_time_start; + // // set state according to phase data at this timestep + // get_vol(); + + // // ---- Calculate velocity diveregence for the element ---- + // if (num_dim == 2) { + // get_divergence2D(elem_div, + // node_coords, + // node_vel, + // elem_vol); + // } + // else{ + // get_divergence(elem_div, + // node_coords, + // node_vel, + // elem_vol); + // } // end if 2D + + // // ---- Calculate elem state (den, pres, sound speed, stress) for next time step ---- + // if (num_dim == 2) { + // update_state2D(material, + // *mesh, + // node_coords, + // node_vel, + // elem_den, + // elem_pres, + // elem_stress, + // elem_sspd, + // elem_sie, + // elem_vol, + // elem_mass, + // elem_mat_id, + // 1.0, + // cycle); + // } + // else{ + // update_state(material, + // *mesh, + // node_coords, + // node_vel, + // elem_den, + // elem_pres, + // elem_stress, + // elem_sspd, + // elem_sie, + // elem_vol, + // elem_mass, + // elem_mat_id, + // 1.0, + // cycle); + // } - if (num_dim == 2) { - get_force_sgh2D(material, - *mesh, - node_coords, - node_vel, - elem_den, - elem_sie, - elem_pres, - elem_stress, - elem_sspd, - elem_vol, - elem_div, - elem_mat_id, - corner_force, - 1.0, - cycle); - } - else{ - get_force_sgh(material, - *mesh, - node_coords, - node_vel, - elem_den, - elem_sie, - elem_pres, - elem_stress, - elem_sspd, - elem_vol, - elem_div, - elem_mat_id, - corner_force, - 1.0, - cycle); - } + // if (num_dim == 2) { + // get_force_sgh2D(material, + // *mesh, + // node_coords, + // node_vel, + // elem_den, + // elem_sie, + // elem_pres, + // elem_stress, + // elem_sspd, + // elem_vol, + // elem_div, + // elem_mat_id, + // corner_force, + // 1.0, + // cycle); + // } + // else{ + // get_force_sgh(material, + // *mesh, + // node_coords, + // node_vel, + // elem_den, + // elem_sie, + // elem_pres, + // elem_stress, + // elem_sspd, + // elem_vol, + // elem_div, + // elem_mat_id, + // corner_force, + // 1.0, + // cycle); + // } - if (have_loading_conditions) { - applied_forces(material, - *mesh, - node_coords, - node_vel, - node_mass, - elem_den, - elem_vol, - elem_div, - elem_mat_id, - corner_force, - 1.0, - cycle); - } + // if (have_loading_conditions) { + // applied_forces(material, + // *mesh, + // node_coords, + // node_vel, + // node_mass, + // elem_den, + // elem_vol, + // elem_div, + // elem_mat_id, + // corner_force, + // 1.0, + // cycle); + // } compute_topology_optimization_gradient_IVP(design_densities_distributed, cached_design_gradients_distributed, cycle, global_dt); } } - if(use_solve_checkpoints){ + if(use_solve_checkpoints&&cycle!=0){ //store current solution in the previous vector storage for the next timestep previous_adjoint_vector_distributed->assign(*all_adjoint_vector_distributed); previous_phi_adjoint_vector_distributed->assign(*all_phi_adjoint_vector_distributed); @@ -1562,12 +1563,10 @@ void FEA_Module_SGH::compute_topology_optimization_adjoint_full(Teuchos::RCP design_densities_distributed, Teuchos::RCP design_gradients_distributed, unsigned long cycle, real_t global_dt) { - size_t num_bdy_nodes = mesh->num_bdy_nodes; - const DCArrayKokkos boundary = module_params->boundary; const int num_dim = simparam->num_dims; int num_corners = rnum_elem * num_nodes_in_elem; - bool element_constant_density = true; size_t current_data_index, next_data_index; + const size_t rk_level = simparam->dynamic_options.rk_num_bins - 1; CArrayKokkos current_element_velocities = CArrayKokkos(num_nodes_in_elem, num_dim); CArrayKokkos current_element_adjoint = CArrayKokkos(num_nodes_in_elem, num_dim); bool use_solve_checkpoints = simparam->optimization_options.use_solve_checkpoints; @@ -1576,114 +1575,8 @@ void FEA_Module_SGH::compute_topology_optimization_gradient_tally(Teuchos::RCPgetLocalView(Tpetra::Access::ReadWrite); const_vec_array design_densities = design_densities_distributed->getLocalView(Tpetra::Access::ReadOnly); - // view scope - { - - const_vec_array current_velocity_vector; - const_vec_array next_velocity_vector; - if(use_solve_checkpoints){ - //note that these are assigned backwards because the adjoint loop progresses backwards - current_velocity_vector = all_node_velocities_distributed->getLocalView(Tpetra::Access::ReadOnly); - next_velocity_vector = previous_node_velocities_distributed->getLocalView(Tpetra::Access::ReadOnly); - } - else{ - current_velocity_vector = (*forward_solve_velocity_data)[cycle]->getLocalView(Tpetra::Access::ReadOnly); - next_velocity_vector = (*forward_solve_velocity_data)[cycle + 1]->getLocalView(Tpetra::Access::ReadOnly); - } - if(simparam->optimization_options.optimization_objective_regions.size()){ - int nobj_volumes = simparam->optimization_options.optimization_objective_regions.size(); - const_vec_array all_initial_node_coords = all_initial_node_coords_distributed->getLocalView(Tpetra::Access::ReadOnly); - FOR_ALL_CLASS(elem_id, 0, rnum_elem, { - size_t node_id; - size_t corner_id; - real_t inner_product; - // std::cout << elem_mass(elem_id) <optimization_options.optimization_objective_regions(ivolume).contains(current_node_coords)){ - contained = true; - } - } - if(contained){ - for (int idim = 0; idim < num_dim; idim++) { - inner_product += elem_mass(elem_id) * current_element_velocities(ifill, idim) * current_element_velocities(ifill, idim); - } - } - } - - for (int inode = 0; inode < num_nodes_in_elem; inode++) { - // compute gradient of local element contribution to v^t*M*v product - corner_id = elem_id * num_nodes_in_elem + inode; - // division by design ratio recovers nominal element mass used in the gradient operator - corner_value_storage(corner_id) = inner_product * global_dt / relative_element_densities(elem_id); - } - }); // end parallel for - Kokkos::fence(); - } - else{ - FOR_ALL_CLASS(elem_id, 0, rnum_elem, { - size_t node_id; - size_t corner_id; - real_t inner_product; - // std::cout << elem_mass(elem_id) <density_gradient_term(design_gradients, node_mass, elem_mass, node_vel, node_coords, elem_sie, rk_level, global_dt); // compute adjoint vector for this data point; use velocity midpoint // view scope @@ -1903,10 +1796,8 @@ void FEA_Module_SGH::compute_topology_optimization_gradient_tally(Teuchos::RCP design_densities_distributed, Teuchos::RCP design_gradients_distributed, unsigned long cycle, real_t global_dt) { - size_t num_bdy_nodes = mesh->num_bdy_nodes; const int num_dim = simparam->num_dims; int num_corners = rnum_elem * num_nodes_in_elem; - bool element_constant_density = true; size_t current_data_index, next_data_index; CArrayKokkos current_element_velocities = CArrayKokkos(num_nodes_in_elem, num_dim); CArrayKokkos current_element_adjoint = CArrayKokkos(num_nodes_in_elem, num_dim); @@ -2040,11 +1931,9 @@ void FEA_Module_SGH::compute_topology_optimization_gradient_IVP(Teuchos::RCP design_densities_distributed, Teuchos::RCP design_gradients_distributed) { - size_t num_bdy_nodes = mesh->num_bdy_nodes; const int num_dim = simparam->num_dims; int num_corners = rnum_elem * num_nodes_in_elem; real_t global_dt; - bool element_constant_density = true; size_t current_data_index, next_data_index; CArrayKokkos current_element_velocities = CArrayKokkos(num_nodes_in_elem, num_dim); CArrayKokkos current_element_adjoint = CArrayKokkos(num_nodes_in_elem, num_dim); diff --git a/src/Parallel-Solvers/Parallel-Explicit/Topology_Optimization/Kinetic_Energy_Minimize.h b/src/Parallel-Solvers/Parallel-Explicit/Topology_Optimization/Kinetic_Energy_Minimize.h index 7cb35cb70..08627ea93 100644 --- a/src/Parallel-Solvers/Parallel-Explicit/Topology_Optimization/Kinetic_Energy_Minimize.h +++ b/src/Parallel-Solvers/Parallel-Explicit/Topology_Optimization/Kinetic_Energy_Minimize.h @@ -139,7 +139,7 @@ typedef MV::dual_view_type dual_vec_array; int last_comm_step, last_solve_step, current_step; int num_dim; size_t nvalid_modules; - size_t nlocal_nodes; + size_t nlocal_nodes, num_corners, num_nodes_in_elem, rnum_elem; DViewCArrayKokkos node_mass, node_coords; std::vector valid_fea_modules; // modules that may interface with this objective function FEA_MODULE_TYPE set_module_type; @@ -164,6 +164,9 @@ typedef MV::dual_view_type dual_vec_array; node_mass = FEM_SGH_->node_mass; node_coords = FEM_SGH_->node_coords; nlocal_nodes = FEM_SGH_->nlocal_nodes; + num_corners = FEM_SGH_->num_corners; + num_nodes_in_elem = FEM_SGH_->num_nodes_in_elem; + rnum_elem = FEM_SGH_->rnum_elem; } if (fea_module->Module_Type == FEA_MODULE_TYPE::Dynamic_Elasticity) { FEM_Dynamic_Elasticity_ = dynamic_cast(fea_module); @@ -171,6 +174,9 @@ typedef MV::dual_view_type dual_vec_array; node_mass = FEM_Dynamic_Elasticity_->node_mass; node_coords = FEM_Dynamic_Elasticity_->node_coords; nlocal_nodes = FEM_Dynamic_Elasticity_->nlocal_nodes; + num_corners = FEM_Dynamic_Elasticity_->num_corners; + num_nodes_in_elem = FEM_Dynamic_Elasticity_->num_nodes_in_elem; + rnum_elem = FEM_Dynamic_Elasticity_->rnum_elem; } } } @@ -558,7 +564,117 @@ typedef MV::dual_view_type dual_vec_array; }); // end parallel for Kokkos::fence(); } - + + void density_gradient_term(vec_array& gradient_vector, const DViewCArrayKokkos& node_mass, + const DViewCArrayKokkos& elem_mass, const DViewCArrayKokkos& node_vel, + const DViewCArrayKokkos& node_coords, const DViewCArrayKokkos& elem_sie, + const size_t& rk_level, const real_t& global_dt = 0){ + size_t current_data_index, next_data_index; + CArrayKokkos current_element_velocities = CArrayKokkos(num_nodes_in_elem, num_dim); + CArrayKokkos current_element_adjoint = CArrayKokkos(num_nodes_in_elem, num_dim); + auto optimization_objective_regions = FEM_SGH_->simparam->optimization_options.optimization_objective_regions; + auto nodes_in_elem = FEM_SGH_->nodes_in_elem; + auto corner_value_storage = FEM_SGH_->corner_value_storage; + auto corners_in_node = FEM_SGH_->corners_in_node; + auto num_corners_in_node = FEM_SGH_->num_corners_in_node; + auto relative_element_densities = FEM_SGH_->relative_element_densities; + + // view scope + { + if(optimization_objective_regions.size()){ + int nobj_volumes = optimization_objective_regions.size(); + const_vec_array all_initial_node_coords = FEM_SGH_->all_initial_node_coords_distributed->getLocalView(Tpetra::Access::ReadOnly); + FOR_ALL_CLASS(elem_id, 0, rnum_elem, { + size_t node_id; + size_t corner_id; + real_t inner_product; + // std::cout << elem_mass(elem_id) < Date: Tue, 20 Aug 2024 18:30:45 -0600 Subject: [PATCH 199/233] ENH: check for <= zero density in region input --- src/Parallel-Solvers/Simulation_Parameters/Region.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/Parallel-Solvers/Simulation_Parameters/Region.h b/src/Parallel-Solvers/Simulation_Parameters/Region.h index 8322c098c..14bcacc16 100644 --- a/src/Parallel-Solvers/Simulation_Parameters/Region.h +++ b/src/Parallel-Solvers/Simulation_Parameters/Region.h @@ -47,6 +47,10 @@ struct Region : Yaml::DerivedFields, Yaml::ValidatedYaml, mat_fill_t { if (sie.has_value() == ie.has_value()){ throw Yaml::ConfigurationException("Specify values for exactly one of: energy (ie) or specific energy (sie)."); } + + if (den<=0){ + throw Yaml::ConfigurationException("Error: non-positive material density was specified for a region"); + } mat_fill_t::u = u.value_or(0); mat_fill_t::v = v.value_or(0); From c8963f5ad95d75bed14b2431294777c607a7ef99 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CAdrian-Diaz=E2=80=9D?= <“adriandiaz1117@gmail.com”> Date: Tue, 20 Aug 2024 18:31:20 -0600 Subject: [PATCH 200/233] WIP: internal energy objective --- .../Parallel-Explicit/Explicit_Solver.cpp | 12 + .../Internal_Energy_Minimize.h | 582 ++++++++++++++++++ .../Optimization_Options.h | 4 +- .../Simulation_Parameters.h | 8 + 4 files changed, 605 insertions(+), 1 deletion(-) create mode 100644 src/Parallel-Solvers/Parallel-Explicit/Topology_Optimization/Internal_Energy_Minimize.h diff --git a/src/Parallel-Solvers/Parallel-Explicit/Explicit_Solver.cpp b/src/Parallel-Solvers/Parallel-Explicit/Explicit_Solver.cpp index 65cdb7d2a..f94d893a1 100644 --- a/src/Parallel-Solvers/Parallel-Explicit/Explicit_Solver.cpp +++ b/src/Parallel-Solvers/Parallel-Explicit/Explicit_Solver.cpp @@ -90,6 +90,7 @@ #include "Mass_Constraint.h" #include "Moment_of_Inertia_Constraint.h" #include "Kinetic_Energy_Minimize.h" +#include "Internal_Energy_Minimize.h" #include "MMA_Objective.hpp" #include "Area_Normals.h" @@ -1378,6 +1379,17 @@ void Explicit_Solver::setup_optimization_problem(){ obj = ROL::makePtr(this, nodal_density_flag); } } + if(TO_Module_List[imodule] == TO_MODULE_TYPE::Internal_Energy_Minimize){ + //debug print + *fos << " KINETIC ENERGY OBJECTIVE EXPECTS FEA MODULE INDEX " <(this, nodal_density_flag); + obj = ROL::makePtr(sub_obj, mma_bnd, x); + } + else{ + obj = ROL::makePtr(this, nodal_density_flag); + } + } else{ // TODO: Put validation earlier *fos << "PROGRAM IS ENDING DUE TO ERROR; UNDEFINED OBJECTIVE FUNCTION REQUESTED WITH NAME \"" diff --git a/src/Parallel-Solvers/Parallel-Explicit/Topology_Optimization/Internal_Energy_Minimize.h b/src/Parallel-Solvers/Parallel-Explicit/Topology_Optimization/Internal_Energy_Minimize.h new file mode 100644 index 000000000..d0c94d6d5 --- /dev/null +++ b/src/Parallel-Solvers/Parallel-Explicit/Topology_Optimization/Internal_Energy_Minimize.h @@ -0,0 +1,582 @@ +/********************************************************************************************** + © 2020. Triad National Security, LLC. All rights reserved. + This program was produced under U.S. Government contract 89233218CNA000001 for Los Alamos + National Laboratory (LANL), which is operated by Triad National Security, LLC for the U.S. + Department of Energy/National Nuclear Security Administration. All rights in the program are + reserved by Triad National Security, LLC, and the U.S. Department of Energy/National Nuclear + Security Administration. The Government is granted for itself and others acting on its behalf a + nonexclusive, paid-up, irrevocable worldwide license in this material to reproduce, prepare + derivative works, distribute copies to the public, perform publicly and display publicly, and + to permit others to do so. + This program is open source under the BSD-3 License. + Redistribution and use in source and binary forms, with or without modification, are permitted + provided that the following conditions are met: + 1. Redistributions of source code must retain the above copyright notice, this list of + conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, this list of + conditions and the following disclaimer in the documentation and/or other materials + provided with the distribution. + 3. Neither the name of the copyright holder nor the names of its contributors may be used + to endorse or promote products derived from this software without specific prior + written permission. + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; + OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + **********************************************************************************************/ + +#ifndef INTERNAL_ENERGY_MINIMIZE_TOPOPT_H +#define INTERNAL_ENERGY_MINIMIZE_TOPOPT_H + +#include "matar.h" +#include "elements.h" +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include "Tpetra_Details_makeColMap.hpp" +#include "Tpetra_Details_DefaultTypes.hpp" + +#include "ROL_Types.hpp" +#include +#include "ROL_Objective.hpp" +#include "Fierro_Optimization_Objective.hpp" +#include "ROL_Elementwise_Reduce.hpp" +#include "FEA_Module_SGH.h" +#include "Explicit_Solver.h" + +class InternalEnergyMinimize_TopOpt : public FierroOptimizationObjective +{ +typedef Tpetra::Map<>::local_ordinal_type LO; +typedef Tpetra::Map<>::global_ordinal_type GO; +typedef Tpetra::Map<>::node_type Node; +typedef Tpetra::Map Map; +typedef Tpetra::MultiVector MV; +typedef ROL::Vector V; +typedef ROL::TpetraMultiVector ROL_MV; + +using traits = Kokkos::ViewTraits; +using array_layout = typename traits::array_layout; +using execution_space = typename traits::execution_space; +using device_type = typename traits::device_type; +using memory_traits = typename traits::memory_traits; +using global_size_t = Tpetra::global_size_t; + +typedef Kokkos::View values_array; +typedef Kokkos::View global_indices_array; +typedef Kokkos::View indices_array; + +// typedef Kokkos::DualView::t_dev vec_array; +typedef MV::dual_view_type::t_dev vec_array; +typedef MV::dual_view_type::t_host host_vec_array; +typedef Kokkos::View const_host_vec_array; +typedef Kokkos::View const_vec_array; +typedef MV::dual_view_type dual_vec_array; + +private: + + Explicit_Solver* Explicit_Solver_Pointer_; + FEA_Module_SGH* FEM_SGH_; + ROL::Ptr ROL_Force; + ROL::Ptr ROL_Velocities; + ROL::Ptr ROL_Gradients; + Teuchos::RCP previous_gradients; + real_t initial_internal_energy; + real_t previous_objective_accumulation, objective_sign; + + bool first_init; //prevents ROL from calling init computation twice at start for the AL algorithm + + ///////////////////////////////////////////////////////////////////////////// + /// + /// \fn getVector + /// + /// \brief Retrieves ROL vector at desired location + /// + /// \param Pointer to desired ROL vector + /// + /// \return Returns ROL MV vector + /// + ///////////////////////////////////////////////////////////////////////////// + ROL::Ptr getVector(const V& x) + { + return dynamic_cast(x).getVector(); + } + + ///////////////////////////////////////////////////////////////////////////// + /// + /// \fn getVector + /// + /// \brief Retrieves ROL vector at desired location + /// + /// \param Pointer to desired ROL vector + /// + /// \return Returns const ROL MV vector + /// + ///////////////////////////////////////////////////////////////////////////// + ROL::Ptr getVector(V& x) + { + return dynamic_cast(x).getVector(); + } + +public: + bool nodal_density_flag_; + int last_comm_step, last_solve_step, current_step; + int num_dim; + size_t nvalid_modules; + size_t nlocal_nodes, num_corners, num_nodes_in_elem, rnum_elem; + DViewCArrayKokkos node_mass, node_coords; + std::vector valid_fea_modules; // modules that may interface with this objective function + FEA_MODULE_TYPE set_module_type; + // std::string my_fea_module = "SGH"; + + InternalEnergyMinimize_TopOpt(Explicit_Solver* Explicit_Solver_Pointer, bool nodal_density_flag) + { + Explicit_Solver_Pointer_ = Explicit_Solver_Pointer; + first_init = false; + valid_fea_modules.push_back(FEA_MODULE_TYPE::SGH); + valid_fea_modules.push_back(FEA_MODULE_TYPE::Dynamic_Elasticity); + nvalid_modules = valid_fea_modules.size(); + objective_sign = 1; + num_dim = Explicit_Solver_Pointer_->simparam.num_dims; + const Simulation_Parameters& simparam = Explicit_Solver_Pointer_->simparam; + for (const auto& fea_module : Explicit_Solver_Pointer_->fea_modules) { + for (int ivalid = 0; ivalid < nvalid_modules; ivalid++) { + if (fea_module->Module_Type == FEA_MODULE_TYPE::SGH) { + FEM_SGH_ = dynamic_cast(fea_module); + set_module_type = FEA_MODULE_TYPE::SGH; + node_mass = FEM_SGH_->node_mass; + node_coords = FEM_SGH_->node_coords; + nlocal_nodes = FEM_SGH_->nlocal_nodes; + num_corners = FEM_SGH_->num_corners; + num_nodes_in_elem = FEM_SGH_->num_nodes_in_elem; + rnum_elem = FEM_SGH_->rnum_elem; + } + } + } + nodal_density_flag_ = nodal_density_flag; + last_comm_step = last_solve_step = -1; + current_step = 0; + time_accumulation = true; + + previous_gradients = Teuchos::rcp(new MV(Explicit_Solver_Pointer_->map, 1)); + if(Explicit_Solver_Pointer_->simparam.optimization_options.maximize_flag){ + objective_sign = -1; + } + // ROL_Force = ROL::makePtr(FEM_->Global_Nodal_Forces); + if (set_module_type == FEA_MODULE_TYPE::SGH) { + ROL_Velocities = ROL::makePtr(FEM_SGH_->node_velocities_distributed); + } + } + + /* -------------------------------------------------------------------------------------- + Update solver state variables to synchronize with the current design variable vector, z + ----------------------------------------------------------------------------------------- */ + + void update(const ROL::Vector& z, ROL::UpdateType type, int iter = -1) + { + if (set_module_type == FEA_MODULE_TYPE::SGH) { + update_sgh(z, type, iter); + } + } + + /* -------------------------------------------------------------------------------------- + Update solver state variables to synchronize with the current design variable vector, z + ----------------------------------------------------------------------------------------- */ + + void update_sgh(const ROL::Vector& z, ROL::UpdateType type, int iter = -1) + { + // debug + std::ostream& out = std::cout; + Teuchos::RCP fos = Teuchos::fancyOStream(Teuchos::rcpFromRef(out)); + bool print_flag = false; + ROL::Ptr zp = getVector(z); //tpetra multivector wrapper on design vector + const_host_vec_array design_densities = zp->getLocalView(Tpetra::Access::ReadOnly); + + if (type == ROL::UpdateType::Initial) { + if(first_init){ + // This is the first call to update + if (Explicit_Solver_Pointer_->myrank == 0) { + *fos << "called SGH Initial" << std::endl; + } + + FEM_SGH_->comm_variables(zp); + FEM_SGH_->update_forward_solve(zp); + if(Explicit_Solver_Pointer_->myrank == 0){ + std::cout << "CURRENT TIME INTEGRAL OF INTERNAL ENERGY " << objective_accumulation << std::endl; + } + FEM_SGH_->compute_topology_optimization_adjoint_full(zp); + previous_objective_accumulation = objective_accumulation; + previous_gradients->assign(*(FEM_SGH_->cached_design_gradients_distributed)); + // initial design density data was already communicated for ghost nodes in init_design() + // decide to output current optimization state + // FEM_SGH_->Explicit_Solver_Pointer_->write_outputs(); + } + first_init = true; + } + else if (type == ROL::UpdateType::Accept) { + if (Explicit_Solver_Pointer_->myrank == 0) { + *fos << "called Accept" << std::endl; + } + + previous_objective_accumulation = objective_accumulation; + previous_gradients->assign(*(FEM_SGH_->cached_design_gradients_distributed)); + } + else if (type == ROL::UpdateType::Revert) { + // u_ was set to u=S(x) during a trial update + // and has been rejected as the new iterate + // Revert to cached value + // This is a new value of x + // communicate density variables for ghosts + if (Explicit_Solver_Pointer_->myrank == 0) { *fos << "called Revert" << std::endl; } + objective_accumulation = previous_objective_accumulation; + FEM_SGH_->cached_design_gradients_distributed->assign(*previous_gradients); + if(Explicit_Solver_Pointer_->myrank == 0){ + std::cout << "CURRENT TIME INTEGRAL OF INTERNAL ENERGY " << objective_accumulation << std::endl; + } + // FEM_SGH_->comm_variables(zp); + // // update deformation variables + // FEM_SGH_->update_forward_solve(zp); + // FEM_SGH_->compute_topology_optimization_adjoint_full(zp); + } + else if (type == ROL::UpdateType::Trial) { + // This is a new value of x + current_step++; + if(current_step%FEM_SGH_->simparam->optimization_options.optimization_output_freq==0){ + print_flag = true; + } + if (Explicit_Solver_Pointer_->myrank == 0) { + *fos << "called Trial" << std::endl; + } + // communicate density variables for ghosts + FEM_SGH_->comm_variables(zp); + // update deformation variables + FEM_SGH_->update_forward_solve(zp, print_flag); + + if(Explicit_Solver_Pointer_->myrank == 0){ + std::cout << "CURRENT TIME INTEGRAL OF INTERNAL ENERGY " << objective_accumulation << std::endl; + } + FEM_SGH_->compute_topology_optimization_adjoint_full(zp); + // decide to output current optimization state + // FEM_SGH_->Explicit_Solver_Pointer_->write_outputs(); + } + else{ // ROL::UpdateType::Temp + // This is a new value of x used for, + // e.g., finite-difference checks + if (Explicit_Solver_Pointer_->myrank == 0) { + *fos << "called Temp" << std::endl; + } + FEM_SGH_->comm_variables(zp); + FEM_SGH_->update_forward_solve(zp); + FEM_SGH_->compute_topology_optimization_adjoint_full(zp); + } + } + + /* -------------------------------------------------------------------------------------- + Compute time integral contribution for this objective function form + ----------------------------------------------------------------------------------------- */ + void step_accumulation(const real_t& dt, const size_t& cycle, const size_t& rk_level) { + + const_vec_array node_velocities_interface; + const_vec_array previous_node_velocities_interface; + bool use_solve_checkpoints = FEM_SGH_->simparam->optimization_options.use_solve_checkpoints; + if(use_solve_checkpoints){ + node_velocities_interface = FEM_SGH_->all_node_velocities_distributed->getLocalView(Tpetra::Access::ReadOnly); + previous_node_velocities_interface = FEM_SGH_->previous_node_velocities_distributed->getLocalView(Tpetra::Access::ReadOnly); + } + else{ + auto forward_solve_velocity_data = FEM_SGH_->forward_solve_velocity_data; + node_velocities_interface = (*forward_solve_velocity_data)[cycle + 1]->getLocalView(Tpetra::Access::ReadOnly); + previous_node_velocities_interface = (*forward_solve_velocity_data)[cycle]->getLocalView(Tpetra::Access::ReadOnly); + } + + double KE_sum = 0.0; + double KE_loc_sum = 0.0; + // extensive KE + if(FEM_SGH_->simparam->optimization_options.optimization_objective_regions.size()){ + int nobj_volumes = FEM_SGH_->simparam->optimization_options.optimization_objective_regions.size(); + auto optimization_objective_regions = FEM_SGH_->simparam->optimization_options.optimization_objective_regions; + const_vec_array all_initial_node_coords = FEM_SGH_->all_initial_node_coords_distributed->getLocalView(Tpetra::Access::ReadOnly); + REDUCE_SUM_CLASS(node_gid, 0, nlocal_nodes, KE_loc_sum, { + double ke = 0; + double current_node_coords[3]; + bool contained = false; + current_node_coords[0] = all_initial_node_coords(node_gid, 0); + current_node_coords[1] = all_initial_node_coords(node_gid, 1); + current_node_coords[2] = all_initial_node_coords(node_gid, 2); + for(int ivolume = 0; ivolume < nobj_volumes; ivolume++){ + if(optimization_objective_regions(ivolume).contains(current_node_coords)){ + contained = true; + } + } + if(contained){ + for (size_t dim = 0; dim < num_dim; dim++) { + // midpoint integration approximation + ke += (node_velocities_interface(node_gid, dim) + previous_node_velocities_interface(node_gid, dim)) * + (node_velocities_interface(node_gid, dim) + previous_node_velocities_interface(node_gid, dim)) / 4; // 1/2 at end + } // end for + } + + if (num_dim == 2) { + KE_loc_sum += node_mass(node_gid) * node_coords(rk_level, node_gid, 1) * ke; + } + else{ + KE_loc_sum += node_mass(node_gid) * ke; + } + }, KE_sum); + } + else{ + REDUCE_SUM_CLASS(node_gid, 0, nlocal_nodes, KE_loc_sum, { + double ke = 0; + for (size_t dim = 0; dim < num_dim; dim++) { + // midpoint integration approximation + ke += (node_velocities_interface(node_gid, dim) + previous_node_velocities_interface(node_gid, dim)) * + (node_velocities_interface(node_gid, dim) + previous_node_velocities_interface(node_gid, dim)) / 4; // 1/2 at end + } // end for + + if (num_dim == 2) { + KE_loc_sum += node_mass(node_gid) * node_coords(rk_level, node_gid, 1) * ke; + } + else{ + KE_loc_sum += node_mass(node_gid) * ke; + } + }, KE_sum); + } + Kokkos::fence(); + KE_sum = 0.5 * KE_sum; + objective_accumulation += KE_sum * dt; + } + + /* -------------------------------------------------------------------------------------- + Update objective value with the current design variable vector, z + ----------------------------------------------------------------------------------------- */ + + real_t value(const ROL::Vector& z, real_t& tol) + { + // std::cout << "Started obj value on task " <myrank << std::endl; + ROL::Ptr zp = getVector(z); + real_t c = 0.0; + + // debug print + // std::ostream &out = std::cout; + // Teuchos::RCP fos = Teuchos::fancyOStream(Teuchos::rcpFromRef(out)); + // if(FEM_->myrank==0) + // *fos << "Value function z:" << std::endl; + // zp->describe(*fos,Teuchos::VERB_EXTREME); + // *fos << std::endl; + // std::fflush(stdout); + + const_host_vec_array design_densities = zp->getLocalView(Tpetra::Access::ReadOnly); + // communicate ghosts and solve for nodal degrees of freedom as a function of the current design variables + /* + if(last_comm_step!=current_step){ + FEM_->comm_variables(zp); + last_comm_step = current_step; + } + + if(last_solve_step!=current_step){ + //std::cout << "UPDATED velocities" << std::endl; + FEM_->update_linear_solve(zp); + last_solve_step = current_step; + } + */ + // debug print of velocities + // std::ostream &out = std::cout; + // Teuchos::RCP fos = Teuchos::fancyOStream(Teuchos::rcpFromRef(out)); + // if(FEM_->myrank==0) + // *fos << "Displacement data :" << std::endl; + // FEM_->node_velocities_distributed->describe(*fos,Teuchos::VERB_EXTREME); + // *fos << std::endl; + // std::fflush(stdout); + + std::cout.precision(10); + + // std::cout << "Ended obj value on task " <myrank << std::endl; + return objective_sign*objective_accumulation; + } + + /* -------------------------------------------------------------------------------------- + Update gradient vector (g) with the current design variable vector, z + ----------------------------------------------------------------------------------------- */ + + void gradient(ROL::Vector& g, const ROL::Vector& z, real_t& tol) + { + // std::cout << "Started obj gradient on task " <myrank << std::endl; + // get Tpetra multivector pointer from the ROL vector + ROL::Ptr zp = getVector(z); //pointer to design vector + ROL::Ptr gp = getVector(g); //pointer to gradient vector + + // communicate ghosts and solve for nodal degrees of freedom as a function of the current design variables + // FEM_->gradient_print_sync=1; + // FEM_->gradient_print_sync=0; + // get local view of the data + + if (set_module_type == FEA_MODULE_TYPE::SGH) { + FEM_SGH_->compute_topology_optimization_gradient_full(zp, gp); + } + gp->scale(objective_sign); + // debug print of gradient + // std::ostream &out = std::cout; + // Teuchos::RCP fos = Teuchos::fancyOStream(Teuchos::rcpFromRef(out)); + // if(FEM_->myrank==0) + // *fos << "Gradient data :" << std::endl; + // gp->describe(*fos,Teuchos::VERB_EXTREME); + // *fos << std::endl; + // std::fflush(stdout); + // for(int i = 0; i < FEM_->nlocal_nodes; i++){ + // objective_gradients(i,0) *= -1; + // } + + // std::cout << "Objective Gradient called"<< std::endl; + // debug print of design variables + // std::ostream &out = std::cout; + // Teuchos::RCP fos = Teuchos::fancyOStream(Teuchos::rcpFromRef(out)); + // if(FEM_->myrank==0) + // *fos << "Gradient data :" << std::endl; + // gp->describe(*fos,Teuchos::VERB_EXTREME); + + // *fos << std::endl; + // std::fflush(stdout); + // std::cout << "ended obj gradient on task " <myrank << std::endl; + } + + //contributes to rate of change of adjoint vector due to term with velocity gradient of objective + void velocity_gradient_adjoint_contribution(vec_array& adjoint_rate_vector, const DViewCArrayKokkos& node_mass, + const DViewCArrayKokkos& elem_mass, const DViewCArrayKokkos& node_vel, + const DViewCArrayKokkos& node_coords, const DViewCArrayKokkos& elem_sie, + const size_t& rk_level){ + + + FOR_ALL_CLASS(node_gid, 0, nlocal_nodes, { + for (int idim = 0; idim < num_dim; idim++) { + adjoint_rate_vector(node_gid, idim) = node_mass(node_gid)*node_vel(rk_level, node_gid, idim); + } + }); // end parallel for + Kokkos::fence(); + } + + void density_gradient_term(vec_array& gradient_vector, const DViewCArrayKokkos& node_mass, + const DViewCArrayKokkos& elem_mass, const DViewCArrayKokkos& node_vel, + const DViewCArrayKokkos& node_coords, const DViewCArrayKokkos& elem_sie, + const size_t& rk_level, const real_t& global_dt = 0){ + size_t current_data_index, next_data_index; + CArrayKokkos current_element_velocities = CArrayKokkos(num_nodes_in_elem, num_dim); + CArrayKokkos current_element_adjoint = CArrayKokkos(num_nodes_in_elem, num_dim); + auto optimization_objective_regions = FEM_SGH_->simparam->optimization_options.optimization_objective_regions; + auto nodes_in_elem = FEM_SGH_->nodes_in_elem; + auto corner_value_storage = FEM_SGH_->corner_value_storage; + auto corners_in_node = FEM_SGH_->corners_in_node; + auto num_corners_in_node = FEM_SGH_->num_corners_in_node; + auto relative_element_densities = FEM_SGH_->relative_element_densities; + + // view scope + { + if(optimization_objective_regions.size()){ + int nobj_volumes = optimization_objective_regions.size(); + const_vec_array all_initial_node_coords = FEM_SGH_->all_initial_node_coords_distributed->getLocalView(Tpetra::Access::ReadOnly); + FOR_ALL_CLASS(elem_id, 0, rnum_elem, { + size_t node_id; + size_t corner_id; + real_t inner_product; + // std::cout << elem_mass(elem_id) < Date: Wed, 21 Aug 2024 00:05:16 -0600 Subject: [PATCH 201/233] WIP: internal energy objective --- .../SGH_Solver/src/FEA_Module_SGH.cpp | 2 + .../Internal_Energy_Minimize.h | 79 ++++++++----------- 2 files changed, 36 insertions(+), 45 deletions(-) diff --git a/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/FEA_Module_SGH.cpp b/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/FEA_Module_SGH.cpp index 1a429d02a..609086e58 100644 --- a/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/FEA_Module_SGH.cpp +++ b/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/FEA_Module_SGH.cpp @@ -1220,6 +1220,8 @@ void FEA_Module_SGH::sgh_solve() if(use_solve_checkpoints&&optimization_on){ previous_node_velocities_distributed->assign(*all_node_velocities_distributed); + previous_node_coords_distributed->assign(*all_node_coords_distributed); + previous_element_internal_energy_distributed->assign(*element_internal_energy_distributed); } // integrate solution forward in time diff --git a/src/Parallel-Solvers/Parallel-Explicit/Topology_Optimization/Internal_Energy_Minimize.h b/src/Parallel-Solvers/Parallel-Explicit/Topology_Optimization/Internal_Energy_Minimize.h index d0c94d6d5..1cff7d4b5 100644 --- a/src/Parallel-Solvers/Parallel-Explicit/Topology_Optimization/Internal_Energy_Minimize.h +++ b/src/Parallel-Solvers/Parallel-Explicit/Topology_Optimization/Internal_Energy_Minimize.h @@ -289,74 +289,62 @@ typedef MV::dual_view_type dual_vec_array; ----------------------------------------------------------------------------------------- */ void step_accumulation(const real_t& dt, const size_t& cycle, const size_t& rk_level) { - const_vec_array node_velocities_interface; - const_vec_array previous_node_velocities_interface; + const_vec_array current_elem_sie; + const_vec_array previous_elem_sie; + size_t nlocal_elem_non_overlapping = FEM_SGH_->Explicit_Solver_Pointer_->nlocal_elem_non_overlapping; + auto nodes_in_elem = FEM_SGH_->nodes_in_elem; + auto elem_mass = FEM_SGH_->elem_mass; bool use_solve_checkpoints = FEM_SGH_->simparam->optimization_options.use_solve_checkpoints; if(use_solve_checkpoints){ - node_velocities_interface = FEM_SGH_->all_node_velocities_distributed->getLocalView(Tpetra::Access::ReadOnly); - previous_node_velocities_interface = FEM_SGH_->previous_node_velocities_distributed->getLocalView(Tpetra::Access::ReadOnly); + current_elem_sie = FEM_SGH_->element_internal_energy_distributed->getLocalView(Tpetra::Access::ReadOnly); + previous_elem_sie = FEM_SGH_->previous_element_internal_energy_distributed->getLocalView(Tpetra::Access::ReadOnly); } else{ - auto forward_solve_velocity_data = FEM_SGH_->forward_solve_velocity_data; - node_velocities_interface = (*forward_solve_velocity_data)[cycle + 1]->getLocalView(Tpetra::Access::ReadOnly); - previous_node_velocities_interface = (*forward_solve_velocity_data)[cycle]->getLocalView(Tpetra::Access::ReadOnly); + auto forward_solve_internal_energy_data = FEM_SGH_->forward_solve_internal_energy_data; + current_elem_sie = (*forward_solve_internal_energy_data)[cycle + 1]->getLocalView(Tpetra::Access::ReadOnly); + previous_elem_sie = (*forward_solve_internal_energy_data)[cycle]->getLocalView(Tpetra::Access::ReadOnly); } - double KE_sum = 0.0; - double KE_loc_sum = 0.0; + double IE_sum = 0.0; + double IE_loc_sum = 0.0; // extensive KE if(FEM_SGH_->simparam->optimization_options.optimization_objective_regions.size()){ int nobj_volumes = FEM_SGH_->simparam->optimization_options.optimization_objective_regions.size(); auto optimization_objective_regions = FEM_SGH_->simparam->optimization_options.optimization_objective_regions; const_vec_array all_initial_node_coords = FEM_SGH_->all_initial_node_coords_distributed->getLocalView(Tpetra::Access::ReadOnly); - REDUCE_SUM_CLASS(node_gid, 0, nlocal_nodes, KE_loc_sum, { + REDUCE_SUM_CLASS(elem_gid, 0, nlocal_elem_non_overlapping, IE_loc_sum, { double ke = 0; - double current_node_coords[3]; + int node_id; + double current_elem_coords[3]; bool contained = false; - current_node_coords[0] = all_initial_node_coords(node_gid, 0); - current_node_coords[1] = all_initial_node_coords(node_gid, 1); - current_node_coords[2] = all_initial_node_coords(node_gid, 2); + current_elem_coords[0] = 0; + current_elem_coords[1] = 0; + current_elem_coords[2] = 0; + for(int inode=0; inode< num_nodes_in_elem; inode++){ + node_id = nodes_in_elem(elem_gid, inode); + current_elem_coords[0] += all_initial_node_coords(node_id, 0)/num_nodes_in_elem; + current_elem_coords[1] += all_initial_node_coords(node_id, 1)/num_nodes_in_elem; + current_elem_coords[2] += all_initial_node_coords(node_id, 2)/num_nodes_in_elem; + } for(int ivolume = 0; ivolume < nobj_volumes; ivolume++){ - if(optimization_objective_regions(ivolume).contains(current_node_coords)){ + if(optimization_objective_regions(ivolume).contains(current_elem_coords)){ contained = true; } } if(contained){ - for (size_t dim = 0; dim < num_dim; dim++) { - // midpoint integration approximation - ke += (node_velocities_interface(node_gid, dim) + previous_node_velocities_interface(node_gid, dim)) * - (node_velocities_interface(node_gid, dim) + previous_node_velocities_interface(node_gid, dim)) / 4; // 1/2 at end - } // end for + IE_loc_sum += elem_mass(elem_gid) * 0.5 * (current_elem_sie(elem_gid,0)+previous_elem_sie(elem_gid,0)); } - if (num_dim == 2) { - KE_loc_sum += node_mass(node_gid) * node_coords(rk_level, node_gid, 1) * ke; - } - else{ - KE_loc_sum += node_mass(node_gid) * ke; - } - }, KE_sum); + + }, IE_sum); } else{ - REDUCE_SUM_CLASS(node_gid, 0, nlocal_nodes, KE_loc_sum, { - double ke = 0; - for (size_t dim = 0; dim < num_dim; dim++) { - // midpoint integration approximation - ke += (node_velocities_interface(node_gid, dim) + previous_node_velocities_interface(node_gid, dim)) * - (node_velocities_interface(node_gid, dim) + previous_node_velocities_interface(node_gid, dim)) / 4; // 1/2 at end - } // end for - - if (num_dim == 2) { - KE_loc_sum += node_mass(node_gid) * node_coords(rk_level, node_gid, 1) * ke; - } - else{ - KE_loc_sum += node_mass(node_gid) * ke; - } - }, KE_sum); + REDUCE_SUM_CLASS(elem_gid, 0, nlocal_elem_non_overlapping, IE_loc_sum, { + IE_loc_sum += elem_mass(elem_gid) * 0.5 * (current_elem_sie(elem_gid,0)+previous_elem_sie(elem_gid,0)); + }, IE_sum); } Kokkos::fence(); - KE_sum = 0.5 * KE_sum; - objective_accumulation += KE_sum * dt; + objective_accumulation += IE_sum * dt; } /* -------------------------------------------------------------------------------------- @@ -453,7 +441,7 @@ typedef MV::dual_view_type dual_vec_array; } //contributes to rate of change of adjoint vector due to term with velocity gradient of objective - void velocity_gradient_adjoint_contribution(vec_array& adjoint_rate_vector, const DViewCArrayKokkos& node_mass, + void sie_gradient_adjoint_contribution(vec_array& adjoint_rate_vector, const DViewCArrayKokkos& node_mass, const DViewCArrayKokkos& elem_mass, const DViewCArrayKokkos& node_vel, const DViewCArrayKokkos& node_coords, const DViewCArrayKokkos& elem_sie, const size_t& rk_level){ @@ -467,6 +455,7 @@ typedef MV::dual_view_type dual_vec_array; Kokkos::fence(); } + //contribution to gradient tally from objective w.r.t design density void density_gradient_term(vec_array& gradient_vector, const DViewCArrayKokkos& node_mass, const DViewCArrayKokkos& elem_mass, const DViewCArrayKokkos& node_vel, const DViewCArrayKokkos& node_coords, const DViewCArrayKokkos& elem_sie, From b68e2aeb01115563a6cd88be02eb3d3d7b6548d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CAdrian-Diaz=E2=80=9D?= <“adriandiaz1117@gmail.com”> Date: Wed, 21 Aug 2024 10:07:32 -0600 Subject: [PATCH 202/233] BUG: optimization if check --- src/Parallel-Solvers/Parallel-Explicit/Explicit_Solver.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Parallel-Solvers/Parallel-Explicit/Explicit_Solver.cpp b/src/Parallel-Solvers/Parallel-Explicit/Explicit_Solver.cpp index f94d893a1..d84a736b1 100644 --- a/src/Parallel-Solvers/Parallel-Explicit/Explicit_Solver.cpp +++ b/src/Parallel-Solvers/Parallel-Explicit/Explicit_Solver.cpp @@ -1379,7 +1379,7 @@ void Explicit_Solver::setup_optimization_problem(){ obj = ROL::makePtr(this, nodal_density_flag); } } - if(TO_Module_List[imodule] == TO_MODULE_TYPE::Internal_Energy_Minimize){ + else if(TO_Module_List[imodule] == TO_MODULE_TYPE::Internal_Energy_Minimize){ //debug print *fos << " KINETIC ENERGY OBJECTIVE EXPECTS FEA MODULE INDEX " < Date: Wed, 21 Aug 2024 20:45:15 -0600 Subject: [PATCH 203/233] ENH: Internal energy objective --- .../Internal_Energy_Minimize.h | 60 ++++++------------- .../Kinetic_Energy_Minimize.h | 1 - 2 files changed, 17 insertions(+), 44 deletions(-) diff --git a/src/Parallel-Solvers/Parallel-Explicit/Topology_Optimization/Internal_Energy_Minimize.h b/src/Parallel-Solvers/Parallel-Explicit/Topology_Optimization/Internal_Energy_Minimize.h index 1cff7d4b5..ff857a3ba 100644 --- a/src/Parallel-Solvers/Parallel-Explicit/Topology_Optimization/Internal_Energy_Minimize.h +++ b/src/Parallel-Solvers/Parallel-Explicit/Topology_Optimization/Internal_Energy_Minimize.h @@ -313,7 +313,6 @@ typedef MV::dual_view_type dual_vec_array; auto optimization_objective_regions = FEM_SGH_->simparam->optimization_options.optimization_objective_regions; const_vec_array all_initial_node_coords = FEM_SGH_->all_initial_node_coords_distributed->getLocalView(Tpetra::Access::ReadOnly); REDUCE_SUM_CLASS(elem_gid, 0, nlocal_elem_non_overlapping, IE_loc_sum, { - double ke = 0; int node_id; double current_elem_coords[3]; bool contained = false; @@ -447,10 +446,8 @@ typedef MV::dual_view_type dual_vec_array; const size_t& rk_level){ - FOR_ALL_CLASS(node_gid, 0, nlocal_nodes, { - for (int idim = 0; idim < num_dim; idim++) { - adjoint_rate_vector(node_gid, idim) = node_mass(node_gid)*node_vel(rk_level, node_gid, idim); - } + FOR_ALL_CLASS(elem_gid, 0, rnum_elem, { + adjoint_rate_vector(elem_gid, 0) = elem_mass(elem_gid); }); // end parallel for Kokkos::fence(); } @@ -461,8 +458,6 @@ typedef MV::dual_view_type dual_vec_array; const DViewCArrayKokkos& node_coords, const DViewCArrayKokkos& elem_sie, const size_t& rk_level, const real_t& global_dt = 0){ size_t current_data_index, next_data_index; - CArrayKokkos current_element_velocities = CArrayKokkos(num_nodes_in_elem, num_dim); - CArrayKokkos current_element_adjoint = CArrayKokkos(num_nodes_in_elem, num_dim); auto optimization_objective_regions = FEM_SGH_->simparam->optimization_options.optimization_objective_regions; auto nodes_in_elem = FEM_SGH_->nodes_in_elem; auto corner_value_storage = FEM_SGH_->corner_value_storage; @@ -481,33 +476,27 @@ typedef MV::dual_view_type dual_vec_array; real_t inner_product; // std::cout << elem_mass(elem_id) < current_element_velocities = CArrayKokkos(num_nodes_in_elem, num_dim); - CArrayKokkos current_element_adjoint = CArrayKokkos(num_nodes_in_elem, num_dim); auto optimization_objective_regions = FEM_SGH_->simparam->optimization_options.optimization_objective_regions; auto nodes_in_elem = FEM_SGH_->nodes_in_elem; auto corner_value_storage = FEM_SGH_->corner_value_storage; From e051b1aa69d6a28544a3edd93ef736e4d7b29e47 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CAdrian-Diaz=E2=80=9D?= <“adriandiaz1117@gmail.com”> Date: Thu, 22 Aug 2024 18:57:55 -0600 Subject: [PATCH 204/233] BUG: missing recast error --- .../Parallel-Explicit/SGH_Solver/src/sgh_optimization.cpp | 6 +++--- .../Topology_Optimization/Internal_Energy_Minimize.h | 1 - 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/sgh_optimization.cpp b/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/sgh_optimization.cpp index f9f9864a7..3aba79eb2 100644 --- a/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/sgh_optimization.cpp +++ b/src/Parallel-Solvers/Parallel-Explicit/SGH_Solver/src/sgh_optimization.cpp @@ -68,7 +68,7 @@ // optimization #include "ROL_Solver.hpp" -#include "Kinetic_Energy_Minimize.h" +#include "Fierro_Optimization_Objective.hpp" ///////////////////////////////////////////////////////////////////////////// /// @@ -173,8 +173,8 @@ void FEA_Module_SGH::update_forward_solve(Teuchos::RCP zp, bool print_ */ // simple setup to just request KE for now; above loop to be expanded and used later for scanning modules obj_pointer = problem->getObjective(); - KineticEnergyMinimize_TopOpt& kinetic_energy_minimize_function = dynamic_cast(*obj_pointer); - kinetic_energy_minimize_function.objective_accumulation = 0; + objective_function = dynamic_cast(obj_pointer.getRawPtr()); + objective_function->objective_accumulation = 0; // interface trial density vector diff --git a/src/Parallel-Solvers/Parallel-Explicit/Topology_Optimization/Internal_Energy_Minimize.h b/src/Parallel-Solvers/Parallel-Explicit/Topology_Optimization/Internal_Energy_Minimize.h index ff857a3ba..f74208455 100644 --- a/src/Parallel-Solvers/Parallel-Explicit/Topology_Optimization/Internal_Energy_Minimize.h +++ b/src/Parallel-Solvers/Parallel-Explicit/Topology_Optimization/Internal_Energy_Minimize.h @@ -511,7 +511,6 @@ typedef MV::dual_view_type dual_vec_array; } else{ FOR_ALL_CLASS(elem_id, 0, rnum_elem, { - size_t node_id; size_t corner_id; real_t inner_product; // std::cout << elem_mass(elem_id) < Date: Sat, 24 Aug 2024 00:28:56 -0600 Subject: [PATCH 205/233] BUG: elem_sie access bug in objective --- .../Internal_Energy_Minimize.h | 13 ++++++++----- .../Topology_Optimization/Kinetic_Energy_Minimize.h | 3 +++ 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/Parallel-Solvers/Parallel-Explicit/Topology_Optimization/Internal_Energy_Minimize.h b/src/Parallel-Solvers/Parallel-Explicit/Topology_Optimization/Internal_Energy_Minimize.h index f74208455..b41516140 100644 --- a/src/Parallel-Solvers/Parallel-Explicit/Topology_Optimization/Internal_Energy_Minimize.h +++ b/src/Parallel-Solvers/Parallel-Explicit/Topology_Optimization/Internal_Energy_Minimize.h @@ -280,6 +280,9 @@ typedef MV::dual_view_type dual_vec_array; } FEM_SGH_->comm_variables(zp); FEM_SGH_->update_forward_solve(zp); + if(Explicit_Solver_Pointer_->myrank == 0){ + std::cout << "CURRENT TIME INTEGRAL OF INTERNAL ENERGY " << objective_accumulation << std::endl; + } FEM_SGH_->compute_topology_optimization_adjoint_full(zp); } } @@ -342,6 +345,7 @@ typedef MV::dual_view_type dual_vec_array; IE_loc_sum += elem_mass(elem_gid) * 0.5 * (current_elem_sie(elem_gid,0)+previous_elem_sie(elem_gid,0)); }, IE_sum); } + Kokkos::fence(); objective_accumulation += IE_sum * dt; } @@ -457,7 +461,6 @@ typedef MV::dual_view_type dual_vec_array; const DViewCArrayKokkos& elem_mass, const DViewCArrayKokkos& node_vel, const DViewCArrayKokkos& node_coords, const DViewCArrayKokkos& elem_sie, const size_t& rk_level, const real_t& global_dt = 0){ - size_t current_data_index, next_data_index; auto optimization_objective_regions = FEM_SGH_->simparam->optimization_options.optimization_objective_regions; auto nodes_in_elem = FEM_SGH_->nodes_in_elem; auto corner_value_storage = FEM_SGH_->corner_value_storage; @@ -496,7 +499,7 @@ typedef MV::dual_view_type dual_vec_array; } } if(contained){ - inner_product = elem_mass(elem_id) * elem_sie(elem_id); + inner_product = elem_mass(elem_id) * elem_sie(rk_level, elem_id); } } @@ -515,13 +518,13 @@ typedef MV::dual_view_type dual_vec_array; real_t inner_product; // std::cout << elem_mass(elem_id) <comm_variables(zp); FEM_SGH_->update_forward_solve(zp); + if(Explicit_Solver_Pointer_->myrank == 0){ + std::cout << "CURRENT TIME INTEGRAL OF KINETIC ENERGY " << objective_accumulation << std::endl; + } FEM_SGH_->compute_topology_optimization_adjoint_full(zp); } } From 4aad9c74df83b124c8ad0c188d0d13c710586c0a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CAdrian-Diaz=E2=80=9D?= <“adriandiaz1117@gmail.com”> Date: Mon, 26 Aug 2024 21:34:20 -0600 Subject: [PATCH 206/233] ENH: taylor anvil yaml example script for optimization --- .../taylor_anvil_opt.yaml | 96 +++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 src/Parallel-Solvers/Parallel-Explicit/Example_Yaml_Scripts/taylor_anvil_opt.yaml diff --git a/src/Parallel-Solvers/Parallel-Explicit/Example_Yaml_Scripts/taylor_anvil_opt.yaml b/src/Parallel-Solvers/Parallel-Explicit/Example_Yaml_Scripts/taylor_anvil_opt.yaml new file mode 100644 index 000000000..116dba50a --- /dev/null +++ b/src/Parallel-Solvers/Parallel-Explicit/Example_Yaml_Scripts/taylor_anvil_opt.yaml @@ -0,0 +1,96 @@ +num_dims: 3 +dynamic_options: + time_final: 20.0 + dt_min: 1.e-8 + dt_max: 1.e-2 + dt_start: 1.e-5 + cycle_stop: 2000000 + output_time_sequence_level: extreme + print_cycle: 20 + +num_dims: 3 +input_options: + mesh_file_format: ensight + mesh_file_name: mesh_z_taylorAnvil.geo + zero_index_base: false + topology_optimization_restart: false + +output_options: + timer_output_level: thorough + output_file_format: vtk + graphics_step: 5.0 + write_initial: true + write_final: false + optimization_restart_file: true + +fea_module_parameters: + - type: SGH + material_id: 0 + boundary_conditions: + # Tag X plane + - surface: + type: x_plane + plane_position: 0.0 + type: reflected + + # Tag Y plane + - surface: + type: y_plane + plane_position: 0.0 + type: reflected + + # Tag Z plane + - surface: + type: z_plane + plane_position: 0.0 + type: reflected + +materials: + - id: 0 + eos_model: ideal_gas + strength_model: none + elastic_modulus: 10 + poisson_ratio: 0.3 + maximum_limiter: true + q1: 2.0 + q2: 4.0 + q1ex: 2.0 + q2ex: 4.0 + eos_global_vars: + - 2.666666666666667 + - 1.0E-14 + - 1.0 + +regions: + - volume: + type: global + material_id: 0 + den: 1.0 + sie: 1.0e-9 + + velocity: cartesian + u: 0 + v: 0 + w: -0.5 + +optimization_options: + optimization_process: topology_optimization + optimization_objective: maximize_internal_energy + use_gradient_tally: true + use_solve_checkpoints: true + num_solve_checkpoints: 100 + disable_forward_solve_output: true + optimization_output_freq: 1 + rol_params: + subproblem_algorithm: line_search + initial_constraint_penalty: 1.e3 + step_tolerance: 1.e-3 + gradient_tolerance: 1.e-5 + constraint_tolerance: 1.e-5 + iteration_limit: 20 + density_epsilon: 0.4 + variable_outer_shell: true + constraints: + - type: mass + relation: equality + value: 0.60 From 094d80648d588182ca8acd599475325fa0d2ae9b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CAdrian-Diaz=E2=80=9D?= <“adriandiaz1117@gmail.com”> Date: Wed, 28 Aug 2024 23:21:11 -0600 Subject: [PATCH 207/233] WIP: pressure vessel UI --- .../FEA_Module/Elasticity_Parameters.h | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/Parallel-Solvers/Simulation_Parameters/FEA_Module/Elasticity_Parameters.h b/src/Parallel-Solvers/Simulation_Parameters/FEA_Module/Elasticity_Parameters.h index 71eedd88a..3bfef3e97 100644 --- a/src/Parallel-Solvers/Simulation_Parameters/FEA_Module/Elasticity_Parameters.h +++ b/src/Parallel-Solvers/Simulation_Parameters/FEA_Module/Elasticity_Parameters.h @@ -5,7 +5,7 @@ #include "yaml-serializable.h" struct Elasticity_Parameters - : virtual ImplicitModule, FEA_Module_Parameters::Register { + : virtual ImplicitModule, FEA_Module_Parameters::Register, Yaml::ValidatedYaml { bool strain_max_flag = false; bool modal_analysis = false; bool anisotropic_lattice = false; @@ -16,6 +16,7 @@ struct Elasticity_Parameters real_t constant_pressure = 0; real_t constant_stress[6]; bool constant_stress_flag = false; + bool pressure_vessel_flag = false; bool muelu_parameters_xml_file = false; std::string xml_parameters_file_name = "elasticity3D.xml"; @@ -32,8 +33,15 @@ struct Elasticity_Parameters constant_stress[3] = constant_stress[4] = constant_stress[5] = 0; } } + + void validate() { + if (pressure_vessel_flag&&!constant_pressure) { + std::cerr << "ERROR: Pressure vessel simulation requested without setting \"constant_pressure\" " << std::endl; + } + } }; IMPL_YAML_SERIALIZABLE_WITH_BASE(Elasticity_Parameters, ImplicitModule, strain_max_flag, modal_analysis, anisotropic_lattice, num_modes, smallest_modes, largest_modes, - convergence_tolerance, constant_pressure, constant_stress, muelu_parameters_xml_file, xml_parameters_file_name + convergence_tolerance, constant_pressure, constant_stress, muelu_parameters_xml_file, + xml_parameters_file_name, pressure_vessel_flag ) From 05d4b419e8092bad64707e648b8640e85666a5a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CAdrian-Diaz=E2=80=9D?= <“adriandiaz1117@gmail.com”> Date: Thu, 29 Aug 2024 14:21:32 -0600 Subject: [PATCH 208/233] DOC: remove unused params in yaml files, add new yaml example --- ...mple_opt.yaml => example_elastic_opt.yaml} | 0 .../example_implosion.yaml | 2 - .../example_sedov_sgh_opt.yaml | 2 - .../example_sgh_opt_region.yaml | 2 - .../example_sgh_opt_restart.yaml | 2 - .../Example_Yaml_Scripts/example_simple.yaml | 2 - .../implosion_vel_opt.yaml | 84 +++++++++++++++++++ 7 files changed, 84 insertions(+), 10 deletions(-) rename src/Parallel-Solvers/Parallel-Explicit/Example_Yaml_Scripts/{example_simple_opt.yaml => example_elastic_opt.yaml} (100%) create mode 100644 src/Parallel-Solvers/Parallel-Explicit/Example_Yaml_Scripts/implosion_vel_opt.yaml diff --git a/src/Parallel-Solvers/Parallel-Explicit/Example_Yaml_Scripts/example_simple_opt.yaml b/src/Parallel-Solvers/Parallel-Explicit/Example_Yaml_Scripts/example_elastic_opt.yaml similarity index 100% rename from src/Parallel-Solvers/Parallel-Explicit/Example_Yaml_Scripts/example_simple_opt.yaml rename to src/Parallel-Solvers/Parallel-Explicit/Example_Yaml_Scripts/example_elastic_opt.yaml diff --git a/src/Parallel-Solvers/Parallel-Explicit/Example_Yaml_Scripts/example_implosion.yaml b/src/Parallel-Solvers/Parallel-Explicit/Example_Yaml_Scripts/example_implosion.yaml index ea43b3273..d85f75081 100644 --- a/src/Parallel-Solvers/Parallel-Explicit/Example_Yaml_Scripts/example_implosion.yaml +++ b/src/Parallel-Solvers/Parallel-Explicit/Example_Yaml_Scripts/example_implosion.yaml @@ -54,8 +54,6 @@ materials: - id: 0 eos_model: ideal_gas strength_model: none - elastic_modulus: 10 - poisson_ratio: 0.3 maximum_limiter: 1 q1: 2.0 q2: 4.0 diff --git a/src/Parallel-Solvers/Parallel-Explicit/Example_Yaml_Scripts/example_sedov_sgh_opt.yaml b/src/Parallel-Solvers/Parallel-Explicit/Example_Yaml_Scripts/example_sedov_sgh_opt.yaml index 6ffd94127..2d8fbe9fd 100644 --- a/src/Parallel-Solvers/Parallel-Explicit/Example_Yaml_Scripts/example_sedov_sgh_opt.yaml +++ b/src/Parallel-Solvers/Parallel-Explicit/Example_Yaml_Scripts/example_sedov_sgh_opt.yaml @@ -64,8 +64,6 @@ materials: - id: 0 eos_model: ideal_gas strength_model: none - elastic_modulus: 10 - poisson_ratio: 0.3 maximum_limiter: true q1: 1.0 q2: 1.33 diff --git a/src/Parallel-Solvers/Parallel-Explicit/Example_Yaml_Scripts/example_sgh_opt_region.yaml b/src/Parallel-Solvers/Parallel-Explicit/Example_Yaml_Scripts/example_sgh_opt_region.yaml index 1f457dfdb..f416ee02d 100644 --- a/src/Parallel-Solvers/Parallel-Explicit/Example_Yaml_Scripts/example_sgh_opt_region.yaml +++ b/src/Parallel-Solvers/Parallel-Explicit/Example_Yaml_Scripts/example_sgh_opt_region.yaml @@ -64,8 +64,6 @@ materials: - id: 0 eos_model: ideal_gas strength_model: none - elastic_modulus: 10 - poisson_ratio: 0.3 maximum_limiter: true q1: 1.0 q2: 1.33 diff --git a/src/Parallel-Solvers/Parallel-Explicit/Example_Yaml_Scripts/example_sgh_opt_restart.yaml b/src/Parallel-Solvers/Parallel-Explicit/Example_Yaml_Scripts/example_sgh_opt_restart.yaml index 9f5b45796..50702df5a 100644 --- a/src/Parallel-Solvers/Parallel-Explicit/Example_Yaml_Scripts/example_sgh_opt_restart.yaml +++ b/src/Parallel-Solvers/Parallel-Explicit/Example_Yaml_Scripts/example_sgh_opt_restart.yaml @@ -67,8 +67,6 @@ materials: - id: 0 eos_model: ideal_gas strength_model: none - elastic_modulus: 10 - poisson_ratio: 0.3 maximum_limiter: true q1: 1.0 q2: 1.33 diff --git a/src/Parallel-Solvers/Parallel-Explicit/Example_Yaml_Scripts/example_simple.yaml b/src/Parallel-Solvers/Parallel-Explicit/Example_Yaml_Scripts/example_simple.yaml index 08ad95f71..8ad2b63a6 100644 --- a/src/Parallel-Solvers/Parallel-Explicit/Example_Yaml_Scripts/example_simple.yaml +++ b/src/Parallel-Solvers/Parallel-Explicit/Example_Yaml_Scripts/example_simple.yaml @@ -61,8 +61,6 @@ materials: - id: 0 eos_model: ideal_gas strength_model: none - elastic_modulus: 10 - poisson_ratio: 0.3 q1: 1.0 q2: 1.33 q1ex: 1.0 diff --git a/src/Parallel-Solvers/Parallel-Explicit/Example_Yaml_Scripts/implosion_vel_opt.yaml b/src/Parallel-Solvers/Parallel-Explicit/Example_Yaml_Scripts/implosion_vel_opt.yaml new file mode 100644 index 000000000..a16f376f5 --- /dev/null +++ b/src/Parallel-Solvers/Parallel-Explicit/Example_Yaml_Scripts/implosion_vel_opt.yaml @@ -0,0 +1,84 @@ +num_dims: 3 +dynamic_options: + time_final: 50.0 + dt_min: 1.e-8 + dt_max: 1.e-2 + dt_start: 1.e-5 + cycle_stop: 2000000 + +mesh_generation_options: + type: Box + origin: [0, 0, 0] + length: [1.2, 1.2, 1.2] + num_elems: [128, 128, 128] + +output_options: + timer_output_level: thorough + output_file_format: vtk + graphics_step: 10 + +fea_module_parameters: + - type: SGH + material_id: 0 + boundary_conditions: + # Tag X plane + - surface: + type: x_plane + plane_position: 0.0 + type: reflected + + # Tag Y plane + - surface: + type: y_plane + plane_position: 0.0 + type: reflected + + # Tag Z plane + - surface: + type: z_plane + plane_position: 0.0 + type: reflected + + +materials: + - id: 0 + eos_model: ideal_gas + strength_model: none + maximum_limiter: 1 + q1: 4.0 + q2: 8.0 + q1ex: 4.0 + q2ex: 8.0 + eos_global_vars: + - 1.666666666666667 + - 1.0E-14 + - 1.0 + +regions: + - volume: + type: global + material_id: 0 + den: 1.0 + sie: 1.e-9 + + velocity: spherical + speed: -0.01 + +optimization_options: + optimization_process: topology_optimization + optimization_objective: maximize_internal_energy + use_solve_checkpoints: true + num_solve_checkpoints: 100 + rol_params: + subproblem_algorithm: line_search + initial_constraint_penalty: 1.e-3 + step_tolerance: 1.e-3 + gradient_tolerance: 1.e-4 + constraint_tolerance: 1.e-5 + iteration_limit: 4 + density_epsilon: 0.4 + variable_outer_shell: true + constraints: + - type: mass + relation: equality + value: 0.60 From 8b6fd834e23a208bcdb57cb41b03a9f5cd3d9bfb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CAdrian-Diaz=E2=80=9D?= <“adriandiaz1117@gmail.com”> Date: Thu, 29 Aug 2024 15:02:58 -0600 Subject: [PATCH 209/233] DOC: missing params in yaml file example --- .../Example_Yaml_Scripts/implosion_vel_opt.yaml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/Parallel-Solvers/Parallel-Explicit/Example_Yaml_Scripts/implosion_vel_opt.yaml b/src/Parallel-Solvers/Parallel-Explicit/Example_Yaml_Scripts/implosion_vel_opt.yaml index a16f376f5..69b5c6b8f 100644 --- a/src/Parallel-Solvers/Parallel-Explicit/Example_Yaml_Scripts/implosion_vel_opt.yaml +++ b/src/Parallel-Solvers/Parallel-Explicit/Example_Yaml_Scripts/implosion_vel_opt.yaml @@ -16,6 +16,9 @@ output_options: timer_output_level: thorough output_file_format: vtk graphics_step: 10 + write_initial: true + write_final: false + optimization_restart_file: true fea_module_parameters: - type: SGH @@ -69,6 +72,8 @@ optimization_options: optimization_objective: maximize_internal_energy use_solve_checkpoints: true num_solve_checkpoints: 100 + disable_forward_solve_output: true + optimization_output_freq: 1 rol_params: subproblem_algorithm: line_search initial_constraint_penalty: 1.e-3 From ec4b7a87486d385580c212a845261e25d434deda Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CAdrian-Diaz=E2=80=9D?= <“adriandiaz1117@gmail.com”> Date: Fri, 30 Aug 2024 20:47:34 -0600 Subject: [PATCH 210/233] WIP: pressure vessel problem support --- .../FEA_Module_Elasticity.cpp | 25 +++++++++++++++--- .../FEA_Module_Thermo_Elasticity.cpp | 26 ++++++++++++++++--- 2 files changed, 43 insertions(+), 8 deletions(-) diff --git a/src/Parallel-Solvers/Implicit-Lagrange/FEA_Physics_Modules/FEA_Module_Elasticity.cpp b/src/Parallel-Solvers/Implicit-Lagrange/FEA_Physics_Modules/FEA_Module_Elasticity.cpp index 24eed1913..32c9b27ba 100644 --- a/src/Parallel-Solvers/Implicit-Lagrange/FEA_Physics_Modules/FEA_Module_Elasticity.cpp +++ b/src/Parallel-Solvers/Implicit-Lagrange/FEA_Physics_Modules/FEA_Module_Elasticity.cpp @@ -2109,7 +2109,7 @@ void FEA_Module_Elasticity::assemble_vector(){ ViewCArray quad_coordinate_weight(pointer_quad_coordinate_weight,num_dim); ViewCArray interpolated_point(pointer_interpolated_point,num_dim); real_t force_density[3], wedge_product, Jacobian, current_density, weight_multiply, surface_normal[3], pressure, normal_displacement; - real_t resulting_term; + real_t resulting_term, vessel_term; CArray Surface_Nodes; CArrayKokkos JT_row1(num_dim); @@ -2127,7 +2127,8 @@ void FEA_Module_Elasticity::assemble_vector(){ CArrayKokkos nodal_positions(nodes_per_elem,num_dim); CArrayKokkos nodal_density(nodes_per_elem); CArrayKokkos surf_basis_values(nodes_per_elem,num_dim); - real_t constant_stress_flag = module_params->constant_stress_flag; + bool constant_stress_flag = module_params->constant_stress_flag; + bool pressure_vessel_flag = module_params->pressure_vessel_flag; //force vector initialization for(int i=0; i < num_dim*nlocal_nodes; i++) @@ -2578,7 +2579,23 @@ void FEA_Module_Elasticity::assemble_vector(){ //compute shape functions at this point for the element type elem->basis(basis_values,quad_coordinate); - + if(pressure_vessel_flag){ + current_density = 0; + if(nodal_density_flag){ + for(int node_loop=0; node_loop < elem->num_basis(); node_loop++){ + current_density += nodal_density(node_loop)*basis_values(node_loop); + } + } + //default constant element density + else{ + current_density = Element_Densities(ielem,0); + } + vessel_term = 1 - current_density; + } + else{ + vessel_term = 1; + } + //debug print //std::cout << "Current Density " << current_density << std::endl; @@ -2741,7 +2758,7 @@ void FEA_Module_Elasticity::assemble_vector(){ for(int span=0; span < Brows; span++){ resulting_term += stress_matrix(span)*B_matrix_contribution(span,icol); } - Nodal_RHS(num_dim*local_node_id + icol%num_dim,0) += weight_multiply*resulting_term*basis_values(icol/num_dim); + Nodal_RHS(num_dim*local_node_id + icol%num_dim,0) += weight_multiply*resulting_term*vessel_term*basis_values(icol/num_dim); } } }//for diff --git a/src/Parallel-Solvers/Implicit-Lagrange/FEA_Physics_Modules/FEA_Module_Thermo_Elasticity.cpp b/src/Parallel-Solvers/Implicit-Lagrange/FEA_Physics_Modules/FEA_Module_Thermo_Elasticity.cpp index 6bbde04c9..3409c2d9c 100644 --- a/src/Parallel-Solvers/Implicit-Lagrange/FEA_Physics_Modules/FEA_Module_Thermo_Elasticity.cpp +++ b/src/Parallel-Solvers/Implicit-Lagrange/FEA_Physics_Modules/FEA_Module_Thermo_Elasticity.cpp @@ -1447,7 +1447,9 @@ void FEA_Module_Thermo_Elasticity::assemble_vector(){ bool is_hex; int patch_node_count; CArray patch_local_node_ids; - real_t constant_stress_flag = module_params.constant_stress_flag; + bool constant_stress_flag = module_params.constant_stress_flag; + bool pressure_vessel_flag = module_params.pressure_vessel_flag; + //CArrayKokkos legendre_nodes_1D(num_gauss_points); //CArrayKokkos legendre_weights_1D(num_gauss_points); CArray legendre_nodes_1D(num_gauss_points); @@ -1459,7 +1461,7 @@ void FEA_Module_Thermo_Elasticity::assemble_vector(){ ViewCArray quad_coordinate_weight(pointer_quad_coordinate_weight,num_dim); ViewCArray interpolated_point(pointer_interpolated_point,num_dim); real_t force_density[3], wedge_product, Jacobian, current_density, current_temperature, weight_multiply, surface_normal[3], pressure, normal_displacement; - real_t resulting_term; + real_t resulting_term, vessel_term; CArray Surface_Nodes; CArrayKokkos JT_row1(num_dim); @@ -2206,7 +2208,23 @@ void FEA_Module_Thermo_Elasticity::assemble_vector(){ //compute shape functions at this point for the element type elem->basis(basis_values,quad_coordinate); - + + if(pressure_vessel_flag){ + current_density = 0; + if(nodal_density_flag){ + for(int node_loop=0; node_loop < elem->num_basis(); node_loop++){ + current_density += nodal_density(node_loop)*basis_values(node_loop); + } + } + //default constant element density + else{ + current_density = Element_Densities(ielem,0); + } + vessel_term = 1 - current_density; + } + else{ + vessel_term = 1; + } //debug print //std::cout << "Current Density " << current_density << std::endl; @@ -2369,7 +2387,7 @@ void FEA_Module_Thermo_Elasticity::assemble_vector(){ for(int span=0; span < Brows; span++){ resulting_term += stress_matrix(span)*B_matrix_contribution(span,icol); } - Nodal_RHS(num_dim*local_node_id + icol%num_dim,0) += weight_multiply*resulting_term*basis_values(icol/num_dim); + Nodal_RHS(num_dim*local_node_id + icol%num_dim,0) += weight_multiply*vessel_term*resulting_term*basis_values(icol/num_dim); } } }//for From 19831b89714ada6f3ee54c38c0b3cc04925b9e18 Mon Sep 17 00:00:00 2001 From: Jacob Moore Date: Wed, 28 Aug 2024 13:12:54 -0500 Subject: [PATCH 211/233] ENH: Restructuring common to seperate .cpp from .h --- single-node-refactor/src/CMakeLists.txt | 7 +- .../src/common/CMakeLists.txt | 26 + .../{ => include}/boundary_conditions.h | 0 .../common/{ => include}/dynamic_options.h | 0 .../src/common/{ => include}/geometry_new.h | 0 .../common/{ => include}/initial_conditions.h | 0 .../src/common/{ => include}/material.h | 0 .../src/common/{ => include}/mesh.h | 0 .../src/common/{ => include}/mesh_inputs.h | 0 .../src/common/{ => include}/mesh_io.h | 0 .../src/common/{ => include}/output_options.h | 0 .../src/common/{ => include}/ref_elem.h | 0 .../src/common/{ => include}/ref_surf_elem.h | 0 .../src/common/{ => include}/region.h | 0 .../src/common/{ => include}/region_fill.h | 0 .../{ => include}/simulation_parameters.h | 0 .../src/common/{ => include}/solver_inputs.h | 0 .../src/common/{ => include}/state.h | 0 .../src/common/{ => include}/string_utils.h | 0 single-node-refactor/src/common/mesh_old.h | 965 ------------------ .../src/common/simulation_state.h | 57 -- .../src/common/{ => src}/region_fill.cpp | 0 22 files changed, 30 insertions(+), 1025 deletions(-) create mode 100644 single-node-refactor/src/common/CMakeLists.txt rename single-node-refactor/src/common/{ => include}/boundary_conditions.h (100%) rename single-node-refactor/src/common/{ => include}/dynamic_options.h (100%) rename single-node-refactor/src/common/{ => include}/geometry_new.h (100%) rename single-node-refactor/src/common/{ => include}/initial_conditions.h (100%) rename single-node-refactor/src/common/{ => include}/material.h (100%) rename single-node-refactor/src/common/{ => include}/mesh.h (100%) rename single-node-refactor/src/common/{ => include}/mesh_inputs.h (100%) rename single-node-refactor/src/common/{ => include}/mesh_io.h (100%) rename single-node-refactor/src/common/{ => include}/output_options.h (100%) rename single-node-refactor/src/common/{ => include}/ref_elem.h (100%) rename single-node-refactor/src/common/{ => include}/ref_surf_elem.h (100%) rename single-node-refactor/src/common/{ => include}/region.h (100%) rename single-node-refactor/src/common/{ => include}/region_fill.h (100%) rename single-node-refactor/src/common/{ => include}/simulation_parameters.h (100%) rename single-node-refactor/src/common/{ => include}/solver_inputs.h (100%) rename single-node-refactor/src/common/{ => include}/state.h (100%) rename single-node-refactor/src/common/{ => include}/string_utils.h (100%) delete mode 100644 single-node-refactor/src/common/mesh_old.h delete mode 100644 single-node-refactor/src/common/simulation_state.h rename single-node-refactor/src/common/{ => src}/region_fill.cpp (100%) diff --git a/single-node-refactor/src/CMakeLists.txt b/single-node-refactor/src/CMakeLists.txt index ba1ba8063..24d9d7c41 100755 --- a/single-node-refactor/src/CMakeLists.txt +++ b/single-node-refactor/src/CMakeLists.txt @@ -57,8 +57,9 @@ elseif (THREADS) add_definitions(-DHAVE_THREADS=1) endif() -include_directories(common) -# add_subdirectory(Solvers/SGH_solver) +# Add common files +include_directories(common/include) +add_subdirectory(common) # Add SGH Solver include_directories(Solvers/SGH_solver_3D/include) @@ -68,5 +69,5 @@ add_subdirectory(Solvers/SGH_solver_3D) include_directories(Solvers/SGH_solver_rz/include) add_subdirectory(Solvers/SGH_solver_rz) -add_executable(Fierro main.cpp driver.cpp solver.cpp common/region_fill.cpp ${YAML_SRC_Files} ${SGH_3D_SRC_Files} ${SGH_RZ_SRC_Files}) +add_executable(Fierro main.cpp driver.cpp solver.cpp ${COMMON_Files} ${YAML_SRC_Files} ${SGH_3D_SRC_Files} ${SGH_RZ_SRC_Files}) target_link_libraries(Fierro PRIVATE matar Kokkos::kokkos) diff --git a/single-node-refactor/src/common/CMakeLists.txt b/single-node-refactor/src/common/CMakeLists.txt new file mode 100644 index 000000000..be51952df --- /dev/null +++ b/single-node-refactor/src/common/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.1.3) + +find_package(Matar REQUIRED) +find_package(Kokkos REQUIRED) + +add_definitions(-DHAVE_KOKKOS=1) + +if (CUDA) + add_definitions(-DHAVE_CUDA=1) +elseif (HIP) + add_definitions(-DHAVE_HIP=1) +elseif (OPENMP) + add_definitions(-DHAVE_OPENMP=1) +elseif (THREADS) + add_definitions(-DHAVE_THREADS=1) +endif() + +include_directories(include) +include_directories(src) + +message("\n ****** ADDING COMMON SOURCE FILES ******** \n ") + +set(COMMON_Files +${CMAKE_CURRENT_SOURCE_DIR}/src/region_fill.cpp +PARENT_SCOPE +) \ No newline at end of file diff --git a/single-node-refactor/src/common/boundary_conditions.h b/single-node-refactor/src/common/include/boundary_conditions.h similarity index 100% rename from single-node-refactor/src/common/boundary_conditions.h rename to single-node-refactor/src/common/include/boundary_conditions.h diff --git a/single-node-refactor/src/common/dynamic_options.h b/single-node-refactor/src/common/include/dynamic_options.h similarity index 100% rename from single-node-refactor/src/common/dynamic_options.h rename to single-node-refactor/src/common/include/dynamic_options.h diff --git a/single-node-refactor/src/common/geometry_new.h b/single-node-refactor/src/common/include/geometry_new.h similarity index 100% rename from single-node-refactor/src/common/geometry_new.h rename to single-node-refactor/src/common/include/geometry_new.h diff --git a/single-node-refactor/src/common/initial_conditions.h b/single-node-refactor/src/common/include/initial_conditions.h similarity index 100% rename from single-node-refactor/src/common/initial_conditions.h rename to single-node-refactor/src/common/include/initial_conditions.h diff --git a/single-node-refactor/src/common/material.h b/single-node-refactor/src/common/include/material.h similarity index 100% rename from single-node-refactor/src/common/material.h rename to single-node-refactor/src/common/include/material.h diff --git a/single-node-refactor/src/common/mesh.h b/single-node-refactor/src/common/include/mesh.h similarity index 100% rename from single-node-refactor/src/common/mesh.h rename to single-node-refactor/src/common/include/mesh.h diff --git a/single-node-refactor/src/common/mesh_inputs.h b/single-node-refactor/src/common/include/mesh_inputs.h similarity index 100% rename from single-node-refactor/src/common/mesh_inputs.h rename to single-node-refactor/src/common/include/mesh_inputs.h diff --git a/single-node-refactor/src/common/mesh_io.h b/single-node-refactor/src/common/include/mesh_io.h similarity index 100% rename from single-node-refactor/src/common/mesh_io.h rename to single-node-refactor/src/common/include/mesh_io.h diff --git a/single-node-refactor/src/common/output_options.h b/single-node-refactor/src/common/include/output_options.h similarity index 100% rename from single-node-refactor/src/common/output_options.h rename to single-node-refactor/src/common/include/output_options.h diff --git a/single-node-refactor/src/common/ref_elem.h b/single-node-refactor/src/common/include/ref_elem.h similarity index 100% rename from single-node-refactor/src/common/ref_elem.h rename to single-node-refactor/src/common/include/ref_elem.h diff --git a/single-node-refactor/src/common/ref_surf_elem.h b/single-node-refactor/src/common/include/ref_surf_elem.h similarity index 100% rename from single-node-refactor/src/common/ref_surf_elem.h rename to single-node-refactor/src/common/include/ref_surf_elem.h diff --git a/single-node-refactor/src/common/region.h b/single-node-refactor/src/common/include/region.h similarity index 100% rename from single-node-refactor/src/common/region.h rename to single-node-refactor/src/common/include/region.h diff --git a/single-node-refactor/src/common/region_fill.h b/single-node-refactor/src/common/include/region_fill.h similarity index 100% rename from single-node-refactor/src/common/region_fill.h rename to single-node-refactor/src/common/include/region_fill.h diff --git a/single-node-refactor/src/common/simulation_parameters.h b/single-node-refactor/src/common/include/simulation_parameters.h similarity index 100% rename from single-node-refactor/src/common/simulation_parameters.h rename to single-node-refactor/src/common/include/simulation_parameters.h diff --git a/single-node-refactor/src/common/solver_inputs.h b/single-node-refactor/src/common/include/solver_inputs.h similarity index 100% rename from single-node-refactor/src/common/solver_inputs.h rename to single-node-refactor/src/common/include/solver_inputs.h diff --git a/single-node-refactor/src/common/state.h b/single-node-refactor/src/common/include/state.h similarity index 100% rename from single-node-refactor/src/common/state.h rename to single-node-refactor/src/common/include/state.h diff --git a/single-node-refactor/src/common/string_utils.h b/single-node-refactor/src/common/include/string_utils.h similarity index 100% rename from single-node-refactor/src/common/string_utils.h rename to single-node-refactor/src/common/include/string_utils.h diff --git a/single-node-refactor/src/common/mesh_old.h b/single-node-refactor/src/common/mesh_old.h deleted file mode 100644 index bd6bc386a..000000000 --- a/single-node-refactor/src/common/mesh_old.h +++ /dev/null @@ -1,965 +0,0 @@ -/********************************************************************************************** -� 2020. Triad National Security, LLC. All rights reserved. -This program was produced under U.S. Government contract 89233218CNA000001 for Los Alamos -National Laboratory (LANL), which is operated by Triad National Security, LLC for the U.S. -Department of Energy/National Nuclear Security Administration. All rights in the program are -reserved by Triad National Security, LLC, and the U.S. Department of Energy/National Nuclear -Security Administration. The Government is granted for itself and others acting on its behalf a -nonexclusive, paid-up, irrevocable worldwide license in this material to reproduce, prepare -derivative works, distribute copies to the public, perform publicly and display publicly, and -to permit others to do so. -This program is open source under the BSD-3 License. -Redistribution and use in source and binary forms, with or without modification, are permitted -provided that the following conditions are met: -1. Redistributions of source code must retain the above copyright notice, this list of -conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright notice, this list of -conditions and the following disclaimer in the documentation and/or other materials -provided with the distribution. -3. Neither the name of the copyright holder nor the names of its contributors may be used -to endorse or promote products derived from this software without specific prior -written permission. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS -IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; -OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, -WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR -OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF -ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -**********************************************************************************************/ -#ifndef MESH_H -#define MESH_H - -#include "matar.h" -#include "state.h" - -#define PI 3.141592653589793 - -struct boundary_condition_t; - -using namespace mtr; - -/* -========================== -Nodal indexing convention -========================== - - K - ^ J - | / - | / - | / - 7------------------6 - /| /| - / | / | - / | / | - / | / | - / | / | -4------------------5 | -| | | | ----> I -| | | | -| | | | -| | | | -| 3------------|-----2 -| / | / -| / | / -| / | / -| / | / -|/ |/ -0------------------1 - -nodes are ordered for outward normal -patch 0: [0,4,7,3] xi-minus dir -patch 1: [1,2,6,5] xi-plus dir -patch 2: [0,1,5,4] eta-minus dir -patch 3: [2,3,7,6] eta-plus dir -patch 4: [0,3,2,1] zeta-minus dir -patch 6: [4,5,6,7] zeta-plus dir - -*/ - -// sort in ascending order using bubble sort -KOKKOS_INLINE_FUNCTION -void bubble_sort(size_t arr[], const size_t num) -{ - for (size_t i = 0; i < (num - 1); i++) { - for (size_t j = 0; j < (num - i - 1); j++) { - if (arr[j] > arr[j + 1]) { - size_t temp = arr[j]; - arr[j] = arr[j + 1]; - arr[j + 1] = temp; - } // end if - } // end for j - } // end for i -} // end function - -// mesh sizes and connectivity data structures -struct Mesh_t -{ - size_t num_dims; - - size_t num_nodes; - - size_t num_elems; - size_t num_nodes_in_elem; - size_t num_patches_in_elem; - size_t num_surfs_in_elem; - size_t num_patches_in_surf; // high-order mesh class - - size_t num_corners; - - size_t num_patches; - size_t num_surfs; // high_order mesh class - - size_t num_bdy_patches; - size_t num_bdy_nodes; - size_t num_bdy_sets; - size_t num_nodes_in_patch; - - // ---- nodes ---- - - // corner ids in node - RaggedRightArrayKokkos corners_in_node; - CArrayKokkos num_corners_in_node; - - // elem ids in node - RaggedRightArrayKokkos elems_in_node; - - // node ids in node - RaggedRightArrayKokkos nodes_in_node; - CArrayKokkos num_nodes_in_node; - - // ---- elems ---- - - // node ids in elem - DCArrayKokkos nodes_in_elem; - - // corner ids in elem - CArrayKokkos corners_in_elem; - - // elem ids in elem - RaggedRightArrayKokkos elems_in_elem; - CArrayKokkos num_elems_in_elem; - - // patch ids in elem - CArrayKokkos patches_in_elem; - - // surface ids in elem - CArrayKokkos surfs_in_elem; // high-order mesh class - - // surface ids in elem - CArrayKokkos zones_in_elem; // high-order mesh class - - // ---- patches / surfaces ---- - - // node ids in a patch - CArrayKokkos nodes_in_patch; - - // element ids in a patch - CArrayKokkos elems_in_patch; - - // the two element ids sharing a surface - CArrayKokkos elems_in_surf; - - // patch ids in a surface - CArrayKokkos patches_in_surf; // high-order mesh class - - CArrayKokkos surf_in_patch; // high-order mesh class - - // ---- bdy ---- - - // bdy_patches - CArrayKokkos bdy_patches; - - // bdy nodes - CArrayKokkos bdy_nodes; - - // patch ids in bdy set - DynamicRaggedRightArrayKokkos bdy_patches_in_set; - - // node ids in bdy_patch set - RaggedRightArrayKokkos bdy_nodes_in_set; - DCArrayKokkos num_bdy_nodes_in_set; - - // initialization methods - void initialize_nodes(const size_t num_nodes_inp) - { - num_nodes = num_nodes_inp; - - return; - }; // end method - - // initialization methods - void initialize_elems(const size_t num_elems_inp, const size_t num_dims_inp) - { - num_dims = num_dims_inp; - num_nodes_in_elem = 1; - for (int dim = 0; dim < num_dims; dim++) { - num_nodes_in_elem *= 2; - } - num_elems = num_elems_inp; - nodes_in_elem = DCArrayKokkos(num_elems, num_nodes_in_elem, "mesh.nodes_in_elem"); - corners_in_elem = CArrayKokkos(num_elems, num_nodes_in_elem, "mesh.corners_in_elem"); - - return; - }; // end method - - // initialization methods - void initialize_corners(const size_t num_corners_inp) - { - num_corners = num_corners_inp; - - return; - }; // end method - - // build the corner mesh connectivity arrays - void build_corner_connectivity() - { - num_corners_in_node = CArrayKokkos(num_nodes, "mesh.num_corners_in_node"); // stride sizes - - // initializing the number of corners (node-cell pair) to be zero - FOR_ALL_CLASS(node_gid, 0, num_nodes, { - num_corners_in_node(node_gid) = 0; - }); - - for (size_t elem_gid = 0; elem_gid < num_elems; elem_gid++) { - FOR_ALL_CLASS(node_lid, 0, num_nodes_in_elem, { - // get the global_id of the node - size_t node_gid = nodes_in_elem(elem_gid, node_lid); - - // increment the number of corners attached to this point - num_corners_in_node(node_gid) = num_corners_in_node(node_gid) + 1; - }); // end FOR_ALL over nodes in element - } // end for elem_gid - - // the stride sizes are the num_corners_in_node at the node - corners_in_node = RaggedRightArrayKokkos(num_corners_in_node, "mesh.corners_in_node"); - - CArrayKokkos count_saved_corners_in_node(num_nodes, "count_saved_corners_in_node"); - - // reset num_corners to zero - FOR_ALL_CLASS(node_gid, 0, num_nodes, { - count_saved_corners_in_node(node_gid) = 0; - }); - - // he elems_in_elem data type - elems_in_node = RaggedRightArrayKokkos(num_corners_in_node, "mesh.elems_in_node"); - - // populate the elems connected to a node list and corners in a node - for (size_t elem_gid = 0; elem_gid < num_elems; elem_gid++) { - FOR_ALL_CLASS(node_lid, 0, num_nodes_in_elem, { - // get the global_id of the node - size_t node_gid = nodes_in_elem(elem_gid, node_lid); - - // the column index is the num corners saved - size_t j = count_saved_corners_in_node(node_gid); - - // Save corner index to this node_gid - size_t corner_gid = node_lid + elem_gid * num_nodes_in_elem; - corners_in_node(node_gid, j) = corner_gid; - - elems_in_node(node_gid, j) = elem_gid; // save the elem_gid - - // Save corner index to element - size_t corner_lid = node_lid; - corners_in_elem(elem_gid, corner_lid) = corner_gid; - - // increment the number of corners saved to this node_gid - count_saved_corners_in_node(node_gid) = count_saved_corners_in_node(node_gid) + 1; - }); // end FOR_ALL over nodes in element - } // end for elem_gid - - return; - } // end of build_corner_connectivity - - // build elem connectivity arrays - void build_elem_elem_connectivity() - { - // find the max number of elems around a node - size_t max_num_elems_in_node; - size_t max_num_lcl; - REDUCE_MAX_CLASS(node_gid, 0, num_nodes, max_num_lcl, { - // num_corners_in_node = num_elems_in_node - size_t max_num = num_corners_in_node(node_gid); - - if (max_num > max_num_lcl) { - max_num_lcl = max_num; - } - }, max_num_elems_in_node); // end parallel reduction on max - Kokkos::fence(); - - // a temporary ragged array to save the elems around an elem - DynamicRaggedRightArrayKokkos temp_elems_in_elem(num_nodes, num_nodes_in_elem * max_num_elems_in_node, "temp_elems_in_elem"); - - num_elems_in_elem = CArrayKokkos(num_elems, "mesh.num_elems_in_elem"); - FOR_ALL_CLASS(elem_gid, 0, num_elems, { - num_elems_in_elem(elem_gid) = 0; - }); - Kokkos::fence(); - - // find and save neighboring elem_gids of an elem - FOR_ALL_CLASS(elem_gid, 0, num_elems, { - for (int node_lid = 0; node_lid < num_nodes_in_elem; node_lid++) { - // get the gid for the node - size_t node_id = nodes_in_elem(elem_gid, node_lid); - - // loop over all elems connected to node_gid - for (int elem_lid = 0; elem_lid < num_corners_in_node(node_id); elem_lid++) { - // get the global id for the neighboring elem - size_t neighbor_elem_gid = elems_in_node(node_id, elem_lid); - - // a flag to save (=1) or not (=0) - size_t save = 1; - - // a true neighbor_elem_id is not equal to elem_gid - if (neighbor_elem_gid == elem_gid) { - save = 0; // don't save - } // end if - - // check to see if the neighbor_elem_gid has been saved already - size_t num_saved = temp_elems_in_elem.stride(elem_gid); - for (size_t i = 0; i < num_saved; i++) { - if (neighbor_elem_gid == temp_elems_in_elem(elem_gid, i)) { - save = 0; // don't save, it has been saved already - } // end if - } // end for i - - if (save == 1) { - // increment the number of neighboring elements saved - temp_elems_in_elem.stride(elem_gid)++; - - // save the neighboring elem_gid - temp_elems_in_elem(elem_gid, num_saved) = neighbor_elem_gid; - } // end if save - } // end for elem_lid in a node - } // end for node_lid in an elem - - // save the actial stride size - num_elems_in_elem(elem_gid) = temp_elems_in_elem.stride(elem_gid); - }); // end FOR_ALL elems - Kokkos::fence(); - - // compress out the extra space in the temp_elems_in_elem - elems_in_elem = RaggedRightArrayKokkos(num_elems_in_elem, "mesh.elems_in_elem"); - - FOR_ALL_CLASS(elem_gid, 0, num_elems, { - for (size_t i = 0; i < num_elems_in_elem(elem_gid); i++) { - elems_in_elem(elem_gid, i) = temp_elems_in_elem(elem_gid, i); - } // end for i - }); // end FOR_ALL elems - Kokkos::fence(); - - return; - } // end of build_elem_elem_connectivity - - // build the patches - void build_patch_connectivity() - { - size_t high_order = 0; - - // building patches - DViewCArrayKokkos node_ordering_in_elem; // node lids in a patch - - num_nodes_in_patch = 2 * (num_dims - 1); // 2 (2D) or 4 (3D) - num_patches_in_elem = 2 * num_dims; // 4 (2D) or 6 (3D) - - size_t node_lids_in_patch_in_elem[24]; - - if (num_dims == 3) { - size_t temp_node_lids[24] = { 0, 4, 7, 3, - 1, 2, 6, 5, - 0, 1, 5, 4, - 2, 3, 7, 6, - 0, 3, 2, 1, - 4, 5, 6, 7 }; - - for (size_t i = 0; i < 24; i++) { - node_lids_in_patch_in_elem[i] = temp_node_lids[i]; - } // end for i - } - else{ - // J - // | - // 3---2 - // | | -- I - // 0---1 - // - size_t temp_node_lids[8] = - { 0, 3, - 1, 2, - 0, 1, - 3, 2 }; - - for (size_t i = 0; i < 8; i++) { - node_lids_in_patch_in_elem[i] = temp_node_lids[i]; - } // end for i - } // end if on dims - - node_ordering_in_elem = DViewCArrayKokkos(&node_lids_in_patch_in_elem[0], num_patches_in_elem, num_nodes_in_patch); - - // for saviong the hash keys of the patches and then the nighboring elem_gid - CArrayKokkos hash_keys_in_elem(num_elems, num_patches_in_elem, num_nodes_in_patch, "hash_keys_in_elem"); // always 4 ids in 3D - - // for saving the adjacient patch_lid, which is the slide_lid - // CArrayKokkos neighboring_side_lids (num_elems, num_patches_in_elem); - - // allocate memory for the patches in the elem - patches_in_elem = CArrayKokkos(num_elems, num_patches_in_elem, "mesh.patches_in_elem"); - - // a temporary storaage for the patch_gids that are on the mesh boundary - CArrayKokkos temp_bdy_patches(num_elems * num_patches_in_elem, "temp_bdy_patches"); - - // step 1) calculate the hash values for each patch in the element - FOR_ALL_CLASS(elem_gid, 0, num_elems, { - for (size_t patch_lid = 0; patch_lid < num_patches_in_elem; patch_lid++) { - size_t sorted_patch_nodes[4]; // note: cannot be allocated with num_nodes_in_patch - - // first save the patch nodes - for (size_t patch_node_lid = 0; patch_node_lid < num_nodes_in_patch; patch_node_lid++) { - // get the local node index of the element for this patch and node in patch - size_t node_lid = node_ordering_in_elem(patch_lid, patch_node_lid); - - // get and save the global index of the node - sorted_patch_nodes[patch_node_lid] = nodes_in_elem(elem_gid, node_lid); - } // end for node_lid - - // sort nodes from smallest to largest - bubble_sort(sorted_patch_nodes, num_nodes_in_patch); - - // save hash_keys in the this elem - for (size_t key_lid = 0; key_lid < num_nodes_in_patch; key_lid++) { - hash_keys_in_elem(elem_gid, patch_lid, key_lid) = sorted_patch_nodes[key_lid]; // 4 node values are keys - } // for - } // end for patch_lid - }); // end FOR_ALL elem_gid - - DCArrayKokkos num_values(2); - - // 8x8x8 mesh - // num_patches = 8*8*9*3 = 1728 - // bdy_patches = 8*8*6 = 384 - // - - // step 2: walk around the elements and save the elem pairs that have the same hash_key - RUN_CLASS({ - // serial execution on GPU - - size_t patch_gid = 0; - size_t bdy_patch_gid = 0; - - for (size_t elem_gid = 0; elem_gid < num_elems; elem_gid++) { - // loop over the patches in this elem - for (size_t patch_lid = 0; patch_lid < num_patches_in_elem; patch_lid++) { - size_t exit = 0; - - // negative values mean the patch has not been saved - if (hash_keys_in_elem(elem_gid, patch_lid, 0) >= 0) { - // find the nighboring patch with the same hash_key - - for (size_t neighbor_elem_lid = 0; neighbor_elem_lid < num_elems_in_elem(elem_gid); neighbor_elem_lid++) { - // get the neighboring element global index - size_t neighbor_elem_gid = elems_in_elem(elem_gid, neighbor_elem_lid); - - for (size_t neighbor_patch_lid = 0; neighbor_patch_lid < num_patches_in_elem; neighbor_patch_lid++) { - size_t save_it = 0; - for (size_t key_lid = 0; key_lid < num_nodes_in_patch; key_lid++) { - if (hash_keys_in_elem(neighbor_elem_gid, neighbor_patch_lid, key_lid) == hash_keys_in_elem(elem_gid, patch_lid, key_lid)) { - save_it++; // if save_it == num_nodes after this loop, then it is a match - } - } // end key loop - - // this hash is from the nodes on the patch - if (save_it == num_nodes_in_patch) { - // make it negative, because we saved it - hash_keys_in_elem(elem_gid, patch_lid, 0) = -1; - hash_keys_in_elem(neighbor_elem_gid, neighbor_patch_lid, 0) = -1; - - // save the patch_lids for the adjacient sides - // neighboring_side_lids(elem_gid, patch_lid) = neighbor_patch_lid; - // neighboring_side_lids(neighbor_elem_gid, neighbor_patch_lid) = patch_lid; - - // save the patch_gid - patches_in_elem(elem_gid, patch_lid) = patch_gid; - patches_in_elem(neighbor_elem_gid, neighbor_patch_lid) = patch_gid; - - patch_gid++; - - exit = 1; - break; - } // end if - } // end for loop over a neighbors patch set - - if (exit == 1) { - break; - } - } // end for loop over elem neighbors - } // end if hash<0 - } // end for patch_lid - - // loop over the patches in this element again - // remaining postive hash key values are the boundary patches - for (size_t patch_lid = 0; patch_lid < num_patches_in_elem; patch_lid++) { - if (hash_keys_in_elem(elem_gid, patch_lid, 0) >= 0) { - hash_keys_in_elem(elem_gid, patch_lid, 0) = -1; // make it negative, because we saved it - - // neighboring_side_lids(elem_gid, patch_lid) = patch_lid; - - patches_in_elem(elem_gid, patch_lid) = patch_gid; - temp_bdy_patches(bdy_patch_gid) = patch_gid; - - patch_gid++; - bdy_patch_gid++; - } // end if - } // end for over patch_lid - } // end for over elem_gid - - // the num_values is because the values passed in are const, so a const pointer is needed - num_values(0) = patch_gid; // num_patches = patch_gid; - num_values(1) = bdy_patch_gid; // num_bdy_patches = bdy_patch_gid; - }); // end RUN - Kokkos::fence(); - - num_values.update_host(); - Kokkos::fence(); - - num_patches = num_values.host(0); - num_bdy_patches = num_values.host(1); - - // size_t mesh_1D = 60; - // size_t exact_num_patches = (mesh_1D*mesh_1D)*(mesh_1D+1)*3; - // size_t exact_num_bdy_patches = (mesh_1D*mesh_1D)*6; - // printf("num_patches = %lu, exact = %lu \n", num_patches, exact_num_patches); - // printf("num_bdy_patches = %lu exact = %lu \n", num_bdy_patches, exact_num_bdy_patches); - printf("Num patches = %lu \n", num_patches); - printf("Num boundary patches = %lu \n", num_bdy_patches); - - elems_in_patch = CArrayKokkos(num_patches, 2, "mesh.elems_in_patch"); - nodes_in_patch = CArrayKokkos(num_patches, num_nodes_in_patch, "mesh.nodes_in_patch"); - - // a temporary variable to help populate patch structures - CArrayKokkos num_elems_in_patch_saved(num_patches, "num_elems_in_patch_saved"); - - // initialize the number of elems in a patch saved to zero - FOR_ALL_CLASS(patch_gid, 0, num_patches, { - num_elems_in_patch_saved(patch_gid) = 0; - }); - - for (size_t elem_gid = 0; elem_gid < num_elems; elem_gid++) { - FOR_ALL_CLASS(patch_lid, 0, num_patches_in_elem, { - size_t patch_gid = patches_in_elem(elem_gid, patch_lid); - - size_t num_saved = num_elems_in_patch_saved(patch_gid); - - elems_in_patch(patch_gid, num_saved) = elem_gid; - - // record that an elem_gid was saved - num_elems_in_patch_saved(patch_gid)++; - - // save the nodes on this patch - for (size_t patch_node_lid = 0; patch_node_lid < num_nodes_in_patch; patch_node_lid++) { - // get the local node index of the element for this patch and node in patch - size_t node_lid = node_ordering_in_elem(patch_lid, patch_node_lid); - - // get and save the global index of the node - nodes_in_patch(patch_gid, patch_node_lid) = nodes_in_elem(elem_gid, node_lid); - } // end for node_lid - }); // end FOR_ALL patch_lid - } // end for - - // Surfaces and patches in surface - if (high_order == 1) { - num_surfs_in_elem = 2 * num_dims; // 4 (2D) or 6 (3D) - num_patches_in_surf = 1; // =Pn_order, must update for high-order mesh class - - // allocate memory for the surfaces in the elem - surfs_in_elem = CArrayKokkos(num_elems, num_surfs_in_elem, "mesh.surfs_in_elem"); - - // allocate memory for surface data structures - num_surfs = num_patches / num_patches_in_surf; - - patches_in_surf = CArrayKokkos(num_surfs, num_patches_in_surf, "mesh.patches_in_surf"); - elems_in_surf = CArrayKokkos(num_surfs, 2, "mesh.elems_in_surf"); - surf_in_patch = CArrayKokkos(num_patches, "mesh.surf_in_patch"); - - FOR_ALL_CLASS(surf_gid, 0, num_surfs, { - // loop over the patches in this surface - for (size_t patch_lid = 0; patch_lid < num_patches_in_surf; patch_lid++) { - // get patch_gid - size_t patch_gid = patch_lid + surf_gid * num_patches_in_surf; - - // save the patch_gids - patches_in_surf(surf_gid, patch_lid) = patch_gid; - - // save the surface this patch belongs to - surf_in_patch(patch_gid) = surf_gid; - } // end for - - // get first patch in the surface, and populate elem surface structures - size_t this_patch_gid = surf_gid * num_patches_in_surf; - - elems_in_surf(surf_gid, 0) = elems_in_patch(this_patch_gid, 0); // elem_gid0 - elems_in_surf(surf_gid, 1) = elems_in_patch(this_patch_gid, 1); // elem_gid1 - }); // end FOR_ALL over surfaces - - // save surfaces in elem - FOR_ALL_CLASS(elem_gid, 0, num_elems, { - for (size_t surf_lid = 0; surf_lid < num_surfs_in_elem; surf_lid++) { - // get the local patch_lid - size_t patch_lid = surf_lid * num_patches_in_surf; - - // get the patch_gids in this element - size_t patch_gid = patches_in_elem(elem_gid, patch_lid); - - // save the surface gid - surfs_in_elem(elem_gid, surf_lid) = surf_in_patch(patch_gid); - } // end surf_lid - }); - } // end of high-order mesh objects - - // ---------------- - - // allocate memory for boundary patches - bdy_patches = CArrayKokkos(num_bdy_patches, "mesh.bdy_patches"); - - FOR_ALL_CLASS(bdy_patch_gid, 0, num_bdy_patches, { - bdy_patches(bdy_patch_gid) = temp_bdy_patches(bdy_patch_gid); - }); // end FOR_ALL bdy_patch_gid - - // find and store the boundary nodes - CArrayKokkos temp_bdy_nodes(num_nodes); - CArrayKokkos hash_bdy_nodes(num_nodes); - - FOR_ALL_CLASS(node_gid, 0, num_nodes, { - hash_bdy_nodes(node_gid) = -1; - }); // end for node_gid - - // Parallel loop over boundary patches - DCArrayKokkos num_bdy_nodes_saved(1); - - RUN_CLASS({ - num_bdy_nodes_saved(0) = 0; - for (size_t bdy_patch_gid = 0; bdy_patch_gid < num_bdy_patches; bdy_patch_gid++) { - // get the global index of the patch that is on the boundary - size_t patch_gid = bdy_patches(bdy_patch_gid); - - // tag the boundary nodes - for (size_t node_lid = 0; node_lid < num_nodes_in_patch; node_lid++) { - size_t node_gid = nodes_in_patch(patch_gid, node_lid); - - if (hash_bdy_nodes(node_gid) < 0) { - hash_bdy_nodes(node_gid) = node_gid; - temp_bdy_nodes(num_bdy_nodes_saved(0)) = node_gid; - - // printf("bdy_node = %lu \n", node_gid); - num_bdy_nodes_saved(0)++; - } // end if - } // end for node_lid - } // end for loop over bdy_patch_gid - }); // end RUN - Kokkos::fence(); - - // copy value to host (CPU) - num_bdy_nodes_saved.update_host(); - Kokkos::fence(); - - // save the number of bdy_nodes to Mesh_t - num_bdy_nodes = num_bdy_nodes_saved.host(0); - - bdy_nodes = CArrayKokkos(num_bdy_nodes, "mesh.bdy_nodes"); - - FOR_ALL_CLASS(node_gid, 0, num_bdy_nodes, { - bdy_nodes(node_gid) = temp_bdy_nodes(node_gid); - }); // end for boundary node_gid - - printf("Num boundary nodes = %lu \n", num_bdy_nodes); - - return; - } // end patch connectivity method - - // build the node-node connectivity - void build_node_node_connectivity() - { - // find the max number of elems around a node - size_t max_num_elems_in_node; - size_t max_num_lcl; - REDUCE_MAX_CLASS(node_gid, 0, num_nodes, max_num_lcl, { - // num_corners_in_node = num_elems_in_node - size_t max_num = num_corners_in_node(node_gid); - - if (max_num > max_num_lcl) { - max_num_lcl = max_num; - } - }, max_num_elems_in_node); // end parallel reduction on max - Kokkos::fence(); - - // each elem corner will contribute 3 edges to the node. Those edges will likely be the same - // ones from an adjacent element so it is a safe estimate to multiply by 3 - DynamicRaggedRightArrayKokkos temp_nodes_in_nodes(num_nodes, max_num_elems_in_node * 3, "temp_nodes_in_nodes"); - - num_nodes_in_node = CArrayKokkos(num_nodes, "mesh.num_nodes_in_node"); - - // walk over the patches and save the node node connectivity - RUN_CLASS({ - if (num_dims == 3) { - for (size_t patch_gid = 0; patch_gid < num_patches; patch_gid++) { - for (size_t node_lid = 0; node_lid < num_nodes_in_patch; node_lid++) { - // the first node on the edge - size_t node_gid_0 = nodes_in_patch(patch_gid, node_lid); - - // second node on this edge - size_t node_gid_1; - - if (node_lid == num_nodes_in_patch - 1) { - node_gid_1 = nodes_in_patch(patch_gid, 0); - } - else{ - node_gid_1 = nodes_in_patch(patch_gid, node_lid + 1); - } // end if - - size_t num_saved_0 = temp_nodes_in_nodes.stride(node_gid_0); - size_t num_saved_1 = temp_nodes_in_nodes.stride(node_gid_1); - - size_t save_0 = 1; - size_t save_1 = 1; - - // check to see if the node_gid_1 was already saved - for (size_t contents_lid = 0; contents_lid < num_saved_0; contents_lid++) { - if (temp_nodes_in_nodes(node_gid_0, contents_lid) == node_gid_1) { - save_0 = 0; // don't save, it was already saved - } - } - - // check to see if the node_gid_0 was already saved - for (size_t contents_lid = 0; contents_lid < num_saved_1; contents_lid++) { - if (temp_nodes_in_nodes(node_gid_1, contents_lid) == node_gid_0) { - save_1 = 0; // don't save, it was already saved - } - } - - if (save_0 == 1) { - // increment the number of nodes in a node saved - temp_nodes_in_nodes.stride(node_gid_0)++; - - // save the second node to the first node - temp_nodes_in_nodes(node_gid_0, num_saved_0) = node_gid_1; - } - - if (save_1 == 1) { - // increment the number of nodes in a node saved - temp_nodes_in_nodes.stride(node_gid_1)++; - - // save the first node to the second node - temp_nodes_in_nodes(node_gid_1, num_saved_1) = node_gid_0; - } - - // save the strides - num_nodes_in_node(node_gid_0) = temp_nodes_in_nodes.stride(node_gid_0); - num_nodes_in_node(node_gid_1) = temp_nodes_in_nodes.stride(node_gid_1); - } // end for node in patch - } // end for patches - } // end if 3D - else{ - for (size_t patch_gid = 0; patch_gid < num_patches; patch_gid++) { - // the first node on the edge - size_t node_gid_0 = nodes_in_patch(patch_gid, 0); - - // second node on this edge - size_t node_gid_1 = nodes_in_patch(patch_gid, 1); - - size_t num_saved_0 = temp_nodes_in_nodes.stride(node_gid_0); - size_t num_saved_1 = temp_nodes_in_nodes.stride(node_gid_1); - - // increment the number of nodes in a node saved - temp_nodes_in_nodes.stride(node_gid_0)++; - temp_nodes_in_nodes.stride(node_gid_1)++; - - // save the second node to the first node - temp_nodes_in_nodes(node_gid_0, num_saved_0) = node_gid_1; - - // save the first node to the second node - temp_nodes_in_nodes(node_gid_1, num_saved_1) = node_gid_0; - - // save the strides - num_nodes_in_node(node_gid_0) = temp_nodes_in_nodes.stride(node_gid_0); - num_nodes_in_node(node_gid_1) = temp_nodes_in_nodes.stride(node_gid_1); - } // end for patches - } // end if 2D - }); // end RUN - Kokkos::fence(); - - nodes_in_node = RaggedRightArrayKokkos(num_nodes_in_node, "mesh.nodes_in_node"); - - // save the connectivity - FOR_ALL_CLASS(node_gid, 0, num_nodes, { - size_t num_saved = 0; - for (size_t node_lid = 0; node_lid < num_nodes_in_node(node_gid); node_lid++) { - nodes_in_node(node_gid, num_saved) = temp_nodes_in_nodes(node_gid, num_saved); - - // increment the number of nodes in node saved - num_saved++; - } // end for node_lid - }); // end parallel for over nodes - } // end of node node connectivity - - ///////////////////////////////////////////////////////////////////////////// - /// - /// \fn build_connectivity - /// - /// \brief Calls multiple build connectivity function - /// - ///////////////////////////////////////////////////////////////////////////// - void build_connectivity() - { - build_corner_connectivity(); - build_elem_elem_connectivity(); - build_patch_connectivity(); - build_node_node_connectivity(); - } - - ///////////////////////////////////////////////////////////////////////////// - /// - /// \fn init_bdy_sets - /// - /// \brief Initializes memory for boundary sets - /// - ///////////////////////////////////////////////////////////////////////////// - void init_bdy_sets(size_t num_bcs) - { - if (num_bcs == 0) { - printf("ERROR: number of boundary sets = 0, set it = 1"); - num_bcs = 1; - } - num_bdy_sets = num_bcs; - bdy_patches_in_set = DynamicRaggedRightArrayKokkos(num_bcs, num_bdy_patches, "mesh.bdy_patches_in_set"); - - return; - } // end of init_bdy_sets method - - ///////////////////////////////////////////////////////////////////////////// - /// - /// \fn build_boundry_node_sets - /// - /// REMOVE TO SETUP - /// - ///////////////////////////////////////////////////////////////////////////// - void build_boundry_node_sets(const CArrayKokkos& boundary, - Mesh_t& mesh) - { - // build boundary nodes in each boundary set - mesh.num_bdy_nodes_in_set = DCArrayKokkos(mesh.num_bdy_sets, "mesh.num_bdy_nodes_in_set"); - CArrayKokkos temp_count_num_bdy_nodes_in_set(mesh.num_bdy_sets, mesh.num_nodes, "temp_count_num_bdy_nodes_in_set"); - - DynamicRaggedRightArrayKokkos temp_nodes_in_set(mesh.num_bdy_sets, mesh.num_bdy_patches * mesh.num_nodes_in_patch, "temp_nodes_in_set"); - - // Parallel loop over boundary sets on device - FOR_ALL(bdy_set, 0, mesh.num_bdy_sets, { - // finde the number of patches_in_set - size_t num_bdy_patches_in_set = mesh.bdy_patches_in_set.stride(bdy_set); - - // Loop over boundary patches in boundary set - for (size_t bdy_patch_gid = 0; bdy_patch_gid < num_bdy_patches_in_set; bdy_patch_gid++) { - // get the global id for this boundary patch - size_t patch_gid = mesh.bdy_patches_in_set(bdy_set, bdy_patch_gid); - - // apply boundary condition at nodes on boundary - for (size_t node_lid = 0; node_lid < mesh.num_nodes_in_patch; node_lid++) { - size_t node_gid = mesh.nodes_in_patch(patch_gid, node_lid); - - temp_count_num_bdy_nodes_in_set(bdy_set, node_gid) = -1; - } // end for node_lid - } // end for bdy_patch_gid - - // Loop over boundary patches in boundary set - for (size_t bdy_patch_gid = 0; bdy_patch_gid < num_bdy_patches_in_set; bdy_patch_gid++) { - // get the global id for this boundary patch - size_t patch_gid = mesh.bdy_patches_in_set(bdy_set, bdy_patch_gid); - - // apply boundary condition at nodes on boundary - for (size_t node_lid = 0; node_lid < mesh.num_nodes_in_patch; node_lid++) { - size_t node_gid = mesh.nodes_in_patch(patch_gid, node_lid); - - if (temp_count_num_bdy_nodes_in_set(bdy_set, node_gid) == -1) { - size_t num_saved = mesh.num_bdy_nodes_in_set(bdy_set); - - mesh.num_bdy_nodes_in_set(bdy_set)++; - - // replace -1 with node_gid to denote the node was already saved - temp_count_num_bdy_nodes_in_set(bdy_set, node_gid) = node_gid; - - // increment the number of saved nodes, create memory - temp_nodes_in_set.stride(bdy_set)++; - temp_nodes_in_set(bdy_set, num_saved) = node_gid; - } // end if - } // end for node_lid - } // end for bdy_patch_gid - }); // end FOR_ALL bdy_set - Kokkos::fence(); - - // allocate the RaggedRight bdy_nodes_in_set array - mesh.bdy_nodes_in_set = RaggedRightArrayKokkos(mesh.num_bdy_nodes_in_set); - - FOR_ALL(bdy_set, 0, mesh.num_bdy_sets, { - // Loop over boundary patches in boundary set - for (size_t bdy_node_lid = 0; bdy_node_lid < mesh.num_bdy_nodes_in_set(bdy_set); bdy_node_lid++) { - // save the bdy_node_gid - mesh.bdy_nodes_in_set(bdy_set, bdy_node_lid) = temp_nodes_in_set(bdy_set, bdy_node_lid); - } // end for - }); // end FOR_ALL bdy_set - - // update the host side for the number nodes in a bdy_set - mesh.num_bdy_nodes_in_set.update_host(); - - return; - } // end method to build boundary nodes -}; // end Mesh_t - -void ensight(const Mesh_t& mesh, - const DCArrayKokkos& node_coords, - const DCArrayKokkos& node_vel, - const DCArrayKokkos& node_mass, - const DCArrayKokkos& elem_den, - const DCArrayKokkos& elem_pres, - const DCArrayKokkos& elem_stress, - const DCArrayKokkos& elem_sspd, - const DCArrayKokkos& elem_sie, - const DCArrayKokkos& elem_vol, - const DCArrayKokkos& elem_mass, - const DCArrayKokkos& elem_mat_id, - CArray& graphics_times, - size_t& graphics_id, - const double time_value); - -void state_file(const Mesh_t& mesh, - const DCArrayKokkos& node_coords, - const DCArrayKokkos& node_vel, - const DCArrayKokkos& node_mass, - const DCArrayKokkos& elem_den, - const DCArrayKokkos& elem_pres, - const DCArrayKokkos& elem_stress, - const DCArrayKokkos& elem_sspd, - const DCArrayKokkos& elem_sie, - const DCArrayKokkos& elem_vol, - const DCArrayKokkos& elem_mass, - const DCArrayKokkos& elem_mat_id, - const double time_value); - -void user_model_init(const DCArrayKokkos& file_state_vars, - const size_t num_state_vars, - const size_t mat_id, - const size_t num_elems); - -KOKKOS_FUNCTION -void decompose_vel_grad(ViewCArrayKokkos& D_tensor, - ViewCArrayKokkos& W_tensor, - const ViewCArrayKokkos& vel_grad, - const ViewCArrayKokkos& elem_node_gids, - const size_t elem_gid, - const DCArrayKokkos& node_coords, - const DCArrayKokkos& node_vel, - const double vol); - -#endif diff --git a/single-node-refactor/src/common/simulation_state.h b/single-node-refactor/src/common/simulation_state.h deleted file mode 100644 index 83e8abf97..000000000 --- a/single-node-refactor/src/common/simulation_state.h +++ /dev/null @@ -1,57 +0,0 @@ -/********************************************************************************************** -� 2020. Triad National Security, LLC. All rights reserved. -This program was produced under U.S. Government contract 89233218CNA000001 for Los Alamos -National Laboratory (LANL), which is operated by Triad National Security, LLC for the U.S. -Department of Energy/National Nuclear Security Administration. All rights in the program are -reserved by Triad National Security, LLC, and the U.S. Department of Energy/National Nuclear -Security Administration. The Government is granted for itself and others acting on its behalf a -nonexclusive, paid-up, irrevocable worldwide license in this material to reproduce, prepare -derivative works, distribute copies to the public, perform publicly and display publicly, and -to permit others to do so. -This program is open source under the BSD-3 License. -Redistribution and use in source and binary forms, with or without modification, are permitted -provided that the following conditions are met: -1. Redistributions of source code must retain the above copyright notice, this list of -conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright notice, this list of -conditions and the following disclaimer in the documentation and/or other materials -provided with the distribution. -3. Neither the name of the copyright holder nor the names of its contributors may be used -to endorse or promote products derived from this software without specific prior -written permission. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS -IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; -OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, -WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR -OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF -ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -**********************************************************************************************/ - -#ifndef FIERRO_SIM_STATE_H -#define FIERRO_SIM_STATE_H -#include -#include "matar.h" - -#include "state.h" - -///////////////////////////////////////////////////////////////////////////// -/// -/// \struct simulation_state_t -/// -/// \brief Struct for holding state entities for Fierro, currently unused... -/// -///////////////////////////////////////////////////////////////////////////// -struct simulation_state_t -{ - // MaterialPoint_t MaterialPoints; - // node_t node; - // corner_t corner; - // zone_t zone; -}; // simulation_state_t - -#endif // end Header Guard \ No newline at end of file diff --git a/single-node-refactor/src/common/region_fill.cpp b/single-node-refactor/src/common/src/region_fill.cpp similarity index 100% rename from single-node-refactor/src/common/region_fill.cpp rename to single-node-refactor/src/common/src/region_fill.cpp From ed88b8c0c21fcfedc96710dc18f0299ae032363e Mon Sep 17 00:00:00 2001 From: Jacob Moore Date: Wed, 28 Aug 2024 13:35:46 -0500 Subject: [PATCH 212/233] ENH: Cleanup geometry --- .../src/common/CMakeLists.txt | 1 + .../src/common/include/geometry_new.h | 559 +------------ .../src/common/src/geometry_new.cpp | 750 ++++++++++++++++++ 3 files changed, 771 insertions(+), 539 deletions(-) create mode 100644 single-node-refactor/src/common/src/geometry_new.cpp diff --git a/single-node-refactor/src/common/CMakeLists.txt b/single-node-refactor/src/common/CMakeLists.txt index be51952df..c8824f6e1 100644 --- a/single-node-refactor/src/common/CMakeLists.txt +++ b/single-node-refactor/src/common/CMakeLists.txt @@ -22,5 +22,6 @@ message("\n ****** ADDING COMMON SOURCE FILES ******** \n ") set(COMMON_Files ${CMAKE_CURRENT_SOURCE_DIR}/src/region_fill.cpp +${CMAKE_CURRENT_SOURCE_DIR}/src/geometry_new.cpp PARENT_SCOPE ) \ No newline at end of file diff --git a/single-node-refactor/src/common/include/geometry_new.h b/single-node-refactor/src/common/include/geometry_new.h index 01164cb35..e8277d45b 100644 --- a/single-node-refactor/src/common/include/geometry_new.h +++ b/single-node-refactor/src/common/include/geometry_new.h @@ -67,201 +67,11 @@ namespace geometry /// \param View of the elements node ids /// ///////////////////////////////////////////////////////////////////////////// -KOKKOS_INLINE_FUNCTION +KOKKOS_FUNCTION void get_bmatrix(const ViewCArrayKokkos& B_matrix, const size_t elem_gid, const DCArrayKokkos& node_coords, - const ViewCArrayKokkos& elem_node_gids) -{ - const size_t num_nodes = 8; - - double x_array[8]; - double y_array[8]; - double z_array[8]; - - // x, y, z coordinates of elem vertices - auto x = ViewCArrayKokkos(x_array, num_nodes); - auto y = ViewCArrayKokkos(y_array, num_nodes); - auto z = ViewCArrayKokkos(z_array, num_nodes); - - // get the coordinates of the nodes(rk,elem,node) in this element - for (int node_lid = 0; node_lid < num_nodes; node_lid++) { - x(node_lid) = node_coords(1, elem_node_gids(node_lid), 0); - y(node_lid) = node_coords(1, elem_node_gids(node_lid), 1); - z(node_lid) = node_coords(1, elem_node_gids(node_lid), 2); - } // end for - - - double twelth = 1. / 12.; - - B_matrix(0, 0) = (+y(1) * (-z(3) - z(2) + z(4) + z(5) ) - + y(3) * (+z(1) - z(2) ) - + y(2) * (+z(1) + z(3) - z(4) - z(6) ) - + y(4) * (-z(1) + z(2) - z(5) + z(6) ) - + y(5) * (-z(1) + z(4) ) - + y(6) * (+z(2) - z(4) ) ) * twelth; - - B_matrix(1, 0) = (+y(0) * (+z(3) + z(2) - z(4) - z(5) ) - + y(3) * (-z(0) - z(2) + z(5) + z(7) ) - + y(2) * (-z(0) + z(3) ) - + y(4) * (+z(0) - z(5) ) - + y(5) * (+z(0) - z(3) + z(4) - z(7) ) - + y(7) * (-z(3) + z(5) ) ) * twelth; - - B_matrix(2, 0) = (+y(0) * (-z(1) - z(3) + z(4) + z(6) ) - + y(1) * (+z(0) - z(3) ) - + y(3) * (+z(0) + z(1) - z(7) - z(6) ) - + y(4) * (-z(0) + z(6) ) - + y(7) * (+z(3) - z(6) ) - + y(6) * (-z(0) + z(3) - z(4) + z(7) ) ) * twelth; - - B_matrix(3, 0) = (+y(0) * (-z(1) + z(2) ) - + y(1) * (+z(0) + z(2) - z(5) - z(7) ) - + y(2) * (-z(0) - z(1) + z(7) + z(6) ) - + y(5) * (+z(1) - z(7) ) - + y(7) * (+z(1) - z(2) + z(5) - z(6) ) - + y(6) * (-z(2) + z(7) ) ) * twelth; - - B_matrix(4, 0) = (+y(0) * (+z(1) - z(2) + z(5) - z(6) ) - + y(1) * (-z(0) + z(5) ) - + y(2) * (+z(0) - z(6) ) - + y(5) * (-z(0) - z(1) + z(7) + z(6) ) - + y(7) * (-z(5) + z(6) ) - + y(6) * (+z(0) + z(2) - z(5) - z(7) ) ) * twelth; - - B_matrix(5, 0) = (+y(0) * (+z(1) - z(4) ) - + y(1) * (-z(0) + z(3) - z(4) + z(7) ) - + y(3) * (-z(1) + z(7) ) - + y(4) * (+z(0) + z(1) - z(7) - z(6) ) - + y(7) * (-z(1) - z(3) + z(4) + z(6) ) - + y(6) * (+z(4) - z(7) ) ) * twelth; - - B_matrix(6, 0) = (+y(0) * (-z(2) + z(4) ) - + y(3) * (+z(2) - z(7) ) - + y(2) * (+z(0) - z(3) + z(4) - z(7) ) - + y(4) * (-z(0) - z(2) + z(5) + z(7) ) - + y(5) * (-z(4) + z(7) ) - + y(7) * (+z(3) + z(2) - z(4) - z(5) ) ) * twelth; - - B_matrix(7, 0) = (+y(1) * (+z(3) - z(5) ) - + y(3) * (-z(1) + z(2) - z(5) + z(6) ) - + y(2) * (-z(3) + z(6) ) - + y(4) * (+z(5) - z(6) ) - + y(5) * (+z(1) + z(3) - z(4) - z(6) ) - + y(6) * (-z(3) - z(2) + z(4) + z(5) ) ) * twelth; - - B_matrix(0, 1) = (+z(1) * (-x(3) - x(2) + x(4) + x(5) ) - + z(3) * (+x(1) - x(2) ) - + z(2) * (+x(1) + x(3) - x(4) - x(6) ) - + z(4) * (-x(1) + x(2) - x(5) + x(6) ) - + z(5) * (-x(1) + x(4) ) - + z(6) * (+x(2) - x(4) ) ) * twelth; - - B_matrix(1, 1) = (+z(0) * (+x(3) + x(2) - x(4) - x(5) ) - + z(3) * (-x(0) - x(2) + x(5) + x(7) ) - + z(2) * (-x(0) + x(3) ) - + z(4) * (+x(0) - x(5) ) - + z(5) * (+x(0) - x(3) + x(4) - x(7) ) - + z(7) * (-x(3) + x(5) ) ) * twelth; - - B_matrix(2, 1) = (+z(0) * (-x(1) - x(3) + x(4) + x(6) ) - + z(1) * (+x(0) - x(3) ) - + z(3) * (+x(0) + x(1) - x(7) - x(6) ) - + z(4) * (-x(0) + x(6) ) - + z(7) * (+x(3) - x(6) ) - + z(6) * (-x(0) + x(3) - x(4) + x(7) ) ) * twelth; - - B_matrix(3, 1) = (+z(0) * (-x(1) + x(2) ) - + z(1) * (+x(0) + x(2) - x(5) - x(7) ) - + z(2) * (-x(0) - x(1) + x(7) + x(6) ) - + z(5) * (+x(1) - x(7) ) - + z(7) * (+x(1) - x(2) + x(5) - x(6) ) - + z(6) * (-x(2) + x(7) ) ) * twelth; - - B_matrix(4, 1) = (+z(0) * (+x(1) - x(2) + x(5) - x(6) ) - + z(1) * (-x(0) + x(5) ) - + z(2) * (+x(0) - x(6) ) - + z(5) * (-x(0) - x(1) + x(7) + x(6) ) - + z(7) * (-x(5) + x(6) ) - + z(6) * (+x(0) + x(2) - x(5) - x(7) ) ) * twelth; - - B_matrix(5, 1) = (+z(0) * (+x(1) - x(4) ) - + z(1) * (-x(0) + x(3) - x(4) + x(7) ) - + z(3) * (-x(1) + x(7) ) - + z(4) * (+x(0) + x(1) - x(7) - x(6) ) - + z(7) * (-x(1) - x(3) + x(4) + x(6) ) - + z(6) * (+x(4) - x(7) ) ) * twelth; - - B_matrix(6, 1) = (+z(0) * (-x(2) + x(4) ) - + z(3) * (+x(2) - x(7) ) - + z(2) * (+x(0) - x(3) + x(4) - x(7) ) - + z(4) * (-x(0) - x(2) + x(5) + x(7) ) - + z(5) * (-x(4) + x(7) ) - + z(7) * (+x(3) + x(2) - x(4) - x(5) ) ) * twelth; - - B_matrix(7, 1) = (+z(1) * (+x(3) - x(5) ) - + z(3) * (-x(1) + x(2) - x(5) + x(6) ) - + z(2) * (-x(3) + x(6) ) - + z(4) * (+x(5) - x(6) ) - + z(5) * (+x(1) + x(3) - x(4) - x(6) ) - + z(6) * (-x(3) - x(2) + x(4) + x(5) ) ) * twelth; - - B_matrix(0, 2) = (+x(1) * (-y(3) - y(2) + y(4) + y(5) ) - + x(3) * (+y(1) - y(2) ) - + x(2) * (+y(1) + y(3) - y(4) - y(6) ) - + x(4) * (-y(1) + y(2) - y(5) + y(6) ) - + x(5) * (-y(1) + y(4) ) - + x(6) * (+y(2) - y(4) ) ) * twelth; - - B_matrix(1, 2) = (+x(0) * (+y(3) + y(2) - y(4) - y(5) ) - + x(3) * (-y(0) - y(2) + y(5) + y(7) ) - + x(2) * (-y(0) + y(3) ) - + x(4) * (+y(0) - y(5) ) - + x(5) * (+y(0) - y(3) + y(4) - y(7) ) - + x(7) * (-y(3) + y(5) ) ) * twelth; - - B_matrix(2, 2) = (+x(0) * (-y(1) - y(3) + y(4) + y(6) ) - + x(1) * (+y(0) - y(3) ) - + x(3) * (+y(0) + y(1) - y(7) - y(6) ) - + x(4) * (-y(0) + y(6) ) - + x(7) * (+y(3) - y(6) ) - + x(6) * (-y(0) + y(3) - y(4) + y(7) ) ) * twelth; - - B_matrix(3, 2) = (+x(0) * (-y(1) + y(2) ) - + x(1) * (+y(0) + y(2) - y(5) - y(7) ) - + x(2) * (-y(0) - y(1) + y(7) + y(6) ) - + x(5) * (+y(1) - y(7) ) - + x(7) * (+y(1) - y(2) + y(5) - y(6) ) - + x(6) * (-y(2) + y(7) ) ) * twelth; - - B_matrix(4, 2) = (+x(0) * (+y(1) - y(2) + y(5) - y(6) ) - + x(1) * (-y(0) + y(5) ) - + x(2) * (+y(0) - y(6) ) - + x(5) * (-y(0) - y(1) + y(7) + y(6) ) - + x(7) * (-y(5) + y(6) ) - + x(6) * (+y(0) + y(2) - y(5) - y(7) ) ) * twelth; - - B_matrix(5, 2) = (+x(0) * (+y(1) - y(4) ) - + x(1) * (-y(0) + y(3) - y(4) + y(7) ) - + x(3) * (-y(1) + y(7) ) - + x(4) * (+y(0) + y(1) - y(7) - y(6) ) - + x(7) * (-y(1) - y(3) + y(4) + y(6) ) - + x(6) * (+y(4) - y(7) ) ) * twelth; - - B_matrix(6, 2) = (+x(0) * (-y(2) + y(4) ) - + x(3) * (+y(2) - y(7) ) - + x(2) * (+y(0) - y(3) + y(4) - y(7) ) - + x(4) * (-y(0) - y(2) + y(5) + y(7) ) - + x(5) * (-y(4) + y(7) ) - + x(7) * (+y(3) + y(2) - y(4) - y(5) ) ) * twelth; - - B_matrix(7, 2) = (+x(1) * (+y(3) - y(5) ) - + x(3) * (-y(1) + y(2) - y(5) + y(6) ) - + x(2) * (-y(3) + y(6) ) - + x(4) * (+y(5) - y(6) ) - + x(5) * (+y(1) + y(3) - y(4) - y(6) ) - + x(6) * (-y(3) - y(2) + y(4) + y(5) ) ) * twelth; -} // end subroutine + const ViewCArrayKokkos& elem_node_gids); ///////////////////////////////////////////////////////////////////////////// /// @@ -275,39 +85,11 @@ void get_bmatrix(const ViewCArrayKokkos& B_matrix, /// \param Global ids of the nodes in this element /// ///////////////////////////////////////////////////////////////////////////// -KOKKOS_INLINE_FUNCTION +KOKKOS_FUNCTION void get_vol_quad(const DCArrayKokkos& elem_vol, const size_t elem_gid, const DCArrayKokkos& node_coords, - const ViewCArrayKokkos& elem_node_gids) -{ - elem_vol(elem_gid) = 0.0; - - const size_t num_nodes = 4; - - double x_array[4]; - double y_array[4]; - - // x, y coordinates of elem vertices - auto x = ViewCArrayKokkos(x_array, num_nodes); - auto y = ViewCArrayKokkos(y_array, num_nodes); - - // get the coordinates of the nodes(rk,elem,node) in this element - for (int node_lid = 0; node_lid < num_nodes; node_lid++) { - x(node_lid) = node_coords(1, elem_node_gids(node_lid), 0); - y(node_lid) = node_coords(1, elem_node_gids(node_lid), 1); - } // end for - - /* ensight node order 0 1 2 3 - Flanaghan node order 3 4 1 2 - */ - elem_vol(elem_gid) = - ( (y(2) + y(3) + y(0)) * ((y(2) - y(3)) * (x(0) - x(3)) - (y(0) - y(3)) * (x(2) - x(3)) ) - + (y(0) + y(1) + y(2)) * ((y(0) - y(1)) * (x(2) - x(1)) - (y(2) - y(1)) * (x(0) - x(1))) ) / 6.0; - - elem_vol(elem_gid) = fmax(elem_vol(elem_gid), 1.0E-14); - return; -} // end subroutine + const ViewCArrayKokkos& elem_node_gids); ///////////////////////////////////////////////////////////////////////////// /// @@ -321,50 +103,11 @@ void get_vol_quad(const DCArrayKokkos& elem_vol, /// \param Runge Kutta time integration level /// ///////////////////////////////////////////////////////////////////////////// -KOKKOS_INLINE_FUNCTION +KOKKOS_FUNCTION void get_vol_hex(const DCArrayKokkos& elem_vol, const size_t elem_gid, const DCArrayKokkos& node_coords, - const ViewCArrayKokkos& elem_node_gids) -{ - const size_t num_nodes = 8; - - double x_array[8]; - double y_array[8]; - double z_array[8]; - - // x, y, z coordinates of elem vertices - auto x = ViewCArrayKokkos(x_array, num_nodes); - auto y = ViewCArrayKokkos(y_array, num_nodes); - auto z = ViewCArrayKokkos(z_array, num_nodes); - - // get the coordinates of the nodes(rk,elem,node) in this element - for (int node_lid = 0; node_lid < num_nodes; node_lid++) { - x(node_lid) = node_coords(1, elem_node_gids(node_lid), 0); - y(node_lid) = node_coords(1, elem_node_gids(node_lid), 1); - z(node_lid) = node_coords(1, elem_node_gids(node_lid), 2); - } // end for - - double twelth = 1. / 12.; - - // element volume - elem_vol(elem_gid) = - (x(1) * (y(2) * (-z(0) + z(3)) + y(4) * (z(0) - z(5)) + y(0) * (z(3) + z(2) - z(4) - z(5)) + y(7) * (-z(3) + z(5)) + y(5) * (z(0) - z(3) + z(4) - z(7)) + y(3) * (-z(0) - z(2) + z(5) + z(7))) + - x(6) * (y(0) * (-z(2) + z(4)) + y(7) * (z(3) + z(2) - z(4) - z(5)) + y(3) * (z(2) - z(7)) + y(2) * (z(0) - z(3) + z(4) - z(7)) + y(5) * (-z(4) + z(7)) + y(4) * (-z(0) - z(2) + z(5) + z(7))) + - x(2) * (y(1) * (z(0) - z(3)) + y(6) * (-z(0) + z(3) - z(4) + z(7)) + y(7) * (z(3) - z(6)) + y(3) * (z(0) + z(1) - z(7) - z(6)) + y(4) * (-z(0) + z(6)) + y(0) * (-z(1) - z(3) + z(4) + z(6))) + - x(5) * (y(0) * (z(1) - z(4)) + y(6) * (z(4) - z(7)) + y(3) * (-z(1) + z(7)) + y(1) * (-z(0) + z(3) - z(4) + z(7)) + y(4) * (z(0) + z(1) - z(7) - z(6)) + y(7) * (-z(1) - z(3) + z(4) + z(6))) + - x(7) * (y(1) * (z(3) - z(5)) + y(6) * (-z(3) - z(2) + z(4) + z(5)) + y(5) * (z(1) + z(3) - z(4) - z(6)) + y(4) * (z(5) - z(6)) + y(2) * (-z(3) + z(6)) + y(3) * (-z(1) + z(2) - z(5) + z(6))) + - x(0) * (y(3) * (z(1) - z(2)) + y(6) * (z(2) - z(4)) + y(5) * (-z(1) + z(4)) + y(1) * (-z(3) - z(2) + z(4) + z(5)) + y(2) * (z(1) + z(3) - z(4) - z(6)) + y(4) * (-z(1) + z(2) - z(5) + z(6))) + - x(3) * (y(0) * (-z(1) + z(2)) + y(5) * (z(1) - z(7)) + y(1) * (z(0) + z(2) - z(5) - z(7)) + y(6) * (-z(2) + z(7)) + y(7) * (z(1) - z(2) + z(5) - z(6)) + y(2) * (-z(0) - z(1) + z(7) + z(6))) + - x(4) * - (y(1) * (-z(0) + z(5)) + y(6) * (z(0) + z(2) - z(5) - z(7)) + y(2) * (z(0) - z(6)) + y(0) * (z(1) - z(2) + z(5) - z(6)) + y(7) * (-z(5) + z(6)) + y(5) * (-z(0) - z(1) + z(7) + z(6)))) * - twelth; - - // std::cout<<"Calculating volume for hex = "<& elem_node_gids); ///////////////////////////////////////////////////////////////////////////// /// @@ -373,31 +116,9 @@ void get_vol_hex(const DCArrayKokkos& elem_vol, /// \brief Compute Volume of each finite element /// ///////////////////////////////////////////////////////////////////////////// -inline void get_vol(const DCArrayKokkos& elem_vol, +void get_vol(const DCArrayKokkos& elem_vol, const DCArrayKokkos& node_coords, - const Mesh_t& mesh) -{ - const size_t num_dims = mesh.num_dims; - - if (num_dims == 2) { - FOR_ALL(elem_gid, 0, mesh.num_elems, { - // cut out the node_gids for this element - ViewCArrayKokkos elem_node_gids(&mesh.nodes_in_elem(elem_gid, 0), 4); - get_vol_quad(elem_vol, elem_gid, node_coords, elem_node_gids); - }); - Kokkos::fence(); - } - else{ - FOR_ALL(elem_gid, 0, mesh.num_elems, { - // cut out the node_gids for this element - ViewCArrayKokkos elem_node_gids(&mesh.nodes_in_elem(elem_gid, 0), 8); - get_vol_hex(elem_vol, elem_gid, node_coords, elem_node_gids); - }); - Kokkos::fence(); - } // end if - - return; -} // end subroutine + const Mesh_t& mesh); ///////////////////////////////////////////////////////////////////////////// /// @@ -411,67 +132,11 @@ inline void get_vol(const DCArrayKokkos& elem_vol, /// \param Global indices of the nodes of this element /// ///////////////////////////////////////////////////////////////////////////// -KOKKOS_INLINE_FUNCTION +KOKKOS_FUNCTION void get_bmatrix2D(const ViewCArrayKokkos& B_matrix, const size_t elem_gid, const DCArrayKokkos& node_coords, - const ViewCArrayKokkos& elem_node_gids) -{ - const size_t num_nodes = 4; - - double x_array[4]; - double y_array[4]; - - // x, y coordinates of elem vertices - auto x = ViewCArrayKokkos(x_array, num_nodes); - auto y = ViewCArrayKokkos(y_array, num_nodes); - - // get the coordinates of the nodes(rk,elem,node) in this element - for (int node_lid = 0; node_lid < num_nodes; node_lid++) { - x(node_lid) = node_coords(1, elem_node_gids(node_lid), 0); - y(node_lid) = node_coords(1, elem_node_gids(node_lid), 1); - } // end for - - /* ensight node order 0 1 2 3 - Flanaghan node order 3 4 1 2 - */ - - B_matrix(0, 0) = -0.5 * (y(3) - y(1)); - - B_matrix(1, 0) = -0.5 * (y(0) - y(2)); - - B_matrix(2, 0) = -0.5 * (y(1) - y(3)); - - B_matrix(3, 0) = -0.5 * (y(2) - y(0)); - - B_matrix(0, 1) = -0.5 * (x(1) - x(3)); - - B_matrix(1, 1) = -0.5 * (x(2) - x(0)); - - B_matrix(2, 1) = -0.5 * (x(3) - x(1)); - - B_matrix(3, 1) = -0.5 * (x(0) - x(2)); - - // - /* - The Flanagan and Belytschko paper has: - x y - node 1: 0.5*(y2 - y4) , 0.5*(x4 - x2) - node 2: 0.5*(y3 - y1) , 0.5*(x1 - x3) - node 3: 0.5*(y4 - y2) , 0.5*(x2 - x4) - node 4: 0.5*(y1 - y3) , 0.5*(x3 - x1) - - Ensight order would be - - node 2: 0.5*(y3 - y1) , 0.5*(x1 - x3) - node 3: 0.5*(y0 - y2) , 0.5*(x2 - x0) - node 0: 0.5*(y1 - y3) , 0.5*(x3 - x1) - node 1: 0.5*(y2 - y0) , 0.5*(x0 - x2) - - */ - - return; -} // end subroutine + const ViewCArrayKokkos& elem_node_gids); ///////////////////////////////////////////////////////////////////////////// /// @@ -486,37 +151,10 @@ void get_bmatrix2D(const ViewCArrayKokkos& B_matrix, /// \return Elements face area (double) /// ///////////////////////////////////////////////////////////////////////////// -KOKKOS_INLINE_FUNCTION +KOKKOS_FUNCTION double get_area_quad(const size_t elem_gid, const DCArrayKokkos& node_coords, - const ViewCArrayKokkos& elem_node_gids) -{ - double elem_area = 0.0; - - const size_t num_nodes = 4; - - double x_array[4]; - double y_array[4]; - - // x, y coordinates of elem vertices - auto x = ViewCArrayKokkos(x_array, num_nodes); - auto y = ViewCArrayKokkos(y_array, num_nodes); - - // get the coordinates of the nodes(rk,elem,node) in this element - for (int node_lid = 0; node_lid < num_nodes; node_lid++) { - x(node_lid) = node_coords(1, elem_node_gids(node_lid), 0); - y(node_lid) = node_coords(1, elem_node_gids(node_lid), 1); - } // end for - - /* ensight node order 0 1 2 3 - Flanaghan node order 3 4 1 2 - */ - - // element facial area - elem_area = 0.5 * ((x(0) - x(2)) * (y(1) - y(3)) + (x(3) - x(1)) * (y(0) - y(2))); - - return elem_area; -} // end subroutine + const ViewCArrayKokkos& elem_node_gids); ///////////////////////////////////////////////////////////////////////////// /// @@ -534,29 +172,13 @@ double get_area_quad(const size_t elem_gid, /// \return Triangle area (double) /// ///////////////////////////////////////////////////////////////////////////// -KOKKOS_INLINE_FUNCTION +KOKKOS_FUNCTION double heron(const double x1, const double y1, const double x2, const double y2, const double x3, - const double y3) -{ - double S, a, b, c, area; - - S = 0.0; - a = sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1)); - S += a; - b = sqrt((x3 - x2) * (x3 - x2) + (y3 - y2) * (y3 - y2)); - S += b; - c = sqrt((x3 - x1) * (x3 - x1) + (y3 - y1) * (y3 - y1)); - S += c; - - S *= 0.5; - area = sqrt(S * (S - a) * (S - b) * (S - c)); - - return area; -} + const double y3); ///////////////////////////////////////////////////////////////////////////// /// @@ -570,49 +192,12 @@ double heron(const double x1, /// \param Node global IDs associated with this element /// ///////////////////////////////////////////////////////////////////////////// -KOKKOS_INLINE_FUNCTION +KOKKOS_FUNCTION void get_area_weights2D(const ViewCArrayKokkos& corner_areas, const size_t elem_gid, const DCArrayKokkos& node_coords, - const ViewCArrayKokkos& elem_node_gids) -{ - const size_t num_nodes = 4; + const ViewCArrayKokkos& elem_node_gids); - double x_array[4]; - double y_array[4]; - - double rc, zc; - double A12, A23, A34, A41; - - // x, y coordinates of elem vertices - ViewCArrayKokkos x(x_array, num_nodes); - ViewCArrayKokkos y(y_array, num_nodes); - - // get the coordinates of the nodes(rk,elem,node) in this element - rc = zc = 0.0; - for (int node_lid = 0; node_lid < num_nodes; node_lid++) { - x(node_lid) = node_coords(1, elem_node_gids(node_lid), 0); - y(node_lid) = node_coords(1, elem_node_gids(node_lid), 1); - rc += 0.25 * y(node_lid); - zc += 0.25 * x(node_lid); - } // end for - - /* ensight node order 0 1 2 3 - Barlow node order 1 2 3 4 - */ - - A12 = heron(x(0), y(0), zc, rc, x(1), y(1)); - A23 = heron(x(1), y(1), zc, rc, x(2), y(2)); - A34 = heron(x(2), y(2), zc, rc, x(3), y(3)); - A41 = heron(x(3), y(3), zc, rc, x(0), y(0)); - - corner_areas(0) = (5. * A41 + 5. * A12 + A23 + A34) / 12.; - corner_areas(1) = (A41 + 5. * A12 + 5. * A23 + A34) / 12.; - corner_areas(2) = (A41 + A12 + 5. * A23 + 5. * A34) / 12.; - corner_areas(3) = (5. * A41 + A12 + A23 + 5. * A34) / 12.; - - return; -} // end subroutine } // end namespace ///////////////////////////////////////////////////////////////////////////// @@ -628,79 +213,12 @@ void get_area_weights2D(const ViewCArrayKokkos& corner_areas, /// \param Nodal coordinates /// ///////////////////////////////////////////////////////////////////////////// -KOKKOS_INLINE_FUNCTION +KOKKOS_FUNCTION size_t check_bdy(const size_t patch_gid, const int this_bc_tag, const double val, const Mesh_t& mesh, - const DCArrayKokkos& node_coords) -{ - size_t num_dims = mesh.num_dims; - - // default bool is not on the boundary - size_t is_on_bdy = 0; - - // the patch coordinates - double these_patch_coords[3]; // Note: cannot allocated array with num_dims - - // loop over the nodes on the patch - for (size_t patch_node_lid = 0; patch_node_lid < mesh.num_nodes_in_patch; patch_node_lid++) { - // get the nodal_gid for this node in the patch - size_t node_gid = mesh.nodes_in_patch(patch_gid, patch_node_lid); - - for (size_t dim = 0; dim < num_dims; dim++) { - these_patch_coords[dim] = node_coords(1, node_gid, dim); // (rk, node_gid, dim) - } // end for dim - - // a x-plane - if (this_bc_tag == 0) { - if (fabs(these_patch_coords[0] - val) <= 1.0e-7) { - is_on_bdy += 1; - } - } // end if on type - // a y-plane - else if (this_bc_tag == 1) { - if (fabs(these_patch_coords[1] - val) <= 1.0e-7) { - is_on_bdy += 1; - } - } // end if on type - // a z-plane - else if (this_bc_tag == 2) { - if (fabs(these_patch_coords[2] - val) <= 1.0e-7) { - is_on_bdy += 1; - } - } // end if on type - // cylinderical shell where radius = sqrt(x^2 + y^2) - else if (this_bc_tag == 3) { - real_t R = sqrt(these_patch_coords[0] * these_patch_coords[0] + - these_patch_coords[1] * these_patch_coords[1]); - - if (fabs(R - val) <= 1.0e-7) { - is_on_bdy += 1; - } - } // end if on type - // spherical shell where radius = sqrt(x^2 + y^2 + z^2) - else if (this_bc_tag == 4) { - real_t R = sqrt(these_patch_coords[0] * these_patch_coords[0] + - these_patch_coords[1] * these_patch_coords[1] + - these_patch_coords[2] * these_patch_coords[2]); - - if (fabs(R - val) <= 1.0e-7) { - is_on_bdy += 1; - } - } // end if on type - } // end for nodes in the patch - - // if all nodes in the patch are on the geometry - if (is_on_bdy == mesh.num_nodes_in_patch) { - is_on_bdy = 1; - } - else{ - is_on_bdy = 0; - } - - return is_on_bdy; -} // end method to check bdy + const DCArrayKokkos& node_coords); ///////////////////////////////////////////////////////////////////////////// /// @@ -713,45 +231,8 @@ size_t check_bdy(const size_t patch_gid, /// \param Nodal coordinates /// ///////////////////////////////////////////////////////////////////////////// -inline void tag_bdys(const BoundaryCondition_t& boundary, +void tag_bdys(const BoundaryCondition_t& boundary, Mesh_t& mesh, - const DCArrayKokkos& node_coords) -{ - // if (bdy_set == mesh.num_bdy_sets){ - // printf(" ERROR: number of boundary sets must be increased by %zu", - // bdy_set-mesh.num_bdy_sets+1); - // exit(0); - // } // end if - - FOR_ALL(bdy_set, 0, mesh.num_bdy_sets, { - // tag boundaries - int bc_tag_id = boundary.BoundaryConditionSetup(bdy_set).geometry; - double val = boundary.BoundaryConditionSetup(bdy_set).value; - - // save the boundary patches to this set that are on the plane, spheres, etc. - for (size_t bdy_patch_lid = 0; bdy_patch_lid < mesh.num_bdy_patches; bdy_patch_lid++) { - // save the patch index - size_t bdy_patch_gid = mesh.bdy_patches(bdy_patch_lid); - - // check to see if this patch is on the specified plane - size_t is_on_bdy = check_bdy(bdy_patch_gid, - bc_tag_id, - val, - mesh, - node_coords); // no=0, yes=1 - - if (is_on_bdy == 1) { - size_t index = mesh.bdy_patches_in_set.stride(bdy_set); - - // increment the number of boundary patches saved - mesh.bdy_patches_in_set.stride(bdy_set)++; - - mesh.bdy_patches_in_set(bdy_set, index) = bdy_patch_gid; - } // end if - } // end for bdy_patch - }); // end FOR_ALL bdy_sets - - return; -} // end tag + const DCArrayKokkos& node_coords); #endif \ No newline at end of file diff --git a/single-node-refactor/src/common/src/geometry_new.cpp b/single-node-refactor/src/common/src/geometry_new.cpp new file mode 100644 index 000000000..967e2bdb2 --- /dev/null +++ b/single-node-refactor/src/common/src/geometry_new.cpp @@ -0,0 +1,750 @@ +/********************************************************************************************** +� 2020. Triad National Security, LLC. All rights reserved. +This program was produced under U.S. Government contract 89233218CNA000001 for Los Alamos +National Laboratory (LANL), which is operated by Triad National Security, LLC for the U.S. +Department of Energy/National Nuclear Security Administration. All rights in the program are +reserved by Triad National Security, LLC, and the U.S. Department of Energy/National Nuclear +Security Administration. The Government is granted for itself and others acting on its behalf a +nonexclusive, paid-up, irrevocable worldwide license in this material to reproduce, prepare +derivative works, distribute copies to the public, perform publicly and display publicly, and +to permit others to do so. +This program is open source under the BSD-3 License. +Redistribution and use in source and binary forms, with or without modification, are permitted +provided that the following conditions are met: +1. Redistributions of source code must retain the above copyright notice, this list of +conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, this list of +conditions and the following disclaimer in the documentation and/or other materials +provided with the distribution. +3. Neither the name of the copyright holder nor the names of its contributors may be used +to endorse or promote products derived from this software without specific prior +written permission. +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +**********************************************************************************************/ + +///////////////////////////////////////////////////////////////////////////////////// +// ********** WARNING WARNING WARNING: TO BE REPLACED BY ELEMENTS ****************/// +///////////////////////////////////////////////////////////////////////////////////// + + +#include "geometry_new.h" + +///////////////////////////////////////////////////////////////////////////// +/// +/// \fn get_bmatrix +/// +/// \brief This function calculate the finite element B matrix: +/// +/// B_p = J^{-T} \cdot (\nabla_{xi} \phi_p w, where: +/// \phi_p is the basis function for vertex p +/// w is the 1 gauss point for the cell (everything is evaluated at this point) +/// J^{-T} is the inverse transpose of the Jacobi matrix +/// \nabla_{xi} is the gradient operator in the reference coordinates +/// B_p is the OUTWARD corner area normal at node p +/// +/// \param B matrix +/// \param Global index of the element +/// \param View of nodal position data +/// \param View of the elements node ids +/// +///////////////////////////////////////////////////////////////////////////// +KOKKOS_FUNCTION +void geometry::get_bmatrix(const ViewCArrayKokkos& B_matrix, + const size_t elem_gid, + const DCArrayKokkos& node_coords, + const ViewCArrayKokkos& elem_node_gids) +{ + const size_t num_nodes = 8; + + double x_array[8]; + double y_array[8]; + double z_array[8]; + + // x, y, z coordinates of elem vertices + auto x = ViewCArrayKokkos(x_array, num_nodes); + auto y = ViewCArrayKokkos(y_array, num_nodes); + auto z = ViewCArrayKokkos(z_array, num_nodes); + + // get the coordinates of the nodes(rk,elem,node) in this element + for (int node_lid = 0; node_lid < num_nodes; node_lid++) { + x(node_lid) = node_coords(1, elem_node_gids(node_lid), 0); + y(node_lid) = node_coords(1, elem_node_gids(node_lid), 1); + z(node_lid) = node_coords(1, elem_node_gids(node_lid), 2); + } // end for + + + double twelth = 1. / 12.; + + B_matrix(0, 0) = (+y(1) * (-z(3) - z(2) + z(4) + z(5) ) + + y(3) * (+z(1) - z(2) ) + + y(2) * (+z(1) + z(3) - z(4) - z(6) ) + + y(4) * (-z(1) + z(2) - z(5) + z(6) ) + + y(5) * (-z(1) + z(4) ) + + y(6) * (+z(2) - z(4) ) ) * twelth; + + B_matrix(1, 0) = (+y(0) * (+z(3) + z(2) - z(4) - z(5) ) + + y(3) * (-z(0) - z(2) + z(5) + z(7) ) + + y(2) * (-z(0) + z(3) ) + + y(4) * (+z(0) - z(5) ) + + y(5) * (+z(0) - z(3) + z(4) - z(7) ) + + y(7) * (-z(3) + z(5) ) ) * twelth; + + B_matrix(2, 0) = (+y(0) * (-z(1) - z(3) + z(4) + z(6) ) + + y(1) * (+z(0) - z(3) ) + + y(3) * (+z(0) + z(1) - z(7) - z(6) ) + + y(4) * (-z(0) + z(6) ) + + y(7) * (+z(3) - z(6) ) + + y(6) * (-z(0) + z(3) - z(4) + z(7) ) ) * twelth; + + B_matrix(3, 0) = (+y(0) * (-z(1) + z(2) ) + + y(1) * (+z(0) + z(2) - z(5) - z(7) ) + + y(2) * (-z(0) - z(1) + z(7) + z(6) ) + + y(5) * (+z(1) - z(7) ) + + y(7) * (+z(1) - z(2) + z(5) - z(6) ) + + y(6) * (-z(2) + z(7) ) ) * twelth; + + B_matrix(4, 0) = (+y(0) * (+z(1) - z(2) + z(5) - z(6) ) + + y(1) * (-z(0) + z(5) ) + + y(2) * (+z(0) - z(6) ) + + y(5) * (-z(0) - z(1) + z(7) + z(6) ) + + y(7) * (-z(5) + z(6) ) + + y(6) * (+z(0) + z(2) - z(5) - z(7) ) ) * twelth; + + B_matrix(5, 0) = (+y(0) * (+z(1) - z(4) ) + + y(1) * (-z(0) + z(3) - z(4) + z(7) ) + + y(3) * (-z(1) + z(7) ) + + y(4) * (+z(0) + z(1) - z(7) - z(6) ) + + y(7) * (-z(1) - z(3) + z(4) + z(6) ) + + y(6) * (+z(4) - z(7) ) ) * twelth; + + B_matrix(6, 0) = (+y(0) * (-z(2) + z(4) ) + + y(3) * (+z(2) - z(7) ) + + y(2) * (+z(0) - z(3) + z(4) - z(7) ) + + y(4) * (-z(0) - z(2) + z(5) + z(7) ) + + y(5) * (-z(4) + z(7) ) + + y(7) * (+z(3) + z(2) - z(4) - z(5) ) ) * twelth; + + B_matrix(7, 0) = (+y(1) * (+z(3) - z(5) ) + + y(3) * (-z(1) + z(2) - z(5) + z(6) ) + + y(2) * (-z(3) + z(6) ) + + y(4) * (+z(5) - z(6) ) + + y(5) * (+z(1) + z(3) - z(4) - z(6) ) + + y(6) * (-z(3) - z(2) + z(4) + z(5) ) ) * twelth; + + B_matrix(0, 1) = (+z(1) * (-x(3) - x(2) + x(4) + x(5) ) + + z(3) * (+x(1) - x(2) ) + + z(2) * (+x(1) + x(3) - x(4) - x(6) ) + + z(4) * (-x(1) + x(2) - x(5) + x(6) ) + + z(5) * (-x(1) + x(4) ) + + z(6) * (+x(2) - x(4) ) ) * twelth; + + B_matrix(1, 1) = (+z(0) * (+x(3) + x(2) - x(4) - x(5) ) + + z(3) * (-x(0) - x(2) + x(5) + x(7) ) + + z(2) * (-x(0) + x(3) ) + + z(4) * (+x(0) - x(5) ) + + z(5) * (+x(0) - x(3) + x(4) - x(7) ) + + z(7) * (-x(3) + x(5) ) ) * twelth; + + B_matrix(2, 1) = (+z(0) * (-x(1) - x(3) + x(4) + x(6) ) + + z(1) * (+x(0) - x(3) ) + + z(3) * (+x(0) + x(1) - x(7) - x(6) ) + + z(4) * (-x(0) + x(6) ) + + z(7) * (+x(3) - x(6) ) + + z(6) * (-x(0) + x(3) - x(4) + x(7) ) ) * twelth; + + B_matrix(3, 1) = (+z(0) * (-x(1) + x(2) ) + + z(1) * (+x(0) + x(2) - x(5) - x(7) ) + + z(2) * (-x(0) - x(1) + x(7) + x(6) ) + + z(5) * (+x(1) - x(7) ) + + z(7) * (+x(1) - x(2) + x(5) - x(6) ) + + z(6) * (-x(2) + x(7) ) ) * twelth; + + B_matrix(4, 1) = (+z(0) * (+x(1) - x(2) + x(5) - x(6) ) + + z(1) * (-x(0) + x(5) ) + + z(2) * (+x(0) - x(6) ) + + z(5) * (-x(0) - x(1) + x(7) + x(6) ) + + z(7) * (-x(5) + x(6) ) + + z(6) * (+x(0) + x(2) - x(5) - x(7) ) ) * twelth; + + B_matrix(5, 1) = (+z(0) * (+x(1) - x(4) ) + + z(1) * (-x(0) + x(3) - x(4) + x(7) ) + + z(3) * (-x(1) + x(7) ) + + z(4) * (+x(0) + x(1) - x(7) - x(6) ) + + z(7) * (-x(1) - x(3) + x(4) + x(6) ) + + z(6) * (+x(4) - x(7) ) ) * twelth; + + B_matrix(6, 1) = (+z(0) * (-x(2) + x(4) ) + + z(3) * (+x(2) - x(7) ) + + z(2) * (+x(0) - x(3) + x(4) - x(7) ) + + z(4) * (-x(0) - x(2) + x(5) + x(7) ) + + z(5) * (-x(4) + x(7) ) + + z(7) * (+x(3) + x(2) - x(4) - x(5) ) ) * twelth; + + B_matrix(7, 1) = (+z(1) * (+x(3) - x(5) ) + + z(3) * (-x(1) + x(2) - x(5) + x(6) ) + + z(2) * (-x(3) + x(6) ) + + z(4) * (+x(5) - x(6) ) + + z(5) * (+x(1) + x(3) - x(4) - x(6) ) + + z(6) * (-x(3) - x(2) + x(4) + x(5) ) ) * twelth; + + B_matrix(0, 2) = (+x(1) * (-y(3) - y(2) + y(4) + y(5) ) + + x(3) * (+y(1) - y(2) ) + + x(2) * (+y(1) + y(3) - y(4) - y(6) ) + + x(4) * (-y(1) + y(2) - y(5) + y(6) ) + + x(5) * (-y(1) + y(4) ) + + x(6) * (+y(2) - y(4) ) ) * twelth; + + B_matrix(1, 2) = (+x(0) * (+y(3) + y(2) - y(4) - y(5) ) + + x(3) * (-y(0) - y(2) + y(5) + y(7) ) + + x(2) * (-y(0) + y(3) ) + + x(4) * (+y(0) - y(5) ) + + x(5) * (+y(0) - y(3) + y(4) - y(7) ) + + x(7) * (-y(3) + y(5) ) ) * twelth; + + B_matrix(2, 2) = (+x(0) * (-y(1) - y(3) + y(4) + y(6) ) + + x(1) * (+y(0) - y(3) ) + + x(3) * (+y(0) + y(1) - y(7) - y(6) ) + + x(4) * (-y(0) + y(6) ) + + x(7) * (+y(3) - y(6) ) + + x(6) * (-y(0) + y(3) - y(4) + y(7) ) ) * twelth; + + B_matrix(3, 2) = (+x(0) * (-y(1) + y(2) ) + + x(1) * (+y(0) + y(2) - y(5) - y(7) ) + + x(2) * (-y(0) - y(1) + y(7) + y(6) ) + + x(5) * (+y(1) - y(7) ) + + x(7) * (+y(1) - y(2) + y(5) - y(6) ) + + x(6) * (-y(2) + y(7) ) ) * twelth; + + B_matrix(4, 2) = (+x(0) * (+y(1) - y(2) + y(5) - y(6) ) + + x(1) * (-y(0) + y(5) ) + + x(2) * (+y(0) - y(6) ) + + x(5) * (-y(0) - y(1) + y(7) + y(6) ) + + x(7) * (-y(5) + y(6) ) + + x(6) * (+y(0) + y(2) - y(5) - y(7) ) ) * twelth; + + B_matrix(5, 2) = (+x(0) * (+y(1) - y(4) ) + + x(1) * (-y(0) + y(3) - y(4) + y(7) ) + + x(3) * (-y(1) + y(7) ) + + x(4) * (+y(0) + y(1) - y(7) - y(6) ) + + x(7) * (-y(1) - y(3) + y(4) + y(6) ) + + x(6) * (+y(4) - y(7) ) ) * twelth; + + B_matrix(6, 2) = (+x(0) * (-y(2) + y(4) ) + + x(3) * (+y(2) - y(7) ) + + x(2) * (+y(0) - y(3) + y(4) - y(7) ) + + x(4) * (-y(0) - y(2) + y(5) + y(7) ) + + x(5) * (-y(4) + y(7) ) + + x(7) * (+y(3) + y(2) - y(4) - y(5) ) ) * twelth; + + B_matrix(7, 2) = (+x(1) * (+y(3) - y(5) ) + + x(3) * (-y(1) + y(2) - y(5) + y(6) ) + + x(2) * (-y(3) + y(6) ) + + x(4) * (+y(5) - y(6) ) + + x(5) * (+y(1) + y(3) - y(4) - y(6) ) + + x(6) * (-y(3) - y(2) + y(4) + y(5) ) ) * twelth; +} // end get_bmatrix + +///////////////////////////////////////////////////////////////////////////// +/// +/// \fn get_vol_quad +/// +/// \brief True volume of a quad in RZ coords +/// +/// \param Element volume +/// \param Global index of the element +/// \param Nodal coordinates +/// \param Global ids of the nodes in this element +/// +///////////////////////////////////////////////////////////////////////////// +KOKKOS_FUNCTION +void geometry::get_vol_quad(const DCArrayKokkos& elem_vol, + const size_t elem_gid, + const DCArrayKokkos& node_coords, + const ViewCArrayKokkos& elem_node_gids) +{ + elem_vol(elem_gid) = 0.0; + + const size_t num_nodes = 4; + + double x_array[4]; + double y_array[4]; + + // x, y coordinates of elem vertices + auto x = ViewCArrayKokkos(x_array, num_nodes); + auto y = ViewCArrayKokkos(y_array, num_nodes); + + // get the coordinates of the nodes(rk,elem,node) in this element + for (int node_lid = 0; node_lid < num_nodes; node_lid++) { + x(node_lid) = node_coords(1, elem_node_gids(node_lid), 0); + y(node_lid) = node_coords(1, elem_node_gids(node_lid), 1); + } // end for + + /* ensight node order 0 1 2 3 + Flanaghan node order 3 4 1 2 + */ + elem_vol(elem_gid) = + ( (y(2) + y(3) + y(0)) * ((y(2) - y(3)) * (x(0) - x(3)) - (y(0) - y(3)) * (x(2) - x(3)) ) + + (y(0) + y(1) + y(2)) * ((y(0) - y(1)) * (x(2) - x(1)) - (y(2) - y(1)) * (x(0) - x(1))) ) / 6.0; + + elem_vol(elem_gid) = fmax(elem_vol(elem_gid), 1.0E-14); + return; +} // end get_vol_quad + +///////////////////////////////////////////////////////////////////////////// +/// +/// \fn get_vol_hex +/// +/// \brief Exact volume for a hex element +/// +/// \param View of element volume data +/// \param Global element index +/// \param View into nodal position data +/// \param Runge Kutta time integration level +/// +///////////////////////////////////////////////////////////////////////////// +KOKKOS_FUNCTION +void geometry::get_vol_hex(const DCArrayKokkos& elem_vol, + const size_t elem_gid, + const DCArrayKokkos& node_coords, + const ViewCArrayKokkos& elem_node_gids) +{ + const size_t num_nodes = 8; + + double x_array[8]; + double y_array[8]; + double z_array[8]; + + // x, y, z coordinates of elem vertices + auto x = ViewCArrayKokkos(x_array, num_nodes); + auto y = ViewCArrayKokkos(y_array, num_nodes); + auto z = ViewCArrayKokkos(z_array, num_nodes); + + // get the coordinates of the nodes(rk,elem,node) in this element + for (int node_lid = 0; node_lid < num_nodes; node_lid++) { + x(node_lid) = node_coords(1, elem_node_gids(node_lid), 0); + y(node_lid) = node_coords(1, elem_node_gids(node_lid), 1); + z(node_lid) = node_coords(1, elem_node_gids(node_lid), 2); + } // end for + + double twelth = 1. / 12.; + + // element volume + elem_vol(elem_gid) = + (x(1) * (y(2) * (-z(0) + z(3)) + y(4) * (z(0) - z(5)) + y(0) * (z(3) + z(2) - z(4) - z(5)) + y(7) * (-z(3) + z(5)) + y(5) * (z(0) - z(3) + z(4) - z(7)) + y(3) * (-z(0) - z(2) + z(5) + z(7))) + + x(6) * (y(0) * (-z(2) + z(4)) + y(7) * (z(3) + z(2) - z(4) - z(5)) + y(3) * (z(2) - z(7)) + y(2) * (z(0) - z(3) + z(4) - z(7)) + y(5) * (-z(4) + z(7)) + y(4) * (-z(0) - z(2) + z(5) + z(7))) + + x(2) * (y(1) * (z(0) - z(3)) + y(6) * (-z(0) + z(3) - z(4) + z(7)) + y(7) * (z(3) - z(6)) + y(3) * (z(0) + z(1) - z(7) - z(6)) + y(4) * (-z(0) + z(6)) + y(0) * (-z(1) - z(3) + z(4) + z(6))) + + x(5) * (y(0) * (z(1) - z(4)) + y(6) * (z(4) - z(7)) + y(3) * (-z(1) + z(7)) + y(1) * (-z(0) + z(3) - z(4) + z(7)) + y(4) * (z(0) + z(1) - z(7) - z(6)) + y(7) * (-z(1) - z(3) + z(4) + z(6))) + + x(7) * (y(1) * (z(3) - z(5)) + y(6) * (-z(3) - z(2) + z(4) + z(5)) + y(5) * (z(1) + z(3) - z(4) - z(6)) + y(4) * (z(5) - z(6)) + y(2) * (-z(3) + z(6)) + y(3) * (-z(1) + z(2) - z(5) + z(6))) + + x(0) * (y(3) * (z(1) - z(2)) + y(6) * (z(2) - z(4)) + y(5) * (-z(1) + z(4)) + y(1) * (-z(3) - z(2) + z(4) + z(5)) + y(2) * (z(1) + z(3) - z(4) - z(6)) + y(4) * (-z(1) + z(2) - z(5) + z(6))) + + x(3) * (y(0) * (-z(1) + z(2)) + y(5) * (z(1) - z(7)) + y(1) * (z(0) + z(2) - z(5) - z(7)) + y(6) * (-z(2) + z(7)) + y(7) * (z(1) - z(2) + z(5) - z(6)) + y(2) * (-z(0) - z(1) + z(7) + z(6))) + + x(4) * + (y(1) * (-z(0) + z(5)) + y(6) * (z(0) + z(2) - z(5) - z(7)) + y(2) * (z(0) - z(6)) + y(0) * (z(1) - z(2) + z(5) - z(6)) + y(7) * (-z(5) + z(6)) + y(5) * (-z(0) - z(1) + z(7) + z(6)))) * + twelth; + + // std::cout<<"Calculating volume for hex = "<& elem_vol, + const DCArrayKokkos& node_coords, + const Mesh_t& mesh) +{ + const size_t num_dims = mesh.num_dims; + + if (num_dims == 2) { + FOR_ALL(elem_gid, 0, mesh.num_elems, { + // cut out the node_gids for this element + ViewCArrayKokkos elem_node_gids(&mesh.nodes_in_elem(elem_gid, 0), 4); + get_vol_quad(elem_vol, elem_gid, node_coords, elem_node_gids); + }); + Kokkos::fence(); + } + else{ + FOR_ALL(elem_gid, 0, mesh.num_elems, { + // cut out the node_gids for this element + ViewCArrayKokkos elem_node_gids(&mesh.nodes_in_elem(elem_gid, 0), 8); + get_vol_hex(elem_vol, elem_gid, node_coords, elem_node_gids); + }); + Kokkos::fence(); + } // end if + + return; +} // end get_vol + + +///////////////////////////////////////////////////////////////////////////// +/// +/// \fn get_bmatrix2D +/// +/// \brief Calculate the 2D finite element B matrix +/// +/// \param B Matrix +/// \param Global index of the element +/// \param Nodal coordinates +/// \param Global indices of the nodes of this element +/// +///////////////////////////////////////////////////////////////////////////// +KOKKOS_FUNCTION +void geometry::get_bmatrix2D(const ViewCArrayKokkos& B_matrix, + const size_t elem_gid, + const DCArrayKokkos& node_coords, + const ViewCArrayKokkos& elem_node_gids) +{ + const size_t num_nodes = 4; + + double x_array[4]; + double y_array[4]; + + // x, y coordinates of elem vertices + auto x = ViewCArrayKokkos(x_array, num_nodes); + auto y = ViewCArrayKokkos(y_array, num_nodes); + + // get the coordinates of the nodes(rk,elem,node) in this element + for (int node_lid = 0; node_lid < num_nodes; node_lid++) { + x(node_lid) = node_coords(1, elem_node_gids(node_lid), 0); + y(node_lid) = node_coords(1, elem_node_gids(node_lid), 1); + } // end for + + /* ensight node order 0 1 2 3 + Flanaghan node order 3 4 1 2 + */ + + B_matrix(0, 0) = -0.5 * (y(3) - y(1)); + + B_matrix(1, 0) = -0.5 * (y(0) - y(2)); + + B_matrix(2, 0) = -0.5 * (y(1) - y(3)); + + B_matrix(3, 0) = -0.5 * (y(2) - y(0)); + + B_matrix(0, 1) = -0.5 * (x(1) - x(3)); + + B_matrix(1, 1) = -0.5 * (x(2) - x(0)); + + B_matrix(2, 1) = -0.5 * (x(3) - x(1)); + + B_matrix(3, 1) = -0.5 * (x(0) - x(2)); + + // + /* + The Flanagan and Belytschko paper has: + x y + node 1: 0.5*(y2 - y4) , 0.5*(x4 - x2) + node 2: 0.5*(y3 - y1) , 0.5*(x1 - x3) + node 3: 0.5*(y4 - y2) , 0.5*(x2 - x4) + node 4: 0.5*(y1 - y3) , 0.5*(x3 - x1) + + Ensight order would be + + node 2: 0.5*(y3 - y1) , 0.5*(x1 - x3) + node 3: 0.5*(y0 - y2) , 0.5*(x2 - x0) + node 0: 0.5*(y1 - y3) , 0.5*(x3 - x1) + node 1: 0.5*(y2 - y0) , 0.5*(x0 - x2) + + */ + + return; +} // end get_bmatrix2D + + +///////////////////////////////////////////////////////////////////////////// +/// +/// \fn get_area_quad +/// +/// \brief Calculate the area of a elements face +/// +/// \param Global index of the element +/// \param Nodal coordinates +/// \param Global ids of the nodes in this element +/// +/// \return Elements face area (double) +/// +///////////////////////////////////////////////////////////////////////////// +KOKKOS_FUNCTION +double geometry::get_area_quad(const size_t elem_gid, + const DCArrayKokkos& node_coords, + const ViewCArrayKokkos& elem_node_gids) +{ + double elem_area = 0.0; + + const size_t num_nodes = 4; + + double x_array[4]; + double y_array[4]; + + // x, y coordinates of elem vertices + auto x = ViewCArrayKokkos(x_array, num_nodes); + auto y = ViewCArrayKokkos(y_array, num_nodes); + + // get the coordinates of the nodes(rk,elem,node) in this element + for (int node_lid = 0; node_lid < num_nodes; node_lid++) { + x(node_lid) = node_coords(1, elem_node_gids(node_lid), 0); + y(node_lid) = node_coords(1, elem_node_gids(node_lid), 1); + } // end for + + /* ensight node order 0 1 2 3 + Flanaghan node order 3 4 1 2 + */ + + // element facial area + elem_area = 0.5 * ((x(0) - x(2)) * (y(1) - y(3)) + (x(3) - x(1)) * (y(0) - y(2))); + + return elem_area; +} // end get_area_quad + +///////////////////////////////////////////////////////////////////////////// +/// +/// \fn heron +/// +/// \brief Calculate the area of a triangle using the heron algorithm +/// +/// \param Node 1 X coordinate +/// \param Node 1 Y coordinate +/// \param Node 2 X coordinate +/// \param Node 2 Y coordinate +/// \param Node 3 X coordinate +/// \param Node 3 Y coordinate +/// +/// \return Triangle area (double) +/// +///////////////////////////////////////////////////////////////////////////// +KOKKOS_FUNCTION +double geometry::heron(const double x1, + const double y1, + const double x2, + const double y2, + const double x3, + const double y3) +{ + double S, a, b, c, area; + + S = 0.0; + a = sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1)); + S += a; + b = sqrt((x3 - x2) * (x3 - x2) + (y3 - y2) * (y3 - y2)); + S += b; + c = sqrt((x3 - x1) * (x3 - x1) + (y3 - y1) * (y3 - y1)); + S += c; + + S *= 0.5; + area = sqrt(S * (S - a) * (S - b) * (S - c)); + + return area; +} // end heron + + +///////////////////////////////////////////////////////////////////////////// +/// +/// \fn get_area_weights2D +/// +/// \brief Calculate the corner weighted area +/// +/// \param Corner areas +/// \param Element global index +/// \param Nodal coordinates +/// \param Node global IDs associated with this element +/// +///////////////////////////////////////////////////////////////////////////// +KOKKOS_FUNCTION +void geometry::get_area_weights2D(const ViewCArrayKokkos& corner_areas, + const size_t elem_gid, + const DCArrayKokkos& node_coords, + const ViewCArrayKokkos& elem_node_gids) +{ + const size_t num_nodes = 4; + + double x_array[4]; + double y_array[4]; + + double rc, zc; + double A12, A23, A34, A41; + + // x, y coordinates of elem vertices + ViewCArrayKokkos x(x_array, num_nodes); + ViewCArrayKokkos y(y_array, num_nodes); + + // get the coordinates of the nodes(rk,elem,node) in this element + rc = zc = 0.0; + for (int node_lid = 0; node_lid < num_nodes; node_lid++) { + x(node_lid) = node_coords(1, elem_node_gids(node_lid), 0); + y(node_lid) = node_coords(1, elem_node_gids(node_lid), 1); + rc += 0.25 * y(node_lid); + zc += 0.25 * x(node_lid); + } // end for + + /* ensight node order 0 1 2 3 + Barlow node order 1 2 3 4 + */ + + A12 = heron(x(0), y(0), zc, rc, x(1), y(1)); + A23 = heron(x(1), y(1), zc, rc, x(2), y(2)); + A34 = heron(x(2), y(2), zc, rc, x(3), y(3)); + A41 = heron(x(3), y(3), zc, rc, x(0), y(0)); + + corner_areas(0) = (5. * A41 + 5. * A12 + A23 + A34) / 12.; + corner_areas(1) = (A41 + 5. * A12 + 5. * A23 + A34) / 12.; + corner_areas(2) = (A41 + A12 + 5. * A23 + 5. * A34) / 12.; + corner_areas(3) = (5. * A41 + A12 + A23 + 5. * A34) / 12.; + + return; +} // end get_area_weights2D + + +///////////////////////////////////////////////////////////////////////////// +/// +/// \fn check_bdy +/// +/// \brief routine for checking to see if a vertex is on a boundary +/// +/// \param Global id of a patch +/// \param Boundary condition tag (bc_tag = 0 xplane, 1 yplane, 2 zplane, 3 cylinder, 4 is shell) +/// \param Plane value +/// \param Simulation mesh +/// \param Nodal coordinates +/// +///////////////////////////////////////////////////////////////////////////// +KOKKOS_FUNCTION +size_t check_bdy(const size_t patch_gid, + const int this_bc_tag, + const double val, + const Mesh_t& mesh, + const DCArrayKokkos& node_coords) +{ + size_t num_dims = mesh.num_dims; + + // default bool is not on the boundary + size_t is_on_bdy = 0; + + // the patch coordinates + double these_patch_coords[3]; // Note: cannot allocated array with num_dims + + // loop over the nodes on the patch + for (size_t patch_node_lid = 0; patch_node_lid < mesh.num_nodes_in_patch; patch_node_lid++) { + // get the nodal_gid for this node in the patch + size_t node_gid = mesh.nodes_in_patch(patch_gid, patch_node_lid); + + for (size_t dim = 0; dim < num_dims; dim++) { + these_patch_coords[dim] = node_coords(1, node_gid, dim); // (rk, node_gid, dim) + } // end for dim + + // a x-plane + if (this_bc_tag == 0) { + if (fabs(these_patch_coords[0] - val) <= 1.0e-7) { + is_on_bdy += 1; + } + } // end if on type + // a y-plane + else if (this_bc_tag == 1) { + if (fabs(these_patch_coords[1] - val) <= 1.0e-7) { + is_on_bdy += 1; + } + } // end if on type + // a z-plane + else if (this_bc_tag == 2) { + if (fabs(these_patch_coords[2] - val) <= 1.0e-7) { + is_on_bdy += 1; + } + } // end if on type + // cylinderical shell where radius = sqrt(x^2 + y^2) + else if (this_bc_tag == 3) { + real_t R = sqrt(these_patch_coords[0] * these_patch_coords[0] + + these_patch_coords[1] * these_patch_coords[1]); + + if (fabs(R - val) <= 1.0e-7) { + is_on_bdy += 1; + } + } // end if on type + // spherical shell where radius = sqrt(x^2 + y^2 + z^2) + else if (this_bc_tag == 4) { + real_t R = sqrt(these_patch_coords[0] * these_patch_coords[0] + + these_patch_coords[1] * these_patch_coords[1] + + these_patch_coords[2] * these_patch_coords[2]); + + if (fabs(R - val) <= 1.0e-7) { + is_on_bdy += 1; + } + } // end if on type + } // end for nodes in the patch + + // if all nodes in the patch are on the geometry + if (is_on_bdy == mesh.num_nodes_in_patch) { + is_on_bdy = 1; + } + else{ + is_on_bdy = 0; + } + + return is_on_bdy; +} // end method to check bdy + + +///////////////////////////////////////////////////////////////////////////// +/// +/// \fn tag_bdys +/// +/// \brief set planes for tagging sub sets of boundary patches +/// +/// \param Boundary condition +/// \param Simulation mesh +/// \param Nodal coordinates +/// +///////////////////////////////////////////////////////////////////////////// +void tag_bdys(const BoundaryCondition_t& boundary, + Mesh_t& mesh, + const DCArrayKokkos& node_coords) +{ + // if (bdy_set == mesh.num_bdy_sets){ + // printf(" ERROR: number of boundary sets must be increased by %zu", + // bdy_set-mesh.num_bdy_sets+1); + // exit(0); + // } // end if + + FOR_ALL(bdy_set, 0, mesh.num_bdy_sets, { + // tag boundaries + int bc_tag_id = boundary.BoundaryConditionSetup(bdy_set).geometry; + double val = boundary.BoundaryConditionSetup(bdy_set).value; + + // save the boundary patches to this set that are on the plane, spheres, etc. + for (size_t bdy_patch_lid = 0; bdy_patch_lid < mesh.num_bdy_patches; bdy_patch_lid++) { + // save the patch index + size_t bdy_patch_gid = mesh.bdy_patches(bdy_patch_lid); + + // check to see if this patch is on the specified plane + size_t is_on_bdy = check_bdy(bdy_patch_gid, + bc_tag_id, + val, + mesh, + node_coords); // no=0, yes=1 + + if (is_on_bdy == 1) { + size_t index = mesh.bdy_patches_in_set.stride(bdy_set); + + // increment the number of boundary patches saved + mesh.bdy_patches_in_set.stride(bdy_set)++; + + mesh.bdy_patches_in_set(bdy_set, index) = bdy_patch_gid; + } // end if + } // end for bdy_patch + }); // end FOR_ALL bdy_sets + + return; +} // end tag \ No newline at end of file From 8e39ef27437fbfe080d8973a391be372bf5cbe6c Mon Sep 17 00:00:00 2001 From: Jacob Moore Date: Wed, 28 Aug 2024 13:41:43 -0500 Subject: [PATCH 213/233] ENH: Tidy up mesh (removed unused function definition) --- single-node-refactor/src/common/include/mesh.h | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/single-node-refactor/src/common/include/mesh.h b/single-node-refactor/src/common/include/mesh.h index 2d5dac76c..8a84ba624 100644 --- a/single-node-refactor/src/common/include/mesh.h +++ b/single-node-refactor/src/common/include/mesh.h @@ -1530,14 +1530,4 @@ struct Mesh_t } // end method to build boundary nodes }; // end Mesh_t -KOKKOS_FUNCTION -void decompose_vel_grad(ViewCArrayKokkos& D_tensor, - ViewCArrayKokkos& W_tensor, - const ViewCArrayKokkos& vel_grad, - const ViewCArrayKokkos& elem_node_gids, - const size_t elem_gid, - const DCArrayKokkos& node_coords, - const DCArrayKokkos& node_vel, - const double vol); - #endif \ No newline at end of file From 94eb2fdf93267c2c3395fdf7697108e9b017d471 Mon Sep 17 00:00:00 2001 From: Jacob Moore Date: Wed, 28 Aug 2024 13:58:36 -0500 Subject: [PATCH 214/233] ENH: Silence cuda warnings --- .../src/Solvers/SGH_solver_3D/src/sgh_execute.cpp | 7 ++----- .../src/Solvers/SGH_solver_rz/src/properties_rz.cpp | 6 ------ .../src/Solvers/SGH_solver_rz/src/sgh_execute_rz.cpp | 12 +++--------- single-node-refactor/src/common/include/mesh_io.h | 12 +++++------- single-node-refactor/src/common/src/region_fill.cpp | 6 ------ single-node-refactor/src/solver.cpp | 2 +- 6 files changed, 11 insertions(+), 34 deletions(-) diff --git a/single-node-refactor/src/Solvers/SGH_solver_3D/src/sgh_execute.cpp b/single-node-refactor/src/Solvers/SGH_solver_3D/src/sgh_execute.cpp index 166649ab7..48d15cd65 100644 --- a/single-node-refactor/src/Solvers/SGH_solver_3D/src/sgh_execute.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver_3D/src/sgh_execute.cpp @@ -64,7 +64,7 @@ void SGH3D::execute(SimulationParameters_t& SimulationParamaters, double graphics_dt_ival = SimulationParamaters.output_options.graphics_time_step; int graphics_cyc_ival = SimulationParamaters.output_options.graphics_iteration_step; - double time_initial = SimulationParamaters.dynamic_options.time_initial; + // double time_initial = SimulationParamaters.dynamic_options.time_initial; double time_final = SimulationParamaters.dynamic_options.time_final; double dt_min = SimulationParamaters.dynamic_options.dt_min; double dt_max = SimulationParamaters.dynamic_options.dt_max; @@ -81,13 +81,10 @@ void SGH3D::execute(SimulationParameters_t& SimulationParamaters, // Create mesh writer MeshWriter mesh_writer; // Note: Pull to driver after refactoring evolution - // --- num vars ---- - size_t num_dims = 3; - + // --- Graphics vars ---- CArray graphics_times = CArray(20000); graphics_times(0) = 0.0; double graphics_time = 0.0; // the times for writing graphics dump - size_t graphics_id = 0; CArrayKokkos node_extensive_mass(mesh.num_nodes); diff --git a/single-node-refactor/src/Solvers/SGH_solver_rz/src/properties_rz.cpp b/single-node-refactor/src/Solvers/SGH_solver_rz/src/properties_rz.cpp index de820bc4c..c67215b6c 100644 --- a/single-node-refactor/src/Solvers/SGH_solver_rz/src/properties_rz.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver_rz/src/properties_rz.cpp @@ -120,9 +120,6 @@ void SGHRZ::update_state_rz( // Note, with the SGH method, they are equal size_t mat_point_lid = mat_elem_lid; - // for this method, gauss point is equal to elem_gid - size_t gauss_gid = elem_gid; - // --- Pressure --- Materials.MaterialFunctions(mat_id).calc_pressure( MaterialPoints_pres, @@ -241,9 +238,6 @@ void SGHRZ::update_state_rz( // Note, with the SGH method, they are equal size_t mat_point_lid = mat_elem_lid; - // for this method, gauss point is equal to elem_gid - size_t gauss_gid = elem_gid; - // --- Element erosion model --- Materials.MaterialFunctions(mat_id).erode( MaterialPoints_eroded, diff --git a/single-node-refactor/src/Solvers/SGH_solver_rz/src/sgh_execute_rz.cpp b/single-node-refactor/src/Solvers/SGH_solver_rz/src/sgh_execute_rz.cpp index 7507d9bf2..44c41d7d7 100644 --- a/single-node-refactor/src/Solvers/SGH_solver_rz/src/sgh_execute_rz.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver_rz/src/sgh_execute_rz.cpp @@ -58,13 +58,13 @@ void SGHRZ::execute(SimulationParameters_t& SimulationParamaters, std::cout << "In execute function in SGHRZ solver" << std::endl; double fuzz = SimulationParamaters.dynamic_options.fuzz; - double tiny = SimulationParamaters.dynamic_options.tiny; + // double tiny = SimulationParamaters.dynamic_options.tiny; double small = SimulationParamaters.dynamic_options.small; double graphics_dt_ival = SimulationParamaters.output_options.graphics_time_step; int graphics_cyc_ival = SimulationParamaters.output_options.graphics_iteration_step; - double time_initial = SimulationParamaters.dynamic_options.time_initial; + // double time_initial = SimulationParamaters.dynamic_options.time_initial; double time_final = SimulationParamaters.dynamic_options.time_final; double dt_min = SimulationParamaters.dynamic_options.dt_min; double dt_max = SimulationParamaters.dynamic_options.dt_max; @@ -81,19 +81,13 @@ void SGHRZ::execute(SimulationParameters_t& SimulationParamaters, // Create mesh writer MeshWriter mesh_writer; // Note: Pull to driver after refactoring evolution - // --- num vars ---- - + // --- graphics vars ---- CArray graphics_times = CArray(20000); graphics_times(0) = 0.0; double graphics_time = 0.0; // the times for writing graphics dump - size_t graphics_id = 0; double cached_pregraphics_dt = dt_start; - - // printf("Writing outputs to file at %f \n", time_value); - // mesh_writer.write_mesh(mesh, MaterialPoints, node, corner, SimulationParamaters, time_value, graphics_times); - CArrayKokkos node_extensive_mass(mesh.num_nodes); // calculate the extensive node mass, its key to 2D diff --git a/single-node-refactor/src/common/include/mesh_io.h b/single-node-refactor/src/common/include/mesh_io.h index a47bbdf17..7a71eea6e 100644 --- a/single-node-refactor/src/common/include/mesh_io.h +++ b/single-node-refactor/src/common/include/mesh_io.h @@ -845,16 +845,16 @@ class MeshBuilder const double dz = lz/((double)num_zones_k); // len/(num_zones_k) const int num_elems = num_elems_i*num_elems_j*num_elems_k; - const int num_zones = num_zones_i*num_zones_j*num_zones_k; // accounts for Pn + // const int num_zones = num_zones_i*num_zones_j*num_zones_k; // accounts for Pn std::vector origin(num_dim); // SimulationParamaters.mesh_input.origin.update_host(); for (int i = 0; i < num_dim; i++) { origin[i] = SimulationParamaters.mesh_input.origin[i]; } // --- 3D parameters --- - const int num_faces_in_zone = 6; // number of faces in zone - const int num_points_in_zone = 8; // number of points in zone - const int num_points_in_face = 4; // number of points in a face + // const int num_faces_in_zone = 6; // number of faces in zone + // const int num_points_in_zone = 8; // number of points in zone + // const int num_points_in_face = 4; // number of points in a face // p_order = 1, 2, 3, 4, 5 // num_nodes = 2, 3, 4, 5, 6 @@ -863,13 +863,11 @@ class MeshBuilder // --- elem --- - int elem_id = 0; auto elem_coords = CArray (num_elems, num_dim); auto elem_point_list = CArray (num_elems, num_points_in_elem); // --- point --- - int point_id = 0; int num_points = num_points_i * num_points_j * num_points_k; auto pt_coords = CArray (num_points, num_dim); @@ -1695,7 +1693,7 @@ class MeshWriter int Pn_order = mesh.Pn; int order[3] = { Pn_order, Pn_order, Pn_order }; - const int num_1D_points = Pn_order+1; + // const int num_1D_points = Pn_order+1; // write all global point numbers for this elem for (size_t elem_gid = 0; elem_gid < mesh.num_elems; elem_gid++) { diff --git a/single-node-refactor/src/common/src/region_fill.cpp b/single-node-refactor/src/common/src/region_fill.cpp index 4df0abbe2..b9f01bfbe 100644 --- a/single-node-refactor/src/common/src/region_fill.cpp +++ b/single-node-refactor/src/common/src/region_fill.cpp @@ -84,16 +84,11 @@ void user_voxel_init(DCArrayKokkos& elem_values, } // end if size_t i; // used for writing information to file - size_t point_id; // the global id for the point - size_t elem_id; // the global id for the elem - size_t this_point; // a local id for a point in a elem (0:7 for a Hexahedral elem) size_t num_points_i; size_t num_points_j; size_t num_points_k; - size_t num_dims = 3; - std::string token; bool found = false; @@ -129,7 +124,6 @@ void user_voxel_init(DCArrayKokkos& elem_values, found = false; - int num_points = num_points_i * num_points_j * num_points_k; CArray pt_coords_x(num_points_i); CArray pt_coords_y(num_points_j); CArray pt_coords_z(num_points_k); diff --git a/single-node-refactor/src/solver.cpp b/single-node-refactor/src/solver.cpp index d028970e5..341e6dedc 100644 --- a/single-node-refactor/src/solver.cpp +++ b/single-node-refactor/src/solver.cpp @@ -81,6 +81,6 @@ double Solver::CPU_Time() ///////////////////////////////////////////////////////////////////////////// void Solver::init_clock() { - double current_cpu = 0; + // double current_cpu = 0; initial_CPU_time = CPU_Time(); } From a26fdf67c93577962fadbd1e803d64d506dbbe7b Mon Sep 17 00:00:00 2001 From: Jacob Moore Date: Wed, 28 Aug 2024 14:11:30 -0500 Subject: [PATCH 215/233] ENH: Pull RZ functions from 3D solver --- .../SGH_solver_3D/include/sgh_solver_3D.h | 12 --- .../Solvers/SGH_solver_3D/src/sgh_execute.cpp | 84 +------------------ .../SGH_solver_rz/src/sgh_execute_rz.cpp | 2 +- .../src/common/include/mesh_io.h | 5 +- 4 files changed, 6 insertions(+), 97 deletions(-) diff --git a/single-node-refactor/src/Solvers/SGH_solver_3D/include/sgh_solver_3D.h b/single-node-refactor/src/Solvers/SGH_solver_3D/include/sgh_solver_3D.h index 8240e6d98..93d9f4e79 100644 --- a/single-node-refactor/src/Solvers/SGH_solver_3D/include/sgh_solver_3D.h +++ b/single-node-refactor/src/Solvers/SGH_solver_3D/include/sgh_solver_3D.h @@ -329,18 +329,6 @@ class SGH3D : public Solver const double rk_alpha); }; -void calc_extensive_node_mass(const CArrayKokkos& node_extensive_mass, - const DCArrayKokkos& node_coords, - const DCArrayKokkos& node_mass, - const double num_dims, - const double num_nodes); - -void calc_node_areal_mass(const Mesh_t& mesh, - const DCArrayKokkos& node_coords, - const DCArrayKokkos& node_mass, - CArrayKokkos node_extensive_mass, - double tiny); - double sum_domain_internal_energy(const DCArrayKokkos& MaterialPoints_mass, const DCArrayKokkos& MaterialPoints_sie, const size_t num_mat_points); diff --git a/single-node-refactor/src/Solvers/SGH_solver_3D/src/sgh_execute.cpp b/single-node-refactor/src/Solvers/SGH_solver_3D/src/sgh_execute.cpp index 48d15cd65..b375ee883 100644 --- a/single-node-refactor/src/Solvers/SGH_solver_3D/src/sgh_execute.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver_3D/src/sgh_execute.cpp @@ -58,7 +58,7 @@ void SGH3D::execute(SimulationParameters_t& SimulationParamaters, std::cout << "In execute function in SGH3D solver" << std::endl; double fuzz = SimulationParamaters.dynamic_options.fuzz; - double tiny = SimulationParamaters.dynamic_options.tiny; + // double tiny = SimulationParamaters.dynamic_options.tiny; double small = SimulationParamaters.dynamic_options.small; double graphics_dt_ival = SimulationParamaters.output_options.graphics_time_step; @@ -86,8 +86,6 @@ void SGH3D::execute(SimulationParameters_t& SimulationParamaters, graphics_times(0) = 0.0; double graphics_time = 0.0; // the times for writing graphics dump - CArrayKokkos node_extensive_mass(mesh.num_nodes); - std::cout << "Applying initial boundary conditions" << std::endl; boundary_velocity(mesh, BoundaryConditions, State.node.vel, time_value); // Time value = 0.0; @@ -98,13 +96,6 @@ void SGH3D::execute(SimulationParameters_t& SimulationParamaters, double cached_pregraphics_dt = fuzz; - // calculate the extensive node mass, its key to 2D - calc_extensive_node_mass(node_extensive_mass, - State.node.coords, - State.node.mass, - mesh.num_dims, - mesh.num_nodes); - // the number of materials specified by the user input const size_t num_mats = Materials.num_mats; @@ -412,7 +403,7 @@ void SGH3D::execute(SimulationParameters_t& SimulationParamaters, printf("Time=0: KE = %f, IE = %f, TE = %f \n", KE_t0, IE_t0, TE_t0); printf("Time=End: KE = %f, IE = %f, TE = %f \n", KE_tend, IE_tend, TE_tend); - printf("total energy change = %e \n\n", TE_tend - TE_t0); + printf("total energy change = %.15e \n\n", TE_tend - TE_t0); // domain mass for each material (they are at material points) double mass_domain_all_mats_tend = 0.0; @@ -515,69 +506,6 @@ double max_Eigen3D(const ViewCArrayKokkos tensor) return abs_max_val; } -///////////////////////////////////////////////////////////////////////////// -/// -/// \fn max_Eigen2D -/// -/// \brief Get the maximum eigenvalues of a given tensor -/// -/// \param Input tensor -/// -///////////////////////////////////////////////////////////////////////////// -KOKKOS_FUNCTION -double max_Eigen2D(const ViewCArrayKokkos tensor) -{ - // Compute largest eigenvalue of a 2x2 tensor - // Algorithm only works if tensor is symmetric - size_t dim = tensor.dims(0); - double trace, det; - - trace = tensor(0, 0) + tensor(1, 1); - det = tensor(0, 0) * tensor(1, 1) - tensor(0, 1) * tensor(1, 0); - - double eig1, eig2; - - eig1 = (trace / 2.) + sqrt(0.25 * trace * trace - det); - eig2 = (trace / 2.) - sqrt(0.25 * trace * trace - det); - - double abs_max_val = fmax(fabs(eig1), fabs(eig2)); - return abs_max_val; -} // end 2D max eignen value - -///////////////////////////////////////////////////////////////////////////// -/// -/// \fn calc_extensive_node_mass -/// -/// \brief -/// -/// -/// -/// \param -/// \param -/// \param -/// -/// \return -/// -///////////////////////////////////////////////////////////////////////////// -void calc_extensive_node_mass(const CArrayKokkos& node_extensive_mass, - const DCArrayKokkos& node_coords, - const DCArrayKokkos& node_mass, - double num_dims, - double num_nodes) -{ - // save the nodal mass - FOR_ALL(node_gid, 0, num_nodes, { - double radius = 1.0; - - if (num_dims == 2) { - radius = node_coords(1, node_gid, 1); - } - - node_extensive_mass(node_gid) = node_mass(node_gid) * radius; - }); // end parallel for -} // end function - // a function to tally the internal energy double sum_domain_internal_energy(const DCArrayKokkos& MaterialPoints_mass, const DCArrayKokkos& MaterialPoints_sie, @@ -627,12 +555,8 @@ double sum_domain_kinetic_energy(const Mesh_t& mesh, ke += node_vel(1, node_gid, dim) * node_vel(1, node_gid, dim); // 1/2 at end } // end for - if (mesh.num_dims == 2) { - KE_loc_sum += node_mass(node_gid) * node_coords(1, node_gid, 1) * ke; - } - else{ - KE_loc_sum += node_mass(node_gid) * ke; - } + KE_loc_sum += node_mass(node_gid) * ke; + }, KE_sum); Kokkos::fence(); diff --git a/single-node-refactor/src/Solvers/SGH_solver_rz/src/sgh_execute_rz.cpp b/single-node-refactor/src/Solvers/SGH_solver_rz/src/sgh_execute_rz.cpp index 44c41d7d7..c71c8001f 100644 --- a/single-node-refactor/src/Solvers/SGH_solver_rz/src/sgh_execute_rz.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver_rz/src/sgh_execute_rz.cpp @@ -58,7 +58,7 @@ void SGHRZ::execute(SimulationParameters_t& SimulationParamaters, std::cout << "In execute function in SGHRZ solver" << std::endl; double fuzz = SimulationParamaters.dynamic_options.fuzz; - // double tiny = SimulationParamaters.dynamic_options.tiny; + double tiny = SimulationParamaters.dynamic_options.tiny; double small = SimulationParamaters.dynamic_options.small; double graphics_dt_ival = SimulationParamaters.output_options.graphics_time_step; diff --git a/single-node-refactor/src/common/include/mesh_io.h b/single-node-refactor/src/common/include/mesh_io.h index 7a71eea6e..b07107116 100644 --- a/single-node-refactor/src/common/include/mesh_io.h +++ b/single-node-refactor/src/common/include/mesh_io.h @@ -153,12 +153,9 @@ class MeshReader // Check mesh file extension // and read based on extension read_ensight_mesh(mesh, State.GaussPoints, State.node, State.corner, num_dims, rk_num_bins); + } - // void write_mesh(Mesh_t& mesh, - // State_t& State, - // SimulationParameters_t& SimulationParamaters, - ///////////////////////////////////////////////////////////////////////////// /// /// \fn read_ensight_mesh From fcc48624c7d2110887133f98c199c3b36b96e95c Mon Sep 17 00:00:00 2001 From: Jacob Moore Date: Wed, 28 Aug 2024 14:15:29 -0500 Subject: [PATCH 216/233] ENH: Add basic abaqus mesh reader --- .../src/common/include/mesh_io.h | 221 +++++++++++++++++- 1 file changed, 216 insertions(+), 5 deletions(-) diff --git a/single-node-refactor/src/common/include/mesh_io.h b/single-node-refactor/src/common/include/mesh_io.h index b07107116..998216022 100644 --- a/single-node-refactor/src/common/include/mesh_io.h +++ b/single-node-refactor/src/common/include/mesh_io.h @@ -44,6 +44,10 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include #include #include +#include +#include +#include +#include ///////////////////////////////////////////////////////////////////////////// /// @@ -104,6 +108,18 @@ int get_id_device(int i, int j, int k, int num_i, int num_j) ///////////////////////////////////////////////////////////////////////////// class MeshReader { +private: + // Handy structs for parsing input meshes + struct Node { + int id; + double x, y, z; + }; + + struct Element { + int id; + std::vector connectivity; + }; + public: char* mesh_file_ = NULL; @@ -146,14 +162,37 @@ class MeshReader int rk_num_bins) { if (mesh_file_ == NULL) { - printf("No mesh given\n"); - exit(0); + throw std::runtime_error("**** No mesh path given for read_mesh ****"); } // Check mesh file extension // and read based on extension - read_ensight_mesh(mesh, State.GaussPoints, State.node, State.corner, num_dims, rk_num_bins); - + std::string filePathStr(mesh_file_); + std::string extension; + + size_t pos = filePathStr.rfind('.'); + if (pos != std::string::npos) { + extension = filePathStr.substr(pos + 1); + } else { + extension = ""; + } + + std::cout << "File extension is: " << extension << std::endl; + + if(extension == "geo"){ // Ensight meshfile extension + read_ensight_mesh(mesh, State.GaussPoints, State.node, State.corner, num_dims, rk_num_bins); + } + else if(extension == "inp"){ // Abaqus meshfile extension + read_Abaqus_mesh(mesh, State, num_dims, rk_num_bins); + } + else if(extension == "vtk"){ // vtk file format + throw std::runtime_error("**** VTK mesh reader not yet implemented ****"); + // read_VTK_mesh(mesh, State, num_dims, rk_num_bins); + } + else{ + throw std::runtime_error("**** Mesh file extension not understood ****"); + } + } ///////////////////////////////////////////////////////////////////////////// @@ -309,7 +348,179 @@ class MeshReader mesh.build_connectivity(); return; - } + } // end read ensight mesh + + ///////////////////////////////////////////////////////////////////////////// + /// + /// \fn read_ensight_mesh + /// + /// \brief Read .geo mesh file + /// + /// \param Simulation mesh + /// \param Simulation state + /// \param Node state struct + /// \param Number of dimensions + /// \param Number of RK bins + /// + ///////////////////////////////////////////////////////////////////////////// + void read_Abaqus_mesh(Mesh_t& mesh, + State_t& State, + int num_dims, + int rk_num_bins) + { + + std::cout<<"Reading abaqus input file for mesh"< nodes; + std::vector elements; + + std::string line; + bool readingNodes = false; + bool readingElements = false; + + int nodeCount = 0; + int elemCount = 0; + + while (std::getline(inputFile, line)) { + if (line.find("*Node") != std::string::npos) { + readingNodes = true; + std::cout<<"Found *Node"<> node.id && std::getline(iss, token, ',') && iss >> node.x && + std::getline(iss, token, ',') && iss >> node.y && + std::getline(iss, token, ',') && iss >> node.z)) { + std::cerr << "Failed to parse line: " << line << std::endl; + continue; // Skip this line if parsing failed + } + nodes.push_back(node); + } + + if (line.find("*Element") != std::string::npos) { + readingElements = true; + std::cout<<"Found *Element*"<> element.id)){ + std::cout << "Failed to parse line: " << line << std::endl; + continue; // Skip this line if parsing failed + } + + while ((std::getline(iss, token, ','))) { + // Now extract the integer, ignoring any trailing whitespace + int val; + iss >> val; + element.connectivity.push_back(val); + } + + // Convert from abaqus to IJK mesh + int convert_abq_to_ijk[8]; + convert_abq_to_ijk[0] = 0; + convert_abq_to_ijk[1] = 1; + convert_abq_to_ijk[2] = 3; + convert_abq_to_ijk[3] = 2; + convert_abq_to_ijk[4] = 4; + convert_abq_to_ijk[5] = 5; + convert_abq_to_ijk[6] = 7; + convert_abq_to_ijk[7] = 6; + + int tmp_ijk_indx[8]; + + for (int node_lid = 0; node_lid < 8; node_lid++) { + tmp_ijk_indx[node_lid] = element.connectivity[convert_abq_to_ijk[node_lid]]; + } + + for (int node_lid = 0; node_lid < 8; node_lid++){ + element.connectivity[node_lid] = tmp_ijk_indx[node_lid]; + } + + elements.push_back(element); + } + } + + inputFile.close(); + + size_t num_nodes = nodes.size(); + + printf("Number if nodes read in %lu\n", num_nodes); + + // initialize node variables + mesh.initialize_nodes(num_nodes); + State.node.initialize(rk_num_bins, num_nodes, num_dims); + + + // Copy nodes to mesh + for(int node_gid = 0; node_gid < num_nodes; node_gid++){ + State.node.coords.host(0, node_gid, 0) = nodes[node_gid].x; + State.node.coords.host(0, node_gid, 1) = nodes[node_gid].y; + State.node.coords.host(0, node_gid, 2) = nodes[node_gid].z; + } + + // save the node coords to the current RK value + for (size_t node_gid = 0; node_gid < num_nodes; node_gid++) { + for (int rk = 1; rk < rk_num_bins; rk++) { + for (int dim = 0; dim < num_dims; dim++) { + State.node.coords.host(rk, node_gid, dim) = State.node.coords.host(0, node_gid, dim); + } // end for dim + } // end for rk + } // end parallel for + + // Update device nodal positions + State.node.coords.update_device(); + + + // --- read in the elements in the mesh --- + size_t num_elem = elements.size(); + printf("Number of elements read in %lu\n", num_elem); + + // initialize elem variables + mesh.initialize_elems(num_elem, num_dims); + State.GaussPoints.initialize(rk_num_bins, num_elem, 3); // always 3D here, even for 2D + + + // for each cell read the list of associated nodes + for (int elem_gid = 0; elem_gid < num_elem; elem_gid++) { + for (int node_lid = 0; node_lid < 8; node_lid++) { + mesh.nodes_in_elem.host(elem_gid, node_lid) = elements[elem_gid].connectivity[node_lid]; + + // shift to start node index space at 0 + mesh.nodes_in_elem.host(elem_gid, node_lid) -= 1; + } + } + + // update device side + mesh.nodes_in_elem.update_device(); + + // initialize corner variables + int num_corners = num_elem * mesh.num_nodes_in_elem; + mesh.initialize_corners(num_corners); + State.corner.initialize(num_corners, num_dims); + + // Build connectivity + mesh.build_connectivity(); + } // end read abaqus mesh }; ///////////////////////////////////////////////////////////////////////////// From 405bc33de8dd8bc5db9beaa16fac148f32bc2448 Mon Sep 17 00:00:00 2001 From: Jacob Moore Date: Wed, 28 Aug 2024 14:39:04 -0500 Subject: [PATCH 217/233] ENH: Adding Abaqus mesh reader and testing --- .../standard_inputs/Abaqus_read.yaml | 134 ++ .../standard_inputs/meshes/abaqus.inp | 1559 +++++++++++++++++ .../state/mat_pt_state_t_1.0000e+00.txt | 642 +++++++ .../regression_tests/test_refactor.py | 4 +- .../src/common/include/mesh_io.h | 11 +- 5 files changed, 2345 insertions(+), 5 deletions(-) create mode 100644 single-node-refactor/regression_tests/standard_inputs/Abaqus_read.yaml create mode 100644 single-node-refactor/regression_tests/standard_inputs/meshes/abaqus.inp create mode 100644 single-node-refactor/regression_tests/standard_results/Abaqus_read/state/mat_pt_state_t_1.0000e+00.txt diff --git a/single-node-refactor/regression_tests/standard_inputs/Abaqus_read.yaml b/single-node-refactor/regression_tests/standard_inputs/Abaqus_read.yaml new file mode 100644 index 000000000..b9d527322 --- /dev/null +++ b/single-node-refactor/regression_tests/standard_inputs/Abaqus_read.yaml @@ -0,0 +1,134 @@ +# num_dims: 3 + +dynamic_options: + time_final: 1.0 + dt_min: 1.e-8 + dt_max: 1.e-2 + dt_start: 1.e-5 + cycle_stop: 50000 + +mesh_options: + source: file + file_path: /var/tmp/repos/Fierro/single-node-refactor/regression_tests/standard_inputs/meshes/abaqus.inp + num_dims: 3 + +# mesh_options: +# source: generate +# num_dims: 3 +# type: box +# origin: [-4.0,-4.0, 0.0] +# length: [8.0, 8.0, 10.0] +# num_elems: [20, 20, 10] + +output_options: + timer_output_level: thorough + output_file_format: state + graphics_time_step: 1.0 + # graphics_iteration_step: 10 + +solver_options: + - solver: + method: SGH3D + # solver_vars: + # - blah + # - blah + # - blah + +boundary_conditions: + # Tag X plane + - boundary_condition: + solver: SGH3D + geometry: x_plane + direction: x_dir + value: -4.0 + type: reflected_velocity + + - boundary_condition: + solver: SGH3D + geometry: x_plane + direction: x_dir + value: 4.0 + type: reflected_velocity + + + # Tag Y plane + - boundary_condition: + solver: SGH3D + geometry: y_plane + direction: y_dir + value: -4.0 + type: reflected_velocity + + - boundary_condition: + solver: SGH3D + geometry: y_plane + direction: y_dir + value: 4.0 + type: reflected_velocity + + # Tag z plane + - boundary_condition: + solver: SGH3D + geometry: z_plane + direction: z_dir + value: 0.0 + type: reflected_velocity + + + +materials: + - material: + id: 0 + eos_model_type: decoupled + eos_model: gamma_law_gas + # strength_model: none + q1: 1.0 + q2: 1.333 + q1ex: 1.0 + q2ex: 1.333 + eos_global_vars: + - 1.666666666666667 + - 1.0E-14 + - 1.0 + +regions: + - fill_volume: + type: global + material_id: 0 + den: 1.0 + sie: 1.e-10 + velocity: cartesian + u: 0.0 + v: 0.0 + w: 0.0 + + # energy source initial conditions + # - fill_volume: + # type: sphere + # origin: [0.0, 0.0, 0.0] + # radius1: 0.0 + # radius2: 1.0 + # material_id: 0 + # den: 1.0 + # # ie: 0.25833839995946534 + # sie: 61.67375002 # 963.652344 + # velocity: cartesian + # u: 0.0 + # v: 0.0 + # w: 0.0 + + - fill_volume: + type: box + x1: -4.0 + x2: 4.0 + y1: -4.0 + y2: 4.0 + z1: 0.0 + z2: 1.0 + material_id: 0 + den: 1.0 + sie: 61.67375002 + velocity: cartesian + u: 0.0 + v: 0.0 + w: 0.0 \ No newline at end of file diff --git a/single-node-refactor/regression_tests/standard_inputs/meshes/abaqus.inp b/single-node-refactor/regression_tests/standard_inputs/meshes/abaqus.inp new file mode 100644 index 000000000..15dacc294 --- /dev/null +++ b/single-node-refactor/regression_tests/standard_inputs/meshes/abaqus.inp @@ -0,0 +1,1559 @@ +*Heading + test +** Job name: Job-1 Model name: Model-1 +** Generated by: Abaqus/CAE 2023 +*Preprint, echo=NO, model=NO, history=NO, contact=NO +** +** PARTS +** +*Part, name=Part-1 +*Node + 1, -4., -4., 10. + 2, -4., -3., 10. + 3, -4., -2., 10. + 4, -4., -1., 10. + 5, -4., 0., 10. + 6, -4., 1., 10. + 7, -4., 2., 10. + 8, -4., 3., 10. + 9, -4., 4., 10. + 10, -4., -4., 9. + 11, -4., -3., 9. + 12, -4., -2., 9. + 13, -4., -1., 9. + 14, -4., 0., 9. + 15, -4., 1., 9. + 16, -4., 2., 9. + 17, -4., 3., 9. + 18, -4., 4., 9. + 19, -4., -4., 8. + 20, -4., -3., 8. + 21, -4., -2., 8. + 22, -4., -1., 8. + 23, -4., 0., 8. + 24, -4., 1., 8. + 25, -4., 2., 8. + 26, -4., 3., 8. + 27, -4., 4., 8. + 28, -4., -4., 7. + 29, -4., -3., 7. + 30, -4., -2., 7. + 31, -4., -1., 7. + 32, -4., 0., 7. + 33, -4., 1., 7. + 34, -4., 2., 7. + 35, -4., 3., 7. + 36, -4., 4., 7. + 37, -4., -4., 6. + 38, -4., -3., 6. + 39, -4., -2., 6. + 40, -4., -1., 6. + 41, -4., 0., 6. + 42, -4., 1., 6. + 43, -4., 2., 6. + 44, -4., 3., 6. + 45, -4., 4., 6. + 46, -4., -4., 5. + 47, -4., -3., 5. + 48, -4., -2., 5. + 49, -4., -1., 5. + 50, -4., 0., 5. + 51, -4., 1., 5. + 52, -4., 2., 5. + 53, -4., 3., 5. + 54, -4., 4., 5. + 55, -4., -4., 4. + 56, -4., -3., 4. + 57, -4., -2., 4. + 58, -4., -1., 4. + 59, -4., 0., 4. + 60, -4., 1., 4. + 61, -4., 2., 4. + 62, -4., 3., 4. + 63, -4., 4., 4. + 64, -4., -4., 3. + 65, -4., -3., 3. + 66, -4., -2., 3. + 67, -4., -1., 3. + 68, -4., 0., 3. + 69, -4., 1., 3. + 70, -4., 2., 3. + 71, -4., 3., 3. + 72, -4., 4., 3. + 73, -4., -4., 2. + 74, -4., -3., 2. + 75, -4., -2., 2. + 76, -4., -1., 2. + 77, -4., 0., 2. + 78, -4., 1., 2. + 79, -4., 2., 2. + 80, -4., 3., 2. + 81, -4., 4., 2. + 82, -4., -4., 1. + 83, -4., -3., 1. + 84, -4., -2., 1. + 85, -4., -1., 1. + 86, -4., 0., 1. + 87, -4., 1., 1. + 88, -4., 2., 1. + 89, -4., 3., 1. + 90, -4., 4., 1. + 91, -4., -4., 0. + 92, -4., -3., 0. + 93, -4., -2., 0. + 94, -4., -1., 0. + 95, -4., 0., 0. + 96, -4., 1., 0. + 97, -4., 2., 0. + 98, -4., 3., 0. + 99, -4., 4., 0. + 100, -3., -4., 10. + 101, -3., -3., 10. + 102, -3., -2., 10. + 103, -3., -1., 10. + 104, -3., 0., 10. + 105, -3., 1., 10. + 106, -3., 2., 10. + 107, -3., 3., 10. + 108, -3., 4., 10. + 109, -3., -4., 9. + 110, -3., -3., 9. + 111, -3., -2., 9. + 112, -3., -1., 9. + 113, -3., 0., 9. + 114, -3., 1., 9. + 115, -3., 2., 9. + 116, -3., 3., 9. + 117, -3., 4., 9. + 118, -3., -4., 8. + 119, -3., -3., 8. + 120, -3., -2., 8. + 121, -3., -1., 8. + 122, -3., 0., 8. + 123, -3., 1., 8. + 124, -3., 2., 8. + 125, -3., 3., 8. + 126, -3., 4., 8. + 127, -3., -4., 7. + 128, -3., -3., 7. + 129, -3., -2., 7. + 130, -3., -1., 7. + 131, -3., 0., 7. + 132, -3., 1., 7. + 133, -3., 2., 7. + 134, -3., 3., 7. + 135, -3., 4., 7. + 136, -3., -4., 6. + 137, -3., -3., 6. + 138, -3., -2., 6. + 139, -3., -1., 6. + 140, -3., 0., 6. + 141, -3., 1., 6. + 142, -3., 2., 6. + 143, -3., 3., 6. + 144, -3., 4., 6. + 145, -3., -4., 5. + 146, -3., -3., 5. + 147, -3., -2., 5. + 148, -3., -1., 5. + 149, -3., 0., 5. + 150, -3., 1., 5. + 151, -3., 2., 5. + 152, -3., 3., 5. + 153, -3., 4., 5. + 154, -3., -4., 4. + 155, -3., -3., 4. + 156, -3., -2., 4. + 157, -3., -1., 4. + 158, -3., 0., 4. + 159, -3., 1., 4. + 160, -3., 2., 4. + 161, -3., 3., 4. + 162, -3., 4., 4. + 163, -3., -4., 3. + 164, -3., -3., 3. + 165, -3., -2., 3. + 166, -3., -1., 3. + 167, -3., 0., 3. + 168, -3., 1., 3. + 169, -3., 2., 3. + 170, -3., 3., 3. + 171, -3., 4., 3. + 172, -3., -4., 2. + 173, -3., -3., 2. + 174, -3., -2., 2. + 175, -3., -1., 2. + 176, -3., 0., 2. + 177, -3., 1., 2. + 178, -3., 2., 2. + 179, -3., 3., 2. + 180, -3., 4., 2. + 181, -3., -4., 1. + 182, -3., -3., 1. + 183, -3., -2., 1. + 184, -3., -1., 1. + 185, -3., 0., 1. + 186, -3., 1., 1. + 187, -3., 2., 1. + 188, -3., 3., 1. + 189, -3., 4., 1. + 190, -3., -4., 0. + 191, -3., -3., 0. + 192, -3., -2., 0. + 193, -3., -1., 0. + 194, -3., 0., 0. + 195, -3., 1., 0. + 196, -3., 2., 0. + 197, -3., 3., 0. + 198, -3., 4., 0. + 199, -2., -4., 10. + 200, -2., -3., 10. + 201, -2., -2., 10. + 202, -2., -1., 10. + 203, -2., 0., 10. + 204, -2., 1., 10. + 205, -2., 2., 10. + 206, -2., 3., 10. + 207, -2., 4., 10. + 208, -2., -4., 9. + 209, -2., -3., 9. + 210, -2., -2., 9. + 211, -2., -1., 9. + 212, -2., 0., 9. + 213, -2., 1., 9. + 214, -2., 2., 9. + 215, -2., 3., 9. + 216, -2., 4., 9. + 217, -2., -4., 8. + 218, -2., -3., 8. + 219, -2., -2., 8. + 220, -2., -1., 8. + 221, -2., 0., 8. + 222, -2., 1., 8. + 223, -2., 2., 8. + 224, -2., 3., 8. + 225, -2., 4., 8. + 226, -2., -4., 7. + 227, -2., -3., 7. + 228, -2., -2., 7. + 229, -2., -1., 7. + 230, -2., 0., 7. + 231, -2., 1., 7. + 232, -2., 2., 7. + 233, -2., 3., 7. + 234, -2., 4., 7. + 235, -2., -4., 6. + 236, -2., -3., 6. + 237, -2., -2., 6. + 238, -2., -1., 6. + 239, -2., 0., 6. + 240, -2., 1., 6. + 241, -2., 2., 6. + 242, -2., 3., 6. + 243, -2., 4., 6. + 244, -2., -4., 5. + 245, -2., -3., 5. + 246, -2., -2., 5. + 247, -2., -1., 5. + 248, -2., 0., 5. + 249, -2., 1., 5. + 250, -2., 2., 5. + 251, -2., 3., 5. + 252, -2., 4., 5. + 253, -2., -4., 4. + 254, -2., -3., 4. + 255, -2., -2., 4. + 256, -2., -1., 4. + 257, -2., 0., 4. + 258, -2., 1., 4. + 259, -2., 2., 4. + 260, -2., 3., 4. + 261, -2., 4., 4. + 262, -2., -4., 3. + 263, -2., -3., 3. + 264, -2., -2., 3. + 265, -2., -1., 3. + 266, -2., 0., 3. + 267, -2., 1., 3. + 268, -2., 2., 3. + 269, -2., 3., 3. + 270, -2., 4., 3. + 271, -2., -4., 2. + 272, -2., -3., 2. + 273, -2., -2., 2. + 274, -2., -1., 2. + 275, -2., 0., 2. + 276, -2., 1., 2. + 277, -2., 2., 2. + 278, -2., 3., 2. + 279, -2., 4., 2. + 280, -2., -4., 1. + 281, -2., -3., 1. + 282, -2., -2., 1. + 283, -2., -1., 1. + 284, -2., 0., 1. + 285, -2., 1., 1. + 286, -2., 2., 1. + 287, -2., 3., 1. + 288, -2., 4., 1. + 289, -2., -4., 0. + 290, -2., -3., 0. + 291, -2., -2., 0. + 292, -2., -1., 0. + 293, -2., 0., 0. + 294, -2., 1., 0. + 295, -2., 2., 0. + 296, -2., 3., 0. + 297, -2., 4., 0. + 298, -1., -4., 10. + 299, -1., -3., 10. + 300, -1., -2., 10. + 301, -1., -1., 10. + 302, -1., 0., 10. + 303, -1., 1., 10. + 304, -1., 2., 10. + 305, -1., 3., 10. + 306, -1., 4., 10. + 307, -1., -4., 9. + 308, -1., -3., 9. + 309, -1., -2., 9. + 310, -1., -1., 9. + 311, -1., 0., 9. + 312, -1., 1., 9. + 313, -1., 2., 9. + 314, -1., 3., 9. + 315, -1., 4., 9. + 316, -1., -4., 8. + 317, -1., -3., 8. + 318, -1., -2., 8. + 319, -1., -1., 8. + 320, -1., 0., 8. + 321, -1., 1., 8. + 322, -1., 2., 8. + 323, -1., 3., 8. + 324, -1., 4., 8. + 325, -1., -4., 7. + 326, -1., -3., 7. + 327, -1., -2., 7. + 328, -1., -1., 7. + 329, -1., 0., 7. + 330, -1., 1., 7. + 331, -1., 2., 7. + 332, -1., 3., 7. + 333, -1., 4., 7. + 334, -1., -4., 6. + 335, -1., -3., 6. + 336, -1., -2., 6. + 337, -1., -1., 6. + 338, -1., 0., 6. + 339, -1., 1., 6. + 340, -1., 2., 6. + 341, -1., 3., 6. + 342, -1., 4., 6. + 343, -1., -4., 5. + 344, -1., -3., 5. + 345, -1., -2., 5. + 346, -1., -1., 5. + 347, -1., 0., 5. + 348, -1., 1., 5. + 349, -1., 2., 5. + 350, -1., 3., 5. + 351, -1., 4., 5. + 352, -1., -4., 4. + 353, -1., -3., 4. + 354, -1., -2., 4. + 355, -1., -1., 4. + 356, -1., 0., 4. + 357, -1., 1., 4. + 358, -1., 2., 4. + 359, -1., 3., 4. + 360, -1., 4., 4. + 361, -1., -4., 3. + 362, -1., -3., 3. + 363, -1., -2., 3. + 364, -1., -1., 3. + 365, -1., 0., 3. + 366, -1., 1., 3. + 367, -1., 2., 3. + 368, -1., 3., 3. + 369, -1., 4., 3. + 370, -1., -4., 2. + 371, -1., -3., 2. + 372, -1., -2., 2. + 373, -1., -1., 2. + 374, -1., 0., 2. + 375, -1., 1., 2. + 376, -1., 2., 2. + 377, -1., 3., 2. + 378, -1., 4., 2. + 379, -1., -4., 1. + 380, -1., -3., 1. + 381, -1., -2., 1. + 382, -1., -1., 1. + 383, -1., 0., 1. + 384, -1., 1., 1. + 385, -1., 2., 1. + 386, -1., 3., 1. + 387, -1., 4., 1. + 388, -1., -4., 0. + 389, -1., -3., 0. + 390, -1., -2., 0. + 391, -1., -1., 0. + 392, -1., 0., 0. + 393, -1., 1., 0. + 394, -1., 2., 0. + 395, -1., 3., 0. + 396, -1., 4., 0. + 397, 0., -4., 10. + 398, 0., -3., 10. + 399, 0., -2., 10. + 400, 0., -1., 10. + 401, 0., 0., 10. + 402, 0., 1., 10. + 403, 0., 2., 10. + 404, 0., 3., 10. + 405, 0., 4., 10. + 406, 0., -4., 9. + 407, 0., -3., 9. + 408, 0., -2., 9. + 409, 0., -1., 9. + 410, 0., 0., 9. + 411, 0., 1., 9. + 412, 0., 2., 9. + 413, 0., 3., 9. + 414, 0., 4., 9. + 415, 0., -4., 8. + 416, 0., -3., 8. + 417, 0., -2., 8. + 418, 0., -1., 8. + 419, 0., 0., 8. + 420, 0., 1., 8. + 421, 0., 2., 8. + 422, 0., 3., 8. + 423, 0., 4., 8. + 424, 0., -4., 7. + 425, 0., -3., 7. + 426, 0., -2., 7. + 427, 0., -1., 7. + 428, 0., 0., 7. + 429, 0., 1., 7. + 430, 0., 2., 7. + 431, 0., 3., 7. + 432, 0., 4., 7. + 433, 0., -4., 6. + 434, 0., -3., 6. + 435, 0., -2., 6. + 436, 0., -1., 6. + 437, 0., 0., 6. + 438, 0., 1., 6. + 439, 0., 2., 6. + 440, 0., 3., 6. + 441, 0., 4., 6. + 442, 0., -4., 5. + 443, 0., -3., 5. + 444, 0., -2., 5. + 445, 0., -1., 5. + 446, 0., 0., 5. + 447, 0., 1., 5. + 448, 0., 2., 5. + 449, 0., 3., 5. + 450, 0., 4., 5. + 451, 0., -4., 4. + 452, 0., -3., 4. + 453, 0., -2., 4. + 454, 0., -1., 4. + 455, 0., 0., 4. + 456, 0., 1., 4. + 457, 0., 2., 4. + 458, 0., 3., 4. + 459, 0., 4., 4. + 460, 0., -4., 3. + 461, 0., -3., 3. + 462, 0., -2., 3. + 463, 0., -1., 3. + 464, 0., 0., 3. + 465, 0., 1., 3. + 466, 0., 2., 3. + 467, 0., 3., 3. + 468, 0., 4., 3. + 469, 0., -4., 2. + 470, 0., -3., 2. + 471, 0., -2., 2. + 472, 0., -1., 2. + 473, 0., 0., 2. + 474, 0., 1., 2. + 475, 0., 2., 2. + 476, 0., 3., 2. + 477, 0., 4., 2. + 478, 0., -4., 1. + 479, 0., -3., 1. + 480, 0., -2., 1. + 481, 0., -1., 1. + 482, 0., 0., 1. + 483, 0., 1., 1. + 484, 0., 2., 1. + 485, 0., 3., 1. + 486, 0., 4., 1. + 487, 0., -4., 0. + 488, 0., -3., 0. + 489, 0., -2., 0. + 490, 0., -1., 0. + 491, 0., 0., 0. + 492, 0., 1., 0. + 493, 0., 2., 0. + 494, 0., 3., 0. + 495, 0., 4., 0. + 496, 1., -4., 10. + 497, 1., -3., 10. + 498, 1., -2., 10. + 499, 1., -1., 10. + 500, 1., 0., 10. + 501, 1., 1., 10. + 502, 1., 2., 10. + 503, 1., 3., 10. + 504, 1., 4., 10. + 505, 1., -4., 9. + 506, 1., -3., 9. + 507, 1., -2., 9. + 508, 1., -1., 9. + 509, 1., 0., 9. + 510, 1., 1., 9. + 511, 1., 2., 9. + 512, 1., 3., 9. + 513, 1., 4., 9. + 514, 1., -4., 8. + 515, 1., -3., 8. + 516, 1., -2., 8. + 517, 1., -1., 8. + 518, 1., 0., 8. + 519, 1., 1., 8. + 520, 1., 2., 8. + 521, 1., 3., 8. + 522, 1., 4., 8. + 523, 1., -4., 7. + 524, 1., -3., 7. + 525, 1., -2., 7. + 526, 1., -1., 7. + 527, 1., 0., 7. + 528, 1., 1., 7. + 529, 1., 2., 7. + 530, 1., 3., 7. + 531, 1., 4., 7. + 532, 1., -4., 6. + 533, 1., -3., 6. + 534, 1., -2., 6. + 535, 1., -1., 6. + 536, 1., 0., 6. + 537, 1., 1., 6. + 538, 1., 2., 6. + 539, 1., 3., 6. + 540, 1., 4., 6. + 541, 1., -4., 5. + 542, 1., -3., 5. + 543, 1., -2., 5. + 544, 1., -1., 5. + 545, 1., 0., 5. + 546, 1., 1., 5. + 547, 1., 2., 5. + 548, 1., 3., 5. + 549, 1., 4., 5. + 550, 1., -4., 4. + 551, 1., -3., 4. + 552, 1., -2., 4. + 553, 1., -1., 4. + 554, 1., 0., 4. + 555, 1., 1., 4. + 556, 1., 2., 4. + 557, 1., 3., 4. + 558, 1., 4., 4. + 559, 1., -4., 3. + 560, 1., -3., 3. + 561, 1., -2., 3. + 562, 1., -1., 3. + 563, 1., 0., 3. + 564, 1., 1., 3. + 565, 1., 2., 3. + 566, 1., 3., 3. + 567, 1., 4., 3. + 568, 1., -4., 2. + 569, 1., -3., 2. + 570, 1., -2., 2. + 571, 1., -1., 2. + 572, 1., 0., 2. + 573, 1., 1., 2. + 574, 1., 2., 2. + 575, 1., 3., 2. + 576, 1., 4., 2. + 577, 1., -4., 1. + 578, 1., -3., 1. + 579, 1., -2., 1. + 580, 1., -1., 1. + 581, 1., 0., 1. + 582, 1., 1., 1. + 583, 1., 2., 1. + 584, 1., 3., 1. + 585, 1., 4., 1. + 586, 1., -4., 0. + 587, 1., -3., 0. + 588, 1., -2., 0. + 589, 1., -1., 0. + 590, 1., 0., 0. + 591, 1., 1., 0. + 592, 1., 2., 0. + 593, 1., 3., 0. + 594, 1., 4., 0. + 595, 2., -4., 10. + 596, 2., -3., 10. + 597, 2., -2., 10. + 598, 2., -1., 10. + 599, 2., 0., 10. + 600, 2., 1., 10. + 601, 2., 2., 10. + 602, 2., 3., 10. + 603, 2., 4., 10. + 604, 2., -4., 9. + 605, 2., -3., 9. + 606, 2., -2., 9. + 607, 2., -1., 9. + 608, 2., 0., 9. + 609, 2., 1., 9. + 610, 2., 2., 9. + 611, 2., 3., 9. + 612, 2., 4., 9. + 613, 2., -4., 8. + 614, 2., -3., 8. + 615, 2., -2., 8. + 616, 2., -1., 8. + 617, 2., 0., 8. + 618, 2., 1., 8. + 619, 2., 2., 8. + 620, 2., 3., 8. + 621, 2., 4., 8. + 622, 2., -4., 7. + 623, 2., -3., 7. + 624, 2., -2., 7. + 625, 2., -1., 7. + 626, 2., 0., 7. + 627, 2., 1., 7. + 628, 2., 2., 7. + 629, 2., 3., 7. + 630, 2., 4., 7. + 631, 2., -4., 6. + 632, 2., -3., 6. + 633, 2., -2., 6. + 634, 2., -1., 6. + 635, 2., 0., 6. + 636, 2., 1., 6. + 637, 2., 2., 6. + 638, 2., 3., 6. + 639, 2., 4., 6. + 640, 2., -4., 5. + 641, 2., -3., 5. + 642, 2., -2., 5. + 643, 2., -1., 5. + 644, 2., 0., 5. + 645, 2., 1., 5. + 646, 2., 2., 5. + 647, 2., 3., 5. + 648, 2., 4., 5. + 649, 2., -4., 4. + 650, 2., -3., 4. + 651, 2., -2., 4. + 652, 2., -1., 4. + 653, 2., 0., 4. + 654, 2., 1., 4. + 655, 2., 2., 4. + 656, 2., 3., 4. + 657, 2., 4., 4. + 658, 2., -4., 3. + 659, 2., -3., 3. + 660, 2., -2., 3. + 661, 2., -1., 3. + 662, 2., 0., 3. + 663, 2., 1., 3. + 664, 2., 2., 3. + 665, 2., 3., 3. + 666, 2., 4., 3. + 667, 2., -4., 2. + 668, 2., -3., 2. + 669, 2., -2., 2. + 670, 2., -1., 2. + 671, 2., 0., 2. + 672, 2., 1., 2. + 673, 2., 2., 2. + 674, 2., 3., 2. + 675, 2., 4., 2. + 676, 2., -4., 1. + 677, 2., -3., 1. + 678, 2., -2., 1. + 679, 2., -1., 1. + 680, 2., 0., 1. + 681, 2., 1., 1. + 682, 2., 2., 1. + 683, 2., 3., 1. + 684, 2., 4., 1. + 685, 2., -4., 0. + 686, 2., -3., 0. + 687, 2., -2., 0. + 688, 2., -1., 0. + 689, 2., 0., 0. + 690, 2., 1., 0. + 691, 2., 2., 0. + 692, 2., 3., 0. + 693, 2., 4., 0. + 694, 3., -4., 10. + 695, 3., -3., 10. + 696, 3., -2., 10. + 697, 3., -1., 10. + 698, 3., 0., 10. + 699, 3., 1., 10. + 700, 3., 2., 10. + 701, 3., 3., 10. + 702, 3., 4., 10. + 703, 3., -4., 9. + 704, 3., -3., 9. + 705, 3., -2., 9. + 706, 3., -1., 9. + 707, 3., 0., 9. + 708, 3., 1., 9. + 709, 3., 2., 9. + 710, 3., 3., 9. + 711, 3., 4., 9. + 712, 3., -4., 8. + 713, 3., -3., 8. + 714, 3., -2., 8. + 715, 3., -1., 8. + 716, 3., 0., 8. + 717, 3., 1., 8. + 718, 3., 2., 8. + 719, 3., 3., 8. + 720, 3., 4., 8. + 721, 3., -4., 7. + 722, 3., -3., 7. + 723, 3., -2., 7. + 724, 3., -1., 7. + 725, 3., 0., 7. + 726, 3., 1., 7. + 727, 3., 2., 7. + 728, 3., 3., 7. + 729, 3., 4., 7. + 730, 3., -4., 6. + 731, 3., -3., 6. + 732, 3., -2., 6. + 733, 3., -1., 6. + 734, 3., 0., 6. + 735, 3., 1., 6. + 736, 3., 2., 6. + 737, 3., 3., 6. + 738, 3., 4., 6. + 739, 3., -4., 5. + 740, 3., -3., 5. + 741, 3., -2., 5. + 742, 3., -1., 5. + 743, 3., 0., 5. + 744, 3., 1., 5. + 745, 3., 2., 5. + 746, 3., 3., 5. + 747, 3., 4., 5. + 748, 3., -4., 4. + 749, 3., -3., 4. + 750, 3., -2., 4. + 751, 3., -1., 4. + 752, 3., 0., 4. + 753, 3., 1., 4. + 754, 3., 2., 4. + 755, 3., 3., 4. + 756, 3., 4., 4. + 757, 3., -4., 3. + 758, 3., -3., 3. + 759, 3., -2., 3. + 760, 3., -1., 3. + 761, 3., 0., 3. + 762, 3., 1., 3. + 763, 3., 2., 3. + 764, 3., 3., 3. + 765, 3., 4., 3. + 766, 3., -4., 2. + 767, 3., -3., 2. + 768, 3., -2., 2. + 769, 3., -1., 2. + 770, 3., 0., 2. + 771, 3., 1., 2. + 772, 3., 2., 2. + 773, 3., 3., 2. + 774, 3., 4., 2. + 775, 3., -4., 1. + 776, 3., -3., 1. + 777, 3., -2., 1. + 778, 3., -1., 1. + 779, 3., 0., 1. + 780, 3., 1., 1. + 781, 3., 2., 1. + 782, 3., 3., 1. + 783, 3., 4., 1. + 784, 3., -4., 0. + 785, 3., -3., 0. + 786, 3., -2., 0. + 787, 3., -1., 0. + 788, 3., 0., 0. + 789, 3., 1., 0. + 790, 3., 2., 0. + 791, 3., 3., 0. + 792, 3., 4., 0. + 793, 4., -4., 10. + 794, 4., -3., 10. + 795, 4., -2., 10. + 796, 4., -1., 10. + 797, 4., 0., 10. + 798, 4., 1., 10. + 799, 4., 2., 10. + 800, 4., 3., 10. + 801, 4., 4., 10. + 802, 4., -4., 9. + 803, 4., -3., 9. + 804, 4., -2., 9. + 805, 4., -1., 9. + 806, 4., 0., 9. + 807, 4., 1., 9. + 808, 4., 2., 9. + 809, 4., 3., 9. + 810, 4., 4., 9. + 811, 4., -4., 8. + 812, 4., -3., 8. + 813, 4., -2., 8. + 814, 4., -1., 8. + 815, 4., 0., 8. + 816, 4., 1., 8. + 817, 4., 2., 8. + 818, 4., 3., 8. + 819, 4., 4., 8. + 820, 4., -4., 7. + 821, 4., -3., 7. + 822, 4., -2., 7. + 823, 4., -1., 7. + 824, 4., 0., 7. + 825, 4., 1., 7. + 826, 4., 2., 7. + 827, 4., 3., 7. + 828, 4., 4., 7. + 829, 4., -4., 6. + 830, 4., -3., 6. + 831, 4., -2., 6. + 832, 4., -1., 6. + 833, 4., 0., 6. + 834, 4., 1., 6. + 835, 4., 2., 6. + 836, 4., 3., 6. + 837, 4., 4., 6. + 838, 4., -4., 5. + 839, 4., -3., 5. + 840, 4., -2., 5. + 841, 4., -1., 5. + 842, 4., 0., 5. + 843, 4., 1., 5. + 844, 4., 2., 5. + 845, 4., 3., 5. + 846, 4., 4., 5. + 847, 4., -4., 4. + 848, 4., -3., 4. + 849, 4., -2., 4. + 850, 4., -1., 4. + 851, 4., 0., 4. + 852, 4., 1., 4. + 853, 4., 2., 4. + 854, 4., 3., 4. + 855, 4., 4., 4. + 856, 4., -4., 3. + 857, 4., -3., 3. + 858, 4., -2., 3. + 859, 4., -1., 3. + 860, 4., 0., 3. + 861, 4., 1., 3. + 862, 4., 2., 3. + 863, 4., 3., 3. + 864, 4., 4., 3. + 865, 4., -4., 2. + 866, 4., -3., 2. + 867, 4., -2., 2. + 868, 4., -1., 2. + 869, 4., 0., 2. + 870, 4., 1., 2. + 871, 4., 2., 2. + 872, 4., 3., 2. + 873, 4., 4., 2. + 874, 4., -4., 1. + 875, 4., -3., 1. + 876, 4., -2., 1. + 877, 4., -1., 1. + 878, 4., 0., 1. + 879, 4., 1., 1. + 880, 4., 2., 1. + 881, 4., 3., 1. + 882, 4., 4., 1. + 883, 4., -4., 0. + 884, 4., -3., 0. + 885, 4., -2., 0. + 886, 4., -1., 0. + 887, 4., 0., 0. + 888, 4., 1., 0. + 889, 4., 2., 0. + 890, 4., 3., 0. + 891, 4., 4., 0. +*Element, type=C3D8R + 1, 100, 101, 110, 109, 1, 2, 11, 10 + 2, 101, 102, 111, 110, 2, 3, 12, 11 + 3, 102, 103, 112, 111, 3, 4, 13, 12 + 4, 103, 104, 113, 112, 4, 5, 14, 13 + 5, 104, 105, 114, 113, 5, 6, 15, 14 + 6, 105, 106, 115, 114, 6, 7, 16, 15 + 7, 106, 107, 116, 115, 7, 8, 17, 16 + 8, 107, 108, 117, 116, 8, 9, 18, 17 + 9, 109, 110, 119, 118, 10, 11, 20, 19 + 10, 110, 111, 120, 119, 11, 12, 21, 20 + 11, 111, 112, 121, 120, 12, 13, 22, 21 + 12, 112, 113, 122, 121, 13, 14, 23, 22 + 13, 113, 114, 123, 122, 14, 15, 24, 23 + 14, 114, 115, 124, 123, 15, 16, 25, 24 + 15, 115, 116, 125, 124, 16, 17, 26, 25 + 16, 116, 117, 126, 125, 17, 18, 27, 26 + 17, 118, 119, 128, 127, 19, 20, 29, 28 + 18, 119, 120, 129, 128, 20, 21, 30, 29 + 19, 120, 121, 130, 129, 21, 22, 31, 30 + 20, 121, 122, 131, 130, 22, 23, 32, 31 + 21, 122, 123, 132, 131, 23, 24, 33, 32 + 22, 123, 124, 133, 132, 24, 25, 34, 33 + 23, 124, 125, 134, 133, 25, 26, 35, 34 + 24, 125, 126, 135, 134, 26, 27, 36, 35 + 25, 127, 128, 137, 136, 28, 29, 38, 37 + 26, 128, 129, 138, 137, 29, 30, 39, 38 + 27, 129, 130, 139, 138, 30, 31, 40, 39 + 28, 130, 131, 140, 139, 31, 32, 41, 40 + 29, 131, 132, 141, 140, 32, 33, 42, 41 + 30, 132, 133, 142, 141, 33, 34, 43, 42 + 31, 133, 134, 143, 142, 34, 35, 44, 43 + 32, 134, 135, 144, 143, 35, 36, 45, 44 + 33, 136, 137, 146, 145, 37, 38, 47, 46 + 34, 137, 138, 147, 146, 38, 39, 48, 47 + 35, 138, 139, 148, 147, 39, 40, 49, 48 + 36, 139, 140, 149, 148, 40, 41, 50, 49 + 37, 140, 141, 150, 149, 41, 42, 51, 50 + 38, 141, 142, 151, 150, 42, 43, 52, 51 + 39, 142, 143, 152, 151, 43, 44, 53, 52 + 40, 143, 144, 153, 152, 44, 45, 54, 53 + 41, 145, 146, 155, 154, 46, 47, 56, 55 + 42, 146, 147, 156, 155, 47, 48, 57, 56 + 43, 147, 148, 157, 156, 48, 49, 58, 57 + 44, 148, 149, 158, 157, 49, 50, 59, 58 + 45, 149, 150, 159, 158, 50, 51, 60, 59 + 46, 150, 151, 160, 159, 51, 52, 61, 60 + 47, 151, 152, 161, 160, 52, 53, 62, 61 + 48, 152, 153, 162, 161, 53, 54, 63, 62 + 49, 154, 155, 164, 163, 55, 56, 65, 64 + 50, 155, 156, 165, 164, 56, 57, 66, 65 + 51, 156, 157, 166, 165, 57, 58, 67, 66 + 52, 157, 158, 167, 166, 58, 59, 68, 67 + 53, 158, 159, 168, 167, 59, 60, 69, 68 + 54, 159, 160, 169, 168, 60, 61, 70, 69 + 55, 160, 161, 170, 169, 61, 62, 71, 70 + 56, 161, 162, 171, 170, 62, 63, 72, 71 + 57, 163, 164, 173, 172, 64, 65, 74, 73 + 58, 164, 165, 174, 173, 65, 66, 75, 74 + 59, 165, 166, 175, 174, 66, 67, 76, 75 + 60, 166, 167, 176, 175, 67, 68, 77, 76 + 61, 167, 168, 177, 176, 68, 69, 78, 77 + 62, 168, 169, 178, 177, 69, 70, 79, 78 + 63, 169, 170, 179, 178, 70, 71, 80, 79 + 64, 170, 171, 180, 179, 71, 72, 81, 80 + 65, 172, 173, 182, 181, 73, 74, 83, 82 + 66, 173, 174, 183, 182, 74, 75, 84, 83 + 67, 174, 175, 184, 183, 75, 76, 85, 84 + 68, 175, 176, 185, 184, 76, 77, 86, 85 + 69, 176, 177, 186, 185, 77, 78, 87, 86 + 70, 177, 178, 187, 186, 78, 79, 88, 87 + 71, 178, 179, 188, 187, 79, 80, 89, 88 + 72, 179, 180, 189, 188, 80, 81, 90, 89 + 73, 181, 182, 191, 190, 82, 83, 92, 91 + 74, 182, 183, 192, 191, 83, 84, 93, 92 + 75, 183, 184, 193, 192, 84, 85, 94, 93 + 76, 184, 185, 194, 193, 85, 86, 95, 94 + 77, 185, 186, 195, 194, 86, 87, 96, 95 + 78, 186, 187, 196, 195, 87, 88, 97, 96 + 79, 187, 188, 197, 196, 88, 89, 98, 97 + 80, 188, 189, 198, 197, 89, 90, 99, 98 + 81, 199, 200, 209, 208, 100, 101, 110, 109 + 82, 200, 201, 210, 209, 101, 102, 111, 110 + 83, 201, 202, 211, 210, 102, 103, 112, 111 + 84, 202, 203, 212, 211, 103, 104, 113, 112 + 85, 203, 204, 213, 212, 104, 105, 114, 113 + 86, 204, 205, 214, 213, 105, 106, 115, 114 + 87, 205, 206, 215, 214, 106, 107, 116, 115 + 88, 206, 207, 216, 215, 107, 108, 117, 116 + 89, 208, 209, 218, 217, 109, 110, 119, 118 + 90, 209, 210, 219, 218, 110, 111, 120, 119 + 91, 210, 211, 220, 219, 111, 112, 121, 120 + 92, 211, 212, 221, 220, 112, 113, 122, 121 + 93, 212, 213, 222, 221, 113, 114, 123, 122 + 94, 213, 214, 223, 222, 114, 115, 124, 123 + 95, 214, 215, 224, 223, 115, 116, 125, 124 + 96, 215, 216, 225, 224, 116, 117, 126, 125 + 97, 217, 218, 227, 226, 118, 119, 128, 127 + 98, 218, 219, 228, 227, 119, 120, 129, 128 + 99, 219, 220, 229, 228, 120, 121, 130, 129 +100, 220, 221, 230, 229, 121, 122, 131, 130 +101, 221, 222, 231, 230, 122, 123, 132, 131 +102, 222, 223, 232, 231, 123, 124, 133, 132 +103, 223, 224, 233, 232, 124, 125, 134, 133 +104, 224, 225, 234, 233, 125, 126, 135, 134 +105, 226, 227, 236, 235, 127, 128, 137, 136 +106, 227, 228, 237, 236, 128, 129, 138, 137 +107, 228, 229, 238, 237, 129, 130, 139, 138 +108, 229, 230, 239, 238, 130, 131, 140, 139 +109, 230, 231, 240, 239, 131, 132, 141, 140 +110, 231, 232, 241, 240, 132, 133, 142, 141 +111, 232, 233, 242, 241, 133, 134, 143, 142 +112, 233, 234, 243, 242, 134, 135, 144, 143 +113, 235, 236, 245, 244, 136, 137, 146, 145 +114, 236, 237, 246, 245, 137, 138, 147, 146 +115, 237, 238, 247, 246, 138, 139, 148, 147 +116, 238, 239, 248, 247, 139, 140, 149, 148 +117, 239, 240, 249, 248, 140, 141, 150, 149 +118, 240, 241, 250, 249, 141, 142, 151, 150 +119, 241, 242, 251, 250, 142, 143, 152, 151 +120, 242, 243, 252, 251, 143, 144, 153, 152 +121, 244, 245, 254, 253, 145, 146, 155, 154 +122, 245, 246, 255, 254, 146, 147, 156, 155 +123, 246, 247, 256, 255, 147, 148, 157, 156 +124, 247, 248, 257, 256, 148, 149, 158, 157 +125, 248, 249, 258, 257, 149, 150, 159, 158 +126, 249, 250, 259, 258, 150, 151, 160, 159 +127, 250, 251, 260, 259, 151, 152, 161, 160 +128, 251, 252, 261, 260, 152, 153, 162, 161 +129, 253, 254, 263, 262, 154, 155, 164, 163 +130, 254, 255, 264, 263, 155, 156, 165, 164 +131, 255, 256, 265, 264, 156, 157, 166, 165 +132, 256, 257, 266, 265, 157, 158, 167, 166 +133, 257, 258, 267, 266, 158, 159, 168, 167 +134, 258, 259, 268, 267, 159, 160, 169, 168 +135, 259, 260, 269, 268, 160, 161, 170, 169 +136, 260, 261, 270, 269, 161, 162, 171, 170 +137, 262, 263, 272, 271, 163, 164, 173, 172 +138, 263, 264, 273, 272, 164, 165, 174, 173 +139, 264, 265, 274, 273, 165, 166, 175, 174 +140, 265, 266, 275, 274, 166, 167, 176, 175 +141, 266, 267, 276, 275, 167, 168, 177, 176 +142, 267, 268, 277, 276, 168, 169, 178, 177 +143, 268, 269, 278, 277, 169, 170, 179, 178 +144, 269, 270, 279, 278, 170, 171, 180, 179 +145, 271, 272, 281, 280, 172, 173, 182, 181 +146, 272, 273, 282, 281, 173, 174, 183, 182 +147, 273, 274, 283, 282, 174, 175, 184, 183 +148, 274, 275, 284, 283, 175, 176, 185, 184 +149, 275, 276, 285, 284, 176, 177, 186, 185 +150, 276, 277, 286, 285, 177, 178, 187, 186 +151, 277, 278, 287, 286, 178, 179, 188, 187 +152, 278, 279, 288, 287, 179, 180, 189, 188 +153, 280, 281, 290, 289, 181, 182, 191, 190 +154, 281, 282, 291, 290, 182, 183, 192, 191 +155, 282, 283, 292, 291, 183, 184, 193, 192 +156, 283, 284, 293, 292, 184, 185, 194, 193 +157, 284, 285, 294, 293, 185, 186, 195, 194 +158, 285, 286, 295, 294, 186, 187, 196, 195 +159, 286, 287, 296, 295, 187, 188, 197, 196 +160, 287, 288, 297, 296, 188, 189, 198, 197 +161, 298, 299, 308, 307, 199, 200, 209, 208 +162, 299, 300, 309, 308, 200, 201, 210, 209 +163, 300, 301, 310, 309, 201, 202, 211, 210 +164, 301, 302, 311, 310, 202, 203, 212, 211 +165, 302, 303, 312, 311, 203, 204, 213, 212 +166, 303, 304, 313, 312, 204, 205, 214, 213 +167, 304, 305, 314, 313, 205, 206, 215, 214 +168, 305, 306, 315, 314, 206, 207, 216, 215 +169, 307, 308, 317, 316, 208, 209, 218, 217 +170, 308, 309, 318, 317, 209, 210, 219, 218 +171, 309, 310, 319, 318, 210, 211, 220, 219 +172, 310, 311, 320, 319, 211, 212, 221, 220 +173, 311, 312, 321, 320, 212, 213, 222, 221 +174, 312, 313, 322, 321, 213, 214, 223, 222 +175, 313, 314, 323, 322, 214, 215, 224, 223 +176, 314, 315, 324, 323, 215, 216, 225, 224 +177, 316, 317, 326, 325, 217, 218, 227, 226 +178, 317, 318, 327, 326, 218, 219, 228, 227 +179, 318, 319, 328, 327, 219, 220, 229, 228 +180, 319, 320, 329, 328, 220, 221, 230, 229 +181, 320, 321, 330, 329, 221, 222, 231, 230 +182, 321, 322, 331, 330, 222, 223, 232, 231 +183, 322, 323, 332, 331, 223, 224, 233, 232 +184, 323, 324, 333, 332, 224, 225, 234, 233 +185, 325, 326, 335, 334, 226, 227, 236, 235 +186, 326, 327, 336, 335, 227, 228, 237, 236 +187, 327, 328, 337, 336, 228, 229, 238, 237 +188, 328, 329, 338, 337, 229, 230, 239, 238 +189, 329, 330, 339, 338, 230, 231, 240, 239 +190, 330, 331, 340, 339, 231, 232, 241, 240 +191, 331, 332, 341, 340, 232, 233, 242, 241 +192, 332, 333, 342, 341, 233, 234, 243, 242 +193, 334, 335, 344, 343, 235, 236, 245, 244 +194, 335, 336, 345, 344, 236, 237, 246, 245 +195, 336, 337, 346, 345, 237, 238, 247, 246 +196, 337, 338, 347, 346, 238, 239, 248, 247 +197, 338, 339, 348, 347, 239, 240, 249, 248 +198, 339, 340, 349, 348, 240, 241, 250, 249 +199, 340, 341, 350, 349, 241, 242, 251, 250 +200, 341, 342, 351, 350, 242, 243, 252, 251 +201, 343, 344, 353, 352, 244, 245, 254, 253 +202, 344, 345, 354, 353, 245, 246, 255, 254 +203, 345, 346, 355, 354, 246, 247, 256, 255 +204, 346, 347, 356, 355, 247, 248, 257, 256 +205, 347, 348, 357, 356, 248, 249, 258, 257 +206, 348, 349, 358, 357, 249, 250, 259, 258 +207, 349, 350, 359, 358, 250, 251, 260, 259 +208, 350, 351, 360, 359, 251, 252, 261, 260 +209, 352, 353, 362, 361, 253, 254, 263, 262 +210, 353, 354, 363, 362, 254, 255, 264, 263 +211, 354, 355, 364, 363, 255, 256, 265, 264 +212, 355, 356, 365, 364, 256, 257, 266, 265 +213, 356, 357, 366, 365, 257, 258, 267, 266 +214, 357, 358, 367, 366, 258, 259, 268, 267 +215, 358, 359, 368, 367, 259, 260, 269, 268 +216, 359, 360, 369, 368, 260, 261, 270, 269 +217, 361, 362, 371, 370, 262, 263, 272, 271 +218, 362, 363, 372, 371, 263, 264, 273, 272 +219, 363, 364, 373, 372, 264, 265, 274, 273 +220, 364, 365, 374, 373, 265, 266, 275, 274 +221, 365, 366, 375, 374, 266, 267, 276, 275 +222, 366, 367, 376, 375, 267, 268, 277, 276 +223, 367, 368, 377, 376, 268, 269, 278, 277 +224, 368, 369, 378, 377, 269, 270, 279, 278 +225, 370, 371, 380, 379, 271, 272, 281, 280 +226, 371, 372, 381, 380, 272, 273, 282, 281 +227, 372, 373, 382, 381, 273, 274, 283, 282 +228, 373, 374, 383, 382, 274, 275, 284, 283 +229, 374, 375, 384, 383, 275, 276, 285, 284 +230, 375, 376, 385, 384, 276, 277, 286, 285 +231, 376, 377, 386, 385, 277, 278, 287, 286 +232, 377, 378, 387, 386, 278, 279, 288, 287 +233, 379, 380, 389, 388, 280, 281, 290, 289 +234, 380, 381, 390, 389, 281, 282, 291, 290 +235, 381, 382, 391, 390, 282, 283, 292, 291 +236, 382, 383, 392, 391, 283, 284, 293, 292 +237, 383, 384, 393, 392, 284, 285, 294, 293 +238, 384, 385, 394, 393, 285, 286, 295, 294 +239, 385, 386, 395, 394, 286, 287, 296, 295 +240, 386, 387, 396, 395, 287, 288, 297, 296 +241, 397, 398, 407, 406, 298, 299, 308, 307 +242, 398, 399, 408, 407, 299, 300, 309, 308 +243, 399, 400, 409, 408, 300, 301, 310, 309 +244, 400, 401, 410, 409, 301, 302, 311, 310 +245, 401, 402, 411, 410, 302, 303, 312, 311 +246, 402, 403, 412, 411, 303, 304, 313, 312 +247, 403, 404, 413, 412, 304, 305, 314, 313 +248, 404, 405, 414, 413, 305, 306, 315, 314 +249, 406, 407, 416, 415, 307, 308, 317, 316 +250, 407, 408, 417, 416, 308, 309, 318, 317 +251, 408, 409, 418, 417, 309, 310, 319, 318 +252, 409, 410, 419, 418, 310, 311, 320, 319 +253, 410, 411, 420, 419, 311, 312, 321, 320 +254, 411, 412, 421, 420, 312, 313, 322, 321 +255, 412, 413, 422, 421, 313, 314, 323, 322 +256, 413, 414, 423, 422, 314, 315, 324, 323 +257, 415, 416, 425, 424, 316, 317, 326, 325 +258, 416, 417, 426, 425, 317, 318, 327, 326 +259, 417, 418, 427, 426, 318, 319, 328, 327 +260, 418, 419, 428, 427, 319, 320, 329, 328 +261, 419, 420, 429, 428, 320, 321, 330, 329 +262, 420, 421, 430, 429, 321, 322, 331, 330 +263, 421, 422, 431, 430, 322, 323, 332, 331 +264, 422, 423, 432, 431, 323, 324, 333, 332 +265, 424, 425, 434, 433, 325, 326, 335, 334 +266, 425, 426, 435, 434, 326, 327, 336, 335 +267, 426, 427, 436, 435, 327, 328, 337, 336 +268, 427, 428, 437, 436, 328, 329, 338, 337 +269, 428, 429, 438, 437, 329, 330, 339, 338 +270, 429, 430, 439, 438, 330, 331, 340, 339 +271, 430, 431, 440, 439, 331, 332, 341, 340 +272, 431, 432, 441, 440, 332, 333, 342, 341 +273, 433, 434, 443, 442, 334, 335, 344, 343 +274, 434, 435, 444, 443, 335, 336, 345, 344 +275, 435, 436, 445, 444, 336, 337, 346, 345 +276, 436, 437, 446, 445, 337, 338, 347, 346 +277, 437, 438, 447, 446, 338, 339, 348, 347 +278, 438, 439, 448, 447, 339, 340, 349, 348 +279, 439, 440, 449, 448, 340, 341, 350, 349 +280, 440, 441, 450, 449, 341, 342, 351, 350 +281, 442, 443, 452, 451, 343, 344, 353, 352 +282, 443, 444, 453, 452, 344, 345, 354, 353 +283, 444, 445, 454, 453, 345, 346, 355, 354 +284, 445, 446, 455, 454, 346, 347, 356, 355 +285, 446, 447, 456, 455, 347, 348, 357, 356 +286, 447, 448, 457, 456, 348, 349, 358, 357 +287, 448, 449, 458, 457, 349, 350, 359, 358 +288, 449, 450, 459, 458, 350, 351, 360, 359 +289, 451, 452, 461, 460, 352, 353, 362, 361 +290, 452, 453, 462, 461, 353, 354, 363, 362 +291, 453, 454, 463, 462, 354, 355, 364, 363 +292, 454, 455, 464, 463, 355, 356, 365, 364 +293, 455, 456, 465, 464, 356, 357, 366, 365 +294, 456, 457, 466, 465, 357, 358, 367, 366 +295, 457, 458, 467, 466, 358, 359, 368, 367 +296, 458, 459, 468, 467, 359, 360, 369, 368 +297, 460, 461, 470, 469, 361, 362, 371, 370 +298, 461, 462, 471, 470, 362, 363, 372, 371 +299, 462, 463, 472, 471, 363, 364, 373, 372 +300, 463, 464, 473, 472, 364, 365, 374, 373 +301, 464, 465, 474, 473, 365, 366, 375, 374 +302, 465, 466, 475, 474, 366, 367, 376, 375 +303, 466, 467, 476, 475, 367, 368, 377, 376 +304, 467, 468, 477, 476, 368, 369, 378, 377 +305, 469, 470, 479, 478, 370, 371, 380, 379 +306, 470, 471, 480, 479, 371, 372, 381, 380 +307, 471, 472, 481, 480, 372, 373, 382, 381 +308, 472, 473, 482, 481, 373, 374, 383, 382 +309, 473, 474, 483, 482, 374, 375, 384, 383 +310, 474, 475, 484, 483, 375, 376, 385, 384 +311, 475, 476, 485, 484, 376, 377, 386, 385 +312, 476, 477, 486, 485, 377, 378, 387, 386 +313, 478, 479, 488, 487, 379, 380, 389, 388 +314, 479, 480, 489, 488, 380, 381, 390, 389 +315, 480, 481, 490, 489, 381, 382, 391, 390 +316, 481, 482, 491, 490, 382, 383, 392, 391 +317, 482, 483, 492, 491, 383, 384, 393, 392 +318, 483, 484, 493, 492, 384, 385, 394, 393 +319, 484, 485, 494, 493, 385, 386, 395, 394 +320, 485, 486, 495, 494, 386, 387, 396, 395 +321, 496, 497, 506, 505, 397, 398, 407, 406 +322, 497, 498, 507, 506, 398, 399, 408, 407 +323, 498, 499, 508, 507, 399, 400, 409, 408 +324, 499, 500, 509, 508, 400, 401, 410, 409 +325, 500, 501, 510, 509, 401, 402, 411, 410 +326, 501, 502, 511, 510, 402, 403, 412, 411 +327, 502, 503, 512, 511, 403, 404, 413, 412 +328, 503, 504, 513, 512, 404, 405, 414, 413 +329, 505, 506, 515, 514, 406, 407, 416, 415 +330, 506, 507, 516, 515, 407, 408, 417, 416 +331, 507, 508, 517, 516, 408, 409, 418, 417 +332, 508, 509, 518, 517, 409, 410, 419, 418 +333, 509, 510, 519, 518, 410, 411, 420, 419 +334, 510, 511, 520, 519, 411, 412, 421, 420 +335, 511, 512, 521, 520, 412, 413, 422, 421 +336, 512, 513, 522, 521, 413, 414, 423, 422 +337, 514, 515, 524, 523, 415, 416, 425, 424 +338, 515, 516, 525, 524, 416, 417, 426, 425 +339, 516, 517, 526, 525, 417, 418, 427, 426 +340, 517, 518, 527, 526, 418, 419, 428, 427 +341, 518, 519, 528, 527, 419, 420, 429, 428 +342, 519, 520, 529, 528, 420, 421, 430, 429 +343, 520, 521, 530, 529, 421, 422, 431, 430 +344, 521, 522, 531, 530, 422, 423, 432, 431 +345, 523, 524, 533, 532, 424, 425, 434, 433 +346, 524, 525, 534, 533, 425, 426, 435, 434 +347, 525, 526, 535, 534, 426, 427, 436, 435 +348, 526, 527, 536, 535, 427, 428, 437, 436 +349, 527, 528, 537, 536, 428, 429, 438, 437 +350, 528, 529, 538, 537, 429, 430, 439, 438 +351, 529, 530, 539, 538, 430, 431, 440, 439 +352, 530, 531, 540, 539, 431, 432, 441, 440 +353, 532, 533, 542, 541, 433, 434, 443, 442 +354, 533, 534, 543, 542, 434, 435, 444, 443 +355, 534, 535, 544, 543, 435, 436, 445, 444 +356, 535, 536, 545, 544, 436, 437, 446, 445 +357, 536, 537, 546, 545, 437, 438, 447, 446 +358, 537, 538, 547, 546, 438, 439, 448, 447 +359, 538, 539, 548, 547, 439, 440, 449, 448 +360, 539, 540, 549, 548, 440, 441, 450, 449 +361, 541, 542, 551, 550, 442, 443, 452, 451 +362, 542, 543, 552, 551, 443, 444, 453, 452 +363, 543, 544, 553, 552, 444, 445, 454, 453 +364, 544, 545, 554, 553, 445, 446, 455, 454 +365, 545, 546, 555, 554, 446, 447, 456, 455 +366, 546, 547, 556, 555, 447, 448, 457, 456 +367, 547, 548, 557, 556, 448, 449, 458, 457 +368, 548, 549, 558, 557, 449, 450, 459, 458 +369, 550, 551, 560, 559, 451, 452, 461, 460 +370, 551, 552, 561, 560, 452, 453, 462, 461 +371, 552, 553, 562, 561, 453, 454, 463, 462 +372, 553, 554, 563, 562, 454, 455, 464, 463 +373, 554, 555, 564, 563, 455, 456, 465, 464 +374, 555, 556, 565, 564, 456, 457, 466, 465 +375, 556, 557, 566, 565, 457, 458, 467, 466 +376, 557, 558, 567, 566, 458, 459, 468, 467 +377, 559, 560, 569, 568, 460, 461, 470, 469 +378, 560, 561, 570, 569, 461, 462, 471, 470 +379, 561, 562, 571, 570, 462, 463, 472, 471 +380, 562, 563, 572, 571, 463, 464, 473, 472 +381, 563, 564, 573, 572, 464, 465, 474, 473 +382, 564, 565, 574, 573, 465, 466, 475, 474 +383, 565, 566, 575, 574, 466, 467, 476, 475 +384, 566, 567, 576, 575, 467, 468, 477, 476 +385, 568, 569, 578, 577, 469, 470, 479, 478 +386, 569, 570, 579, 578, 470, 471, 480, 479 +387, 570, 571, 580, 579, 471, 472, 481, 480 +388, 571, 572, 581, 580, 472, 473, 482, 481 +389, 572, 573, 582, 581, 473, 474, 483, 482 +390, 573, 574, 583, 582, 474, 475, 484, 483 +391, 574, 575, 584, 583, 475, 476, 485, 484 +392, 575, 576, 585, 584, 476, 477, 486, 485 +393, 577, 578, 587, 586, 478, 479, 488, 487 +394, 578, 579, 588, 587, 479, 480, 489, 488 +395, 579, 580, 589, 588, 480, 481, 490, 489 +396, 580, 581, 590, 589, 481, 482, 491, 490 +397, 581, 582, 591, 590, 482, 483, 492, 491 +398, 582, 583, 592, 591, 483, 484, 493, 492 +399, 583, 584, 593, 592, 484, 485, 494, 493 +400, 584, 585, 594, 593, 485, 486, 495, 494 +401, 595, 596, 605, 604, 496, 497, 506, 505 +402, 596, 597, 606, 605, 497, 498, 507, 506 +403, 597, 598, 607, 606, 498, 499, 508, 507 +404, 598, 599, 608, 607, 499, 500, 509, 508 +405, 599, 600, 609, 608, 500, 501, 510, 509 +406, 600, 601, 610, 609, 501, 502, 511, 510 +407, 601, 602, 611, 610, 502, 503, 512, 511 +408, 602, 603, 612, 611, 503, 504, 513, 512 +409, 604, 605, 614, 613, 505, 506, 515, 514 +410, 605, 606, 615, 614, 506, 507, 516, 515 +411, 606, 607, 616, 615, 507, 508, 517, 516 +412, 607, 608, 617, 616, 508, 509, 518, 517 +413, 608, 609, 618, 617, 509, 510, 519, 518 +414, 609, 610, 619, 618, 510, 511, 520, 519 +415, 610, 611, 620, 619, 511, 512, 521, 520 +416, 611, 612, 621, 620, 512, 513, 522, 521 +417, 613, 614, 623, 622, 514, 515, 524, 523 +418, 614, 615, 624, 623, 515, 516, 525, 524 +419, 615, 616, 625, 624, 516, 517, 526, 525 +420, 616, 617, 626, 625, 517, 518, 527, 526 +421, 617, 618, 627, 626, 518, 519, 528, 527 +422, 618, 619, 628, 627, 519, 520, 529, 528 +423, 619, 620, 629, 628, 520, 521, 530, 529 +424, 620, 621, 630, 629, 521, 522, 531, 530 +425, 622, 623, 632, 631, 523, 524, 533, 532 +426, 623, 624, 633, 632, 524, 525, 534, 533 +427, 624, 625, 634, 633, 525, 526, 535, 534 +428, 625, 626, 635, 634, 526, 527, 536, 535 +429, 626, 627, 636, 635, 527, 528, 537, 536 +430, 627, 628, 637, 636, 528, 529, 538, 537 +431, 628, 629, 638, 637, 529, 530, 539, 538 +432, 629, 630, 639, 638, 530, 531, 540, 539 +433, 631, 632, 641, 640, 532, 533, 542, 541 +434, 632, 633, 642, 641, 533, 534, 543, 542 +435, 633, 634, 643, 642, 534, 535, 544, 543 +436, 634, 635, 644, 643, 535, 536, 545, 544 +437, 635, 636, 645, 644, 536, 537, 546, 545 +438, 636, 637, 646, 645, 537, 538, 547, 546 +439, 637, 638, 647, 646, 538, 539, 548, 547 +440, 638, 639, 648, 647, 539, 540, 549, 548 +441, 640, 641, 650, 649, 541, 542, 551, 550 +442, 641, 642, 651, 650, 542, 543, 552, 551 +443, 642, 643, 652, 651, 543, 544, 553, 552 +444, 643, 644, 653, 652, 544, 545, 554, 553 +445, 644, 645, 654, 653, 545, 546, 555, 554 +446, 645, 646, 655, 654, 546, 547, 556, 555 +447, 646, 647, 656, 655, 547, 548, 557, 556 +448, 647, 648, 657, 656, 548, 549, 558, 557 +449, 649, 650, 659, 658, 550, 551, 560, 559 +450, 650, 651, 660, 659, 551, 552, 561, 560 +451, 651, 652, 661, 660, 552, 553, 562, 561 +452, 652, 653, 662, 661, 553, 554, 563, 562 +453, 653, 654, 663, 662, 554, 555, 564, 563 +454, 654, 655, 664, 663, 555, 556, 565, 564 +455, 655, 656, 665, 664, 556, 557, 566, 565 +456, 656, 657, 666, 665, 557, 558, 567, 566 +457, 658, 659, 668, 667, 559, 560, 569, 568 +458, 659, 660, 669, 668, 560, 561, 570, 569 +459, 660, 661, 670, 669, 561, 562, 571, 570 +460, 661, 662, 671, 670, 562, 563, 572, 571 +461, 662, 663, 672, 671, 563, 564, 573, 572 +462, 663, 664, 673, 672, 564, 565, 574, 573 +463, 664, 665, 674, 673, 565, 566, 575, 574 +464, 665, 666, 675, 674, 566, 567, 576, 575 +465, 667, 668, 677, 676, 568, 569, 578, 577 +466, 668, 669, 678, 677, 569, 570, 579, 578 +467, 669, 670, 679, 678, 570, 571, 580, 579 +468, 670, 671, 680, 679, 571, 572, 581, 580 +469, 671, 672, 681, 680, 572, 573, 582, 581 +470, 672, 673, 682, 681, 573, 574, 583, 582 +471, 673, 674, 683, 682, 574, 575, 584, 583 +472, 674, 675, 684, 683, 575, 576, 585, 584 +473, 676, 677, 686, 685, 577, 578, 587, 586 +474, 677, 678, 687, 686, 578, 579, 588, 587 +475, 678, 679, 688, 687, 579, 580, 589, 588 +476, 679, 680, 689, 688, 580, 581, 590, 589 +477, 680, 681, 690, 689, 581, 582, 591, 590 +478, 681, 682, 691, 690, 582, 583, 592, 591 +479, 682, 683, 692, 691, 583, 584, 593, 592 +480, 683, 684, 693, 692, 584, 585, 594, 593 +481, 694, 695, 704, 703, 595, 596, 605, 604 +482, 695, 696, 705, 704, 596, 597, 606, 605 +483, 696, 697, 706, 705, 597, 598, 607, 606 +484, 697, 698, 707, 706, 598, 599, 608, 607 +485, 698, 699, 708, 707, 599, 600, 609, 608 +486, 699, 700, 709, 708, 600, 601, 610, 609 +487, 700, 701, 710, 709, 601, 602, 611, 610 +488, 701, 702, 711, 710, 602, 603, 612, 611 +489, 703, 704, 713, 712, 604, 605, 614, 613 +490, 704, 705, 714, 713, 605, 606, 615, 614 +491, 705, 706, 715, 714, 606, 607, 616, 615 +492, 706, 707, 716, 715, 607, 608, 617, 616 +493, 707, 708, 717, 716, 608, 609, 618, 617 +494, 708, 709, 718, 717, 609, 610, 619, 618 +495, 709, 710, 719, 718, 610, 611, 620, 619 +496, 710, 711, 720, 719, 611, 612, 621, 620 +497, 712, 713, 722, 721, 613, 614, 623, 622 +498, 713, 714, 723, 722, 614, 615, 624, 623 +499, 714, 715, 724, 723, 615, 616, 625, 624 +500, 715, 716, 725, 724, 616, 617, 626, 625 +501, 716, 717, 726, 725, 617, 618, 627, 626 +502, 717, 718, 727, 726, 618, 619, 628, 627 +503, 718, 719, 728, 727, 619, 620, 629, 628 +504, 719, 720, 729, 728, 620, 621, 630, 629 +505, 721, 722, 731, 730, 622, 623, 632, 631 +506, 722, 723, 732, 731, 623, 624, 633, 632 +507, 723, 724, 733, 732, 624, 625, 634, 633 +508, 724, 725, 734, 733, 625, 626, 635, 634 +509, 725, 726, 735, 734, 626, 627, 636, 635 +510, 726, 727, 736, 735, 627, 628, 637, 636 +511, 727, 728, 737, 736, 628, 629, 638, 637 +512, 728, 729, 738, 737, 629, 630, 639, 638 +513, 730, 731, 740, 739, 631, 632, 641, 640 +514, 731, 732, 741, 740, 632, 633, 642, 641 +515, 732, 733, 742, 741, 633, 634, 643, 642 +516, 733, 734, 743, 742, 634, 635, 644, 643 +517, 734, 735, 744, 743, 635, 636, 645, 644 +518, 735, 736, 745, 744, 636, 637, 646, 645 +519, 736, 737, 746, 745, 637, 638, 647, 646 +520, 737, 738, 747, 746, 638, 639, 648, 647 +521, 739, 740, 749, 748, 640, 641, 650, 649 +522, 740, 741, 750, 749, 641, 642, 651, 650 +523, 741, 742, 751, 750, 642, 643, 652, 651 +524, 742, 743, 752, 751, 643, 644, 653, 652 +525, 743, 744, 753, 752, 644, 645, 654, 653 +526, 744, 745, 754, 753, 645, 646, 655, 654 +527, 745, 746, 755, 754, 646, 647, 656, 655 +528, 746, 747, 756, 755, 647, 648, 657, 656 +529, 748, 749, 758, 757, 649, 650, 659, 658 +530, 749, 750, 759, 758, 650, 651, 660, 659 +531, 750, 751, 760, 759, 651, 652, 661, 660 +532, 751, 752, 761, 760, 652, 653, 662, 661 +533, 752, 753, 762, 761, 653, 654, 663, 662 +534, 753, 754, 763, 762, 654, 655, 664, 663 +535, 754, 755, 764, 763, 655, 656, 665, 664 +536, 755, 756, 765, 764, 656, 657, 666, 665 +537, 757, 758, 767, 766, 658, 659, 668, 667 +538, 758, 759, 768, 767, 659, 660, 669, 668 +539, 759, 760, 769, 768, 660, 661, 670, 669 +540, 760, 761, 770, 769, 661, 662, 671, 670 +541, 761, 762, 771, 770, 662, 663, 672, 671 +542, 762, 763, 772, 771, 663, 664, 673, 672 +543, 763, 764, 773, 772, 664, 665, 674, 673 +544, 764, 765, 774, 773, 665, 666, 675, 674 +545, 766, 767, 776, 775, 667, 668, 677, 676 +546, 767, 768, 777, 776, 668, 669, 678, 677 +547, 768, 769, 778, 777, 669, 670, 679, 678 +548, 769, 770, 779, 778, 670, 671, 680, 679 +549, 770, 771, 780, 779, 671, 672, 681, 680 +550, 771, 772, 781, 780, 672, 673, 682, 681 +551, 772, 773, 782, 781, 673, 674, 683, 682 +552, 773, 774, 783, 782, 674, 675, 684, 683 +553, 775, 776, 785, 784, 676, 677, 686, 685 +554, 776, 777, 786, 785, 677, 678, 687, 686 +555, 777, 778, 787, 786, 678, 679, 688, 687 +556, 778, 779, 788, 787, 679, 680, 689, 688 +557, 779, 780, 789, 788, 680, 681, 690, 689 +558, 780, 781, 790, 789, 681, 682, 691, 690 +559, 781, 782, 791, 790, 682, 683, 692, 691 +560, 782, 783, 792, 791, 683, 684, 693, 692 +561, 793, 794, 803, 802, 694, 695, 704, 703 +562, 794, 795, 804, 803, 695, 696, 705, 704 +563, 795, 796, 805, 804, 696, 697, 706, 705 +564, 796, 797, 806, 805, 697, 698, 707, 706 +565, 797, 798, 807, 806, 698, 699, 708, 707 +566, 798, 799, 808, 807, 699, 700, 709, 708 +567, 799, 800, 809, 808, 700, 701, 710, 709 +568, 800, 801, 810, 809, 701, 702, 711, 710 +569, 802, 803, 812, 811, 703, 704, 713, 712 +570, 803, 804, 813, 812, 704, 705, 714, 713 +571, 804, 805, 814, 813, 705, 706, 715, 714 +572, 805, 806, 815, 814, 706, 707, 716, 715 +573, 806, 807, 816, 815, 707, 708, 717, 716 +574, 807, 808, 817, 816, 708, 709, 718, 717 +575, 808, 809, 818, 817, 709, 710, 719, 718 +576, 809, 810, 819, 818, 710, 711, 720, 719 +577, 811, 812, 821, 820, 712, 713, 722, 721 +578, 812, 813, 822, 821, 713, 714, 723, 722 +579, 813, 814, 823, 822, 714, 715, 724, 723 +580, 814, 815, 824, 823, 715, 716, 725, 724 +581, 815, 816, 825, 824, 716, 717, 726, 725 +582, 816, 817, 826, 825, 717, 718, 727, 726 +583, 817, 818, 827, 826, 718, 719, 728, 727 +584, 818, 819, 828, 827, 719, 720, 729, 728 +585, 820, 821, 830, 829, 721, 722, 731, 730 +586, 821, 822, 831, 830, 722, 723, 732, 731 +587, 822, 823, 832, 831, 723, 724, 733, 732 +588, 823, 824, 833, 832, 724, 725, 734, 733 +589, 824, 825, 834, 833, 725, 726, 735, 734 +590, 825, 826, 835, 834, 726, 727, 736, 735 +591, 826, 827, 836, 835, 727, 728, 737, 736 +592, 827, 828, 837, 836, 728, 729, 738, 737 +593, 829, 830, 839, 838, 730, 731, 740, 739 +594, 830, 831, 840, 839, 731, 732, 741, 740 +595, 831, 832, 841, 840, 732, 733, 742, 741 +596, 832, 833, 842, 841, 733, 734, 743, 742 +597, 833, 834, 843, 842, 734, 735, 744, 743 +598, 834, 835, 844, 843, 735, 736, 745, 744 +599, 835, 836, 845, 844, 736, 737, 746, 745 +600, 836, 837, 846, 845, 737, 738, 747, 746 +601, 838, 839, 848, 847, 739, 740, 749, 748 +602, 839, 840, 849, 848, 740, 741, 750, 749 +603, 840, 841, 850, 849, 741, 742, 751, 750 +604, 841, 842, 851, 850, 742, 743, 752, 751 +605, 842, 843, 852, 851, 743, 744, 753, 752 +606, 843, 844, 853, 852, 744, 745, 754, 753 +607, 844, 845, 854, 853, 745, 746, 755, 754 +608, 845, 846, 855, 854, 746, 747, 756, 755 +609, 847, 848, 857, 856, 748, 749, 758, 757 +610, 848, 849, 858, 857, 749, 750, 759, 758 +611, 849, 850, 859, 858, 750, 751, 760, 759 +612, 850, 851, 860, 859, 751, 752, 761, 760 +613, 851, 852, 861, 860, 752, 753, 762, 761 +614, 852, 853, 862, 861, 753, 754, 763, 762 +615, 853, 854, 863, 862, 754, 755, 764, 763 +616, 854, 855, 864, 863, 755, 756, 765, 764 +617, 856, 857, 866, 865, 757, 758, 767, 766 +618, 857, 858, 867, 866, 758, 759, 768, 767 +619, 858, 859, 868, 867, 759, 760, 769, 768 +620, 859, 860, 869, 868, 760, 761, 770, 769 +621, 860, 861, 870, 869, 761, 762, 771, 770 +622, 861, 862, 871, 870, 762, 763, 772, 771 +623, 862, 863, 872, 871, 763, 764, 773, 772 +624, 863, 864, 873, 872, 764, 765, 774, 773 +625, 865, 866, 875, 874, 766, 767, 776, 775 +626, 866, 867, 876, 875, 767, 768, 777, 776 +627, 867, 868, 877, 876, 768, 769, 778, 777 +628, 868, 869, 878, 877, 769, 770, 779, 778 +629, 869, 870, 879, 878, 770, 771, 780, 779 +630, 870, 871, 880, 879, 771, 772, 781, 780 +631, 871, 872, 881, 880, 772, 773, 782, 781 +632, 872, 873, 882, 881, 773, 774, 783, 782 +633, 874, 875, 884, 883, 775, 776, 785, 784 +634, 875, 876, 885, 884, 776, 777, 786, 785 +635, 876, 877, 886, 885, 777, 778, 787, 786 +636, 877, 878, 887, 886, 778, 779, 788, 787 +637, 878, 879, 888, 887, 779, 780, 789, 788 +638, 879, 880, 889, 888, 780, 781, 790, 789 +639, 880, 881, 890, 889, 781, 782, 791, 790 +640, 881, 882, 891, 890, 782, 783, 792, 791 +*End Part +** +** +** ASSEMBLY +** +*Assembly, name=Assembly +** +*Instance, name=Part-1-1, part=Part-1 +*End Instance +** +*End Assembly +** +** MATERIALS +** +*Material, name=Material-1 +*Elastic +10., 0.49 diff --git a/single-node-refactor/regression_tests/standard_results/Abaqus_read/state/mat_pt_state_t_1.0000e+00.txt b/single-node-refactor/regression_tests/standard_results/Abaqus_read/state/mat_pt_state_t_1.0000e+00.txt new file mode 100644 index 000000000..64c795946 --- /dev/null +++ b/single-node-refactor/regression_tests/standard_results/Abaqus_read/state/mat_pt_state_t_1.0000e+00.txt @@ -0,0 +1,642 @@ +# state dump file +# x y z radius_2D radius_3D den pres sie sspd vol mass +-3.500000000000e+00 -3.500000000000e+00 9.500000000033e+00 4.949747468306e+00 1.071214264284e+01 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +-3.500000000000e+00 -2.500000000000e+00 9.500000000033e+00 4.301162633521e+00 1.042832680734e+01 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +-3.500000000000e+00 -1.500000000000e+00 9.500000000033e+00 3.807886552932e+00 1.023474474526e+01 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +-3.500000000000e+00 -5.000000000000e-01 9.500000000033e+00 3.535533905933e+00 1.013656746639e+01 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +-3.500000000000e+00 5.000000000000e-01 9.500000000033e+00 3.535533905933e+00 1.013656746639e+01 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +-3.500000000000e+00 1.500000000000e+00 9.500000000033e+00 3.807886552932e+00 1.023474474526e+01 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +-3.500000000000e+00 2.500000000000e+00 9.500000000033e+00 4.301162633521e+00 1.042832680734e+01 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +-3.500000000000e+00 3.500000000000e+00 9.500000000033e+00 4.949747468306e+00 1.071214264284e+01 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +-3.500000000000e+00 -3.500000000000e+00 8.500000000000e+00 4.949747468306e+00 9.836157786453e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +-3.500000000000e+00 -2.500000000000e+00 8.500000000000e+00 4.301162633521e+00 9.526279441629e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +-3.500000000000e+00 -1.500000000000e+00 8.500000000000e+00 3.807886552932e+00 9.313968005099e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +-3.500000000000e+00 -5.000000000000e-01 8.500000000000e+00 3.535533905933e+00 9.205976319761e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +-3.500000000000e+00 5.000000000000e-01 8.500000000000e+00 3.535533905933e+00 9.205976319761e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +-3.500000000000e+00 1.500000000000e+00 8.500000000000e+00 3.807886552932e+00 9.313968005099e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +-3.500000000000e+00 2.500000000000e+00 8.500000000000e+00 4.301162633521e+00 9.526279441629e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +-3.500000000000e+00 3.500000000000e+00 8.500000000000e+00 4.949747468306e+00 9.836157786453e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +-3.500000000000e+00 -3.500000000000e+00 7.500000000008e+00 4.949747468306e+00 8.986100377812e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +-3.500000000000e+00 -2.500000000000e+00 7.500000000008e+00 4.301162633521e+00 8.645808232902e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +-3.500000000000e+00 -1.500000000000e+00 7.500000000008e+00 3.807886552932e+00 8.411301920637e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +-3.500000000000e+00 -5.000000000000e-01 7.500000000008e+00 3.535533905933e+00 8.291561975895e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +-3.500000000000e+00 5.000000000000e-01 7.500000000008e+00 3.535533905933e+00 8.291561975895e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +-3.500000000000e+00 1.500000000000e+00 7.500000000008e+00 3.807886552932e+00 8.411301920637e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +-3.500000000000e+00 2.500000000000e+00 7.500000000008e+00 4.301162633521e+00 8.645808232902e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +-3.500000000000e+00 3.500000000000e+00 7.500000000008e+00 4.949747468306e+00 8.986100377812e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +-3.500000000000e+00 -3.500000000000e+00 6.500004552938e+00 4.949747468306e+00 8.170070941443e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +-3.500000000000e+00 -2.500000000000e+00 6.500004552938e+00 4.301162633521e+00 7.794232430985e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +-3.500000000000e+00 -1.500000000000e+00 6.500004552938e+00 3.807886552932e+00 7.533263515119e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +-3.500000000000e+00 -5.000000000000e-01 6.500004552938e+00 3.535533905933e+00 7.399328293042e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +-3.500000000000e+00 5.000000000000e-01 6.500004552938e+00 3.535533905933e+00 7.399328293042e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +-3.500000000000e+00 1.500000000000e+00 6.500004552938e+00 3.807886552932e+00 7.533263515119e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +-3.500000000000e+00 2.500000000000e+00 6.500004552938e+00 4.301162633521e+00 7.794232430985e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +-3.500000000000e+00 3.500000000000e+00 6.500004552938e+00 4.949747468306e+00 8.170070941443e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +-3.500000000000e+00 -3.500000000000e+00 5.503774481144e+00 4.949747468306e+00 7.402130337902e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +-3.500000000000e+00 -2.500000000000e+00 5.503774481144e+00 4.301162633521e+00 6.985093667181e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +-3.500000000000e+00 -1.500000000000e+00 5.503774481144e+00 3.807886552932e+00 6.692647722635e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +-3.500000000000e+00 -5.000000000000e-01 5.503774481144e+00 3.535533905933e+00 6.541523793375e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +-3.500000000000e+00 5.000000000000e-01 5.503774481144e+00 3.535533905933e+00 6.541523793375e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +-3.500000000000e+00 1.500000000000e+00 5.503774481144e+00 3.807886552932e+00 6.692647722635e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +-3.500000000000e+00 2.500000000000e+00 5.503774481144e+00 4.301162633521e+00 6.985093667181e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +-3.500000000000e+00 3.500000000000e+00 5.503774481144e+00 4.949747468306e+00 7.402130337902e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +-3.500000000000e+00 -3.500000000000e+00 4.601481985862e+00 4.949747468306e+00 6.758227316850e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +-3.500000000000e+00 -2.500000000000e+00 4.601481985862e+00 4.301162633521e+00 6.298701172957e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +-3.500000000000e+00 -1.500000000000e+00 4.601481985862e+00 3.807886552932e+00 5.972741118298e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +-3.500000000000e+00 -5.000000000000e-01 4.601481985862e+00 3.535533905933e+00 5.802898970878e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +-3.500000000000e+00 5.000000000000e-01 4.601481985862e+00 3.535533905933e+00 5.802898970878e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +-3.500000000000e+00 1.500000000000e+00 4.601481985862e+00 3.807886552932e+00 5.972741118298e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +-3.500000000000e+00 2.500000000000e+00 4.601481985862e+00 4.301162633521e+00 6.298701172957e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +-3.500000000000e+00 3.500000000000e+00 4.601481985862e+00 4.949747468306e+00 6.758227316850e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +-3.500000000000e+00 -3.500000000000e+00 4.014394513860e+00 4.949747468306e+00 6.373018383224e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +-3.500000000000e+00 -2.500000000000e+00 4.014394513860e+00 4.301162633521e+00 5.883482243783e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +-3.500000000000e+00 -1.500000000000e+00 4.014394513860e+00 3.807886552932e+00 5.533115154496e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +-3.500000000000e+00 -5.000000000000e-01 4.014394513860e+00 3.535533905933e+00 5.349332978317e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +-3.500000000000e+00 5.000000000000e-01 4.014394513860e+00 3.535533905933e+00 5.349332978317e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +-3.500000000000e+00 1.500000000000e+00 4.014394513860e+00 3.807886552932e+00 5.533115154496e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +-3.500000000000e+00 2.500000000000e+00 4.014394513860e+00 4.301162633521e+00 5.883482243783e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +-3.500000000000e+00 3.500000000000e+00 4.014394513860e+00 4.949747468306e+00 6.373018383224e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +-3.500000000000e+00 -3.500000000000e+00 3.680096178300e+00 4.949747468306e+00 6.167909522807e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +-3.500000000000e+00 -2.500000000000e+00 3.680096178300e+00 4.301162633521e+00 5.660663201564e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +-3.500000000000e+00 -1.500000000000e+00 3.680096178300e+00 3.807886552932e+00 5.295574367482e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +-3.500000000000e+00 -5.000000000000e-01 3.680096178300e+00 3.535533905933e+00 5.103244838486e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +-3.500000000000e+00 5.000000000000e-01 3.680096178300e+00 3.535533905933e+00 5.103244838486e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +-3.500000000000e+00 1.500000000000e+00 3.680096178300e+00 3.807886552932e+00 5.295574367482e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +-3.500000000000e+00 2.500000000000e+00 3.680096178300e+00 4.301162633521e+00 5.660663201564e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +-3.500000000000e+00 3.500000000000e+00 3.680096178300e+00 4.949747468306e+00 6.167909522807e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +-3.500000000000e+00 -3.500000000000e+00 3.296094971545e+00 4.949747468306e+00 5.946784178146e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +-3.500000000000e+00 -2.500000000000e+00 3.296094971545e+00 4.301162633521e+00 5.418878302882e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +-3.500000000000e+00 -1.500000000000e+00 3.296094971545e+00 3.807886552932e+00 5.036292491649e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +-3.500000000000e+00 -5.000000000000e-01 3.296094971545e+00 3.535533905933e+00 4.833657213895e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +-3.500000000000e+00 5.000000000000e-01 3.296094971545e+00 3.535533905933e+00 4.833657213895e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +-3.500000000000e+00 1.500000000000e+00 3.296094971545e+00 3.807886552932e+00 5.036292491649e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +-3.500000000000e+00 2.500000000000e+00 3.296094971545e+00 4.301162633521e+00 5.418878302882e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +-3.500000000000e+00 3.500000000000e+00 3.296094971545e+00 4.949747468306e+00 5.946784178146e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +-3.500000000000e+00 -3.500000000000e+00 1.532681249456e+00 4.949747468306e+00 5.181612858216e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +-3.500000000000e+00 -2.500000000000e+00 1.532681249456e+00 4.301162633521e+00 4.566082764519e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +-3.500000000000e+00 -1.500000000000e+00 1.532681249456e+00 3.807886552932e+00 4.104766962013e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +-3.500000000000e+00 -5.000000000000e-01 1.532681249456e+00 3.535533905933e+00 3.853454529696e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +-3.500000000000e+00 5.000000000000e-01 1.532681249456e+00 3.535533905933e+00 3.853454529696e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +-3.500000000000e+00 1.500000000000e+00 1.532681249456e+00 3.807886552932e+00 4.104766962013e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +-3.500000000000e+00 2.500000000000e+00 1.532681249456e+00 4.301162633521e+00 4.566082764519e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +-3.500000000000e+00 3.500000000000e+00 1.532681249456e+00 4.949747468306e+00 5.181612858216e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +-2.500000000000e+00 -3.500000000000e+00 9.500000000033e+00 4.301162633521e+00 1.042832680734e+01 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +-2.500000000000e+00 -2.500000000000e+00 9.500000000033e+00 3.535533905933e+00 1.013656746639e+01 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +-2.500000000000e+00 -1.500000000000e+00 9.500000000033e+00 2.915475947423e+00 9.937303457208e+00 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +-2.500000000000e+00 -5.000000000000e-01 9.500000000033e+00 2.549509756796e+00 9.836157786485e+00 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +-2.500000000000e+00 5.000000000000e-01 9.500000000033e+00 2.549509756796e+00 9.836157786485e+00 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +-2.500000000000e+00 1.500000000000e+00 9.500000000033e+00 2.915475947423e+00 9.937303457208e+00 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +-2.500000000000e+00 2.500000000000e+00 9.500000000033e+00 3.535533905933e+00 1.013656746639e+01 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +-2.500000000000e+00 3.500000000000e+00 9.500000000033e+00 4.301162633521e+00 1.042832680734e+01 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +-2.500000000000e+00 -3.500000000000e+00 8.500000000000e+00 4.301162633521e+00 9.526279441629e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +-2.500000000000e+00 -2.500000000000e+00 8.500000000000e+00 3.535533905933e+00 9.205976319761e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +-2.500000000000e+00 -1.500000000000e+00 8.500000000000e+00 2.915475947423e+00 8.986100377806e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +-2.500000000000e+00 -5.000000000000e-01 8.500000000000e+00 2.549509756796e+00 8.874119674649e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +-2.500000000000e+00 5.000000000000e-01 8.500000000000e+00 2.549509756796e+00 8.874119674649e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +-2.500000000000e+00 1.500000000000e+00 8.500000000000e+00 2.915475947423e+00 8.986100377806e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +-2.500000000000e+00 2.500000000000e+00 8.500000000000e+00 3.535533905933e+00 9.205976319761e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +-2.500000000000e+00 3.500000000000e+00 8.500000000000e+00 4.301162633521e+00 9.526279441629e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +-2.500000000000e+00 -3.500000000000e+00 7.500000000008e+00 4.301162633521e+00 8.645808232902e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +-2.500000000000e+00 -2.500000000000e+00 7.500000000008e+00 3.535533905933e+00 8.291561975895e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +-2.500000000000e+00 -1.500000000000e+00 7.500000000008e+00 2.915475947423e+00 8.046738469723e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +-2.500000000000e+00 -5.000000000000e-01 7.500000000008e+00 2.549509756796e+00 7.921489758885e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +-2.500000000000e+00 5.000000000000e-01 7.500000000008e+00 2.549509756796e+00 7.921489758885e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +-2.500000000000e+00 1.500000000000e+00 7.500000000008e+00 2.915475947423e+00 8.046738469723e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +-2.500000000000e+00 2.500000000000e+00 7.500000000008e+00 3.535533905933e+00 8.291561975895e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +-2.500000000000e+00 3.500000000000e+00 7.500000000008e+00 4.301162633521e+00 8.645808232902e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +-2.500000000000e+00 -3.500000000000e+00 6.500004552938e+00 4.301162633521e+00 7.794232430985e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +-2.500000000000e+00 -2.500000000000e+00 6.500004552938e+00 3.535533905933e+00 7.399328293042e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +-2.500000000000e+00 -1.500000000000e+00 6.500004552938e+00 2.915475947423e+00 7.123907578585e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +-2.500000000000e+00 -5.000000000000e-01 6.500004552938e+00 2.549509756796e+00 6.982124260439e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +-2.500000000000e+00 5.000000000000e-01 6.500004552938e+00 2.549509756796e+00 6.982124260439e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +-2.500000000000e+00 1.500000000000e+00 6.500004552938e+00 2.915475947423e+00 7.123907578585e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +-2.500000000000e+00 2.500000000000e+00 6.500004552938e+00 3.535533905933e+00 7.399328293042e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +-2.500000000000e+00 3.500000000000e+00 6.500004552938e+00 4.301162633521e+00 7.794232430985e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +-2.500000000000e+00 -3.500000000000e+00 5.503774481144e+00 4.301162633521e+00 6.985093667181e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +-2.500000000000e+00 -2.500000000000e+00 5.503774481144e+00 3.535533905933e+00 6.541523793375e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +-2.500000000000e+00 -1.500000000000e+00 5.503774481144e+00 2.915475947423e+00 6.228284959705e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +-2.500000000000e+00 -5.000000000000e-01 5.503774481144e+00 2.549509756796e+00 6.065602487741e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +-2.500000000000e+00 5.000000000000e-01 5.503774481144e+00 2.549509756796e+00 6.065602487741e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +-2.500000000000e+00 1.500000000000e+00 5.503774481144e+00 2.915475947423e+00 6.228284959705e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +-2.500000000000e+00 2.500000000000e+00 5.503774481144e+00 3.535533905933e+00 6.541523793375e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +-2.500000000000e+00 3.500000000000e+00 5.503774481144e+00 4.301162633521e+00 6.985093667181e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +-2.500000000000e+00 -3.500000000000e+00 4.601481985862e+00 4.301162633521e+00 6.298701172957e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +-2.500000000000e+00 -2.500000000000e+00 4.601481985862e+00 3.535533905933e+00 5.802898970878e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +-2.500000000000e+00 -1.500000000000e+00 4.601481985862e+00 2.915475947423e+00 5.447351325756e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +-2.500000000000e+00 -5.000000000000e-01 4.601481985862e+00 2.549509756796e+00 5.260573777281e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +-2.500000000000e+00 5.000000000000e-01 4.601481985862e+00 2.549509756796e+00 5.260573777281e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +-2.500000000000e+00 1.500000000000e+00 4.601481985862e+00 2.915475947423e+00 5.447351325756e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +-2.500000000000e+00 2.500000000000e+00 4.601481985862e+00 3.535533905933e+00 5.802898970878e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +-2.500000000000e+00 3.500000000000e+00 4.601481985862e+00 4.301162633521e+00 6.298701172957e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +-2.500000000000e+00 -3.500000000000e+00 4.014394513860e+00 4.301162633521e+00 5.883482243783e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +-2.500000000000e+00 -2.500000000000e+00 4.014394513860e+00 3.535533905933e+00 5.349332978317e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +-2.500000000000e+00 -1.500000000000e+00 4.014394513860e+00 2.915475947423e+00 4.961387236742e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +-2.500000000000e+00 -5.000000000000e-01 4.014394513860e+00 2.549509756796e+00 4.755561303664e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +-2.500000000000e+00 5.000000000000e-01 4.014394513860e+00 2.549509756796e+00 4.755561303664e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +-2.500000000000e+00 1.500000000000e+00 4.014394513860e+00 2.915475947423e+00 4.961387236742e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +-2.500000000000e+00 2.500000000000e+00 4.014394513860e+00 3.535533905933e+00 5.349332978317e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +-2.500000000000e+00 3.500000000000e+00 4.014394513860e+00 4.301162633521e+00 5.883482243783e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +-2.500000000000e+00 -3.500000000000e+00 3.680096178300e+00 4.301162633521e+00 5.660663201564e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +-2.500000000000e+00 -2.500000000000e+00 3.680096178300e+00 3.535533905933e+00 5.103244838486e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +-2.500000000000e+00 -1.500000000000e+00 3.680096178300e+00 2.915475947423e+00 4.695008826566e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +-2.500000000000e+00 -5.000000000000e-01 3.680096178300e+00 2.549509756796e+00 4.476952968430e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +-2.500000000000e+00 5.000000000000e-01 3.680096178300e+00 2.549509756796e+00 4.476952968430e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +-2.500000000000e+00 1.500000000000e+00 3.680096178300e+00 2.915475947423e+00 4.695008826566e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +-2.500000000000e+00 2.500000000000e+00 3.680096178300e+00 3.535533905933e+00 5.103244838486e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +-2.500000000000e+00 3.500000000000e+00 3.680096178300e+00 4.301162633521e+00 5.660663201564e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +-2.500000000000e+00 -3.500000000000e+00 3.296094971545e+00 4.301162633521e+00 5.418878302882e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +-2.500000000000e+00 -2.500000000000e+00 3.296094971545e+00 3.535533905933e+00 4.833657213895e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +-2.500000000000e+00 -1.500000000000e+00 3.296094971545e+00 2.915475947423e+00 4.400482026033e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +-2.500000000000e+00 -5.000000000000e-01 3.296094971545e+00 2.549509756796e+00 4.167042363769e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +-2.500000000000e+00 5.000000000000e-01 3.296094971545e+00 2.549509756796e+00 4.167042363769e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +-2.500000000000e+00 1.500000000000e+00 3.296094971545e+00 2.915475947423e+00 4.400482026033e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +-2.500000000000e+00 2.500000000000e+00 3.296094971545e+00 3.535533905933e+00 4.833657213895e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +-2.500000000000e+00 3.500000000000e+00 3.296094971545e+00 4.301162633521e+00 5.418878302882e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +-2.500000000000e+00 -3.500000000000e+00 1.532681249456e+00 4.301162633521e+00 4.566082764519e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +-2.500000000000e+00 -2.500000000000e+00 1.532681249456e+00 3.535533905933e+00 3.853454529696e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +-2.500000000000e+00 -1.500000000000e+00 1.532681249456e+00 2.915475947423e+00 3.293798993933e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +-2.500000000000e+00 -5.000000000000e-01 1.532681249456e+00 2.549509756796e+00 2.974745671891e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +-2.500000000000e+00 5.000000000000e-01 1.532681249456e+00 2.549509756796e+00 2.974745671891e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +-2.500000000000e+00 1.500000000000e+00 1.532681249456e+00 2.915475947423e+00 3.293798993933e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +-2.500000000000e+00 2.500000000000e+00 1.532681249456e+00 3.535533905933e+00 3.853454529696e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +-2.500000000000e+00 3.500000000000e+00 1.532681249456e+00 4.301162633521e+00 4.566082764519e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +-1.500000000000e+00 -3.500000000000e+00 9.500000000033e+00 3.807886552932e+00 1.023474474526e+01 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +-1.500000000000e+00 -2.500000000000e+00 9.500000000033e+00 2.915475947423e+00 9.937303457208e+00 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +-1.500000000000e+00 -1.500000000000e+00 9.500000000033e+00 2.121320343560e+00 9.733961166998e+00 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +-1.500000000000e+00 -5.000000000000e-01 9.500000000033e+00 1.581138830084e+00 9.630680142162e+00 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +-1.500000000000e+00 5.000000000000e-01 9.500000000033e+00 1.581138830084e+00 9.630680142162e+00 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +-1.500000000000e+00 1.500000000000e+00 9.500000000033e+00 2.121320343560e+00 9.733961166998e+00 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +-1.500000000000e+00 2.500000000000e+00 9.500000000033e+00 2.915475947423e+00 9.937303457208e+00 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +-1.500000000000e+00 3.500000000000e+00 9.500000000033e+00 3.807886552932e+00 1.023474474526e+01 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +-1.500000000000e+00 -3.500000000000e+00 8.500000000000e+00 3.807886552932e+00 9.313968005099e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +-1.500000000000e+00 -2.500000000000e+00 8.500000000000e+00 2.915475947423e+00 8.986100377806e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +-1.500000000000e+00 -1.500000000000e+00 8.500000000000e+00 2.121320343560e+00 8.760707733968e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +-1.500000000000e+00 -5.000000000000e-01 8.500000000000e+00 1.581138830084e+00 8.645808232895e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +-1.500000000000e+00 5.000000000000e-01 8.500000000000e+00 1.581138830084e+00 8.645808232895e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +-1.500000000000e+00 1.500000000000e+00 8.500000000000e+00 2.121320343560e+00 8.760707733968e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +-1.500000000000e+00 2.500000000000e+00 8.500000000000e+00 2.915475947423e+00 8.986100377806e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +-1.500000000000e+00 3.500000000000e+00 8.500000000000e+00 3.807886552932e+00 9.313968005099e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +-1.500000000000e+00 -3.500000000000e+00 7.500000000008e+00 3.807886552932e+00 8.411301920637e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +-1.500000000000e+00 -2.500000000000e+00 7.500000000008e+00 2.915475947423e+00 8.046738469723e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +-1.500000000000e+00 -1.500000000000e+00 7.500000000008e+00 2.121320343560e+00 7.794228634067e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +-1.500000000000e+00 -5.000000000000e-01 7.500000000008e+00 1.581138830084e+00 7.664854858385e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +-1.500000000000e+00 5.000000000000e-01 7.500000000008e+00 1.581138830084e+00 7.664854858385e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +-1.500000000000e+00 1.500000000000e+00 7.500000000008e+00 2.121320343560e+00 7.794228634067e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +-1.500000000000e+00 2.500000000000e+00 7.500000000008e+00 2.915475947423e+00 8.046738469723e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +-1.500000000000e+00 3.500000000000e+00 7.500000000008e+00 3.807886552932e+00 8.411301920637e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +-1.500000000000e+00 -3.500000000000e+00 6.500004552938e+00 3.807886552932e+00 7.533263515119e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +-1.500000000000e+00 -2.500000000000e+00 6.500004552938e+00 2.915475947423e+00 7.123907578585e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +-1.500000000000e+00 -1.500000000000e+00 6.500004552938e+00 2.121320343560e+00 6.837401493858e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +-1.500000000000e+00 -5.000000000000e-01 6.500004552938e+00 1.581138830084e+00 6.689548504063e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +-1.500000000000e+00 5.000000000000e-01 6.500004552938e+00 1.581138830084e+00 6.689548504063e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +-1.500000000000e+00 1.500000000000e+00 6.500004552938e+00 2.121320343560e+00 6.837401493858e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +-1.500000000000e+00 2.500000000000e+00 6.500004552938e+00 2.915475947423e+00 7.123907578585e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +-1.500000000000e+00 3.500000000000e+00 6.500004552938e+00 3.807886552932e+00 7.533263515119e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +-1.500000000000e+00 -3.500000000000e+00 5.503774481144e+00 3.807886552932e+00 6.692647722635e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +-1.500000000000e+00 -2.500000000000e+00 5.503774481144e+00 2.915475947423e+00 6.228284959705e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +-1.500000000000e+00 -1.500000000000e+00 5.503774481144e+00 2.121320343560e+00 5.898434838098e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +-1.500000000000e+00 -5.000000000000e-01 5.503774481144e+00 1.581138830084e+00 5.726389223524e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +-1.500000000000e+00 5.000000000000e-01 5.503774481144e+00 1.581138830084e+00 5.726389223524e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +-1.500000000000e+00 1.500000000000e+00 5.503774481144e+00 2.121320343560e+00 5.898434838098e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +-1.500000000000e+00 2.500000000000e+00 5.503774481144e+00 2.915475947423e+00 6.228284959705e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +-1.500000000000e+00 3.500000000000e+00 5.503774481144e+00 3.807886552932e+00 6.692647722635e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +-1.500000000000e+00 -3.500000000000e+00 4.601481985862e+00 3.807886552932e+00 5.972741118298e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +-1.500000000000e+00 -2.500000000000e+00 4.601481985862e+00 2.915475947423e+00 5.447351325756e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +-1.500000000000e+00 -1.500000000000e+00 4.601481985862e+00 2.121320343560e+00 5.066915873212e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +-1.500000000000e+00 -5.000000000000e-01 4.601481985862e+00 1.581138830084e+00 4.865556131236e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +-1.500000000000e+00 5.000000000000e-01 4.601481985862e+00 1.581138830084e+00 4.865556131236e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +-1.500000000000e+00 1.500000000000e+00 4.601481985862e+00 2.121320343560e+00 5.066915873212e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +-1.500000000000e+00 2.500000000000e+00 4.601481985862e+00 2.915475947423e+00 5.447351325756e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +-1.500000000000e+00 3.500000000000e+00 4.601481985862e+00 3.807886552932e+00 5.972741118298e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +-1.500000000000e+00 -3.500000000000e+00 4.014394513860e+00 3.807886552932e+00 5.533115154496e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +-1.500000000000e+00 -2.500000000000e+00 4.014394513860e+00 2.915475947423e+00 4.961387236742e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +-1.500000000000e+00 -1.500000000000e+00 4.014394513860e+00 2.121320343560e+00 4.540414442857e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +-1.500000000000e+00 -5.000000000000e-01 4.014394513860e+00 1.581138830084e+00 4.314552504363e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +-1.500000000000e+00 5.000000000000e-01 4.014394513860e+00 1.581138830084e+00 4.314552504363e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +-1.500000000000e+00 1.500000000000e+00 4.014394513860e+00 2.121320343560e+00 4.540414442857e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +-1.500000000000e+00 2.500000000000e+00 4.014394513860e+00 2.915475947423e+00 4.961387236742e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +-1.500000000000e+00 3.500000000000e+00 4.014394513860e+00 3.807886552932e+00 5.533115154496e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +-1.500000000000e+00 -3.500000000000e+00 3.680096178300e+00 3.807886552932e+00 5.295574367482e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +-1.500000000000e+00 -2.500000000000e+00 3.680096178300e+00 2.915475947423e+00 4.695008826566e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +-1.500000000000e+00 -1.500000000000e+00 3.680096178300e+00 2.121320343560e+00 4.247717961628e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +-1.500000000000e+00 -5.000000000000e-01 3.680096178300e+00 1.581138830084e+00 4.005384860602e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +-1.500000000000e+00 5.000000000000e-01 3.680096178300e+00 1.581138830084e+00 4.005384860602e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +-1.500000000000e+00 1.500000000000e+00 3.680096178300e+00 2.121320343560e+00 4.247717961628e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +-1.500000000000e+00 2.500000000000e+00 3.680096178300e+00 2.915475947423e+00 4.695008826566e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +-1.500000000000e+00 3.500000000000e+00 3.680096178300e+00 3.807886552932e+00 5.295574367482e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +-1.500000000000e+00 -3.500000000000e+00 3.296094971545e+00 3.807886552932e+00 5.036292491649e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +-1.500000000000e+00 -2.500000000000e+00 3.296094971545e+00 2.915475947423e+00 4.400482026033e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +-1.500000000000e+00 -1.500000000000e+00 3.296094971545e+00 2.121320343560e+00 3.919724743071e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +-1.500000000000e+00 -5.000000000000e-01 3.296094971545e+00 1.581138830084e+00 3.655713618631e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +-1.500000000000e+00 5.000000000000e-01 3.296094971545e+00 1.581138830084e+00 3.655713618631e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +-1.500000000000e+00 1.500000000000e+00 3.296094971545e+00 2.121320343560e+00 3.919724743071e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +-1.500000000000e+00 2.500000000000e+00 3.296094971545e+00 2.915475947423e+00 4.400482026033e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +-1.500000000000e+00 3.500000000000e+00 3.296094971545e+00 3.807886552932e+00 5.036292491649e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +-1.500000000000e+00 -3.500000000000e+00 1.532681249456e+00 3.807886552932e+00 4.104766962013e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +-1.500000000000e+00 -2.500000000000e+00 1.532681249456e+00 2.915475947423e+00 3.293798993933e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +-1.500000000000e+00 -1.500000000000e+00 1.532681249456e+00 2.121320343560e+00 2.617080780647e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +-1.500000000000e+00 -5.000000000000e-01 1.532681249456e+00 1.581138830084e+00 2.202069892722e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +-1.500000000000e+00 5.000000000000e-01 1.532681249456e+00 1.581138830084e+00 2.202069892722e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +-1.500000000000e+00 1.500000000000e+00 1.532681249456e+00 2.121320343560e+00 2.617080780647e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +-1.500000000000e+00 2.500000000000e+00 1.532681249456e+00 2.915475947423e+00 3.293798993933e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +-1.500000000000e+00 3.500000000000e+00 1.532681249456e+00 3.807886552932e+00 4.104766962013e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +-5.000000000000e-01 -3.500000000000e+00 9.500000000033e+00 3.535533905933e+00 1.013656746639e+01 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +-5.000000000000e-01 -2.500000000000e+00 9.500000000033e+00 2.549509756796e+00 9.836157786485e+00 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +-5.000000000000e-01 -1.500000000000e+00 9.500000000033e+00 1.581138830084e+00 9.630680142162e+00 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +-5.000000000000e-01 -5.000000000000e-01 9.500000000033e+00 7.071067811865e-01 9.526279441662e+00 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +-5.000000000000e-01 5.000000000000e-01 9.500000000033e+00 7.071067811865e-01 9.526279441662e+00 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +-5.000000000000e-01 1.500000000000e+00 9.500000000033e+00 1.581138830084e+00 9.630680142162e+00 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +-5.000000000000e-01 2.500000000000e+00 9.500000000033e+00 2.549509756796e+00 9.836157786485e+00 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +-5.000000000000e-01 3.500000000000e+00 9.500000000033e+00 3.535533905933e+00 1.013656746639e+01 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +-5.000000000000e-01 -3.500000000000e+00 8.500000000000e+00 3.535533905933e+00 9.205976319761e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +-5.000000000000e-01 -2.500000000000e+00 8.500000000000e+00 2.549509756796e+00 8.874119674649e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +-5.000000000000e-01 -1.500000000000e+00 8.500000000000e+00 1.581138830084e+00 8.645808232895e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +-5.000000000000e-01 -5.000000000000e-01 8.500000000000e+00 7.071067811865e-01 8.529361054616e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +-5.000000000000e-01 5.000000000000e-01 8.500000000000e+00 7.071067811865e-01 8.529361054616e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +-5.000000000000e-01 1.500000000000e+00 8.500000000000e+00 1.581138830084e+00 8.645808232895e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +-5.000000000000e-01 2.500000000000e+00 8.500000000000e+00 2.549509756796e+00 8.874119674649e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +-5.000000000000e-01 3.500000000000e+00 8.500000000000e+00 3.535533905933e+00 9.205976319761e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +-5.000000000000e-01 -3.500000000000e+00 7.500000000008e+00 3.535533905933e+00 8.291561975895e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +-5.000000000000e-01 -2.500000000000e+00 7.500000000008e+00 2.549509756796e+00 7.921489758885e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +-5.000000000000e-01 -1.500000000000e+00 7.500000000008e+00 1.581138830084e+00 7.664854858385e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +-5.000000000000e-01 -5.000000000000e-01 7.500000000008e+00 7.071067811865e-01 7.533259586667e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +-5.000000000000e-01 5.000000000000e-01 7.500000000008e+00 7.071067811865e-01 7.533259586667e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +-5.000000000000e-01 1.500000000000e+00 7.500000000008e+00 1.581138830084e+00 7.664854858385e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +-5.000000000000e-01 2.500000000000e+00 7.500000000008e+00 2.549509756796e+00 7.921489758885e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +-5.000000000000e-01 3.500000000000e+00 7.500000000008e+00 3.535533905933e+00 8.291561975895e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +-5.000000000000e-01 -3.500000000000e+00 6.500004552938e+00 3.535533905933e+00 7.399328293042e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +-5.000000000000e-01 -2.500000000000e+00 6.500004552938e+00 2.549509756796e+00 6.982124260439e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +-5.000000000000e-01 -1.500000000000e+00 6.500004552938e+00 1.581138830084e+00 6.689548504063e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +-5.000000000000e-01 -5.000000000000e-01 6.500004552938e+00 7.071067811865e-01 6.538352941546e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +-5.000000000000e-01 5.000000000000e-01 6.500004552938e+00 7.071067811865e-01 6.538352941546e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +-5.000000000000e-01 1.500000000000e+00 6.500004552938e+00 1.581138830084e+00 6.689548504063e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +-5.000000000000e-01 2.500000000000e+00 6.500004552938e+00 2.549509756796e+00 6.982124260439e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +-5.000000000000e-01 3.500000000000e+00 6.500004552938e+00 3.535533905933e+00 7.399328293042e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +-5.000000000000e-01 -3.500000000000e+00 5.503774481144e+00 3.535533905933e+00 6.541523793375e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +-5.000000000000e-01 -2.500000000000e+00 5.503774481144e+00 2.549509756796e+00 6.065602487741e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +-5.000000000000e-01 -1.500000000000e+00 5.503774481144e+00 1.581138830084e+00 5.726389223524e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +-5.000000000000e-01 -5.000000000000e-01 5.503774481144e+00 7.071067811865e-01 5.549011942615e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +-5.000000000000e-01 5.000000000000e-01 5.503774481144e+00 7.071067811865e-01 5.549011942615e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +-5.000000000000e-01 1.500000000000e+00 5.503774481144e+00 1.581138830084e+00 5.726389223524e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +-5.000000000000e-01 2.500000000000e+00 5.503774481144e+00 2.549509756796e+00 6.065602487741e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +-5.000000000000e-01 3.500000000000e+00 5.503774481144e+00 3.535533905933e+00 6.541523793375e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +-5.000000000000e-01 -3.500000000000e+00 4.601481985862e+00 3.535533905933e+00 5.802898970878e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +-5.000000000000e-01 -2.500000000000e+00 4.601481985862e+00 2.549509756796e+00 5.260573777281e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +-5.000000000000e-01 -1.500000000000e+00 4.601481985862e+00 1.581138830084e+00 4.865556131236e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +-5.000000000000e-01 -5.000000000000e-01 4.601481985862e+00 7.071067811865e-01 4.655495297625e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +-5.000000000000e-01 5.000000000000e-01 4.601481985862e+00 7.071067811865e-01 4.655495297625e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +-5.000000000000e-01 1.500000000000e+00 4.601481985862e+00 1.581138830084e+00 4.865556131236e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +-5.000000000000e-01 2.500000000000e+00 4.601481985862e+00 2.549509756796e+00 5.260573777281e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +-5.000000000000e-01 3.500000000000e+00 4.601481985862e+00 3.535533905933e+00 5.802898970878e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +-5.000000000000e-01 -3.500000000000e+00 4.014394513860e+00 3.535533905933e+00 5.349332978317e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +-5.000000000000e-01 -2.500000000000e+00 4.014394513860e+00 2.549509756796e+00 4.755561303664e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +-5.000000000000e-01 -1.500000000000e+00 4.014394513860e+00 1.581138830084e+00 4.314552504363e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +-5.000000000000e-01 -5.000000000000e-01 4.014394513860e+00 7.071067811865e-01 4.076194709887e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +-5.000000000000e-01 5.000000000000e-01 4.014394513860e+00 7.071067811865e-01 4.076194709887e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +-5.000000000000e-01 1.500000000000e+00 4.014394513860e+00 1.581138830084e+00 4.314552504363e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +-5.000000000000e-01 2.500000000000e+00 4.014394513860e+00 2.549509756796e+00 4.755561303664e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +-5.000000000000e-01 3.500000000000e+00 4.014394513860e+00 3.535533905933e+00 5.349332978317e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +-5.000000000000e-01 -3.500000000000e+00 3.680096178300e+00 3.535533905933e+00 5.103244838486e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +-5.000000000000e-01 -2.500000000000e+00 3.680096178300e+00 2.549509756796e+00 4.476952968430e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +-5.000000000000e-01 -1.500000000000e+00 3.680096178300e+00 1.581138830084e+00 4.005384860602e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +-5.000000000000e-01 -5.000000000000e-01 3.680096178300e+00 7.071067811865e-01 3.747413492202e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +-5.000000000000e-01 5.000000000000e-01 3.680096178300e+00 7.071067811865e-01 3.747413492202e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +-5.000000000000e-01 1.500000000000e+00 3.680096178300e+00 1.581138830084e+00 4.005384860602e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +-5.000000000000e-01 2.500000000000e+00 3.680096178300e+00 2.549509756796e+00 4.476952968430e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +-5.000000000000e-01 3.500000000000e+00 3.680096178300e+00 3.535533905933e+00 5.103244838486e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +-5.000000000000e-01 -3.500000000000e+00 3.296094971545e+00 3.535533905933e+00 4.833657213895e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +-5.000000000000e-01 -2.500000000000e+00 3.296094971545e+00 2.549509756796e+00 4.167042363769e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +-5.000000000000e-01 -1.500000000000e+00 3.296094971545e+00 1.581138830084e+00 3.655713618631e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +-5.000000000000e-01 -5.000000000000e-01 3.296094971545e+00 7.071067811865e-01 3.371089150622e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +-5.000000000000e-01 5.000000000000e-01 3.296094971545e+00 7.071067811865e-01 3.371089150622e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +-5.000000000000e-01 1.500000000000e+00 3.296094971545e+00 1.581138830084e+00 3.655713618631e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +-5.000000000000e-01 2.500000000000e+00 3.296094971545e+00 2.549509756796e+00 4.167042363769e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +-5.000000000000e-01 3.500000000000e+00 3.296094971545e+00 3.535533905933e+00 4.833657213895e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +-5.000000000000e-01 -3.500000000000e+00 1.532681249456e+00 3.535533905933e+00 3.853454529696e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +-5.000000000000e-01 -2.500000000000e+00 1.532681249456e+00 2.549509756796e+00 2.974745671891e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +-5.000000000000e-01 -1.500000000000e+00 1.532681249456e+00 1.581138830084e+00 2.202069892722e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +-5.000000000000e-01 -5.000000000000e-01 1.532681249456e+00 7.071067811865e-01 1.687931222661e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +-5.000000000000e-01 5.000000000000e-01 1.532681249456e+00 7.071067811865e-01 1.687931222661e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +-5.000000000000e-01 1.500000000000e+00 1.532681249456e+00 1.581138830084e+00 2.202069892722e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +-5.000000000000e-01 2.500000000000e+00 1.532681249456e+00 2.549509756796e+00 2.974745671891e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +-5.000000000000e-01 3.500000000000e+00 1.532681249456e+00 3.535533905933e+00 3.853454529696e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +5.000000000000e-01 -3.500000000000e+00 9.500000000033e+00 3.535533905933e+00 1.013656746639e+01 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +5.000000000000e-01 -2.500000000000e+00 9.500000000033e+00 2.549509756796e+00 9.836157786485e+00 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +5.000000000000e-01 -1.500000000000e+00 9.500000000033e+00 1.581138830084e+00 9.630680142162e+00 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +5.000000000000e-01 -5.000000000000e-01 9.500000000033e+00 7.071067811865e-01 9.526279441662e+00 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +5.000000000000e-01 5.000000000000e-01 9.500000000033e+00 7.071067811865e-01 9.526279441662e+00 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +5.000000000000e-01 1.500000000000e+00 9.500000000033e+00 1.581138830084e+00 9.630680142162e+00 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +5.000000000000e-01 2.500000000000e+00 9.500000000033e+00 2.549509756796e+00 9.836157786485e+00 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +5.000000000000e-01 3.500000000000e+00 9.500000000033e+00 3.535533905933e+00 1.013656746639e+01 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +5.000000000000e-01 -3.500000000000e+00 8.500000000000e+00 3.535533905933e+00 9.205976319761e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +5.000000000000e-01 -2.500000000000e+00 8.500000000000e+00 2.549509756796e+00 8.874119674649e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +5.000000000000e-01 -1.500000000000e+00 8.500000000000e+00 1.581138830084e+00 8.645808232895e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +5.000000000000e-01 -5.000000000000e-01 8.500000000000e+00 7.071067811865e-01 8.529361054616e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +5.000000000000e-01 5.000000000000e-01 8.500000000000e+00 7.071067811865e-01 8.529361054616e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +5.000000000000e-01 1.500000000000e+00 8.500000000000e+00 1.581138830084e+00 8.645808232895e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +5.000000000000e-01 2.500000000000e+00 8.500000000000e+00 2.549509756796e+00 8.874119674649e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +5.000000000000e-01 3.500000000000e+00 8.500000000000e+00 3.535533905933e+00 9.205976319761e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +5.000000000000e-01 -3.500000000000e+00 7.500000000008e+00 3.535533905933e+00 8.291561975895e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +5.000000000000e-01 -2.500000000000e+00 7.500000000008e+00 2.549509756796e+00 7.921489758885e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +5.000000000000e-01 -1.500000000000e+00 7.500000000008e+00 1.581138830084e+00 7.664854858385e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +5.000000000000e-01 -5.000000000000e-01 7.500000000008e+00 7.071067811865e-01 7.533259586667e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +5.000000000000e-01 5.000000000000e-01 7.500000000008e+00 7.071067811865e-01 7.533259586667e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +5.000000000000e-01 1.500000000000e+00 7.500000000008e+00 1.581138830084e+00 7.664854858385e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +5.000000000000e-01 2.500000000000e+00 7.500000000008e+00 2.549509756796e+00 7.921489758885e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +5.000000000000e-01 3.500000000000e+00 7.500000000008e+00 3.535533905933e+00 8.291561975895e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +5.000000000000e-01 -3.500000000000e+00 6.500004552938e+00 3.535533905933e+00 7.399328293042e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +5.000000000000e-01 -2.500000000000e+00 6.500004552938e+00 2.549509756796e+00 6.982124260439e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +5.000000000000e-01 -1.500000000000e+00 6.500004552938e+00 1.581138830084e+00 6.689548504063e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +5.000000000000e-01 -5.000000000000e-01 6.500004552938e+00 7.071067811865e-01 6.538352941546e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +5.000000000000e-01 5.000000000000e-01 6.500004552938e+00 7.071067811865e-01 6.538352941546e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +5.000000000000e-01 1.500000000000e+00 6.500004552938e+00 1.581138830084e+00 6.689548504063e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +5.000000000000e-01 2.500000000000e+00 6.500004552938e+00 2.549509756796e+00 6.982124260439e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +5.000000000000e-01 3.500000000000e+00 6.500004552938e+00 3.535533905933e+00 7.399328293042e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +5.000000000000e-01 -3.500000000000e+00 5.503774481144e+00 3.535533905933e+00 6.541523793375e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +5.000000000000e-01 -2.500000000000e+00 5.503774481144e+00 2.549509756796e+00 6.065602487741e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +5.000000000000e-01 -1.500000000000e+00 5.503774481144e+00 1.581138830084e+00 5.726389223524e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +5.000000000000e-01 -5.000000000000e-01 5.503774481144e+00 7.071067811865e-01 5.549011942615e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +5.000000000000e-01 5.000000000000e-01 5.503774481144e+00 7.071067811865e-01 5.549011942615e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +5.000000000000e-01 1.500000000000e+00 5.503774481144e+00 1.581138830084e+00 5.726389223524e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +5.000000000000e-01 2.500000000000e+00 5.503774481144e+00 2.549509756796e+00 6.065602487741e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +5.000000000000e-01 3.500000000000e+00 5.503774481144e+00 3.535533905933e+00 6.541523793375e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +5.000000000000e-01 -3.500000000000e+00 4.601481985862e+00 3.535533905933e+00 5.802898970878e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +5.000000000000e-01 -2.500000000000e+00 4.601481985862e+00 2.549509756796e+00 5.260573777281e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +5.000000000000e-01 -1.500000000000e+00 4.601481985862e+00 1.581138830084e+00 4.865556131236e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +5.000000000000e-01 -5.000000000000e-01 4.601481985862e+00 7.071067811865e-01 4.655495297625e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +5.000000000000e-01 5.000000000000e-01 4.601481985862e+00 7.071067811865e-01 4.655495297625e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +5.000000000000e-01 1.500000000000e+00 4.601481985862e+00 1.581138830084e+00 4.865556131236e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +5.000000000000e-01 2.500000000000e+00 4.601481985862e+00 2.549509756796e+00 5.260573777281e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +5.000000000000e-01 3.500000000000e+00 4.601481985862e+00 3.535533905933e+00 5.802898970878e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +5.000000000000e-01 -3.500000000000e+00 4.014394513860e+00 3.535533905933e+00 5.349332978317e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +5.000000000000e-01 -2.500000000000e+00 4.014394513860e+00 2.549509756796e+00 4.755561303664e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +5.000000000000e-01 -1.500000000000e+00 4.014394513860e+00 1.581138830084e+00 4.314552504363e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +5.000000000000e-01 -5.000000000000e-01 4.014394513860e+00 7.071067811865e-01 4.076194709887e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +5.000000000000e-01 5.000000000000e-01 4.014394513860e+00 7.071067811865e-01 4.076194709887e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +5.000000000000e-01 1.500000000000e+00 4.014394513860e+00 1.581138830084e+00 4.314552504363e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +5.000000000000e-01 2.500000000000e+00 4.014394513860e+00 2.549509756796e+00 4.755561303664e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +5.000000000000e-01 3.500000000000e+00 4.014394513860e+00 3.535533905933e+00 5.349332978317e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +5.000000000000e-01 -3.500000000000e+00 3.680096178300e+00 3.535533905933e+00 5.103244838486e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +5.000000000000e-01 -2.500000000000e+00 3.680096178300e+00 2.549509756796e+00 4.476952968430e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +5.000000000000e-01 -1.500000000000e+00 3.680096178300e+00 1.581138830084e+00 4.005384860602e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +5.000000000000e-01 -5.000000000000e-01 3.680096178300e+00 7.071067811865e-01 3.747413492202e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +5.000000000000e-01 5.000000000000e-01 3.680096178300e+00 7.071067811865e-01 3.747413492202e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +5.000000000000e-01 1.500000000000e+00 3.680096178300e+00 1.581138830084e+00 4.005384860602e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +5.000000000000e-01 2.500000000000e+00 3.680096178300e+00 2.549509756796e+00 4.476952968430e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +5.000000000000e-01 3.500000000000e+00 3.680096178300e+00 3.535533905933e+00 5.103244838486e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +5.000000000000e-01 -3.500000000000e+00 3.296094971545e+00 3.535533905933e+00 4.833657213895e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +5.000000000000e-01 -2.500000000000e+00 3.296094971545e+00 2.549509756796e+00 4.167042363769e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +5.000000000000e-01 -1.500000000000e+00 3.296094971545e+00 1.581138830084e+00 3.655713618631e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +5.000000000000e-01 -5.000000000000e-01 3.296094971545e+00 7.071067811865e-01 3.371089150622e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +5.000000000000e-01 5.000000000000e-01 3.296094971545e+00 7.071067811865e-01 3.371089150622e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +5.000000000000e-01 1.500000000000e+00 3.296094971545e+00 1.581138830084e+00 3.655713618631e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +5.000000000000e-01 2.500000000000e+00 3.296094971545e+00 2.549509756796e+00 4.167042363769e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +5.000000000000e-01 3.500000000000e+00 3.296094971545e+00 3.535533905933e+00 4.833657213895e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +5.000000000000e-01 -3.500000000000e+00 1.532681249456e+00 3.535533905933e+00 3.853454529696e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +5.000000000000e-01 -2.500000000000e+00 1.532681249456e+00 2.549509756796e+00 2.974745671891e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +5.000000000000e-01 -1.500000000000e+00 1.532681249456e+00 1.581138830084e+00 2.202069892722e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +5.000000000000e-01 -5.000000000000e-01 1.532681249456e+00 7.071067811865e-01 1.687931222661e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +5.000000000000e-01 5.000000000000e-01 1.532681249456e+00 7.071067811865e-01 1.687931222661e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +5.000000000000e-01 1.500000000000e+00 1.532681249456e+00 1.581138830084e+00 2.202069892722e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +5.000000000000e-01 2.500000000000e+00 1.532681249456e+00 2.549509756796e+00 2.974745671891e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +5.000000000000e-01 3.500000000000e+00 1.532681249456e+00 3.535533905933e+00 3.853454529696e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +1.500000000000e+00 -3.500000000000e+00 9.500000000033e+00 3.807886552932e+00 1.023474474526e+01 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +1.500000000000e+00 -2.500000000000e+00 9.500000000033e+00 2.915475947423e+00 9.937303457208e+00 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +1.500000000000e+00 -1.500000000000e+00 9.500000000033e+00 2.121320343560e+00 9.733961166998e+00 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +1.500000000000e+00 -5.000000000000e-01 9.500000000033e+00 1.581138830084e+00 9.630680142162e+00 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +1.500000000000e+00 5.000000000000e-01 9.500000000033e+00 1.581138830084e+00 9.630680142162e+00 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +1.500000000000e+00 1.500000000000e+00 9.500000000033e+00 2.121320343560e+00 9.733961166998e+00 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +1.500000000000e+00 2.500000000000e+00 9.500000000033e+00 2.915475947423e+00 9.937303457208e+00 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +1.500000000000e+00 3.500000000000e+00 9.500000000033e+00 3.807886552932e+00 1.023474474526e+01 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +1.500000000000e+00 -3.500000000000e+00 8.500000000000e+00 3.807886552932e+00 9.313968005099e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +1.500000000000e+00 -2.500000000000e+00 8.500000000000e+00 2.915475947423e+00 8.986100377806e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +1.500000000000e+00 -1.500000000000e+00 8.500000000000e+00 2.121320343560e+00 8.760707733968e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +1.500000000000e+00 -5.000000000000e-01 8.500000000000e+00 1.581138830084e+00 8.645808232895e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +1.500000000000e+00 5.000000000000e-01 8.500000000000e+00 1.581138830084e+00 8.645808232895e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +1.500000000000e+00 1.500000000000e+00 8.500000000000e+00 2.121320343560e+00 8.760707733968e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +1.500000000000e+00 2.500000000000e+00 8.500000000000e+00 2.915475947423e+00 8.986100377806e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +1.500000000000e+00 3.500000000000e+00 8.500000000000e+00 3.807886552932e+00 9.313968005099e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +1.500000000000e+00 -3.500000000000e+00 7.500000000008e+00 3.807886552932e+00 8.411301920637e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +1.500000000000e+00 -2.500000000000e+00 7.500000000008e+00 2.915475947423e+00 8.046738469723e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +1.500000000000e+00 -1.500000000000e+00 7.500000000008e+00 2.121320343560e+00 7.794228634067e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +1.500000000000e+00 -5.000000000000e-01 7.500000000008e+00 1.581138830084e+00 7.664854858385e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +1.500000000000e+00 5.000000000000e-01 7.500000000008e+00 1.581138830084e+00 7.664854858385e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +1.500000000000e+00 1.500000000000e+00 7.500000000008e+00 2.121320343560e+00 7.794228634067e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +1.500000000000e+00 2.500000000000e+00 7.500000000008e+00 2.915475947423e+00 8.046738469723e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +1.500000000000e+00 3.500000000000e+00 7.500000000008e+00 3.807886552932e+00 8.411301920637e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +1.500000000000e+00 -3.500000000000e+00 6.500004552938e+00 3.807886552932e+00 7.533263515119e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +1.500000000000e+00 -2.500000000000e+00 6.500004552938e+00 2.915475947423e+00 7.123907578585e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +1.500000000000e+00 -1.500000000000e+00 6.500004552938e+00 2.121320343560e+00 6.837401493858e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +1.500000000000e+00 -5.000000000000e-01 6.500004552938e+00 1.581138830084e+00 6.689548504063e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +1.500000000000e+00 5.000000000000e-01 6.500004552938e+00 1.581138830084e+00 6.689548504063e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +1.500000000000e+00 1.500000000000e+00 6.500004552938e+00 2.121320343560e+00 6.837401493858e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +1.500000000000e+00 2.500000000000e+00 6.500004552938e+00 2.915475947423e+00 7.123907578585e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +1.500000000000e+00 3.500000000000e+00 6.500004552938e+00 3.807886552932e+00 7.533263515119e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +1.500000000000e+00 -3.500000000000e+00 5.503774481144e+00 3.807886552932e+00 6.692647722635e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +1.500000000000e+00 -2.500000000000e+00 5.503774481144e+00 2.915475947423e+00 6.228284959705e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +1.500000000000e+00 -1.500000000000e+00 5.503774481144e+00 2.121320343560e+00 5.898434838098e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +1.500000000000e+00 -5.000000000000e-01 5.503774481144e+00 1.581138830084e+00 5.726389223524e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +1.500000000000e+00 5.000000000000e-01 5.503774481144e+00 1.581138830084e+00 5.726389223524e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +1.500000000000e+00 1.500000000000e+00 5.503774481144e+00 2.121320343560e+00 5.898434838098e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +1.500000000000e+00 2.500000000000e+00 5.503774481144e+00 2.915475947423e+00 6.228284959705e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +1.500000000000e+00 3.500000000000e+00 5.503774481144e+00 3.807886552932e+00 6.692647722635e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +1.500000000000e+00 -3.500000000000e+00 4.601481985862e+00 3.807886552932e+00 5.972741118298e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +1.500000000000e+00 -2.500000000000e+00 4.601481985862e+00 2.915475947423e+00 5.447351325756e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +1.500000000000e+00 -1.500000000000e+00 4.601481985862e+00 2.121320343560e+00 5.066915873212e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +1.500000000000e+00 -5.000000000000e-01 4.601481985862e+00 1.581138830084e+00 4.865556131236e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +1.500000000000e+00 5.000000000000e-01 4.601481985862e+00 1.581138830084e+00 4.865556131236e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +1.500000000000e+00 1.500000000000e+00 4.601481985862e+00 2.121320343560e+00 5.066915873212e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +1.500000000000e+00 2.500000000000e+00 4.601481985862e+00 2.915475947423e+00 5.447351325756e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +1.500000000000e+00 3.500000000000e+00 4.601481985862e+00 3.807886552932e+00 5.972741118298e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +1.500000000000e+00 -3.500000000000e+00 4.014394513860e+00 3.807886552932e+00 5.533115154496e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +1.500000000000e+00 -2.500000000000e+00 4.014394513860e+00 2.915475947423e+00 4.961387236742e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +1.500000000000e+00 -1.500000000000e+00 4.014394513860e+00 2.121320343560e+00 4.540414442857e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +1.500000000000e+00 -5.000000000000e-01 4.014394513860e+00 1.581138830084e+00 4.314552504363e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +1.500000000000e+00 5.000000000000e-01 4.014394513860e+00 1.581138830084e+00 4.314552504363e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +1.500000000000e+00 1.500000000000e+00 4.014394513860e+00 2.121320343560e+00 4.540414442857e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +1.500000000000e+00 2.500000000000e+00 4.014394513860e+00 2.915475947423e+00 4.961387236742e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +1.500000000000e+00 3.500000000000e+00 4.014394513860e+00 3.807886552932e+00 5.533115154496e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +1.500000000000e+00 -3.500000000000e+00 3.680096178300e+00 3.807886552932e+00 5.295574367482e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +1.500000000000e+00 -2.500000000000e+00 3.680096178300e+00 2.915475947423e+00 4.695008826566e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +1.500000000000e+00 -1.500000000000e+00 3.680096178300e+00 2.121320343560e+00 4.247717961628e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +1.500000000000e+00 -5.000000000000e-01 3.680096178300e+00 1.581138830084e+00 4.005384860602e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +1.500000000000e+00 5.000000000000e-01 3.680096178300e+00 1.581138830084e+00 4.005384860602e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +1.500000000000e+00 1.500000000000e+00 3.680096178300e+00 2.121320343560e+00 4.247717961628e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +1.500000000000e+00 2.500000000000e+00 3.680096178300e+00 2.915475947423e+00 4.695008826566e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +1.500000000000e+00 3.500000000000e+00 3.680096178300e+00 3.807886552932e+00 5.295574367482e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +1.500000000000e+00 -3.500000000000e+00 3.296094971545e+00 3.807886552932e+00 5.036292491649e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +1.500000000000e+00 -2.500000000000e+00 3.296094971545e+00 2.915475947423e+00 4.400482026033e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +1.500000000000e+00 -1.500000000000e+00 3.296094971545e+00 2.121320343560e+00 3.919724743071e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +1.500000000000e+00 -5.000000000000e-01 3.296094971545e+00 1.581138830084e+00 3.655713618631e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +1.500000000000e+00 5.000000000000e-01 3.296094971545e+00 1.581138830084e+00 3.655713618631e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +1.500000000000e+00 1.500000000000e+00 3.296094971545e+00 2.121320343560e+00 3.919724743071e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +1.500000000000e+00 2.500000000000e+00 3.296094971545e+00 2.915475947423e+00 4.400482026033e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +1.500000000000e+00 3.500000000000e+00 3.296094971545e+00 3.807886552932e+00 5.036292491649e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +1.500000000000e+00 -3.500000000000e+00 1.532681249456e+00 3.807886552932e+00 4.104766962013e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +1.500000000000e+00 -2.500000000000e+00 1.532681249456e+00 2.915475947423e+00 3.293798993933e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +1.500000000000e+00 -1.500000000000e+00 1.532681249456e+00 2.121320343560e+00 2.617080780647e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +1.500000000000e+00 -5.000000000000e-01 1.532681249456e+00 1.581138830084e+00 2.202069892722e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +1.500000000000e+00 5.000000000000e-01 1.532681249456e+00 1.581138830084e+00 2.202069892722e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +1.500000000000e+00 1.500000000000e+00 1.532681249456e+00 2.121320343560e+00 2.617080780647e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +1.500000000000e+00 2.500000000000e+00 1.532681249456e+00 2.915475947423e+00 3.293798993933e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +1.500000000000e+00 3.500000000000e+00 1.532681249456e+00 3.807886552932e+00 4.104766962013e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +2.500000000000e+00 -3.500000000000e+00 9.500000000033e+00 4.301162633521e+00 1.042832680734e+01 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +2.500000000000e+00 -2.500000000000e+00 9.500000000033e+00 3.535533905933e+00 1.013656746639e+01 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +2.500000000000e+00 -1.500000000000e+00 9.500000000033e+00 2.915475947423e+00 9.937303457208e+00 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +2.500000000000e+00 -5.000000000000e-01 9.500000000033e+00 2.549509756796e+00 9.836157786485e+00 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +2.500000000000e+00 5.000000000000e-01 9.500000000033e+00 2.549509756796e+00 9.836157786485e+00 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +2.500000000000e+00 1.500000000000e+00 9.500000000033e+00 2.915475947423e+00 9.937303457208e+00 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +2.500000000000e+00 2.500000000000e+00 9.500000000033e+00 3.535533905933e+00 1.013656746639e+01 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +2.500000000000e+00 3.500000000000e+00 9.500000000033e+00 4.301162633521e+00 1.042832680734e+01 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +2.500000000000e+00 -3.500000000000e+00 8.500000000000e+00 4.301162633521e+00 9.526279441629e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +2.500000000000e+00 -2.500000000000e+00 8.500000000000e+00 3.535533905933e+00 9.205976319761e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +2.500000000000e+00 -1.500000000000e+00 8.500000000000e+00 2.915475947423e+00 8.986100377806e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +2.500000000000e+00 -5.000000000000e-01 8.500000000000e+00 2.549509756796e+00 8.874119674649e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +2.500000000000e+00 5.000000000000e-01 8.500000000000e+00 2.549509756796e+00 8.874119674649e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +2.500000000000e+00 1.500000000000e+00 8.500000000000e+00 2.915475947423e+00 8.986100377806e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +2.500000000000e+00 2.500000000000e+00 8.500000000000e+00 3.535533905933e+00 9.205976319761e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +2.500000000000e+00 3.500000000000e+00 8.500000000000e+00 4.301162633521e+00 9.526279441629e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +2.500000000000e+00 -3.500000000000e+00 7.500000000008e+00 4.301162633521e+00 8.645808232902e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +2.500000000000e+00 -2.500000000000e+00 7.500000000008e+00 3.535533905933e+00 8.291561975895e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +2.500000000000e+00 -1.500000000000e+00 7.500000000008e+00 2.915475947423e+00 8.046738469723e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +2.500000000000e+00 -5.000000000000e-01 7.500000000008e+00 2.549509756796e+00 7.921489758885e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +2.500000000000e+00 5.000000000000e-01 7.500000000008e+00 2.549509756796e+00 7.921489758885e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +2.500000000000e+00 1.500000000000e+00 7.500000000008e+00 2.915475947423e+00 8.046738469723e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +2.500000000000e+00 2.500000000000e+00 7.500000000008e+00 3.535533905933e+00 8.291561975895e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +2.500000000000e+00 3.500000000000e+00 7.500000000008e+00 4.301162633521e+00 8.645808232902e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +2.500000000000e+00 -3.500000000000e+00 6.500004552938e+00 4.301162633521e+00 7.794232430985e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +2.500000000000e+00 -2.500000000000e+00 6.500004552938e+00 3.535533905933e+00 7.399328293042e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +2.500000000000e+00 -1.500000000000e+00 6.500004552938e+00 2.915475947423e+00 7.123907578585e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +2.500000000000e+00 -5.000000000000e-01 6.500004552938e+00 2.549509756796e+00 6.982124260439e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +2.500000000000e+00 5.000000000000e-01 6.500004552938e+00 2.549509756796e+00 6.982124260439e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +2.500000000000e+00 1.500000000000e+00 6.500004552938e+00 2.915475947423e+00 7.123907578585e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +2.500000000000e+00 2.500000000000e+00 6.500004552938e+00 3.535533905933e+00 7.399328293042e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +2.500000000000e+00 3.500000000000e+00 6.500004552938e+00 4.301162633521e+00 7.794232430985e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +2.500000000000e+00 -3.500000000000e+00 5.503774481144e+00 4.301162633521e+00 6.985093667181e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +2.500000000000e+00 -2.500000000000e+00 5.503774481144e+00 3.535533905933e+00 6.541523793375e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +2.500000000000e+00 -1.500000000000e+00 5.503774481144e+00 2.915475947423e+00 6.228284959705e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +2.500000000000e+00 -5.000000000000e-01 5.503774481144e+00 2.549509756796e+00 6.065602487741e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +2.500000000000e+00 5.000000000000e-01 5.503774481144e+00 2.549509756796e+00 6.065602487741e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +2.500000000000e+00 1.500000000000e+00 5.503774481144e+00 2.915475947423e+00 6.228284959705e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +2.500000000000e+00 2.500000000000e+00 5.503774481144e+00 3.535533905933e+00 6.541523793375e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +2.500000000000e+00 3.500000000000e+00 5.503774481144e+00 4.301162633521e+00 6.985093667181e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +2.500000000000e+00 -3.500000000000e+00 4.601481985862e+00 4.301162633521e+00 6.298701172957e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +2.500000000000e+00 -2.500000000000e+00 4.601481985862e+00 3.535533905933e+00 5.802898970878e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +2.500000000000e+00 -1.500000000000e+00 4.601481985862e+00 2.915475947423e+00 5.447351325756e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +2.500000000000e+00 -5.000000000000e-01 4.601481985862e+00 2.549509756796e+00 5.260573777281e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +2.500000000000e+00 5.000000000000e-01 4.601481985862e+00 2.549509756796e+00 5.260573777281e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +2.500000000000e+00 1.500000000000e+00 4.601481985862e+00 2.915475947423e+00 5.447351325756e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +2.500000000000e+00 2.500000000000e+00 4.601481985862e+00 3.535533905933e+00 5.802898970878e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +2.500000000000e+00 3.500000000000e+00 4.601481985862e+00 4.301162633521e+00 6.298701172957e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +2.500000000000e+00 -3.500000000000e+00 4.014394513860e+00 4.301162633521e+00 5.883482243783e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +2.500000000000e+00 -2.500000000000e+00 4.014394513860e+00 3.535533905933e+00 5.349332978317e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +2.500000000000e+00 -1.500000000000e+00 4.014394513860e+00 2.915475947423e+00 4.961387236742e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +2.500000000000e+00 -5.000000000000e-01 4.014394513860e+00 2.549509756796e+00 4.755561303664e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +2.500000000000e+00 5.000000000000e-01 4.014394513860e+00 2.549509756796e+00 4.755561303664e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +2.500000000000e+00 1.500000000000e+00 4.014394513860e+00 2.915475947423e+00 4.961387236742e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +2.500000000000e+00 2.500000000000e+00 4.014394513860e+00 3.535533905933e+00 5.349332978317e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +2.500000000000e+00 3.500000000000e+00 4.014394513860e+00 4.301162633521e+00 5.883482243783e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +2.500000000000e+00 -3.500000000000e+00 3.680096178300e+00 4.301162633521e+00 5.660663201564e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +2.500000000000e+00 -2.500000000000e+00 3.680096178300e+00 3.535533905933e+00 5.103244838486e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +2.500000000000e+00 -1.500000000000e+00 3.680096178300e+00 2.915475947423e+00 4.695008826566e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +2.500000000000e+00 -5.000000000000e-01 3.680096178300e+00 2.549509756796e+00 4.476952968430e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +2.500000000000e+00 5.000000000000e-01 3.680096178300e+00 2.549509756796e+00 4.476952968430e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +2.500000000000e+00 1.500000000000e+00 3.680096178300e+00 2.915475947423e+00 4.695008826566e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +2.500000000000e+00 2.500000000000e+00 3.680096178300e+00 3.535533905933e+00 5.103244838486e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +2.500000000000e+00 3.500000000000e+00 3.680096178300e+00 4.301162633521e+00 5.660663201564e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +2.500000000000e+00 -3.500000000000e+00 3.296094971545e+00 4.301162633521e+00 5.418878302882e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +2.500000000000e+00 -2.500000000000e+00 3.296094971545e+00 3.535533905933e+00 4.833657213895e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +2.500000000000e+00 -1.500000000000e+00 3.296094971545e+00 2.915475947423e+00 4.400482026033e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +2.500000000000e+00 -5.000000000000e-01 3.296094971545e+00 2.549509756796e+00 4.167042363769e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +2.500000000000e+00 5.000000000000e-01 3.296094971545e+00 2.549509756796e+00 4.167042363769e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +2.500000000000e+00 1.500000000000e+00 3.296094971545e+00 2.915475947423e+00 4.400482026033e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +2.500000000000e+00 2.500000000000e+00 3.296094971545e+00 3.535533905933e+00 4.833657213895e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +2.500000000000e+00 3.500000000000e+00 3.296094971545e+00 4.301162633521e+00 5.418878302882e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +2.500000000000e+00 -3.500000000000e+00 1.532681249456e+00 4.301162633521e+00 4.566082764519e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +2.500000000000e+00 -2.500000000000e+00 1.532681249456e+00 3.535533905933e+00 3.853454529696e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +2.500000000000e+00 -1.500000000000e+00 1.532681249456e+00 2.915475947423e+00 3.293798993933e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +2.500000000000e+00 -5.000000000000e-01 1.532681249456e+00 2.549509756796e+00 2.974745671891e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +2.500000000000e+00 5.000000000000e-01 1.532681249456e+00 2.549509756796e+00 2.974745671891e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +2.500000000000e+00 1.500000000000e+00 1.532681249456e+00 2.915475947423e+00 3.293798993933e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +2.500000000000e+00 2.500000000000e+00 1.532681249456e+00 3.535533905933e+00 3.853454529696e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +2.500000000000e+00 3.500000000000e+00 1.532681249456e+00 4.301162633521e+00 4.566082764519e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +3.500000000000e+00 -3.500000000000e+00 9.500000000033e+00 4.949747468306e+00 1.071214264284e+01 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +3.500000000000e+00 -2.500000000000e+00 9.500000000033e+00 4.301162633521e+00 1.042832680734e+01 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +3.500000000000e+00 -1.500000000000e+00 9.500000000033e+00 3.807886552932e+00 1.023474474526e+01 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +3.500000000000e+00 -5.000000000000e-01 9.500000000033e+00 3.535533905933e+00 1.013656746639e+01 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +3.500000000000e+00 5.000000000000e-01 9.500000000033e+00 3.535533905933e+00 1.013656746639e+01 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +3.500000000000e+00 1.500000000000e+00 9.500000000033e+00 3.807886552932e+00 1.023474474526e+01 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +3.500000000000e+00 2.500000000000e+00 9.500000000033e+00 4.301162633521e+00 1.042832680734e+01 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +3.500000000000e+00 3.500000000000e+00 9.500000000033e+00 4.949747468306e+00 1.071214264284e+01 9.999999999333e-01 6.666666665926e-11 9.999999999556e-11 1.054092553366e-05 1.000000000067e+00 1.000000000000e+00 +3.500000000000e+00 -3.500000000000e+00 8.500000000000e+00 4.949747468306e+00 9.836157786453e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +3.500000000000e+00 -2.500000000000e+00 8.500000000000e+00 4.301162633521e+00 9.526279441629e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +3.500000000000e+00 -1.500000000000e+00 8.500000000000e+00 3.807886552932e+00 9.313968005099e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +3.500000000000e+00 -5.000000000000e-01 8.500000000000e+00 3.535533905933e+00 9.205976319761e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +3.500000000000e+00 5.000000000000e-01 8.500000000000e+00 3.535533905933e+00 9.205976319761e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +3.500000000000e+00 1.500000000000e+00 8.500000000000e+00 3.807886552932e+00 9.313968005099e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +3.500000000000e+00 2.500000000000e+00 8.500000000000e+00 4.301162633521e+00 9.526279441629e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +3.500000000000e+00 3.500000000000e+00 8.500000000000e+00 4.949747468306e+00 9.836157786453e+00 1.000000000000e+00 6.666666666667e-11 1.000000000000e-10 1.054092553389e-05 1.000000000000e+00 1.000000000000e+00 +3.500000000000e+00 -3.500000000000e+00 7.500000000008e+00 4.949747468306e+00 8.986100377812e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +3.500000000000e+00 -2.500000000000e+00 7.500000000008e+00 4.301162633521e+00 8.645808232902e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +3.500000000000e+00 -1.500000000000e+00 7.500000000008e+00 3.807886552932e+00 8.411301920637e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +3.500000000000e+00 -5.000000000000e-01 7.500000000008e+00 3.535533905933e+00 8.291561975895e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +3.500000000000e+00 5.000000000000e-01 7.500000000008e+00 3.535533905933e+00 8.291561975895e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +3.500000000000e+00 1.500000000000e+00 7.500000000008e+00 3.807886552932e+00 8.411301920637e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +3.500000000000e+00 2.500000000000e+00 7.500000000008e+00 4.301162633521e+00 8.645808232902e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +3.500000000000e+00 3.500000000000e+00 7.500000000008e+00 4.949747468306e+00 8.986100377812e+00 1.000000000015e+00 6.666666666837e-11 1.000000000010e-10 1.054092553395e-05 9.999999999847e-01 1.000000000000e+00 +3.500000000000e+00 -3.500000000000e+00 6.500004552938e+00 4.949747468306e+00 8.170070941443e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +3.500000000000e+00 -2.500000000000e+00 6.500004552938e+00 4.301162633521e+00 7.794232430985e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +3.500000000000e+00 -1.500000000000e+00 6.500004552938e+00 3.807886552932e+00 7.533263515119e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +3.500000000000e+00 -5.000000000000e-01 6.500004552938e+00 3.535533905933e+00 7.399328293042e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +3.500000000000e+00 5.000000000000e-01 6.500004552938e+00 3.535533905933e+00 7.399328293042e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +3.500000000000e+00 1.500000000000e+00 6.500004552938e+00 3.807886552932e+00 7.533263515119e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +3.500000000000e+00 2.500000000000e+00 6.500004552938e+00 4.301162633521e+00 7.794232430985e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +3.500000000000e+00 3.500000000000e+00 6.500004552938e+00 4.949747468306e+00 8.170070941443e+00 1.000009105929e+00 6.673385610705e-11 1.000998726583e-10 1.054618797156e-05 9.999908941542e-01 1.000000000000e+00 +3.500000000000e+00 -3.500000000000e+00 5.503774481144e+00 4.949747468306e+00 7.402130337902e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +3.500000000000e+00 -2.500000000000e+00 5.503774481144e+00 4.301162633521e+00 6.985093667181e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +3.500000000000e+00 -1.500000000000e+00 5.503774481144e+00 3.807886552932e+00 6.692647722635e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +3.500000000000e+00 -5.000000000000e-01 5.503774481144e+00 3.535533905933e+00 6.541523793375e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +3.500000000000e+00 5.000000000000e-01 5.503774481144e+00 3.535533905933e+00 6.541523793375e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +3.500000000000e+00 1.500000000000e+00 5.503774481144e+00 3.807886552932e+00 6.692647722635e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +3.500000000000e+00 2.500000000000e+00 5.503774481144e+00 4.301162633521e+00 6.985093667181e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +3.500000000000e+00 3.500000000000e+00 5.503774481144e+00 4.949747468306e+00 7.402130337902e+00 1.007587893095e+00 9.423240791318e-06 1.402841507311e-05 3.948053679854e-03 9.924692494350e-01 1.000000000000e+00 +3.500000000000e+00 -3.500000000000e+00 4.601481985862e+00 4.949747468306e+00 6.758227316850e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +3.500000000000e+00 -2.500000000000e+00 4.601481985862e+00 4.301162633521e+00 6.298701172957e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +3.500000000000e+00 -1.500000000000e+00 4.601481985862e+00 3.807886552932e+00 5.972741118298e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +3.500000000000e+00 -5.000000000000e-01 4.601481985862e+00 3.535533905933e+00 5.802898970878e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +3.500000000000e+00 5.000000000000e-01 4.601481985862e+00 3.535533905933e+00 5.802898970878e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +3.500000000000e+00 1.500000000000e+00 4.601481985862e+00 3.807886552932e+00 5.972741118298e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +3.500000000000e+00 2.500000000000e+00 4.601481985862e+00 4.301162633521e+00 6.298701172957e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +3.500000000000e+00 3.500000000000e+00 4.601481985862e+00 4.949747468306e+00 6.758227316850e+00 1.231351578792e+00 5.775744364526e-02 7.035859372747e-02 2.796000988068e-01 8.121157411283e-01 1.000000000000e+00 +3.500000000000e+00 -3.500000000000e+00 4.014394513860e+00 4.949747468306e+00 6.373018383224e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +3.500000000000e+00 -2.500000000000e+00 4.014394513860e+00 4.301162633521e+00 5.883482243783e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +3.500000000000e+00 -1.500000000000e+00 4.014394513860e+00 3.807886552932e+00 5.533115154496e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +3.500000000000e+00 -5.000000000000e-01 4.014394513860e+00 3.535533905933e+00 5.349332978317e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +3.500000000000e+00 5.000000000000e-01 4.014394513860e+00 3.535533905933e+00 5.349332978317e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +3.500000000000e+00 1.500000000000e+00 4.014394513860e+00 3.807886552932e+00 5.533115154496e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +3.500000000000e+00 2.500000000000e+00 4.014394513860e+00 4.301162633521e+00 5.883482243783e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +3.500000000000e+00 3.500000000000e+00 4.014394513860e+00 4.949747468306e+00 6.373018383224e+00 2.761979234492e+00 2.578794134311e+00 1.400514222974e+00 1.247448161013e+00 3.620592028759e-01 1.000000000000e+00 +3.500000000000e+00 -3.500000000000e+00 3.680096178300e+00 4.949747468306e+00 6.167909522807e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +3.500000000000e+00 -2.500000000000e+00 3.680096178300e+00 4.301162633521e+00 5.660663201564e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +3.500000000000e+00 -1.500000000000e+00 3.680096178300e+00 3.807886552932e+00 5.295574367482e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +3.500000000000e+00 -5.000000000000e-01 3.680096178300e+00 3.535533905933e+00 5.103244838486e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +3.500000000000e+00 5.000000000000e-01 3.680096178300e+00 3.535533905933e+00 5.103244838486e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +3.500000000000e+00 1.500000000000e+00 3.680096178300e+00 3.807886552932e+00 5.295574367482e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +3.500000000000e+00 2.500000000000e+00 3.680096178300e+00 4.301162633521e+00 5.660663201564e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +3.500000000000e+00 3.500000000000e+00 3.680096178300e+00 4.949747468306e+00 6.167909522807e+00 3.262243945994e+00 4.638402854399e+00 2.132766401526e+00 1.539396130351e+00 3.065374682442e-01 1.000000000000e+00 +3.500000000000e+00 -3.500000000000e+00 3.296094971545e+00 4.949747468306e+00 5.946784178146e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +3.500000000000e+00 -2.500000000000e+00 3.296094971545e+00 4.301162633521e+00 5.418878302882e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +3.500000000000e+00 -1.500000000000e+00 3.296094971545e+00 3.807886552932e+00 5.036292491649e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +3.500000000000e+00 -5.000000000000e-01 3.296094971545e+00 3.535533905933e+00 4.833657213895e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +3.500000000000e+00 5.000000000000e-01 3.296094971545e+00 3.535533905933e+00 4.833657213895e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +3.500000000000e+00 1.500000000000e+00 3.296094971545e+00 3.807886552932e+00 5.036292491649e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +3.500000000000e+00 2.500000000000e+00 3.296094971545e+00 4.301162633521e+00 5.418878302882e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +3.500000000000e+00 3.500000000000e+00 3.296094971545e+00 4.949747468306e+00 5.946784178146e+00 2.167011839705e+00 4.410703290493e+00 3.053077428798e+00 1.841821993087e+00 4.614649452659e-01 1.000000000000e+00 +3.500000000000e+00 -3.500000000000e+00 1.532681249456e+00 4.949747468306e+00 5.181612858216e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +3.500000000000e+00 -2.500000000000e+00 1.532681249456e+00 4.301162633521e+00 4.566082764519e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +3.500000000000e+00 -1.500000000000e+00 1.532681249456e+00 3.807886552932e+00 4.104766962013e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +3.500000000000e+00 -5.000000000000e-01 1.532681249456e+00 3.535533905933e+00 3.853454529696e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +3.500000000000e+00 5.000000000000e-01 1.532681249456e+00 3.535533905933e+00 3.853454529696e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +3.500000000000e+00 1.500000000000e+00 1.532681249456e+00 3.807886552932e+00 4.104766962013e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +3.500000000000e+00 2.500000000000e+00 1.532681249456e+00 4.301162633521e+00 4.566082764519e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 +3.500000000000e+00 3.500000000000e+00 1.532681249456e+00 4.949747468306e+00 5.181612858216e+00 3.262256912045e-01 1.068894657421e+01 4.914824397219e+01 7.389801077776e+00 3.065362498912e+00 1.000000000000e+00 diff --git a/single-node-refactor/regression_tests/test_refactor.py b/single-node-refactor/regression_tests/test_refactor.py index adbfff9c8..9186f745c 100644 --- a/single-node-refactor/regression_tests/test_refactor.py +++ b/single-node-refactor/regression_tests/test_refactor.py @@ -7,13 +7,13 @@ import glob # Builds being tested -builds = ["openmp"] +builds = ["cuda"] # Name(s) of the solver being used solvers = ["Fierro"] # Add names of each test -tests = ["Sedov", "Sod_X", "Sod_Y", "Sod_Z", "Sedov_Erosion","Sedov_Read_Ensight", "Sedov_rz_polar"] +tests = ["Sedov", "Sod_X", "Sod_Y", "Sod_Z", "Sedov_Erosion","Sedov_Read_Ensight", "Sedov_rz_polar", "Abaqus_read"] # Extract data from txt file def extract_state_data(filename): diff --git a/single-node-refactor/src/common/include/mesh_io.h b/single-node-refactor/src/common/include/mesh_io.h index 998216022..bc9c0ca3a 100644 --- a/single-node-refactor/src/common/include/mesh_io.h +++ b/single-node-refactor/src/common/include/mesh_io.h @@ -165,6 +165,14 @@ class MeshReader throw std::runtime_error("**** No mesh path given for read_mesh ****"); } + std::ifstream file(mesh_file_); + if (file.is_open()) { + std::cout << "The file exists." << std::endl; + file.close(); + } else { + throw std::runtime_error("**** Mesh path given does not exists ****"); + } + // Check mesh file extension // and read based on extension std::string filePathStr(mesh_file_); @@ -383,9 +391,6 @@ class MeshReader bool readingNodes = false; bool readingElements = false; - int nodeCount = 0; - int elemCount = 0; - while (std::getline(inputFile, line)) { if (line.find("*Node") != std::string::npos) { readingNodes = true; From 343c29e1744bd10c98a772a27dca82a3daddbe4c Mon Sep 17 00:00:00 2001 From: Jacob Moore Date: Wed, 28 Aug 2024 15:00:43 -0500 Subject: [PATCH 218/233] ENH: Add gitattributes file to ignore data/meshes from code statistics --- .gitattributes | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 .gitattributes diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 000000000..1dea52a55 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,33 @@ +special-vendored-path/* linguist-documentation + + + +dev-utils/* linguist-documentation +dev-utils/* linguist-documentation +docs/* linguist-documentation + +integrated-tests/Test-scripts/Solver-Inputs/* linguist-documentation +integrated-tests/Test-scripts/standard-results/* linguist-documentation + +legacy/* linguist-documentation + +python/stl_files/* linguist-documentation + +scripts/* linguist-documentation + +single-node/cbin/* linguist-documentation +single-node/scripts/* linguist-documentation +single-node/src/Explicit-Lagrange/meshes/* linguist-documentation +single-node/testing/tests-for-Explicit-Lagrange-Kokkos/* linguist-documentation + +single-node-refactor/regression_tests/standard_inputs/* linguist-documentation +single-node-refactor/regression_tests/standard_results/* linguist-documentation + +src/EVPFFT/example_input_files/* linguist-documentation +src/EVPFFT/scripts/* linguist-documentation +src/LS-EVPFFT/example_input_files/* linguist-documentation +src/LS-EVPFFT/scripts/* linguist-documentation + +src/Mesh-Builder/examples/* linguist-documentation +src/Parallel-Solvers/Implicit-Lagrange/Mesh_Examples/* linguist-documentation +src/Parallel-Solvers/Implicit-Lagrange/MueLu_XML_Examples/* linguist-documentation \ No newline at end of file From 92f0380cb8474391cdae308f0ced13ee97e5ddc2 Mon Sep 17 00:00:00 2001 From: Jacob Moore Date: Wed, 28 Aug 2024 15:03:49 -0500 Subject: [PATCH 219/233] BUG: remove bug line from .gitattributes --- .gitattributes | 15 ++------------- 1 file changed, 2 insertions(+), 13 deletions(-) diff --git a/.gitattributes b/.gitattributes index 1dea52a55..aba1307ed 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,33 +1,22 @@ -special-vendored-path/* linguist-documentation - - - dev-utils/* linguist-documentation dev-utils/* linguist-documentation docs/* linguist-documentation - integrated-tests/Test-scripts/Solver-Inputs/* linguist-documentation integrated-tests/Test-scripts/standard-results/* linguist-documentation - legacy/* linguist-documentation - python/stl_files/* linguist-documentation - scripts/* linguist-documentation - single-node/cbin/* linguist-documentation single-node/scripts/* linguist-documentation single-node/src/Explicit-Lagrange/meshes/* linguist-documentation single-node/testing/tests-for-Explicit-Lagrange-Kokkos/* linguist-documentation - single-node-refactor/regression_tests/standard_inputs/* linguist-documentation single-node-refactor/regression_tests/standard_results/* linguist-documentation - src/EVPFFT/example_input_files/* linguist-documentation src/EVPFFT/scripts/* linguist-documentation src/LS-EVPFFT/example_input_files/* linguist-documentation src/LS-EVPFFT/scripts/* linguist-documentation - src/Mesh-Builder/examples/* linguist-documentation src/Parallel-Solvers/Implicit-Lagrange/Mesh_Examples/* linguist-documentation -src/Parallel-Solvers/Implicit-Lagrange/MueLu_XML_Examples/* linguist-documentation \ No newline at end of file +src/Parallel-Solvers/Implicit-Lagrange/MueLu_XML_Examples/* linguist-documentation +src/Parallel-Solvers/Parallel-Explicit/Example_Yaml_Scripts/* linguist-documentation \ No newline at end of file From 80401f3283c039706759b0c1ad87ed46e13216a9 Mon Sep 17 00:00:00 2001 From: Jacob Moore Date: Wed, 28 Aug 2024 15:23:31 -0500 Subject: [PATCH 220/233] ENH: Add extra * to make sure it grabs both files and directories for ignoring data files --- .gitattributes | 44 ++++++++++++++++++++++---------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/.gitattributes b/.gitattributes index aba1307ed..f638ecafd 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,22 +1,22 @@ -dev-utils/* linguist-documentation -dev-utils/* linguist-documentation -docs/* linguist-documentation -integrated-tests/Test-scripts/Solver-Inputs/* linguist-documentation -integrated-tests/Test-scripts/standard-results/* linguist-documentation -legacy/* linguist-documentation -python/stl_files/* linguist-documentation -scripts/* linguist-documentation -single-node/cbin/* linguist-documentation -single-node/scripts/* linguist-documentation -single-node/src/Explicit-Lagrange/meshes/* linguist-documentation -single-node/testing/tests-for-Explicit-Lagrange-Kokkos/* linguist-documentation -single-node-refactor/regression_tests/standard_inputs/* linguist-documentation -single-node-refactor/regression_tests/standard_results/* linguist-documentation -src/EVPFFT/example_input_files/* linguist-documentation -src/EVPFFT/scripts/* linguist-documentation -src/LS-EVPFFT/example_input_files/* linguist-documentation -src/LS-EVPFFT/scripts/* linguist-documentation -src/Mesh-Builder/examples/* linguist-documentation -src/Parallel-Solvers/Implicit-Lagrange/Mesh_Examples/* linguist-documentation -src/Parallel-Solvers/Implicit-Lagrange/MueLu_XML_Examples/* linguist-documentation -src/Parallel-Solvers/Parallel-Explicit/Example_Yaml_Scripts/* linguist-documentation \ No newline at end of file +dev-utils/** linguist-documentation +dev-utils/** linguist-documentation +docs/** linguist-documentation +integrated-tests/Test-scripts/Solver-Inputs/** linguist-documentation +integrated-tests/Test-scripts/standard-results/** linguist-documentation +legacy/** linguist-documentation +python/stl_files/** linguist-documentation +scripts/** linguist-documentation +single-node/cbin/** linguist-documentation +single-node/scripts/** linguist-documentation +single-node/src/Explicit-Lagrange/meshes/** linguist-documentation +single-node/testing/tests-for-Explicit-Lagrange-Kokkos/** linguist-documentation +single-node-refactor/regression_tests/standard_inputs/** linguist-documentation +single-node-refactor/regression_tests/standard_results/** linguist-documentation +src/EVPFFT/example_input_files/** linguist-documentation +src/EVPFFT/scripts/** linguist-documentation +src/LS-EVPFFT/example_input_files/** linguist-documentation +src/LS-EVPFFT/scripts/** linguist-documentation +src/Mesh-Builder/examples/** linguist-documentation +src/Parallel-Solvers/Implicit-Lagrange/Mesh_Examples/** linguist-documentation +src/Parallel-Solvers/Implicit-Lagrange/MueLu_XML_Examples/** linguist-documentation +src/Parallel-Solvers/Parallel-Explicit/Example_Yaml_Scripts/** linguist-documentation \ No newline at end of file From 14ebdeba5dbe04ccd194a2bdbc66f0ba5025e506 Mon Sep 17 00:00:00 2001 From: Jacob Moore Date: Thu, 29 Aug 2024 14:15:11 -0500 Subject: [PATCH 221/233] ENH: Add timer outputs for driver --- single-node-refactor/src/main.cpp | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/single-node-refactor/src/main.cpp b/single-node-refactor/src/main.cpp index 01ce598e2..8e832b21c 100644 --- a/single-node-refactor/src/main.cpp +++ b/single-node-refactor/src/main.cpp @@ -66,11 +66,38 @@ int main(int argc, char* argv[]) // Create driver Driver* driver = new Driver(argv[1]); + + // Timing data for each step + auto time_start = std::chrono::high_resolution_clock::now(); + auto time_init = std::chrono::high_resolution_clock::now(); + driver->initialize(); + + auto time_now = std::chrono::high_resolution_clock::now(); + auto calc_time = std::chrono::duration_cast(time_now - time_init).count(); + printf("\n**** Total time to initialize driver in seconds %f ****\n\n", calc_time * 1e-9); + + auto time_setup = std::chrono::high_resolution_clock::now(); driver->setup(); + time_now = std::chrono::high_resolution_clock::now(); + calc_time = std::chrono::duration_cast(time_now - time_setup).count(); + printf("\n**** Total time to setup driver in seconds %f ****\n\n", calc_time * 1e-9); + + + auto time_run = std::chrono::high_resolution_clock::now(); driver->run(); + time_now = std::chrono::high_resolution_clock::now(); + calc_time = std::chrono::duration_cast(time_now - time_setup).count(); + printf("\n**** Total time to run driver in seconds %f ****\n\n", calc_time * 1e-9); + + driver->finalize(); + time_now = std::chrono::high_resolution_clock::now(); + calc_time = std::chrono::duration_cast(time_now - time_start).count(); + + printf("\n**** Total time to run simulation in seconds %f ****\n\n", calc_time * 1e-9); + // Delete driver delete driver; } From 2a753cd5d949c49810bd4e135ec557b21b7cb2e8 Mon Sep 17 00:00:00 2001 From: Jacob Moore Date: Tue, 3 Sep 2024 11:11:27 -0500 Subject: [PATCH 222/233] ENH: Add precision to conservation outputs --- .../src/Solvers/SGH_solver_3D/src/sgh_execute.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/single-node-refactor/src/Solvers/SGH_solver_3D/src/sgh_execute.cpp b/single-node-refactor/src/Solvers/SGH_solver_3D/src/sgh_execute.cpp index b375ee883..bf8c03828 100644 --- a/single-node-refactor/src/Solvers/SGH_solver_3D/src/sgh_execute.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver_3D/src/sgh_execute.cpp @@ -401,8 +401,8 @@ void SGH3D::execute(SimulationParameters_t& SimulationParamaters, // extensive TE TE_tend = IE_tend + KE_tend; - printf("Time=0: KE = %f, IE = %f, TE = %f \n", KE_t0, IE_t0, TE_t0); - printf("Time=End: KE = %f, IE = %f, TE = %f \n", KE_tend, IE_tend, TE_tend); + printf("Time=0: KE = %.14f, IE = %.14f, TE = %.14f \n", KE_t0, IE_t0, TE_t0); + printf("Time=End: KE = %.14f, IE = %.14f, TE = %.14f \n", KE_tend, IE_tend, TE_tend); printf("total energy change = %.15e \n\n", TE_tend - TE_t0); // domain mass for each material (they are at material points) From 091281761458e49d3b3e2646743da69ed509b434 Mon Sep 17 00:00:00 2001 From: Jacob Moore Date: Fri, 6 Sep 2024 12:53:48 -0500 Subject: [PATCH 223/233] ENH: Setting up SGTM solver, WIP --- single-node-refactor/input-sgtm-test.yaml | 82 +++++------ .../Solvers/SGTM_solver_3D/src/sgtm_setup.cpp | 24 ++-- .../src/common/include/region.h | 2 + .../src/common/include/region_fill.h | 25 ++++ .../src/common/src/region_fill.cpp | 134 ++++++++++++++++++ single-node-refactor/src/driver.cpp | 13 +- 6 files changed, 219 insertions(+), 61 deletions(-) diff --git a/single-node-refactor/input-sgtm-test.yaml b/single-node-refactor/input-sgtm-test.yaml index 714ccb1cb..2deecef02 100644 --- a/single-node-refactor/input-sgtm-test.yaml +++ b/single-node-refactor/input-sgtm-test.yaml @@ -5,7 +5,7 @@ dynamic_options: dt_min: 1.e-8 dt_max: 1.e-2 dt_start: 1.e-5 - cycle_stop: 300000 + cycle_stop: 1 # mesh_options: @@ -17,49 +17,49 @@ mesh_options: num_dims: 3 type: box origin: [0.0, 0.0, 0.0] - length: [1.2, 1.2, 1.2] - num_elems: [12, 12, 12] + length: [10.0, 10.0, 10.0] + num_elems: [10, 10, 10] output_options: timer_output_level: thorough - output_file_format: state + output_file_format: vtk graphics_time_step: 1.0 # graphics_iteration_step: 10 solver_options: - solver: - method: SGH3D + method: SGTM3D # solver_vars: # - blah # - blah # - blah -boundary_conditions: - # Tag X plane - - boundary_condition: - solver: SGH3D - geometry: x_plane - direction: x_dir - value: 0.0 - type: reflected_velocity +# boundary_conditions: +# # Tag X plane +# - boundary_condition: +# solver: SGH3D +# geometry: x_plane +# direction: x_dir +# value: 0.0 +# type: reflected_velocity - # Tag Y plane - - boundary_condition: - solver: SGH3D - geometry: y_plane - direction: y_dir - value: 0.0 - type: reflected_velocity - - # Tag z plane - - boundary_condition: - solver: SGH3D - geometry: z_plane - direction: z_dir - value: 0.0 - type: reflected_velocity +# # Tag Y plane +# - boundary_condition: +# solver: SGH3D +# geometry: y_plane +# direction: y_dir +# value: 0.0 +# type: reflected_velocity + +# # Tag z plane +# - boundary_condition: +# solver: SGH3D +# geometry: z_plane +# direction: z_dir +# value: 0.0 +# type: reflected_velocity @@ -92,18 +92,18 @@ regions: # energy source initial conditions - - fill_volume: - type: sphere - origin: [0.0, 0.0, 0.0] - radius1: 0.0 - radius2: 0.1 - material_id: 0 - den: 1.0 - # ie: 0.25833839995946534 - sie: 61.67375002 # 963.652344 - velocity: cartesian - u: 0.0 - v: 0.0 - w: 0.0 + # - fill_volume: + # type: sphere + # origin: [0.0, 0.0, 0.0] + # radius1: 0.0 + # radius2: 0.1 + # material_id: 0 + # den: 1.0 + # # ie: 0.25833839995946534 + # sie: 61.67375002 # 963.652344 + # velocity: cartesian + # u: 0.0 + # v: 0.0 + # w: 0.0 diff --git a/single-node-refactor/src/Solvers/SGTM_solver_3D/src/sgtm_setup.cpp b/single-node-refactor/src/Solvers/SGTM_solver_3D/src/sgtm_setup.cpp index 1b1a5e5fb..49b39df1d 100644 --- a/single-node-refactor/src/Solvers/SGTM_solver_3D/src/sgtm_setup.cpp +++ b/single-node-refactor/src/Solvers/SGTM_solver_3D/src/sgtm_setup.cpp @@ -94,10 +94,7 @@ void SGTM3D::init_corner_node_masses_zero(const Mesh_t& mesh, void SGTM3D::fill_regions_sgtm( const Material_t& Materials, const Mesh_t& mesh, - const DCArrayKokkos & node_coords, - DCArrayKokkos & node_vel, - DCArrayKokkos & GaussPoint_den, - DCArrayKokkos & GaussPoint_sie, + State_t& State, DCArrayKokkos & elem_mat_id, DCArrayKokkos & voxel_elem_mat_id, const CArrayKokkos & region_fills, @@ -114,7 +111,6 @@ void SGTM3D::fill_regions_sgtm( // --------------------------------------------- // copy to host, enum to read a voxel file // --------------------------------------------- - DCArrayKokkos read_voxel_file(num_fills); // check to see if readVoxelFile FOR_ALL(f_id, 0, num_fills, { @@ -167,10 +163,10 @@ void SGTM3D::fill_regions_sgtm( // get the coordinates of the element center (using rk_level=1 or node coords) for (int node_lid = 0; node_lid < mesh.num_nodes_in_elem; node_lid++) { - elem_coords(0) += node_coords(1, mesh.nodes_in_elem(elem_gid, node_lid), 0); - elem_coords(1) += node_coords(1, mesh.nodes_in_elem(elem_gid, node_lid), 1); + elem_coords(0) += State.node.coords(1, mesh.nodes_in_elem(elem_gid, node_lid), 0); + elem_coords(1) += State.node.coords(1, mesh.nodes_in_elem(elem_gid, node_lid), 1); if (mesh.num_dims == 3) { - elem_coords(2) += node_coords(1, mesh.nodes_in_elem(elem_gid, node_lid), 2); + elem_coords(2) += State.node.coords(1, mesh.nodes_in_elem(elem_gid, node_lid), 2); } else{ elem_coords(2) = 0.0; @@ -201,9 +197,9 @@ void SGTM3D::fill_regions_sgtm( // default sgh paint paint_gauss_den_sie(Materials, mesh, - node_coords, - GaussPoint_den, - GaussPoint_sie, + State.node.coords, + State.MaterialPoints.den, + State.MaterialPoints.sie, elem_mat_id, region_fills, elem_coords, @@ -220,9 +216,9 @@ void SGTM3D::fill_regions_sgtm( size_t node_gid = mesh.nodes_in_elem(elem_gid, node_lid); // default sgh paint - paint_node_vel(region_fills, - node_vel, - node_coords, + paint_node_temp(region_fills, + State.node.temp, + State.node.coords, node_gid, mesh.num_dims, f_id, diff --git a/single-node-refactor/src/common/include/region.h b/single-node-refactor/src/common/include/region.h index 65b30a5ff..78955015c 100644 --- a/single-node-refactor/src/common/include/region.h +++ b/single-node-refactor/src/common/include/region.h @@ -105,6 +105,8 @@ struct RegionFill_t double speed = 0.0; ///< velocity magnitude for radial velocity initialization + double temperature = 0.0; ///< temperature magnitude for radial velocity initialization + double ie = 0.0; ///< extensive internal energy double sie = 0.0; ///< specific internal energy double den = 0.0; ///< density diff --git a/single-node-refactor/src/common/include/region_fill.h b/single-node-refactor/src/common/include/region_fill.h index 512c4d20c..71df4cc98 100644 --- a/single-node-refactor/src/common/include/region_fill.h +++ b/single-node-refactor/src/common/include/region_fill.h @@ -144,6 +144,31 @@ void paint_node_vel(const CArrayKokkos& region_fills, const size_t f_id, const size_t rk_num_bins); + + +///////////////////////////////////////////////////////////////////////////// +/// +/// \fn paint_node_temp +/// +/// \brief a function to paint a temperature on the nodes of the mesh +/// +/// \param mesh is the simulation mesh +/// \param node_temp is the nodal temperature array +/// \param node_coords are the coordinates of the nodes +/// \param elem_gid is the element global mesh index +/// \param f_id is fill instruction +/// \param rk_num_bins is time integration storage level +/// +///////////////////////////////////////////////////////////////////////////// +KOKKOS_FUNCTION +void paint_node_temp(const CArrayKokkos& region_fills, + const DCArrayKokkos& node_temp, + const DCArrayKokkos& node_coords, + const double node_gid, + const double num_dims, + const size_t f_id, + const size_t rk_num_bins); + ///////////////////////////////////////////////////////////////////////////// /// /// \fn init_press_sspd_stress diff --git a/single-node-refactor/src/common/src/region_fill.cpp b/single-node-refactor/src/common/src/region_fill.cpp index b9f01bfbe..0db8217ed 100644 --- a/single-node-refactor/src/common/src/region_fill.cpp +++ b/single-node-refactor/src/common/src/region_fill.cpp @@ -733,6 +733,140 @@ void paint_node_vel(const CArrayKokkos& region_fills, } // end function paint_node_vel +///////////////////////////////////////////////////////////////////////////// +/// +/// \fn paint_node_temp +/// +/// \brief a function to paint a temperature on the nodes of the mesh +/// +/// \param mesh is the simulation mesh +/// \param node_temp is the nodal temperature array +/// \param node_coords are the coordinates of the nodes +/// \param elem_gid is the element global mesh index +/// \param f_id is fill instruction +/// \param rk_num_bins is time integration storage level +/// +///////////////////////////////////////////////////////////////////////////// +KOKKOS_FUNCTION +void paint_node_temp(const CArrayKokkos& region_fills, + const DCArrayKokkos& node_temp, + const DCArrayKokkos& node_coords, + const double node_gid, + const double num_dims, + const size_t f_id, + const size_t rk_num_bins) +{ + + // save velocity at all rk_levels + for(size_t rk_level = 0; rk_level < rk_num_bins; rk_level++){ + + // --- temperature --- + switch (region_fills(f_id).velocity) { + case init_conds::cartesian: + { + + node_temp(rk_level, node_gid) = region_fills(f_id).temperature; + break; + } + // radial in the (x,y) plane where x=r*cos(theta) and y=r*sin(theta) + case init_conds::radial: + { + // Setting up radial + double dir[2]; + dir[0] = 0.0; + dir[1] = 0.0; + double radius_val = 0.0; + + for (int dim = 0; dim < 2; dim++) { + dir[dim] = node_coords(rk_level, node_gid, dim); + radius_val += node_coords(rk_level, node_gid, dim) * node_coords(rk_level, node_gid, dim); + } // end for + radius_val = sqrt(radius_val); + + for (int dim = 0; dim < 2; dim++) { + if (radius_val > 1.0e-14) { + dir[dim] /= (radius_val); + } + else{ + dir[dim] = 0.0; + } + } // end for + + node_temp(rk_level, node_gid) = region_fills(f_id).temperature * dir[0]; + node_temp(rk_level, node_gid) = region_fills(f_id).temperature * dir[1]; + + break; + } + case init_conds::spherical: + { + // Setting up spherical + double dir[3]; + dir[0] = 0.0; + dir[1] = 0.0; + dir[2] = 0.0; + double radius_val = 0.0; + + for (int dim = 0; dim < 3; dim++) { + dir[dim] = node_coords(rk_level, node_gid, dim); + radius_val += node_coords(rk_level, node_gid, dim) * node_coords(rk_level, node_gid, dim); + } // end for + radius_val = sqrt(radius_val); + + for (int dim = 0; dim < 3; dim++) { + if (radius_val > 1.0e-14) { + dir[dim] /= (radius_val); + } + else{ + dir[dim] = 0.0; + } + } // end for + + node_temp(rk_level, node_gid) = region_fills(f_id).temperature * dir[0]; + node_temp(rk_level, node_gid) = region_fills(f_id).temperature * dir[1]; + if (num_dims == 3) { + node_temp(rk_level, node_gid) = region_fills(f_id).temperature * dir[2]; + } + + break; + } + case init_conds::radial_linear: + { + printf("**** Radial_linear initial conditions not yet supported ****\n"); + break; + } + case init_conds::spherical_linear: + { + printf("**** spherical_linear initial conditions not yet supported ****\n"); + break; + } + case init_conds::tg_vortex: + { + printf("**** TG Vortex not supported for temperature initial conditions ****\n"); + + break; + } + + default: + { + // no velocity + node_temp(rk_level, node_gid) = 0.0; + node_temp(rk_level, node_gid) = 0.0; + if (num_dims == 3) { + node_temp(rk_level, node_gid) = 0.0; + } + + break; + } + } // end of switch + + } // end loop over rk_num_bins + + + // done setting the velocity +} // end function paint_node_temp + + + ///////////////////////////////////////////////////////////////////////////// /// diff --git a/single-node-refactor/src/driver.cpp b/single-node-refactor/src/driver.cpp index 8fc1812b0..fc5ae5f93 100644 --- a/single-node-refactor/src/driver.cpp +++ b/single-node-refactor/src/driver.cpp @@ -90,10 +90,11 @@ void Driver::initialize() tag_bdys(BoundaryConditions, mesh, State.node.coords); mesh.build_boundry_node_sets(mesh); - // Calculate element volume + // Calculate element volume (NOTE: Consider moving this to solver initialization/setup if needed) geometry::get_vol(State.GaussPoints.vol, State.node.coords, mesh); - + + // Setup Solvers for (int solver_id = 0; solver_id < SimulationParamaters.solver_inputs.size(); solver_id++) { if (SimulationParamaters.solver_inputs[solver_id].method == solver_input::SGH3D) { @@ -125,10 +126,10 @@ void Driver::initialize() SGTM3D* sgtm_solver_3d = new SGTM3D(); sgtm_solver_3d->initialize(SimulationParamaters, - Materials, - mesh, - BoundaryConditions, - State); + Materials, + mesh, + BoundaryConditions, + State); solvers.push_back(sgtm_solver_3d); } // end if SGTM solver From c5b20a50113dd36e51e87152903c1fb0a9b0d2a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CAdrian-Diaz=E2=80=9D?= <“adriandiaz1117@gmail.com”> Date: Fri, 6 Sep 2024 12:38:15 -0600 Subject: [PATCH 224/233] DOC: remove unused parameters --- .../Example_Yaml_Scripts/taylor_anvil_opt.yaml | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/Parallel-Solvers/Parallel-Explicit/Example_Yaml_Scripts/taylor_anvil_opt.yaml b/src/Parallel-Solvers/Parallel-Explicit/Example_Yaml_Scripts/taylor_anvil_opt.yaml index 116dba50a..b63b62a42 100644 --- a/src/Parallel-Solvers/Parallel-Explicit/Example_Yaml_Scripts/taylor_anvil_opt.yaml +++ b/src/Parallel-Solvers/Parallel-Explicit/Example_Yaml_Scripts/taylor_anvil_opt.yaml @@ -49,8 +49,6 @@ materials: - id: 0 eos_model: ideal_gas strength_model: none - elastic_modulus: 10 - poisson_ratio: 0.3 maximum_limiter: true q1: 2.0 q2: 4.0 From 2e5f2e519f08532a6bf87a3695c877c7cfebd147 Mon Sep 17 00:00:00 2001 From: Jacob Moore Date: Fri, 6 Sep 2024 16:39:52 -0500 Subject: [PATCH 225/233] ENH: Adding metadata to initialize state per solver, start integration with mesh writer, WIP --- .../src/Solvers/SGH_solver_3D/CMakeLists.txt | 1 + .../SGH_solver_3D/include/sgh_solver_3D.h | 25 +++-- .../SGH_solver_3D/src/sgh_initialize.cpp | 51 +++++++++ .../SGTM_solver_3D/include/sgtm_solver_3D.h | 3 +- .../Solvers/SGTM_solver_3D/src/sgtm_setup.cpp | 12 ++- .../src/common/include/initial_conditions.h | 21 +++- .../src/common/include/mesh_io.h | 95 +++++++++++----- .../src/common/include/region.h | 6 +- .../src/common/include/state.h | 35 ++++-- .../src/common/src/region_fill.cpp | 9 +- single-node-refactor/src/input/parse_yaml.cpp | 101 ++++++++++++++++++ 11 files changed, 306 insertions(+), 53 deletions(-) create mode 100644 single-node-refactor/src/Solvers/SGH_solver_3D/src/sgh_initialize.cpp diff --git a/single-node-refactor/src/Solvers/SGH_solver_3D/CMakeLists.txt b/single-node-refactor/src/Solvers/SGH_solver_3D/CMakeLists.txt index c09cdd14c..5a17c0336 100755 --- a/single-node-refactor/src/Solvers/SGH_solver_3D/CMakeLists.txt +++ b/single-node-refactor/src/Solvers/SGH_solver_3D/CMakeLists.txt @@ -29,6 +29,7 @@ ${CMAKE_CURRENT_SOURCE_DIR}/src/momentum.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/properties.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/sgh_execute.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/time_integration.cpp +${CMAKE_CURRENT_SOURCE_DIR}/src/sgh_initialize.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/sgh_setup.cpp ${CMAKE_CURRENT_SOURCE_DIR}/include/sgh_solver_3D.h PARENT_SCOPE diff --git a/single-node-refactor/src/Solvers/SGH_solver_3D/include/sgh_solver_3D.h b/single-node-refactor/src/Solvers/SGH_solver_3D/include/sgh_solver_3D.h index 93d9f4e79..ce424949e 100644 --- a/single-node-refactor/src/Solvers/SGH_solver_3D/include/sgh_solver_3D.h +++ b/single-node-refactor/src/Solvers/SGH_solver_3D/include/sgh_solver_3D.h @@ -36,19 +36,35 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #define SGH3D_SOLVER_H #include "solver.h" +#include "state.h" // Forward declare structs struct SimulationParameters_t; struct Material_t; struct Mesh_t; struct BoundaryCondition_t; -struct State_t; +// struct State_t; struct RegionFill_t; struct RegionFill_host_t; -struct corners_in_mat_t; +// struct corners_in_mat_t; using namespace mtr; // matar namespace + +namespace SGH3D_State +{ + // Node state to be initialized for the SGH solver + static const std::vector required_node_state = + { + node_state::coords, + node_state::velocity, + node_state::mass, + node_state::temp + }; + + // Element/material point and other required state goes here +} + ///////////////////////////////////////////////////////////////////////////// /// /// \class SGH3D @@ -75,10 +91,7 @@ class SGH3D : public Solver Material_t& Materials, Mesh_t& mesh, BoundaryCondition_t& Boundary, - State_t& State) const override - { - // stuff goes here - } + State_t& State) const override; ///////////////////////////////////////////////////////////////////////////// /// diff --git a/single-node-refactor/src/Solvers/SGH_solver_3D/src/sgh_initialize.cpp b/single-node-refactor/src/Solvers/SGH_solver_3D/src/sgh_initialize.cpp new file mode 100644 index 000000000..ccfd52ba7 --- /dev/null +++ b/single-node-refactor/src/Solvers/SGH_solver_3D/src/sgh_initialize.cpp @@ -0,0 +1,51 @@ +/********************************************************************************************** +© 2020. Triad National Security, LLC. All rights reserved. +This program was produced under U.S. Government contract 89233218CNA000001 for Los Alamos +National Laboratory (LANL), which is operated by Triad National Security, LLC for the U.S. +Department of Energy/National Nuclear Security Administration. All rights in the program are +reserved by Triad National Security, LLC, and the U.S. Department of Energy/National Nuclear +Security Administration. The Government is granted for itself and others acting on its behalf a +nonexclusive, paid-up, irrevocable worldwide license in this material to reproduce, prepare +derivative works, distribute copies to the public, perform publicly and display publicly, and +to permit others to do so. +This program is open source under the BSD-3 License. +Redistribution and use in source and binary forms, with or without modification, are permitted +provided that the following conditions are met: +1. Redistributions of source code must retain the above copyright notice, this list of +conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, this list of +conditions and the following disclaimer in the documentation and/or other materials +provided with the distribution. +3. Neither the name of the copyright holder nor the names of its contributors may be used +to endorse or promote products derived from this software without specific prior +written permission. +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +**********************************************************************************************/ + +#include "sgh_solver_3D.h" +#include "state.h" +#include "mesh.h" +#include "simulation_parameters.h" + +void SGH3D::initialize(SimulationParameters_t& SimulationParamaters, + Material_t& Materials, + Mesh_t& mesh, + BoundaryCondition_t& Boundary, + State_t& State) const +{ + int num_nodes = mesh.num_nodes; + int rk_num_bins = SimulationParamaters.dynamic_options.rk_num_stages; + int num_dim = 3; + + State.node.initialize(rk_num_bins, num_nodes, num_dim, SGH3D_State::required_node_state); +} \ No newline at end of file diff --git a/single-node-refactor/src/Solvers/SGTM_solver_3D/include/sgtm_solver_3D.h b/single-node-refactor/src/Solvers/SGTM_solver_3D/include/sgtm_solver_3D.h index 21ed78894..87cef94a3 100644 --- a/single-node-refactor/src/Solvers/SGTM_solver_3D/include/sgtm_solver_3D.h +++ b/single-node-refactor/src/Solvers/SGTM_solver_3D/include/sgtm_solver_3D.h @@ -134,8 +134,7 @@ class SGTM3D : public Solver void fill_regions_sgtm( const Material_t& Materials, const Mesh_t& mesh, - const DCArrayKokkos& node_coords, - DCArrayKokkos& node_vel, + State_t& State, DCArrayKokkos& GaussPoint_den, DCArrayKokkos& GaussPoint_sie, DCArrayKokkos& elem_mat_id, diff --git a/single-node-refactor/src/Solvers/SGTM_solver_3D/src/sgtm_setup.cpp b/single-node-refactor/src/Solvers/SGTM_solver_3D/src/sgtm_setup.cpp index 49b39df1d..e2f1c491b 100644 --- a/single-node-refactor/src/Solvers/SGTM_solver_3D/src/sgtm_setup.cpp +++ b/single-node-refactor/src/Solvers/SGTM_solver_3D/src/sgtm_setup.cpp @@ -95,6 +95,8 @@ void SGTM3D::fill_regions_sgtm( const Material_t& Materials, const Mesh_t& mesh, State_t& State, + DCArrayKokkos & GaussPoint_den, + DCArrayKokkos & GaussPoint_sie, DCArrayKokkos & elem_mat_id, DCArrayKokkos & voxel_elem_mat_id, const CArrayKokkos & region_fills, @@ -198,8 +200,8 @@ void SGTM3D::fill_regions_sgtm( paint_gauss_den_sie(Materials, mesh, State.node.coords, - State.MaterialPoints.den, - State.MaterialPoints.sie, + GaussPoint_den, + GaussPoint_sie, elem_mat_id, region_fills, elem_coords, @@ -235,7 +237,8 @@ void SGTM3D::fill_regions_sgtm( elem_mat_id.update_host(); GaussPoint_den.update_host(); GaussPoint_sie.update_host(); - node_vel.update_host(); + State.node.vel.update_host(); + State.node.temp.update_host(); Kokkos::fence(); } // end SGH fill regions @@ -275,8 +278,7 @@ void SGTM3D::setup(SimulationParameters_t& SimulationParamaters, // --------------------------------------------- fill_regions_sgtm(Materials, mesh, - State.node.coords, - State.node.vel, + State, GaussPoint_den, GaussPoint_sie, elem_mat_id, diff --git a/single-node-refactor/src/common/include/initial_conditions.h b/single-node-refactor/src/common/include/initial_conditions.h index 8837eed6e..f847fca30 100644 --- a/single-node-refactor/src/common/include/initial_conditions.h +++ b/single-node-refactor/src/common/include/initial_conditions.h @@ -38,7 +38,8 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. namespace init_conds { -// applying initial conditions +// initial velocity conditions distribution +// TODO: remove references to velocity, and make it general distributions enum init_velocity_conds { no_ic_vel = 0, @@ -55,6 +56,24 @@ enum init_velocity_conds // vortical initial conditions tg_vortex = 6 }; + +// // initial temperature conditions distribution +// enum init_temperature_distribution +// { +// no_ic_temp = 0, + +// // uniform +// cartesian = 1, // cart temperature +// radial = 2, // radial in the (x,y) plane where x=r*cos(theta) and y=r*sin(theta) +// spherical = 3, // spherical + +// // linear variation +// radial_linear = 4, // linear variation from 0,0,0 +// spherical_linear = 5, // linear variation from 0,0,0 + +// }; + + } // end of initial conditions namespace static std::map velocity_type_map diff --git a/single-node-refactor/src/common/include/mesh_io.h b/single-node-refactor/src/common/include/mesh_io.h index bc9c0ca3a..4e64bbacb 100644 --- a/single-node-refactor/src/common/include/mesh_io.h +++ b/single-node-refactor/src/common/include/mesh_io.h @@ -250,9 +250,12 @@ class MeshReader fscanf(in, "%lu", &num_nodes); printf("Number if nodes read in %lu\n", num_nodes); - // initialize node variables + mesh.initialize_nodes(num_nodes); - node.initialize(rk_num_bins, num_nodes, num_dims); + + // initialize node state variables, for now, we just need coordinates, the rest will be initialize by the respective solvers + std::vector required_node_state = { node_state::coords }; + node.initialize(rk_num_bins, num_nodes, num_dims, required_node_state); // read the initial mesh coordinates // x-coords @@ -473,7 +476,11 @@ class MeshReader // initialize node variables mesh.initialize_nodes(num_nodes); - State.node.initialize(rk_num_bins, num_nodes, num_dims); + + // initialize node state, for now, we just need coordinates, the rest will be initialize by the respective solvers + std::vector required_node_state = { node_state::coords }; + + State.node.initialize(rk_num_bins, num_nodes, num_dims, required_node_state); // Copy nodes to mesh @@ -655,7 +662,10 @@ class MeshBuilder // intialize node variables mesh.initialize_nodes(num_nodes); - node.initialize(rk_num_bins, num_nodes, num_dim); + + // initialize node state, for now, we just need coordinates, the rest will be initialize by the respective solvers + std::vector required_node_state = { node_state::coords }; + node.initialize(rk_num_bins, num_nodes, num_dim, required_node_state); // --- Build nodes --- @@ -788,7 +798,10 @@ class MeshBuilder // intialize node variables mesh.initialize_nodes(num_nodes); - node.initialize(rk_num_bins, num_nodes, num_dim); + + // initialize node state, for now, we just need coordinates, the rest will be initialize by the respective solvers + std::vector required_node_state = { node_state::coords }; + node.initialize(rk_num_bins, num_nodes, num_dim, required_node_state); // populate the point data structures for (int j = 0; j < num_points_j; j++) { @@ -921,9 +934,12 @@ class MeshBuilder int rk_num_bins = SimulationParamaters.dynamic_options.rk_num_bins; - // intialize node variables + // intialize mesh node variables mesh.initialize_nodes(num_nodes); - node.initialize(rk_num_bins, num_nodes, num_dim); + + // initialize node state variables, for now, we just need coordinates, the rest will be initialize by the respective solvers + std::vector required_node_state = { node_state::coords }; + node.initialize(rk_num_bins, num_nodes, num_dim, required_node_state); // --- Build nodes --- @@ -1089,7 +1105,10 @@ class MeshBuilder // initialize node variables mesh.initialize_nodes(num_points); - node.initialize(rk_num_bins, num_points, num_dim); + + // + std::vector required_node_state = { node_state::coords }; + node.initialize(rk_num_bins, num_points, num_dim, required_node_state); // populate the point data structures for (int k = 0; k < num_points_k; k++){ for (int j = 0; j < num_points_j; j++){ @@ -1190,8 +1209,7 @@ class MeshBuilder /// \brief Class for writing out a mesh with its associated state from Fierro /// /// This class contains the requisite functions required to write out a mesh -/// with its associated state data from solvers in Fierro. Currently only ensight -/// outputs are supported +/// with its associated state data from solvers in Fierro. /// ///////////////////////////////////////////////////////////////////////////// class MeshWriter @@ -1720,11 +1738,6 @@ class MeshWriter double time_value, CArray graphics_times) { - // Not yet supported - // throw std::runtime_error("**** VTK OUTPUT TYPE NOT YET SUPPORTED ****"); - - const int num_scalar_vars = 10; - const int num_vec_vars = 2; size_t num_mats = State.MaterialPoints.size(); @@ -1748,15 +1761,33 @@ class MeshWriter State.node.coords.update_host(); State.node.vel.update_host(); State.node.mass.update_host(); + State.node.temp.update_host(); Kokkos::fence(); - const char scalar_var_names[num_scalar_vars][15] = { + + const int num_cell_scalar_vars = 10; + const int num_cell_vec_vars = 0; + + const int num_point_scalar_vars = 1; + const int num_point_vec_vars = 2; + + + // Scalar values associated with a cell + const char cell_scalar_var_names[num_cell_scalar_vars][15] = { "den", "pres", "sie", "vol", "mass", "sspd", "speed", "mat_id", "elem_switch", "eroded" }; + + const char cell_vec_var_names[num_cell_vec_vars][15] = { + + }; - const char vec_var_names[num_vec_vars][15] = { - "pos", "vel" + const char point_scalar_var_names[num_point_scalar_vars][15] = { + "temp" + }; + + const char point_vec_var_names[num_point_vec_vars][15] = { + "pos", "vel" }; // short hand @@ -1765,7 +1796,7 @@ class MeshWriter const size_t num_dims = mesh.num_dims; // save the cell state to an array for exporting to graphics files - auto elem_fields = CArray(num_elems, num_scalar_vars); + auto elem_fields = CArray(num_elems, num_cell_scalar_vars); int elem_switch = 1; DCArrayKokkos speed(num_elems); @@ -1834,7 +1865,8 @@ class MeshWriter } // end for elem_gid // save the vertex vector fields to an array for exporting to graphics files - CArray vec_fields(num_nodes, num_vec_vars, 3); + CArray vec_fields(num_nodes, num_point_vec_vars, 3); + CArray point_scalar_fields(num_nodes, num_point_scalar_vars); for (size_t node_gid = 0; node_gid < num_nodes; node_gid++) { // position, var 0 @@ -1856,6 +1888,8 @@ class MeshWriter else{ vec_fields(node_gid, 1, 2) = State.node.vel.host(1, node_gid, 2); } + + point_scalar_fields(node_gid, 0) = State.node.temp.host(1,node_gid); } // end for loop over vertices FILE* out[20]; // the output files that are written to @@ -1947,8 +1981,8 @@ class MeshWriter fprintf(out[0], "POINT_DATA %zu \n", mesh.num_nodes); // vtk vector vars = (position, velocity) - for (int var = 0; var < num_vec_vars; var++) { - fprintf(out[0], "VECTORS %s float \n", vec_var_names[var]); + for (int var = 0; var < num_point_vec_vars; var++) { + fprintf(out[0], "VECTORS %s float \n", point_vec_var_names[var]); for (size_t node_gid = 0; node_gid < mesh.num_nodes; node_gid++) { fprintf(out[0], "%f %f %f\n", vec_fields(node_gid, var, 0), @@ -1957,6 +1991,17 @@ class MeshWriter } // end for nodes } // end for vec_vars + + // vtk scalar vars = (temp) + for (int var = 0; var < num_point_scalar_vars; var++) { + fprintf(out[0], "SCALARS %s float 1\n", point_scalar_var_names[var]); + fprintf(out[0], "LOOKUP_TABLE default\n"); + for (size_t node_gid = 0; node_gid < mesh.num_nodes; node_gid++) { + fprintf(out[0], "%f\n", + point_scalar_fields(node_gid, 0)); + } // end for nodes + } // end for vec_vars + /* --------------------------------------------------------------------------- Write the scalar elem variable to file @@ -1965,13 +2010,13 @@ class MeshWriter fprintf(out[0], "\n"); fprintf(out[0], "CELL_DATA %zu \n", mesh.num_elems); - for (int var = 0; var < num_scalar_vars; var++) { - fprintf(out[0], "SCALARS %s float 1\n", scalar_var_names[var]); // the 1 is number of scalar components [1:4] + for (int var = 0; var < num_cell_scalar_vars; var++) { + fprintf(out[0], "SCALARS %s float 1\n", cell_scalar_var_names[var]); // the 1 is number of scalar components [1:4] fprintf(out[0], "LOOKUP_TABLE default\n"); for (size_t elem_gid = 0; elem_gid < mesh.num_elems; elem_gid++) { fprintf(out[0], "%f\n", elem_fields(elem_gid, var)); } // end for elem - } // end for scalar_vars + } // end for cell scalar_vars fclose(out[0]); diff --git a/single-node-refactor/src/common/include/region.h b/single-node-refactor/src/common/include/region.h index 78955015c..a8583de43 100644 --- a/single-node-refactor/src/common/include/region.h +++ b/single-node-refactor/src/common/include/region.h @@ -95,9 +95,12 @@ struct RegionFill_t double radius1 = 0.0; ///< Inner radius to fill for sphere double radius2 = 0.0; ///< Outer radius to fill for sphere - // initial conditions + // initial condition velocity distribution init_conds::init_velocity_conds velocity; ///< Initial conditions for this region + // initial condition temperature distribution + init_conds::init_velocity_conds temp_distribution; + // velocity coefficients by component double u = 0.0; ///< U component of velocity double v = 0.0; ///< V component of velocity @@ -155,6 +158,7 @@ static std::vector str_region_inps "v", "w", "speed", + "temperature", "sie", "ie", "den", diff --git a/single-node-refactor/src/common/include/state.h b/single-node-refactor/src/common/include/state.h index 12ed5127a..348bde25d 100644 --- a/single-node-refactor/src/common/include/state.h +++ b/single-node-refactor/src/common/include/state.h @@ -45,6 +45,15 @@ using namespace mtr; /// \brief Stores state information associated with a node /// ///////////////////////////////////////////////////////////////////////////// + +// Possible node states +enum node_state +{ + coords, + velocity, + mass, + temp +}; struct node_t { DCArrayKokkos coords; ///< Nodal coordinates @@ -52,13 +61,27 @@ struct node_t DCArrayKokkos mass; ///< Nodal mass DCArrayKokkos temp; ///< Nodal temperature - // initialization method (num_rk_storage_bins, num_nodes, num_dims) - void initialize(size_t num_rk, size_t num_nodes, size_t num_dims) + // initialization method (num_rk_storage_bins, num_nodes, num_dims, state to allocate) + void initialize(size_t num_rk, size_t num_nodes, size_t num_dims, std::vector node_state) { - this->coords = DCArrayKokkos(num_rk, num_nodes, num_dims, "node_coordinates"); - this->vel = DCArrayKokkos(num_rk, num_nodes, num_dims, "node_velocity"); - this->mass = DCArrayKokkos(num_nodes, "node_mass"); - this->temp = DCArrayKokkos(num_nodes, "node_temp"); + for (auto field : node_state){ + switch(field){ + case node_state::coords: + if (coords.size() == 0) this->coords = DCArrayKokkos(num_rk, num_nodes, num_dims, "node_coordinates"); + break; + case node_state::velocity: + if (vel.size() == 0) this->vel = DCArrayKokkos(num_rk, num_nodes, num_dims, "node_velocity"); + break; + case node_state::mass: + if (mass.size() == 0) this->mass = DCArrayKokkos(num_nodes, "node_mass"); + break; + case node_state::temp: + if (temp.size() == 0) this->temp = DCArrayKokkos(num_nodes, "node_temp"); + break; + default: + std::cout<<"Desired node state not understood in node_t initialize"<& region_fills, for(size_t rk_level = 0; rk_level < rk_num_bins; rk_level++){ // --- temperature --- - switch (region_fills(f_id).velocity) { + switch (region_fills(f_id).temp_distribution) { case init_conds::cartesian: { @@ -821,12 +821,7 @@ void paint_node_temp(const CArrayKokkos& region_fills, } } // end for - node_temp(rk_level, node_gid) = region_fills(f_id).temperature * dir[0]; - node_temp(rk_level, node_gid) = region_fills(f_id).temperature * dir[1]; - if (num_dims == 3) { - node_temp(rk_level, node_gid) = region_fills(f_id).temperature * dir[2]; - } - + node_temp(rk_level, node_gid) = region_fills(f_id).temperature * radius_val; break; } case init_conds::radial_linear: diff --git a/single-node-refactor/src/input/parse_yaml.cpp b/single-node-refactor/src/input/parse_yaml.cpp index caaf999fb..9bee50a79 100644 --- a/single-node-refactor/src/input/parse_yaml.cpp +++ b/single-node-refactor/src/input/parse_yaml.cpp @@ -981,6 +981,15 @@ void parse_regions(Yaml::Node& root, region_fills(reg_id).speed = speed; }); } // speed + else if (a_word.compare("temperature") == 0) { + double temperature = root["regions"][reg_id]["fill_volume"]["temperature"].As(); + if (VERBOSE) { + std::cout << "\ttemperature = " << temperature << std::endl; + } + RUN({ + region_fills(reg_id).temperature = temperature; + }); + } // temperature else if (a_word.compare("u") == 0) { // x-component of velocity double u = root["regions"][reg_id]["fill_volume"]["u"].As(); @@ -1233,6 +1242,98 @@ void parse_regions(Yaml::Node& root, throw std::runtime_error("**** Velocity IC Not Understood ****"); } // end if } // end velocity fill type + + else if (a_word.compare("temperature_distribution") == 0) { + + // temperature_distribution fill region type + std::string type = root["regions"][reg_id]["fill_volume"]["temperature_distribution"].As(); + + if (VERBOSE) { + std::cout << "\ttemperature = " << type << std::endl; + } + // set the volume tag type NOTE: rename to remove reference to velocity, change to distribution + if (velocity_type_map.find(type) != velocity_type_map.end()) { + + // velocity_type_map[type] returns enum value, e.g., init_conds::velocity + switch(velocity_type_map[type]){ + + case init_conds::cartesian: + std::cout << "Setting temperature_distribution initial conditions type to cartesian " << std::endl; + RUN({ + region_fills(reg_id).temp_distribution = init_conds::cartesian; + }); + break; + + case init_conds::radial: + std::cout << "Setting temperature_distribution initial conditions type to radial " << std::endl; + RUN({ + region_fills(reg_id).temp_distribution = init_conds::radial; + }); + break; + + case init_conds::spherical: + std::cout << "Setting temperature_distribution initial conditions type to spherical " << std::endl; + RUN({ + region_fills(reg_id).temp_distribution = init_conds::spherical; + }); + break; + + case init_conds::radial_linear: + std::cout << "Setting temperature_distribution initial conditions type to radial_linear " << std::endl; + RUN({ + region_fills(reg_id).temp_distribution = init_conds::radial_linear; + }); + break; + + case init_conds::spherical_linear: + std::cout << "Setting temperature_distribution initial conditions type to spherical_linear " << std::endl; + RUN({ + region_fills(reg_id).temp_distribution = init_conds::spherical_linear; + }); + break; + + case init_conds::tg_vortex: + std::cout << "Setting temperature_distribution initial conditions type to tg_vortex " << std::endl; + RUN({ + region_fills(reg_id).temp_distribution = init_conds::tg_vortex; + }); + break; + + case init_conds::no_ic_vel: + std::cout << "Setting temperature_distribution initial conditions type to no temperature" << std::endl; + RUN({ + region_fills(reg_id).temp_distribution = init_conds::no_ic_vel; + }); + break; + + default: + + RUN({ + region_fills(reg_id).temp_distribution = init_conds::no_ic_vel; + }); + + std::cout << "ERROR: No valid temperature_distribution intial conditions type input " << std::endl; + std::cout << "Valid IC types are: " << std::endl; + + for (const auto& pair : velocity_type_map) { + std::cout << pair.second << std::endl; + } + + throw std::runtime_error("**** Temperature Initial Conditions Type Not Understood ****"); + break; + } // end switch + + if (VERBOSE) { + std::cout << "\tvolume_fill = " << type << std::endl; + } // end if + + } + else{ + std::cout << "ERROR: invalid input: " << type << std::endl; + throw std::runtime_error("**** Temperature IC Not Understood ****"); + } // end if + } // end velocity fill type + // else if (a_word.compare("type") == 0) { From ba901c902bf8666f45b41c9bf8604cb22dedf1d3 Mon Sep 17 00:00:00 2001 From: Jacob Moore Date: Mon, 9 Sep 2024 12:02:20 -0500 Subject: [PATCH 226/233] ENH: Automating state initialization WIP --- .../SGH_solver_3D/include/sgh_solver_3D.h | 33 ++- .../SGH_solver_3D/src/sgh_initialize.cpp | 8 +- .../Solvers/SGH_solver_3D/src/sgh_setup.cpp | 7 +- .../SGH_solver_rz/include/sgh_solver_rz.h | 58 ++++- .../SGH_solver_rz/src/sgh_initialize_rz.cpp | 55 +++++ .../src/common/include/mesh_io.h | 24 +- .../src/common/include/state.h | 216 +++++++++++++----- single-node-refactor/src/driver.cpp | 4 - 8 files changed, 327 insertions(+), 78 deletions(-) create mode 100644 single-node-refactor/src/Solvers/SGH_solver_rz/src/sgh_initialize_rz.cpp diff --git a/single-node-refactor/src/Solvers/SGH_solver_3D/include/sgh_solver_3D.h b/single-node-refactor/src/Solvers/SGH_solver_3D/include/sgh_solver_3D.h index ce424949e..57ecf17d8 100644 --- a/single-node-refactor/src/Solvers/SGH_solver_3D/include/sgh_solver_3D.h +++ b/single-node-refactor/src/Solvers/SGH_solver_3D/include/sgh_solver_3D.h @@ -62,7 +62,38 @@ namespace SGH3D_State node_state::temp }; - // Element/material point and other required state goes here + // Gauss point state to be initialized for the SGH solver + static const std::vector required_gauss_pt_state = + { + gauss_pt_state::volume, + gauss_pt_state::divergence_velocity + }; + + // Material point state to be initialized for the SGH solver + static const std::vector required_material_pt_state = + { + material_pt_state::density, + material_pt_state::pressure, + material_pt_state::stress, + material_pt_state::sound_speed, + material_pt_state::mass, + material_pt_state::volume_fraction, + material_pt_state::specific_internal_energy, + material_pt_state::eroded_flag + }; + + // Material corner state to be initialized for the SGH solver + static const std::vector required_material_corner_state = + { + material_corner_state::force + }; + + // Corner state to be initialized for the SGH solver + static const std::vector required_corner_state = + { + corner_state::force, + corner_state::mass + }; } ///////////////////////////////////////////////////////////////////////////// diff --git a/single-node-refactor/src/Solvers/SGH_solver_3D/src/sgh_initialize.cpp b/single-node-refactor/src/Solvers/SGH_solver_3D/src/sgh_initialize.cpp index ccfd52ba7..a4324d392 100644 --- a/single-node-refactor/src/Solvers/SGH_solver_3D/src/sgh_initialize.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver_3D/src/sgh_initialize.cpp @@ -44,8 +44,14 @@ void SGH3D::initialize(SimulationParameters_t& SimulationParamaters, State_t& State) const { int num_nodes = mesh.num_nodes; + int num_gauss_pts = mesh.num_elems; int rk_num_bins = SimulationParamaters.dynamic_options.rk_num_stages; - int num_dim = 3; + int num_dim = mesh.num_dims; State.node.initialize(rk_num_bins, num_nodes, num_dim, SGH3D_State::required_node_state); + State.GaussPoints.initialize(rk_num_bins, num_gauss_pts, num_dim, SGH3D_State::required_gauss_pt_state); + + // NOTE: Material points and material corners are initialize in sgh_setup after calculating the material->mesh maps + + } \ No newline at end of file diff --git a/single-node-refactor/src/Solvers/SGH_solver_3D/src/sgh_setup.cpp b/single-node-refactor/src/Solvers/SGH_solver_3D/src/sgh_setup.cpp index de8973de1..ddf8510f0 100644 --- a/single-node-refactor/src/Solvers/SGH_solver_3D/src/sgh_setup.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver_3D/src/sgh_setup.cpp @@ -265,6 +265,9 @@ void SGH3D::setup(SimulationParameters_t& SimulationParamaters, const size_t rk_num_bins = SimulationParamaters.dynamic_options.rk_num_bins; + // Calculate element volume + geometry::get_vol(State.GaussPoints.vol, State.node.coords, mesh); + // create temporary state fields // Painting routine requires only 1 material per GaussPoint DCArrayKokkos GaussPoint_den(num_elems); @@ -345,8 +348,8 @@ void SGH3D::setup(SimulationParameters_t& SimulationParamaters, size_t num_corners_for_mat = num_elems_for_mat * mesh.num_nodes_in_elem; State.MaterialToMeshMaps(mat_id).initialize(num_elems_for_mat); - State.MaterialPoints(mat_id).initialize(rk_num_bins, num_points_for_mat, 3); // aways 3D, even for 2D-RZ calcs - State.MaterialCorners(mat_id).initialize(num_corners_for_mat, mesh.num_dims); + State.MaterialPoints(mat_id).initialize(rk_num_bins, num_points_for_mat, mesh.num_dims, required_material_pt_state); + State.MaterialCorners(mat_id).initialize(num_corners_for_mat, mesh.num_dims, required_material_corner_state); // zones are not used } // end for mat_id diff --git a/single-node-refactor/src/Solvers/SGH_solver_rz/include/sgh_solver_rz.h b/single-node-refactor/src/Solvers/SGH_solver_rz/include/sgh_solver_rz.h index fa6ccaf04..4b91e1864 100644 --- a/single-node-refactor/src/Solvers/SGH_solver_rz/include/sgh_solver_rz.h +++ b/single-node-refactor/src/Solvers/SGH_solver_rz/include/sgh_solver_rz.h @@ -51,6 +51,51 @@ struct corners_in_mat_t; using namespace mtr; // matar namespace +namespace SGHRZ_State +{ + // Node state to be initialized for the SGH solver + static const std::vector required_node_state = + { + node_state::coords, + node_state::velocity, + node_state::mass, + node_state::temp + }; + + // Gauss point state to be initialized for the SGH solver + static const std::vector required_gauss_pt_state = + { + gauss_pt_state::volume, + gauss_pt_state::divergence_velocity + }; + + // Material point state to be initialized for the SGH solver + static const std::vector required_material_pt_state = + { + material_pt_state::density, + material_pt_state::pressure, + material_pt_state::stress, + material_pt_state::sound_speed, + material_pt_state::mass, + material_pt_state::volume_fraction, + material_pt_state::specific_internal_energy, + material_pt_state::eroded_flag + }; + + // Material corner state to be initialized for the SGH solver + static const std::vector required_material_corner_state = + { + material_corner_state::force + }; + + // Corner state to be initialized for the SGH solver + static const std::vector required_corner_state = + { + corner_state::force, + corner_state::mass + }; +} + ///////////////////////////////////////////////////////////////////////////// /// /// \class SGHRZ @@ -72,15 +117,18 @@ class SGHRZ : public Solver ~SGHRZ() = default; - // Initialize data specific to the SGHRZ solver + ///////////////////////////////////////////////////////////////////////////// + /// + /// \fn Initialize + /// + /// \brief Initializes data associated with the SGHRZ solver + /// + ///////////////////////////////////////////////////////////////////////////// void initialize(SimulationParameters_t& SimulationParamaters, Material_t& Materials, Mesh_t& mesh, BoundaryCondition_t& Boundary, - State_t& State) const override - { - // stuff goes here - } + State_t& State) const override; ///////////////////////////////////////////////////////////////////////////// /// diff --git a/single-node-refactor/src/Solvers/SGH_solver_rz/src/sgh_initialize_rz.cpp b/single-node-refactor/src/Solvers/SGH_solver_rz/src/sgh_initialize_rz.cpp new file mode 100644 index 000000000..bd11c96e0 --- /dev/null +++ b/single-node-refactor/src/Solvers/SGH_solver_rz/src/sgh_initialize_rz.cpp @@ -0,0 +1,55 @@ +/********************************************************************************************** +© 2020. Triad National Security, LLC. All rights reserved. +This program was produced under U.S. Government contract 89233218CNA000001 for Los Alamos +National Laboratory (LANL), which is operated by Triad National Security, LLC for the U.S. +Department of Energy/National Nuclear Security Administration. All rights in the program are +reserved by Triad National Security, LLC, and the U.S. Department of Energy/National Nuclear +Security Administration. The Government is granted for itself and others acting on its behalf a +nonexclusive, paid-up, irrevocable worldwide license in this material to reproduce, prepare +derivative works, distribute copies to the public, perform publicly and display publicly, and +to permit others to do so. +This program is open source under the BSD-3 License. +Redistribution and use in source and binary forms, with or without modification, are permitted +provided that the following conditions are met: +1. Redistributions of source code must retain the above copyright notice, this list of +conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, this list of +conditions and the following disclaimer in the documentation and/or other materials +provided with the distribution. +3. Neither the name of the copyright holder nor the names of its contributors may be used +to endorse or promote products derived from this software without specific prior +written permission. +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +**********************************************************************************************/ + +#include "sgh_solver_rz.h" +#include "state.h" +#include "mesh.h" +#include "simulation_parameters.h" + +void SGHRZ::initialize(SimulationParameters_t& SimulationParamaters, + Material_t& Materials, + Mesh_t& mesh, + BoundaryCondition_t& Boundary, + State_t& State) const +{ + int num_nodes = mesh.num_nodes; + int num_gauss_pts = mesh.num_elems; + int rk_num_bins = SimulationParamaters.dynamic_options.rk_num_stages; + int num_dim = mesh.num_dims; + + State.node.initialize(rk_num_bins, num_nodes, num_dim, SGHRZ_State::required_node_state); + State.GaussPoints.initialize(rk_num_bins, num_gauss_pts, num_dim, SGHRZ_State::required_gauss_pt_state); + + // NOTE: Material points and material corners are initialize in sgh_setup after calculating the material->mesh maps +} \ No newline at end of file diff --git a/single-node-refactor/src/common/include/mesh_io.h b/single-node-refactor/src/common/include/mesh_io.h index 4e64bbacb..48aa881e4 100644 --- a/single-node-refactor/src/common/include/mesh_io.h +++ b/single-node-refactor/src/common/include/mesh_io.h @@ -309,7 +309,7 @@ class MeshReader // initialize elem variables mesh.initialize_elems(num_elem, num_dims); - GaussPoints.initialize(rk_num_bins, num_elem, 3); // always 3D here, even for 2D + // GaussPoints.initialize(rk_num_bins, num_elem, 3); // always 3D here, even for 2D // for each cell read the list of associated nodes @@ -350,7 +350,7 @@ class MeshReader // initialize corner variables int num_corners = num_elem * mesh.num_nodes_in_elem; mesh.initialize_corners(num_corners); - corner.initialize(num_corners, num_dims); + // corner.initialize(num_corners, num_dims); // Close mesh input file fclose(in); @@ -509,7 +509,7 @@ class MeshReader // initialize elem variables mesh.initialize_elems(num_elem, num_dims); - State.GaussPoints.initialize(rk_num_bins, num_elem, 3); // always 3D here, even for 2D + // State.GaussPoints.initialize(rk_num_bins, num_elem, 3); // always 3D here, even for 2D // for each cell read the list of associated nodes @@ -528,7 +528,7 @@ class MeshReader // initialize corner variables int num_corners = num_elem * mesh.num_nodes_in_elem; mesh.initialize_corners(num_corners); - State.corner.initialize(num_corners, num_dims); + // State.corner.initialize(num_corners, num_dims); // Build connectivity mesh.build_connectivity(); @@ -691,7 +691,7 @@ class MeshBuilder // intialize elem variables mesh.initialize_elems(num_elems, num_dim); - GaussPoints.initialize(rk_num_bins, num_elems, 3); // always 3D here, even for 2D + // GaussPoints.initialize(rk_num_bins, num_elems, 3); // always 3D here, even for 2D // populate the elem center data structures for (int j = 0; j < num_elems_j; j++) { @@ -728,7 +728,7 @@ class MeshBuilder // intialize corner variables int num_corners = num_elems * mesh.num_nodes_in_elem; mesh.initialize_corners(num_corners); - corner.initialize(num_corners, num_dim); + // corner.initialize(num_corners, num_dim); // Build connectivity mesh.build_connectivity(); @@ -833,7 +833,7 @@ class MeshBuilder // intialize elem variables mesh.initialize_elems(num_elems, num_dim); - GaussPoints.initialize(rk_num_bins, num_elems, 3); // always 3D here, even for 2D + // GaussPoints.initialize(rk_num_bins, num_elems, 3); // always 3D here, even for 2D // populate the elem center data structures for (int j = 0; j < num_elems_j; j++) { @@ -870,7 +870,7 @@ class MeshBuilder // intialize corner variables int num_corners = num_elems * mesh.num_nodes_in_elem; mesh.initialize_corners(num_corners); - corner.initialize(num_corners, num_dim); + // corner.initialize(num_corners, num_dim); // Build connectivity mesh.build_connectivity(); @@ -969,7 +969,7 @@ class MeshBuilder // intialize elem variables mesh.initialize_elems(num_elems, num_dim); - GaussPoints.initialize(rk_num_bins, num_elems, 3); // always 3D here, even for 2D + // GaussPoints.initialize(rk_num_bins, num_elems, 3); // always 3D here, even for 2D // --- Build elems --- @@ -1012,7 +1012,7 @@ class MeshBuilder // intialize corner variables int num_corners = num_elems * mesh.num_nodes_in_elem; mesh.initialize_corners(num_corners); - corner.initialize(num_corners, num_dim); + // corner.initialize(num_corners, num_dim); // Build connectivity mesh.build_connectivity(); @@ -1140,7 +1140,7 @@ class MeshBuilder // intialize elem variables mesh.initialize_elems(num_elems, num_dim); - GaussPoints.initialize(rk_num_bins, num_elems, 3); // WARNING: Bug here, needs Pn order in initializer + // GaussPoints.initialize(rk_num_bins, num_elems, 3); // WARNING: Bug here, needs Pn order in initializer // --- Build elems --- @@ -1194,7 +1194,7 @@ class MeshBuilder // initialize corner variables int num_corners = num_elems * mesh.num_nodes_in_elem; mesh.initialize_corners(num_corners); - corner.initialize(num_corners, num_dim); + // corner.initialize(num_corners, num_dim); // Build connectivity mesh.build_connectivity(); diff --git a/single-node-refactor/src/common/include/state.h b/single-node-refactor/src/common/include/state.h index 348bde25d..fb4fca543 100644 --- a/single-node-refactor/src/common/include/state.h +++ b/single-node-refactor/src/common/include/state.h @@ -38,15 +38,10 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. using namespace mtr; -///////////////////////////////////////////////////////////////////////////// -/// -/// \struct node_t -/// -/// \brief Stores state information associated with a node -/// -///////////////////////////////////////////////////////////////////////////// -// Possible node states + + +// Possible node states, used to initialize node_t enum node_state { coords, @@ -54,6 +49,14 @@ enum node_state mass, temp }; + +///////////////////////////////////////////////////////////////////////////// +/// +/// \struct node_t +/// +/// \brief Stores state information associated with a node +/// +///////////////////////////////////////////////////////////////////////////// struct node_t { DCArrayKokkos coords; ///< Nodal coordinates @@ -62,20 +65,20 @@ struct node_t DCArrayKokkos temp; ///< Nodal temperature // initialization method (num_rk_storage_bins, num_nodes, num_dims, state to allocate) - void initialize(size_t num_rk, size_t num_nodes, size_t num_dims, std::vector node_state) + void initialize(size_t num_rk, size_t num_nodes, size_t num_dims, std::vector node_states) { - for (auto field : node_state){ + for (auto field : node_states){ switch(field){ - case node_state::coords: + case node_states::coords: if (coords.size() == 0) this->coords = DCArrayKokkos(num_rk, num_nodes, num_dims, "node_coordinates"); break; - case node_state::velocity: + case node_states::velocity: if (vel.size() == 0) this->vel = DCArrayKokkos(num_rk, num_nodes, num_dims, "node_velocity"); break; - case node_state::mass: + case node_states::mass: if (mass.size() == 0) this->mass = DCArrayKokkos(num_nodes, "node_mass"); break; - case node_state::temp: + case node_states::temp: if (temp.size() == 0) this->temp = DCArrayKokkos(num_nodes, "node_temp"); break; default: @@ -85,6 +88,14 @@ struct node_t }; // end method }; // end node_t + +// Possible gauss point states, used to initialize GaussPoint_t +enum gauss_pt_state +{ + volume, + divergence_velocity, +}; + ///////////////////////////////////////////////////////////////////////////// /// /// \struct GaussPoint_t @@ -94,16 +105,26 @@ struct node_t ///////////////////////////////////////////////////////////////////////////// struct GaussPoint_t { - // const size_t num_bins = 3; DCArrayKokkos vol; ///< GaussPoint volume DCArrayKokkos div; ///< GaussPoint divergence of velocity // initialization method (num_rk_storage_bins, num_cells, num_dims) - void initialize(size_t num_rk, size_t num_gauss_pnts, size_t num_dims) + void initialize(size_t num_rk, size_t num_gauss_pnts, size_t num_dims, std::vector gauss_pt_states) { - this->vol = DCArrayKokkos(num_gauss_pnts, "gauss_point_volume"); - this->div = DCArrayKokkos(num_gauss_pnts, "gauss_point_div"); + + for (auto field : gauss_pt_states){ + switch(field){ + case gauss_pt_state::volume: + if (vol.size() == 0) this->vol = DCArrayKokkos(num_gauss_pnts, "gauss_point_volume"); + break; + case gauss_pt_state::divergence_velocity: + if (div.size() == 0) this->div = DCArrayKokkos(num_gauss_pnts, "gauss_point_div"); + break; + default: + std::cout<<"Desired gauss point state not understood in GaussPoint_t initialize"< stress; ///< MaterialPoint stress DCArrayKokkos sspd; ///< MaterialPoint sound speed DCArrayKokkos mass; ///< MaterialPoint mass - - DCArrayKokkos volfrac; ///< MaterialPoint volume fraction - - DCArrayKokkos eroded; ///< MaterialPoint eroded or not flag - DCArrayKokkos sie; ///< coefficients for the sie in strong form, only used in some methods e.g., FE-SGH and MPM - DCArrayKokkos q_flux; ///< Heat flux // Material Models are stored on Material points @@ -157,31 +187,57 @@ struct MaterialPoint_t DCArrayKokkos eos_state_vars; ///< Array of state variables for the EOS DCArrayKokkos strength_state_vars; ///< Array of state variables for the strength - // initialization method (num_rk_storage_bins, num_pts_max, num_dims) - void initialize(size_t num_rk, size_t num_pts_max, size_t num_dims) - { - this->den = DCArrayKokkos(num_pts_max, "material_point_density"); - this->pres = DCArrayKokkos(num_pts_max, "material_point_pressure"); - this->stress = DCArrayKokkos(num_rk, num_pts_max, num_dims, num_dims, "material_point_stress"); - this->sspd = DCArrayKokkos(num_pts_max, "material_point_sspd"); - this->mass = DCArrayKokkos(num_pts_max, "material_point_mass"); - this->sie = DCArrayKokkos(num_rk, num_pts_max, "material_point_sie"); - this->volfrac = DCArrayKokkos(num_pts_max, "material_point_volfrac"); - this->eroded = DCArrayKokkos(num_pts_max, "material_point_eroded"); - this->q_flux = DCArrayKokkos(num_rk, num_pts_max, num_dims, "material_point_heat_flux"); - }; // end method - // initialization method for arbitrary-order FE (num_rk_storage_bins, num_pts_max, num_dims) - void initialize_Pn(size_t num_rk, size_t num_pts_max, size_t num_dims) + DCArrayKokkos volfrac; ///< MaterialPoint volume fraction + DCArrayKokkos eroded; ///< MaterialPoint eroded or not flag + + // initialization method (num_rk_storage_bins, num_pts_max, num_dims) + void initialize(size_t num_rk, size_t num_pts_max, size_t num_dims, std::vector material_pt_states) { - this->den = DCArrayKokkos(num_pts_max, "material_point_density"); - this->pres = DCArrayKokkos(num_pts_max, "material_point_pressure"); - this->stress = DCArrayKokkos(num_rk, num_pts_max, num_dims, num_dims, "material_point_stress"); - this->sspd = DCArrayKokkos(num_pts_max, "material_point_sspd"); - this->mass = DCArrayKokkos(num_pts_max, "material_point_mass"); + for (auto field : material_pt_states){ + switch(field){ + case material_pt_state::density: + if (den.size() == 0) this->den = DCArrayKokkos(num_pts_max, "material_point_density"); + break; + case material_pt_state::pressure: + if (pres.size() == 0) this->pres = DCArrayKokkos(num_pts_max, "material_point_pressure"); + break; + case material_pt_state::stress: + if (stress.size() == 0) this->stress = DCArrayKokkos(num_rk, num_pts_max, num_dims, num_dims, "material_point_stress"); + break; + case material_pt_state::sound_speed: + if (sspd.size() == 0) this->sspd = DCArrayKokkos(num_pts_max, "material_point_sspd"); + break; + case material_pt_state::mass: + if (mass.size() == 0) this->mass = DCArrayKokkos(num_pts_max, "material_point_mass"); + break; + case material_pt_state::volume_fraction: + if (volfrac.size() == 0) this->volfrac = DCArrayKokkos(num_pts_max, "material_point_volfrac"); + break; + case material_pt_state::specific_internal_energy: + if (sie.size() == 0) this->sie = DCArrayKokkos(num_rk, num_pts_max, "material_point_sie"); + break; + case material_pt_state::heat_flux: + if (q_flux.size() == 0) this->q_flux = DCArrayKokkos(num_rk, num_pts_max, num_dims, "material_point_heat_flux"); + break; + case material_pt_state::eroded_flag: + if (eroded.size() == 0) this->eroded = DCArrayKokkos(num_pts_max, "material_point_eroded"); + break; + default: + std::cout<<"Desired material point state not understood in MaterialPoint_t initialize"< sie; ///< coefficients for the sie polynomial field // initialization method for arbitrary-order FE (num_rk_storage_bins, num_zones) - void initialize_Pn(size_t num_rk, size_t num_zones_max) + void initialize_Pn(size_t num_rk, size_t num_zones_max, std::vector material_zone_states) { - this->sie = DCArrayKokkos(num_rk, num_zones_max, "material_zone_sie"); + for (auto field : material_zone_states){ + switch(field){ + case material_zone_state::specific_internal_energy: + if (sie.size() == 0) this->sie = DCArrayKokkos(num_rk, num_zones_max, "material_zone_sie"); + break; + default: + std::cout<<"Desired material zone state not understood in MaterialZone_t initialize"< q_flux; ///< Corner heat flux // initialization method (num_corners, num_dims) - void initialize(size_t num_corners_max, size_t num_dims) + void initialize(size_t num_corners_max, size_t num_dims, std::vector material_corner_states) { - this->force = DCArrayKokkos(num_corners_max, num_dims, "material_corner_force"); - this->q_flux = DCArrayKokkos(2, num_corners_max, num_dims, "material_corner_heat_flux"); // WARNING: hard coding rk2 + for (auto field : material_corner_states){ + switch(field){ + case material_corner_state::force: + if (force.size() == 0) this->force = DCArrayKokkos(num_corners_max, num_dims, "material_corner_force"); + break; + case material_corner_state::heat_flux: + if (force.size() == 0) this->q_flux = DCArrayKokkos(2, num_corners_max, num_dims, "material_corner_heat_flux"); // WARNING: hard coding rk2 + break; + default: + std::cout<<"Desired material corner state not understood in MaterialCorner_t initialize"< q_flux; ///< Corner heat flux // initialization method (num_corners, num_dims) - void initialize(size_t num_corners, size_t num_dims) + void initialize(size_t num_corners, size_t num_dims, std::vector corner_states) { - this->force = DCArrayKokkos(num_corners, num_dims, "corner_force"); - this->mass = DCArrayKokkos(num_corners, "corner_mass"); - this->q_flux = DCArrayKokkos(2, num_corners, num_dims, "corner_heat_flux"); // WARNING: hard coding rk2 + + for (auto field : corner_states){ + switch(field){ + case corner_state::force: + if (force.size() == 0) this->force = DCArrayKokkos(num_corners, num_dims, "corner_force"); + break; + case corner_state::mass: + if (mass.size() == 0) this->mass = DCArrayKokkos(num_corners, "corner_mass"); + break; + case corner_state::heat_flux: + if (q_flux.size() == 0) this->q_flux = DCArrayKokkos(2, num_corners, num_dims, "corner_heat_flux"); // WARNING: hard coding rk2 + break; + default: + std::cout<<"Desired corner state not understood in corner_t initialize"< Date: Mon, 9 Sep 2024 12:13:09 -0500 Subject: [PATCH 227/233] ENH: Adding automated state for each solver WIP --- .../SGH_solver_3D/include/sgh_solver_3D.h | 2 +- .../SGH_solver_3D/src/sgh_initialize.cpp | 7 ++- .../Solvers/SGH_solver_3D/src/sgh_setup.cpp | 4 +- .../SGH_solver_rz/include/sgh_solver_rz.h | 2 +- .../SGH_solver_rz/src/sgh_initialize_rz.cpp | 5 +- .../SGH_solver_rz/src/sgh_setup_rz.cpp | 4 +- .../SGTM_solver_3D/include/sgtm_solver_3D.h | 46 +++++++++++++++ .../SGTM_solver_3D/src/sgtm_initialize.cpp | 58 +++++++++++++++++++ .../Solvers/SGTM_solver_3D/src/sgtm_setup.cpp | 4 +- 9 files changed, 120 insertions(+), 12 deletions(-) create mode 100644 single-node-refactor/src/Solvers/SGTM_solver_3D/src/sgtm_initialize.cpp diff --git a/single-node-refactor/src/Solvers/SGH_solver_3D/include/sgh_solver_3D.h b/single-node-refactor/src/Solvers/SGH_solver_3D/include/sgh_solver_3D.h index 57ecf17d8..2c33095c2 100644 --- a/single-node-refactor/src/Solvers/SGH_solver_3D/include/sgh_solver_3D.h +++ b/single-node-refactor/src/Solvers/SGH_solver_3D/include/sgh_solver_3D.h @@ -59,7 +59,7 @@ namespace SGH3D_State node_state::coords, node_state::velocity, node_state::mass, - node_state::temp + node_state::temp // Note, remove this, unused WIP }; // Gauss point state to be initialized for the SGH solver diff --git a/single-node-refactor/src/Solvers/SGH_solver_3D/src/sgh_initialize.cpp b/single-node-refactor/src/Solvers/SGH_solver_3D/src/sgh_initialize.cpp index a4324d392..7642abb03 100644 --- a/single-node-refactor/src/Solvers/SGH_solver_3D/src/sgh_initialize.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver_3D/src/sgh_initialize.cpp @@ -45,13 +45,14 @@ void SGH3D::initialize(SimulationParameters_t& SimulationParamaters, { int num_nodes = mesh.num_nodes; int num_gauss_pts = mesh.num_elems; + int num_corners = mesh.num_corners; int rk_num_bins = SimulationParamaters.dynamic_options.rk_num_stages; int num_dim = mesh.num_dims; - + State.node.initialize(rk_num_bins, num_nodes, num_dim, SGH3D_State::required_node_state); State.GaussPoints.initialize(rk_num_bins, num_gauss_pts, num_dim, SGH3D_State::required_gauss_pt_state); - + State.corner.initialize(num_corners, num_dim, SGH3D_State::required_corner_state); + // NOTE: Material points and material corners are initialize in sgh_setup after calculating the material->mesh maps - } \ No newline at end of file diff --git a/single-node-refactor/src/Solvers/SGH_solver_3D/src/sgh_setup.cpp b/single-node-refactor/src/Solvers/SGH_solver_3D/src/sgh_setup.cpp index ddf8510f0..16b0d90be 100644 --- a/single-node-refactor/src/Solvers/SGH_solver_3D/src/sgh_setup.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver_3D/src/sgh_setup.cpp @@ -348,8 +348,8 @@ void SGH3D::setup(SimulationParameters_t& SimulationParamaters, size_t num_corners_for_mat = num_elems_for_mat * mesh.num_nodes_in_elem; State.MaterialToMeshMaps(mat_id).initialize(num_elems_for_mat); - State.MaterialPoints(mat_id).initialize(rk_num_bins, num_points_for_mat, mesh.num_dims, required_material_pt_state); - State.MaterialCorners(mat_id).initialize(num_corners_for_mat, mesh.num_dims, required_material_corner_state); + State.MaterialPoints(mat_id).initialize(rk_num_bins, num_points_for_mat, mesh.num_dims, SGH3D_State::required_material_pt_state); + State.MaterialCorners(mat_id).initialize(num_corners_for_mat, mesh.num_dims, SGH3D_State::required_material_corner_state); // zones are not used } // end for mat_id diff --git a/single-node-refactor/src/Solvers/SGH_solver_rz/include/sgh_solver_rz.h b/single-node-refactor/src/Solvers/SGH_solver_rz/include/sgh_solver_rz.h index 4b91e1864..1baa479c1 100644 --- a/single-node-refactor/src/Solvers/SGH_solver_rz/include/sgh_solver_rz.h +++ b/single-node-refactor/src/Solvers/SGH_solver_rz/include/sgh_solver_rz.h @@ -59,7 +59,7 @@ namespace SGHRZ_State node_state::coords, node_state::velocity, node_state::mass, - node_state::temp + node_state::temp // Note, remove this, unused WIP }; // Gauss point state to be initialized for the SGH solver diff --git a/single-node-refactor/src/Solvers/SGH_solver_rz/src/sgh_initialize_rz.cpp b/single-node-refactor/src/Solvers/SGH_solver_rz/src/sgh_initialize_rz.cpp index bd11c96e0..5498994d1 100644 --- a/single-node-refactor/src/Solvers/SGH_solver_rz/src/sgh_initialize_rz.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver_rz/src/sgh_initialize_rz.cpp @@ -45,11 +45,14 @@ void SGHRZ::initialize(SimulationParameters_t& SimulationParamaters, { int num_nodes = mesh.num_nodes; int num_gauss_pts = mesh.num_elems; + int num_corners = mesh.num_corners; int rk_num_bins = SimulationParamaters.dynamic_options.rk_num_stages; int num_dim = mesh.num_dims; + State.node.initialize(rk_num_bins, num_nodes, num_dim, SGHRZ_State::required_node_state); State.GaussPoints.initialize(rk_num_bins, num_gauss_pts, num_dim, SGHRZ_State::required_gauss_pt_state); - + State.corner.initialize(num_corners, num_dim, SGHRZ_State::required_corner_state); + // NOTE: Material points and material corners are initialize in sgh_setup after calculating the material->mesh maps } \ No newline at end of file diff --git a/single-node-refactor/src/Solvers/SGH_solver_rz/src/sgh_setup_rz.cpp b/single-node-refactor/src/Solvers/SGH_solver_rz/src/sgh_setup_rz.cpp index 844804244..679036a34 100644 --- a/single-node-refactor/src/Solvers/SGH_solver_rz/src/sgh_setup_rz.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver_rz/src/sgh_setup_rz.cpp @@ -387,8 +387,8 @@ void SGHRZ::setup(SimulationParameters_t& SimulationParamaters, size_t num_corners_for_mat = num_elems_for_mat*mesh.num_nodes_in_elem; State.MaterialToMeshMaps(mat_id).initialize(num_elems_for_mat); - State.MaterialPoints(mat_id).initialize(rk_num_bins, num_points_for_mat, 3); // aways 3D, even for 2D-RZ calcs - State.MaterialCorners(mat_id).initialize(num_corners_for_mat, mesh.num_dims); + State.MaterialPoints(mat_id).initialize(rk_num_bins, num_points_for_mat, 3, SGHRZ_State::required_material_pt_state); // aways 3D, even for 2D-RZ calcs + State.MaterialCorners(mat_id).initialize(num_corners_for_mat, mesh.num_dims, SGHRZ_State::required_material_corner_state); // zones are not used } // end for mat_id diff --git a/single-node-refactor/src/Solvers/SGTM_solver_3D/include/sgtm_solver_3D.h b/single-node-refactor/src/Solvers/SGTM_solver_3D/include/sgtm_solver_3D.h index 87cef94a3..eece79b3f 100644 --- a/single-node-refactor/src/Solvers/SGTM_solver_3D/include/sgtm_solver_3D.h +++ b/single-node-refactor/src/Solvers/SGTM_solver_3D/include/sgtm_solver_3D.h @@ -49,6 +49,52 @@ struct corners_in_mat_t; using namespace mtr; // matar namespace + +namespace SGTM3D_State +{ + // Node state to be initialized for the SGH solver + static const std::vector required_node_state = + { + node_state::coords, + node_state::velocity, + node_state::mass, + node_state::temp + }; + + // Gauss point state to be initialized for the SGH solver + static const std::vector required_gauss_pt_state = + { + gauss_pt_state::volume, + gauss_pt_state::divergence_velocity + }; + + // Material point state to be initialized for the SGH solver + static const std::vector required_material_pt_state = + { + material_pt_state::density, + material_pt_state::pressure, + material_pt_state::stress, + material_pt_state::sound_speed, + material_pt_state::mass, + material_pt_state::volume_fraction, + material_pt_state::specific_internal_energy, + material_pt_state::eroded_flag + }; + + // Material corner state to be initialized for the SGH solver + static const std::vector required_material_corner_state = + { + material_corner_state::force + }; + + // Corner state to be initialized for the SGH solver + static const std::vector required_corner_state = + { + corner_state::force, + corner_state::mass + }; +} + ///////////////////////////////////////////////////////////////////////////// /// /// \class SGTM diff --git a/single-node-refactor/src/Solvers/SGTM_solver_3D/src/sgtm_initialize.cpp b/single-node-refactor/src/Solvers/SGTM_solver_3D/src/sgtm_initialize.cpp new file mode 100644 index 000000000..e32fe8aea --- /dev/null +++ b/single-node-refactor/src/Solvers/SGTM_solver_3D/src/sgtm_initialize.cpp @@ -0,0 +1,58 @@ +/********************************************************************************************** +© 2020. Triad National Security, LLC. All rights reserved. +This program was produced under U.S. Government contract 89233218CNA000001 for Los Alamos +National Laboratory (LANL), which is operated by Triad National Security, LLC for the U.S. +Department of Energy/National Nuclear Security Administration. All rights in the program are +reserved by Triad National Security, LLC, and the U.S. Department of Energy/National Nuclear +Security Administration. The Government is granted for itself and others acting on its behalf a +nonexclusive, paid-up, irrevocable worldwide license in this material to reproduce, prepare +derivative works, distribute copies to the public, perform publicly and display publicly, and +to permit others to do so. +This program is open source under the BSD-3 License. +Redistribution and use in source and binary forms, with or without modification, are permitted +provided that the following conditions are met: +1. Redistributions of source code must retain the above copyright notice, this list of +conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, this list of +conditions and the following disclaimer in the documentation and/or other materials +provided with the distribution. +3. Neither the name of the copyright holder nor the names of its contributors may be used +to endorse or promote products derived from this software without specific prior +written permission. +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +**********************************************************************************************/ + +#include "sgtm_solver_3D.h" +#include "state.h" +#include "mesh.h" +#include "simulation_parameters.h" + +void SGTM3D::initialize(SimulationParameters_t& SimulationParamaters, + Material_t& Materials, + Mesh_t& mesh, + BoundaryCondition_t& Boundary, + State_t& State) const +{ + int num_nodes = mesh.num_nodes; + int num_gauss_pts = mesh.num_elems; + int num_corners = mesh.num_corners; + int rk_num_bins = SimulationParamaters.dynamic_options.rk_num_stages; + int num_dim = mesh.num_dims; + + + State.node.initialize(rk_num_bins, num_nodes, num_dim, SGTM3D_Staterequired_node_state); + State.GaussPoints.initialize(rk_num_bins, num_gauss_pts, num_dim, SGTM3D_Staterequired_gauss_pt_state); + State.corner.initialize(num_corners, num_dim, SGTM3D_Staterequired_corner_state); + + // NOTE: Material points and material corners are initialize in sgh_setup after calculating the material->mesh maps +} \ No newline at end of file diff --git a/single-node-refactor/src/Solvers/SGTM_solver_3D/src/sgtm_setup.cpp b/single-node-refactor/src/Solvers/SGTM_solver_3D/src/sgtm_setup.cpp index e2f1c491b..48f55debe 100644 --- a/single-node-refactor/src/Solvers/SGTM_solver_3D/src/sgtm_setup.cpp +++ b/single-node-refactor/src/Solvers/SGTM_solver_3D/src/sgtm_setup.cpp @@ -344,8 +344,8 @@ void SGTM3D::setup(SimulationParameters_t& SimulationParamaters, size_t num_corners_for_mat = num_elems_for_mat * mesh.num_nodes_in_elem; State.MaterialToMeshMaps(mat_id).initialize(num_elems_for_mat); - State.MaterialPoints(mat_id).initialize(rk_num_bins, num_points_for_mat, 3); // aways 3D, even for 2D-RZ calcs - State.MaterialCorners(mat_id).initialize(num_corners_for_mat, mesh.num_dims); + State.MaterialPoints(mat_id).initialize(rk_num_bins, num_points_for_mat, 3, SGTM3D_State::required_material_pt_state); // aways 3D, even for 2D-RZ calcs + State.MaterialCorners(mat_id).initialize(num_corners_for_mat, mesh.num_dims, SGTM3D_State::required_material_corner_state); // zones are not used } // end for mat_id From af69597e67d9c24dffe2eb4ee372b92dc16f5ba2 Mon Sep 17 00:00:00 2001 From: Jacob Moore Date: Mon, 9 Sep 2024 14:13:32 -0500 Subject: [PATCH 228/233] ENH: Adding state initialization per solver, test pass --- .../Solvers/SGH_solver_3D/src/sgh_setup.cpp | 1 + .../src/Solvers/SGH_solver_rz/CMakeLists.txt | 1 + .../SGH_solver_rz/include/sgh_solver_rz.h | 5 +++-- .../SGH_solver_rz/src/sgh_setup_rz.cpp | 3 +++ .../src/Solvers/SGTM_solver_3D/CMakeLists.txt | 1 + .../SGTM_solver_3D/include/sgtm_solver_3D.h | 10 ++++------ .../SGTM_solver_3D/src/sgtm_initialize.cpp | 6 +++--- .../src/common/include/state.h | 20 +++++++++---------- 8 files changed, 26 insertions(+), 21 deletions(-) diff --git a/single-node-refactor/src/Solvers/SGH_solver_3D/src/sgh_setup.cpp b/single-node-refactor/src/Solvers/SGH_solver_3D/src/sgh_setup.cpp index 16b0d90be..337747104 100644 --- a/single-node-refactor/src/Solvers/SGH_solver_3D/src/sgh_setup.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver_3D/src/sgh_setup.cpp @@ -39,6 +39,7 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "boundary_conditions.h" #include "state.h" #include "simulation_parameters.h" +#include "geometry_new.h" ///////////////////////////////////////////////////////////////////////////// /// diff --git a/single-node-refactor/src/Solvers/SGH_solver_rz/CMakeLists.txt b/single-node-refactor/src/Solvers/SGH_solver_rz/CMakeLists.txt index 6250a041b..f83899dd6 100755 --- a/single-node-refactor/src/Solvers/SGH_solver_rz/CMakeLists.txt +++ b/single-node-refactor/src/Solvers/SGH_solver_rz/CMakeLists.txt @@ -30,6 +30,7 @@ ${CMAKE_CURRENT_SOURCE_DIR}/src/properties_rz.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/sgh_execute_rz.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/time_integration_rz.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/sgh_setup_rz.cpp +${CMAKE_CURRENT_SOURCE_DIR}/src/sgh_initialize_rz.cpp ${CMAKE_CURRENT_SOURCE_DIR}/include/sgh_solver_rz.h PARENT_SCOPE ) \ No newline at end of file diff --git a/single-node-refactor/src/Solvers/SGH_solver_rz/include/sgh_solver_rz.h b/single-node-refactor/src/Solvers/SGH_solver_rz/include/sgh_solver_rz.h index 1baa479c1..99a70a2a4 100644 --- a/single-node-refactor/src/Solvers/SGH_solver_rz/include/sgh_solver_rz.h +++ b/single-node-refactor/src/Solvers/SGH_solver_rz/include/sgh_solver_rz.h @@ -36,16 +36,17 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #define SGHRZ_SOLVER_RZ_H #include "solver.h" +#include "state.h" // Forward declare structs struct SimulationParameters_t; struct Material_t; struct Mesh_t; struct BoundaryCondition_t; -struct State_t; +// struct State_t; struct RegionFill_t; struct RegionFill_host_t; -struct corners_in_mat_t; +// struct corners_in_mat_t; diff --git a/single-node-refactor/src/Solvers/SGH_solver_rz/src/sgh_setup_rz.cpp b/single-node-refactor/src/Solvers/SGH_solver_rz/src/sgh_setup_rz.cpp index 679036a34..399538d4c 100644 --- a/single-node-refactor/src/Solvers/SGH_solver_rz/src/sgh_setup_rz.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver_rz/src/sgh_setup_rz.cpp @@ -287,6 +287,9 @@ void SGHRZ::setup(SimulationParameters_t& SimulationParamaters, const size_t rk_num_bins = SimulationParamaters.dynamic_options.rk_num_bins; + // Calculate element volume + geometry::get_vol(State.GaussPoints.vol, State.node.coords, mesh); + // create temporary state fields // Painting routine requires only 1 material per GaussPoint diff --git a/single-node-refactor/src/Solvers/SGTM_solver_3D/CMakeLists.txt b/single-node-refactor/src/Solvers/SGTM_solver_3D/CMakeLists.txt index 0cdb41311..ec7e1adba 100755 --- a/single-node-refactor/src/Solvers/SGTM_solver_3D/CMakeLists.txt +++ b/single-node-refactor/src/Solvers/SGTM_solver_3D/CMakeLists.txt @@ -30,6 +30,7 @@ ${CMAKE_CURRENT_SOURCE_DIR}/src/properties.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/sgtm_execute.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/time_integration.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/sgtm_setup.cpp +${CMAKE_CURRENT_SOURCE_DIR}/src/sgtm_initialize.cpp ${CMAKE_CURRENT_SOURCE_DIR}/include/sgtm_solver_3D.h PARENT_SCOPE ) \ No newline at end of file diff --git a/single-node-refactor/src/Solvers/SGTM_solver_3D/include/sgtm_solver_3D.h b/single-node-refactor/src/Solvers/SGTM_solver_3D/include/sgtm_solver_3D.h index eece79b3f..87956dc98 100644 --- a/single-node-refactor/src/Solvers/SGTM_solver_3D/include/sgtm_solver_3D.h +++ b/single-node-refactor/src/Solvers/SGTM_solver_3D/include/sgtm_solver_3D.h @@ -36,16 +36,17 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #define SGTM3D_SOLVER_H #include "solver.h" +#include "state.h" // Forward declare structs struct SimulationParameters_t; struct Material_t; struct Mesh_t; struct BoundaryCondition_t; -struct State_t; +// struct State_t; struct RegionFill_t; struct RegionFill_host_t; -struct corners_in_mat_t; +// struct corners_in_mat_t; using namespace mtr; // matar namespace @@ -121,10 +122,7 @@ class SGTM3D : public Solver Material_t& Materials, Mesh_t& mesh, BoundaryCondition_t& Boundary, - State_t& State) const override - { - // stuff goes here - } + State_t& State) const override; ///////////////////////////////////////////////////////////////////////////// /// diff --git a/single-node-refactor/src/Solvers/SGTM_solver_3D/src/sgtm_initialize.cpp b/single-node-refactor/src/Solvers/SGTM_solver_3D/src/sgtm_initialize.cpp index e32fe8aea..c1f9779d9 100644 --- a/single-node-refactor/src/Solvers/SGTM_solver_3D/src/sgtm_initialize.cpp +++ b/single-node-refactor/src/Solvers/SGTM_solver_3D/src/sgtm_initialize.cpp @@ -50,9 +50,9 @@ void SGTM3D::initialize(SimulationParameters_t& SimulationParamaters, int num_dim = mesh.num_dims; - State.node.initialize(rk_num_bins, num_nodes, num_dim, SGTM3D_Staterequired_node_state); - State.GaussPoints.initialize(rk_num_bins, num_gauss_pts, num_dim, SGTM3D_Staterequired_gauss_pt_state); - State.corner.initialize(num_corners, num_dim, SGTM3D_Staterequired_corner_state); + State.node.initialize(rk_num_bins, num_nodes, num_dim, SGTM3D_State::required_node_state); + State.GaussPoints.initialize(rk_num_bins, num_gauss_pts, num_dim, SGTM3D_State::required_gauss_pt_state); + State.corner.initialize(num_corners, num_dim, SGTM3D_State::required_corner_state); // NOTE: Material points and material corners are initialize in sgh_setup after calculating the material->mesh maps } \ No newline at end of file diff --git a/single-node-refactor/src/common/include/state.h b/single-node-refactor/src/common/include/state.h index fb4fca543..994ac9d4c 100644 --- a/single-node-refactor/src/common/include/state.h +++ b/single-node-refactor/src/common/include/state.h @@ -42,7 +42,7 @@ using namespace mtr; // Possible node states, used to initialize node_t -enum node_state +enum class node_state { coords, velocity, @@ -69,16 +69,16 @@ struct node_t { for (auto field : node_states){ switch(field){ - case node_states::coords: + case node_state::coords: if (coords.size() == 0) this->coords = DCArrayKokkos(num_rk, num_nodes, num_dims, "node_coordinates"); break; - case node_states::velocity: + case node_state::velocity: if (vel.size() == 0) this->vel = DCArrayKokkos(num_rk, num_nodes, num_dims, "node_velocity"); break; - case node_states::mass: + case node_state::mass: if (mass.size() == 0) this->mass = DCArrayKokkos(num_nodes, "node_mass"); break; - case node_states::temp: + case node_state::temp: if (temp.size() == 0) this->temp = DCArrayKokkos(num_nodes, "node_temp"); break; default: @@ -90,7 +90,7 @@ struct node_t // Possible gauss point states, used to initialize GaussPoint_t -enum gauss_pt_state +enum class gauss_pt_state { volume, divergence_velocity, @@ -151,7 +151,7 @@ struct MaterialToMeshMap_t // Possible material point states, used to initialize MaterialPoint_t -enum material_pt_state +enum class material_pt_state { density, pressure, @@ -233,7 +233,7 @@ struct MaterialPoint_t // Possible material zone states, used to initialize MaterialZone_t -enum material_zone_state +enum class material_zone_state { specific_internal_energy, }; @@ -270,7 +270,7 @@ struct MaterialZone_t // Possible material corner states, used to initialize MaterialCorner_t -enum material_corner_state +enum class material_corner_state { force, heat_flux, @@ -312,7 +312,7 @@ struct MaterialCorner_t // Possible material corner states, used to initialize MaterialCorner_t -enum corner_state +enum class corner_state { force, mass, From 70b88fc8c956db71483775600950fc1014ccdfd9 Mon Sep 17 00:00:00 2001 From: Jacob Moore Date: Mon, 9 Sep 2024 15:10:07 -0500 Subject: [PATCH 229/233] ENH: Prep for automated state outputs. WIP --- .../Solvers/SGH_solver_3D/src/sgh_execute.cpp | 18 +++++- .../SGH_solver_rz/src/sgh_execute_rz.cpp | 15 ++++- .../SGTM_solver_3D/src/sgtm_execute.cpp | 16 ++++- .../src/common/include/mesh_io.h | 62 ++++++++++++------- 4 files changed, 82 insertions(+), 29 deletions(-) diff --git a/single-node-refactor/src/Solvers/SGH_solver_3D/src/sgh_execute.cpp b/single-node-refactor/src/Solvers/SGH_solver_3D/src/sgh_execute.cpp index bf8c03828..a8bca819a 100644 --- a/single-node-refactor/src/Solvers/SGH_solver_3D/src/sgh_execute.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver_3D/src/sgh_execute.cpp @@ -144,7 +144,18 @@ void SGH3D::execute(SimulationParameters_t& SimulationParamaters, // Write initial state at t=0 printf("Writing outputs to file at %f \n", graphics_time); - mesh_writer.write_mesh(mesh, State, SimulationParamaters, time_value, graphics_times); + mesh_writer.write_mesh( + mesh, + State, + SimulationParamaters, + time_value, + graphics_times, + SGH3D_State::required_node_state, + SGH3D_State::required_gauss_pt_state, + SGH3D_State::required_material_pt_state); + + + graphics_time = time_value + graphics_dt_ival; // loop over the max number of time integration cycles @@ -360,7 +371,10 @@ void SGH3D::execute(SimulationParameters_t& SimulationParamaters, State, SimulationParamaters, time_value, - graphics_times); + graphics_times, + SGH3D_State::required_node_state, + SGH3D_State::required_gauss_pt_state, + SGH3D_State::required_material_pt_state); graphics_time = time_value + graphics_dt_ival; diff --git a/single-node-refactor/src/Solvers/SGH_solver_rz/src/sgh_execute_rz.cpp b/single-node-refactor/src/Solvers/SGH_solver_rz/src/sgh_execute_rz.cpp index c71c8001f..8fbf5afea 100644 --- a/single-node-refactor/src/Solvers/SGH_solver_rz/src/sgh_execute_rz.cpp +++ b/single-node-refactor/src/Solvers/SGH_solver_rz/src/sgh_execute_rz.cpp @@ -156,7 +156,15 @@ void SGHRZ::execute(SimulationParameters_t& SimulationParamaters, // Write initial state at t=0 printf("Writing outputs to file at %f \n", graphics_time); - mesh_writer.write_mesh(mesh, State, SimulationParamaters, time_value, graphics_times); + mesh_writer.write_mesh( + mesh, + State, + SimulationParamaters, + time_value, + graphics_times, + SGHRZ_State::required_node_state, + SGHRZ_State::required_gauss_pt_state, + SGHRZ_State::required_material_pt_state); graphics_time = time_value + graphics_dt_ival; @@ -394,7 +402,10 @@ void SGHRZ::execute(SimulationParameters_t& SimulationParamaters, State, SimulationParamaters, time_value, - graphics_times); + graphics_times, + SGHRZ_State::required_node_state, + SGHRZ_State::required_gauss_pt_state, + SGHRZ_State::required_material_pt_state); graphics_time = time_value + graphics_dt_ival; diff --git a/single-node-refactor/src/Solvers/SGTM_solver_3D/src/sgtm_execute.cpp b/single-node-refactor/src/Solvers/SGTM_solver_3D/src/sgtm_execute.cpp index a8337fba0..f61762d29 100644 --- a/single-node-refactor/src/Solvers/SGTM_solver_3D/src/sgtm_execute.cpp +++ b/single-node-refactor/src/Solvers/SGTM_solver_3D/src/sgtm_execute.cpp @@ -144,7 +144,16 @@ void SGTM3D::execute(SimulationParameters_t& SimulationParamaters, // Write initial state at t=0 printf("Writing outputs to file at %f \n", graphics_time); - mesh_writer.write_mesh(mesh, State, SimulationParamaters, time_value, graphics_times); + mesh_writer.write_mesh( + mesh, + State, + SimulationParamaters, + time_value, + graphics_times, + SGTM3D_State::required_node_state, + SGTM3D_State::required_gauss_pt_state, + SGTM3D_State::required_material_pt_state); + graphics_time = time_value + graphics_dt_ival; // loop over the max number of time integration cycles @@ -317,7 +326,10 @@ void SGTM3D::execute(SimulationParameters_t& SimulationParamaters, State, SimulationParamaters, time_value, - graphics_times); + graphics_times, + SGTM3D_State::required_node_state, + SGTM3D_State::required_gauss_pt_state, + SGTM3D_State::required_material_pt_state); graphics_time = time_value + graphics_dt_ival; diff --git a/single-node-refactor/src/common/include/mesh_io.h b/single-node-refactor/src/common/include/mesh_io.h index 48aa881e4..fa758ec75 100644 --- a/single-node-refactor/src/common/include/mesh_io.h +++ b/single-node-refactor/src/common/include/mesh_io.h @@ -689,9 +689,8 @@ class MeshBuilder } node.coords.update_device(); - // intialize elem variables + // initialize elem variables mesh.initialize_elems(num_elems, num_dim); - // GaussPoints.initialize(rk_num_bins, num_elems, 3); // always 3D here, even for 2D // populate the elem center data structures for (int j = 0; j < num_elems_j; j++) { @@ -778,7 +777,7 @@ class MeshBuilder const int num_elems = num_elems_i * num_elems_j; std::vector origin(num_dim); - // SimulationParamaters.mesh_input.origin.update_host(); + for (int i = 0; i < num_dim; i++) { origin[i] = SimulationParamaters.mesh_input.origin[i]; } // --- 2D parameters --- @@ -831,9 +830,8 @@ class MeshBuilder } node.coords.update_device(); - // intialize elem variables + // initialize elem variables mesh.initialize_elems(num_elems, num_dim); - // GaussPoints.initialize(rk_num_bins, num_elems, 3); // always 3D here, even for 2D // populate the elem center data structures for (int j = 0; j < num_elems_j; j++) { @@ -934,7 +932,7 @@ class MeshBuilder int rk_num_bins = SimulationParamaters.dynamic_options.rk_num_bins; - // intialize mesh node variables + // initialize mesh node variables mesh.initialize_nodes(num_nodes); // initialize node state variables, for now, we just need coordinates, the rest will be initialize by the respective solvers @@ -967,9 +965,8 @@ class MeshBuilder } node.coords.update_device(); - // intialize elem variables + // initialize elem variables mesh.initialize_elems(num_elems, num_dim); - // GaussPoints.initialize(rk_num_bins, num_elems, 3); // always 3D here, even for 2D // --- Build elems --- @@ -1009,7 +1006,7 @@ class MeshBuilder // update device side mesh.nodes_in_elem.update_device(); - // intialize corner variables + // initialize corner variables int num_corners = num_elems * mesh.num_nodes_in_elem; mesh.initialize_corners(num_corners); // corner.initialize(num_corners, num_dim); @@ -1077,7 +1074,6 @@ class MeshBuilder // const int num_zones = num_zones_i*num_zones_j*num_zones_k; // accounts for Pn std::vector origin(num_dim); - // SimulationParamaters.mesh_input.origin.update_host(); for (int i = 0; i < num_dim; i++) { origin[i] = SimulationParamaters.mesh_input.origin[i]; } // --- 3D parameters --- @@ -1138,9 +1134,8 @@ class MeshBuilder node.coords.update_device(); - // intialize elem variables + // initialize elem variables mesh.initialize_elems(num_elems, num_dim); - // GaussPoints.initialize(rk_num_bins, num_elems, 3); // WARNING: Bug here, needs Pn order in initializer // --- Build elems --- @@ -1240,28 +1235,40 @@ class MeshWriter State_t& State, SimulationParameters_t& SimulationParamaters, double time_value, - CArray graphics_times) + CArray graphics_times, + std::vector node_states, + std::vector gauss_pt_states, + std::vector material_pt_states) { if (SimulationParamaters.output_options.format == output_options::vtk) { write_vtk(mesh, State, SimulationParamaters, time_value, - graphics_times); + graphics_times, + node_states, + gauss_pt_states, + material_pt_states); } else if (SimulationParamaters.output_options.format == output_options::ensight) { write_ensight(mesh, State, SimulationParamaters, time_value, - graphics_times); + graphics_times, + node_states, + gauss_pt_states, + material_pt_states); } else if (SimulationParamaters.output_options.format == output_options::state) { write_material_point_state(mesh, State, SimulationParamaters, time_value, - graphics_times); + graphics_times, + node_states, + gauss_pt_states, + material_pt_states); } else{ std::cout << "**** MESH OUTPUT TYPE NOT SUPPORTED **** " << std::endl; @@ -1292,7 +1299,10 @@ class MeshWriter State_t& State, SimulationParameters_t& SimulationParamaters, double time_value, - CArray graphics_times) + CArray graphics_times, + std::vector node_states, + std::vector gauss_pt_states, + std::vector material_pt_states) { size_t num_mats = State.MaterialPoints.size(); @@ -1670,7 +1680,7 @@ class MeshWriter } /**\brief Given (i,j,k) coordinates within the Lagrange hex, return an offset into the local connectivity (PointIds) array. - * + *"den", "pres", "sie", "vol", "mass", "sspd", "speed", "mat_id", "elem_switch", "eroded" * The \a order parameter must point to an array of 3 integers specifying the order * along each axis of the hexahedron. */ @@ -1736,7 +1746,10 @@ class MeshWriter State_t& State, SimulationParameters_t& SimulationParamaters, double time_value, - CArray graphics_times) + CArray graphics_times, + std::vector node_states, + std::vector gauss_pt_states, + std::vector material_pt_states) { size_t num_mats = State.MaterialPoints.size(); @@ -2062,10 +2075,13 @@ class MeshWriter /// ///////////////////////////////////////////////////////////////////////////// void write_material_point_state(Mesh_t& mesh, - State_t& State, - SimulationParameters_t& SimulationParamaters, - double time_value, - CArray graphics_times) + State_t& State, + SimulationParameters_t& SimulationParamaters, + double time_value, + CArray graphics_times, + std::vector node_states, + std::vector gauss_pt_states, + std::vector material_pt_states) { // WARNING WARNING WARNING: // This currently assumes the gauss and material point IDs are the same as the element ID From f5655ed737199e1f75de77ed08b4280fa6547dde Mon Sep 17 00:00:00 2001 From: Jacob Moore Date: Wed, 11 Sep 2024 09:09:48 -0500 Subject: [PATCH 230/233] ENH: Update workflows to only publish manually for now --- .github/workflows/publish-elements.yaml | 4 ---- .github/workflows/publish-evpfft-cpu.yaml | 5 ----- .github/workflows/publish-evpfft-dev.yaml | 4 ---- .github/workflows/publish-evpfft-gui.yaml | 5 ----- .github/workflows/publish-fierro-cpu.yaml | 4 ---- .github/workflows/publish-fierro-dev.yaml | 4 ---- .github/workflows/publish-fierro-gui.yaml | 5 ----- .github/workflows/publish-heffte-cpu.yaml | 4 ---- .github/workflows/publish-heffte-cuda.yaml | 4 ---- .github/workflows/publish-voxelizer.yaml | 6 ------ 10 files changed, 45 deletions(-) diff --git a/.github/workflows/publish-elements.yaml b/.github/workflows/publish-elements.yaml index 7196d294c..34b6a473d 100644 --- a/.github/workflows/publish-elements.yaml +++ b/.github/workflows/publish-elements.yaml @@ -1,10 +1,6 @@ name: 'Publish Elements' on: - push: - paths: - - .conda/elements/** - - .github/workflows/publish-elements.yaml workflow_dispatch: jobs: diff --git a/.github/workflows/publish-evpfft-cpu.yaml b/.github/workflows/publish-evpfft-cpu.yaml index 57e1add6b..55f495e39 100644 --- a/.github/workflows/publish-evpfft-cpu.yaml +++ b/.github/workflows/publish-evpfft-cpu.yaml @@ -1,11 +1,6 @@ name: 'Publish EVPFFT-CPU' on: - push: - paths: - - .conda/evpfft/** - - src/EVPFFT/src/** - - .github/workflows/publish-evpfft-cpu.yaml workflow_dispatch: jobs: diff --git a/.github/workflows/publish-evpfft-dev.yaml b/.github/workflows/publish-evpfft-dev.yaml index a8622e9af..c630e3a01 100644 --- a/.github/workflows/publish-evpfft-dev.yaml +++ b/.github/workflows/publish-evpfft-dev.yaml @@ -1,10 +1,6 @@ name: 'Publish EVPFFT-dev' on: - push: - paths: - - .conda/evpfft-dev/cpu/** - - .github/workflows/publish-evpfft-dev.yaml workflow_dispatch: jobs: diff --git a/.github/workflows/publish-evpfft-gui.yaml b/.github/workflows/publish-evpfft-gui.yaml index 979dfc533..dd04206d7 100644 --- a/.github/workflows/publish-evpfft-gui.yaml +++ b/.github/workflows/publish-evpfft-gui.yaml @@ -1,11 +1,6 @@ name: 'Publish EVPFFT GUI' on: - push: - paths: - - .conda/evpfft-gui/** - - python/EVPFFT-GUI/** - - .github/workflows/publish-evpfft-gui.yaml workflow_dispatch: jobs: diff --git a/.github/workflows/publish-fierro-cpu.yaml b/.github/workflows/publish-fierro-cpu.yaml index a3aeff01b..9fb77f4da 100644 --- a/.github/workflows/publish-fierro-cpu.yaml +++ b/.github/workflows/publish-fierro-cpu.yaml @@ -1,10 +1,6 @@ name: 'Publish Fierro-CPU' on: - push: - paths: - - .conda/fierro/cpu/** - - .github/workflows/publish-fierro-cpu.yaml workflow_dispatch: jobs: diff --git a/.github/workflows/publish-fierro-dev.yaml b/.github/workflows/publish-fierro-dev.yaml index 7bf9238b4..cb9f60417 100644 --- a/.github/workflows/publish-fierro-dev.yaml +++ b/.github/workflows/publish-fierro-dev.yaml @@ -1,10 +1,6 @@ name: 'Publish Fierro-dev' on: - push: - paths: - - .conda/fierro-dev/cpu/** - - .github/workflows/publish-fierro-dev.yaml workflow_dispatch: jobs: diff --git a/.github/workflows/publish-fierro-gui.yaml b/.github/workflows/publish-fierro-gui.yaml index 50b1775ed..78721f8f6 100644 --- a/.github/workflows/publish-fierro-gui.yaml +++ b/.github/workflows/publish-fierro-gui.yaml @@ -1,11 +1,6 @@ name: 'Publish FIERRO GUI' on: - push: - paths: - - .conda/fierro-gui/** - - python/FIERRO-GUI/** - - .github/workflows/publish-fierro-gui.yaml workflow_dispatch: jobs: diff --git a/.github/workflows/publish-heffte-cpu.yaml b/.github/workflows/publish-heffte-cpu.yaml index 75a26e872..55e8fde11 100644 --- a/.github/workflows/publish-heffte-cpu.yaml +++ b/.github/workflows/publish-heffte-cpu.yaml @@ -1,10 +1,6 @@ name: 'Publish Heffte' on: - push: - paths: - - .conda/heffte/cpu/** - - .github/workflows/publish-heffte-cpu.yaml workflow_dispatch: jobs: diff --git a/.github/workflows/publish-heffte-cuda.yaml b/.github/workflows/publish-heffte-cuda.yaml index eae39cba7..e7998e06b 100644 --- a/.github/workflows/publish-heffte-cuda.yaml +++ b/.github/workflows/publish-heffte-cuda.yaml @@ -1,10 +1,6 @@ name: 'Publish Heffte CUDA' on: - push: - paths: - - .conda/heffte/cuda/** - - .github/workflows/publish-heffte-cuda.yaml workflow_dispatch: jobs: diff --git a/.github/workflows/publish-voxelizer.yaml b/.github/workflows/publish-voxelizer.yaml index c59ea34b2..1dd56fea3 100644 --- a/.github/workflows/publish-voxelizer.yaml +++ b/.github/workflows/publish-voxelizer.yaml @@ -1,12 +1,6 @@ name: 'Publish Voxelizer' on: - push: - paths: - - .conda/voxelizer/** - - src/Voxelizer/** - - python/Voxelizer/** - - .github/workflows/publish-voxelizer.yaml workflow_dispatch: jobs: From 46660ef53da1d6c8c84aef13a8de6d868b088e46 Mon Sep 17 00:00:00 2001 From: Jacob Moore Date: Wed, 11 Sep 2024 11:09:15 -0500 Subject: [PATCH 231/233] ENH: Update names for conda distributions --- .conda/elements/meta.yaml | 2 +- .conda/evpfft-dev/cpu/meta.yaml | 2 +- .conda/evpfft/cpu/meta.yaml | 2 +- .conda/fierro-dev/cpu/meta.yaml | 2 +- .conda/fierro-gui/meta.yaml | 2 +- .conda/fierro/cpu/meta.yaml | 2 +- .conda/heffte/cpu/meta.yaml | 4 ++-- .conda/heffte/cuda/meta.yaml | 4 ++-- .conda/trilinos/cpu/meta.yaml | 2 +- 9 files changed, 11 insertions(+), 11 deletions(-) diff --git a/.conda/elements/meta.yaml b/.conda/elements/meta.yaml index a3b2cde6a..0954baa35 100644 --- a/.conda/elements/meta.yaml +++ b/.conda/elements/meta.yaml @@ -3,7 +3,7 @@ {% set macos_compiler_version = "16" %} package: - name: elements + name: elements-cpu version: {{ version }} source: diff --git a/.conda/evpfft-dev/cpu/meta.yaml b/.conda/evpfft-dev/cpu/meta.yaml index 31a431ba2..c5bf76e3f 100644 --- a/.conda/evpfft-dev/cpu/meta.yaml +++ b/.conda/evpfft-dev/cpu/meta.yaml @@ -3,7 +3,7 @@ {% set macos_compiler_version = "16" %} package: - name: evpfft-dev + name: dev-evpfft-cpu version: {{ version }} build: diff --git a/.conda/evpfft/cpu/meta.yaml b/.conda/evpfft/cpu/meta.yaml index 1fe23e817..f49f13168 100644 --- a/.conda/evpfft/cpu/meta.yaml +++ b/.conda/evpfft/cpu/meta.yaml @@ -3,7 +3,7 @@ {% set macos_compiler_version = "16" %} package: - name: evpfft + name: fierro-evpfft-cpu version: {{ version }} source: diff --git a/.conda/fierro-dev/cpu/meta.yaml b/.conda/fierro-dev/cpu/meta.yaml index 3ef68df40..b63acd2bb 100644 --- a/.conda/fierro-dev/cpu/meta.yaml +++ b/.conda/fierro-dev/cpu/meta.yaml @@ -3,7 +3,7 @@ {% set macos_compiler_version = "16" %} package: - name: fierro-dev + name: dev-fe-cpu version: {{ version }} build: diff --git a/.conda/fierro-gui/meta.yaml b/.conda/fierro-gui/meta.yaml index 48012ac19..9e36d1acd 100644 --- a/.conda/fierro-gui/meta.yaml +++ b/.conda/fierro-gui/meta.yaml @@ -1,5 +1,5 @@ package: - name: fierro_gui + name: fierro-gui version: 1 source: diff --git a/.conda/fierro/cpu/meta.yaml b/.conda/fierro/cpu/meta.yaml index 2dad0321a..dc168c80b 100644 --- a/.conda/fierro/cpu/meta.yaml +++ b/.conda/fierro/cpu/meta.yaml @@ -7,7 +7,7 @@ #{% set mpi_version = "4.1" %} package: - name: fierro-cpu + name: fierro-fe-cpu version: {{ version }} source: diff --git a/.conda/heffte/cpu/meta.yaml b/.conda/heffte/cpu/meta.yaml index 9b5c10033..1da60b198 100644 --- a/.conda/heffte/cpu/meta.yaml +++ b/.conda/heffte/cpu/meta.yaml @@ -3,7 +3,7 @@ {% set macos_compiler_version = "16" %} package: - name: fierro-heffte + name: heffte-cpu version: {{ version }} source: @@ -35,7 +35,7 @@ about: license_family: BSD license_file: LICENSE summary: - LANL Fierro's dependency for EVPFFT solutions + LANL Fierro's dependency for EVPFFT solver description: Fierro (LANL code number C21030) is a modern C++ code designed to simulate quasi-static solid mechanics problems and transient, compressible material dynamic problems with Lagrangian methods, diff --git a/.conda/heffte/cuda/meta.yaml b/.conda/heffte/cuda/meta.yaml index cc7d1abad..fb792520f 100644 --- a/.conda/heffte/cuda/meta.yaml +++ b/.conda/heffte/cuda/meta.yaml @@ -4,7 +4,7 @@ #{% set cuda_version = "12.5" %} package: - name: fierro-heffte-cuda + name: heffte-cuda version: {{ version }} source: @@ -55,7 +55,7 @@ about: license_family: BSD license_file: LICENSE summary: - LANL Fierro's dependency for EVPFFT solutions + LANL Fierro's dependency for EVPFFT solver description: Fierro (LANL code number C21030) is a modern C++ code designed to simulate quasi-static solid mechanics problems and transient, compressible material dynamic problems with Lagrangian methods, diff --git a/.conda/trilinos/cpu/meta.yaml b/.conda/trilinos/cpu/meta.yaml index 94d70de08..17fba7dbd 100644 --- a/.conda/trilinos/cpu/meta.yaml +++ b/.conda/trilinos/cpu/meta.yaml @@ -3,7 +3,7 @@ {% set macos_compiler_version = "16" %} package: - name: fierro-trilinos-cpu + name: trilinos-cpu version: {{ version }} source: From cf5d7bce980581e5f829678ecb93bd53b49767a2 Mon Sep 17 00:00:00 2001 From: Jacob Moore Date: Wed, 11 Sep 2024 12:17:21 -0500 Subject: [PATCH 232/233] ENH: Fixes test for published conda packages --- .github/workflows/fierro-test-no-implicit.yml | 6 +++--- .github/workflows/fierro-test.yml | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/fierro-test-no-implicit.yml b/.github/workflows/fierro-test-no-implicit.yml index b829b5e06..d57ff4836 100644 --- a/.github/workflows/fierro-test-no-implicit.yml +++ b/.github/workflows/fierro-test-no-implicit.yml @@ -60,9 +60,9 @@ jobs: source ~/.bashrc conda activate build-env conda install --solver=classic conda-forge::conda-libmamba-solver conda-forge::libmamba conda-forge::libmambapy conda-forge::libarchive - conda install -c conda-forge -c fierromechanics fierro-cpu - conda install -c conda-forge -c fierromechanics evpfft - conda install -c conda-forge -c fierromechanics fierro_gui + conda install -c conda-forge -c fierromechanics fierro-fe-cpu + conda install -c conda-forge -c fierromechanics fierro-evpfft-cpu + conda install -c conda-forge -c fierromechanics fierro-gui - name: Verify package dependencies run: | diff --git a/.github/workflows/fierro-test.yml b/.github/workflows/fierro-test.yml index 55da1845e..39cb00f16 100644 --- a/.github/workflows/fierro-test.yml +++ b/.github/workflows/fierro-test.yml @@ -63,9 +63,9 @@ jobs: source ~/.bashrc conda activate build-env conda install --solver=classic conda-forge::conda-libmamba-solver conda-forge::libmamba conda-forge::libmambapy conda-forge::libarchive - conda install -c conda-forge -c fierromechanics fierro-cpu - conda install -c conda-forge -c fierromechanics evpfft - conda install -c conda-forge -c fierromechanics fierro_gui + conda install -c conda-forge -c fierromechanics fierro-fe-cpu + conda install -c conda-forge -c fierromechanics fierro-evpfft-cpu + conda install -c conda-forge -c fierromechanics fierro-gui - name: Verify package dependencies run: | From 5f1d895617fa9fcbe5f618691fceefd7239f0966 Mon Sep 17 00:00:00 2001 From: Nathaniel Morgan <47866137+nathanielmorgan@users.noreply.github.com> Date: Wed, 11 Sep 2024 12:18:01 -0600 Subject: [PATCH 233/233] Update README.md Fixed the Anaconda distribution documentation on the main page of README --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 3dc76f04d..34dc80223 100644 --- a/README.md +++ b/README.md @@ -24,15 +24,15 @@ In this example, the enviroment is called FierroCode, but any name can be used. To install the finite element physics solvers in **Fierro**, please type within the activated Anaconda environment: ``` -conda install -c conda-forge -c fierromechanics fierro-cpu +conda install -c conda-forge -c fierromechanics fierro-fe-cpu ``` The EVPFFT physics solver in **Fierro** can be installed by typing: ``` -conda install -c conda-forge -c fierromechanics evpfft +conda install -c conda-forge -c fierromechanics fierro-evpfft-cpu ``` A GUI is offered, it can be installed by typing: ``` -conda install -c conda-forge -c fierromechanics evpfft_gui +conda install -c conda-forge -c fierromechanics fierro-gui ``` After installing the finite element solvers, it gives you access to `fierro-mesh-builder`,`fierro-parallel-explicit`,`fierro-parallel-implicit`, and the `fierro-voxelizer` executables. These can be run by calling the appropriate executable with the desired input. For example, to call the parallel explicit hydrodynamics solver, use the following command: @@ -52,7 +52,7 @@ Sample yaml input files for the implicit finite element solver and topology opti The GUI can be run in the anaconda enviroment by typing: ``` -evpfft-gui +fierro-gui ``` The anaconda distributions of Fierro are located [here](https://anaconda.org/FierroMechanics).