]> https://gitweb.dealii.org/ - dealii.git/commitdiff
add tests for save/load of ScaLapackMatrix
authorBenjamin Brands <benjamin.brands@fau.de>
Tue, 23 Jan 2018 09:14:57 +0000 (10:14 +0100)
committerBenjamin Brands <benjamin.brands@fau.de>
Mon, 29 Jan 2018 12:36:28 +0000 (13:36 +0100)
tests/scalapack/scalapack_10.cc [new file with mode: 0644]
tests/scalapack/scalapack_10.with_hdf5=on.mpirun=1.output [new file with mode: 0644]
tests/scalapack/scalapack_10.with_hdf5=on.mpirun=11.output [new file with mode: 0644]
tests/scalapack/scalapack_10.with_hdf5=on.mpirun=4.output [new file with mode: 0644]
tests/scalapack/scalapack_10.with_hdf5=on.mpirun=5.output [new file with mode: 0644]

diff --git a/tests/scalapack/scalapack_10.cc b/tests/scalapack/scalapack_10.cc
new file mode 100644 (file)
index 0000000..664b82a
--- /dev/null
@@ -0,0 +1,85 @@
+// ---------------------------------------------------------------------
+//
+// Copyright (C) 2017 by the deal.II authors
+//
+// This file is part of the deal.II library.
+//
+// The deal.II library is free software; you can use it, redistribute
+// it, and/or modify it under the terms of the GNU Lesser General
+// Public License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+// The full text of the license can be found in the file LICENSE at
+// the top level of the deal.II distribution.
+//
+// ---------------------------------------------------------------------
+
+#include "../tests.h"
+#include "../lapack/create_matrix.h"
+
+// test serial saving and loading of distributed ScaLAPACKMatrices
+
+#include <deal.II/base/logstream.h>
+#include <deal.II/base/utilities.h>
+#include <deal.II/base/conditional_ostream.h>
+#include <deal.II/base/timer.h>
+#include <deal.II/base/multithread_info.h>
+
+#include <deal.II/lac/scalapack.h>
+
+#include <fstream>
+#include <iostream>
+#include <cstdio>
+
+
+template <typename NumberType>
+void test(const unsigned int size, const unsigned int block_size)
+{
+  const std::string filename = std::string(SOURCE_DIR) + "/test.h5";
+
+  MPI_Comm mpi_communicator(MPI_COMM_WORLD);
+  const unsigned int this_mpi_process(Utilities::MPI::this_mpi_process(mpi_communicator));
+  ConditionalOStream pcout (std::cout, (this_mpi_process ==0));
+
+  //create FullMatrix and fill it
+  FullMatrix<NumberType> full(size);
+  unsigned int count=0;
+  for (unsigned int i=0; i<size; ++i)
+    for (unsigned int j=0; j<size; ++j, ++count)
+      full(i,j) = count;
+
+  //create 2d process grid
+  std::shared_ptr<Utilities::MPI::ProcessGrid> grid = std::make_shared<Utilities::MPI::ProcessGrid>(mpi_communicator,size,size,block_size,block_size);
+
+  ScaLAPACKMatrix<NumberType> scalapack_matrix(size,size,grid,block_size,block_size);
+  ScaLAPACKMatrix<NumberType> scalapack_matrix_copy(size,size,grid,block_size,block_size);
+
+  scalapack_matrix = full;
+  scalapack_matrix.save(filename.c_str());
+  scalapack_matrix_copy.load(filename.c_str());
+
+  FullMatrix<NumberType> copy(size);
+  scalapack_matrix_copy.copy_to(copy);
+  copy.add(-1,full);
+
+  pcout << size << " " << block_size << std::endl;
+  AssertThrow(copy.frobenius_norm()<1e-12,ExcInternalError());
+  std::remove(filename.c_str());
+}
+
+
+
+int main (int argc,char **argv)
+{
+  Utilities::MPI::MPI_InitFinalize mpi_initialization(argc, argv, numbers::invalid_unsigned_int);
+
+  const std::vector<unsigned int> sizes = {{100,200,300}};
+  const std::vector<unsigned int> block_sizes = {{1,16,32}};
+
+  for (const auto &s : sizes)
+    for (const auto &b : block_sizes)
+      test<double>(s,b);
+
+  for (const auto &s : sizes)
+    for (const auto &b : block_sizes)
+      test<float>(s,b);
+}
diff --git a/tests/scalapack/scalapack_10.with_hdf5=on.mpirun=1.output b/tests/scalapack/scalapack_10.with_hdf5=on.mpirun=1.output
new file mode 100644 (file)
index 0000000..3a87dd3
--- /dev/null
@@ -0,0 +1,18 @@
+100 1
+100 16
+100 32
+200 1
+200 16
+200 32
+300 1
+300 16
+300 32
+100 1
+100 16
+100 32
+200 1
+200 16
+200 32
+300 1
+300 16
+300 32
diff --git a/tests/scalapack/scalapack_10.with_hdf5=on.mpirun=11.output b/tests/scalapack/scalapack_10.with_hdf5=on.mpirun=11.output
new file mode 100644 (file)
index 0000000..3a87dd3
--- /dev/null
@@ -0,0 +1,18 @@
+100 1
+100 16
+100 32
+200 1
+200 16
+200 32
+300 1
+300 16
+300 32
+100 1
+100 16
+100 32
+200 1
+200 16
+200 32
+300 1
+300 16
+300 32
diff --git a/tests/scalapack/scalapack_10.with_hdf5=on.mpirun=4.output b/tests/scalapack/scalapack_10.with_hdf5=on.mpirun=4.output
new file mode 100644 (file)
index 0000000..3a87dd3
--- /dev/null
@@ -0,0 +1,18 @@
+100 1
+100 16
+100 32
+200 1
+200 16
+200 32
+300 1
+300 16
+300 32
+100 1
+100 16
+100 32
+200 1
+200 16
+200 32
+300 1
+300 16
+300 32
diff --git a/tests/scalapack/scalapack_10.with_hdf5=on.mpirun=5.output b/tests/scalapack/scalapack_10.with_hdf5=on.mpirun=5.output
new file mode 100644 (file)
index 0000000..3a87dd3
--- /dev/null
@@ -0,0 +1,18 @@
+100 1
+100 16
+100 32
+200 1
+200 16
+200 32
+300 1
+300 16
+300 32
+100 1
+100 16
+100 32
+200 1
+200 16
+200 32
+300 1
+300 16
+300 32

In the beginning the Universe was created. This has made a lot of people very angry and has been widely regarded as a bad move.

Douglas Adams


Typeset in Trocchi and Trocchi Bold Sans Serif.