diff --git a/packages/amesos2/test/solvers/CMakeLists.txt b/packages/amesos2/test/solvers/CMakeLists.txt index 2dedcd5cbb16..4ea14abe3a4b 100644 --- a/packages/amesos2/test/solvers/CMakeLists.txt +++ b/packages/amesos2/test/solvers/CMakeLists.txt @@ -178,7 +178,7 @@ IF (${PACKAGE_NAME}_ENABLE_Cholmod) TRIBITS_COPY_FILES_TO_BINARY_DIR(SolverTestCholmodFiles SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR} - SOURCE_FILES cholmod_test.xml + SOURCE_FILES cholmod_test.xml cholmod_int_test.xml EXEDEPS Solver_Test ) @@ -191,6 +191,15 @@ IF (${PACKAGE_NAME}_ENABLE_Cholmod) COMM serial mpi ) + TRIBITS_ADD_TEST( + Solver_Test + NAME Cholmod_Int_Solver_Test + ARGS "--xml-params=cholmod_int_test.xml --filedir=${CMAKE_CURRENT_BINARY_DIR}/../matrices/ --multiple-solves --refactor" + STANDARD_PASS_OUTPUT + NUM_MPI_PROCS 1 + COMM serial mpi + ) + IF (KokkosKernels_ENABLE_SUPERNODAL_SPTRSV AND KokkosKernels_ENABLE_TPL_CHOLMOD) TRIBITS_COPY_FILES_TO_BINARY_DIR(SolverTestCholmodTRSVFiles diff --git a/packages/amesos2/test/solvers/cholmod_int_test.xml b/packages/amesos2/test/solvers/cholmod_int_test.xml new file mode 100644 index 000000000000..6bc79c218186 --- /dev/null +++ b/packages/amesos2/test/solvers/cholmod_int_test.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/shylu/shylu_node/tacho/cmake/Dependencies.cmake b/packages/shylu/shylu_node/tacho/cmake/Dependencies.cmake index 303dc6044c57..c184b938a4c3 100644 --- a/packages/shylu/shylu_node/tacho/cmake/Dependencies.cmake +++ b/packages/shylu/shylu_node/tacho/cmake/Dependencies.cmake @@ -1,6 +1,6 @@ SET(LIB_REQUIRED_DEP_PACKAGES Kokkos) -SET(LIB_OPTIONAL_DEP_PACKAGES TrilinosSS) -SET(TEST_REQUIRED_DEP_PACKAGES Kokkos TrilinosSS Gtest) +SET(LIB_OPTIONAL_DEP_PACKAGES) +SET(TEST_REQUIRED_DEP_PACKAGES Kokkos KokkosAlgorithms Gtest) SET(TEST_OPTIONAL_DEP_PACKAGES) SET(LIB_REQUIRED_DEP_TPLS) SET(LIB_OPTIONAL_DEP_TPLS METIS Scotch Cholmod HWLOC HYPRE MKL LAPACK BLAS Pthread QTHREAD VTune CUSOLVER CUSPARSE CUBLAS CUDA) diff --git a/packages/shylu/shylu_node/tacho/example/CMakeLists.txt b/packages/shylu/shylu_node/tacho/example/CMakeLists.txt index 820ae183d0b0..c871da7de1d9 100644 --- a/packages/shylu/shylu_node/tacho/example/CMakeLists.txt +++ b/packages/shylu/shylu_node/tacho/example/CMakeLists.txt @@ -8,6 +8,13 @@ FILE(GLOB SOURCES *.cpp) SET(LIBRARIES tacho) +TRIBITS_ADD_EXECUTABLE( + Tacho_ExampleCombineDataFileToMatrixMarketFile + NOEXEPREFIX + SOURCES Tacho_ExampleCombineDataFileToMatrixMarketFile.cpp + COMM serial mpi +) + IF (TACHO_HAVE_KOKKOS_TASK) # # Supernodes @@ -199,7 +206,7 @@ IF (TACHO_HAVE_KOKKOS_TASK) ENDIF() TRIBITS_COPY_FILES_TO_BINARY_DIR(Tacho_SimpleSparseTest_File - SOURCE_FILES test.mtx + SOURCE_FILES test.mtx graph.dat weight.dat graph_test.mtx SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR} DEST_DIR ${CMAKE_CURRENT_BINARY_DIR} ) diff --git a/packages/shylu/shylu_node/tacho/example/Tacho_ExampleCholCuSolver.cpp b/packages/shylu/shylu_node/tacho/example/Tacho_ExampleCholCuSolver.cpp index fc192a31ced4..9fdb578b4b73 100644 --- a/packages/shylu/shylu_node/tacho/example/Tacho_ExampleCholCuSolver.cpp +++ b/packages/shylu/shylu_node/tacho/example/Tacho_ExampleCholCuSolver.cpp @@ -73,8 +73,7 @@ int main (int argc, char *argv[]) { #if defined(TACHO_HAVE_METIS) typedef GraphTools_Metis graph_tools_type; #else - /// not recommend to use CAMD - typedef GraphTools_CAMD graph_tools_type; + typedef GraphTools graph_tools_type; #endif Graph graph(h_A.NumRows(), h_A.NumNonZeros(), h_A.RowPtr(), h_A.Cols()); graph_tools_type G(graph); diff --git a/packages/shylu/shylu_node/tacho/example/Tacho_ExampleCholLevelSet.cpp b/packages/shylu/shylu_node/tacho/example/Tacho_ExampleCholLevelSet.cpp index 91f26b5463d6..b82e6ccedc8d 100644 --- a/packages/shylu/shylu_node/tacho/example/Tacho_ExampleCholLevelSet.cpp +++ b/packages/shylu/shylu_node/tacho/example/Tacho_ExampleCholLevelSet.cpp @@ -118,7 +118,7 @@ int main (int argc, char *argv[]) { #elif defined(TACHO_HAVE_SCOTCH) Tacho::GraphTools_Scotch T(G); #else - Tacho::GraphTools_CAMD T(G); + Tacho::GraphTools T(G); #endif T.reorder(verbose); diff --git a/packages/shylu/shylu_node/tacho/example/Tacho_ExampleCholSupernodes.cpp b/packages/shylu/shylu_node/tacho/example/Tacho_ExampleCholSupernodes.cpp index f522cc04b37b..34fff8c05d56 100644 --- a/packages/shylu/shylu_node/tacho/example/Tacho_ExampleCholSupernodes.cpp +++ b/packages/shylu/shylu_node/tacho/example/Tacho_ExampleCholSupernodes.cpp @@ -108,7 +108,7 @@ int main (int argc, char *argv[]) { #elif defined(TACHO_HAVE_SCOTCH) GraphTools_Scotch T(G); #else - GraphTools_CAMD T(G); + GraphTools T(G); #endif T.reorder(verbose); diff --git a/packages/shylu/shylu_node/tacho/example/Tacho_ExampleCholTriSolve.cpp b/packages/shylu/shylu_node/tacho/example/Tacho_ExampleCholTriSolve.cpp index 532e7f813c8b..7750b1400d1e 100644 --- a/packages/shylu/shylu_node/tacho/example/Tacho_ExampleCholTriSolve.cpp +++ b/packages/shylu/shylu_node/tacho/example/Tacho_ExampleCholTriSolve.cpp @@ -107,7 +107,7 @@ int main (int argc, char *argv[]) { #elif defined(TACHO_HAVE_SCOTCH) Tacho::GraphTools_Scotch T(G); #else - Tacho::GraphTools_CAMD T(G); + Tacho::GraphTools T(G); #endif T.reorder(verbose); diff --git a/packages/shylu/shylu_node/tacho/example/Tacho_ExampleCombineDataFileToMatrixMarketFile.cpp b/packages/shylu/shylu_node/tacho/example/Tacho_ExampleCombineDataFileToMatrixMarketFile.cpp new file mode 100644 index 000000000000..45b8d79a9734 --- /dev/null +++ b/packages/shylu/shylu_node/tacho/example/Tacho_ExampleCombineDataFileToMatrixMarketFile.cpp @@ -0,0 +1,80 @@ +#include +#include +#include + +#include "Tacho_Internal.hpp" +#include "Tacho_CommandLineParser.hpp" + +using namespace Tacho; + +int main (int argc, char *argv[]) { + CommandLineParser opts("This example program combines data file into a single matrix market file"); + + std::string graph_data_file = "graph.dat"; + std::string value_data_file = "value.dat"; + std::string matrix_market_file = "mm-out.mtx"; + + opts.set_option("graph-file", "Input graph data file ", &graph_data_file); + opts.set_option("value-file", "Input value data file ", &value_data_file); + opts.set_option("matrix-market-file", "Output matrixmarket file", &matrix_market_file); + + const bool r_parse = opts.parse(argc, argv); + if (r_parse) return 0; // print help return + + Kokkos::initialize(argc, argv); + + typedef Kokkos::DefaultHostExecutionSpace host_space; + { + typedef double value_type; + typedef CrsMatrixBase CrsMatrixBaseTypeHost; + + CrsMatrixBaseTypeHost A; + using ordinal_type_array = typename CrsMatrixBaseTypeHost::ordinal_type_array; + using size_type_array = typename CrsMatrixBaseTypeHost::size_type_array; + using value_type_array = typename CrsMatrixBaseTypeHost::value_type_array; + + ordinal_type m(0), nnz(0); + size_type_array ap; + ordinal_type_array aj; + value_type_array ax; + { + std::ifstream in; + in.open(graph_data_file); + if (!in.good()) { + std::cout << "Failed in open the file: " << graph_data_file << std::endl; + return -1; + } + + in >> m; + ap = size_type_array("ap", m+1); + for (ordinal_type i=0;i<(m+1);++i) + in >> ap(i); + + nnz = ap(m); + aj = ordinal_type_array("aj", nnz); + for (ordinal_type k=0;k> aj(k); + } + { + std::ifstream in; + in.open(value_data_file); + if (!in.good()) { + std::cout << "Failed in open the file: " << value_data_file << std::endl; + return -1; + } + + ax = value_type_array("ax", nnz); + for (ordinal_type k=0;k> ax(k); + } + + A.setExternalMatrix(m, m, nnz, ap, aj, ax); + { + std::ofstream out(matrix_market_file); + MatrixMarket::write(out, A); + } + } + Kokkos::finalize(); + + return 0; +} diff --git a/packages/shylu/shylu_node/tacho/example/Tacho_ExampleExternalInterface.hpp b/packages/shylu/shylu_node/tacho/example/Tacho_ExampleExternalInterface.hpp index 6664db10f309..ad7595466dba 100644 --- a/packages/shylu/shylu_node/tacho/example/Tacho_ExampleExternalInterface.hpp +++ b/packages/shylu/shylu_node/tacho/example/Tacho_ExampleExternalInterface.hpp @@ -74,7 +74,11 @@ namespace tacho { /// with TACHO_ENABLE_INT_INT, size_type is "int" int* rowBegin, int* columns, - SX* values) + SX* values, + int numGraphRows = 0, + int* graphRowBegin = nullptr, + int* graphColumns = nullptr, + int* graphWeights = nullptr) { m_numRows = numRows; if (m_numRows == 0) return 0; @@ -83,6 +87,24 @@ namespace tacho { size_type_array_host ap_host((size_type*) rowBegin, numRows+1); ordinal_type_array_host aj_host((ordinal_type*)columns, numTerms); + size_type_array_host graph_ap_host; + ordinal_type_array_host graph_aj_host; + ordinal_type_array_host graph_aw_host; + + if (numGraphRows > 0) { + if (graphRowBegin == nullptr || + graphColumns == nullptr || + graphWeights == nullptr) { + std::cout << "ExternalInterface::Error, with non-zero numGraphRows, graph pointers should not be nullptr\n"; + std::logic_error("Error: one of graph pointers is nullptr"); + } else { + const size_type nnz_graph = graph_ap_host(numGraphRows); + graph_ap_host = size_type_array_host((size_type*)graphRowBegin, numGraphRows+1); + graph_aj_host = ordinal_type_array_host((ordinal_type*)graphColumns, nnz_graph); + graph_aw_host = ordinal_type_array_host((ordinal_type*)graphWeights, nnz_graph); + } + } + #if defined (KOKKOS_ENABLE_CUDA) /// transfer A into device value_type_array ax(Kokkos::ViewAllocateWithoutInitializing("ax"), @@ -97,7 +119,12 @@ namespace tacho { Kokkos::Impl::Timer timer; { timer.reset(); - m_Solver.analyze(numRows, ap_host, aj_host); + if (numGraphRows > 0) { + m_Solver.analyze(numRows, ap_host, aj_host, + numGraphRows, graph_ap_host, graph_aj_host, graph_aw_host); + } else { + m_Solver.analyze(numRows, ap_host, aj_host); + } const double t = timer.seconds(); std::cout << "ExternalInterface:: analyze time " << t << std::endl; } diff --git a/packages/shylu/shylu_node/tacho/example/Tacho_ExamplePerfTest.cpp b/packages/shylu/shylu_node/tacho/example/Tacho_ExamplePerfTest.cpp index 7d31795ad697..f44bd0adf005 100644 --- a/packages/shylu/shylu_node/tacho/example/Tacho_ExamplePerfTest.cpp +++ b/packages/shylu/shylu_node/tacho/example/Tacho_ExamplePerfTest.cpp @@ -135,7 +135,7 @@ int main (int argc, char *argv[]) { #elif defined(TACHO_HAVE_SCOTCH) Tacho::GraphTools_Scotch G(graph); #else - Tacho::GraphTools_CAMD G(graph); + Tacho::GraphTools G(graph); #endif G.reorder(verbose); diff --git a/packages/shylu/shylu_node/tacho/example/Tacho_ExampleSolver.hpp b/packages/shylu/shylu_node/tacho/example/Tacho_ExampleSolver.hpp index a40ae23ce6cd..00be921df7f4 100644 --- a/packages/shylu/shylu_node/tacho/example/Tacho_ExampleSolver.hpp +++ b/packages/shylu/shylu_node/tacho/example/Tacho_ExampleSolver.hpp @@ -29,6 +29,8 @@ int driver (int argc, char *argv[]) { bool verbose = true; bool sanitize = false; std::string file = "test.mtx"; + std::string graph_file = ""; + std::string weight_file = ""; int nrhs = 1; int sym = 3; int posdef = 1; @@ -53,6 +55,8 @@ int driver (int argc, char *argv[]) { opts.set_option("verbose", "Flag for verbose printing", &verbose); opts.set_option("sanitize", "Flag to sanitize input matrix (remove zeros)", &sanitize); opts.set_option("file", "Input file (MatrixMarket SPD matrix)", &file); + opts.set_option("graph", "Input condensed graph", &graph_file); + opts.set_option("weight", "Input condensed graph weight", &weight_file); opts.set_option("nrhs", "Number of RHS vectors", &nrhs); opts.set_option("symmetric", "Symmetric type: 0 - unsym, 1 - structure sym, 2 - symmetric, 3 - hermitian", &sym); opts.set_option("posdef", "Positive definite: 0 - indef, 1 - positive definite", &posdef); @@ -105,6 +109,53 @@ int driver (int argc, char *argv[]) { } Tacho::MatrixMarket::read(file, A, sanitize, verbose); } + + /// read graph file if available + using size_type_array_host = typename CrsMatrixBaseTypeHost::size_type_array; + using ordinal_type_array_host = typename CrsMatrixBaseTypeHost::ordinal_type_array; + + ordinal_type m_graph(0); + size_type_array_host ap_graph; + ordinal_type_array_host aw_graph, aj_graph; + { + if (graph_file.length() > 0 && weight_file.length() > 0) { + { + std::ifstream in; + in.open(graph_file); + if (!in.good()) { + std::cout << "Failed in open the file: " << graph_file << std::endl; + return -1; + } + in >> m_graph; + + ap_graph = size_type_array_host("ap", m_graph+1); + for (ordinal_type i=0,iend=m_graph+1;i> ap_graph(i); + + aj_graph = ordinal_type_array_host("aj", ap_graph(m_graph)); + for (ordinal_type i=0;i> aj_graph(j); + } + } + + { + std::ifstream in; + in.open(weight_file); + if (!in.good()) { + std::cout << "Failed in open the file: " << weight_file << std::endl; + return -1; + } + ordinal_type m(0); + in >> m; + in >> m_graph; + aw_graph = ordinal_type_array_host("aw", m_graph); + for (ordinal_type i=0;i> aw_graph(i); + } + } + } /// /// * to wrap triple pointers, declare following view types @@ -149,9 +200,18 @@ int driver (int argc, char *argv[]) { Kokkos::deep_copy(values_on_device, A.Values()); /// inputs are used for graph reordering and analysis - solver.analyze(A.NumRows(), - A.RowPtr(), - A.Cols()); + if (m_graph > 0 && m_graph < A.NumRows()) + solver.analyze(A.NumRows(), + A.RowPtr(), + A.Cols(), + m_graph, + ap_graph, + aj_graph, + aw_graph); + else + solver.analyze(A.NumRows(), + A.RowPtr(), + A.Cols()); /// create numeric tools and levelset tools solver.initialize(); diff --git a/packages/shylu/shylu_node/tacho/example/graph.dat b/packages/shylu/shylu_node/tacho/example/graph.dat new file mode 100644 index 000000000000..45e5cd6cb7a3 --- /dev/null +++ b/packages/shylu/shylu_node/tacho/example/graph.dat @@ -0,0 +1,372 @@ +27 +0 +8 +20 +38 +50 +62 +80 +107 +125 +133 +145 +157 +175 +187 +195 +213 +225 +233 +245 +253 +265 +283 +295 +303 +315 +327 +335 +343 +0 +1 +2 +3 +4 +5 +6 +7 +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +0 +1 +2 +3 +4 +5 +6 +7 +12 +13 +14 +15 +0 +1 +2 +3 +4 +5 +6 +7 +18 +19 +20 +21 +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +18 +19 +20 +21 +22 +23 +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +0 +1 +2 +3 +4 +5 +6 +7 +12 +13 +14 +15 +18 +19 +20 +21 +24 +25 +1 +2 +5 +6 +8 +9 +10 +11 +1 +2 +5 +6 +8 +9 +10 +11 +12 +14 +16 +17 +1 +2 +5 +6 +8 +9 +10 +11 +19 +20 +22 +23 +1 +2 +5 +6 +8 +9 +10 +11 +12 +14 +16 +17 +19 +20 +22 +23 +24 +26 +2 +3 +6 +7 +9 +11 +12 +13 +14 +15 +16 +17 +2 +3 +6 +7 +12 +13 +14 +15 +2 +3 +6 +7 +9 +11 +12 +13 +14 +15 +16 +17 +20 +21 +23 +24 +25 +26 +2 +3 +6 +7 +12 +13 +14 +15 +20 +21 +24 +25 +2 +6 +9 +11 +12 +14 +16 +17 +2 +6 +9 +11 +12 +14 +16 +17 +20 +23 +24 +26 +4 +5 +6 +7 +18 +19 +20 +21 +4 +5 +6 +7 +10 +11 +18 +19 +20 +21 +22 +23 +4 +5 +6 +7 +10 +11 +14 +15 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +4 +5 +6 +7 +14 +15 +18 +19 +20 +21 +24 +25 +5 +6 +10 +11 +19 +20 +22 +23 +5 +6 +10 +11 +14 +17 +19 +20 +22 +23 +24 +26 +6 +7 +11 +14 +15 +17 +20 +21 +23 +24 +25 +26 +6 +7 +14 +15 +20 +21 +24 +25 +6 +11 +14 +17 +20 +23 +24 +26 diff --git a/packages/shylu/shylu_node/tacho/example/graph_test.mtx b/packages/shylu/shylu_node/tacho/example/graph_test.mtx new file mode 100644 index 000000000000..94a814649fb5 --- /dev/null +++ b/packages/shylu/shylu_node/tacho/example/graph_test.mtx @@ -0,0 +1,3090 @@ +%%MatrixMarket matrix coordinate real general +%------------------------------------------------------------------------------- +81 81 3087 + 1 1 3.473316e+02 + 1 2 1.124657e+02 + 1 3 -1.124657e+02 + 1 4 9.725783e+01 + 1 5 6.782280e+01 + 1 6 1.631181e+01 + 1 7 4.004375e+01 + 1 8 -1.974588e+01 + 1 9 1.974588e+01 + 1 10 9.725783e+01 + 1 11 -1.631181e+01 + 1 12 -6.782280e+01 + 1 13 -1.036350e+02 + 1 14 1.631181e+01 + 1 15 -1.631181e+01 + 1 16 -1.196403e+02 + 1 17 1.974588e+01 + 1 18 1.124657e+02 + 1 19 -1.233504e+02 + 1 20 -6.782280e+01 + 1 21 6.782280e+01 + 1 22 -1.196403e+02 + 1 23 -1.124657e+02 + 1 24 -1.974588e+01 + 2 1 1.124657e+02 + 2 2 3.473316e+02 + 2 3 -1.124657e+02 + 2 4 6.782280e+01 + 2 5 9.725783e+01 + 2 6 1.631181e+01 + 2 7 1.974588e+01 + 2 8 -1.196403e+02 + 2 9 1.124657e+02 + 2 10 1.631181e+01 + 2 11 -1.036350e+02 + 2 12 -1.631181e+01 + 2 13 -1.631181e+01 + 2 14 9.725783e+01 + 2 15 -6.782280e+01 + 2 16 -1.974588e+01 + 2 17 4.004375e+01 + 2 18 1.974588e+01 + 2 19 -6.782280e+01 + 2 20 -1.233504e+02 + 2 21 6.782280e+01 + 2 22 -1.124657e+02 + 2 23 -1.196403e+02 + 2 24 -1.974588e+01 + 3 1 -1.124657e+02 + 3 2 -1.124657e+02 + 3 3 3.473316e+02 + 3 4 -1.631181e+01 + 3 5 -1.631181e+01 + 3 6 -1.036350e+02 + 3 7 -1.974588e+01 + 3 8 1.124657e+02 + 3 9 -1.196403e+02 + 3 10 -6.782280e+01 + 3 11 1.631181e+01 + 3 12 9.725783e+01 + 3 13 1.631181e+01 + 3 14 -6.782280e+01 + 3 15 9.725783e+01 + 3 16 1.124657e+02 + 3 17 -1.974588e+01 + 3 18 -1.196403e+02 + 3 19 6.782280e+01 + 3 20 6.782280e+01 + 3 21 -1.233504e+02 + 3 22 1.974588e+01 + 3 23 1.974588e+01 + 3 24 4.004375e+01 + 4 1 9.725783e+01 + 4 2 6.782280e+01 + 4 3 -1.631181e+01 + 4 4 6.946632e+02 + 4 5 2.249313e+02 + 4 6 0.000000e+00 + 4 7 1.945157e+02 + 4 8 -3.262363e+01 + 4 9 1.421085e-14 + 4 10 4.004375e+01 + 4 11 -1.974588e+01 + 4 12 -1.974588e+01 + 4 13 -1.196403e+02 + 4 14 1.974588e+01 + 4 15 -1.124657e+02 + 4 16 -2.072700e+02 + 4 17 3.262363e+01 + 4 18 -3.552714e-15 + 4 19 -2.392806e+02 + 4 20 -2.249313e+02 + 4 21 0.000000e+00 + 4 22 -1.233504e+02 + 4 23 -6.782280e+01 + 4 24 -6.782280e+01 + 4 25 9.725783e+01 + 4 26 6.782280e+01 + 4 27 1.631181e+01 + 4 28 4.004375e+01 + 4 29 -1.974588e+01 + 4 30 1.974588e+01 + 4 31 -1.196403e+02 + 4 32 1.974588e+01 + 4 33 1.124657e+02 + 4 34 -1.233504e+02 + 4 35 -6.782280e+01 + 4 36 6.782280e+01 + 5 1 6.782280e+01 + 5 2 9.725783e+01 + 5 3 -1.631181e+01 + 5 4 2.249313e+02 + 5 5 6.946632e+02 + 5 6 0.000000e+00 + 5 7 3.262363e+01 + 5 8 -2.072700e+02 + 5 9 3.552714e-15 + 5 10 1.974588e+01 + 5 11 -1.196403e+02 + 5 12 -1.124657e+02 + 5 13 -1.974588e+01 + 5 14 4.004375e+01 + 5 15 -1.974588e+01 + 5 16 -3.262363e+01 + 5 17 1.945157e+02 + 5 18 -1.421085e-14 + 5 19 -2.249313e+02 + 5 20 -2.392806e+02 + 5 21 0.000000e+00 + 5 22 -6.782280e+01 + 5 23 -1.233504e+02 + 5 24 -6.782280e+01 + 5 25 6.782280e+01 + 5 26 9.725783e+01 + 5 27 1.631181e+01 + 5 28 1.974588e+01 + 5 29 -1.196403e+02 + 5 30 1.124657e+02 + 5 31 -1.974588e+01 + 5 32 4.004375e+01 + 5 33 1.974588e+01 + 5 34 -6.782280e+01 + 5 35 -1.233504e+02 + 5 36 6.782280e+01 + 6 1 1.631181e+01 + 6 2 1.631181e+01 + 6 3 -1.036350e+02 + 6 4 0.000000e+00 + 6 5 0.000000e+00 + 6 6 6.946632e+02 + 6 7 1.421085e-14 + 6 8 0.000000e+00 + 6 9 1.945157e+02 + 6 10 1.974588e+01 + 6 11 -1.124657e+02 + 6 12 -1.196403e+02 + 6 13 -1.124657e+02 + 6 14 1.974588e+01 + 6 15 -1.196403e+02 + 6 16 0.000000e+00 + 6 17 0.000000e+00 + 6 18 1.945157e+02 + 6 19 0.000000e+00 + 6 20 0.000000e+00 + 6 21 8.008751e+01 + 6 22 -6.782280e+01 + 6 23 -6.782280e+01 + 6 24 -1.233504e+02 + 6 25 -1.631181e+01 + 6 26 -1.631181e+01 + 6 27 -1.036350e+02 + 6 28 -1.974588e+01 + 6 29 1.124657e+02 + 6 30 -1.196403e+02 + 6 31 1.124657e+02 + 6 32 -1.974588e+01 + 6 33 -1.196403e+02 + 6 34 6.782280e+01 + 6 35 6.782280e+01 + 6 36 -1.233504e+02 + 7 1 4.004375e+01 + 7 2 1.974588e+01 + 7 3 -1.974588e+01 + 7 4 1.945157e+02 + 7 5 3.262363e+01 + 7 6 1.421085e-14 + 7 7 1.389326e+03 + 7 8 0.000000e+00 + 7 9 0.000000e+00 + 7 10 1.945157e+02 + 7 11 1.421085e-14 + 7 12 -3.262363e+01 + 7 13 -1.233504e+02 + 7 14 6.782280e+01 + 7 15 -6.782280e+01 + 7 16 -2.392806e+02 + 7 17 2.249313e+02 + 7 18 -7.105427e-15 + 7 19 -4.145401e+02 + 7 20 7.105427e-15 + 7 21 -7.105427e-15 + 7 22 -2.392806e+02 + 7 23 3.552714e-15 + 7 24 -2.249313e+02 + 7 25 4.004375e+01 + 7 26 1.974588e+01 + 7 27 1.974588e+01 + 7 28 1.945157e+02 + 7 29 1.421085e-14 + 7 30 3.262363e+01 + 7 31 -1.233504e+02 + 7 32 6.782280e+01 + 7 33 6.782280e+01 + 7 34 -2.392806e+02 + 7 35 0.000000e+00 + 7 36 2.249313e+02 + 7 37 1.945157e+02 + 7 38 -3.262363e+01 + 7 39 1.421085e-14 + 7 40 4.004375e+01 + 7 41 -1.974588e+01 + 7 42 -1.974588e+01 + 7 43 -2.392806e+02 + 7 44 -2.249313e+02 + 7 45 0.000000e+00 + 7 46 -1.233504e+02 + 7 47 -6.782280e+01 + 7 48 -6.782280e+01 + 7 49 4.004375e+01 + 7 50 -1.974588e+01 + 7 51 1.974588e+01 + 7 52 -1.233504e+02 + 7 53 -6.782280e+01 + 7 54 6.782280e+01 + 8 1 -1.974588e+01 + 8 2 -1.196403e+02 + 8 3 1.124657e+02 + 8 4 -3.262363e+01 + 8 5 -2.072700e+02 + 8 6 0.000000e+00 + 8 7 0.000000e+00 + 8 8 1.389326e+03 + 8 9 0.000000e+00 + 8 10 1.421085e-14 + 8 11 1.945157e+02 + 8 12 1.065814e-14 + 8 13 6.782280e+01 + 8 14 -1.233504e+02 + 8 15 6.782280e+01 + 8 16 2.249313e+02 + 8 17 -2.392806e+02 + 8 18 0.000000e+00 + 8 19 2.486900e-14 + 8 20 3.890313e+02 + 8 21 0.000000e+00 + 8 22 -3.552714e-15 + 8 23 8.008751e+01 + 8 24 3.552714e-15 + 8 25 -1.974588e+01 + 8 26 -1.196403e+02 + 8 27 -1.124657e+02 + 8 28 1.421085e-14 + 8 29 1.945157e+02 + 8 30 7.105427e-15 + 8 31 6.782280e+01 + 8 32 -1.233504e+02 + 8 33 -6.782280e+01 + 8 34 3.552714e-15 + 8 35 8.008751e+01 + 8 36 -3.552714e-15 + 8 37 3.262363e+01 + 8 38 -2.072700e+02 + 8 39 0.000000e+00 + 8 40 1.974588e+01 + 8 41 -1.196403e+02 + 8 42 -1.124657e+02 + 8 43 -2.249313e+02 + 8 44 -2.392806e+02 + 8 45 3.552714e-15 + 8 46 -6.782280e+01 + 8 47 -1.233504e+02 + 8 48 -6.782280e+01 + 8 49 1.974588e+01 + 8 50 -1.196403e+02 + 8 51 1.124657e+02 + 8 52 -6.782280e+01 + 8 53 -1.233504e+02 + 8 54 6.782280e+01 + 9 1 1.974588e+01 + 9 2 1.124657e+02 + 9 3 -1.196403e+02 + 9 4 1.421085e-14 + 9 5 3.552714e-15 + 9 6 1.945157e+02 + 9 7 0.000000e+00 + 9 8 0.000000e+00 + 9 9 1.389326e+03 + 9 10 3.262363e+01 + 9 11 1.065814e-14 + 9 12 -2.072700e+02 + 9 13 -6.782280e+01 + 9 14 6.782280e+01 + 9 15 -1.233504e+02 + 9 16 -3.552714e-15 + 9 17 0.000000e+00 + 9 18 8.008751e+01 + 9 19 3.552714e-15 + 9 20 0.000000e+00 + 9 21 3.890313e+02 + 9 22 -2.249313e+02 + 9 23 7.105427e-15 + 9 24 -2.392806e+02 + 9 25 -1.974588e+01 + 9 26 -1.124657e+02 + 9 27 -1.196403e+02 + 9 28 -3.262363e+01 + 9 29 1.065814e-14 + 9 30 -2.072700e+02 + 9 31 6.782280e+01 + 9 32 -6.782280e+01 + 9 33 -1.233504e+02 + 9 34 2.249313e+02 + 9 35 3.552714e-15 + 9 36 -2.392806e+02 + 9 37 0.000000e+00 + 9 38 0.000000e+00 + 9 39 1.945157e+02 + 9 40 1.974588e+01 + 9 41 -1.124657e+02 + 9 42 -1.196403e+02 + 9 43 0.000000e+00 + 9 44 0.000000e+00 + 9 45 8.008751e+01 + 9 46 -6.782280e+01 + 9 47 -6.782280e+01 + 9 48 -1.233504e+02 + 9 49 -1.974588e+01 + 9 50 1.124657e+02 + 9 51 -1.196403e+02 + 9 52 6.782280e+01 + 9 53 6.782280e+01 + 9 54 -1.233504e+02 + 10 1 9.725783e+01 + 10 2 1.631181e+01 + 10 3 -6.782280e+01 + 10 4 4.004375e+01 + 10 5 1.974588e+01 + 10 6 1.974588e+01 + 10 7 1.945157e+02 + 10 8 1.421085e-14 + 10 9 3.262363e+01 + 10 10 6.946632e+02 + 10 11 0.000000e+00 + 10 12 -2.249313e+02 + 10 13 -1.196403e+02 + 10 14 1.124657e+02 + 10 15 -1.974588e+01 + 10 16 -1.233504e+02 + 10 17 6.782280e+01 + 10 18 6.782280e+01 + 10 19 -2.392806e+02 + 10 20 0.000000e+00 + 10 21 2.249313e+02 + 10 22 -2.072700e+02 + 10 23 -7.105427e-15 + 10 24 -3.262363e+01 + 10 37 4.004375e+01 + 10 38 -1.974588e+01 + 10 39 1.974588e+01 + 10 40 9.725783e+01 + 10 41 -1.631181e+01 + 10 42 -6.782280e+01 + 10 43 -1.233504e+02 + 10 44 -6.782280e+01 + 10 45 6.782280e+01 + 10 46 -1.196403e+02 + 10 47 -1.124657e+02 + 10 48 -1.974588e+01 + 11 1 -1.631181e+01 + 11 2 -1.036350e+02 + 11 3 1.631181e+01 + 11 4 -1.974588e+01 + 11 5 -1.196403e+02 + 11 6 -1.124657e+02 + 11 7 1.421085e-14 + 11 8 1.945157e+02 + 11 9 1.065814e-14 + 11 10 0.000000e+00 + 11 11 6.946632e+02 + 11 12 -1.421085e-14 + 11 13 1.124657e+02 + 11 14 -1.196403e+02 + 11 15 1.974588e+01 + 11 16 6.782280e+01 + 11 17 -1.233504e+02 + 11 18 -6.782280e+01 + 11 19 7.105427e-15 + 11 20 8.008751e+01 + 11 21 -3.552714e-15 + 11 22 1.776357e-14 + 11 23 1.945157e+02 + 11 24 0.000000e+00 + 11 37 1.974588e+01 + 11 38 -1.196403e+02 + 11 39 1.124657e+02 + 11 40 1.631181e+01 + 11 41 -1.036350e+02 + 11 42 -1.631181e+01 + 11 43 -6.782280e+01 + 11 44 -1.233504e+02 + 11 45 6.782280e+01 + 11 46 -1.124657e+02 + 11 47 -1.196403e+02 + 11 48 -1.974588e+01 + 12 1 -6.782280e+01 + 12 2 -1.631181e+01 + 12 3 9.725783e+01 + 12 4 -1.974588e+01 + 12 5 -1.124657e+02 + 12 6 -1.196403e+02 + 12 7 -3.262363e+01 + 12 8 1.065814e-14 + 12 9 -2.072700e+02 + 12 10 -2.249313e+02 + 12 11 -1.421085e-14 + 12 12 6.946632e+02 + 12 13 1.974588e+01 + 12 14 -1.974588e+01 + 12 15 4.004375e+01 + 12 16 6.782280e+01 + 12 17 -6.782280e+01 + 12 18 -1.233504e+02 + 12 19 2.249313e+02 + 12 20 3.552714e-15 + 12 21 -2.392806e+02 + 12 22 3.262363e+01 + 12 23 0.000000e+00 + 12 24 1.945157e+02 + 12 37 -1.974588e+01 + 12 38 1.124657e+02 + 12 39 -1.196403e+02 + 12 40 -6.782280e+01 + 12 41 1.631181e+01 + 12 42 9.725783e+01 + 12 43 6.782280e+01 + 12 44 6.782280e+01 + 12 45 -1.233504e+02 + 12 46 1.974588e+01 + 12 47 1.974588e+01 + 12 48 4.004375e+01 + 13 1 -1.036350e+02 + 13 2 -1.631181e+01 + 13 3 1.631181e+01 + 13 4 -1.196403e+02 + 13 5 -1.974588e+01 + 13 6 -1.124657e+02 + 13 7 -1.233504e+02 + 13 8 6.782280e+01 + 13 9 -6.782280e+01 + 13 10 -1.196403e+02 + 13 11 1.124657e+02 + 13 12 1.974588e+01 + 13 13 6.946632e+02 + 13 14 -1.421085e-14 + 13 15 1.421085e-14 + 13 16 1.945157e+02 + 13 17 1.421085e-14 + 13 18 -1.776357e-14 + 13 19 8.008751e+01 + 13 20 3.552714e-15 + 13 21 0.000000e+00 + 13 22 1.945157e+02 + 13 23 1.421085e-14 + 13 24 0.000000e+00 + 13 55 -1.036350e+02 + 13 56 1.631181e+01 + 13 57 -1.631181e+01 + 13 58 -1.196403e+02 + 13 59 1.974588e+01 + 13 60 1.124657e+02 + 13 61 -1.233504e+02 + 13 62 -6.782280e+01 + 13 63 6.782280e+01 + 13 64 -1.196403e+02 + 13 65 -1.124657e+02 + 13 66 -1.974588e+01 + 14 1 1.631181e+01 + 14 2 9.725783e+01 + 14 3 -6.782280e+01 + 14 4 1.974588e+01 + 14 5 4.004375e+01 + 14 6 1.974588e+01 + 14 7 6.782280e+01 + 14 8 -1.233504e+02 + 14 9 6.782280e+01 + 14 10 1.124657e+02 + 14 11 -1.196403e+02 + 14 12 -1.974588e+01 + 14 13 -1.421085e-14 + 14 14 6.946632e+02 + 14 15 -2.249313e+02 + 14 16 1.421085e-14 + 14 17 1.945157e+02 + 14 18 3.262363e+01 + 14 19 3.552714e-15 + 14 20 -2.392806e+02 + 14 21 2.249313e+02 + 14 22 3.552714e-15 + 14 23 -2.072700e+02 + 14 24 -3.262363e+01 + 14 55 -1.631181e+01 + 14 56 9.725783e+01 + 14 57 -6.782280e+01 + 14 58 -1.974588e+01 + 14 59 4.004375e+01 + 14 60 1.974588e+01 + 14 61 -6.782280e+01 + 14 62 -1.233504e+02 + 14 63 6.782280e+01 + 14 64 -1.124657e+02 + 14 65 -1.196403e+02 + 14 66 -1.974588e+01 + 15 1 -1.631181e+01 + 15 2 -6.782280e+01 + 15 3 9.725783e+01 + 15 4 -1.124657e+02 + 15 5 -1.974588e+01 + 15 6 -1.196403e+02 + 15 7 -6.782280e+01 + 15 8 6.782280e+01 + 15 9 -1.233504e+02 + 15 10 -1.974588e+01 + 15 11 1.974588e+01 + 15 12 4.004375e+01 + 15 13 1.421085e-14 + 15 14 -2.249313e+02 + 15 15 6.946632e+02 + 15 16 0.000000e+00 + 15 17 -3.262363e+01 + 15 18 -2.072700e+02 + 15 19 -3.552714e-15 + 15 20 2.249313e+02 + 15 21 -2.392806e+02 + 15 22 -1.421085e-14 + 15 23 3.262363e+01 + 15 24 1.945157e+02 + 15 55 1.631181e+01 + 15 56 -6.782280e+01 + 15 57 9.725783e+01 + 15 58 1.124657e+02 + 15 59 -1.974588e+01 + 15 60 -1.196403e+02 + 15 61 6.782280e+01 + 15 62 6.782280e+01 + 15 63 -1.233504e+02 + 15 64 1.974588e+01 + 15 65 1.974588e+01 + 15 66 4.004375e+01 + 16 1 -1.196403e+02 + 16 2 -1.974588e+01 + 16 3 1.124657e+02 + 16 4 -2.072700e+02 + 16 5 -3.262363e+01 + 16 6 0.000000e+00 + 16 7 -2.392806e+02 + 16 8 2.249313e+02 + 16 9 -3.552714e-15 + 16 10 -1.233504e+02 + 16 11 6.782280e+01 + 16 12 6.782280e+01 + 16 13 1.945157e+02 + 16 14 1.421085e-14 + 16 15 0.000000e+00 + 16 16 1.389326e+03 + 16 17 0.000000e+00 + 16 18 0.000000e+00 + 16 19 3.890313e+02 + 16 20 3.552714e-15 + 16 21 1.421085e-14 + 16 22 8.008751e+01 + 16 23 -3.552714e-15 + 16 24 3.552714e-15 + 16 25 -1.196403e+02 + 16 26 -1.974588e+01 + 16 27 -1.124657e+02 + 16 28 -1.233504e+02 + 16 29 6.782280e+01 + 16 30 -6.782280e+01 + 16 31 1.945157e+02 + 16 32 1.421085e-14 + 16 33 3.552714e-15 + 16 34 8.008751e+01 + 16 35 -7.105427e-15 + 16 36 -3.552714e-15 + 16 55 -1.196403e+02 + 16 56 1.974588e+01 + 16 57 -1.124657e+02 + 16 58 -2.072700e+02 + 16 59 3.262363e+01 + 16 60 3.552714e-15 + 16 61 -2.392806e+02 + 16 62 -2.249313e+02 + 16 63 0.000000e+00 + 16 64 -1.233504e+02 + 16 65 -6.782280e+01 + 16 66 -6.782280e+01 + 16 67 -1.196403e+02 + 16 68 1.974588e+01 + 16 69 1.124657e+02 + 16 70 -1.233504e+02 + 16 71 -6.782280e+01 + 16 72 6.782280e+01 + 17 1 1.974588e+01 + 17 2 4.004375e+01 + 17 3 -1.974588e+01 + 17 4 3.262363e+01 + 17 5 1.945157e+02 + 17 6 0.000000e+00 + 17 7 2.249313e+02 + 17 8 -2.392806e+02 + 17 9 0.000000e+00 + 17 10 6.782280e+01 + 17 11 -1.233504e+02 + 17 12 -6.782280e+01 + 17 13 1.421085e-14 + 17 14 1.945157e+02 + 17 15 -3.262363e+01 + 17 16 0.000000e+00 + 17 17 1.389326e+03 + 17 18 0.000000e+00 + 17 19 1.065814e-14 + 17 20 -4.145401e+02 + 17 21 7.105427e-15 + 17 22 0.000000e+00 + 17 23 -2.392806e+02 + 17 24 -2.249313e+02 + 17 25 1.974588e+01 + 17 26 4.004375e+01 + 17 27 1.974588e+01 + 17 28 6.782280e+01 + 17 29 -1.233504e+02 + 17 30 6.782280e+01 + 17 31 1.421085e-14 + 17 32 1.945157e+02 + 17 33 3.262363e+01 + 17 34 0.000000e+00 + 17 35 -2.392806e+02 + 17 36 2.249313e+02 + 17 55 -1.974588e+01 + 17 56 4.004375e+01 + 17 57 -1.974588e+01 + 17 58 -3.262363e+01 + 17 59 1.945157e+02 + 17 60 -1.421085e-14 + 17 61 -2.249313e+02 + 17 62 -2.392806e+02 + 17 63 0.000000e+00 + 17 64 -6.782280e+01 + 17 65 -1.233504e+02 + 17 66 -6.782280e+01 + 17 67 -1.974588e+01 + 17 68 4.004375e+01 + 17 69 1.974588e+01 + 17 70 -6.782280e+01 + 17 71 -1.233504e+02 + 17 72 6.782280e+01 + 18 1 1.124657e+02 + 18 2 1.974588e+01 + 18 3 -1.196403e+02 + 18 4 -3.552714e-15 + 18 5 -1.421085e-14 + 18 6 1.945157e+02 + 18 7 -7.105427e-15 + 18 8 0.000000e+00 + 18 9 8.008751e+01 + 18 10 6.782280e+01 + 18 11 -6.782280e+01 + 18 12 -1.233504e+02 + 18 13 -1.776357e-14 + 18 14 3.262363e+01 + 18 15 -2.072700e+02 + 18 16 0.000000e+00 + 18 17 0.000000e+00 + 18 18 1.389326e+03 + 18 19 1.421085e-14 + 18 20 3.552714e-15 + 18 21 3.890313e+02 + 18 22 3.552714e-15 + 18 23 -2.249313e+02 + 18 24 -2.392806e+02 + 18 25 -1.124657e+02 + 18 26 -1.974588e+01 + 18 27 -1.196403e+02 + 18 28 -6.782280e+01 + 18 29 6.782280e+01 + 18 30 -1.233504e+02 + 18 31 7.105427e-15 + 18 32 -3.262363e+01 + 18 33 -2.072700e+02 + 18 34 7.105427e-15 + 18 35 2.249313e+02 + 18 36 -2.392806e+02 + 18 55 -1.124657e+02 + 18 56 1.974588e+01 + 18 57 -1.196403e+02 + 18 58 0.000000e+00 + 18 59 -1.421085e-14 + 18 60 1.945157e+02 + 18 61 0.000000e+00 + 18 62 3.552714e-15 + 18 63 8.008751e+01 + 18 64 -6.782280e+01 + 18 65 -6.782280e+01 + 18 66 -1.233504e+02 + 18 67 1.124657e+02 + 18 68 -1.974588e+01 + 18 69 -1.196403e+02 + 18 70 6.782280e+01 + 18 71 6.782280e+01 + 18 72 -1.233504e+02 + 19 1 -1.233504e+02 + 19 2 -6.782280e+01 + 19 3 6.782280e+01 + 19 4 -2.392806e+02 + 19 5 -2.249313e+02 + 19 6 0.000000e+00 + 19 7 -4.145401e+02 + 19 8 2.486900e-14 + 19 9 3.552714e-15 + 19 10 -2.392806e+02 + 19 11 7.105427e-15 + 19 12 2.249313e+02 + 19 13 8.008751e+01 + 19 14 3.552714e-15 + 19 15 -3.552714e-15 + 19 16 3.890313e+02 + 19 17 1.065814e-14 + 19 18 1.421085e-14 + 19 19 2.778653e+03 + 19 20 0.000000e+00 + 19 21 0.000000e+00 + 19 22 3.890313e+02 + 19 23 1.421085e-14 + 19 24 -3.552714e-15 + 19 25 -1.233504e+02 + 19 26 -6.782280e+01 + 19 27 -6.782280e+01 + 19 28 -2.392806e+02 + 19 29 0.000000e+00 + 19 30 -2.249313e+02 + 19 31 8.008751e+01 + 19 32 0.000000e+00 + 19 33 0.000000e+00 + 19 34 3.890313e+02 + 19 35 1.421085e-14 + 19 36 1.065814e-14 + 19 37 -2.392806e+02 + 19 38 2.249313e+02 + 19 39 -3.552714e-15 + 19 40 -1.233504e+02 + 19 41 6.782280e+01 + 19 42 6.782280e+01 + 19 43 3.890313e+02 + 19 44 7.105427e-15 + 19 45 1.421085e-14 + 19 46 8.008751e+01 + 19 47 -3.552714e-15 + 19 48 0.000000e+00 + 19 49 -1.233504e+02 + 19 50 6.782280e+01 + 19 51 -6.782280e+01 + 19 52 8.008751e+01 + 19 53 0.000000e+00 + 19 54 0.000000e+00 + 19 55 -1.233504e+02 + 19 56 6.782280e+01 + 19 57 -6.782280e+01 + 19 58 -2.392806e+02 + 19 59 2.249313e+02 + 19 60 -3.552714e-15 + 19 61 -4.145401e+02 + 19 62 0.000000e+00 + 19 63 0.000000e+00 + 19 64 -2.392806e+02 + 19 65 7.105427e-15 + 19 66 -2.249313e+02 + 19 67 -1.233504e+02 + 19 68 6.782280e+01 + 19 69 6.782280e+01 + 19 70 -2.392806e+02 + 19 71 0.000000e+00 + 19 72 2.249313e+02 + 19 73 -2.392806e+02 + 19 74 -2.249313e+02 + 19 75 0.000000e+00 + 19 76 -1.233504e+02 + 19 77 -6.782280e+01 + 19 78 -6.782280e+01 + 19 79 -1.233504e+02 + 19 80 -6.782280e+01 + 19 81 6.782280e+01 + 20 1 -6.782280e+01 + 20 2 -1.233504e+02 + 20 3 6.782280e+01 + 20 4 -2.249313e+02 + 20 5 -2.392806e+02 + 20 6 0.000000e+00 + 20 7 7.105427e-15 + 20 8 3.890313e+02 + 20 9 0.000000e+00 + 20 10 0.000000e+00 + 20 11 8.008751e+01 + 20 12 3.552714e-15 + 20 13 3.552714e-15 + 20 14 -2.392806e+02 + 20 15 2.249313e+02 + 20 16 3.552714e-15 + 20 17 -4.145401e+02 + 20 18 3.552714e-15 + 20 19 0.000000e+00 + 20 20 2.778653e+03 + 20 21 0.000000e+00 + 20 22 1.421085e-14 + 20 23 3.890313e+02 + 20 24 7.105427e-15 + 20 25 -6.782280e+01 + 20 26 -1.233504e+02 + 20 27 -6.782280e+01 + 20 28 0.000000e+00 + 20 29 8.008751e+01 + 20 30 7.105427e-15 + 20 31 7.105427e-15 + 20 32 -2.392806e+02 + 20 33 -2.249313e+02 + 20 34 1.421085e-14 + 20 35 3.890313e+02 + 20 36 2.131628e-14 + 20 37 2.249313e+02 + 20 38 -2.392806e+02 + 20 39 0.000000e+00 + 20 40 6.782280e+01 + 20 41 -1.233504e+02 + 20 42 -6.782280e+01 + 20 43 7.105427e-15 + 20 44 -4.145401e+02 + 20 45 3.552714e-15 + 20 46 0.000000e+00 + 20 47 -2.392806e+02 + 20 48 -2.249313e+02 + 20 49 6.782280e+01 + 20 50 -1.233504e+02 + 20 51 6.782280e+01 + 20 52 3.552714e-15 + 20 53 -2.392806e+02 + 20 54 2.249313e+02 + 20 55 6.782280e+01 + 20 56 -1.233504e+02 + 20 57 6.782280e+01 + 20 58 2.249313e+02 + 20 59 -2.392806e+02 + 20 60 3.552714e-15 + 20 61 1.776357e-14 + 20 62 3.890313e+02 + 20 63 0.000000e+00 + 20 64 3.552714e-15 + 20 65 8.008751e+01 + 20 66 7.105427e-15 + 20 67 6.782280e+01 + 20 68 -1.233504e+02 + 20 69 -6.782280e+01 + 20 70 3.552714e-15 + 20 71 8.008751e+01 + 20 72 0.000000e+00 + 20 73 -2.249313e+02 + 20 74 -2.392806e+02 + 20 75 3.552714e-15 + 20 76 -6.782280e+01 + 20 77 -1.233504e+02 + 20 78 -6.782280e+01 + 20 79 -6.782280e+01 + 20 80 -1.233504e+02 + 20 81 6.782280e+01 + 21 1 6.782280e+01 + 21 2 6.782280e+01 + 21 3 -1.233504e+02 + 21 4 0.000000e+00 + 21 5 0.000000e+00 + 21 6 8.008751e+01 + 21 7 -7.105427e-15 + 21 8 0.000000e+00 + 21 9 3.890313e+02 + 21 10 2.249313e+02 + 21 11 -3.552714e-15 + 21 12 -2.392806e+02 + 21 13 0.000000e+00 + 21 14 2.249313e+02 + 21 15 -2.392806e+02 + 21 16 1.421085e-14 + 21 17 7.105427e-15 + 21 18 3.890313e+02 + 21 19 0.000000e+00 + 21 20 0.000000e+00 + 21 21 2.778653e+03 + 21 22 0.000000e+00 + 21 23 2.131628e-14 + 21 24 -4.145401e+02 + 21 25 -6.782280e+01 + 21 26 -6.782280e+01 + 21 27 -1.233504e+02 + 21 28 -2.249313e+02 + 21 29 0.000000e+00 + 21 30 -2.392806e+02 + 21 31 0.000000e+00 + 21 32 -2.249313e+02 + 21 33 -2.392806e+02 + 21 34 -1.065814e-14 + 21 35 3.552714e-15 + 21 36 -4.145401e+02 + 21 37 -3.552714e-15 + 21 38 0.000000e+00 + 21 39 8.008751e+01 + 21 40 6.782280e+01 + 21 41 -6.782280e+01 + 21 42 -1.233504e+02 + 21 43 0.000000e+00 + 21 44 0.000000e+00 + 21 45 3.890313e+02 + 21 46 0.000000e+00 + 21 47 -2.249313e+02 + 21 48 -2.392806e+02 + 21 49 -6.782280e+01 + 21 50 6.782280e+01 + 21 51 -1.233504e+02 + 21 52 3.552714e-15 + 21 53 2.249313e+02 + 21 54 -2.392806e+02 + 21 55 -6.782280e+01 + 21 56 6.782280e+01 + 21 57 -1.233504e+02 + 21 58 -3.552714e-15 + 21 59 0.000000e+00 + 21 60 8.008751e+01 + 21 61 7.105427e-15 + 21 62 -1.421085e-14 + 21 63 3.890313e+02 + 21 64 -2.249313e+02 + 21 65 -3.552714e-15 + 21 66 -2.392806e+02 + 21 67 6.782280e+01 + 21 68 -6.782280e+01 + 21 69 -1.233504e+02 + 21 70 2.249313e+02 + 21 71 3.552714e-15 + 21 72 -2.392806e+02 + 21 73 0.000000e+00 + 21 74 3.552714e-15 + 21 75 8.008751e+01 + 21 76 -6.782280e+01 + 21 77 -6.782280e+01 + 21 78 -1.233504e+02 + 21 79 6.782280e+01 + 21 80 6.782280e+01 + 21 81 -1.233504e+02 + 22 1 -1.196403e+02 + 22 2 -1.124657e+02 + 22 3 1.974588e+01 + 22 4 -1.233504e+02 + 22 5 -6.782280e+01 + 22 6 -6.782280e+01 + 22 7 -2.392806e+02 + 22 8 -3.552714e-15 + 22 9 -2.249313e+02 + 22 10 -2.072700e+02 + 22 11 1.776357e-14 + 22 12 3.262363e+01 + 22 13 1.945157e+02 + 22 14 3.552714e-15 + 22 15 -1.421085e-14 + 22 16 8.008751e+01 + 22 17 0.000000e+00 + 22 18 3.552714e-15 + 22 19 3.890313e+02 + 22 20 1.421085e-14 + 22 21 0.000000e+00 + 22 22 1.389326e+03 + 22 23 0.000000e+00 + 22 24 0.000000e+00 + 22 37 -1.233504e+02 + 22 38 6.782280e+01 + 22 39 -6.782280e+01 + 22 40 -1.196403e+02 + 22 41 1.124657e+02 + 22 42 1.974588e+01 + 22 43 8.008751e+01 + 22 44 3.552714e-15 + 22 45 3.552714e-15 + 22 46 1.945157e+02 + 22 47 3.552714e-15 + 22 48 1.421085e-14 + 22 55 -1.196403e+02 + 22 56 1.124657e+02 + 22 57 -1.974588e+01 + 22 58 -1.233504e+02 + 22 59 6.782280e+01 + 22 60 6.782280e+01 + 22 61 -2.392806e+02 + 22 62 3.552714e-15 + 22 63 2.249313e+02 + 22 64 -2.072700e+02 + 22 65 -3.552714e-15 + 22 66 -3.262363e+01 + 22 73 -1.233504e+02 + 22 74 -6.782280e+01 + 22 75 6.782280e+01 + 22 76 -1.196403e+02 + 22 77 -1.124657e+02 + 22 78 -1.974588e+01 + 23 1 -1.124657e+02 + 23 2 -1.196403e+02 + 23 3 1.974588e+01 + 23 4 -6.782280e+01 + 23 5 -1.233504e+02 + 23 6 -6.782280e+01 + 23 7 3.552714e-15 + 23 8 8.008751e+01 + 23 9 7.105427e-15 + 23 10 -7.105427e-15 + 23 11 1.945157e+02 + 23 12 0.000000e+00 + 23 13 1.421085e-14 + 23 14 -2.072700e+02 + 23 15 3.262363e+01 + 23 16 -3.552714e-15 + 23 17 -2.392806e+02 + 23 18 -2.249313e+02 + 23 19 1.421085e-14 + 23 20 3.890313e+02 + 23 21 2.131628e-14 + 23 22 0.000000e+00 + 23 23 1.389326e+03 + 23 24 -1.421085e-14 + 23 37 6.782280e+01 + 23 38 -1.233504e+02 + 23 39 6.782280e+01 + 23 40 1.124657e+02 + 23 41 -1.196403e+02 + 23 42 -1.974588e+01 + 23 43 3.552714e-15 + 23 44 -2.392806e+02 + 23 45 2.249313e+02 + 23 46 0.000000e+00 + 23 47 -2.072700e+02 + 23 48 -3.262363e+01 + 23 55 1.124657e+02 + 23 56 -1.196403e+02 + 23 57 1.974588e+01 + 23 58 6.782280e+01 + 23 59 -1.233504e+02 + 23 60 -6.782280e+01 + 23 61 7.105427e-15 + 23 62 8.008751e+01 + 23 63 0.000000e+00 + 23 64 1.776357e-14 + 23 65 1.945157e+02 + 23 66 0.000000e+00 + 23 73 -6.782280e+01 + 23 74 -1.233504e+02 + 23 75 6.782280e+01 + 23 76 -1.124657e+02 + 23 77 -1.196403e+02 + 23 78 -1.974588e+01 + 24 1 -1.974588e+01 + 24 2 -1.974588e+01 + 24 3 4.004375e+01 + 24 4 -6.782280e+01 + 24 5 -6.782280e+01 + 24 6 -1.233504e+02 + 24 7 -2.249313e+02 + 24 8 3.552714e-15 + 24 9 -2.392806e+02 + 24 10 -3.262363e+01 + 24 11 0.000000e+00 + 24 12 1.945157e+02 + 24 13 0.000000e+00 + 24 14 -3.262363e+01 + 24 15 1.945157e+02 + 24 16 3.552714e-15 + 24 17 -2.249313e+02 + 24 18 -2.392806e+02 + 24 19 -3.552714e-15 + 24 20 7.105427e-15 + 24 21 -4.145401e+02 + 24 22 0.000000e+00 + 24 23 -1.421085e-14 + 24 24 1.389326e+03 + 24 37 -6.782280e+01 + 24 38 6.782280e+01 + 24 39 -1.233504e+02 + 24 40 -1.974588e+01 + 24 41 1.974588e+01 + 24 42 4.004375e+01 + 24 43 3.552714e-15 + 24 44 2.249313e+02 + 24 45 -2.392806e+02 + 24 46 -2.842171e-14 + 24 47 3.262363e+01 + 24 48 1.945157e+02 + 24 55 1.974588e+01 + 24 56 -1.974588e+01 + 24 57 4.004375e+01 + 24 58 6.782280e+01 + 24 59 -6.782280e+01 + 24 60 -1.233504e+02 + 24 61 2.249313e+02 + 24 62 3.552714e-15 + 24 63 -2.392806e+02 + 24 64 3.262363e+01 + 24 65 0.000000e+00 + 24 66 1.945157e+02 + 24 73 6.782280e+01 + 24 74 6.782280e+01 + 24 75 -1.233504e+02 + 24 76 1.974588e+01 + 24 77 1.974588e+01 + 24 78 4.004375e+01 + 25 4 9.725783e+01 + 25 5 6.782280e+01 + 25 6 -1.631181e+01 + 25 7 4.004375e+01 + 25 8 -1.974588e+01 + 25 9 -1.974588e+01 + 25 16 -1.196403e+02 + 25 17 1.974588e+01 + 25 18 -1.124657e+02 + 25 19 -1.233504e+02 + 25 20 -6.782280e+01 + 25 21 -6.782280e+01 + 25 25 3.473316e+02 + 25 26 1.124657e+02 + 25 27 1.124657e+02 + 25 28 9.725783e+01 + 25 29 -1.631181e+01 + 25 30 6.782280e+01 + 25 31 -1.036350e+02 + 25 32 1.631181e+01 + 25 33 1.631181e+01 + 25 34 -1.196403e+02 + 25 35 -1.124657e+02 + 25 36 1.974588e+01 + 26 4 6.782280e+01 + 26 5 9.725783e+01 + 26 6 -1.631181e+01 + 26 7 1.974588e+01 + 26 8 -1.196403e+02 + 26 9 -1.124657e+02 + 26 16 -1.974588e+01 + 26 17 4.004375e+01 + 26 18 -1.974588e+01 + 26 19 -6.782280e+01 + 26 20 -1.233504e+02 + 26 21 -6.782280e+01 + 26 25 1.124657e+02 + 26 26 3.473316e+02 + 26 27 1.124657e+02 + 26 28 1.631181e+01 + 26 29 -1.036350e+02 + 26 30 1.631181e+01 + 26 31 -1.631181e+01 + 26 32 9.725783e+01 + 26 33 6.782280e+01 + 26 34 -1.124657e+02 + 26 35 -1.196403e+02 + 26 36 1.974588e+01 + 27 4 1.631181e+01 + 27 5 1.631181e+01 + 27 6 -1.036350e+02 + 27 7 1.974588e+01 + 27 8 -1.124657e+02 + 27 9 -1.196403e+02 + 27 16 -1.124657e+02 + 27 17 1.974588e+01 + 27 18 -1.196403e+02 + 27 19 -6.782280e+01 + 27 20 -6.782280e+01 + 27 21 -1.233504e+02 + 27 25 1.124657e+02 + 27 26 1.124657e+02 + 27 27 3.473316e+02 + 27 28 6.782280e+01 + 27 29 -1.631181e+01 + 27 30 9.725783e+01 + 27 31 -1.631181e+01 + 27 32 6.782280e+01 + 27 33 9.725783e+01 + 27 34 -1.974588e+01 + 27 35 -1.974588e+01 + 27 36 4.004375e+01 + 28 4 4.004375e+01 + 28 5 1.974588e+01 + 28 6 -1.974588e+01 + 28 7 1.945157e+02 + 28 8 1.421085e-14 + 28 9 -3.262363e+01 + 28 16 -1.233504e+02 + 28 17 6.782280e+01 + 28 18 -6.782280e+01 + 28 19 -2.392806e+02 + 28 20 0.000000e+00 + 28 21 -2.249313e+02 + 28 25 9.725783e+01 + 28 26 1.631181e+01 + 28 27 6.782280e+01 + 28 28 6.946632e+02 + 28 29 0.000000e+00 + 28 30 2.249313e+02 + 28 31 -1.196403e+02 + 28 32 1.124657e+02 + 28 33 1.974588e+01 + 28 34 -2.072700e+02 + 28 35 7.105427e-15 + 28 36 3.262363e+01 + 28 37 4.004375e+01 + 28 38 -1.974588e+01 + 28 39 -1.974588e+01 + 28 43 -1.233504e+02 + 28 44 -6.782280e+01 + 28 45 -6.782280e+01 + 28 49 9.725783e+01 + 28 50 -1.631181e+01 + 28 51 6.782280e+01 + 28 52 -1.196403e+02 + 28 53 -1.124657e+02 + 28 54 1.974588e+01 + 29 4 -1.974588e+01 + 29 5 -1.196403e+02 + 29 6 1.124657e+02 + 29 7 1.421085e-14 + 29 8 1.945157e+02 + 29 9 1.065814e-14 + 29 16 6.782280e+01 + 29 17 -1.233504e+02 + 29 18 6.782280e+01 + 29 19 0.000000e+00 + 29 20 8.008751e+01 + 29 21 0.000000e+00 + 29 25 -1.631181e+01 + 29 26 -1.036350e+02 + 29 27 -1.631181e+01 + 29 28 0.000000e+00 + 29 29 6.946632e+02 + 29 30 1.421085e-14 + 29 31 1.124657e+02 + 29 32 -1.196403e+02 + 29 33 -1.974588e+01 + 29 34 0.000000e+00 + 29 35 1.945157e+02 + 29 36 0.000000e+00 + 29 37 1.974588e+01 + 29 38 -1.196403e+02 + 29 39 -1.124657e+02 + 29 43 -6.782280e+01 + 29 44 -1.233504e+02 + 29 45 -6.782280e+01 + 29 49 1.631181e+01 + 29 50 -1.036350e+02 + 29 51 1.631181e+01 + 29 52 -1.124657e+02 + 29 53 -1.196403e+02 + 29 54 1.974588e+01 + 30 4 1.974588e+01 + 30 5 1.124657e+02 + 30 6 -1.196403e+02 + 30 7 3.262363e+01 + 30 8 7.105427e-15 + 30 9 -2.072700e+02 + 30 16 -6.782280e+01 + 30 17 6.782280e+01 + 30 18 -1.233504e+02 + 30 19 -2.249313e+02 + 30 20 7.105427e-15 + 30 21 -2.392806e+02 + 30 25 6.782280e+01 + 30 26 1.631181e+01 + 30 27 9.725783e+01 + 30 28 2.249313e+02 + 30 29 1.421085e-14 + 30 30 6.946632e+02 + 30 31 -1.974588e+01 + 30 32 1.974588e+01 + 30 33 4.004375e+01 + 30 34 -3.262363e+01 + 30 35 0.000000e+00 + 30 36 1.945157e+02 + 30 37 1.974588e+01 + 30 38 -1.124657e+02 + 30 39 -1.196403e+02 + 30 43 -6.782280e+01 + 30 44 -6.782280e+01 + 30 45 -1.233504e+02 + 30 49 6.782280e+01 + 30 50 -1.631181e+01 + 30 51 9.725783e+01 + 30 52 -1.974588e+01 + 30 53 -1.974588e+01 + 30 54 4.004375e+01 + 31 4 -1.196403e+02 + 31 5 -1.974588e+01 + 31 6 1.124657e+02 + 31 7 -1.233504e+02 + 31 8 6.782280e+01 + 31 9 6.782280e+01 + 31 16 1.945157e+02 + 31 17 1.421085e-14 + 31 18 7.105427e-15 + 31 19 8.008751e+01 + 31 20 7.105427e-15 + 31 21 0.000000e+00 + 31 25 -1.036350e+02 + 31 26 -1.631181e+01 + 31 27 -1.631181e+01 + 31 28 -1.196403e+02 + 31 29 1.124657e+02 + 31 30 -1.974588e+01 + 31 31 6.946632e+02 + 31 32 0.000000e+00 + 31 33 0.000000e+00 + 31 34 1.945157e+02 + 31 35 -7.105427e-15 + 31 36 -1.421085e-14 + 31 58 -1.196403e+02 + 31 59 1.974588e+01 + 31 60 -1.124657e+02 + 31 61 -1.233504e+02 + 31 62 -6.782280e+01 + 31 63 -6.782280e+01 + 31 67 -1.036350e+02 + 31 68 1.631181e+01 + 31 69 1.631181e+01 + 31 70 -1.196403e+02 + 31 71 -1.124657e+02 + 31 72 1.974588e+01 + 32 4 1.974588e+01 + 32 5 4.004375e+01 + 32 6 -1.974588e+01 + 32 7 6.782280e+01 + 32 8 -1.233504e+02 + 32 9 -6.782280e+01 + 32 16 1.421085e-14 + 32 17 1.945157e+02 + 32 18 -3.262363e+01 + 32 19 0.000000e+00 + 32 20 -2.392806e+02 + 32 21 -2.249313e+02 + 32 25 1.631181e+01 + 32 26 9.725783e+01 + 32 27 6.782280e+01 + 32 28 1.124657e+02 + 32 29 -1.196403e+02 + 32 30 1.974588e+01 + 32 31 0.000000e+00 + 32 32 6.946632e+02 + 32 33 2.249313e+02 + 32 34 3.552714e-15 + 32 35 -2.072700e+02 + 32 36 3.262363e+01 + 32 58 -1.974588e+01 + 32 59 4.004375e+01 + 32 60 -1.974588e+01 + 32 61 -6.782280e+01 + 32 62 -1.233504e+02 + 32 63 -6.782280e+01 + 32 67 -1.631181e+01 + 32 68 9.725783e+01 + 32 69 6.782280e+01 + 32 70 -1.124657e+02 + 32 71 -1.196403e+02 + 32 72 1.974588e+01 + 33 4 1.124657e+02 + 33 5 1.974588e+01 + 33 6 -1.196403e+02 + 33 7 6.782280e+01 + 33 8 -6.782280e+01 + 33 9 -1.233504e+02 + 33 16 3.552714e-15 + 33 17 3.262363e+01 + 33 18 -2.072700e+02 + 33 19 0.000000e+00 + 33 20 -2.249313e+02 + 33 21 -2.392806e+02 + 33 25 1.631181e+01 + 33 26 6.782280e+01 + 33 27 9.725783e+01 + 33 28 1.974588e+01 + 33 29 -1.974588e+01 + 33 30 4.004375e+01 + 33 31 0.000000e+00 + 33 32 2.249313e+02 + 33 33 6.946632e+02 + 33 34 2.842171e-14 + 33 35 -3.262363e+01 + 33 36 1.945157e+02 + 33 58 -1.124657e+02 + 33 59 1.974588e+01 + 33 60 -1.196403e+02 + 33 61 -6.782280e+01 + 33 62 -6.782280e+01 + 33 63 -1.233504e+02 + 33 67 -1.631181e+01 + 33 68 6.782280e+01 + 33 69 9.725783e+01 + 33 70 -1.974588e+01 + 33 71 -1.974588e+01 + 33 72 4.004375e+01 + 34 4 -1.233504e+02 + 34 5 -6.782280e+01 + 34 6 6.782280e+01 + 34 7 -2.392806e+02 + 34 8 3.552714e-15 + 34 9 2.249313e+02 + 34 16 8.008751e+01 + 34 17 0.000000e+00 + 34 18 7.105427e-15 + 34 19 3.890313e+02 + 34 20 1.421085e-14 + 34 21 -1.065814e-14 + 34 25 -1.196403e+02 + 34 26 -1.124657e+02 + 34 27 -1.974588e+01 + 34 28 -2.072700e+02 + 34 29 0.000000e+00 + 34 30 -3.262363e+01 + 34 31 1.945157e+02 + 34 32 3.552714e-15 + 34 33 2.842171e-14 + 34 34 1.389326e+03 + 34 35 0.000000e+00 + 34 36 0.000000e+00 + 34 37 -1.233504e+02 + 34 38 6.782280e+01 + 34 39 6.782280e+01 + 34 43 8.008751e+01 + 34 44 0.000000e+00 + 34 45 0.000000e+00 + 34 49 -1.196403e+02 + 34 50 1.124657e+02 + 34 51 -1.974588e+01 + 34 52 1.945157e+02 + 34 53 -3.552714e-15 + 34 54 -1.421085e-14 + 34 58 -1.233504e+02 + 34 59 6.782280e+01 + 34 60 -6.782280e+01 + 34 61 -2.392806e+02 + 34 62 3.552714e-15 + 34 63 -2.249313e+02 + 34 67 -1.196403e+02 + 34 68 1.124657e+02 + 34 69 1.974588e+01 + 34 70 -2.072700e+02 + 34 71 3.552714e-15 + 34 72 3.262363e+01 + 34 73 -1.233504e+02 + 34 74 -6.782280e+01 + 34 75 -6.782280e+01 + 34 79 -1.196403e+02 + 34 80 -1.124657e+02 + 34 81 1.974588e+01 + 35 4 -6.782280e+01 + 35 5 -1.233504e+02 + 35 6 6.782280e+01 + 35 7 0.000000e+00 + 35 8 8.008751e+01 + 35 9 3.552714e-15 + 35 16 -7.105427e-15 + 35 17 -2.392806e+02 + 35 18 2.249313e+02 + 35 19 1.421085e-14 + 35 20 3.890313e+02 + 35 21 3.552714e-15 + 35 25 -1.124657e+02 + 35 26 -1.196403e+02 + 35 27 -1.974588e+01 + 35 28 7.105427e-15 + 35 29 1.945157e+02 + 35 30 0.000000e+00 + 35 31 -7.105427e-15 + 35 32 -2.072700e+02 + 35 33 -3.262363e+01 + 35 34 0.000000e+00 + 35 35 1.389326e+03 + 35 36 1.421085e-14 + 35 37 6.782280e+01 + 35 38 -1.233504e+02 + 35 39 -6.782280e+01 + 35 43 3.552714e-15 + 35 44 -2.392806e+02 + 35 45 -2.249313e+02 + 35 49 1.124657e+02 + 35 50 -1.196403e+02 + 35 51 1.974588e+01 + 35 52 -3.552714e-15 + 35 53 -2.072700e+02 + 35 54 3.262363e+01 + 35 58 6.782280e+01 + 35 59 -1.233504e+02 + 35 60 6.782280e+01 + 35 61 3.552714e-15 + 35 62 8.008751e+01 + 35 63 3.552714e-15 + 35 67 1.124657e+02 + 35 68 -1.196403e+02 + 35 69 -1.974588e+01 + 35 70 3.552714e-15 + 35 71 1.945157e+02 + 35 72 0.000000e+00 + 35 73 -6.782280e+01 + 35 74 -1.233504e+02 + 35 75 -6.782280e+01 + 35 79 -1.124657e+02 + 35 80 -1.196403e+02 + 35 81 1.974588e+01 + 36 4 6.782280e+01 + 36 5 6.782280e+01 + 36 6 -1.233504e+02 + 36 7 2.249313e+02 + 36 8 -3.552714e-15 + 36 9 -2.392806e+02 + 36 16 -3.552714e-15 + 36 17 2.249313e+02 + 36 18 -2.392806e+02 + 36 19 1.065814e-14 + 36 20 2.131628e-14 + 36 21 -4.145401e+02 + 36 25 1.974588e+01 + 36 26 1.974588e+01 + 36 27 4.004375e+01 + 36 28 3.262363e+01 + 36 29 0.000000e+00 + 36 30 1.945157e+02 + 36 31 -1.421085e-14 + 36 32 3.262363e+01 + 36 33 1.945157e+02 + 36 34 0.000000e+00 + 36 35 1.421085e-14 + 36 36 1.389326e+03 + 36 37 6.782280e+01 + 36 38 -6.782280e+01 + 36 39 -1.233504e+02 + 36 43 0.000000e+00 + 36 44 -2.249313e+02 + 36 45 -2.392806e+02 + 36 49 1.974588e+01 + 36 50 -1.974588e+01 + 36 51 4.004375e+01 + 36 52 1.421085e-14 + 36 53 -3.262363e+01 + 36 54 1.945157e+02 + 36 58 -6.782280e+01 + 36 59 6.782280e+01 + 36 60 -1.233504e+02 + 36 61 -2.249313e+02 + 36 62 -3.552714e-15 + 36 63 -2.392806e+02 + 36 67 -1.974588e+01 + 36 68 1.974588e+01 + 36 69 4.004375e+01 + 36 70 -3.262363e+01 + 36 71 -1.421085e-14 + 36 72 1.945157e+02 + 36 73 -6.782280e+01 + 36 74 -6.782280e+01 + 36 75 -1.233504e+02 + 36 79 -1.974588e+01 + 36 80 -1.974588e+01 + 36 81 4.004375e+01 + 37 7 1.945157e+02 + 37 8 3.262363e+01 + 37 9 0.000000e+00 + 37 10 4.004375e+01 + 37 11 1.974588e+01 + 37 12 -1.974588e+01 + 37 19 -2.392806e+02 + 37 20 2.249313e+02 + 37 21 -3.552714e-15 + 37 22 -1.233504e+02 + 37 23 6.782280e+01 + 37 24 -6.782280e+01 + 37 28 4.004375e+01 + 37 29 1.974588e+01 + 37 30 1.974588e+01 + 37 34 -1.233504e+02 + 37 35 6.782280e+01 + 37 36 6.782280e+01 + 37 37 6.946632e+02 + 37 38 -2.249313e+02 + 37 39 0.000000e+00 + 37 40 9.725783e+01 + 37 41 -6.782280e+01 + 37 42 -1.631181e+01 + 37 43 -2.072700e+02 + 37 44 -3.262363e+01 + 37 45 3.552714e-15 + 37 46 -1.196403e+02 + 37 47 -1.974588e+01 + 37 48 -1.124657e+02 + 37 49 9.725783e+01 + 37 50 -6.782280e+01 + 37 51 1.631181e+01 + 37 52 -1.196403e+02 + 37 53 -1.974588e+01 + 37 54 1.124657e+02 + 38 7 -3.262363e+01 + 38 8 -2.072700e+02 + 38 9 0.000000e+00 + 38 10 -1.974588e+01 + 38 11 -1.196403e+02 + 38 12 1.124657e+02 + 38 19 2.249313e+02 + 38 20 -2.392806e+02 + 38 21 0.000000e+00 + 38 22 6.782280e+01 + 38 23 -1.233504e+02 + 38 24 6.782280e+01 + 38 28 -1.974588e+01 + 38 29 -1.196403e+02 + 38 30 -1.124657e+02 + 38 34 6.782280e+01 + 38 35 -1.233504e+02 + 38 36 -6.782280e+01 + 38 37 -2.249313e+02 + 38 38 6.946632e+02 + 38 39 0.000000e+00 + 38 40 -6.782280e+01 + 38 41 9.725783e+01 + 38 42 1.631181e+01 + 38 43 3.262363e+01 + 38 44 1.945157e+02 + 38 45 1.421085e-14 + 38 46 1.974588e+01 + 38 47 4.004375e+01 + 38 48 1.974588e+01 + 38 49 -6.782280e+01 + 38 50 9.725783e+01 + 38 51 -1.631181e+01 + 38 52 1.974588e+01 + 38 53 4.004375e+01 + 38 54 -1.974588e+01 + 39 7 1.421085e-14 + 39 8 0.000000e+00 + 39 9 1.945157e+02 + 39 10 1.974588e+01 + 39 11 1.124657e+02 + 39 12 -1.196403e+02 + 39 19 -3.552714e-15 + 39 20 0.000000e+00 + 39 21 8.008751e+01 + 39 22 -6.782280e+01 + 39 23 6.782280e+01 + 39 24 -1.233504e+02 + 39 28 -1.974588e+01 + 39 29 -1.124657e+02 + 39 30 -1.196403e+02 + 39 34 6.782280e+01 + 39 35 -6.782280e+01 + 39 36 -1.233504e+02 + 39 37 0.000000e+00 + 39 38 0.000000e+00 + 39 39 6.946632e+02 + 39 40 1.631181e+01 + 39 41 -1.631181e+01 + 39 42 -1.036350e+02 + 39 43 7.105427e-15 + 39 44 1.421085e-14 + 39 45 1.945157e+02 + 39 46 -1.124657e+02 + 39 47 -1.974588e+01 + 39 48 -1.196403e+02 + 39 49 -1.631181e+01 + 39 50 1.631181e+01 + 39 51 -1.036350e+02 + 39 52 1.124657e+02 + 39 53 1.974588e+01 + 39 54 -1.196403e+02 + 40 7 4.004375e+01 + 40 8 1.974588e+01 + 40 9 1.974588e+01 + 40 10 9.725783e+01 + 40 11 1.631181e+01 + 40 12 -6.782280e+01 + 40 19 -1.233504e+02 + 40 20 6.782280e+01 + 40 21 6.782280e+01 + 40 22 -1.196403e+02 + 40 23 1.124657e+02 + 40 24 -1.974588e+01 + 40 37 9.725783e+01 + 40 38 -6.782280e+01 + 40 39 1.631181e+01 + 40 40 3.473316e+02 + 40 41 -1.124657e+02 + 40 42 -1.124657e+02 + 40 43 -1.196403e+02 + 40 44 -1.974588e+01 + 40 45 1.124657e+02 + 40 46 -1.036350e+02 + 40 47 -1.631181e+01 + 40 48 -1.631181e+01 + 41 7 -1.974588e+01 + 41 8 -1.196403e+02 + 41 9 -1.124657e+02 + 41 10 -1.631181e+01 + 41 11 -1.036350e+02 + 41 12 1.631181e+01 + 41 19 6.782280e+01 + 41 20 -1.233504e+02 + 41 21 -6.782280e+01 + 41 22 1.124657e+02 + 41 23 -1.196403e+02 + 41 24 1.974588e+01 + 41 37 -6.782280e+01 + 41 38 9.725783e+01 + 41 39 -1.631181e+01 + 41 40 -1.124657e+02 + 41 41 3.473316e+02 + 41 42 1.124657e+02 + 41 43 1.974588e+01 + 41 44 4.004375e+01 + 41 45 -1.974588e+01 + 41 46 1.631181e+01 + 41 47 9.725783e+01 + 41 48 6.782280e+01 + 42 7 -1.974588e+01 + 42 8 -1.124657e+02 + 42 9 -1.196403e+02 + 42 10 -6.782280e+01 + 42 11 -1.631181e+01 + 42 12 9.725783e+01 + 42 19 6.782280e+01 + 42 20 -6.782280e+01 + 42 21 -1.233504e+02 + 42 22 1.974588e+01 + 42 23 -1.974588e+01 + 42 24 4.004375e+01 + 42 37 -1.631181e+01 + 42 38 1.631181e+01 + 42 39 -1.036350e+02 + 42 40 -1.124657e+02 + 42 41 1.124657e+02 + 42 42 3.473316e+02 + 42 43 1.124657e+02 + 42 44 1.974588e+01 + 42 45 -1.196403e+02 + 42 46 1.631181e+01 + 42 47 6.782280e+01 + 42 48 9.725783e+01 + 43 7 -2.392806e+02 + 43 8 -2.249313e+02 + 43 9 0.000000e+00 + 43 10 -1.233504e+02 + 43 11 -6.782280e+01 + 43 12 6.782280e+01 + 43 19 3.890313e+02 + 43 20 7.105427e-15 + 43 21 0.000000e+00 + 43 22 8.008751e+01 + 43 23 3.552714e-15 + 43 24 3.552714e-15 + 43 28 -1.233504e+02 + 43 29 -6.782280e+01 + 43 30 -6.782280e+01 + 43 34 8.008751e+01 + 43 35 3.552714e-15 + 43 36 0.000000e+00 + 43 37 -2.072700e+02 + 43 38 3.262363e+01 + 43 39 7.105427e-15 + 43 40 -1.196403e+02 + 43 41 1.974588e+01 + 43 42 1.124657e+02 + 43 43 1.389326e+03 + 43 44 0.000000e+00 + 43 45 0.000000e+00 + 43 46 1.945157e+02 + 43 47 -1.421085e-14 + 43 48 -7.105427e-15 + 43 49 -1.196403e+02 + 43 50 1.974588e+01 + 43 51 -1.124657e+02 + 43 52 1.945157e+02 + 43 53 -2.842171e-14 + 43 54 7.105427e-15 + 43 61 -2.392806e+02 + 43 62 2.249313e+02 + 43 63 0.000000e+00 + 43 64 -1.233504e+02 + 43 65 6.782280e+01 + 43 66 -6.782280e+01 + 43 70 -1.233504e+02 + 43 71 6.782280e+01 + 43 72 6.782280e+01 + 43 73 -2.072700e+02 + 43 74 -3.262363e+01 + 43 75 3.552714e-15 + 43 76 -1.196403e+02 + 43 77 -1.974588e+01 + 43 78 -1.124657e+02 + 43 79 -1.196403e+02 + 43 80 -1.974588e+01 + 43 81 1.124657e+02 + 44 7 -2.249313e+02 + 44 8 -2.392806e+02 + 44 9 0.000000e+00 + 44 10 -6.782280e+01 + 44 11 -1.233504e+02 + 44 12 6.782280e+01 + 44 19 7.105427e-15 + 44 20 -4.145401e+02 + 44 21 0.000000e+00 + 44 22 3.552714e-15 + 44 23 -2.392806e+02 + 44 24 2.249313e+02 + 44 28 -6.782280e+01 + 44 29 -1.233504e+02 + 44 30 -6.782280e+01 + 44 34 0.000000e+00 + 44 35 -2.392806e+02 + 44 36 -2.249313e+02 + 44 37 -3.262363e+01 + 44 38 1.945157e+02 + 44 39 1.421085e-14 + 44 40 -1.974588e+01 + 44 41 4.004375e+01 + 44 42 1.974588e+01 + 44 43 0.000000e+00 + 44 44 1.389326e+03 + 44 45 0.000000e+00 + 44 46 -1.421085e-14 + 44 47 1.945157e+02 + 44 48 3.262363e+01 + 44 49 -1.974588e+01 + 44 50 4.004375e+01 + 44 51 -1.974588e+01 + 44 52 -1.421085e-14 + 44 53 1.945157e+02 + 44 54 -3.262363e+01 + 44 61 2.249313e+02 + 44 62 -2.392806e+02 + 44 63 0.000000e+00 + 44 64 6.782280e+01 + 44 65 -1.233504e+02 + 44 66 6.782280e+01 + 44 70 6.782280e+01 + 44 71 -1.233504e+02 + 44 72 -6.782280e+01 + 44 73 3.262363e+01 + 44 74 1.945157e+02 + 44 75 1.421085e-14 + 44 76 1.974588e+01 + 44 77 4.004375e+01 + 44 78 1.974588e+01 + 44 79 1.974588e+01 + 44 80 4.004375e+01 + 44 81 -1.974588e+01 + 45 7 0.000000e+00 + 45 8 3.552714e-15 + 45 9 8.008751e+01 + 45 10 6.782280e+01 + 45 11 6.782280e+01 + 45 12 -1.233504e+02 + 45 19 1.421085e-14 + 45 20 3.552714e-15 + 45 21 3.890313e+02 + 45 22 3.552714e-15 + 45 23 2.249313e+02 + 45 24 -2.392806e+02 + 45 28 -6.782280e+01 + 45 29 -6.782280e+01 + 45 30 -1.233504e+02 + 45 34 0.000000e+00 + 45 35 -2.249313e+02 + 45 36 -2.392806e+02 + 45 37 3.552714e-15 + 45 38 1.421085e-14 + 45 39 1.945157e+02 + 45 40 1.124657e+02 + 45 41 -1.974588e+01 + 45 42 -1.196403e+02 + 45 43 0.000000e+00 + 45 44 0.000000e+00 + 45 45 1.389326e+03 + 45 46 7.105427e-15 + 45 47 -3.262363e+01 + 45 48 -2.072700e+02 + 45 49 -1.124657e+02 + 45 50 1.974588e+01 + 45 51 -1.196403e+02 + 45 52 -7.105427e-15 + 45 53 3.262363e+01 + 45 54 -2.072700e+02 + 45 61 -3.552714e-15 + 45 62 0.000000e+00 + 45 63 8.008751e+01 + 45 64 -6.782280e+01 + 45 65 6.782280e+01 + 45 66 -1.233504e+02 + 45 70 6.782280e+01 + 45 71 -6.782280e+01 + 45 72 -1.233504e+02 + 45 73 7.105427e-15 + 45 74 0.000000e+00 + 45 75 1.945157e+02 + 45 76 -1.124657e+02 + 45 77 -1.974588e+01 + 45 78 -1.196403e+02 + 45 79 1.124657e+02 + 45 80 1.974588e+01 + 45 81 -1.196403e+02 + 46 7 -1.233504e+02 + 46 8 -6.782280e+01 + 46 9 -6.782280e+01 + 46 10 -1.196403e+02 + 46 11 -1.124657e+02 + 46 12 1.974588e+01 + 46 19 8.008751e+01 + 46 20 0.000000e+00 + 46 21 0.000000e+00 + 46 22 1.945157e+02 + 46 23 0.000000e+00 + 46 24 -2.842171e-14 + 46 37 -1.196403e+02 + 46 38 1.974588e+01 + 46 39 -1.124657e+02 + 46 40 -1.036350e+02 + 46 41 1.631181e+01 + 46 42 1.631181e+01 + 46 43 1.945157e+02 + 46 44 -1.421085e-14 + 46 45 7.105427e-15 + 46 46 6.946632e+02 + 46 47 0.000000e+00 + 46 48 0.000000e+00 + 46 61 -1.233504e+02 + 46 62 6.782280e+01 + 46 63 6.782280e+01 + 46 64 -1.196403e+02 + 46 65 1.124657e+02 + 46 66 -1.974588e+01 + 46 73 -1.196403e+02 + 46 74 -1.974588e+01 + 46 75 1.124657e+02 + 46 76 -1.036350e+02 + 46 77 -1.631181e+01 + 46 78 -1.631181e+01 + 47 7 -6.782280e+01 + 47 8 -1.233504e+02 + 47 9 -6.782280e+01 + 47 10 -1.124657e+02 + 47 11 -1.196403e+02 + 47 12 1.974588e+01 + 47 19 -3.552714e-15 + 47 20 -2.392806e+02 + 47 21 -2.249313e+02 + 47 22 3.552714e-15 + 47 23 -2.072700e+02 + 47 24 3.262363e+01 + 47 37 -1.974588e+01 + 47 38 4.004375e+01 + 47 39 -1.974588e+01 + 47 40 -1.631181e+01 + 47 41 9.725783e+01 + 47 42 6.782280e+01 + 47 43 -1.421085e-14 + 47 44 1.945157e+02 + 47 45 -3.262363e+01 + 47 46 0.000000e+00 + 47 47 6.946632e+02 + 47 48 2.249313e+02 + 47 61 6.782280e+01 + 47 62 -1.233504e+02 + 47 63 -6.782280e+01 + 47 64 1.124657e+02 + 47 65 -1.196403e+02 + 47 66 1.974588e+01 + 47 73 1.974588e+01 + 47 74 4.004375e+01 + 47 75 -1.974588e+01 + 47 76 1.631181e+01 + 47 77 9.725783e+01 + 47 78 6.782280e+01 + 48 7 -6.782280e+01 + 48 8 -6.782280e+01 + 48 9 -1.233504e+02 + 48 10 -1.974588e+01 + 48 11 -1.974588e+01 + 48 12 4.004375e+01 + 48 19 0.000000e+00 + 48 20 -2.249313e+02 + 48 21 -2.392806e+02 + 48 22 1.421085e-14 + 48 23 -3.262363e+01 + 48 24 1.945157e+02 + 48 37 -1.124657e+02 + 48 38 1.974588e+01 + 48 39 -1.196403e+02 + 48 40 -1.631181e+01 + 48 41 6.782280e+01 + 48 42 9.725783e+01 + 48 43 -7.105427e-15 + 48 44 3.262363e+01 + 48 45 -2.072700e+02 + 48 46 0.000000e+00 + 48 47 2.249313e+02 + 48 48 6.946632e+02 + 48 61 6.782280e+01 + 48 62 -6.782280e+01 + 48 63 -1.233504e+02 + 48 64 1.974588e+01 + 48 65 -1.974588e+01 + 48 66 4.004375e+01 + 48 73 1.124657e+02 + 48 74 1.974588e+01 + 48 75 -1.196403e+02 + 48 76 1.631181e+01 + 48 77 6.782280e+01 + 48 78 9.725783e+01 + 49 7 4.004375e+01 + 49 8 1.974588e+01 + 49 9 -1.974588e+01 + 49 19 -1.233504e+02 + 49 20 6.782280e+01 + 49 21 -6.782280e+01 + 49 28 9.725783e+01 + 49 29 1.631181e+01 + 49 30 6.782280e+01 + 49 34 -1.196403e+02 + 49 35 1.124657e+02 + 49 36 1.974588e+01 + 49 37 9.725783e+01 + 49 38 -6.782280e+01 + 49 39 -1.631181e+01 + 49 43 -1.196403e+02 + 49 44 -1.974588e+01 + 49 45 -1.124657e+02 + 49 49 3.473316e+02 + 49 50 -1.124657e+02 + 49 51 1.124657e+02 + 49 52 -1.036350e+02 + 49 53 -1.631181e+01 + 49 54 1.631181e+01 + 50 7 -1.974588e+01 + 50 8 -1.196403e+02 + 50 9 1.124657e+02 + 50 19 6.782280e+01 + 50 20 -1.233504e+02 + 50 21 6.782280e+01 + 50 28 -1.631181e+01 + 50 29 -1.036350e+02 + 50 30 -1.631181e+01 + 50 34 1.124657e+02 + 50 35 -1.196403e+02 + 50 36 -1.974588e+01 + 50 37 -6.782280e+01 + 50 38 9.725783e+01 + 50 39 1.631181e+01 + 50 43 1.974588e+01 + 50 44 4.004375e+01 + 50 45 1.974588e+01 + 50 49 -1.124657e+02 + 50 50 3.473316e+02 + 50 51 -1.124657e+02 + 50 52 1.631181e+01 + 50 53 9.725783e+01 + 50 54 -6.782280e+01 + 51 7 1.974588e+01 + 51 8 1.124657e+02 + 51 9 -1.196403e+02 + 51 19 -6.782280e+01 + 51 20 6.782280e+01 + 51 21 -1.233504e+02 + 51 28 6.782280e+01 + 51 29 1.631181e+01 + 51 30 9.725783e+01 + 51 34 -1.974588e+01 + 51 35 1.974588e+01 + 51 36 4.004375e+01 + 51 37 1.631181e+01 + 51 38 -1.631181e+01 + 51 39 -1.036350e+02 + 51 43 -1.124657e+02 + 51 44 -1.974588e+01 + 51 45 -1.196403e+02 + 51 49 1.124657e+02 + 51 50 -1.124657e+02 + 51 51 3.473316e+02 + 51 52 -1.631181e+01 + 51 53 -6.782280e+01 + 51 54 9.725783e+01 + 52 7 -1.233504e+02 + 52 8 -6.782280e+01 + 52 9 6.782280e+01 + 52 19 8.008751e+01 + 52 20 3.552714e-15 + 52 21 3.552714e-15 + 52 28 -1.196403e+02 + 52 29 -1.124657e+02 + 52 30 -1.974588e+01 + 52 34 1.945157e+02 + 52 35 -3.552714e-15 + 52 36 1.421085e-14 + 52 37 -1.196403e+02 + 52 38 1.974588e+01 + 52 39 1.124657e+02 + 52 43 1.945157e+02 + 52 44 -1.421085e-14 + 52 45 -7.105427e-15 + 52 49 -1.036350e+02 + 52 50 1.631181e+01 + 52 51 -1.631181e+01 + 52 52 6.946632e+02 + 52 53 0.000000e+00 + 52 54 0.000000e+00 + 52 61 -1.233504e+02 + 52 62 6.782280e+01 + 52 63 -6.782280e+01 + 52 70 -1.196403e+02 + 52 71 1.124657e+02 + 52 72 1.974588e+01 + 52 73 -1.196403e+02 + 52 74 -1.974588e+01 + 52 75 -1.124657e+02 + 52 79 -1.036350e+02 + 52 80 -1.631181e+01 + 52 81 1.631181e+01 + 53 7 -6.782280e+01 + 53 8 -1.233504e+02 + 53 9 6.782280e+01 + 53 19 0.000000e+00 + 53 20 -2.392806e+02 + 53 21 2.249313e+02 + 53 28 -1.124657e+02 + 53 29 -1.196403e+02 + 53 30 -1.974588e+01 + 53 34 -3.552714e-15 + 53 35 -2.072700e+02 + 53 36 -3.262363e+01 + 53 37 -1.974588e+01 + 53 38 4.004375e+01 + 53 39 1.974588e+01 + 53 43 -2.842171e-14 + 53 44 1.945157e+02 + 53 45 3.262363e+01 + 53 49 -1.631181e+01 + 53 50 9.725783e+01 + 53 51 -6.782280e+01 + 53 52 0.000000e+00 + 53 53 6.946632e+02 + 53 54 -2.249313e+02 + 53 61 6.782280e+01 + 53 62 -1.233504e+02 + 53 63 6.782280e+01 + 53 70 1.124657e+02 + 53 71 -1.196403e+02 + 53 72 -1.974588e+01 + 53 73 1.974588e+01 + 53 74 4.004375e+01 + 53 75 1.974588e+01 + 53 79 1.631181e+01 + 53 80 9.725783e+01 + 53 81 -6.782280e+01 + 54 7 6.782280e+01 + 54 8 6.782280e+01 + 54 9 -1.233504e+02 + 54 19 0.000000e+00 + 54 20 2.249313e+02 + 54 21 -2.392806e+02 + 54 28 1.974588e+01 + 54 29 1.974588e+01 + 54 30 4.004375e+01 + 54 34 -1.421085e-14 + 54 35 3.262363e+01 + 54 36 1.945157e+02 + 54 37 1.124657e+02 + 54 38 -1.974588e+01 + 54 39 -1.196403e+02 + 54 43 7.105427e-15 + 54 44 -3.262363e+01 + 54 45 -2.072700e+02 + 54 49 1.631181e+01 + 54 50 -6.782280e+01 + 54 51 9.725783e+01 + 54 52 0.000000e+00 + 54 53 -2.249313e+02 + 54 54 6.946632e+02 + 54 61 -6.782280e+01 + 54 62 6.782280e+01 + 54 63 -1.233504e+02 + 54 70 -1.974588e+01 + 54 71 1.974588e+01 + 54 72 4.004375e+01 + 54 73 -1.124657e+02 + 54 74 -1.974588e+01 + 54 75 -1.196403e+02 + 54 79 -1.631181e+01 + 54 80 -6.782280e+01 + 54 81 9.725783e+01 + 55 13 -1.036350e+02 + 55 14 -1.631181e+01 + 55 15 1.631181e+01 + 55 16 -1.196403e+02 + 55 17 -1.974588e+01 + 55 18 -1.124657e+02 + 55 19 -1.233504e+02 + 55 20 6.782280e+01 + 55 21 -6.782280e+01 + 55 22 -1.196403e+02 + 55 23 1.124657e+02 + 55 24 1.974588e+01 + 55 55 3.473316e+02 + 55 56 -1.124657e+02 + 55 57 1.124657e+02 + 55 58 9.725783e+01 + 55 59 -6.782280e+01 + 55 60 -1.631181e+01 + 55 61 4.004375e+01 + 55 62 1.974588e+01 + 55 63 -1.974588e+01 + 55 64 9.725783e+01 + 55 65 1.631181e+01 + 55 66 6.782280e+01 + 56 13 1.631181e+01 + 56 14 9.725783e+01 + 56 15 -6.782280e+01 + 56 16 1.974588e+01 + 56 17 4.004375e+01 + 56 18 1.974588e+01 + 56 19 6.782280e+01 + 56 20 -1.233504e+02 + 56 21 6.782280e+01 + 56 22 1.124657e+02 + 56 23 -1.196403e+02 + 56 24 -1.974588e+01 + 56 55 -1.124657e+02 + 56 56 3.473316e+02 + 56 57 -1.124657e+02 + 56 58 -6.782280e+01 + 56 59 9.725783e+01 + 56 60 1.631181e+01 + 56 61 -1.974588e+01 + 56 62 -1.196403e+02 + 56 63 1.124657e+02 + 56 64 -1.631181e+01 + 56 65 -1.036350e+02 + 56 66 -1.631181e+01 + 57 13 -1.631181e+01 + 57 14 -6.782280e+01 + 57 15 9.725783e+01 + 57 16 -1.124657e+02 + 57 17 -1.974588e+01 + 57 18 -1.196403e+02 + 57 19 -6.782280e+01 + 57 20 6.782280e+01 + 57 21 -1.233504e+02 + 57 22 -1.974588e+01 + 57 23 1.974588e+01 + 57 24 4.004375e+01 + 57 55 1.124657e+02 + 57 56 -1.124657e+02 + 57 57 3.473316e+02 + 57 58 1.631181e+01 + 57 59 -1.631181e+01 + 57 60 -1.036350e+02 + 57 61 1.974588e+01 + 57 62 1.124657e+02 + 57 63 -1.196403e+02 + 57 64 6.782280e+01 + 57 65 1.631181e+01 + 57 66 9.725783e+01 + 58 13 -1.196403e+02 + 58 14 -1.974588e+01 + 58 15 1.124657e+02 + 58 16 -2.072700e+02 + 58 17 -3.262363e+01 + 58 18 0.000000e+00 + 58 19 -2.392806e+02 + 58 20 2.249313e+02 + 58 21 -3.552714e-15 + 58 22 -1.233504e+02 + 58 23 6.782280e+01 + 58 24 6.782280e+01 + 58 31 -1.196403e+02 + 58 32 -1.974588e+01 + 58 33 -1.124657e+02 + 58 34 -1.233504e+02 + 58 35 6.782280e+01 + 58 36 -6.782280e+01 + 58 55 9.725783e+01 + 58 56 -6.782280e+01 + 58 57 1.631181e+01 + 58 58 6.946632e+02 + 58 59 -2.249313e+02 + 58 60 0.000000e+00 + 58 61 1.945157e+02 + 58 62 3.262363e+01 + 58 63 0.000000e+00 + 58 64 4.004375e+01 + 58 65 1.974588e+01 + 58 66 1.974588e+01 + 58 67 9.725783e+01 + 58 68 -6.782280e+01 + 58 69 -1.631181e+01 + 58 70 4.004375e+01 + 58 71 1.974588e+01 + 58 72 -1.974588e+01 + 59 13 1.974588e+01 + 59 14 4.004375e+01 + 59 15 -1.974588e+01 + 59 16 3.262363e+01 + 59 17 1.945157e+02 + 59 18 -1.421085e-14 + 59 19 2.249313e+02 + 59 20 -2.392806e+02 + 59 21 0.000000e+00 + 59 22 6.782280e+01 + 59 23 -1.233504e+02 + 59 24 -6.782280e+01 + 59 31 1.974588e+01 + 59 32 4.004375e+01 + 59 33 1.974588e+01 + 59 34 6.782280e+01 + 59 35 -1.233504e+02 + 59 36 6.782280e+01 + 59 55 -6.782280e+01 + 59 56 9.725783e+01 + 59 57 -1.631181e+01 + 59 58 -2.249313e+02 + 59 59 6.946632e+02 + 59 60 0.000000e+00 + 59 61 -3.262363e+01 + 59 62 -2.072700e+02 + 59 63 3.552714e-15 + 59 64 -1.974588e+01 + 59 65 -1.196403e+02 + 59 66 -1.124657e+02 + 59 67 -6.782280e+01 + 59 68 9.725783e+01 + 59 69 1.631181e+01 + 59 70 -1.974588e+01 + 59 71 -1.196403e+02 + 59 72 1.124657e+02 + 60 13 1.124657e+02 + 60 14 1.974588e+01 + 60 15 -1.196403e+02 + 60 16 3.552714e-15 + 60 17 -1.421085e-14 + 60 18 1.945157e+02 + 60 19 -3.552714e-15 + 60 20 3.552714e-15 + 60 21 8.008751e+01 + 60 22 6.782280e+01 + 60 23 -6.782280e+01 + 60 24 -1.233504e+02 + 60 31 -1.124657e+02 + 60 32 -1.974588e+01 + 60 33 -1.196403e+02 + 60 34 -6.782280e+01 + 60 35 6.782280e+01 + 60 36 -1.233504e+02 + 60 55 -1.631181e+01 + 60 56 1.631181e+01 + 60 57 -1.036350e+02 + 60 58 0.000000e+00 + 60 59 0.000000e+00 + 60 60 6.946632e+02 + 60 61 0.000000e+00 + 60 62 0.000000e+00 + 60 63 1.945157e+02 + 60 64 -1.974588e+01 + 60 65 -1.124657e+02 + 60 66 -1.196403e+02 + 60 67 1.631181e+01 + 60 68 -1.631181e+01 + 60 69 -1.036350e+02 + 60 70 1.974588e+01 + 60 71 1.124657e+02 + 60 72 -1.196403e+02 + 61 13 -1.233504e+02 + 61 14 -6.782280e+01 + 61 15 6.782280e+01 + 61 16 -2.392806e+02 + 61 17 -2.249313e+02 + 61 18 0.000000e+00 + 61 19 -4.145401e+02 + 61 20 1.776357e-14 + 61 21 7.105427e-15 + 61 22 -2.392806e+02 + 61 23 7.105427e-15 + 61 24 2.249313e+02 + 61 31 -1.233504e+02 + 61 32 -6.782280e+01 + 61 33 -6.782280e+01 + 61 34 -2.392806e+02 + 61 35 3.552714e-15 + 61 36 -2.249313e+02 + 61 43 -2.392806e+02 + 61 44 2.249313e+02 + 61 45 -3.552714e-15 + 61 46 -1.233504e+02 + 61 47 6.782280e+01 + 61 48 6.782280e+01 + 61 52 -1.233504e+02 + 61 53 6.782280e+01 + 61 54 -6.782280e+01 + 61 55 4.004375e+01 + 61 56 -1.974588e+01 + 61 57 1.974588e+01 + 61 58 1.945157e+02 + 61 59 -3.262363e+01 + 61 60 0.000000e+00 + 61 61 1.389326e+03 + 61 62 0.000000e+00 + 61 63 0.000000e+00 + 61 64 1.945157e+02 + 61 65 0.000000e+00 + 61 66 3.262363e+01 + 61 67 4.004375e+01 + 61 68 -1.974588e+01 + 61 69 -1.974588e+01 + 61 70 1.945157e+02 + 61 71 -1.421085e-14 + 61 72 -3.262363e+01 + 61 73 1.945157e+02 + 61 74 3.262363e+01 + 61 75 0.000000e+00 + 61 76 4.004375e+01 + 61 77 1.974588e+01 + 61 78 1.974588e+01 + 61 79 4.004375e+01 + 61 80 1.974588e+01 + 61 81 -1.974588e+01 + 62 13 -6.782280e+01 + 62 14 -1.233504e+02 + 62 15 6.782280e+01 + 62 16 -2.249313e+02 + 62 17 -2.392806e+02 + 62 18 3.552714e-15 + 62 19 0.000000e+00 + 62 20 3.890313e+02 + 62 21 -1.421085e-14 + 62 22 3.552714e-15 + 62 23 8.008751e+01 + 62 24 3.552714e-15 + 62 31 -6.782280e+01 + 62 32 -1.233504e+02 + 62 33 -6.782280e+01 + 62 34 3.552714e-15 + 62 35 8.008751e+01 + 62 36 -3.552714e-15 + 62 43 2.249313e+02 + 62 44 -2.392806e+02 + 62 45 0.000000e+00 + 62 46 6.782280e+01 + 62 47 -1.233504e+02 + 62 48 -6.782280e+01 + 62 52 6.782280e+01 + 62 53 -1.233504e+02 + 62 54 6.782280e+01 + 62 55 1.974588e+01 + 62 56 -1.196403e+02 + 62 57 1.124657e+02 + 62 58 3.262363e+01 + 62 59 -2.072700e+02 + 62 60 0.000000e+00 + 62 61 0.000000e+00 + 62 62 1.389326e+03 + 62 63 0.000000e+00 + 62 64 0.000000e+00 + 62 65 1.945157e+02 + 62 66 7.105427e-15 + 62 67 1.974588e+01 + 62 68 -1.196403e+02 + 62 69 -1.124657e+02 + 62 70 0.000000e+00 + 62 71 1.945157e+02 + 62 72 1.065814e-14 + 62 73 -3.262363e+01 + 62 74 -2.072700e+02 + 62 75 3.552714e-15 + 62 76 -1.974588e+01 + 62 77 -1.196403e+02 + 62 78 -1.124657e+02 + 62 79 -1.974588e+01 + 62 80 -1.196403e+02 + 62 81 1.124657e+02 + 63 13 6.782280e+01 + 63 14 6.782280e+01 + 63 15 -1.233504e+02 + 63 16 0.000000e+00 + 63 17 0.000000e+00 + 63 18 8.008751e+01 + 63 19 0.000000e+00 + 63 20 0.000000e+00 + 63 21 3.890313e+02 + 63 22 2.249313e+02 + 63 23 0.000000e+00 + 63 24 -2.392806e+02 + 63 31 -6.782280e+01 + 63 32 -6.782280e+01 + 63 33 -1.233504e+02 + 63 34 -2.249313e+02 + 63 35 3.552714e-15 + 63 36 -2.392806e+02 + 63 43 0.000000e+00 + 63 44 0.000000e+00 + 63 45 8.008751e+01 + 63 46 6.782280e+01 + 63 47 -6.782280e+01 + 63 48 -1.233504e+02 + 63 52 -6.782280e+01 + 63 53 6.782280e+01 + 63 54 -1.233504e+02 + 63 55 -1.974588e+01 + 63 56 1.124657e+02 + 63 57 -1.196403e+02 + 63 58 0.000000e+00 + 63 59 3.552714e-15 + 63 60 1.945157e+02 + 63 61 0.000000e+00 + 63 62 0.000000e+00 + 63 63 1.389326e+03 + 63 64 -3.262363e+01 + 63 65 1.065814e-14 + 63 66 -2.072700e+02 + 63 67 1.974588e+01 + 63 68 -1.124657e+02 + 63 69 -1.196403e+02 + 63 70 3.262363e+01 + 63 71 7.105427e-15 + 63 72 -2.072700e+02 + 63 73 0.000000e+00 + 63 74 0.000000e+00 + 63 75 1.945157e+02 + 63 76 -1.974588e+01 + 63 77 -1.124657e+02 + 63 78 -1.196403e+02 + 63 79 1.974588e+01 + 63 80 1.124657e+02 + 63 81 -1.196403e+02 + 64 13 -1.196403e+02 + 64 14 -1.124657e+02 + 64 15 1.974588e+01 + 64 16 -1.233504e+02 + 64 17 -6.782280e+01 + 64 18 -6.782280e+01 + 64 19 -2.392806e+02 + 64 20 3.552714e-15 + 64 21 -2.249313e+02 + 64 22 -2.072700e+02 + 64 23 1.776357e-14 + 64 24 3.262363e+01 + 64 43 -1.233504e+02 + 64 44 6.782280e+01 + 64 45 -6.782280e+01 + 64 46 -1.196403e+02 + 64 47 1.124657e+02 + 64 48 1.974588e+01 + 64 55 9.725783e+01 + 64 56 -1.631181e+01 + 64 57 6.782280e+01 + 64 58 4.004375e+01 + 64 59 -1.974588e+01 + 64 60 -1.974588e+01 + 64 61 1.945157e+02 + 64 62 0.000000e+00 + 64 63 -3.262363e+01 + 64 64 6.946632e+02 + 64 65 0.000000e+00 + 64 66 2.249313e+02 + 64 73 4.004375e+01 + 64 74 1.974588e+01 + 64 75 -1.974588e+01 + 64 76 9.725783e+01 + 64 77 1.631181e+01 + 64 78 6.782280e+01 + 65 13 -1.124657e+02 + 65 14 -1.196403e+02 + 65 15 1.974588e+01 + 65 16 -6.782280e+01 + 65 17 -1.233504e+02 + 65 18 -6.782280e+01 + 65 19 7.105427e-15 + 65 20 8.008751e+01 + 65 21 -3.552714e-15 + 65 22 -3.552714e-15 + 65 23 1.945157e+02 + 65 24 0.000000e+00 + 65 43 6.782280e+01 + 65 44 -1.233504e+02 + 65 45 6.782280e+01 + 65 46 1.124657e+02 + 65 47 -1.196403e+02 + 65 48 -1.974588e+01 + 65 55 1.631181e+01 + 65 56 -1.036350e+02 + 65 57 1.631181e+01 + 65 58 1.974588e+01 + 65 59 -1.196403e+02 + 65 60 -1.124657e+02 + 65 61 0.000000e+00 + 65 62 1.945157e+02 + 65 63 1.065814e-14 + 65 64 0.000000e+00 + 65 65 6.946632e+02 + 65 66 0.000000e+00 + 65 73 -1.974588e+01 + 65 74 -1.196403e+02 + 65 75 1.124657e+02 + 65 76 -1.631181e+01 + 65 77 -1.036350e+02 + 65 78 -1.631181e+01 + 66 13 -1.974588e+01 + 66 14 -1.974588e+01 + 66 15 4.004375e+01 + 66 16 -6.782280e+01 + 66 17 -6.782280e+01 + 66 18 -1.233504e+02 + 66 19 -2.249313e+02 + 66 20 7.105427e-15 + 66 21 -2.392806e+02 + 66 22 -3.262363e+01 + 66 23 0.000000e+00 + 66 24 1.945157e+02 + 66 43 -6.782280e+01 + 66 44 6.782280e+01 + 66 45 -1.233504e+02 + 66 46 -1.974588e+01 + 66 47 1.974588e+01 + 66 48 4.004375e+01 + 66 55 6.782280e+01 + 66 56 -1.631181e+01 + 66 57 9.725783e+01 + 66 58 1.974588e+01 + 66 59 -1.124657e+02 + 66 60 -1.196403e+02 + 66 61 3.262363e+01 + 66 62 7.105427e-15 + 66 63 -2.072700e+02 + 66 64 2.249313e+02 + 66 65 0.000000e+00 + 66 66 6.946632e+02 + 66 73 1.974588e+01 + 66 74 1.124657e+02 + 66 75 -1.196403e+02 + 66 76 6.782280e+01 + 66 77 1.631181e+01 + 66 78 9.725783e+01 + 67 16 -1.196403e+02 + 67 17 -1.974588e+01 + 67 18 1.124657e+02 + 67 19 -1.233504e+02 + 67 20 6.782280e+01 + 67 21 6.782280e+01 + 67 31 -1.036350e+02 + 67 32 -1.631181e+01 + 67 33 -1.631181e+01 + 67 34 -1.196403e+02 + 67 35 1.124657e+02 + 67 36 -1.974588e+01 + 67 58 9.725783e+01 + 67 59 -6.782280e+01 + 67 60 1.631181e+01 + 67 61 4.004375e+01 + 67 62 1.974588e+01 + 67 63 1.974588e+01 + 67 67 3.473316e+02 + 67 68 -1.124657e+02 + 67 69 -1.124657e+02 + 67 70 9.725783e+01 + 67 71 1.631181e+01 + 67 72 -6.782280e+01 + 68 16 1.974588e+01 + 68 17 4.004375e+01 + 68 18 -1.974588e+01 + 68 19 6.782280e+01 + 68 20 -1.233504e+02 + 68 21 -6.782280e+01 + 68 31 1.631181e+01 + 68 32 9.725783e+01 + 68 33 6.782280e+01 + 68 34 1.124657e+02 + 68 35 -1.196403e+02 + 68 36 1.974588e+01 + 68 58 -6.782280e+01 + 68 59 9.725783e+01 + 68 60 -1.631181e+01 + 68 61 -1.974588e+01 + 68 62 -1.196403e+02 + 68 63 -1.124657e+02 + 68 67 -1.124657e+02 + 68 68 3.473316e+02 + 68 69 1.124657e+02 + 68 70 -1.631181e+01 + 68 71 -1.036350e+02 + 68 72 1.631181e+01 + 69 16 1.124657e+02 + 69 17 1.974588e+01 + 69 18 -1.196403e+02 + 69 19 6.782280e+01 + 69 20 -6.782280e+01 + 69 21 -1.233504e+02 + 69 31 1.631181e+01 + 69 32 6.782280e+01 + 69 33 9.725783e+01 + 69 34 1.974588e+01 + 69 35 -1.974588e+01 + 69 36 4.004375e+01 + 69 58 -1.631181e+01 + 69 59 1.631181e+01 + 69 60 -1.036350e+02 + 69 61 -1.974588e+01 + 69 62 -1.124657e+02 + 69 63 -1.196403e+02 + 69 67 -1.124657e+02 + 69 68 1.124657e+02 + 69 69 3.473316e+02 + 69 70 -6.782280e+01 + 69 71 -1.631181e+01 + 69 72 9.725783e+01 + 70 16 -1.233504e+02 + 70 17 -6.782280e+01 + 70 18 6.782280e+01 + 70 19 -2.392806e+02 + 70 20 3.552714e-15 + 70 21 2.249313e+02 + 70 31 -1.196403e+02 + 70 32 -1.124657e+02 + 70 33 -1.974588e+01 + 70 34 -2.072700e+02 + 70 35 3.552714e-15 + 70 36 -3.262363e+01 + 70 43 -1.233504e+02 + 70 44 6.782280e+01 + 70 45 6.782280e+01 + 70 52 -1.196403e+02 + 70 53 1.124657e+02 + 70 54 -1.974588e+01 + 70 58 4.004375e+01 + 70 59 -1.974588e+01 + 70 60 1.974588e+01 + 70 61 1.945157e+02 + 70 62 0.000000e+00 + 70 63 3.262363e+01 + 70 67 9.725783e+01 + 70 68 -1.631181e+01 + 70 69 -6.782280e+01 + 70 70 6.946632e+02 + 70 71 -1.421085e-14 + 70 72 -2.249313e+02 + 70 73 4.004375e+01 + 70 74 1.974588e+01 + 70 75 1.974588e+01 + 70 79 9.725783e+01 + 70 80 1.631181e+01 + 70 81 -6.782280e+01 + 71 16 -6.782280e+01 + 71 17 -1.233504e+02 + 71 18 6.782280e+01 + 71 19 0.000000e+00 + 71 20 8.008751e+01 + 71 21 3.552714e-15 + 71 31 -1.124657e+02 + 71 32 -1.196403e+02 + 71 33 -1.974588e+01 + 71 34 3.552714e-15 + 71 35 1.945157e+02 + 71 36 -1.421085e-14 + 71 43 6.782280e+01 + 71 44 -1.233504e+02 + 71 45 -6.782280e+01 + 71 52 1.124657e+02 + 71 53 -1.196403e+02 + 71 54 1.974588e+01 + 71 58 1.974588e+01 + 71 59 -1.196403e+02 + 71 60 1.124657e+02 + 71 61 -1.421085e-14 + 71 62 1.945157e+02 + 71 63 7.105427e-15 + 71 67 1.631181e+01 + 71 68 -1.036350e+02 + 71 69 -1.631181e+01 + 71 70 -1.421085e-14 + 71 71 6.946632e+02 + 71 72 0.000000e+00 + 71 73 -1.974588e+01 + 71 74 -1.196403e+02 + 71 75 -1.124657e+02 + 71 79 -1.631181e+01 + 71 80 -1.036350e+02 + 71 81 1.631181e+01 + 72 16 6.782280e+01 + 72 17 6.782280e+01 + 72 18 -1.233504e+02 + 72 19 2.249313e+02 + 72 20 0.000000e+00 + 72 21 -2.392806e+02 + 72 31 1.974588e+01 + 72 32 1.974588e+01 + 72 33 4.004375e+01 + 72 34 3.262363e+01 + 72 35 0.000000e+00 + 72 36 1.945157e+02 + 72 43 6.782280e+01 + 72 44 -6.782280e+01 + 72 45 -1.233504e+02 + 72 52 1.974588e+01 + 72 53 -1.974588e+01 + 72 54 4.004375e+01 + 72 58 -1.974588e+01 + 72 59 1.124657e+02 + 72 60 -1.196403e+02 + 72 61 -3.262363e+01 + 72 62 1.065814e-14 + 72 63 -2.072700e+02 + 72 67 -6.782280e+01 + 72 68 1.631181e+01 + 72 69 9.725783e+01 + 72 70 -2.249313e+02 + 72 71 0.000000e+00 + 72 72 6.946632e+02 + 72 73 -1.974588e+01 + 72 74 -1.124657e+02 + 72 75 -1.196403e+02 + 72 79 -6.782280e+01 + 72 80 -1.631181e+01 + 72 81 9.725783e+01 + 73 19 -2.392806e+02 + 73 20 -2.249313e+02 + 73 21 0.000000e+00 + 73 22 -1.233504e+02 + 73 23 -6.782280e+01 + 73 24 6.782280e+01 + 73 34 -1.233504e+02 + 73 35 -6.782280e+01 + 73 36 -6.782280e+01 + 73 43 -2.072700e+02 + 73 44 3.262363e+01 + 73 45 7.105427e-15 + 73 46 -1.196403e+02 + 73 47 1.974588e+01 + 73 48 1.124657e+02 + 73 52 -1.196403e+02 + 73 53 1.974588e+01 + 73 54 -1.124657e+02 + 73 61 1.945157e+02 + 73 62 -3.262363e+01 + 73 63 0.000000e+00 + 73 64 4.004375e+01 + 73 65 -1.974588e+01 + 73 66 1.974588e+01 + 73 70 4.004375e+01 + 73 71 -1.974588e+01 + 73 72 -1.974588e+01 + 73 73 6.946632e+02 + 73 74 2.249313e+02 + 73 75 0.000000e+00 + 73 76 9.725783e+01 + 73 77 6.782280e+01 + 73 78 1.631181e+01 + 73 79 9.725783e+01 + 73 80 6.782280e+01 + 73 81 -1.631181e+01 + 74 19 -2.249313e+02 + 74 20 -2.392806e+02 + 74 21 3.552714e-15 + 74 22 -6.782280e+01 + 74 23 -1.233504e+02 + 74 24 6.782280e+01 + 74 34 -6.782280e+01 + 74 35 -1.233504e+02 + 74 36 -6.782280e+01 + 74 43 -3.262363e+01 + 74 44 1.945157e+02 + 74 45 0.000000e+00 + 74 46 -1.974588e+01 + 74 47 4.004375e+01 + 74 48 1.974588e+01 + 74 52 -1.974588e+01 + 74 53 4.004375e+01 + 74 54 -1.974588e+01 + 74 61 3.262363e+01 + 74 62 -2.072700e+02 + 74 63 0.000000e+00 + 74 64 1.974588e+01 + 74 65 -1.196403e+02 + 74 66 1.124657e+02 + 74 70 1.974588e+01 + 74 71 -1.196403e+02 + 74 72 -1.124657e+02 + 74 73 2.249313e+02 + 74 74 6.946632e+02 + 74 75 0.000000e+00 + 74 76 6.782280e+01 + 74 77 9.725783e+01 + 74 78 1.631181e+01 + 74 79 6.782280e+01 + 74 80 9.725783e+01 + 74 81 -1.631181e+01 + 75 19 0.000000e+00 + 75 20 3.552714e-15 + 75 21 8.008751e+01 + 75 22 6.782280e+01 + 75 23 6.782280e+01 + 75 24 -1.233504e+02 + 75 34 -6.782280e+01 + 75 35 -6.782280e+01 + 75 36 -1.233504e+02 + 75 43 3.552714e-15 + 75 44 1.421085e-14 + 75 45 1.945157e+02 + 75 46 1.124657e+02 + 75 47 -1.974588e+01 + 75 48 -1.196403e+02 + 75 52 -1.124657e+02 + 75 53 1.974588e+01 + 75 54 -1.196403e+02 + 75 61 0.000000e+00 + 75 62 3.552714e-15 + 75 63 1.945157e+02 + 75 64 -1.974588e+01 + 75 65 1.124657e+02 + 75 66 -1.196403e+02 + 75 70 1.974588e+01 + 75 71 -1.124657e+02 + 75 72 -1.196403e+02 + 75 73 0.000000e+00 + 75 74 0.000000e+00 + 75 75 6.946632e+02 + 75 76 -1.631181e+01 + 75 77 -1.631181e+01 + 75 78 -1.036350e+02 + 75 79 1.631181e+01 + 75 80 1.631181e+01 + 75 81 -1.036350e+02 + 76 19 -1.233504e+02 + 76 20 -6.782280e+01 + 76 21 -6.782280e+01 + 76 22 -1.196403e+02 + 76 23 -1.124657e+02 + 76 24 1.974588e+01 + 76 43 -1.196403e+02 + 76 44 1.974588e+01 + 76 45 -1.124657e+02 + 76 46 -1.036350e+02 + 76 47 1.631181e+01 + 76 48 1.631181e+01 + 76 61 4.004375e+01 + 76 62 -1.974588e+01 + 76 63 -1.974588e+01 + 76 64 9.725783e+01 + 76 65 -1.631181e+01 + 76 66 6.782280e+01 + 76 73 9.725783e+01 + 76 74 6.782280e+01 + 76 75 -1.631181e+01 + 76 76 3.473316e+02 + 76 77 1.124657e+02 + 76 78 1.124657e+02 + 77 19 -6.782280e+01 + 77 20 -1.233504e+02 + 77 21 -6.782280e+01 + 77 22 -1.124657e+02 + 77 23 -1.196403e+02 + 77 24 1.974588e+01 + 77 43 -1.974588e+01 + 77 44 4.004375e+01 + 77 45 -1.974588e+01 + 77 46 -1.631181e+01 + 77 47 9.725783e+01 + 77 48 6.782280e+01 + 77 61 1.974588e+01 + 77 62 -1.196403e+02 + 77 63 -1.124657e+02 + 77 64 1.631181e+01 + 77 65 -1.036350e+02 + 77 66 1.631181e+01 + 77 73 6.782280e+01 + 77 74 9.725783e+01 + 77 75 -1.631181e+01 + 77 76 1.124657e+02 + 77 77 3.473316e+02 + 77 78 1.124657e+02 + 78 19 -6.782280e+01 + 78 20 -6.782280e+01 + 78 21 -1.233504e+02 + 78 22 -1.974588e+01 + 78 23 -1.974588e+01 + 78 24 4.004375e+01 + 78 43 -1.124657e+02 + 78 44 1.974588e+01 + 78 45 -1.196403e+02 + 78 46 -1.631181e+01 + 78 47 6.782280e+01 + 78 48 9.725783e+01 + 78 61 1.974588e+01 + 78 62 -1.124657e+02 + 78 63 -1.196403e+02 + 78 64 6.782280e+01 + 78 65 -1.631181e+01 + 78 66 9.725783e+01 + 78 73 1.631181e+01 + 78 74 1.631181e+01 + 78 75 -1.036350e+02 + 78 76 1.124657e+02 + 78 77 1.124657e+02 + 78 78 3.473316e+02 + 79 19 -1.233504e+02 + 79 20 -6.782280e+01 + 79 21 6.782280e+01 + 79 34 -1.196403e+02 + 79 35 -1.124657e+02 + 79 36 -1.974588e+01 + 79 43 -1.196403e+02 + 79 44 1.974588e+01 + 79 45 1.124657e+02 + 79 52 -1.036350e+02 + 79 53 1.631181e+01 + 79 54 -1.631181e+01 + 79 61 4.004375e+01 + 79 62 -1.974588e+01 + 79 63 1.974588e+01 + 79 70 9.725783e+01 + 79 71 -1.631181e+01 + 79 72 -6.782280e+01 + 79 73 9.725783e+01 + 79 74 6.782280e+01 + 79 75 1.631181e+01 + 79 79 3.473316e+02 + 79 80 1.124657e+02 + 79 81 -1.124657e+02 + 80 19 -6.782280e+01 + 80 20 -1.233504e+02 + 80 21 6.782280e+01 + 80 34 -1.124657e+02 + 80 35 -1.196403e+02 + 80 36 -1.974588e+01 + 80 43 -1.974588e+01 + 80 44 4.004375e+01 + 80 45 1.974588e+01 + 80 52 -1.631181e+01 + 80 53 9.725783e+01 + 80 54 -6.782280e+01 + 80 61 1.974588e+01 + 80 62 -1.196403e+02 + 80 63 1.124657e+02 + 80 70 1.631181e+01 + 80 71 -1.036350e+02 + 80 72 -1.631181e+01 + 80 73 6.782280e+01 + 80 74 9.725783e+01 + 80 75 1.631181e+01 + 80 79 1.124657e+02 + 80 80 3.473316e+02 + 80 81 -1.124657e+02 + 81 19 6.782280e+01 + 81 20 6.782280e+01 + 81 21 -1.233504e+02 + 81 34 1.974588e+01 + 81 35 1.974588e+01 + 81 36 4.004375e+01 + 81 43 1.124657e+02 + 81 44 -1.974588e+01 + 81 45 -1.196403e+02 + 81 52 1.631181e+01 + 81 53 -6.782280e+01 + 81 54 9.725783e+01 + 81 61 -1.974588e+01 + 81 62 1.124657e+02 + 81 63 -1.196403e+02 + 81 70 -6.782280e+01 + 81 71 1.631181e+01 + 81 72 9.725783e+01 + 81 73 -1.631181e+01 + 81 74 -1.631181e+01 + 81 75 -1.036350e+02 + 81 79 -1.124657e+02 + 81 80 -1.124657e+02 + 81 81 3.473316e+02 diff --git a/packages/shylu/shylu_node/tacho/example/weight.dat b/packages/shylu/shylu_node/tacho/example/weight.dat new file mode 100644 index 000000000000..69758a48abdf --- /dev/null +++ b/packages/shylu/shylu_node/tacho/example/weight.dat @@ -0,0 +1,29 @@ +81 +27 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 diff --git a/packages/shylu/shylu_node/tacho/src/CMakeLists.txt b/packages/shylu/shylu_node/tacho/src/CMakeLists.txt index b93d975cd7c9..66c9de9fb03b 100644 --- a/packages/shylu/shylu_node/tacho/src/CMakeLists.txt +++ b/packages/shylu/shylu_node/tacho/src/CMakeLists.txt @@ -43,6 +43,8 @@ APPEND_SET(SOURCES impl/Tacho_Util.cpp impl/Tacho_Blas_External.cpp impl/Tacho_Lapack_External.cpp + impl/Tacho_GraphTools_Metis.cpp + impl/Tacho_SymbolicTools.cpp eti/Tacho_Solver_ETI_ChseLevTaskScheduler_complex_double_Cuda.cpp eti/Tacho_Solver_ETI_ChseLevTaskScheduler_complex_double_OpenMP.cpp eti/Tacho_Solver_ETI_ChseLevTaskScheduler_complex_double_Serial.cpp diff --git a/packages/shylu/shylu_node/tacho/src/Tacho_CuSolver.hpp b/packages/shylu/shylu_node/tacho/src/Tacho_CuSolver.hpp index d3771a4b9ec1..ff3d79ad7290 100644 --- a/packages/shylu/shylu_node/tacho/src/Tacho_CuSolver.hpp +++ b/packages/shylu/shylu_node/tacho/src/Tacho_CuSolver.hpp @@ -172,8 +172,8 @@ namespace Tacho { printf(" total time spent: %10.6f s\n", (t_alloc+t_factor)); printf("\n"); printf(" Workspace\n"); - printf(" internal data in MB: %10.2f MB\n", double(internalDataInBytes)/1.e6); - printf(" workspace in MB: %10.2f MB\n", double(workspaceInBytes)/1.e6); + printf(" internal data in MB: %10.3f MB\n", double(internalDataInBytes)/1.e6); + printf(" workspace in MB: %10.3f MB\n", double(workspaceInBytes)/1.e6); printf("\n"); } diff --git a/packages/shylu/shylu_node/tacho/src/Tacho_CuSparseTriSolve.hpp b/packages/shylu/shylu_node/tacho/src/Tacho_CuSparseTriSolve.hpp index 28bfc10afe6c..1191783fe1a9 100644 --- a/packages/shylu/shylu_node/tacho/src/Tacho_CuSparseTriSolve.hpp +++ b/packages/shylu/shylu_node/tacho/src/Tacho_CuSparseTriSolve.hpp @@ -222,9 +222,9 @@ namespace Tacho { printf(" time for analysis: %10.6f s\n", t_analyze); printf(" total time spent: %10.6f s\n", (t_copy+t_analyze)); printf(" Workspace\n"); - printf(" upper solve workspace in MB: %10.2f MB\n", double(bufSizeInBytes.second)/1.e6); - printf(" lower solve workspace in MB: %10.2f MB\n", double(bufSizeInBytes.first)/1.e6); - printf(" max workspace in MB: %10.2f MB\n", double(maxBufSizeInBytes)/1.e6); + printf(" upper solve workspace in MB: %10.3f MB\n", double(bufSizeInBytes.second)/1.e6); + printf(" lower solve workspace in MB: %10.3f MB\n", double(bufSizeInBytes.first)/1.e6); + printf(" max workspace in MB: %10.3f MB\n", double(maxBufSizeInBytes)/1.e6); printf("\n"); } diff --git a/packages/shylu/shylu_node/tacho/src/Tacho_Solver.hpp b/packages/shylu/shylu_node/tacho/src/Tacho_Solver.hpp index 45bf2aee6633..9c09be055f18 100644 --- a/packages/shylu/shylu_node/tacho/src/Tacho_Solver.hpp +++ b/packages/shylu/shylu_node/tacho/src/Tacho_Solver.hpp @@ -16,8 +16,9 @@ namespace Tacho { class Graph; #if defined(TACHO_HAVE_METIS) class GraphTools_Metis; +#else + class GraphTools; #endif - class GraphTools_CAMD; class SymbolicTools; template class CrsMatrixBase; @@ -58,7 +59,7 @@ namespace Tacho { #if defined(TACHO_HAVE_METIS) typedef GraphTools_Metis graph_tools_type; #else - typedef GraphTools_CAMD graph_tools_type; + typedef GraphTools graph_tools_type; #endif typedef SymbolicTools symbolic_tools_type; @@ -87,6 +88,17 @@ namespace Tacho { ordinal_type_array _perm; ordinal_type_array_host _h_perm; ordinal_type_array _peri; ordinal_type_array_host _h_peri; + // ** condensed graph + ordinal_type _m_graph; + size_type _nnz_graph; + + size_type_array_host _h_ap_graph; + ordinal_type_array_host _h_aj_graph; + ordinal_type_array_host _h_aw_graph; + + ordinal_type_array_host _h_perm_graph; + ordinal_type_array_host _h_peri_graph; + // ** symbolic factorization output // supernodes output ordinal_type _nsupernodes; @@ -187,11 +199,8 @@ namespace Tacho { // internal only int analyze(); - int analyze(const ordinal_type m, - const size_type_array_host &ap, - const ordinal_type_array_host &aj, - const ordinal_type_array_host &perm, - const ordinal_type_array_host &peri); + int analyze_linear_system(); + int analyze_condensed_graph(); template @@ -206,11 +215,92 @@ namespace Tacho { _h_ap = Kokkos::create_mirror_view(host_memory_space(), ap); Kokkos::deep_copy(_h_ap, ap); _h_aj = Kokkos::create_mirror_view(host_memory_space(), aj); Kokkos::deep_copy(_h_aj, aj); + _h_perm = ordinal_type_array_host(); + _h_peri = ordinal_type_array_host(); + _nnz = _h_ap(m); + + _m_graph = 0; + _nnz_graph = 0; + + _h_ap_graph = size_type_array_host(); + _h_aj_graph = ordinal_type_array_host(); + + _h_perm_graph = ordinal_type_array_host(); + _h_peri_graph = ordinal_type_array_host(); return analyze(); } + template + int analyze(const ordinal_type m, + const arg_size_type_array &ap, + const arg_ordinal_type_array &aj, + const arg_perm_type_array &perm, + const arg_perm_type_array &peri) { + _m = m; + + _ap = Kokkos::create_mirror_view(exec_memory_space(), ap); Kokkos::deep_copy(_ap, ap); + _aj = Kokkos::create_mirror_view(exec_memory_space(), aj); Kokkos::deep_copy(_aj, aj); + + _h_ap = Kokkos::create_mirror_view(host_memory_space(), ap); Kokkos::deep_copy(_h_ap, ap); + _h_aj = Kokkos::create_mirror_view(host_memory_space(), aj); Kokkos::deep_copy(_h_aj, aj); + + _h_perm = Kokkos::create_mirror_view(host_memory_space(), perm); Kokkos::deep_copy(_h_perm, perm); + _h_peri = Kokkos::create_mirror_view(host_memory_space(), peri); Kokkos::deep_copy(_h_peri, peri); + + _nnz = _h_ap(m); + + _m_graph = 0; + _nnz_graph = 0; + + _h_ap_graph = size_type_array_host(); + _h_aj_graph = ordinal_type_array_host(); + + _h_perm_graph = ordinal_type_array_host(); + _h_peri_graph = ordinal_type_array_host(); + + return analyze(); + } + + + template + int analyze(const ordinal_type m, + const arg_size_type_array &ap, + const arg_ordinal_type_array &aj, + const ordinal_type m_graph, + const arg_size_type_array &ap_graph, + const arg_ordinal_type_array &aj_graph, + const arg_ordinal_type_array &aw_graph) { + _m = m; + + _ap = Kokkos::create_mirror_view(exec_memory_space(), ap); Kokkos::deep_copy(_ap, ap); + _aj = Kokkos::create_mirror_view(exec_memory_space(), aj); Kokkos::deep_copy(_aj, aj); + + _h_ap = Kokkos::create_mirror_view(host_memory_space(), ap); Kokkos::deep_copy(_h_ap, ap); + _h_aj = Kokkos::create_mirror_view(host_memory_space(), aj); Kokkos::deep_copy(_h_aj, aj); + + _h_perm = ordinal_type_array_host(); + _h_peri = ordinal_type_array_host(); + + _nnz = _h_ap(m); + + _m_graph = m_graph; + _h_ap_graph = Kokkos::create_mirror_view(host_memory_space(), ap_graph); Kokkos::deep_copy(_h_ap_graph, ap_graph); + _h_aj_graph = Kokkos::create_mirror_view(host_memory_space(), aj_graph); Kokkos::deep_copy(_h_aj_graph, aj_graph); + _h_aw_graph = Kokkos::create_mirror_view(host_memory_space(), aw_graph); Kokkos::deep_copy(_h_aw_graph, aw_graph); + + _h_perm_graph = ordinal_type_array_host(); + _h_peri_graph = ordinal_type_array_host(); + + _nnz_graph = _h_ap_graph(m_graph); + + return analyze(); + } + int initialize(); int factorize(const value_type_array &ax); int solve(const value_type_matrix &x, diff --git a/packages/shylu/shylu_node/tacho/src/impl/Tacho_Graph.hpp b/packages/shylu/shylu_node/tacho/src/impl/Tacho_Graph.hpp index 521afc3aa0d4..ffa9966f5217 100644 --- a/packages/shylu/shylu_node/tacho/src/impl/Tacho_Graph.hpp +++ b/packages/shylu/shylu_node/tacho/src/impl/Tacho_Graph.hpp @@ -5,6 +5,7 @@ /// \author Kyungjoo Kim (kyukim@sandia.gov) #include "Tacho_Util.hpp" +#include "Tacho_CrsMatrixBase.hpp" namespace Tacho { diff --git a/packages/shylu/shylu_node/tacho/src/impl/Tacho_GraphTools.hpp b/packages/shylu/shylu_node/tacho/src/impl/Tacho_GraphTools.hpp new file mode 100644 index 000000000000..20401dcf7a03 --- /dev/null +++ b/packages/shylu/shylu_node/tacho/src/impl/Tacho_GraphTools.hpp @@ -0,0 +1,92 @@ +#ifndef __TACHO_GRAPH_TOOLS_HPP__ +#define __TACHO_GRAPH_TOOLS_HPP__ + +/// \file Tacho_GraphTools.hpp +/// \author Kyungjoo Kim (kyukim@sandia.gov) + +#include "Tacho_Util.hpp" +#include "Tacho_Graph.hpp" + +namespace Tacho { + + class GraphTools { + public: + typedef typename UseThisDevice::device_type host_device_type; + typedef Kokkos::View ordinal_type_array; + + private: + + ordinal_type_array _perm, _peri; + + // status flag + bool _is_ordered, _verbose; + + public: + GraphTools() = default; + GraphTools(const GraphTools &b) = default; + ~GraphTools() = default; + + /// + /// construction of scotch graph + /// + GraphTools(const Graph &g) { + _is_ordered = false; + _verbose = false; + + // input + const ordinal_type m = g.NumRows(); + + // output + _perm = ordinal_type_array(do_not_initialize_tag("PermutationArray"), m); + _peri = ordinal_type_array(do_not_initialize_tag("InvPermutationArray"), m); + } + + /// + /// setup parameters + /// + + void setVerbose(const bool verbose) { _verbose = verbose; } + + + /// + /// reorder + /// + void reorder(const ordinal_type verbose = 0) { + // do nothing + // later implement AMD + const ordinal_type m = _perm.extent(0); + for (ordinal_type i=0;i(_xadj.extent(0));++i) + _xadj(i) = g_row_ptr(i); + for (ordinal_type i=0;i(_adjncy.extent(0));++i) + _adjncy(i) = g_col_idx(i); + + METIS_SetDefaultOptions(_options); + _options[METIS_OPTION_NUMBERING] = 0; + + _perm_t = idx_t_array(do_not_initialize_tag("idx_t_perm"), _nvts); + _peri_t = idx_t_array(do_not_initialize_tag("idx_t_peri"), _nvts); + + // output + _perm = ordinal_type_array(do_not_initialize_tag("Metis::PermutationArray"), _nvts); + _peri = ordinal_type_array(do_not_initialize_tag("Metis::InvPermutationArray"), _nvts); + } + GraphTools_Metis::~GraphTools_Metis() {} + + void GraphTools_Metis::setVerbose(const bool verbose) { + _verbose = verbose; + } + void GraphTools_Metis::setOption(const int id, const idx_t value) { + _options[id] = value; + } + + /// + /// reorder by metis + /// + + void GraphTools_Metis::reorder(const ordinal_type verbose) { + Kokkos::Impl::Timer timer; + double t_metis = 0; + + int ierr = 0; + + idx_t *xadj = (idx_t*)_xadj.data(); + idx_t *adjncy = (idx_t*)_adjncy.data(); + idx_t *vwgt = (idx_t*)_vwgt.data(); + + idx_t *perm = (idx_t*)_perm_t.data(); + idx_t *peri = (idx_t*)_peri_t.data(); + + timer.reset(); + ierr = METIS_NodeND(&_nvts, xadj, adjncy, vwgt, _options, + perm, peri); + t_metis = timer.seconds(); + + for (idx_t i=0;i<_nvts;++i) { + _perm(i) = _perm_t(i); + _peri(i) = _peri_t(i); + } + + TACHO_TEST_FOR_EXCEPTION(ierr != METIS_OK, + std::runtime_error, + "Failed in METIS_NodeND"); + _is_ordered = true; + + if (verbose) { + printf("Summary: GraphTools (Metis)\n"); + printf("===========================\n"); + + switch (verbose) { + case 1: { + printf(" Time\n"); + printf(" time for reordering: %10.6f s\n", t_metis); + printf("\n"); + } + } + } + } + + typename GraphTools_Metis::ordinal_type_array GraphTools_Metis::PermVector() const { return _perm; } + typename GraphTools_Metis::ordinal_type_array GraphTools_Metis::InvPermVector() const { return _peri; } + + std::ostream& GraphTools_Metis::showMe(std::ostream &os, const bool detail) const { + std::streamsize prec = os.precision(); + os.precision(4); + os << std::scientific; + + if (_is_ordered) + os << " -- Metis Ordering -- " << std::endl + << " PERM PERI " << std::endl; + else + os << " -- Not Ordered -- " << std::endl; + + if (detail) { + const ordinal_type w = 6, m = _perm.extent(0); + for (ordinal_type i=0;i(_xadj.extent(0));++i) - _xadj(i) = g_row_ptr(i); - for (ordinal_type i=0;i(_adjncy.extent(0));++i) - _adjncy(i) = g_col_idx(i); - - METIS_SetDefaultOptions(_options); - _options[METIS_OPTION_NUMBERING] = 0; - - _perm_t = idx_t_array(do_not_initialize_tag("idx_t_perm"), _nvts); - _peri_t = idx_t_array(do_not_initialize_tag("idx_t_peri"), _nvts); - - // output - _perm = ordinal_type_array(do_not_initialize_tag("Metis::PermutationArray"), _nvts); - _peri = ordinal_type_array(do_not_initialize_tag("Metis::InvPermutationArray"), _nvts); - } - virtual~GraphTools_Metis() {} + GraphTools_Metis(const Graph &g); + virtual~GraphTools_Metis(); /// /// setup metis parameters /// - void setVerbose(const bool verbose) { _verbose = verbose; } - void setOption(const int id, const idx_t value) { - _options[id] = value; - } + void setVerbose(const bool verbose); + void setOption(const int id, const idx_t value); /// /// reorder by metis /// - void reorder(const ordinal_type verbose = 0) { - Kokkos::Impl::Timer timer; - double t_metis = 0; + void reorder(const ordinal_type verbose = 0); - int ierr = 0; - - idx_t *xadj = (idx_t*)_xadj.data(); - idx_t *adjncy = (idx_t*)_adjncy.data(); - idx_t *vwgt = (idx_t*)_vwgt.data(); - - idx_t *perm = (idx_t*)_perm_t.data(); - idx_t *peri = (idx_t*)_peri_t.data(); - - timer.reset(); - ierr = METIS_NodeND(&_nvts, xadj, adjncy, vwgt, _options, - perm, peri); - t_metis = timer.seconds(); - - for (idx_t i=0;i<_nvts;++i) { - _perm(i) = _perm_t(i); - _peri(i) = _peri_t(i); - } - - TACHO_TEST_FOR_EXCEPTION(ierr != METIS_OK, - std::runtime_error, - "Failed in METIS_NodeND"); - _is_ordered = true; - - if (verbose) { - printf("Summary: GraphTools (Metis)\n"); - printf("===========================\n"); - - switch (verbose) { - case 1: { - printf(" Time\n"); - printf(" time for reordering: %10.6f s\n", t_metis); - printf("\n"); - } - } - } - - } - - ordinal_type_array PermVector() const { return _perm; } - ordinal_type_array InvPermVector() const { return _peri; } + ordinal_type_array PermVector() const; + ordinal_type_array InvPermVector() const; - std::ostream& showMe(std::ostream &os, const bool detail = false) const { - std::streamsize prec = os.precision(); - os.precision(4); - os << std::scientific; - - if (_is_ordered) - os << " -- Metis Ordering -- " << std::endl - << " PERM PERI " << std::endl; - else - os << " -- Not Ordered -- " << std::endl; - - if (detail) { - const ordinal_type w = 6, m = _perm.extent(0); - for (ordinal_type i=0;i::Trsm(true, m, n); flop += DenseFlopCount::Syrk(m, n); } - + const double kilo(1024); printf(" Time\n"); printf(" time for extra work e.g.,workspace allocation: %10.6f s\n", stat.t_extra); printf(" time for copying A into U: %10.6f s\n", stat.t_copy); @@ -282,15 +283,15 @@ namespace Tacho { printf(" total time spent: %10.6f s\n", (stat.t_extra+stat.t_copy+stat.t_factor)); printf("\n"); printf(" Memory\n"); - printf(" memory used in factorization: %10.2f MB\n", stat.m_used/1024/1024); - printf(" peak memory used in factorization: %10.2f MB\n", stat.m_peak/1024/1024); + printf(" memory used in factorization: %10.3f MB\n", stat.m_used/kilo/kilo); + printf(" peak memory used in factorization: %10.3f MB\n", stat.m_peak/kilo/kilo); printf("\n"); printf(" Kernels\n"); printf(" # of kernels launching: %6d\n", stat.n_kernel_launching); printf("\n"); printf(" FLOPs\n"); - printf(" gflop for numeric factorization: %10.2f GFLOP\n", flop/1024/1024/1024); - printf(" gflop/s for numeric factorization: %10.2f GFLOP/s\n", flop/stat.t_factor/1024/1024/1024); + printf(" gflop for numeric factorization: %10.3f GFLOP\n", flop/kilo/kilo/kilo); + printf(" gflop/s for numeric factorization: %10.3f GFLOP/s\n", flop/stat.t_factor/kilo/kilo/kilo); printf("\n"); } @@ -298,13 +299,14 @@ namespace Tacho { inline void print_stat_solve() { + const double kilo(1024); printf(" Time\n"); printf(" time for extra work e.g.,workspace and permute: %10.6f s\n", stat.t_extra); printf(" time for solve: %10.6f s\n", stat.t_solve); printf(" total time spent: %10.6f s\n", (stat.t_solve+stat.t_extra)); printf("\n"); printf(" Memory\n"); - printf(" memory used in solve: %10.2f MB\n", stat.m_used/1024/1024); + printf(" memory used in solve: %10.3f MB\n", stat.m_used/kilo/kilo); printf("\n"); printf(" Kernels\n"); printf(" # of kernels launching: %6d\n", stat.n_kernel_launching); @@ -314,9 +316,10 @@ namespace Tacho { inline void print_stat_memory() { + const double kilo(1024); printf(" Memory\n"); - printf(" memory used now: %10.2f MB\n", stat.m_used/1024/1024); - printf(" peak memory used: %10.2f MB\n", stat.m_peak/1024/1024); + printf(" memory used now: %10.3f MB\n", stat.m_used/kilo/kilo); + printf(" peak memory used: %10.3f MB\n", stat.m_peak/kilo/kilo); printf("\n"); } diff --git a/packages/shylu/shylu_node/tacho/src/impl/Tacho_NumericTools.hpp b/packages/shylu/shylu_node/tacho/src/impl/Tacho_NumericTools.hpp index ca7ffbca282b..6f0c9ee53164 100644 --- a/packages/shylu/shylu_node/tacho/src/impl/Tacho_NumericTools.hpp +++ b/packages/shylu/shylu_node/tacho/src/impl/Tacho_NumericTools.hpp @@ -188,7 +188,7 @@ namespace Tacho { void track_alloc(const double in) { stat.m_used += in; - stat.m_peak = max(stat.m_peak, stat.m_used); + stat.m_peak = std::max(stat.m_peak, stat.m_used); } inline @@ -232,49 +232,52 @@ namespace Tacho { flop += DenseFlopCount::Trsm(true, m, n); flop += DenseFlopCount::Syrk(m, n); } + const double kilo(1024); printf(" Time\n"); printf(" time for copying A into U: %10.6f s\n", stat.t_copy); printf(" time for numeric factorization: %10.6f s\n", stat.t_factor); printf(" total time spent: %10.6f s\n", (stat.t_copy+stat.t_factor)); printf("\n"); printf(" Memory\n"); - printf(" memory used in factorization: %10.2f MB\n", stat.m_used/1024/1024); - printf(" peak memory used in factorization: %10.2f MB\n", stat.m_peak/1024/1024); + printf(" memory used in factorization: %10.3f MB\n", stat.m_used/kilo/kilo); + printf(" peak memory used in factorization: %10.3f MB\n", stat.m_peak/kilo/kilo); printf("\n"); printf(" Buffer Pool\n"); printf(" number of superblocks: %10d\n", int(stat.b_num_superblocks)); printf(" min and max blocksize: %e, %e Bytes\n", double(stat.b_min_block_size), double(stat.b_max_block_size)); - printf(" pool capacity: %10.2f MB\n", double(stat.b_capacity)/1024/1024); + printf(" pool capacity: %10.3f MB\n", double(stat.b_capacity)/kilo/kilo); printf("\n"); printf(" Sched Memory Pool\n"); printf(" number of superblocks: %10d\n", int(stat.s_num_superblocks)); printf(" min and max blocksize: %e, %e Bytes\n", double(stat.s_min_block_size), double(stat.s_max_block_size)); - printf(" pool capacity: %10.2f MB\n", double(stat.s_capacity)/1024/1024); + printf(" pool capacity: %10.3f MB\n", double(stat.s_capacity)/kilo/kilo); printf("\n"); printf(" FLOPs\n"); - printf(" gflop for numeric factorization: %10.2f GFLOP\n", flop/1024/1024/1024); - printf(" gflop/s for numeric factorization: %10.2f GFLOP/s\n", flop/stat.t_factor/1024/1024/1024); + printf(" gflop for numeric factorization: %10.3f GFLOP\n", flop/kilo/kilo/kilo); + printf(" gflop/s for numeric factorization: %10.3f GFLOP/s\n", flop/stat.t_factor/kilo/kilo/kilo); printf("\n"); } inline void print_stat_solve() { + const double kilo(1024); printf(" Time\n"); printf(" time for extra work e.g.,copy rhs: %10.6f s\n", stat.t_extra); printf(" time for numeric solve: %10.6f s\n", stat.t_solve); printf(" total time spent: %10.6f s\n", (stat.t_solve+stat.t_extra)); printf(" Memory\n"); - printf(" memory used in solve: %10.2f MB\n", stat.m_used/1024/1024); + printf(" memory used in solve: %10.3f MB\n", stat.m_used/kilo/kilo); printf("\n"); } inline void print_stat_memory() { + const double kilo(1024); printf(" Memory\n"); - printf(" memory used now: %10.2f MB\n", stat.m_used/1024/1024); - printf(" peak memory used: %10.2f MB\n", stat.m_peak/1024/1024); + printf(" memory used now: %10.3f MB\n", stat.m_used/kilo/kilo); + printf(" peak memory used: %10.3f MB\n", stat.m_peak/kilo/kilo); printf("\n"); } diff --git a/packages/shylu/shylu_node/tacho/src/impl/Tacho_Solver_Impl.hpp b/packages/shylu/shylu_node/tacho/src/impl/Tacho_Solver_Impl.hpp index cdd307a7491b..797f64754c28 100644 --- a/packages/shylu/shylu_node/tacho/src/impl/Tacho_Solver_Impl.hpp +++ b/packages/shylu/shylu_node/tacho/src/impl/Tacho_Solver_Impl.hpp @@ -14,8 +14,11 @@ namespace Tacho { Solver ::Solver() : _m(0), _nnz(0), - _ap(), _h_ap(),_aj(), _h_aj(), + _ap(), _h_ap(), _aj(), _h_aj(), _perm(), _h_perm(), _peri(), _h_peri(), + _m_graph(0), _nnz_graph(0), + _h_ap_graph(), _h_aj_graph(), + _h_perm_graph(), _h_peri_graph(), _N(nullptr), _L0(nullptr), _L1(nullptr), @@ -223,64 +226,108 @@ namespace Tacho { int Solver ::analyze() { - Graph graph(_m, _nnz, _h_ap, _h_aj); - graph_tools_type G(graph); - G.reorder(_verbose); - - _h_perm = G.PermVector(); - _h_peri = G.InvPermVector(); - - // invoke a private function - return analyze(_m, _h_ap, _h_aj, _h_perm, _h_peri); + int r_val(0); + if (_m < _small_problem_thres) { + /// do nothing + if (_verbose) { + printf("TachoSolver: Analyze\n"); + printf("====================\n"); + printf(" Linear system A\n"); + printf(" number of equations: %10d\n", _m); + printf("\n"); + printf(" A is a small problem ( < %d ) and LAPACK is used\n", _small_problem_thres); + printf("\n"); + } + } else { + const bool use_condensed_graph = (_m_graph > 0 && _m_graph < _m); + if (use_condensed_graph) { + Graph graph(_m_graph, _nnz_graph, _h_ap_graph, _h_aj_graph); + graph_tools_type G(graph); + G.reorder(_verbose); + + _h_perm_graph = G.PermVector(); + _h_peri_graph = G.InvPermVector(); + + r_val = analyze_condensed_graph(); + } else { + const bool use_graph_partitioner = (_h_perm.extent(0) == 0 && _h_peri.extent(0) == 0); + if (use_graph_partitioner) { + Graph graph(_m, _nnz, _h_ap, _h_aj); + graph_tools_type G(graph); + G.reorder(_verbose); + + _h_perm = G.PermVector(); + _h_peri = G.InvPermVector(); + + r_val = analyze_linear_system(); + } else { + r_val = analyze_linear_system(); + } + } + } + return r_val; } template int Solver - ::analyze(const ordinal_type m, - const size_type_array_host &ap, - const ordinal_type_array_host &aj, - const ordinal_type_array_host &perm, - const ordinal_type_array_host &peri) { + ::analyze_linear_system() { if (_verbose) { - printf("TachoSolver: Analyze\n"); - printf("====================\n"); + printf("TachoSolver: Analyze Linear System\n"); + printf("==================================\n"); } - if (_m == 0) { - _m = m; - - _ap = Kokkos::create_mirror_view(exec_memory_space(), ap); Kokkos::deep_copy(_ap, ap); - _aj = Kokkos::create_mirror_view(exec_memory_space(), aj); Kokkos::deep_copy(_aj, aj); + { + symbolic_tools_type S(_m, _h_ap, _h_aj, _h_perm, _h_peri); + S.symbolicFactorize(_verbose); - _h_ap = ap; - _h_aj = aj; + _nsupernodes = S.NumSupernodes(); + _stree_level = S.SupernodesTreeLevel(); + _stree_roots = S.SupernodesTreeRoots(); - _nnz = _ap(m); + _supernodes = Kokkos::create_mirror_view(exec_memory_space(), S.Supernodes()); + _gid_super_panel_ptr = Kokkos::create_mirror_view(exec_memory_space(), S.gidSuperPanelPtr()); + _gid_super_panel_colidx = Kokkos::create_mirror_view(exec_memory_space(), S.gidSuperPanelColIdx()); + _sid_super_panel_ptr = Kokkos::create_mirror_view(exec_memory_space(), S.sidSuperPanelPtr()); + _sid_super_panel_colidx = Kokkos::create_mirror_view(exec_memory_space(), S.sidSuperPanelColIdx()); + _blk_super_panel_colidx = Kokkos::create_mirror_view(exec_memory_space(), S.blkSuperPanelColIdx()); + _stree_parent = Kokkos::create_mirror_view(exec_memory_space(), S.SupernodesTreeParent()); + _stree_ptr = Kokkos::create_mirror_view(exec_memory_space(), S.SupernodesTreePtr()); + _stree_children = Kokkos::create_mirror_view(exec_memory_space(), S.SupernodesTreeChildren()); - _h_perm = perm; - _h_peri = peri; - } + Kokkos::deep_copy(_supernodes , S.Supernodes()); + Kokkos::deep_copy(_gid_super_panel_ptr , S.gidSuperPanelPtr()); + Kokkos::deep_copy(_gid_super_panel_colidx , S.gidSuperPanelColIdx()); + Kokkos::deep_copy(_sid_super_panel_ptr , S.sidSuperPanelPtr()); + Kokkos::deep_copy(_sid_super_panel_colidx , S.sidSuperPanelColIdx()); + Kokkos::deep_copy(_blk_super_panel_colidx , S.blkSuperPanelColIdx()); + Kokkos::deep_copy(_stree_parent , S.SupernodesTreeParent()); + Kokkos::deep_copy(_stree_ptr , S.SupernodesTreePtr()); + Kokkos::deep_copy(_stree_children , S.SupernodesTreeChildren()); - if (_m < _small_problem_thres) { - // for small problems, use lapack and no analysis and no permutation + // perm and peri is updated during symbolic factorization _perm = Kokkos::create_mirror_view(exec_memory_space(), _h_perm); _peri = Kokkos::create_mirror_view(exec_memory_space(), _h_peri); Kokkos::deep_copy(_perm, _h_perm); Kokkos::deep_copy(_peri, _h_peri); - - if (_verbose) { - printf(" Linear system A\n"); - printf(" number of equations: %10d\n", _m); - printf("\n"); - printf(" A is a small problem ( < %d ) and LAPACK is used\n", _small_problem_thres); - printf("\n"); - } - return 0; - } else { - symbolic_tools_type S(_m, _h_ap, _h_aj, _h_perm, _h_peri); + } + return 0; + } + + template + int + Solver + ::analyze_condensed_graph() { + if (_verbose) { + printf("TachoSolver: Analyze Condensed Graph and Evaporate the Graph\n"); + printf("============================================================\n"); + } + + { + symbolic_tools_type S(_m_graph, _h_ap_graph, _h_aj_graph, _h_perm_graph, _h_peri_graph); S.symbolicFactorize(_verbose); + S.evaporateSymbolicFactors(_h_aw_graph, _verbose); _nsupernodes = S.NumSupernodes(); _stree_level = S.SupernodesTreeLevel(); @@ -295,6 +342,8 @@ namespace Tacho { _stree_parent = Kokkos::create_mirror_view(exec_memory_space(), S.SupernodesTreeParent()); _stree_ptr = Kokkos::create_mirror_view(exec_memory_space(), S.SupernodesTreePtr()); _stree_children = Kokkos::create_mirror_view(exec_memory_space(), S.SupernodesTreeChildren()); + _perm = Kokkos::create_mirror_view(exec_memory_space(), S.PermVector()); + _peri = Kokkos::create_mirror_view(exec_memory_space(), S.InvPermVector()); Kokkos::deep_copy(_supernodes , S.Supernodes()); Kokkos::deep_copy(_gid_super_panel_ptr , S.gidSuperPanelPtr()); @@ -305,13 +354,11 @@ namespace Tacho { Kokkos::deep_copy(_stree_parent , S.SupernodesTreeParent()); Kokkos::deep_copy(_stree_ptr , S.SupernodesTreePtr()); Kokkos::deep_copy(_stree_children , S.SupernodesTreeChildren()); + Kokkos::deep_copy(_perm , S.PermVector()); + Kokkos::deep_copy(_peri , S.InvPermVector()); - // perm and peri is updated during symbolic factorization - _perm = Kokkos::create_mirror_view(exec_memory_space(), _h_perm); - _peri = Kokkos::create_mirror_view(exec_memory_space(), _h_peri); - - Kokkos::deep_copy(_perm, _h_perm); - Kokkos::deep_copy(_peri, _h_peri); + _h_perm = S.PermVector(); + _h_peri = S.InvPermVector(); } return 0; } @@ -662,7 +709,16 @@ namespace Tacho { _perm = ordinal_type_array(); _h_perm = ordinal_type_array_host(); _peri = ordinal_type_array(); _h_peri = ordinal_type_array_host(); + + _m_graph = 0; + _nnz_graph = 0; + + _h_ap_graph = size_type_array_host(); + _h_aj_graph = ordinal_type_array_host(); + _h_perm_graph = ordinal_type_array_host(); + _h_peri_graph = ordinal_type_array_host(); + _nsupernodes = 0; _supernodes = ordinal_type_array(); diff --git a/packages/shylu/shylu_node/tacho/src/impl/Tacho_SymbolicTools.cpp b/packages/shylu/shylu_node/tacho/src/impl/Tacho_SymbolicTools.cpp new file mode 100644 index 000000000000..162018f29b43 --- /dev/null +++ b/packages/shylu/shylu_node/tacho/src/impl/Tacho_SymbolicTools.cpp @@ -0,0 +1,895 @@ +/// \file Tacho_SymbolicTools.hpp +/// \author Kyungjoo Kim (kyukim@sandia.gov) + +#include "Tacho_Util.hpp" +#include "Tacho_SymbolicTools.hpp" + +namespace Tacho { + + using ordinal_type_array = SymbolicTools::ordinal_type_array; + using size_type_array = SymbolicTools::size_type_array; + + void SymbolicTools:: + computeEliminationTree(const ordinal_type m, + const size_type_array &ap, + const ordinal_type_array &aj, + const ordinal_type_array &perm, + const ordinal_type_array &peri, + const ordinal_type_array &parent, + const ordinal_type_array &ancestor) { + for (ordinal_type i=0;i= 0) { + const ordinal_type p = stack(top); + const ordinal_type i = head(p); + if (i == -1) { + --top; + post(k++) = p; + } else { + head(p) = next(i); + stack(++top) = i; + } + } + return k; + } + + void SymbolicTools:: + computePostOrdering(const ordinal_type m, + const ordinal_type_array &parent, + const ordinal_type_array &post, + const ordinal_type_array &work) { + auto head = Kokkos::subview(work, range_type(0*m, 1*m)); + auto next = Kokkos::subview(work, range_type(1*m, 2*m)); + auto stack = Kokkos::subview(work, range_type(2*m, 3*m)); + + for (ordinal_type i=0;i=0;--i) { + const ordinal_type p = parent(i); + if (p != -1) { + next(i) = head(p); + head(p) = i; + } + } + ordinal_type k = 0; + for (ordinal_type i=0;i= 0) ++count(parent(i)); + + // parent has more than a child, it becomes a supernode candidate + // roots are supernodes + for (ordinal_type i=0;i 1 || parent(i) < 0) flag(i) = true; + + // accumulate subtree sizes in count. + for (ordinal_type i=0;i= 0) count(parent(i)) += count(i); + + // tree leaves are also supernode candidate (not easy to understand this) + for (ordinal_type i=0;i ordinal_type { + // # of columns accessed by this super node + ordinal_type cnt = 0; + + // loop over super node cols (diagonal block) + for (ordinal_type col=sbeg;col ordinal_type { + ordinal_type cnt = 0; + for (ordinal_type k=0;k= 0) { + const ordinal_type sidpar = flag(parent(i)); + if (sidpar != sid) stree_parent(sid) = sidpar; + } + } + } + + auto clear_array = [](const ordinal_type cnt, + const ordinal_type_array &a) { + memset(a.data(), 0, cnt*sizeof(typename ordinal_type_array::value_type)); + }; + + // construct parent - child relations + { + clear_array(m, flag); + ordinal_type cnt = 0; + for (ordinal_type sid=0;sid w_extent) { + return; + } + } + + timer.reset(); + + /// + /// scan weights to compute the size of the system of linear equations + /// + size_type_array as(do_not_initialize_tag("as"), _m+1); + size_type_array aq(do_not_initialize_tag("aq"), _m+1); + + track_alloc(as.span()); + track_alloc(aq.span()); + + as(0) = 0; aq(0) = 0; + for (ordinal_type i=0;i<_m;++i) { + as(i+1) = as(i) + aw(i); + aq(i+1) = aq(i) + aw(_peri(i)); + } + TACHO_TEST_FOR_EXCEPTION(as(_m) != aq(_m), std::logic_error, + "Error: SymbolicTools::evaporateSymbolicFactors, # of equations do not match between as and aq"); + + /// + /// Evaporate condensed graph for a debugging purpose + /// + const size_type m = as(_m); +#if 0 + { + size_type_array ap(do_not_initialize_tag("ap"), m+1); + ap(0) = 0; + { + ordinal_type ii(0); + for (ordinal_type i=0;i<_m;++i) { + ordinal_type cnt(0); + const ordinal_type + jbeg = _ap(i), + jend = _ap(i+1); + for (ordinal_type j=jbeg;j range_type; // Tim Davis, Direct Methods for Sparse Linear Systems, Siam, p 42. - inline static void computeEliminationTree(const ordinal_type m, const size_type_array &ap, @@ -28,79 +27,26 @@ namespace Tacho { const ordinal_type_array &perm, const ordinal_type_array &peri, const ordinal_type_array &parent, - const ordinal_type_array &ancestor) { - for (ordinal_type i=0;i= 0) { - const ordinal_type p = stack(top); - const ordinal_type i = head(p); - if (i == -1) { - --top; - post(k++) = p; - } else { - head(p) = next(i); - stack(++top) = i; - } - } - return k; - } + const ordinal_type_array &stack); // Tim Davis, Direct Methods for Sparse Linear Systems, Siam, p 45. - inline static void computePostOrdering(const ordinal_type m, const ordinal_type_array &parent, const ordinal_type_array &post, - const ordinal_type_array &work) { - auto head = Kokkos::subview(work, range_type(0*m, 1*m)); - auto next = Kokkos::subview(work, range_type(1*m, 2*m)); - auto stack = Kokkos::subview(work, range_type(2*m, 3*m)); - - for (ordinal_type i=0;i=0;--i) { - const ordinal_type p = parent(i); - if (p != -1) { - next(i) = head(p); - head(p) = i; - } - } - ordinal_type k = 0; - for (ordinal_type i=0;i= 0) ++count(parent(i)); - - // parent has more than a child, it becomes a supernode candidate - // roots are supernodes - for (ordinal_type i=0;i 1 || parent(i) < 0) flag(i) = true; - - // accumulate subtree sizes in count. - for (ordinal_type i=0;i= 0) count(parent(i)) += count(i); - - // tree leaves are also supernode candidate (not easy to understand this) - for (ordinal_type i=0;i ordinal_type { - // # of columns accessed by this super node - ordinal_type cnt = 0; - - // loop over super node cols (diagonal block) - for (ordinal_type col=sbeg;col ordinal_type { - ordinal_type cnt = 0; - for (ordinal_type k=0;k= 0) { - const ordinal_type sidpar = flag(parent(i)); - if (sidpar != sid) stree_parent(sid) = sidpar; - } - } - } - - auto clear_array = [](const ordinal_type cnt, - const ordinal_type_array &a) { - memset(a.data(), 0, cnt*sizeof(typename ordinal_type_array::value_type)); - }; - - // construct parent - child relations - { - clear_array(m, flag); - ordinal_type cnt = 0; - for (ordinal_type sid=0;sid SymbolicTools(CrsMatBaseType &A, @@ -538,215 +161,24 @@ namespace Tacho { Kokkos::deep_copy(_peri, G.InvPermVector()); } - inline - ordinal_type NumSupernodes() const { return _supernodes.extent(0) - 1; } - - inline - ordinal_type_array Supernodes() const { return _supernodes; } - - inline - size_type_array gidSuperPanelPtr() const { return _gid_super_panel_ptr; } - - inline - ordinal_type_array gidSuperPanelColIdx() const { return _gid_super_panel_colidx; } - - inline - size_type_array sidSuperPanelPtr() const { return _sid_super_panel_ptr; } - - inline - ordinal_type_array sidSuperPanelColIdx() const { return _sid_super_panel_colidx; } - - inline - ordinal_type_array blkSuperPanelColIdx() const { return _blk_super_panel_colidx; } - - inline - ordinal_type_array SupernodesTreeParent() const { return _stree_parent; } - - inline - size_type_array SupernodesTreePtr() const { return _stree_ptr; } - - inline - ordinal_type_array SupernodesTreeChildren() const { return _stree_children; } - - inline - ordinal_type_array SupernodesTreeRoots() const { return _stree_roots; } - - inline - ordinal_type_array SupernodesTreeLevel() const { return _stree_level; } - - inline - void - symbolicFactorize(const ordinal_type verbose = 0) { - Kokkos::Impl::Timer timer; - double t_symfact = 0, t_supernode = 0, t_extra = 0, m_used =0, m_peak = 0; - - auto track_alloc = [&](const double in) { - m_used += in; - m_peak = max(m_used, m_peak); - }; - auto track_free = [&](const double out) { - m_used -= out; - }; - - stat.nrows = _m; - stat.nnz_a = _ap(_m); - - // compute elimination tree - timer.reset(); - ordinal_type_array work(do_not_initialize_tag("work"), _m*4); - ordinal_type_array parent(do_not_initialize_tag("parent"), _m); - - track_alloc(work.span()*sizeof(ordinal_type)); - track_alloc(parent.span()*sizeof(ordinal_type)); - { - auto post = Kokkos::subview(work, range_type(0*_m, 1*_m)); - auto w = Kokkos::subview(work, range_type(1*_m, 4*_m)); - - // compute elimination tree and its post ordering - computeEliminationTree(_m, _ap, _aj, _perm, _peri, parent, w); - computePostOrdering(_m, parent, post, w); - - // update permutation vector and elimination tree - ordinal_type *w0 = w.data(), *w1 = w0 + _m, *w2 = w1 + _m; - for (ordinal_type i=0;i<_m;++i) { - w0[i] = _perm(i); - w1[post(i)] = i; - } - for (ordinal_type i=0;i<_m;++i) { - const ordinal_type q = w0[post(i)]; - _perm(i) = q; - _peri(q) = i; - const ordinal_type p = parent(post(i)); - if (p == -1) w2[i] = p; - else w2[i] = w1[p]; - } - for (ordinal_type i=0;i<_m;++i) { - parent(i) = w2[i]; - } - - // do not compute etree again - //computeEliminationTree(_m, _ap, _aj, _perm, _peri, parent, w); - } - t_symfact += timer.seconds(); - - timer.reset(); - size_type_array ap; - ordinal_type_array aj; - { - // compute super node structure - computeSupernodes(_m, _ap, _aj, _perm, _peri, parent, _supernodes, work); - - // compute fill pattern - computeFillPatternUpper(_m, _ap, _aj, _perm, _peri, ap, aj, work); - - // allocate supernodes - allocateSupernodes(_m, ap, aj, _supernodes, work, - _gid_super_panel_ptr, - _gid_super_panel_colidx, - _sid_super_panel_ptr, - _sid_super_panel_colidx, - _blk_super_panel_colidx); - } - t_supernode += timer.seconds(); - - track_alloc(ap.span()*sizeof(size_type)); - track_alloc(aj.span()*sizeof(ordinal_type)); - - track_alloc(_supernodes.span()*sizeof(ordinal_type)); - track_alloc(_gid_super_panel_ptr.span()*sizeof(size_type)); - track_alloc(_gid_super_panel_colidx.span()*sizeof(ordinal_type)); - track_alloc(_sid_super_panel_ptr.span()*sizeof(size_type)); - track_alloc(_sid_super_panel_colidx.span()*sizeof(ordinal_type)); - track_alloc(_blk_super_panel_colidx.span()*sizeof(ordinal_type)); - - timer.reset(); - { - // supernode assembly tree - computeSupernodesAssemblyTree(parent, - _supernodes, - _stree_level, - _stree_parent, - _stree_ptr, - _stree_children, - _stree_roots, - work); - } - t_extra += timer.seconds(); - - track_alloc(_stree_level.span()*sizeof(ordinal_type)); - track_alloc(_stree_parent.span()*sizeof(ordinal_type)); - track_alloc(_stree_ptr.span()*sizeof(size_type)); - track_alloc(_stree_children.span()*sizeof(ordinal_type)); - track_alloc(_stree_roots.span()*sizeof(ordinal_type)); - - track_free(ap.span()*sizeof(size_type)); - track_free(aj.span()*sizeof(ordinal_type)); - - track_free(work.span()*sizeof(ordinal_type)); - track_free(parent.span()*sizeof(ordinal_type)); - - stat.nnz_u = ap(_m); - stat.nsupernodes = _supernodes.extent(0) - 1; - stat.max_nchildren = 0; - stat.largest_supernode = 0; - stat.largest_schur = 0; - - for (ordinal_type sid=0;sid CrsMatrixBaseHostType; @@ -126,45 +124,4 @@ TEST( Graph, metis ) { } #endif -#if defined(TACHO_HAVE_SCOTCH) -TEST( Graph, camd ) { - TEST_BEGIN; - std::string inputfilename = MM_TEST_FILE + ".mtx"; - - CrsMatrixBaseHostType Ah; - MatrixMarket::read(inputfilename, Ah); - - Graph G(Ah); - GraphTools_Scotch S(G); - - const ordinal_type m = G.NumRows(); - S.setTreeLevel(log2(m)); - S.setStrategy( SCOTCH_STRATSPEED - | SCOTCH_STRATSPEED - | SCOTCH_STRATLEVELMAX - | SCOTCH_STRATLEVELMIN - | SCOTCH_STRATLEAFSIMPLE - | SCOTCH_STRATSEPASIMPLE - ); - S.reorder(); - - GraphTools_CAMD C(G); - C.setConstraint(S.NumBlocks(), - S.RangeVector(), - S.InvPermVector()); - C.reorder(); - - const auto perm = C.PermVector(); - const auto peri = C.InvPermVector(); - - /// - /// perm and invperm should be properly setup - /// - for (ordinal_type i=0;i CrsMatrixBaseHostType; @@ -74,7 +74,7 @@ TEST( Symbolic, functions ) { #elif defined(TACHO_HAVE_SCOTCH) GraphTools_Scotch T(G); #else - GraphTools_CAMD T(G); + GraphTools T(G); #endif T.reorder(); @@ -162,7 +162,7 @@ TEST( Symbolic, interface ) { #elif defined(TACHO_HAVE_SCOTCH) GraphTools_Scotch T(G); #else - GraphTools_CAMD T(G); + GraphTools T(G); #endif T.reorder();