diff --git a/.vs/ProjectSettings.json b/.vs/ProjectSettings.json deleted file mode 100644 index 0cf5ea5..0000000 --- a/.vs/ProjectSettings.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "CurrentProjectSetting": "No Configurations" -} \ No newline at end of file diff --git a/.vs/VSWorkspaceState.json b/.vs/VSWorkspaceState.json deleted file mode 100644 index 3da647a..0000000 --- a/.vs/VSWorkspaceState.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "ExpandedNodes": [ - "", - "\\build" - ], - "SelectedNode": "\\build", - "PreviewInSolutionExplorer": false -} \ No newline at end of file diff --git a/.vs/eigsol_gpu/project-colors.json b/.vs/eigsol_gpu/project-colors.json deleted file mode 100644 index 069efb9..0000000 --- a/.vs/eigsol_gpu/project-colors.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "Version": 1, - "ProjectMap": { - "a2fe74e1-b743-11d0-ae1a-00a0c90fffc3": { - "ProjectGuid": "a2fe74e1-b743-11d0-ae1a-00a0c90fffc3", - "DisplayName": "Miscellaneous Files", - "ColorIndex": -1 - } - }, - "NextColorIndex": 0 -} \ No newline at end of file diff --git a/.vs/eigsol_gpu/v17/.suo b/.vs/eigsol_gpu/v17/.suo deleted file mode 100644 index abb1574..0000000 Binary files a/.vs/eigsol_gpu/v17/.suo and /dev/null differ diff --git a/.vs/eigsol_gpu/v17/Browse.VC.db b/.vs/eigsol_gpu/v17/Browse.VC.db deleted file mode 100644 index e796e94..0000000 Binary files a/.vs/eigsol_gpu/v17/Browse.VC.db and /dev/null differ diff --git a/.vs/slnx.sqlite b/.vs/slnx.sqlite deleted file mode 100644 index 7c113b1..0000000 Binary files a/.vs/slnx.sqlite and /dev/null differ diff --git a/build/.vs/ProjectSettings.json b/build/.vs/ProjectSettings.json deleted file mode 100644 index 0cf5ea5..0000000 --- a/build/.vs/ProjectSettings.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "CurrentProjectSetting": "No Configurations" -} \ No newline at end of file diff --git a/build/.vs/VSWorkspaceState.json b/build/.vs/VSWorkspaceState.json deleted file mode 100644 index 72fc59c..0000000 --- a/build/.vs/VSWorkspaceState.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "ExpandedNodes": [ - "" - ], - "SelectedNode": "\\program.exe", - "PreviewInSolutionExplorer": false -} \ No newline at end of file diff --git a/build/.vs/build/project-colors.json b/build/.vs/build/project-colors.json deleted file mode 100644 index 069efb9..0000000 --- a/build/.vs/build/project-colors.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "Version": 1, - "ProjectMap": { - "a2fe74e1-b743-11d0-ae1a-00a0c90fffc3": { - "ProjectGuid": "a2fe74e1-b743-11d0-ae1a-00a0c90fffc3", - "DisplayName": "Miscellaneous Files", - "ColorIndex": -1 - } - }, - "NextColorIndex": 0 -} \ No newline at end of file diff --git a/build/.vs/build/v17/.suo b/build/.vs/build/v17/.suo deleted file mode 100644 index 6fc6967..0000000 Binary files a/build/.vs/build/v17/.suo and /dev/null differ diff --git a/build/.vs/build/v17/Browse.VC.db b/build/.vs/build/v17/Browse.VC.db deleted file mode 100644 index 86cd8fa..0000000 Binary files a/build/.vs/build/v17/Browse.VC.db and /dev/null differ diff --git a/build/.vs/slnx.sqlite b/build/.vs/slnx.sqlite deleted file mode 100644 index 5d9a3fc..0000000 Binary files a/build/.vs/slnx.sqlite and /dev/null differ diff --git a/build/program.rdi b/build/program.rdi index 7c89379..849ffff 100644 Binary files a/build/program.rdi and b/build/program.rdi differ diff --git a/build/ut b/build/ut deleted file mode 100644 index e69de29..0000000 diff --git a/out/Bspline3.dat b/out/Bspline3.dat index 848914b..29861a0 100644 --- a/out/Bspline3.dat +++ b/out/Bspline3.dat @@ -1,961 +1,61 @@ 0.000000e+00 - 3.658667e-06 - 2.926933e-05 - 9.878400e-05 - 2.341547e-04 + 5.716667e-05 4.573333e-04 - 7.902720e-04 - 1.254923e-03 - 1.873237e-03 - 2.667168e-03 + 1.543500e-03 3.658667e-03 - 4.869685e-03 - 6.322176e-03 - 8.038091e-03 - 1.003938e-02 + 7.145833e-03 1.234800e-02 - 1.498590e-02 - 1.797503e-02 - 2.133734e-02 - 2.509479e-02 + 1.960817e-02 2.926933e-02 - 3.388291e-02 - 3.895748e-02 - 4.451500e-02 - 5.057741e-02 + 4.167450e-02 5.716667e-02 - 6.430473e-02 - 7.201354e-02 - 8.031505e-02 - 8.923122e-02 + 7.608883e-02 9.878400e-02 - 1.089953e-01 - 1.198872e-01 - 1.314815e-01 - 1.438002e-01 + 1.255952e-01 1.568653e-01 - 1.706984e-01 - 1.852913e-01 - 2.005836e-01 - 2.165093e-01 + 1.928542e-01 2.330027e-01 - 2.499978e-01 - 2.674288e-01 - 2.852298e-01 - 3.033351e-01 + 2.762872e-01 3.216787e-01 - 3.401947e-01 - 3.588174e-01 - 3.774809e-01 - 3.961192e-01 + 3.681482e-01 4.146667e-01 - 4.330573e-01 - 4.512253e-01 - 4.691047e-01 - 4.866298e-01 + 4.602052e-01 5.037347e-01 - 5.203535e-01 - 5.364203e-01 - 5.518694e-01 - 5.666348e-01 + 5.442262e-01 5.806507e-01 - 5.938512e-01 - 6.061705e-01 - 6.175428e-01 - 6.279021e-01 + 6.119792e-01 6.371827e-01 - 6.453186e-01 - 6.522440e-01 - 6.578930e-01 - 6.621999e-01 + 6.552322e-01 6.650987e-01 - 6.665235e-01 - 6.664127e-01 - 6.647733e-01 - 6.616693e-01 + 6.657802e-01 6.571667e-01 - 6.513312e-01 - 6.442289e-01 - 6.359254e-01 - 6.264867e-01 + 6.402232e-01 6.159787e-01 - 6.044671e-01 - 5.920178e-01 - 5.786968e-01 - 5.645698e-01 + 5.854622e-01 5.497027e-01 - 5.341613e-01 - 5.180116e-01 - 5.013193e-01 - 4.841504e-01 + 5.097292e-01 4.665707e-01 - 4.486460e-01 - 4.304422e-01 - 4.120251e-01 - 3.934607e-01 + 4.212562e-01 3.748147e-01 - 3.561530e-01 - 3.375415e-01 - 3.190461e-01 - 3.007325e-01 + 3.282752e-01 2.826667e-01 - 2.649144e-01 - 2.475417e-01 - 2.306142e-01 - 2.141979e-01 + 2.390182e-01 1.983587e-01 - 1.831623e-01 - 1.686746e-01 - 1.549524e-01 - 1.419952e-01 + 1.617165e-01 1.297813e-01 - 1.182887e-01 - 1.074954e-01 - 9.737951e-02 - 8.791902e-02 + 1.023542e-01 7.909200e-02 - 7.087650e-02 - 6.325057e-02 - 5.619226e-02 - 4.967961e-02 + 5.965183e-02 4.369067e-02 - 3.820349e-02 - 3.319612e-02 - 2.864660e-02 - 2.453299e-02 + 3.086550e-02 2.083333e-02 - 1.752567e-02 - 1.458806e-02 - 1.199855e-02 - 9.735179e-03 + 1.325117e-02 7.776000e-03 - 6.099061e-03 - 4.682411e-03 - 3.504096e-03 - 2.542165e-03 + 4.064833e-03 1.774667e-03 - 1.179648e-03 - 7.351573e-04 - 4.192427e-04 - 2.099520e-04 + 5.625000e-04 8.533333e-05 - 2.343467e-05 - 2.304000e-06 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 - 0.000000e+00 + 1.666667e-07 0.000000e+00 0.000000e+00 0.000000e+00 diff --git a/out/bspline0.dat b/out/bspline0.dat new file mode 100644 index 0000000..774fa6d --- /dev/null +++ b/out/bspline0.dat @@ -0,0 +1,100 @@ + 1.000000e+00 + 8.043570e-01 + 6.360560e-01 + 4.930390e-01 + 3.732480e-01 + 2.746250e-01 + 1.951120e-01 + 1.326510e-01 + 8.518400e-02 + 5.065300e-02 + 2.700000e-02 + 1.216700e-02 + 4.096000e-03 + 7.290000e-04 + 8.000000e-06 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 diff --git a/out/bspline1.dat b/out/bspline1.dat new file mode 100644 index 0000000..4c3a161 --- /dev/null +++ b/out/bspline1.dat @@ -0,0 +1,100 @@ + 0.000000e+00 + 1.885502e-01 + 3.366020e-01 + 4.477567e-01 + 5.256160e-01 + 5.737812e-01 + 5.958540e-01 + 5.954358e-01 + 5.761280e-01 + 5.415323e-01 + 4.952500e-01 + 4.408828e-01 + 3.820320e-01 + 3.222993e-01 + 2.652860e-01 + 2.143437e-01 + 1.703680e-01 + 1.328602e-01 + 1.013060e-01 + 7.519075e-02 + 5.400000e-02 + 3.721925e-02 + 2.433400e-02 + 1.482975e-02 + 8.192000e-03 + 3.906250e-03 + 1.458000e-03 + 3.327500e-04 + 1.600000e-05 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 diff --git a/out/bspline2.dat b/out/bspline2.dat new file mode 100644 index 0000000..4f87871 --- /dev/null +++ b/out/bspline2.dat @@ -0,0 +1,100 @@ + 0.000000e+00 + 7.035583e-03 + 2.688467e-02 + 5.766075e-02 + 9.747733e-02 + 1.444479e-01 + 1.966860e-01 + 2.523051e-01 + 3.094187e-01 + 3.661402e-01 + 4.205833e-01 + 4.708614e-01 + 5.150880e-01 + 5.513766e-01 + 5.778407e-01 + 5.927813e-01 + 5.963413e-01 + 5.897094e-01 + 5.740860e-01 + 5.506716e-01 + 5.206667e-01 + 4.852717e-01 + 4.456873e-01 + 4.031139e-01 + 3.587520e-01 + 3.138021e-01 + 2.694647e-01 + 2.269402e-01 + 1.874293e-01 + 1.521122e-01 + 1.215000e-01 + 9.529783e-02 + 7.316267e-02 + 5.475150e-02 + 3.972133e-02 + 2.772917e-02 + 1.843200e-02 + 1.148683e-02 + 6.550667e-03 + 3.280500e-03 + 1.333333e-03 + 3.661667e-04 + 3.600000e-05 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 diff --git a/out/bspline9.dat b/out/bspline9.dat new file mode 100644 index 0000000..bbc211f --- /dev/null +++ b/out/bspline9.dat @@ -0,0 +1,100 @@ + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 0.000000e+00 + 8.000000e-06 + 7.290000e-04 + 4.096000e-03 + 1.216700e-02 + 2.700000e-02 + 5.065300e-02 + 8.518400e-02 + 1.326510e-01 + 1.951120e-01 + 2.746250e-01 + 3.732480e-01 + 4.930390e-01 + 6.360560e-01 + 1.000000e+00 diff --git a/out/bsplines.dat b/out/bsplines.dat new file mode 100644 index 0000000..355f8fa --- /dev/null +++ b/out/bsplines.dat @@ -0,0 +1,100 @@ + 1.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 + 8.043570e-01 1.885502e-01 7.035583e-03 5.716667e-05 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 + 6.360560e-01 3.366020e-01 2.688467e-02 4.573333e-04 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 + 4.930390e-01 4.477567e-01 5.766075e-02 1.543500e-03 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 + 3.732480e-01 5.256160e-01 9.747733e-02 3.658667e-03 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 + 2.746250e-01 5.737812e-01 1.444479e-01 7.145833e-03 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 + 1.951120e-01 5.958540e-01 1.966860e-01 1.234800e-02 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 + 1.326510e-01 5.954358e-01 2.523051e-01 1.960817e-02 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 + 8.518400e-02 5.761280e-01 3.094187e-01 2.926933e-02 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 + 5.065300e-02 5.415323e-01 3.661402e-01 4.167450e-02 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 + 2.700000e-02 4.952500e-01 4.205833e-01 5.716667e-02 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 + 1.216700e-02 4.408828e-01 4.708614e-01 7.608883e-02 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 + 4.096000e-03 3.820320e-01 5.150880e-01 9.878400e-02 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 + 7.290000e-04 3.222993e-01 5.513766e-01 1.255952e-01 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 + 8.000000e-06 2.652860e-01 5.778407e-01 1.568653e-01 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 + 0.000000e+00 2.143437e-01 5.927813e-01 1.928542e-01 2.083333e-05 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 + 0.000000e+00 1.703680e-01 5.963413e-01 2.330027e-01 2.880000e-04 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 + 0.000000e+00 1.328602e-01 5.897094e-01 2.762872e-01 1.143167e-03 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 + 0.000000e+00 1.013060e-01 5.740860e-01 3.216787e-01 2.929333e-03 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 + 0.000000e+00 7.519075e-02 5.506716e-01 3.681482e-01 5.989500e-03 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 + 0.000000e+00 5.400000e-02 5.206667e-01 4.146667e-01 1.066667e-02 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 + 0.000000e+00 3.721925e-02 4.852717e-01 4.602052e-01 1.730383e-02 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 + 0.000000e+00 2.433400e-02 4.456873e-01 5.037347e-01 2.624400e-02 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 + 0.000000e+00 1.482975e-02 4.031139e-01 5.442262e-01 3.783017e-02 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 + 0.000000e+00 8.192000e-03 3.587520e-01 5.806507e-01 5.240533e-02 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 + 0.000000e+00 3.906250e-03 3.138021e-01 6.119792e-01 7.031250e-02 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 + 0.000000e+00 1.458000e-03 2.694647e-01 6.371827e-01 9.189467e-02 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 + 0.000000e+00 3.327500e-04 2.269402e-01 6.552322e-01 1.174948e-01 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 + 0.000000e+00 1.600000e-05 1.874293e-01 6.650987e-01 1.474560e-01 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 + 0.000000e+00 0.000000e+00 1.521122e-01 6.657802e-01 1.821032e-01 4.500000e-06 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 + 0.000000e+00 0.000000e+00 1.215000e-01 6.571667e-01 2.211667e-01 1.666667e-04 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 + 0.000000e+00 0.000000e+00 9.529783e-02 6.402232e-01 2.636602e-01 8.188333e-04 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 + 0.000000e+00 0.000000e+00 7.316267e-02 6.159787e-01 3.085547e-01 2.304000e-03 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 + 0.000000e+00 0.000000e+00 5.475150e-02 5.854622e-01 3.548212e-01 4.965167e-03 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 + 0.000000e+00 0.000000e+00 3.972133e-02 5.497027e-01 4.014307e-01 9.145333e-03 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 + 0.000000e+00 0.000000e+00 2.772917e-02 5.097292e-01 4.473542e-01 1.518750e-02 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 + 0.000000e+00 0.000000e+00 1.843200e-02 4.665707e-01 4.915627e-01 2.343467e-02 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 + 0.000000e+00 0.000000e+00 1.148683e-02 4.212562e-01 5.330272e-01 3.422983e-02 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 + 0.000000e+00 0.000000e+00 6.550667e-03 3.748147e-01 5.707187e-01 4.791600e-02 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 + 0.000000e+00 0.000000e+00 3.280500e-03 3.282752e-01 6.036082e-01 6.483617e-02 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 + 0.000000e+00 0.000000e+00 1.333333e-03 2.826667e-01 6.306667e-01 8.533333e-02 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 + 0.000000e+00 0.000000e+00 3.661667e-04 2.390182e-01 6.508652e-01 1.097505e-01 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 + 0.000000e+00 0.000000e+00 3.600000e-05 1.983587e-01 6.631747e-01 1.384307e-01 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 + 0.000000e+00 0.000000e+00 0.000000e+00 1.617165e-01 6.665672e-01 1.717162e-01 1.666667e-07 0.000000e+00 0.000000e+00 0.000000e+00 + 0.000000e+00 0.000000e+00 0.000000e+00 1.297813e-01 6.605227e-01 2.096107e-01 8.533333e-05 0.000000e+00 0.000000e+00 0.000000e+00 + 0.000000e+00 0.000000e+00 0.000000e+00 1.023542e-01 6.458542e-01 2.512292e-01 5.625000e-04 0.000000e+00 0.000000e+00 0.000000e+00 + 0.000000e+00 0.000000e+00 0.000000e+00 7.909200e-02 6.235907e-01 2.955427e-01 1.774667e-03 0.000000e+00 0.000000e+00 0.000000e+00 + 0.000000e+00 0.000000e+00 0.000000e+00 5.965183e-02 5.947612e-01 3.415222e-01 4.064833e-03 0.000000e+00 0.000000e+00 0.000000e+00 + 0.000000e+00 0.000000e+00 0.000000e+00 4.369067e-02 5.603947e-01 3.881387e-01 7.776000e-03 0.000000e+00 0.000000e+00 0.000000e+00 + 0.000000e+00 0.000000e+00 0.000000e+00 3.086550e-02 5.215202e-01 4.343632e-01 1.325117e-02 0.000000e+00 0.000000e+00 0.000000e+00 + 0.000000e+00 0.000000e+00 0.000000e+00 2.083333e-02 4.791667e-01 4.791667e-01 2.083333e-02 0.000000e+00 0.000000e+00 0.000000e+00 + 0.000000e+00 0.000000e+00 0.000000e+00 1.325117e-02 4.343632e-01 5.215202e-01 3.086550e-02 0.000000e+00 0.000000e+00 0.000000e+00 + 0.000000e+00 0.000000e+00 0.000000e+00 7.776000e-03 3.881387e-01 5.603947e-01 4.369067e-02 0.000000e+00 0.000000e+00 0.000000e+00 + 0.000000e+00 0.000000e+00 0.000000e+00 4.064833e-03 3.415222e-01 5.947612e-01 5.965183e-02 0.000000e+00 0.000000e+00 0.000000e+00 + 0.000000e+00 0.000000e+00 0.000000e+00 1.774667e-03 2.955427e-01 6.235907e-01 7.909200e-02 0.000000e+00 0.000000e+00 0.000000e+00 + 0.000000e+00 0.000000e+00 0.000000e+00 5.625000e-04 2.512292e-01 6.458542e-01 1.023542e-01 0.000000e+00 0.000000e+00 0.000000e+00 + 0.000000e+00 0.000000e+00 0.000000e+00 8.533333e-05 2.096107e-01 6.605227e-01 1.297813e-01 0.000000e+00 0.000000e+00 0.000000e+00 + 0.000000e+00 0.000000e+00 0.000000e+00 1.666667e-07 1.717162e-01 6.665672e-01 1.617165e-01 0.000000e+00 0.000000e+00 0.000000e+00 + 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 1.384307e-01 6.631747e-01 1.983587e-01 3.600000e-05 0.000000e+00 0.000000e+00 + 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 1.097505e-01 6.508652e-01 2.390182e-01 3.661667e-04 0.000000e+00 0.000000e+00 + 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 8.533333e-02 6.306667e-01 2.826667e-01 1.333333e-03 0.000000e+00 0.000000e+00 + 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 6.483617e-02 6.036082e-01 3.282752e-01 3.280500e-03 0.000000e+00 0.000000e+00 + 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 4.791600e-02 5.707187e-01 3.748147e-01 6.550667e-03 0.000000e+00 0.000000e+00 + 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 3.422983e-02 5.330272e-01 4.212562e-01 1.148683e-02 0.000000e+00 0.000000e+00 + 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 2.343467e-02 4.915627e-01 4.665707e-01 1.843200e-02 0.000000e+00 0.000000e+00 + 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 1.518750e-02 4.473542e-01 5.097292e-01 2.772917e-02 0.000000e+00 0.000000e+00 + 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 9.145333e-03 4.014307e-01 5.497027e-01 3.972133e-02 0.000000e+00 0.000000e+00 + 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 4.965167e-03 3.548212e-01 5.854622e-01 5.475150e-02 0.000000e+00 0.000000e+00 + 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 2.304000e-03 3.085547e-01 6.159787e-01 7.316267e-02 0.000000e+00 0.000000e+00 + 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 8.188333e-04 2.636602e-01 6.402232e-01 9.529783e-02 0.000000e+00 0.000000e+00 + 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 1.666667e-04 2.211667e-01 6.571667e-01 1.215000e-01 0.000000e+00 0.000000e+00 + 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 4.500000e-06 1.821032e-01 6.657802e-01 1.521122e-01 0.000000e+00 0.000000e+00 + 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 1.474560e-01 6.650987e-01 1.874293e-01 1.600000e-05 0.000000e+00 + 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 1.174948e-01 6.552322e-01 2.269402e-01 3.327500e-04 0.000000e+00 + 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 9.189467e-02 6.371827e-01 2.694647e-01 1.458000e-03 0.000000e+00 + 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 7.031250e-02 6.119792e-01 3.138021e-01 3.906250e-03 0.000000e+00 + 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 5.240533e-02 5.806507e-01 3.587520e-01 8.192000e-03 0.000000e+00 + 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 3.783017e-02 5.442262e-01 4.031139e-01 1.482975e-02 0.000000e+00 + 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 2.624400e-02 5.037347e-01 4.456873e-01 2.433400e-02 0.000000e+00 + 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 1.730383e-02 4.602052e-01 4.852717e-01 3.721925e-02 0.000000e+00 + 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 1.066667e-02 4.146667e-01 5.206667e-01 5.400000e-02 0.000000e+00 + 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 5.989500e-03 3.681482e-01 5.506716e-01 7.519075e-02 0.000000e+00 + 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 2.929333e-03 3.216787e-01 5.740860e-01 1.013060e-01 0.000000e+00 + 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 1.143167e-03 2.762872e-01 5.897094e-01 1.328602e-01 0.000000e+00 + 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 2.880000e-04 2.330027e-01 5.963413e-01 1.703680e-01 0.000000e+00 + 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 2.083333e-05 1.928542e-01 5.927813e-01 2.143437e-01 0.000000e+00 + 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 1.568653e-01 5.778407e-01 2.652860e-01 8.000000e-06 + 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 1.255952e-01 5.513766e-01 3.222992e-01 7.290000e-04 + 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 9.878400e-02 5.150880e-01 3.820320e-01 4.096000e-03 + 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 7.608883e-02 4.708614e-01 4.408827e-01 1.216700e-02 + 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 5.716667e-02 4.205833e-01 4.952500e-01 2.700000e-02 + 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 4.167450e-02 3.661403e-01 5.415322e-01 5.065300e-02 + 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 2.926933e-02 3.094187e-01 5.761280e-01 8.518400e-02 + 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 1.960817e-02 2.523051e-01 5.954357e-01 1.326510e-01 + 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 1.234800e-02 1.966860e-01 5.958540e-01 1.951120e-01 + 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 7.145833e-03 1.444479e-01 5.737813e-01 2.746250e-01 + 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 3.658667e-03 9.747733e-02 5.256160e-01 3.732480e-01 + 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 1.543500e-03 5.766075e-02 4.477568e-01 4.930390e-01 + 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 4.573333e-04 2.688467e-02 3.366020e-01 6.360560e-01 + 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 1.000000e+00 diff --git a/out/grid.bin b/out/grid.bin index a6ba9ad..e0ae447 100644 Binary files a/out/grid.bin and b/out/grid.bin differ diff --git a/out/grid.dat b/out/grid.dat index 8a3f38d..61c3b79 100644 --- a/out/grid.dat +++ b/out/grid.dat @@ -1,1000 +1,100 @@ 0.000000e+00 - 1.000000e-02 - 2.000000e-02 - 3.000000e-02 - 4.000000e-02 - 5.000000e-02 - 6.000000e-02 - 7.000000e-02 - 8.000000e-02 - 9.000000e-02 1.000000e-01 - 1.100000e-01 - 1.200000e-01 - 1.300000e-01 - 1.400000e-01 - 1.500000e-01 - 1.600000e-01 - 1.700000e-01 - 1.800000e-01 - 1.900000e-01 2.000000e-01 - 2.100000e-01 - 2.200000e-01 - 2.300000e-01 - 2.400000e-01 - 2.500000e-01 - 2.600000e-01 - 2.700000e-01 - 2.800000e-01 - 2.900000e-01 3.000000e-01 - 3.100000e-01 - 3.200000e-01 - 3.300000e-01 - 3.400000e-01 - 3.500000e-01 - 3.600000e-01 - 3.700000e-01 - 3.800000e-01 - 3.900000e-01 4.000000e-01 - 4.100000e-01 - 4.200000e-01 - 4.300000e-01 - 4.400000e-01 - 4.500000e-01 - 4.600000e-01 - 4.700000e-01 - 4.800000e-01 - 4.900000e-01 5.000000e-01 - 5.100000e-01 - 5.200000e-01 - 5.300000e-01 - 5.400000e-01 - 5.500000e-01 - 5.600000e-01 - 5.700000e-01 - 5.800000e-01 - 5.900000e-01 6.000000e-01 - 6.100000e-01 - 6.200000e-01 - 6.300000e-01 - 6.400000e-01 - 6.500000e-01 - 6.600000e-01 - 6.700000e-01 - 6.800000e-01 - 6.900000e-01 7.000000e-01 - 7.100000e-01 - 7.200000e-01 - 7.300000e-01 - 7.400000e-01 - 7.500000e-01 - 7.600000e-01 - 7.700000e-01 - 7.800000e-01 - 7.900000e-01 8.000000e-01 - 8.100000e-01 - 8.200000e-01 - 8.300000e-01 - 8.400000e-01 - 8.500000e-01 - 8.600000e-01 - 8.700000e-01 - 8.800000e-01 - 8.900000e-01 9.000000e-01 - 9.100000e-01 - 9.200000e-01 - 9.300000e-01 - 9.400000e-01 - 9.500000e-01 - 9.600000e-01 - 9.700000e-01 - 9.800000e-01 - 9.900000e-01 1.000000e+00 - 1.010000e+00 - 1.020000e+00 - 1.030000e+00 - 1.040000e+00 - 1.050000e+00 - 1.060000e+00 - 1.070000e+00 - 1.080000e+00 - 1.090000e+00 1.100000e+00 - 1.110000e+00 - 1.120000e+00 - 1.130000e+00 - 1.140000e+00 - 1.150000e+00 - 1.160000e+00 - 1.170000e+00 - 1.180000e+00 - 1.190000e+00 1.200000e+00 - 1.210000e+00 - 1.220000e+00 - 1.230000e+00 - 1.240000e+00 - 1.250000e+00 - 1.260000e+00 - 1.270000e+00 - 1.280000e+00 - 1.290000e+00 1.300000e+00 - 1.310000e+00 - 1.320000e+00 - 1.330000e+00 - 1.340000e+00 - 1.350000e+00 - 1.360000e+00 - 1.370000e+00 - 1.380000e+00 - 1.390000e+00 1.400000e+00 - 1.410000e+00 - 1.420000e+00 - 1.430000e+00 - 1.440000e+00 - 1.450000e+00 - 1.460000e+00 - 1.470000e+00 - 1.480000e+00 - 1.490000e+00 1.500000e+00 - 1.510000e+00 - 1.520000e+00 - 1.530000e+00 - 1.540000e+00 - 1.550000e+00 - 1.560000e+00 - 1.570000e+00 - 1.580000e+00 - 1.590000e+00 1.600000e+00 - 1.610000e+00 - 1.620000e+00 - 1.630000e+00 - 1.640000e+00 - 1.650000e+00 - 1.660000e+00 - 1.670000e+00 - 1.680000e+00 - 1.690000e+00 1.700000e+00 - 1.710000e+00 - 1.720000e+00 - 1.730000e+00 - 1.740000e+00 - 1.750000e+00 - 1.760000e+00 - 1.770000e+00 - 1.780000e+00 - 1.790000e+00 1.800000e+00 - 1.810000e+00 - 1.820000e+00 - 1.830000e+00 - 1.840000e+00 - 1.850000e+00 - 1.860000e+00 - 1.870000e+00 - 1.880000e+00 - 1.890000e+00 1.900000e+00 - 1.910000e+00 - 1.920000e+00 - 1.930000e+00 - 1.940000e+00 - 1.950000e+00 - 1.960000e+00 - 1.970000e+00 - 1.980000e+00 - 1.990000e+00 2.000000e+00 - 2.010000e+00 - 2.020000e+00 - 2.030000e+00 - 2.040000e+00 - 2.050000e+00 - 2.060000e+00 - 2.070000e+00 - 2.080000e+00 - 2.090000e+00 2.100000e+00 - 2.110000e+00 - 2.120000e+00 - 2.130000e+00 - 2.140000e+00 - 2.150000e+00 - 2.160000e+00 - 2.170000e+00 - 2.180000e+00 - 2.190000e+00 2.200000e+00 - 2.210000e+00 - 2.220000e+00 - 2.230000e+00 - 2.240000e+00 - 2.250000e+00 - 2.260000e+00 - 2.270000e+00 - 2.280000e+00 - 2.290000e+00 2.300000e+00 - 2.310000e+00 - 2.320000e+00 - 2.330000e+00 - 2.340000e+00 - 2.350000e+00 - 2.360000e+00 - 2.370000e+00 - 2.380000e+00 - 2.390000e+00 2.400000e+00 - 2.410000e+00 - 2.420000e+00 - 2.430000e+00 - 2.440000e+00 - 2.450000e+00 - 2.460000e+00 - 2.470000e+00 - 2.480000e+00 - 2.490000e+00 2.500000e+00 - 2.510000e+00 - 2.520000e+00 - 2.530000e+00 - 2.540000e+00 - 2.550000e+00 - 2.560000e+00 - 2.570000e+00 - 2.580000e+00 - 2.590000e+00 2.600000e+00 - 2.610000e+00 - 2.620000e+00 - 2.630000e+00 - 2.640000e+00 - 2.650000e+00 - 2.660000e+00 - 2.670000e+00 - 2.680000e+00 - 2.690000e+00 2.700000e+00 - 2.710000e+00 - 2.720000e+00 - 2.730000e+00 - 2.740000e+00 - 2.750000e+00 - 2.760000e+00 - 2.770000e+00 - 2.780000e+00 - 2.790000e+00 2.800000e+00 - 2.810000e+00 - 2.820000e+00 - 2.830000e+00 - 2.840000e+00 - 2.850000e+00 - 2.860000e+00 - 2.870000e+00 - 2.880000e+00 - 2.890000e+00 2.900000e+00 - 2.910000e+00 - 2.920000e+00 - 2.930000e+00 - 2.940000e+00 - 2.950000e+00 - 2.960000e+00 - 2.970000e+00 - 2.980000e+00 - 2.990000e+00 3.000000e+00 - 3.010000e+00 - 3.020000e+00 - 3.030000e+00 - 3.040000e+00 - 3.050000e+00 - 3.060000e+00 - 3.070000e+00 - 3.080000e+00 - 3.090000e+00 3.100000e+00 - 3.110000e+00 - 3.120000e+00 - 3.130000e+00 - 3.140000e+00 - 3.150000e+00 - 3.160000e+00 - 3.170000e+00 - 3.180000e+00 - 3.190000e+00 3.200000e+00 - 3.210000e+00 - 3.220000e+00 - 3.230000e+00 - 3.240000e+00 - 3.250000e+00 - 3.260000e+00 - 3.270000e+00 - 3.280000e+00 - 3.290000e+00 3.300000e+00 - 3.310000e+00 - 3.320000e+00 - 3.330000e+00 - 3.340000e+00 - 3.350000e+00 - 3.360000e+00 - 3.370000e+00 - 3.380000e+00 - 3.390000e+00 3.400000e+00 - 3.410000e+00 - 3.420000e+00 - 3.430000e+00 - 3.440000e+00 - 3.450000e+00 - 3.460000e+00 - 3.470000e+00 - 3.480000e+00 - 3.490000e+00 3.500000e+00 - 3.510000e+00 - 3.520000e+00 - 3.530000e+00 - 3.540000e+00 - 3.550000e+00 - 3.560000e+00 - 3.570000e+00 - 3.580000e+00 - 3.590000e+00 3.600000e+00 - 3.610000e+00 - 3.620000e+00 - 3.630000e+00 - 3.640000e+00 - 3.650000e+00 - 3.660000e+00 - 3.670000e+00 - 3.680000e+00 - 3.690000e+00 3.700000e+00 - 3.710000e+00 - 3.720000e+00 - 3.730000e+00 - 3.740000e+00 - 3.750000e+00 - 3.760000e+00 - 3.770000e+00 - 3.780000e+00 - 3.790000e+00 3.800000e+00 - 3.810000e+00 - 3.820000e+00 - 3.830000e+00 - 3.840000e+00 - 3.850000e+00 - 3.860000e+00 - 3.870000e+00 - 3.880000e+00 - 3.890000e+00 3.900000e+00 - 3.910000e+00 - 3.920000e+00 - 3.930000e+00 - 3.940000e+00 - 3.950000e+00 - 3.960000e+00 - 3.970000e+00 - 3.980000e+00 - 3.990000e+00 4.000000e+00 - 4.010000e+00 - 4.020000e+00 - 4.030000e+00 - 4.040000e+00 - 4.050000e+00 - 4.060000e+00 - 4.070000e+00 - 4.080000e+00 - 4.090000e+00 4.100000e+00 - 4.110000e+00 - 4.120000e+00 - 4.130000e+00 - 4.140000e+00 - 4.150000e+00 - 4.160000e+00 - 4.170000e+00 - 4.180000e+00 - 4.190000e+00 4.200000e+00 - 4.210000e+00 - 4.220000e+00 - 4.230000e+00 - 4.240000e+00 - 4.250000e+00 - 4.260000e+00 - 4.270000e+00 - 4.280000e+00 - 4.290000e+00 4.300000e+00 - 4.310000e+00 - 4.320000e+00 - 4.330000e+00 - 4.340000e+00 - 4.350000e+00 - 4.360000e+00 - 4.370000e+00 - 4.380000e+00 - 4.390000e+00 4.400000e+00 - 4.410000e+00 - 4.420000e+00 - 4.430000e+00 - 4.440000e+00 - 4.450000e+00 - 4.460000e+00 - 4.470000e+00 - 4.480000e+00 - 4.490000e+00 4.500000e+00 - 4.510000e+00 - 4.520000e+00 - 4.530000e+00 - 4.540000e+00 - 4.550000e+00 - 4.560000e+00 - 4.570000e+00 - 4.580000e+00 - 4.590000e+00 4.600000e+00 - 4.610000e+00 - 4.620000e+00 - 4.630000e+00 - 4.640000e+00 - 4.650000e+00 - 4.660000e+00 - 4.670000e+00 - 4.680000e+00 - 4.690000e+00 4.700000e+00 - 4.710000e+00 - 4.720000e+00 - 4.730000e+00 - 4.740000e+00 - 4.750000e+00 - 4.760000e+00 - 4.770000e+00 - 4.780000e+00 - 4.790000e+00 4.800000e+00 - 4.810000e+00 - 4.820000e+00 - 4.830000e+00 - 4.840000e+00 - 4.850000e+00 - 4.860000e+00 - 4.870000e+00 - 4.880000e+00 - 4.890000e+00 4.900000e+00 - 4.910000e+00 - 4.920000e+00 - 4.930000e+00 - 4.940000e+00 - 4.950000e+00 - 4.960000e+00 - 4.970000e+00 - 4.980000e+00 - 4.990000e+00 5.000000e+00 - 5.010000e+00 - 5.020000e+00 - 5.030000e+00 - 5.040000e+00 - 5.050000e+00 - 5.060000e+00 - 5.070000e+00 - 5.080000e+00 - 5.090000e+00 5.100000e+00 - 5.110000e+00 - 5.120000e+00 - 5.130000e+00 - 5.140000e+00 - 5.150000e+00 - 5.160000e+00 - 5.170000e+00 - 5.180000e+00 - 5.190000e+00 5.200000e+00 - 5.210000e+00 - 5.220000e+00 - 5.230000e+00 - 5.240000e+00 - 5.250000e+00 - 5.260000e+00 - 5.270000e+00 - 5.280000e+00 - 5.290000e+00 5.300000e+00 - 5.310000e+00 - 5.320000e+00 - 5.330000e+00 - 5.340000e+00 - 5.350000e+00 - 5.360000e+00 - 5.370000e+00 - 5.380000e+00 - 5.390000e+00 5.400000e+00 - 5.410000e+00 - 5.420000e+00 - 5.430000e+00 - 5.440000e+00 - 5.450000e+00 - 5.460000e+00 - 5.470000e+00 - 5.480000e+00 - 5.490000e+00 5.500000e+00 - 5.510000e+00 - 5.520000e+00 - 5.530000e+00 - 5.540000e+00 - 5.550000e+00 - 5.560000e+00 - 5.570000e+00 - 5.580000e+00 - 5.590000e+00 5.600000e+00 - 5.610000e+00 - 5.620000e+00 - 5.630000e+00 - 5.640000e+00 - 5.650000e+00 - 5.660000e+00 - 5.670000e+00 - 5.680000e+00 - 5.690000e+00 5.700000e+00 - 5.710000e+00 - 5.720000e+00 - 5.730000e+00 - 5.740000e+00 - 5.750000e+00 - 5.760000e+00 - 5.770000e+00 - 5.780000e+00 - 5.790000e+00 5.800000e+00 - 5.810000e+00 - 5.820000e+00 - 5.830000e+00 - 5.840000e+00 - 5.850000e+00 - 5.860000e+00 - 5.870000e+00 - 5.880000e+00 - 5.890000e+00 5.900000e+00 - 5.910000e+00 - 5.920000e+00 - 5.930000e+00 - 5.940000e+00 - 5.950000e+00 - 5.960000e+00 - 5.970000e+00 - 5.980000e+00 - 5.990000e+00 6.000000e+00 - 6.010000e+00 - 6.020000e+00 - 6.030000e+00 - 6.040000e+00 - 6.050000e+00 - 6.060000e+00 - 6.070000e+00 - 6.080000e+00 - 6.090000e+00 6.100000e+00 - 6.110000e+00 - 6.120000e+00 - 6.130000e+00 - 6.140000e+00 - 6.150000e+00 - 6.160000e+00 - 6.170000e+00 - 6.180000e+00 - 6.190000e+00 6.200000e+00 - 6.210000e+00 - 6.220000e+00 - 6.230000e+00 - 6.240000e+00 - 6.250000e+00 - 6.260000e+00 - 6.270000e+00 - 6.280000e+00 - 6.290000e+00 6.300000e+00 - 6.310000e+00 - 6.320000e+00 - 6.330000e+00 - 6.340000e+00 - 6.350000e+00 - 6.360000e+00 - 6.370000e+00 - 6.380000e+00 - 6.390000e+00 6.400000e+00 - 6.410000e+00 - 6.420000e+00 - 6.430000e+00 - 6.440000e+00 - 6.450000e+00 - 6.460000e+00 - 6.470000e+00 - 6.480000e+00 - 6.490000e+00 6.500000e+00 - 6.510000e+00 - 6.520000e+00 - 6.530000e+00 - 6.540000e+00 - 6.550000e+00 - 6.560000e+00 - 6.570000e+00 - 6.580000e+00 - 6.590000e+00 6.600000e+00 - 6.610000e+00 - 6.620000e+00 - 6.630000e+00 - 6.640000e+00 - 6.650000e+00 - 6.660000e+00 - 6.670000e+00 - 6.680000e+00 - 6.690000e+00 6.700000e+00 - 6.710000e+00 - 6.720000e+00 - 6.730000e+00 - 6.740000e+00 - 6.750000e+00 - 6.760000e+00 - 6.770000e+00 - 6.780000e+00 - 6.790000e+00 6.800000e+00 - 6.810000e+00 - 6.820000e+00 - 6.830000e+00 - 6.840000e+00 - 6.850000e+00 - 6.860000e+00 - 6.870000e+00 - 6.880000e+00 - 6.890000e+00 6.900000e+00 - 6.910000e+00 - 6.920000e+00 - 6.930000e+00 - 6.940000e+00 - 6.950000e+00 - 6.960000e+00 - 6.970000e+00 - 6.980000e+00 - 6.990000e+00 7.000000e+00 - 7.010000e+00 - 7.020000e+00 - 7.030000e+00 - 7.040000e+00 - 7.050000e+00 - 7.060000e+00 - 7.070000e+00 - 7.080000e+00 - 7.090000e+00 7.100000e+00 - 7.110000e+00 - 7.120000e+00 - 7.130000e+00 - 7.140000e+00 - 7.150000e+00 - 7.160000e+00 - 7.170000e+00 - 7.180000e+00 - 7.190000e+00 7.200000e+00 - 7.210000e+00 - 7.220000e+00 - 7.230000e+00 - 7.240000e+00 - 7.250000e+00 - 7.260000e+00 - 7.270000e+00 - 7.280000e+00 - 7.290000e+00 7.300000e+00 - 7.310000e+00 - 7.320000e+00 - 7.330000e+00 - 7.340000e+00 - 7.350000e+00 - 7.360000e+00 - 7.370000e+00 - 7.380000e+00 - 7.390000e+00 7.400000e+00 - 7.410000e+00 - 7.420000e+00 - 7.430000e+00 - 7.440000e+00 - 7.450000e+00 - 7.460000e+00 - 7.470000e+00 - 7.480000e+00 - 7.490000e+00 7.500000e+00 - 7.510000e+00 - 7.520000e+00 - 7.530000e+00 - 7.540000e+00 - 7.550000e+00 - 7.560000e+00 - 7.570000e+00 - 7.580000e+00 - 7.590000e+00 7.600000e+00 - 7.610000e+00 - 7.620000e+00 - 7.630000e+00 - 7.640000e+00 - 7.650000e+00 - 7.660000e+00 - 7.670000e+00 - 7.680000e+00 - 7.690000e+00 7.700000e+00 - 7.710000e+00 - 7.720000e+00 - 7.730000e+00 - 7.740000e+00 - 7.750000e+00 - 7.760000e+00 - 7.770000e+00 - 7.780000e+00 - 7.790000e+00 7.800000e+00 - 7.810000e+00 - 7.820000e+00 - 7.830000e+00 - 7.840000e+00 - 7.850000e+00 - 7.860000e+00 - 7.870000e+00 - 7.880000e+00 - 7.890000e+00 7.900000e+00 - 7.910000e+00 - 7.920000e+00 - 7.930000e+00 - 7.940000e+00 - 7.950000e+00 - 7.960000e+00 - 7.970000e+00 - 7.980000e+00 - 7.990000e+00 8.000000e+00 - 8.010000e+00 - 8.020000e+00 - 8.030000e+00 - 8.040000e+00 - 8.050000e+00 - 8.060000e+00 - 8.070000e+00 - 8.080000e+00 - 8.090000e+00 8.100000e+00 - 8.110000e+00 - 8.120000e+00 - 8.130000e+00 - 8.140000e+00 - 8.150000e+00 - 8.160000e+00 - 8.170000e+00 - 8.180000e+00 - 8.190000e+00 8.200000e+00 - 8.210000e+00 - 8.220000e+00 - 8.230000e+00 - 8.240000e+00 - 8.250000e+00 - 8.260000e+00 - 8.270000e+00 - 8.280000e+00 - 8.290000e+00 8.300000e+00 - 8.310000e+00 - 8.320000e+00 - 8.330000e+00 - 8.340000e+00 - 8.350000e+00 - 8.360000e+00 - 8.370000e+00 - 8.380000e+00 - 8.390000e+00 8.400000e+00 - 8.410000e+00 - 8.420000e+00 - 8.430000e+00 - 8.440000e+00 - 8.450000e+00 - 8.460000e+00 - 8.470000e+00 - 8.480000e+00 - 8.490000e+00 8.500000e+00 - 8.510000e+00 - 8.520000e+00 - 8.530000e+00 - 8.540000e+00 - 8.550000e+00 - 8.560000e+00 - 8.570000e+00 - 8.580000e+00 - 8.590000e+00 8.600000e+00 - 8.610000e+00 - 8.620000e+00 - 8.630000e+00 - 8.640000e+00 - 8.650000e+00 - 8.660000e+00 - 8.670000e+00 - 8.680000e+00 - 8.690000e+00 8.700000e+00 - 8.710000e+00 - 8.720000e+00 - 8.730000e+00 - 8.740000e+00 - 8.750000e+00 - 8.760000e+00 - 8.770000e+00 - 8.780000e+00 - 8.790000e+00 8.800000e+00 - 8.810000e+00 - 8.820000e+00 - 8.830000e+00 - 8.840000e+00 - 8.850000e+00 - 8.860000e+00 - 8.870000e+00 - 8.880000e+00 - 8.890000e+00 8.900000e+00 - 8.910000e+00 - 8.920000e+00 - 8.930000e+00 - 8.940000e+00 - 8.950000e+00 - 8.960000e+00 - 8.970000e+00 - 8.980000e+00 - 8.990000e+00 9.000000e+00 - 9.010000e+00 - 9.020000e+00 - 9.030000e+00 - 9.040000e+00 - 9.050000e+00 - 9.060000e+00 - 9.070000e+00 - 9.080000e+00 - 9.090000e+00 9.100000e+00 - 9.110000e+00 - 9.120000e+00 - 9.130000e+00 - 9.140000e+00 - 9.150000e+00 - 9.160000e+00 - 9.170000e+00 - 9.180000e+00 - 9.190000e+00 9.200000e+00 - 9.210000e+00 - 9.220000e+00 - 9.230000e+00 - 9.240000e+00 - 9.250000e+00 - 9.260000e+00 - 9.270000e+00 - 9.280000e+00 - 9.290000e+00 9.300000e+00 - 9.310000e+00 - 9.320000e+00 - 9.330000e+00 - 9.340000e+00 - 9.350000e+00 - 9.360000e+00 - 9.370000e+00 - 9.380000e+00 - 9.390000e+00 9.400000e+00 - 9.410000e+00 - 9.420000e+00 - 9.430000e+00 - 9.440000e+00 - 9.450000e+00 - 9.460000e+00 - 9.470000e+00 - 9.480000e+00 - 9.490000e+00 9.500000e+00 - 9.510000e+00 - 9.520000e+00 - 9.530000e+00 - 9.540000e+00 - 9.550000e+00 - 9.560000e+00 - 9.570000e+00 - 9.580000e+00 - 9.590000e+00 9.600000e+00 - 9.610000e+00 - 9.620000e+00 - 9.630000e+00 - 9.640000e+00 - 9.650000e+00 - 9.660000e+00 - 9.670000e+00 - 9.680000e+00 - 9.690000e+00 9.700000e+00 - 9.710000e+00 - 9.720000e+00 - 9.730000e+00 - 9.740000e+00 - 9.750000e+00 - 9.760000e+00 - 9.770000e+00 - 9.780000e+00 - 9.790000e+00 9.800000e+00 - 9.810000e+00 - 9.820000e+00 - 9.830000e+00 - 9.840000e+00 - 9.850000e+00 - 9.860000e+00 - 9.870000e+00 - 9.880000e+00 - 9.890000e+00 - 9.900000e+00 - 9.910000e+00 - 9.920000e+00 - 9.930000e+00 - 9.940000e+00 - 9.950000e+00 - 9.960000e+00 - 9.970000e+00 - 9.980000e+00 1.000000e+01 diff --git a/out/knotpoints.dat b/out/knotpoints.dat index 038ede1..3a60048 100644 --- a/out/knotpoints.dat +++ b/out/knotpoints.dat @@ -2,33 +2,12 @@ 0.000000e+00 0.000000e+00 0.000000e+00 - 3.571429e-01 - 7.142857e-01 - 1.071429e+00 1.428571e+00 - 1.785714e+00 - 2.142857e+00 - 2.500000e+00 2.857143e+00 - 3.214286e+00 - 3.571429e+00 - 3.928571e+00 4.285714e+00 - 4.642857e+00 - 5.000000e+00 - 5.357143e+00 5.714286e+00 - 6.071429e+00 - 6.428571e+00 - 6.785714e+00 7.142857e+00 - 7.500000e+00 - 7.857143e+00 - 8.214286e+00 8.571429e+00 - 8.928571e+00 - 9.285714e+00 - 9.642857e+00 1.000000e+01 1.000000e+01 1.000000e+01 diff --git a/py_notebook/.ipynb_checkpoints/EigsolGPU_test-checkpoint.ipynb b/py_notebook/.ipynb_checkpoints/EigsolGPU_test-checkpoint.ipynb index d42c265..e4946d7 100644 --- a/py_notebook/.ipynb_checkpoints/EigsolGPU_test-checkpoint.ipynb +++ b/py_notebook/.ipynb_checkpoints/EigsolGPU_test-checkpoint.ipynb @@ -2,9 +2,84 @@ "cells": [ { "cell_type": "code", - "execution_count": null, + "execution_count": 3, "id": "1d08e1d3-0f62-467e-8217-9eaf458afeb4", "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAiMAAAGdCAYAAADAAnMpAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAABVLUlEQVR4nO3deXycZb3//9c9Syb71rRZmrTpvu+lpZRVKhUBxe2govCrR85PhSPYc45Sj1CXrxQUkB+KIigH/B5ZBAVEFi2FIoVC19B9X5I2TdI0y2RfZu7fH7MkbbNNMjN3Mnk/H4/4sJN75v7MlDbvXtfnui7DNE0TEREREYvYrC5AREREhjeFEREREbGUwoiIiIhYSmFERERELKUwIiIiIpZSGBERERFLKYyIiIiIpRRGRERExFIOqwvoC6/XS2lpKSkpKRiGYXU5IiIi0gemaVJXV0deXh42W/fjH0MijJSWllJQUGB1GSIiItIPJSUl5Ofnd/v9IRFGUlJSAN+bSU1NtbgaERER6Qu3201BQUHw53h3hkQYCUzNpKamKoyIiIgMMb21WKiBVURERCylMCIiIiKWUhgRERERSymMiIiIiKUURkRERMRSCiMiIiJiKYURERERsZTCiIiIiFhKYUREREQsFXIY+ec//8l1111HXl4ehmHw0ksv9fqc9evXM3/+fFwuFxMnTuTJJ5/sR6kiIiISi0IOIw0NDcyZM4dHHnmkT9cfPXqUa665hiuuuIKioiLuuOMOvv71r/P3v/895GJFREQk9oR8Ns3VV1/N1Vdf3efrH330UcaNG8cDDzwAwLRp09iwYQO/+MUvWL58eai3FxERkRgT8Z6RjRs3smzZsrMeW758ORs3buz2OS0tLbjd7rO+IqHqD3/g1I9+RMvhwxF5fREREeldxMNIWVkZ2dnZZz2WnZ2N2+2mqampy+esWbOGtLS04FdBQUFEanO/+ho1zzxL69GjEXl9ERER6d2gXE2zatUqamtrg18lJSURuY8tLRUAT21kRl5ERESkdyH3jIQqJyeH8vLysx4rLy8nNTWVhISELp/jcrlwuVyRLg17WjoAntraiN9LREREuhbxkZElS5awbt26sx5bu3YtS5YsifSte2VP9Y+MuBVGRERErBJyGKmvr6eoqIiioiLAt3S3qKiI4uJiwDfFctNNNwWv/8Y3vsGRI0f47ne/y759+/j1r3/Nn/70J77zne+E5x0MgD0tDdDIiIiIiJVCDiNbtmxh3rx5zJs3D4CVK1cyb9487r77bgBOnToVDCYA48aN49VXX2Xt2rXMmTOHBx54gN/97neDYlmv3d8z4lXPiIiIiGVC7hm5/PLLMU2z2+93tbvq5Zdfzvbt20O9VcTZNDIiIiJiuUG5miZaNE0jIiJiPYURwBOhTdVERESkdwojaGRERETESsM7jPiX9nrdbkyv1+JqREREhqdhHUYCDayYJt66OmuLERERGaaGdxiJi8Pw7wKrvhERERFrDOswAp36RmrUNyIiImIFhRE1sYqIiFhKYSTYxKowIiIiYgWFkXSNjIiIiFhp2IcRW+DkXp1PIyIiYolhH0bsaemARkZERESsojASGBlRz4iIiIglFEbUMyIiImIphRH/0l6v9hkRERGxxLAPI8EGVu3AKiIiYolhH0bUwCoiImIthZE0jYyIiIhYSWHE3zNiNjXhbW21uBoREZHhZ9iHEVtyMhgGAF5N1YiIiETdsA8jhs3WsdeIwoiIiEjUDfswAmDTyb0iIiKWURiho29E59OIiIhEn8IIncOIRkZERESiTWGEjvNpvDqfRkREJOoURtD5NCIiIlZSGKHTlvDqGREREYk6hRG0JbyIiIiVFEbo6BnxqGdEREQk6hRGUM+IiIiIlRRG6Fja661RGBEREYk2hRE6NbDq5F4REZGoUxihUwOr241pmtYWIyIiMswojAD2NN/ICB4P3oYGa4sREREZZhRGAFt8PIbLBYBHfSMiIiJRpTDipy3hRURErKEw4qflvSIiItZQGPGz6eReERERSyiM+NlTA2FEy3tFRESiSWHEz66REREREUsojPipgVVERMQaCiN+amAVERGxhsKIX3BLePWMiIiIRJXCiF9wS3iNjIiIiESVwoifGlhFRESsoTDiFzifxqMGVhERkahSGPELjIx4dTaNiIhIVCmM+AUaWL2NjZhtbRZXIyIiMnwojPgF9hkB8Li1okZERCRaFEb8DLsdW0oKoOW9IiIi0aQw0knHipoaawsREREZRhRGOrEHNz5TE6uIiEi0KIx0EtgS3queERERkahRGOnEFpim0fJeERGRqFEY6cSe6g8jGhkRERGJGoWRTrQlvIiISPQpjHQS2BLeqy3hRUREoqZfYeSRRx6hsLCQ+Ph4Fi9ezKZNm3q8/qGHHmLKlCkkJCRQUFDAd77zHZqbm/tVcCTZ1TMiIiISdSGHkeeee46VK1eyevVqtm3bxpw5c1i+fDkVFRVdXv/0009z5513snr1avbu3cvvf/97nnvuOb7//e8PuPhws2lpr4iISNSFHEYefPBBbrnlFlasWMH06dN59NFHSUxM5Iknnujy+vfff5+lS5fy5S9/mcLCQq666iq+9KUv9TqaYgV7ejoAnpoaS+sQEREZTkIKI62trWzdupVly5Z1vIDNxrJly9i4cWOXz7nooovYunVrMHwcOXKE1157jU9+8pPd3qelpQW3233WVzQ4MjIA8FRXR+V+IiIiAo5QLq6srMTj8ZCdnX3W49nZ2ezbt6/L53z5y1+msrKSiy++GNM0aW9v5xvf+EaP0zRr1qzhRz/6USilhYU9EEbcbsz2dgxHSB+PiIiI9EPEV9OsX7+ee+65h1//+tds27aNv/zlL7z66qv85Cc/6fY5q1atora2NvhVUlIS6TKBjmkaTFN7jYiIiERJSP/0z8rKwm63U15eftbj5eXl5OTkdPmcu+66i69+9at8/etfB2DWrFk0NDTwb//2b/z3f/83Ntv5ecjlcuFyuUIpLSwMhwNbWhre2lo8VVU4MjOjXoOIiMhwE9LISFxcHAsWLGDdunXBx7xeL+vWrWPJkiVdPqexsfG8wGG32wEwTTPUeiNOfSMiIiLRFXJTxMqVK7n55ptZuHAhixYt4qGHHqKhoYEVK1YAcNNNNzF69GjWrFkDwHXXXceDDz7IvHnzWLx4MYcOHeKuu+7iuuuuC4aSwcSekQHHjtFepTAiIiISDSGHkRtuuIHTp09z9913U1ZWxty5c3njjTeCTa3FxcVnjYT84Ac/wDAMfvCDH3Dy5ElGjhzJddddx09/+tPwvYswsvunZjQyIiIiEh2GORjnSs7hdrtJS0ujtraWVP/GZJFS+oMfUPvCnxl5x+1kfeMbEb2XiIhILOvrz2+dTXOOQM9Ie1WVxZWIiIgMDwoj57BnBKZpaqwtREREZJhQGDlHcOMzjYyIiIhEhcLIORyZWtorIiISTQoj5wiMjLTXKIyIiIhEg8LIOTqmaRRGREREokFh5ByBBlazuRlvU5PF1YiIiMQ+hZFz2JISMZxOQE2sIiIi0aAwcg7DMIK7sLZrea+IiEjEKYx0Idg3Uq2RERERkUhTGOmClveKiIhEj8JIF+zpCiMiIiLRojDSheBeI1reKyIiEnEKI12wa5pGREQkahRGuqAGVhERkehRGOmCI7i0VyMjIiIikaYw0oWOBtYaawsREREZBhRGuhDsGdEOrCIiIhGnMNIFR6BnpLYW0+OxuBoREZHYpjDSBXt6uu//eL143G5LaxEREYl1CiNdMJxObKmpgJb3ioiIRJrCSDfsGemAwoiIiEikKYx0w5HhX96rJlYREZGIUhjpRsfGZxoZERERiSSFkW4Ew4jOpxEREYkohZFuOHQ+jYiISFQojHQjeHKvzqcRERGJKIWRbtj9DazaEl5ERCSyFEa6oaW9IiIi0aEw0o3Ayb06n0ZERCSyFEa6EewZqamxthAREZEYpzDSjUAYMRsb8TY3W1yNiIhI7FIY6YYtORmcTkB9IyIiIpGkMNINwzBw+E/vVRgRERGJHIWRHtgzA+fTKIyIiIhEisJID3Q+jYiISOQpjPSgY68RLe8VERGJFIWRHjj8u7C2a2REREQkYhRGeqBpGhERkchTGOmBPXByrxpYRUREIkZhpAcOjYyIiIhEnMJID4JLe9XAKiIiEjEKIz3o6BmpsbYQERGRGKYw0gN7uj+M1NRger0WVyMiIhKbFEZ64PDvM4LHg9fttrQWERGRWKUw0gMjLs53YB7aa0RERCRSFEZ6EWhi1YoaERGRyFAY6UVwS/gqragRERGJBIWRXjhGZAHQfkZhREREJBIURnrhyPKHkcrTFlciIiISmxRGetERRiotrkRERCQ2KYz0wjHSF0Y8CiMiIiIRoTDSC3tgZOS0woiIiEgkKIz0IjhNc1o9IyIiIpGgMNILx8iRgK9nxDRNi6sRERGJPQojvXCMGAGA2dKCt77e4mpERERiT7/CyCOPPEJhYSHx8fEsXryYTZs29Xh9TU0Nt956K7m5ubhcLiZPnsxrr73Wr4KjzZaQ0LElvPpGREREwi7kMPLcc8+xcuVKVq9ezbZt25gzZw7Lly+noqKiy+tbW1v5+Mc/zrFjx3jhhRfYv38/jz/+OKNHjx5w8dGivUZEREQixxHqEx588EFuueUWVqxYAcCjjz7Kq6++yhNPPMGdd9553vVPPPEEVVVVvP/++zidTgAKCwsHVnWUObKyaD12TMt7RUREIiCkkZHW1la2bt3KsmXLOl7AZmPZsmVs3Lixy+f89a9/ZcmSJdx6661kZ2czc+ZM7rnnHjweT7f3aWlpwe12n/VlJftIbXwmIiISKSGNjFRWVuLxeMjOzj7r8ezsbPbt29flc44cOcJbb73FjTfeyGuvvcahQ4f41re+RVtbG6tXr+7yOWvWrOFHP/pRKKVFlCPLv6JmAD0jh7dXsOOtE9jsBnanDYfDhj3OxtTFuRRMzwxXqQPm9Xo4fewox3cWcXxnEe6KciYvuZgF11xPYmqa1eWJiEgMCnmaJlRer5dRo0bx2GOPYbfbWbBgASdPnuTnP/95t2Fk1apVrFy5Mvhrt9tNQUFBpEvt1kC3hG+obeGtp/bS2nz+aNChLRV8/s6FjCxIGVCNA9Xe2srbTz3GgQ/eo7m+7qzvbXrpeba//gpzP3EtC6/9jEKJiIiEVUhhJCsrC7vdTnl5+VmPl5eXk5OT0+VzcnNzcTqd2O324GPTpk2jrKyM1tZW4uLiznuOy+XC5XKFUlpEDTSMvPfCIVqbPYwck8LcjxfgafPiafNyaNtpTu6v5s3/2cMXVi3E4bT3/mIR4PV6eP1XD3Dgw/cAiEtIoGDGbMbMnEtCaipb/voXKo4dZvPLL7D9jVe48DM3sOj6L2AYhiX1iohIbAkpjMTFxbFgwQLWrVvH9ddfD/hGPtatW8dtt93W5XOWLl3K008/jdfrxWbztagcOHCA3NzcLoPIYOQYQM/IiX1VHNxcDgZcfuMURo1NDX5vwvxRPPPjD6kqbeCDl49w8ecnha3mvjJNk7effIwDH76Hze7g2tu/y4SFi7F1Co9TL7qUI9s2sfGFZyg/cogNz/4Bp8vF/E9+Our1iohI7Al5ae/KlSt5/PHHeeqpp9i7dy/f/OY3aWhoCK6uuemmm1i1alXw+m9+85tUVVVx++23c+DAAV599VXuuecebr311vC9iwjr79JeT7uXd545AMCsS0efFUQAElLi+NhXpwHw0ZslnNhXFYZqQ7Pppecp+vurAFx920omLb7orCACYBgGExYs5sZ7fsHFX7oZgLf/8DsObf4g6vWKiEjsCTmM3HDDDdx///3cfffdzJ07l6KiIt54441gU2txcTGnTp0KXl9QUMDf//53Nm/ezOzZs/n2t7/N7bff3uUy4MEqcFie50wVZg+rgM5V9GYxNeWNJKQ4Wfzp8V1eUzg7i+mX5AGw7qm9tDS2DbzgPtq1/k02PPsHAK64+RamXnRpj9cbhsGiT3+e2cs+AabJq7/8OeVHDkWjVBERiWGGOQQOXHG73aSlpVFbW0tqamrvTwgzs72dfbNmg2kyacO7wZGSnrjPNPHMDz+kvc3LshXTmbK4654agNbmdp776Wbcp5uYsjiHZSumh7P8Lh3bsZ2/rFmN6fVywac+x6U3rujzc70eDy/e9yOOfbSNpPQMvvzTB0jNGhXBakVEZCjq689vnU3TB4bDgT3Tt/y2r30jG/50kPY2L3mT0pm8KLvHa+PiHXx8xXQMA/Z/WEbx7jMDrrknXo+Hdb//NabXy7RLruAS/9RLX9nsdq69406yxhTSUFPNi/f9mJbGxghVKyIisU5hpI+CfSN92Guk/Jibox9VYrMZXPqlyX1adZIzPo2Zl+cDsPOdkwMrthd73n2bmrJTJKSksuxfv4lhC/0/A1diIp/53t0kpWdQWXyMd59+MvyFiojIsKAw0kehLO89vtN3zbg5WYzIS+7zPWZe6juv5/iuMzTUtvSjyt552tv54C/PAnDBpz5HXEJiv18rNWsU13z7vwDY8eYbVBYfC0eJIiIyzCiM9FEoK2qK9/hWxYyZOSKke2TmJpEzPg3Ta7L/g7LQi+yDPf98i9ryMhLT0pl71TUDfr2CGbOZtPgiTNPL23/4HUOgBUlERAYZhZE+Cuw10tthec0NbVQc852lM6Yf27xPW5oLwJ73SsP+g93T3nbWqIgzPj4sr3vpjV/D7nBQvLOIw1s3heU1RURk+FAY6SN7H3tGSvZWYZqQkZtEckboP+wnLhiF02WntqKJU4dq+lNqt3a9/Sbu0xUkpWcw5+NXh+1107NzWHDN9QC8839/h6c9esuTRURk6FMY6aPgYXm9jIyUBKZoZvTv8Lu4eAeTFvqWye5571QvV/dde1sbH7z4HACLrv8CTld4RkUCFn/mX0hMS6em7BTbX38lrK8tIiKxTWGkj/rSwGqaZke/yABO4p221LcJ2uGtFbQ0tff7dTrb9dY/qD9TSXJGJrOv/ERYXrOzuIRELv7STQBs/POzNNbWhP0eIiISmxRG+qgv59NUlTbQUNOC3Wkjb2J6v++VPS6VjNwk2tu8vnNtBqi9rY0PA6Min/kXHBE6E2jmZcsYNW4CrU2NvPfc/0bkHiIiEnsURvooMDLidbvxtnS97DYwKjJ6cjqOuP6fwGsYBtP9jax73yvt9+sEHN7yIfXVVSRnZDLrY8sH/HrdMWw2rrj5FgB2vv0P3KcrInYvERGJHQojfWRLTcVwOoHuV9SU7PHtnDpmemhLersy5cIcbHaDiuN1VJ6oG9Br7fnnOgCmX3YlDv97iJT8aTMZM3MOptfLtjfUOyIiIr1TGOkjwzCw9zBV09bqofRgLQAFA+gXCUhIjmPcHF/T7EAaWRtqqjlatBWAGZddOeC6+mLBtdcDsHPd37VNvIiI9EphJAQ9ragpPVCDp91LcqaLjJz+72raWWCq5uDmcrze/u05su+9dzC9XnInTiEzLz8sdfVm3JwFZI4uoLWpkZ1v/T0q9xQRkaFLYSQEPZ1PU9xpiqYvZ9H0xeipGcQlOGiub6PiuLtfr7H7Hf8UzaUfC0tNfWHYbCy45tMAbHv9r3g9nqjdW0REhh6FkRD0tLy3ePfAl/Sey263UTDN93rHd4V+km/FsSOcPn4Uu8PBlKWXhq2uvph2yRUkpKZRV3maAx++F9V7i4jI0KIwEoLuzqdxn2miprwRw2aQPzUjrPcsnOVrhi3uRxjZ88+3ABi/YBEJySlhras3zjgXc6/6JABb//aizqwREZFuKYyEoLu9RgK7ruaMS8WVGN7VKmNm+MJIxfG6kE7y9Xo87N2wHohe4+q55l51DXank7LDBzm5f48lNYiIyOCnMBKCwPk0nnN6Rkr2+sJIOFbRnCsxNY5RY32jGoGpoL44tmMbjbU1JKSmUThnQdjr6ovEtHSmX3IFAFv/9pIlNYiIyOCnMBKC7npGThf79gHJHcCuqz0ZM9M3OhJK38jud3xTNNOWXobd4YhIXX0ROEDv0JYPqC4b+AZuIiISexRGQuAY2bG0N9AD0dbiwV3ZDMCIvKSI3HesP4yU7K3C4/H2en1zfT2Ht3wA+DY6s9KI/DGMm7sATJOP/vGapbWIiMjgpDASAscIXygwW1rw1tcDUHWqAYCE1DgSUiJz5kv22FQSUpy0NrVTdri21+sPfLABT1sbWQVjGVU4PiI1hWL2x32NrHs3rMfTHp6D/0REJHYojITAlpCALTkZ6NhrpKrUF0oiNSoCYNiM4BbzfZmq2ff+PwHf3iLh2vNkIMbNXUBiWjqNtTUc3b7F6nJERGSQURgJ0bnLe8+U+kZGRuQlR/S+Y/vYN9JcX8+JvbsAmLR4aURr6iu7wxHcdG3X+jctrkZERAYbhZEQBcJI4LC8qpO+kZHM0ZEbGQHfSh3DgKrSBuqqmru97uhHWzG9XkbkjyE9OyeiNYVi5uXLADi6fTONtTXWFiMiIoOKwkiIzj0sLzAykhnBaRqA+CQnOePTgJ5HRw5v+RCACQsWRbSeUI3IH0POxMl4PR72vPu21eWIiMggojASouBheacraa5vo7G2FYDM3MiGEeh9ia+nvZ1j/hN6JyxcHPF6QhUYHdm9/k3tyCoiIkEKIyHqvNdI1SnfFE3KiHji4iO/l0dga/gT+6pobzv/8LmT+3bT0thAYlo6ORMnR7yeUE256FIczjgqS45TfuSQ1eWIiMggoTASos5h5MzJQPNq5EdFAEaMTiYpLY72Vi+lB2rO+35gimbcvIXYbPao1BSK+KRkJi5aAqiRVUREOiiMhCh4Ps3p01QF+0Uiu5ImwDAMCvxn1ZzYX33W90zT5PBWf7/IIJyiCZjhn6rZ99562ltbLa5GREQGA4WREDmyswFoLy/njH+PkUg3r3Y2enI6AKUHa856/MyJYmoryrE7nRTOmhe1ekI1ZuZsUkaMpKWhgUP+XWJFRGR4UxgJkTMQRqqrgyMjI0ZHZ2QEIG9SOuA7xbe1uWM308AUzZiZc3DGx0etnlDZbHZmXObbc2S3pmpERASFkZDZ0tIwEhJojUujpbEdw2aQkZ0YtfunjkggZUQ8ptc8a2v4w9s2ATBhweCdogmYcZlvqubYju001FT3crWIiMQ6hZEQGYaBMyeH+qQ8ANJHJWB3RvdjHO0fHTnpn6ppqKnm1MH9AIxfcEFUa+mP9JxccidOAdPkwAcbrC5HREQspjDSD46cbBr8YSRazaud5QX6Rvwrao5s3wymSfb4iaRkZkW9nv6YctElAOzfqDAiIjLcKYz0gzMnl/qkXABGRHgb+K7kTcoAoOK4m7ZWD0e2Dp0pmoDAuTkn9++hrqrS4mpERMRKCiP94MzN6TQyEv0wkpoVT3KGC6/H5MT+0xzbsR2A8YNsC/iepGaNJG/KdN9Uzcb3rC5HREQspDDSD/ZROTQERkYsmKYxDCM4VbP//a20t7SQnDmCUYXjo17LQExZEpiq+afFlYiIiJUURvqhOSUbrz0Om9lO6sgES2oY7Z+qObFnBwBjZ8/DMAxLaumvyRcuBcPg1MH9uE9XWF2OiIhYRGGkH+qMdACSmsqx2awJAIH9RtyVBwAYO2uuJXUMRHJGJgXTZgKwf+O7FlcjIiJWURjph9pW36ZiSe4SvE1NltSQNiqB+OR2zPbTgG+zs6Fo8hKtqhERGe4URvqh+nQbAEkNp2g7VWZJDYZhkJLuCyJJ6XkkpWdYUsdATV58EYZho/zIQWrKTlldjoiIWEBhpB+qTvm2gU9uKKW93JowAuBtLwbAEV9oWQ0DlZiWTsHM2YCmakREhiuFkRB52r3UlDUCkNRQatnIiGma1JT5dl1tbsrF0+a1pI5w6FhVozAiIjIcKYyEqKa8Ea/XxGG042qpoc2iqYWaslIaqisBGxh5lB9zW1JHOExatASb3c7p40epKj1hdTkiIhJlCiMhqj3ta1hNjW/DANrLyi2p4/jOjwBITB+LYTg5eWDoHjiXkJLKGP9qII2OiIgMPwojIao70wxAcorvo7NqZKR4ZxEAeZNnAVDqPzRvqJrs3x7+0OYPLK5ERESiTWEkRHVVvjCSMsK32Vm7BT0jXq+H4t2+kZEpF/lO6S07UovHM3T7RiYsXIxh2Kg4elgboImIDDMKIyEKhJHU3DQA2sqjP01TfuQQLQ0NuBKTmHTBLFyJDtpbvZw5UR/1WsIlMTWN0VOnA3Bo80aLqxERkWhSGAlRYJombexIALxuN96GhqjWcHxHEQAFM2ZjdzjIHucLRqcO10a1jnCbeMGFABxUGBERGVYURkIUGBlJG52GLdl3SF5bWXSnagL9IoEt4HMn+MJI2ZGhHkaWAHBy7x4a3UP7vYiISN8pjISgrcVDc71v99WUzHicuTm+x6MYRtqamyk9sBeAsbPnApATCCNDfGQkbVQ2IwvHY5pejmzdZHU5IiISJQojIQiMisTF23ElOnHk5ALQHsUwcmLfbjzt7aRkjSQ9Jw+A7MJUDJtBfXVLsMahapJ/dERTNSIiw4fCSAjqgytpfAflOXOyAaK6C+vxTlM0huE7MdjpspOV75syGvpTNb6+keM7ttPabM0hhCIiEl0KIyEILuvN9IURR45vmiaa59OU7NoBnH9Kb2CqZqg3sWaNKSQtOwdPWxvHPtpmdTkiIhIFCiMhCKykCYQRp3+aJlojI80N9VQcPwJAwfRZZ30vd3xs9I0YhhFsZD20SVM1IiLDgcJICAIjI8kjAiMj/mmaKO3CenLfHjBN0nNySc4ccdb3AiMjlSfqaWvxRKWeSAlM1RzZthlPe5vF1YiISKT1K4w88sgjFBYWEh8fz+LFi9m0qW8rH5599lkMw+D666/vz20td+40jTM30MAanY3PTuzdBUD+tFnnfS8lM57kDBem1xzSh+YB5E2eSmJaOi2NDZTs2WV1OSIiEmEhh5HnnnuOlStXsnr1arZt28acOXNYvnw5FRU9b+F97Ngx/vM//5NLLrmk38VaLThNE2hgzfaNjHjr6/HUR3730xN7dgJQMH1ml9/PiZGpGpvNzoSFiwFN1YiIDAchh5EHH3yQW265hRUrVjB9+nQeffRREhMTeeKJJ7p9jsfj4cYbb+RHP/oR48ePH1DBVvF4vDTUtAAdIyO2pCRsqakAtJ+K7FRNa1Mj5UcPA5DfXRiJkc3PoGOq5tCWDzC9Q/fMHRER6V1IYaS1tZWtW7eybNmyjhew2Vi2bBkbN3b/L9gf//jHjBo1in/913/t031aWlpwu91nfVmtoboF0wSbwyAxJS74uDMnsPFZZKdqTu7fi+n1kjoym9SsUV1e03knVtNrRrSeSBszcy7O+AQaqqsoP3LI6nJERCSCQgojlZWVeDwesv3TEwHZ2dmUdbPx14YNG/j973/P448/3uf7rFmzhrS0tOBXQUFBKGVGRLBfJCMew2YEH3cEd2GN7MhIxxTN+f0iASPyk3HE2WhpbKe6rDGi9USaw+mkcM48AA5v026sIiKxLKKraerq6vjqV7/K448/TlZWVp+ft2rVKmpra4NfJSUlEayyb+rO2fAswJnt32skwst7SwLNq91M0QDY7TayC33TRqcO10S0nmiYsMDXN3J4y4cWVyIiIpHkCOXirKws7HY75eVnT0mUl5eT45+u6Ozw4cMcO3aM6667LviY1z//73A42L9/PxMmTDjveS6XC5fLFUppEXfuHiMBwfNpIrjxWVtzM+WHDwLdN68G5IxP4+SBGsqO1DLjktERqykaxs1biGHYOH38KO7Kim6np0REZGgLaWQkLi6OBQsWsG7duuBjXq+XdevWsWTJkvOunzp1Kjt37qSoqCj49alPfYorrriCoqKiQTH90lfdjYwEz6eJ4MjIyQN78Xo8pIwYSerI7B6v7Whitb7PZqASU9PInTwVgMM6OE9EJGaFNDICsHLlSm6++WYWLlzIokWLeOihh2hoaGDFihUA3HTTTYwePZo1a9YQHx/PzJln/0s+PT0d4LzHB7v6ql5GRiJ4WN6JPR1TNIHzaLoTWN5bU95IU10rCZ2abYeiCQsWUbp/D0e2bmLe8mutLkdERCIg5J6RG264gfvvv5+7776buXPnUlRUxBtvvBFsai0uLuZUhJe5WqGu6uxlvQGO7MAurGWYZmRWsJzY62tezZ/We4CLT3KSkZMIDP1zaqCjb6Rk9w5am4Z2U66IiHQt5JERgNtuu43bbruty++tX7++x+c++eST/bmlpUzT7L6B1d8rYzY24q2rw+7fdyRc2lpbKDt0AOi9XyQgZ0Ia1WWNlB+tZfzckWGtJ9oyR+eTnpNLTdkpju3YzuTFS60uSUREwkxn0/RBU10bnjYvhgFJGWc31toSErD7p54icWDeqQP78bS3k5SRSXpOXp+eE5iqiYWREcMwmLBgEaBVNSIisUphpA8CK2mS0l3Y7ed/ZA7/6Eh7BPYa6TxF01u/SEAgjFQcr8PjGfq7lwamao5u34LXO7QPARQRkfMpjPTBuQfkncuZ5xuxaD15Muz3DjSv9nWKBiAjOxFXogNPm5fKksifmRNpeVOm40pKoqnOzakD+60uR0REwkxhpA8CIyPJ3YSROP8S5baSE2G9b3tbG6cO+n74dnVSb3cMm0H2uNg5p8bucDBu7kIADm/VVI2ISKxRGOmDXkdG/GGktaQ4rPctO3yA9rZWEtPSyRydH9Jzcyf4GmljIYwAHX0j2m9ERCTmKIz0QXcraQLixvhHRorDu239yb27ARg9dXqf+0UCssfHzsgIQOHcBdjsdqpOllBdVmp1OSIiEkYKI33Q3VbwAcGRkRMnwrrXyMn9ewAYPWVGyM/NLkzFMKC+qoX66paw1WSV+KRk8qf5PocjGh0REYkpCiN90Ns0Tdzo0WCzYTY24qmsDMs9vV4Ppfv3AgR/CIciLt7BiPxkIHZGR8bP9x+cpzAiIhJTFEZ60dLUTmtTO9D9NI0RFxfc/Kw1TCcMnykppqWxAWd8AiPHjuvXa+TEUBMrdPSNnNy3m+aGob9KSEREfBRGehE4kyY+yYnTZe/2OueYMQC0FoenifXEPl+/SN7kqdjs3d+3Jx2H5sVGGEnPySUzLx+vx8PxHdutLkdERMJEYaQXwX6RbkZFAsK9vPfkPn+/yNTp/X6NnPG+FTWni+tob4uNzcLGa1WNiEjMURjpRW/9IgHhXN5rmiYn/SMj/WleDUjNSiAhxYnXY3K6ODamNSbM94UR7cYqIhI7FEZ60dtKmoBwLu91ny6nvuoMNrud3EmT+/06hmEEt4Yvi4FzagDypkwjPimZ5vo6Sg/ss7ocEREJA4WRXvS2x0hAx8jIwMNIYIome9xEnK6e79ubYBg5GhthxGa3Uzh3AQBHtm22uBoREQkHhZFe1Ff7t4I/57Tec8X5G1g9Z87gqW8Y0D0Dzauj+7Gk91ydR0bCuQeKlQJ9I9pvREQkNiiM9KLR3QpAYlrPYcSekoI9PR2AthMDGx0JNq9O6X/zasCosSnYbAaN7tbglNNQN27OAgybjTMniqmtKLO6HBERGSCFkV4Ew0iqs9drg8t7BzBV0+iupeqk7/l5U6b1+3UCHHF2sgpia/Oz+OTk4Cqjw1s1VSMiMtQpjPSgtbmd9lYvAAkpcb1eH1zeO4Am1sCuq5mjC0hMTev363TWsd+IOyyvNxiM96+qObJNUzUiIkOdwkgPmup8oyKOOBtx8Y5er3cW+E7WHcjy3kC/SP7UgfeLBOTE2KF50LEba8nunbQ2NVpcjYiIDITCSA8a3W0AJKb2PioCEFfgm6YZ0MhIoF8kDM2rAYEwUnmintbm9rC9rpUyckeTnpOL19PO8R1FVpcjIiIDoDDSg6Zgv0gfw8iYgS3vbWtupvzoISA8zasBKZnxpGTGY3pNyo/GxlSNYRjB0RHtxioiMrQpjPSg0d0C9K1fBDoaWNtKSzHb2kK+36lDB/B6PCSPyCJ15KiQn9+T3Ilp/nvUhPV1rRTsG9m+GdPrtbgaERHpL4WRHjSGODLiGDkSw+UCj4e2U6dCvl/HFvDTMQwj5Of3JHdiOgCnYmQnVoDRU2fgSkyiyV3LqUMHrC5HRET6SWGkB411vtGNhD6GEcNm69TEGvpUzcn9Az8crzu5nU7w9XhiYxTB7nBQOGc+AIe3fmhxNSIi0l8KIz0I9oz0cZoGOjWxhhhGvB5P8KyVcK6kCcjMTcKV6KC91UtlSWwcmgcwYeFiAA5vURgRERmqFEZ6EOgZ6es0DXRa3hviiprTx4/S1tyEKzGJEf5AE06GzQiOjsRS38i4uQuDu7HWlGs3VhGRoUhhpAeh9oxA55GR0PYaCfSL5E2Zhs1mD+m5fRWLfSPxycnBkaQjmqoRERmSFEZ6EGrPCHRa3hviyEg4z6PpTueRkVg5NA86Ds7TEl8RkaFJYaQbbS0e2ls8QKjTNB3n0/T1B75pmhFtXg0YNTYVu8NGU10btRVNEbtPtAX2GzmxdxctjQM7MVlERKJPYaQbgSkah9OG09X3aRNn/mgwDMzGRjxnzvTpObXlZTTUVGN3OMiZMLlf9faF3WljVGEKAKUx1DeSkTuazLx8vB4PR4u2Wl2OiIiESGGkG4EwkpAaF9KeH7a4OBy5OUDfl/cGzqPJHj8JR1zfR2H6Ixb7RkCrakREhjKFkW6EuhV8Z6Eu7z0ZgfNouhPsGzlYE/F7RVOgb+Ro0RY87bFx/o6IyHChMNKNxrr+h5FQl/cG+0Ui2LwakDshDQyoPd1EQ21LxO8XLXmTpxKfkkpLQwOl/s9TRESGBoWRbnSepglVKMt7G921VJeeAHzLeiPNlehkRF4yAGUxNFVjs9kZP28hoFU1IiJDjcJIN/qz+2pAKMt7A6MiI/LHkJCcEvK9+qPj0LzYCSNAp1N8P4yppcsiIrFOYaQb/dnwLCBu7FgAWo8e7fWH4sm9/sPxIrik91yBMBJLK2oACufMx+5wUFN2iir/aJOIiAx+CiPdGFAYGTcODANPTU2vy3sDIyOROI+mO7kT0gGoLKmjtTl2mj3jEhLJnz4L0KoaEZGhRGGkG4EG1v70jNgSEnD6p2paDh3q9rq25mYqjh4GYHQUw0hKZjwpmfGYJpQfdUftvtEwceGFABza8oHFlYiISF8pjHRjID0jAK6JkwBoOdh9GDl16ABej4fkEVmkZI3s1336KzBVc/JAdVTvG2kTLvDtN3LqwD7qq6ssrkZERPpCYaQLbS0e2vqxFXxnrokTgZ5HRk7u9/eLTJke0sZq4TB6SgYAJ/bFVhhJycwiZ6JvF9vDGh0RERkSFEa6EOgXsTttOOP7d4Jun8LIvsifR9OdgmmZAFQcr6OlKXb6RgAmXrAEgIObNlpciYiI9IXCSBeaOm141t8RC9ckfxg5eLDLFTVej4fSA/uA6Gx2dq6UzHjSRiZgek1KY2yqZtIiXxgp2b2D5oZ6i6sREZHeKIx0YSAraQLixo0Dux2v2017xenzvn/6+FHampuIS0gka8zYft9nIPL9oyOxNlWTmZdP5ugC38F527dYXY6IiPRCYaQLwd1X+9m8CmBzuYgb49uJteXQwfO+f6LT/iI2W/+mggYq3983UhJjYQRg4gX+VTWaqhERGfQURrrQNIBzaToL9I20dtE3cnJfIIxEb0nvufKnZIAB1acaYuqcGoBJ/r6Ro0VbaWuNrfcmIhJrFEa60FgbpjAyqesmVtM0ObF3FwD502YO6B4DEZ/sZGSBbwv6WJuqyZ4wieQRWbS1NFO88yOryxERkR4ojHQhuOHZAKZpoNOKmgNnT9NUnTxBU50bhzOOnAkTB3SPgcqfGljiG1t7chiG0bEB2mZN1YiIDGYKI11oCkMDK4Brkn/js8OHz1pRExgVyZ08FbvDOaB7DFRHGKmOucPlAqtqDm/5EK/HY3E1IiLSHYWRLoRjNQ34D8xzOPDW19NeVhZ8fDD0iwTkTkzH5jCor26htqLJ6nLCKn/aTOKTkmmqcwfPABIRkcFHYaQLjWFqYDXi4ogr9C3bDfSNmKZJSbBfxPow4oyzkzvetzV8rE3V2Ox2xi9YBGhVjYjIYKYwco62Vg9tzb4h/f4ckneuc8+ocZ+uoP5MJTa7nbxJUwf8+uGQP9W330hMLvH1T9Uc3Lwx5qahRERihcLIOQL9InaHjbh+bgXf2bnbwgf6RbLHT8QZHz/g1w+HQN/Iyf3VeL2x9QO7cPY8HC4XdZWnKT98/n4vIiJiPYWRc3TuFwnH4XXBJtaDvh+EgX4RK5f0nmvU2BTi4u20NLZTWVJndTlh5XTFM2G+b6pm38Z3La5GRES6ojByjuDuq2GYooFOe40cPozp9XbaedX6fpEAm91G3uTYPMUXYMpFlwBwYOMGTK/X4mpERORcCiPnCNdKmoC4MWMwnE7MxkZq9u2j+tRJMAxLDsfrSazuNwJQOHcBzvgE6s6cpvTgfqvLERGRcyiMnCO4FXxKePb/MBwO36F5QLF/mmDkmELik5PD8vrhUuBvYi09WEtbS2ztyeGMczFx4WIA9m/8p8XViIjIufoVRh555BEKCwuJj49n8eLFbNq0qdtrH3/8cS655BIyMjLIyMhg2bJlPV5vtXBP00BHE+vJvYOvXyQgIzeR1Kx4PO1eSvbG3uhIcKrmg/fwemMrbImIDHUhh5HnnnuOlStXsnr1arZt28acOXNYvnw5FRUVXV6/fv16vvSlL/H222+zceNGCgoKuOqqqzh58uSAi4+Ejt1XXWF7TddkXxPrqbJSYHD1iwQYhkHh7CwAju2otLia8Bs7ez6uxCQaqqs4uU8boImIDCYhh5EHH3yQW265hRUrVjB9+nQeffRREhMTeeKJJ7q8/o9//CPf+ta3mDt3LlOnTuV3v/sdXq+XdevWDbj4SAjXhmeduSZOpM1mo6a1GRgcm511ZVwgjOysjLklvg6nk4n+k3z3v69VNSIig0lIYaS1tZWtW7eybNmyjhew2Vi2bBkbN/Zth8vGxkba2trIzMzs9pqWlhbcbvdZX9HScWJv+M6McU2cSHVSPBiQkTuapPSMsL12OOVOSicuwUFTXRvlR6P3mUdLcKrmw/d0Vo2IyCASUhiprKzE4/GQnZ191uPZ2dmUdTp7pSff+973yMvLOyvQnGvNmjWkpaUFvwoKCkIpc0DCdWJvZ86CAqrSfA2ruQWFYXvdcLPbbYydOQKAYztOW1xN+I2ZOYf4lFSa3LWU7N5pdTkiIuIX1dU09957L88++ywvvvgi8T3sPrpq1Spqa2uDXyUlJVGpr73TVvDhnKYx7HaqM1IBGJU4uFbRnCswVXP0o9jrG7E7HMGTfLWqRkRk8AgpjGRlZWG32ykvLz/r8fLycnJycnp87v3338+9997LP/7xD2bPnt3jtS6Xi9TU1LO+oqGx81bwCY6wvW5LYwM1Nl8PRmZdY9heNxLGzMjEZjOoLmukpnxw19ofU5b4pmoObtqIp73d4mpERARCDCNxcXEsWLDgrObTQDPqkiVLun3ez372M37yk5/wxhtvsHDhwv5XG2HBKZpUZ1i2gg84sXc3JpDY0op934GwvW4kuBKd5E1OB3yNrLGmYPosEtPSaa6vo3hnkdXliIgI/ZimWblyJY8//jhPPfUUe/fu5Zvf/CYNDQ2sWLECgJtuuolVq1YFr7/vvvu46667eOKJJygsLKSsrIyysjLq6+vD9y7CpLmuDYCE5PBN0QCU7P4IgBH1TTTt3DnotyQfNyd2p2psdjuTFi8FYO9771hcjYiIQD/CyA033MD999/P3Xffzdy5cykqKuKNN94INrUWFxdz6tSp4PW/+c1vaG1t5fOf/zy5ubnBr/vvvz987yJMmht9YSQ+OXwraQCK/c2SWS0evHV1tB47FtbXD7fCWb4wcupwLc31bRZXE34zLv0YAAc/fJ+WxgaLqxERkX41Rtx2223cdtttXX5v/fr1Z/362CD/wdtZS4OvhyA+MXz9Ik11bk4fOwJAXkEh5ulqmj7agWv8+LDdI9xSsxIYMTqZMyfrOb77DFMW99wPNNTkTJxM5ugCqk6WsP/9d5m97BNWlyQiMqzpbJpOmht8owCupPCNjJTs8Y2KjMgfQ8acuQA07fgobK8fKR1TNbG3xNcwDGZe7ltavmv9WourERERhZFOAmEkPoxhpHjXDsC3x0XCHN8qouaPdoTt9SMlsDV88e4qPG2Du8elP6Zf+jEMm41TB/dz5kR0lo6LiEjXFEY6aYlAGCnZ7QseBTNnk+Bf0tx84ADe5uaw3SMSRo1JITEtjrYWDycOVFtdTtglpWcwbp5vZdfud960uBoRkeFNYaST5kZfz4grKTw9I/XVVVSdLAHDoGDaLBy5udhHZkF7O817BvdhbYbNYNyckQAc3tr1IYhDXWCqZs8/39L28CIiFlIY6SQ4MpIYnpGRwKjIqMLxxCcnYxgGCbPnANA0BKZqJl8wCoDD2ypob4u9H9bj519AQkoqDTXVHC3aanU5IiLDlsJIJ+FuYO3cLxIQmKoZCk2suRPSSc500drs4diOM1aXE3Z2h5Ppl14BwO71mqoREbGKwkgnzYGlvWGapinZ4w8jMzq2vx9KTayGzWDyBb5lvQc29e0gxKFmxuUfB+Dw1k00umstrkZEZHhSGPHzery0NgXCyMBHRmoryqktL8Ow2Rg9dXrw8fiZM8EwaCstpb1y8O9wOnmxbzO747vOBEeOYsnIMYVkj5+I19PO3nfXW12OiMiwpDDi19LUcWiaKwybngX6RXImTiYuITH4uD05GdfECQA07Rj8oyMj8pLJKkjG6zE5FKONrDP8jay716/FNE2LqxERGX4URvwC257Hxdux2Qf+sRTvDkzRzDnve/GBvpEhMFUDxPxUzbSll2N3OjldfIzSA/usLkdEZNhRGPFr8S/rDce5NKZpUrLL16A6Zubs874fXFEzBJpYASZdkA0GnDpUi7uyyepywi4+OZlpF18OwLbXXra2GBGRYUhhxC+4kiYMy3qrT52kvroKu8NB7uSp530/2MS6c9egP8EXIDnDxejJGQAc2FxucTWRMf+TnwZ8h+e5T8fmdJSIyGClMOLXsfvqwPtFjvn3rBg9dTrOONd533dNnIiRkIC3vp7WI0cGfL9omOJvZD3wYVlM9lWMHFPImJlzME0v2//+N6vLEREZVhRG/ALLesOxx0hgA63CuQu7/L7hcJAwYwYwdPpGxs8bhd1po7qskcqSeqvLiYjA6MjOt/5Oa3PsTUeJiAxWCiN+zWHafbWtpTl4Uu+4uQu6vS5+TmDzs6ERRlwJDgpn+Q7P2x+jjazj5y0kPSeXloYGdr+zzupyRESGDYURv+A0zQAbWEv27MTT1kbKiJGMyB/T7XUd28IPjSZW6JiqObipHI9n8Pe6hMqw2Zh/9acA2P76X4dEP4+ISCxQGPELHpI3wD1Gjm73TdGMm7sAwzC6vS5xwXwAWvbtGxKbnwGMmTGChNQ4Gt2tHNl+2upyImLG5ctwJSZRfapU59WIiESJwohfRwNr/0dGTNPkaNEWgODx9N1xZGXhmj4NgIb33uv3PaPJ7rAx45I8AHauP2FxNZERF5/ArCuXA7BVy3xFRKJCYcQvHIfkVZ8qpba8DJvd0eX+IudKvuRSAOrf3dDve0bbzEtGY7MZnDpUy+mSOqvLiYh5y6/FMGwU7yyisviY1eWIiMQ8hRG/5jCMjBzzj4rkT5t+1hbw3Um+5GIAGjZswPR4+n3faEpKdzFh/kgAdr4dm6MjqSNHMWnREgA2//XPFlcjIhL7FEb8gjuwDmCfkd6W9J4rYe5cbCkpeGpqaN69u9/3jbZZl+cDvg3QAtvox5oLPv15APZueIczJ0ssrkZEJLYpjABerxkMI/3dgbWvS3o7MxwOkpb4/gVe/+67/bqvFXImpJFVkIynzcue90qtLiciciZMYsLCCzFNLxuff9rqckREYprCCNDa2OnE3n6OjPR1Se+5kgJTNf8cOmHEMAxmX+EbHdn5zgm83tjbkRVg6b/cCMD+je9yWr0jIiIRozBCR7+IM96OvZ8n9vZ1Se+5ki+5BICmnTtpr67u172tMGlhNvFJTuqrWji2Y2gsTQ7VyLHjmHyhLyy+/6c/WlyNiEjsUhhh4M2roSzpPZczJwfXpEng9dLw/vv9ur8VHHF2pl/sW+a7I0YbWQEu+sKXwTA4tHkj5UcOWV2OiEhMUhhh4GEk1CW950q61Dc60jCElvgCzLxsNIYBJ/dXc6Y0Ns+rGZE/hmlLLwPgvT/9r8XViIjEJoUR6NS82r9+kVCX9J4rMFVTv2HDkNqCPCUznnFzfct8t/+92OJqImfJ57+EYbNxdPsWSg/stbocEZGYozDCwEdGjmz3hZG+Luk9V8L8+RiJiXgqK2nZt69fr2GVBZ8YC/gOz6s61WBxNZGRkTuaGZddCcB76h0REQk7hREGFkYa3bUU7/Iddjdx4eJ+3d8WF0fShRcCQ2s3VoBRY1MZNycLTNj8t6NWlxMxF372i9jsDop3FnF46yaryxERiSkKI0BLg3+aph/Leg9t2ojp9TKqcAIZuaP7XUNwN9YhtN9IwOJPjQcDDm2toPJEbG4RnzYqm/mf9J3o+/aTv6WttcXiikREYofCCAMbGdm/0RceJi+5eEA1JPn7Rhq3b8dTN7R+oI8YnczEBaMA2PRK7I6OLPn8l0gekUVtRTmbXnre6nJERGKGwgjQ0ug/JC/E3Vcba2so2e3bdXXKkksGVENcfj5x48aBx0PDhqE1VQOw6NpxGAYc/aiS8mNuq8uJiLj4BK646esAbH75BapPnbS4IhGR2KAwAjQ39O9cmoOb3sc0vWSPn0R6ds6A60hZtgyAmpdeGvBrRVtGThKTF/s+g02vHLG4msiZtHgphXPm42lv563/+S2mGZu7z4qIRJPCCP2fptn/vm+KZsoAp2gC0j/3WcC330hbWVlYXjOaLrimEJvNoHh3FacO1VhdTkQYhsHHVvy/2B0Ojn20jYObhs5GdSIig5XCCNDiDyOuEMJIQ001JXt3AQS3DB+ouMJCEi+4ALxeal98MSyvGU1pIxOZujQXgA9ePhKzowYZuaODp/q+/dTjtDY3WVyRiMjQNuzDiNdr0tIUmKbpexg58OF7YJrkTJxM2qjssNWT/vnPAVDz578MqQ3QAhZeXYjdYaP0YA0HN5dbXU7ELLr+C6SNyqb+TCUbnv2D1eWIiAxpwz6MtDa1g/8f8KHswNoxRTOwxtVzpVx1FbaUFNpOnKDxww/D+trRkJIZz8JPFgKw4fmDNNe3WVtQhDjjXFz5r98CYPvrr3Bk22aLKxIRGbqGfRgJ/LB0uuzYHX37OOqqKjm5fw8Aky9cGtZ6bAkJpF57DQA1L/w5rK8dLfOuGkNmXhJNdW289+eDVpcTMePmLmD+1b69R9749S+orzpjcUUiIkOTwkhj6M2rBz98H0yT3MlTSc0aFfaa0j/n60eoW7sWT01N2F8/0uwOG1d8ZSoYsG9jGSf2VVldUsRccuMKRhaOp6nOzeuPPIDX67G6JBGRIWfYh5H+7L66f6NvH5ApF4Z3iiYgfsZ0XNOmYba2UvvK3yJyj0jLGZ/GzEt9O9Ku/+N+2ltj84e0w+nk2tu/i9MVT/GuHWx+eWiOZomIWGnYh5FQl/W6K09TGpiiWRLeKZoAwzBI/5y/kfWFF4bsqpQl108gKd1F7ekmNr92zOpyIiYzL5+Pfe0bALz3p//Vyb4iIiEa9mEk1N1Xd7z5OgD502eSkpkVsbrSrrsWIy6Olv37ad61O2L3iaS4BAeXfnEyAEX/KI7Zc2sAZlx2JVOXXobp9fLqwz+noaba6pJERIaMYR9GAg2s8cm9h5G21hY+evMNAOZ94rqI1mVPSyPlqqsA3+jIUDV+7kjGzx2J12vyxm93BUeiYo1hGCz7+q2kZ+fiPl3Bi/f9WPuPiIj0kcJIo3+PkT4s69377nqa69ykjhzFxIUXRrgySP+8r5G19uWXaTt1KuL3i5TLvzKFlMx4ak83sfaJPXi9Q3PaqTeuxEQ+c+cPSUhJpfzIQV75xb142tutLktEZNAb9mGkr7uvmqbJ9tf/CsC85ddis9sjXlvi4kUkLFyA2dxMxS9+EfH7RUpCchxXf2MWdqeN4t1nYvrsmsy80Xzme6txuFwcK9rK2sd+OWR7fkREomXYh5G+HpJXvOsjKkuO43TFM/NjV0WjNAzDIPvOVWAYuP/6Ck07dkTlvpEwckyKb7kvsPX14xzeXmFxRZGTO2kK191xJ4bNxu531vHec/9rdUkiIoPasA8jfW1g3eYfFZlx+ZXEJyVHvK6AhJkzSPv0pwEoX3PvkP5X9pTFOcy5sgCAN5/cy5nSeosripzx8y9g2ddvBeDDF59j8yt/sbgiEZHBa9iHkb40sFaXlQa3+573iU9Fpa7ORn7nOxgJCTRt307d669H/f7hdNFnJzB6SgbtLR5e+/UO6qqarS4pYmZfuZyL/uVGAP75v0+w/g+/G5LnDYmIRJrCSGAH1h5GRra/8QqYJuPmLSQzb3S0SgtyZo9ixC1fB6Di/gfwtrREvYZwsdltLP/6DFKz4nFXNvOX+7dSe7rR6rIi5sLPfpFLb1wBwNZXX+K1Xz1Ae1tsrigSEemvYR1GTK9JS2PPO7C2NDaw6+03AZj/yU9HrbZzjVixAkdODm2lpVQ9+ZRldYRDQkocn/mP+aRnJ1Jf1cJf7t9G1akGq8uKCMMwuOBTn+Pq2/4Dm93Ovvfe4cV7V9PSGLsBTEQkVMM6jLR0OrG3ux1Yd739Jm3NTYzIH8PYWXOjV9w5bAkJjPqPlQCc+e1vaSsf2g2gyRnxfOY/5pOZl0RjbSsvPbgtpjdFm37JFXzme6txxidQvGsHz67+LmdOFFtdlojIoDCsw0hgA67uTuxtqKnmgxefA2D+1Z/CMIyo1neu1GuuIX7ObLyNjZz41rfw1A/t0YTE1Dg+s3I+I8ek0FTXxksPbo/pQ/UK58znhtVrSExLp7L4GP/3ztvZ+urL6iMRkWFvWIeRng7JM02TtY8/QnOdm5GF45lx+ZXRLu88hs3G6Pvuw56ZSfPu3Zz89r9jtrZaXdaAxCc7+fQdc8kZn0pLYzsv/39FvP/nQ3jaY/MHdPb4iXz1vocpnLsAT1sb6//wOC/89Ae4K09bXZqIiGWGdRgJNq92MUWz9923ObzlA2x2B1ffuhK7o29n10RaXGEhBb/9LUZiIg3vb6R01feH/L+sXYlOPnX7PKZfnAcmbF9bzAv3bYnZPpLkjEw+e+cPWfb1b+FwuSjetYM//NdtbH/jFTW3isiwNKzDSHD31XNW0tRVVfLW//wWgIu+8GVGjimMdmk9Spg1k/yHHwaHA/err1J+79DefwR8U2VXfGUqV39jFvFJTipL6nn+ns18tK4ET9vQDltdMQyDOR//JDfd9zC5E6fQ0tjAW//zW56449/Y+dY/8Ho8VpcoIhI1hjkEfoq53W7S0tKora0lNTU1LK9Z31zPz556nOztc6jLP8lt//kZkuOTMU2Tv9z7Q44VbSVn4mS+9OOfR2Xr9/6ofeUVSv/ruwCM+Mb/y8hbb8Vw9n0Ex+P1sK1iG6cbTzMycSTzR83HbrP+vTbUtrDuqb2U7PH1jySlu5i/fCzTL87F4QxffYPl/Xs9Hnas+zsf/uVZ6qt97zkjN4/Fn7mByRcuxemKj9i9B8tnYBW9/+H9/kGfQX1zPd9///ucqDtBfko+91x0D8nx4dvYs68/v/sVRh555BF+/vOfU1ZWxpw5c/jlL3/JokWLur3++eef56677uLYsWNMmjSJ++67j09+8pN9vl+4w8iX/vYldp3ZxYKST3DBiavZnf0e747/EzNHzGRVwv/D2sd+id3p5Kv3PsyI/IIB3y+Szjz5JBX33geAa9JEsu+6i6Qefi8C3jz+JvduupfyxvLgY9mJ2dy56E6WjV0WsXr7yvSa7N5QypbXjtFQ49tXJTEtjvlXjWXKhTndrn7qq8H4/ttaW9ix9nU+fOl5mty1AMQlJDD5wouZfunHyJ86A8MWvsHMwfgZRJPe//B+/6DPIPCz8FwzR8zkmWufCcs9IhZGnnvuOW666SYeffRRFi9ezEMPPcTzzz/P/v37GTVq1HnXv//++1x66aWsWbOGa6+9lqeffpr77ruPbdu2MXPmzLC+mb7o/OEvPfpZZpVdxrbRa9mc/zcmnkjmwn0jsLfDZV/5Gguv++yA7hUtNS++RMXPfoanuhqA1OuuY9R//SfOLn4/wPcHcOX6lZic/Vtv4Fst9ODlDw6aP4ieNi973y9l6xvHqa/2hRKbzWD0lHTGzxvFuDlZJKW5QnrNwf7+W5ub2P76K+xY93fcpzv+kkwdOYpx8y4gf9oM8qfNJDkjs9/3GOyfQaTp/Q/v9w/6DLoLIgHhCiQRCyOLFy/mggsu4Fe/+hUAXq+XgoIC/v3f/50777zzvOtvuOEGGhoa+Nvf/hZ87MILL2Tu3Lk8+uijYX0zvalvrmfJc0uCv/7Ywa8w6fRC9qf9kczTJ0lt9P1re+SkiVy98rvYHE5wdBoib+2hodKwgTOhf9e2NUJ3vw2GAc7EXq/11rppeOwJmv7yVzBNjIQEnAvnEzd/Ds75c3FMmoBhs+ExPXzxH1/hdHNlt+WNShjJMx//v9iNTkOVcUkd/7+9Gbw99DSEcq0z0fceAdpbwNve5WWedi9Hi5o4uKGC2rKmjm8YkJ4TT0aei/SceNJz40nLceFKT8YIDLV6WsHj6w/q9/sPcMRDF6/bpbOubfNd3+21LrA5zrrW9HopP3SIwx+8z7GtW2hrPnvr/NTsHEZOmEjqyCxSR2X7v0bhjO/036w9Duz+USRvO7S39PEzGMUzH/9D158B+F7THud/XY/v97k7na81vdDWFJ5rbQ7f5wa+PxNtPWwk1+laj7edL7762d7f/zV/9r3/nv4s2+xD5u+IwLUeh4svvvo5Tjd1v1dR8M+Aq9Pft21Nvt+T7lj8d0Qo13pMD19c+1VON3W/iu2svwecCb7fEwjxz31k/47o07X+P/ed1bfXc+2rn+n++X4bb9g44CmbiISR1tZWEhMTeeGFF7j++uuDj998883U1NTw8ssvn/ecMWPGsHLlSu64447gY6tXr+all17io48+6vI+LS0ttHTa8tztdlNQUDDgMPLtt77N2yVv+35hwqe3XU9mZQmmx/eXUlOchx0Tajkwpg7PEJ0yHH/K5F//7mHSqbMfr4+H0kxoijNockGTC5qdYJ6zdcqgbyACDGMkdscc7I452OzjurzGNNvBrMc06zDNeqAJ0/QAHqAdTA8d73bwv2vT9GJ63JieekxvPXh7+CGNDQw7GA4M7L7/j+H/S9rm+/9B1u6dIyKDx/vTjrC/oGOvpysKruDhjz08oNfsaxjpeg/0blRWVuLxeMjOzj7r8ezsbPbt29flc8rKyrq8vqysrNv7rFmzhh/96EehlNYnJ+pOBP+/zYS0yv2Ynkba7bBjQjV7Cutodwz+H0w9OZJr8IOb7Yw/BdOLTWYUm0wtMUluhsmlMBR+8PauAlgLrKUlLg13aiF1yaNpSBpNXfJomhNGYhgOMNIxSLe41sgwvc1420sxPRV4vTWYnmpMbw2YTYDX9y9Ysy0mfrdFJDpGulPYT0cY6fwzM9JCCiPRsmrVKlauXBn8dWBkZKDyU/I5WHMQAK8NDo+JI6MuiQ+mHqcy1R28bmn2En564Y+H5BDs2df6hlXNdg/tBw/hPX2ao2X7+MuuZ0hohfjWc+dKO3w8fxnZCZ16TuydGka9np6Ha6N4bSKQEXywETiIx3uYViOeFo+TVo+T1nYb7V4bXtPA3drIwdqjGIHRgrN0/HpcSiFJjiTOY9g6LjPN7n8vQr7W6Bhe7vO18WAWgJkf/JbH20q7pxWPt+PLa7b7RlZMD17TQ6unhZqWGnoLpmlxacTZ4rqpIfg/HTV3W+/gurbV20ptS0331/qludJ9738wvDfM7n+7Qry21dvWt/cfl0acvXM/Vg+vCx3//Q6Ba1u9rdS21vbwQj7BPwOD4r0F/2fA19a21dLaxTTPqfQjZ/06PyX/vGsiJaQwkpWVhd1up7y8/KzHy8vLycnJ6fI5OTk5IV0P4HK5cLlCa0rsi3suuuesnpH3pnU9TXT/5Q92PU+WmNL3m4VyLVG4Nst32nC218PqP6+norHivMYt8DVvZSdmc+fnfhGTy9s8Xg/L/7y81/f/xufuicn3D6F8Br+Pyc9A7394v3/QZ3Bu/2R37rnonihU4xPSOsG4uDgWLFjAunXrgo95vV7WrVvHkiVdv7ElS5acdT3A2rVru70+kpLjk5k5oucVPDNHzAzrGuvBxm6zc+ciX6Oxcda/pjp+/b1F34vJP4Cg9w/6DPT+h/f7B30Gg/FnYcibFqxcuZLHH3+cp556ir179/LNb36ThoYGVqxYAcBNN93EqlWrgtfffvvtvPHGGzzwwAPs27ePH/7wh2zZsoXbbrstfO8iBM9c+0y3vwnhXFs9mC0bu4wHL3+QUYlnL/3NTsyO+eVsoPcP+gz0/of3+wd9BoPtZ2G/Nj371a9+Fdz0bO7cuTz88MMsXrwYgMsvv5zCwkKefPLJ4PXPP/88P/jBD4Kbnv3sZz+zdNMziPyuc0PBcN95cLi/f9BnoPc/vN8/6DMY0juwRlskwoiIiIhEVl9/fg/rg/JERETEegojIiIiYimFEREREbGUwoiIiIhYSmFERERELKUwIiIiIpZSGBERERFLKYyIiIiIpRRGRERExFIhndprlcAmsW632+JKREREpK8CP7d72+x9SISRuro6AAoKCiyuREREREJVV1dHWlpat98fEmfTeL1eSktLSUlJwTCM3p/QR263m4KCAkpKSnTmTQTpc44efdbRoc85OvQ5R0ckP2fTNKmrqyMvLw+brfvOkCExMmKz2cjPz4/Y66empuo/9CjQ5xw9+qyjQ59zdOhzjo5Ifc49jYgEqIFVRERELKUwIiIiIpYa1mHE5XKxevVqXC6X1aXENH3O0aPPOjr0OUeHPufoGAyf85BoYBUREZHYNaxHRkRERMR6CiMiIiJiKYURERERsZTCiIiIiFhqWIeRRx55hMLCQuLj41m8eDGbNm2yuqSYsmbNGi644AJSUlIYNWoU119/Pfv377e6rJh37733YhgGd9xxh9WlxJyTJ0/yla98hREjRpCQkMCsWbPYsmWL1WXFHI/Hw1133cW4ceNISEhgwoQJ/OQnP+n1fBPp2T//+U+uu+468vLyMAyDl1566azvm6bJ3XffTW5uLgkJCSxbtoyDBw9GpbZhG0aee+45Vq5cyerVq9m2bRtz5sxh+fLlVFRUWF1azHjnnXe49dZb+eCDD1i7di1tbW1cddVVNDQ0WF1azNq8eTO//e1vmT17ttWlxJzq6mqWLl2K0+nk9ddfZ8+ePTzwwANkZGRYXVrMue+++/jNb37Dr371K/bu3ct9993Hz372M375y19aXdqQ1tDQwJw5c3jkkUe6/P7PfvYzHn74YR599FE+/PBDkpKSWL58Oc3NzZEvzhymFi1aZN56663BX3s8HjMvL89cs2aNhVXFtoqKChMw33nnHatLiUl1dXXmpEmTzLVr15qXXXaZefvtt1tdUkz53ve+Z1588cVWlzEsXHPNNebXvva1sx777Gc/a954440WVRR7APPFF18M/trr9Zo5OTnmz3/+8+BjNTU1psvlMp955pmI1zMsR0ZaW1vZunUry5YtCz5ms9lYtmwZGzdutLCy2FZbWwtAZmamxZXEpltvvZVrrrnmrP+uJXz++te/snDhQr7whS8watQo5s2bx+OPP251WTHpoosuYt26dRw4cACAjz76iA0bNnD11VdbXFnsOnr0KGVlZWf9/ZGWlsbixYuj8nNxSByUF26VlZV4PB6ys7PPejw7O5t9+/ZZVFVs83q93HHHHSxdupSZM2daXU7MefbZZ9m2bRubN2+2upSYdeTIEX7zm9+wcuVKvv/977N582a+/e1vExcXx80332x1eTHlzjvvxO12M3XqVOx2Ox6Ph5/+9KfceOONVpcWs8rKygC6/LkY+F4kDcswItF36623smvXLjZs2GB1KTGnpKSE22+/nbVr1xIfH291OTHL6/WycOFC7rnnHgDmzZvHrl27ePTRRxVGwuxPf/oTf/zjH3n66aeZMWMGRUVF3HHHHeTl5emzjlHDcpomKysLu91OeXn5WY+Xl5eTk5NjUVWx67bbbuNvf/sbb7/9Nvn5+VaXE3O2bt1KRUUF8+fPx+Fw4HA4eOedd3j44YdxOBx4PB6rS4wJubm5TJ8+/azHpk2bRnFxsUUVxa7/+q//4s477+SLX/wis2bN4qtf/Srf+c53WLNmjdWlxazAzz6rfi4OyzASFxfHggULWLduXfAxr9fLunXrWLJkiYWVxRbTNLntttt48cUXeeuttxg3bpzVJcWkK6+8kp07d1JUVBT8WrhwITfeeCNFRUXY7XarS4wJS5cuPW9p+oEDBxg7dqxFFcWuxsZGbLazfzzZ7Xa8Xq9FFcW+cePGkZOTc9bPRbfbzYcffhiVn4vDdppm5cqV3HzzzSxcuJBFixbx0EMP0dDQwIoVK6wuLWbceuutPP3007z88sukpKQE5x3T0tJISEiwuLrYkZKScl4fTlJSEiNGjFB/Thh95zvf4aKLLuKee+7hX/7lX9i0aROPPfYYjz32mNWlxZzrrruOn/70p4wZM4YZM2awfft2HnzwQb72ta9ZXdqQVl9fz6FDh4K/Pnr0KEVFRWRmZjJmzBjuuOMO/s//+T9MmjSJcePGcdddd5GXl8f1118f+eIivl5nEPvlL39pjhkzxoyLizMXLVpkfvDBB1aXFFOALr/+53/+x+rSYp6W9kbGK6+8Ys6cOdN0uVzm1KlTzccee8zqkmKS2+02b7/9dnPMmDFmfHy8OX78ePO///u/zZaWFqtLG9LefvvtLv9Ovvnmm03T9C3vveuuu8zs7GzT5XKZV155pbl///6o1GaYpra0ExEREesMy54RERERGTwURkRERMRSCiMiIiJiKYURERERsZTCiIiIiFhKYUREREQspTAiIiIillIYEREREUspjIiIiIilFEZERETEUgojIiIiYimFEREREbHU/w9sUbX4trA9GwAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import numpy as np\n", + "from matplotlib import pyplot as plt\n", + "\n", + "x = np.linspace(0, 2*2.0*np.pi, 1000)\n", + "y = np.sin(x)\n", + "\n", + "\n", + "grid_bin = np.fromfile(\"../out/grid.bin\", dtype=np.float64)\n", + "plt.plot(grid_bin, np.zeros(len(grid_bin)))\n", + "grid = np.loadtxt(\"../out/grid.dat\")\n", + "plt.plot(grid, np.zeros(len(grid)), linestyle='--')\n", + "knots = np.loadtxt(\"../out/knotpoints.dat\")\n", + "plt.plot(knots, np.zeros(len(knots)), marker='o')\n", + "bspline0 = np.loadtxt(\"../out/bspline0.dat\")\n", + "plt.plot(grid, bspline0)\n", + "bspline1 = np.loadtxt(\"../out/bspline1.dat\")\n", + "plt.plot(grid, bspline1)\n", + "bspline2 = np.loadtxt(\"../out/bspline2.dat\")\n", + "plt.plot(grid, bspline2)\n", + "bspline2 = np.loadtxt(\"../out/bspline3.dat\")\n", + "plt.plot(grid, bspline3)\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8cda5f82-13ac-4b95-aed4-f999a8dbd185", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ce5642b3-6387-45f7-aaaf-dfb9085b3d49", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c4866585-9cb8-4eb8-a8c6-0489f831c55d", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "59ee4447-5513-48f4-88fc-a20b8430e15c", + "metadata": {}, "outputs": [], "source": [] } diff --git a/py_notebook/EigsolGPU_test.ipynb b/py_notebook/EigsolGPU_test.ipynb index 8cdea9c..1692066 100644 --- a/py_notebook/EigsolGPU_test.ipynb +++ b/py_notebook/EigsolGPU_test.ipynb @@ -2,23 +2,13 @@ "cells": [ { "cell_type": "code", - "execution_count": 4, + "execution_count": 19, "id": "1d08e1d3-0f62-467e-8217-9eaf458afeb4", "metadata": {}, "outputs": [ { "data": { - "text/plain": [ - "[]" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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n/9Z06ZNU3Fxsc466yz98Y9/dLsszzFNU9dff73mzp2r4uJinXrqqfrBD35wwvub4Pj+8Ic/6NJLL9XMmTNlGIZ+8YtfjPi+bdtas2aNZsyYoeLiYtXX1+vPf/5zRmrL2zCyefNmNTU1ae3atdq1a5cWLlyoJUuW6MCBA26X5hlPP/20Vq5cqeeee05bt27V4OCgLr74YvX19bldmme98MIL+tGPfqSzzz7b7VI856OPPtL555+vgoIC/eY3v9Frr72mO+64Q1OmTHG7NM+55ZZbdM899+juu+/W66+/rltuuUW33nqr7rrrLrdLy2l9fX1auHChNmzYMOr3b731Vt15551qaWnR888/rwkTJmjJkiU6cuRI+ouz89TixYvtlStXxr42TdOeOXOm3dzc7GJV3nbgwAFbkv3000+7XYon9fT02Keffrq9detW+4ILLrBXrVrldkmecs0119h/8zd/43YZeeGSSy6xv/GNb4x47stf/rJ9xRVXuFSR90iyH3300djXlmXZFRUV9m233RZ77tChQ3YwGLQffPDBtNeTl52RcDisnTt3qr6+Pvacz+dTfX29tm/f7mJl3tbV1SVJmjp1qsuVeNPKlSt1ySWXjPi9Rur88pe/VE1Njf7pn/5J5eXlOuecc7Rx40a3y/Kk8847T62trXrzzTclSS+99JKeeeYZ/e3f/q3LlXnXO++8o/b29hH/fpSVlam2tjYjn4s5caO8VOvs7JRpmgqFQiOeD4VCeuONN1yqytssy9JVV12l888/XwsWLHC7HM956KGHtGvXLr3wwgtul+JZb7/9tu655x41NTXpO9/5jl544QV9+9vfVmFhoZYvX+52eZ5y7bXXqru7W/PmzZPf75dpmrrxxht1xRVXuF2aZ7W3t0vSqJ+LzvfSKS/DCDJv5cqVeuWVV/TMM8+4XYrntLW1adWqVdq6dauKiorcLsezLMtSTU2NbrrpJknSOeeco1deeUUtLS2EkRT77//+b/3sZz/TAw88oE9+8pPavXu3rrrqKs2cOZP32qPycphm+vTp8vv96ujoGPF8R0eHKioqXKrKuxobG/XrX/9aTz31lGbPnu12OZ6zc+dOHThwQJ/61KcUCAQUCAT09NNP684771QgEJBpmm6X6AkzZszQ/PnzRzx35plnau/evS5V5F3//u//rmuvvVaXX365zjrrLH3961/X1VdfrebmZrdL8yzns8+tz8W8DCOFhYVatGiRWltbY89ZlqXW1lbV1dW5WJm32LatxsZGPfroo/r973+vuXPnul2SJ33+85/Xyy+/rN27d8ceNTU1uuKKK7R79275/X63S/SE888//5il6W+++aZOPvlklyryrv7+fvl8Iz+e/H6/LMtyqSLvmzt3rioqKkZ8LnZ3d+v555/PyOdi3g7TNDU1afny5aqpqdHixYu1fv169fX1qaGhwe3SPGPlypV64IEH9Nhjj6m0tDQ27lhWVqbi4mKXq/OO0tLSY+bhTJgwQdOmTWN+TgpdffXVOu+883TTTTfpq1/9qnbs2KF7771X9957r9ulec6ll16qG2+8UXPmzNEnP/lJvfjii1q3bp2+8Y1vuF1aTuvt7dVbb70V+/qdd97R7t27NXXqVM2ZM0dXXXWVbrjhBp1++umaO3eurr/+es2cOVOXXXZZ+otL+3qdLHbXXXfZc+bMsQsLC+3Fixfbzz33nNsleYqkUR//9V//5XZpnsfS3vT41a9+ZS9YsMAOBoP2vHnz7Hvvvdftkjypu7vbXrVqlT1nzhy7qKjIPuWUU+zrrrvOHhgYcLu0nPbUU0+N+m/y8uXLbduOLO+9/vrr7VAoZAeDQfvzn/+8vWfPnozUZtg2W9oBAAD35OWcEQAAkD0IIwAAwFWEEQAA4CrCCAAAcBVhBAAAuIowAgAAXEUYAQAAriKMAAAAVxFGAACAqwgjAADAVYQRAADgKsIIAABw1f8DG70qd78mvu8AAAAASUVORK5CYII=", + "image/png": "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", "text/plain": [ "
" ] @@ -40,9 +30,38 @@ "grid = np.loadtxt(\"../out/grid.dat\")\n", "plt.plot(grid, np.zeros(len(grid)), linestyle='--')\n", "knots = np.loadtxt(\"../out/knotpoints.dat\")\n", - "plt.plot(knots, np.zeros(len(knots)), marker='o')\n", - "bspline3 = np.loadtxt(\"../out/Bspline3.dat\")\n", - "plt.plot(grid, bspline3)\n" + "order_k = 4\n", + "knots_y = np.zeros(len(knots))\n", + "y_shift = order_k-1\n", + "for i in range(order_k-1):\n", + " knots_y[i] = y_shift\n", + " y_shift = y_shift - 1\n", + "\n", + "y_shift = order_k-1\n", + "for i in range(order_k-1):\n", + " knots_y[len(knots)-1-i] = y_shift\n", + " y_shift = y_shift - 1\n", + " \n", + "plt.plot(knots, knots_y, marker='o')\n", + "\n", + "\n", + "#bspline0 = np.loadtxt(\"../out/bspline0.dat\")\n", + "#plt.plot(grid, bspline0)\n", + "#bspline1 = np.loadtxt(\"../out/bspline1.dat\")\n", + "#plt.plot(grid, bspline1)\n", + "#bspline2 = np.loadtxt(\"../out/bspline2.dat\")\n", + "#plt.plot(grid, bspline2)\n", + "#bspline3 = np.loadtxt(\"../out/bspline3.dat\")\n", + "#plt.plot(grid, bspline3)\n", + "\n", + "bsplines = np.loadtxt(\"../out/bsplines.dat\")\n", + "bspl_shape = bsplines.shape\n", + "num_rows = bspl_shape[0]\n", + "num_cols = bspl_shape[1]\n", + "for i in range(num_cols):\n", + " bspl = bsplines[:, i]\n", + " plt.plot(grid, bspl)\n", + "\n" ] }, { @@ -68,6 +87,14 @@ "metadata": {}, "outputs": [], "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "59ee4447-5513-48f4-88fc-a20b8430e15c", + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { diff --git a/src/base/base_memory.c b/src/base/base_memory.c index e92d4a1..1482517 100644 --- a/src/base/base_memory.c +++ b/src/base/base_memory.c @@ -58,9 +58,6 @@ m_make_arena() { return result; } -// NOTE(anton): rjf calls this "arena push no zero", as opposed to pushing a zeroed array. -// Not sure why we would make this differentiation, maybe not important. - root_function void* m_arena_push(Arena *arena, U64 size) { void *result = 0; diff --git a/src/base/base_memory.h b/src/base/base_memory.h index 907a14c..b3be5ab 100644 --- a/src/base/base_memory.h +++ b/src/base/base_memory.h @@ -47,9 +47,8 @@ root_function void m_arena_align(Arena *arena, U64 pow2_alignment); root_function void* m_arena_push_zero(Arena *arena, U64 size); root_function void m_arena_clear(Arena *arena); -#define PushArray(arena, type, count) (type *)m_arena_push((arena), sizeof(type)*(count)) -#define PushArrayZero(arena, type, count) (type *)m_arena_push_zero((arena), sizeof(type)*(count)) - +#define PushArrayNoZero(arena, type, count) (type *)m_arena_push((arena), sizeof(type)*(count)) +#define PushArray(arena, type, count) (type *)m_arena_push_zero((arena), sizeof(type)*(count)) //~ temp arena root_function ArenaTemp m_arena_temp_begin(Arena *arena); diff --git a/src/base/base_strings.c b/src/base/base_strings.c index 5a8ea3b..da79cad 100644 --- a/src/base/base_strings.c +++ b/src/base/base_strings.c @@ -87,7 +87,7 @@ str8_list_push_node_front(String8List *list, String8Node *n) { // Wrapper that pushes the memory for a node onto the arena, and then puts the node in the linked list (in the back). root_function void str8_list_push(Arena *arena, String8List *list, String8 string) { - String8Node *n = PushArrayZero(arena, String8Node, 1); + String8Node *n = PushArray(arena, String8Node, 1); n->string = string; str8_list_push_node(list, n); } @@ -95,7 +95,7 @@ str8_list_push(Arena *arena, String8List *list, String8 string) { // Wrapper that pushes the memory for a node onto the arena, and then puts the node in the linked list (in the front). root_function void str8_list_push_front(Arena *arena, String8List *list, String8 string) { - String8Node *n = PushArrayZero(arena, String8Node, 1); + String8Node *n = PushArray(arena, String8Node, 1); n->string = string; str8_list_push_node_front(list, n); } diff --git a/src/main.c b/src/main.c index d515771..fd59aeb 100644 --- a/src/main.c +++ b/src/main.c @@ -19,6 +19,7 @@ #define grid_file_path_bin "D:\\dev\\eigsol_gpu\\out\\grid.bin" #define grid_file_path "D:\\dev\\eigsol_gpu\\out\\grid.dat" #define knotpoints_file_path "D:\\dev\\eigsol_gpu\\out\\knotpoints.dat" +#define bspline_array_file_path "D:\\dev\\eigsol_gpu\\out\\bsplines.dat" global U32 enable_logging = 1; @@ -49,11 +50,13 @@ struct BSplineCtx U32 num_knotpoints; U32 num_bsplines; U32 num_phys_points; + F64 *bsplines; }; //~ Globals +global Grid g_grid = {0}; global BSplineCtx g_bspline_ctx = {0}; //~ Functions @@ -94,39 +97,57 @@ write_array_binary_F64(String8 path_to_file, F64 *values, U32 array_size) } function void +write_string_list_to_file(Arena *arena, String8 path, String8List *list) +{ + + OS_Handle file_handle = OS_file_open(OS_AccessFlag_Write | OS_AccessFlag_CreateNew, + path); + OS_file_write(arena, file_handle, 0, *list, 0); + + U32 debug = 1; + if(debug) + { + String8List log_list = {0}; + str8_list_push(arena, &log_list, str8_lit("Wrote array to")); + str8_list_push(arena, &log_list, path); + StringJoin join = {0}; + join.sep = str8_lit(" "); + join.post = str8_lit("\n"); + String8 log_msg = str8_list_join(arena, log_list, &join); + OutputDebugString(log_msg.str); + } + OS_file_close(file_handle); +} + + + function void write_array_F64(String8 path_to_file, F64 *values, U32 array_size, char* fmt) { - OS_Handle file_handle = OS_file_open(OS_AccessFlag_Write | OS_AccessFlag_CreateNew, - path_to_file); - { ArenaTemp scratch = scratch_get(0, 0); String8List list = {0}; for(U32 i = 0; i < array_size; i++) { str8_list_pushf(scratch.arena, &list, fmt, values[i]); } - OS_file_write(scratch.arena, file_handle, 0, list, 0); - - String8List log_list = {0}; - str8_list_push(scratch.arena, &log_list, str8_lit("Wrote array to")); - str8_list_push(scratch.arena, &log_list, path_to_file); - StringJoin join = {0}; - join.sep = str8_lit(" "); - join.post = str8_lit("\n"); - String8 log_msg = str8_list_join(scratch.arena, log_list, &join); - OutputDebugString(log_msg.str); - } - OS_file_close(file_handle); - + write_string_list_to_file(scratch.arena, path_to_file, &list); } -function F64 bspline_recursion(F64 x, U32 k, U32 i) + function F64 +bspline_recursion(F64 x, U32 k, U32 i) { F64 *t = g_bspline_ctx.knotpoints; if(k == 1) { - if(i < g_bspline_ctx.num_bsplines && x >= t[i] && x < t[i+1]) + if(i == g_bspline_ctx.num_bsplines-1 && x == g_grid.end) + { + // TODO(anton): + // This is like a hack to get the last bspline to be 1 at the last point. + // I dont get how the Cox-de Boor recursion formula can force the last bspline + // to unity at the last point, actually. I have to check this. + return 1.0; + } + else if(i < g_bspline_ctx.num_bsplines && (x >= t[i] && x < t[i+1])) { return 1.0; } else { @@ -135,8 +156,15 @@ function F64 bspline_recursion(F64 x, U32 k, U32 i) } else { - F64 term1 = (x - t[i])/(t[i+k-1]-t[i])*bspline_recursion(x, k-1, i); - F64 term2 = (t[i+k]-x)/(t[i+k]-t[i+1])*bspline_recursion(x, k-1, i+1); + F64 recursion1 = bspline_recursion(x, k-1, i); + F64 term1_enum = (x - t[i]); + F64 term1_denom = (t[i+k-1] - t[i]); + F64 term1 = recursion1 > 0.0 ? (term1_enum/term1_denom)*recursion1 : 0.0; + + F64 recursion2 = bspline_recursion(x, k-1, i+1); + F64 term2_enum = (t[i+k] - x); + F64 term2_denom = (t[i+k] - t[i+1]); + F64 term2 = recursion2 > 0.0 ? (term2_enum/term2_denom)*recursion2 : 0.0; return term1 + term2; } @@ -145,11 +173,148 @@ function F64 bspline_recursion(F64 x, U32 k, U32 i) } -function F64 get_bspline_F64(F64 x_coord, U32 index) + function F64 +get_bspline_F64(F64 x_coord, U32 index) { U32 k = g_bspline_ctx.order; F64 out = bspline_recursion(x_coord, k, index); return out; +} + + function void +set_up_grid(Arena *arena) +{ + g_grid.start = 0.0; + g_grid.end = 10.0; + g_grid.num_steps = 100; + + g_grid.points = PushArray(arena, F64, g_grid.num_steps); + F64 step_size = (g_grid.end-g_grid.start)/(F64)g_grid.num_steps; + g_grid.points[0] = g_grid.start; + g_grid.points[g_grid.num_steps-1] = g_grid.end; + for(U32 i = 1; i < g_grid.num_steps-1; i++) + { + g_grid.points[i] = g_grid.points[i-1] + step_size; + } + +} + + + function void +set_up_bspline_context(Arena* arena) +{ + // Create knotpoint sequence. + U32 k = 4; + U32 N = 14; + g_bspline_ctx.order = k; + g_bspline_ctx.num_knotpoints = N; + g_bspline_ctx.num_bsplines = N-k; + g_bspline_ctx.num_phys_points = N-(2*k)+2; // Remove k points at each end, and then add back the first and last points. + g_bspline_ctx.arena = arena; + g_bspline_ctx.knotpoints = PushArray(arena, F64, g_bspline_ctx.num_knotpoints); + // Set up physical points; + F64 delta = (g_grid.end-g_grid.start)/(g_bspline_ctx.num_phys_points-1); + // Set ghost points including first physical + U32 phys_point_last_index = g_bspline_ctx.num_phys_points + k-1; + for(U32 i = 0; i < k; i++) + { + g_bspline_ctx.knotpoints[i] = g_grid.start; + } + for(U32 i = k; i < phys_point_last_index; i++) + { + g_bspline_ctx.knotpoints[i] = g_bspline_ctx.knotpoints[i-1] + delta; + } + // Set the last points + F64 last_physical = g_grid.end; + for(U32 i = phys_point_last_index; i < g_bspline_ctx.num_knotpoints; i++) + { + g_bspline_ctx.knotpoints[i] = last_physical; + } +} + + + function void +write_bsplines_to_matrix_F64(Arena *arena) +{ + + U64 num_bsplines = g_bspline_ctx.num_bsplines; + U64 k = g_bspline_ctx.order; + F64 *t = g_bspline_ctx.knotpoints; + U32 grid_size = g_grid.num_steps; + + // For sanity check we make the first 4 bsplines by hand. + { + F64 *bspl0 = PushArray(arena, F64, grid_size); + F64 *bspl1 = PushArray(arena, F64, grid_size); + F64 *bspl2 = PushArray(arena, F64, grid_size); + F64 *bspl3 = PushArray(arena, F64, grid_size); + F64 *bspl9 = PushArray(arena, F64, grid_size); + for(U32 i = 0; i < grid_size; i++) + { + F64 x = g_grid.points[i]; + bspl0[i] = get_bspline_F64(x, 0); + bspl1[i] = get_bspline_F64(x, 1); + bspl2[i] = get_bspline_F64(x, 2); + bspl3[i] = get_bspline_F64(x, 3); + bspl9[i] = get_bspline_F64(x, 9); + } + + F64 test = get_bspline_F64(g_grid.points[grid_size-1], 9); + + write_array_F64(str8_lit("D:\\dev\\eigsol_gpu\\out\\bspline0.dat"), bspl0, grid_size, "%13.6e\n"); + write_array_F64(str8_lit("D:\\dev\\eigsol_gpu\\out\\bspline1.dat"), bspl1, grid_size, "%13.6e\n"); + write_array_F64(str8_lit("D:\\dev\\eigsol_gpu\\out\\bspline2.dat"), bspl2, grid_size, "%13.6e\n"); + write_array_F64(str8_lit("D:\\dev\\eigsol_gpu\\out\\bspline3.dat"), bspl3, grid_size, "%13.6e\n"); + write_array_F64(str8_lit("D:\\dev\\eigsol_gpu\\out\\bspline9.dat"), bspl9, grid_size, "%13.6e\n"); + } + + g_bspline_ctx.bsplines = PushArray(arena, F64, grid_size*num_bsplines); + for(U32 i = 0; i < g_grid.num_steps; i++) + { + for(U32 j = 0; j < num_bsplines; j++) + { + U32 index = g_grid.num_steps * i + j; + g_bspline_ctx.bsplines[index] = get_bspline_F64(g_grid.points[i], j); + } + } + + ArenaTemp scratch = scratch_get(0, 0); + String8 bspline_filename = str8_lit("D:\\dev\\eigsol_gpu\\out\\Bsplines.dat"); + + // First line is just the bspline indices. + String8List first_line_list = {0}; + StringJoin join = {0}; + join.sep = str8_lit("\t\t"); + for(U32 i = 0; i < num_bsplines; i++) + { + str8_list_pushf(scratch.arena, &first_line_list, "%i", i); + } + String8 first_line = str8_list_join(scratch.arena, first_line_list, &join); + + String8List bspline_array_list = {0}; + for(U32 i = 0; i < g_grid.num_steps; i++) + { + String8List row = {0}; + for(U32 j = 0; j < num_bsplines; j++) + { + U32 index = g_grid.num_steps * i + j; + F64 bspline_value = g_bspline_ctx.bsplines[index]; + str8_list_pushf(scratch.arena, &row, "%13.6e", bspline_value); + } + StringJoin bspl_join = {0}; + bspl_join.sep = str8_lit(" "); + bspl_join.post = str8_lit("\n"); + String8 row_joined = str8_list_join(scratch.arena, row, &bspl_join); + str8_list_push(scratch.arena, &bspline_array_list, row_joined); + } + + + write_string_list_to_file(scratch.arena, str8_lit(bspline_array_file_path), &bspline_array_list); + + + + + } @@ -161,69 +326,17 @@ void EntryPoint() Arena *arena = m_make_arena(); - Grid grid = {0}; - grid.start = 0.0; - grid.end = 10.0; - grid.num_steps = 1000; + set_up_grid(arena); - grid.points = PushArrayZero(arena, F64, grid.num_steps); - F64 step_size = (grid.end-grid.start)/(F64)grid.num_steps; - grid.points[0] = grid.start; - grid.points[grid.num_steps-1] = grid.end; - for(U32 i = 1; i < grid.num_steps-1; i++) - { - grid.points[i] = grid.points[i-1] + step_size; - } + write_array_binary_F64(str8_lit(grid_file_path_bin), g_grid.points, g_grid.num_steps); + write_array_F64(str8_lit(grid_file_path), g_grid.points, g_grid.num_steps, "%13.6e\n"); - write_array_binary_F64(str8_lit(grid_file_path_bin), grid.points, grid.num_steps); - write_array_F64(str8_lit(grid_file_path), grid.points, grid.num_steps, "%13.6e\n"); + set_up_bspline_context(arena); - // Create knotpoint sequence. - U32 k = 4; - U32 N = 35; - g_bspline_ctx.order = k; - g_bspline_ctx.num_knotpoints = N; - g_bspline_ctx.num_bsplines = N-k; - g_bspline_ctx.num_phys_points = N-(2*k)+2; // Remove k points at each end, and then add back the first and last points. - g_bspline_ctx.arena = arena; - g_bspline_ctx.knotpoints = (F64*)PushArrayZero(arena, F64, g_bspline_ctx.num_knotpoints); - // Set up physical points; - F64 delta = (grid.end-grid.start)/(g_bspline_ctx.num_phys_points-1); - // Set ghost points including first physical - U32 phys_point_index = g_bspline_ctx.num_phys_points + k-1; - for(U32 i = 0; i < k; i++) - { - g_bspline_ctx.knotpoints[i] = grid.start; - } - for(U32 i = k; i < phys_point_index; i++) - { - g_bspline_ctx.knotpoints[i] = g_bspline_ctx.knotpoints[i-1] + delta; - } - // Set the last points - F64 last_physical = grid.end; - for(U32 i = phys_point_index; i < g_bspline_ctx.num_knotpoints; i++) - { - g_bspline_ctx.knotpoints[i] = last_physical; - } write_array_F64(str8_lit(knotpoints_file_path), g_bspline_ctx.knotpoints, g_bspline_ctx.num_knotpoints, "%13.6e\n"); - - String8 Bspline3_fn = str8_lit("D:\\dev\\eigsol_gpu\\out\\Bspline3.dat"); - F64 *Bspline3 = (F64 *)PushArrayZero(arena, F64, grid.num_steps); - for(U32 i = 0; i < grid.num_steps; i++) - { - Bspline3[i] = get_bspline_F64(grid.points[i], 3); - } - - write_array_F64(Bspline3_fn, Bspline3, grid.num_steps, "%13.6e\n"); - - - - - - - + write_bsplines_to_matrix_F64(arena); } diff --git a/src/os/win32/os_core_win32.c b/src/os/win32/os_core_win32.c index 070e8bd..f295ceb 100644 --- a/src/os/win32/os_core_win32.c +++ b/src/os/win32/os_core_win32.c @@ -289,7 +289,7 @@ OS_to_string_list_F64(Arena *arena, F64 *values, U32 values_size, String8 format { String8 value_string = {0}; value_string.size = character_length; - value_string.str = PushArrayZero(arena, U8, character_length); + value_string.str = PushArray(arena, U8, character_length); StringCchPrintfA(value_string.str, character_length, "%e\n", values[i]); str8_list_push(arena, &out, value_string); } diff --git a/timeBuild.ctm b/timeBuild.ctm index 99b2bed..9288a67 100644 Binary files a/timeBuild.ctm and b/timeBuild.ctm differ