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