]> https://gitweb.dealii.org/ - dealii.git/commitdiff
Add support for Vector
authorDaniel Garcia-Sanchez <daniel.garcia-sanchez@insp.upmc.fr>
Wed, 22 Aug 2018 15:23:32 +0000 (17:23 +0200)
committerDaniel Garcia-Sanchez <daniel.garcia-sanchez@insp.upmc.fr>
Wed, 9 Jan 2019 18:08:20 +0000 (19:08 +0100)
source/base/hdf5.cc
source/base/hdf5.inst.in
tests/base/hdf5_03.cc
tests/base/hdf5_03.with_hdf5=true.mpirun=1.output
tests/base/hdf5_03.with_hdf5=true.mpirun=4.output

index 1f01a10cbf30b5610b4b40b18c63e17e745b7cfd..e10b0771c7b79aced18bc1cb756576da06eb8a86 100644 (file)
@@ -20,6 +20,7 @@
 #  include <deal.II/base/hdf5.h>
 
 #  include <deal.II/lac/full_matrix.h>
+#  include <deal.II/lac/vector.h>
 
 #  include <hdf5.h>
 
@@ -111,6 +112,17 @@ namespace HDF5
       return static_cast<unsigned int>(data.size());
     }
 
+    template <template <class...> class Container, typename number>
+    typename std::enable_if<
+      std::is_same<Container<number>, Vector<number>>::value,
+      unsigned int>::type
+    get_container_size(const Container<number> &data)
+    {
+      // It is very important to pass the variable "data" by reference otherwise
+      // the pointer will be wrong
+      return static_cast<unsigned int>(data.size());
+    }
+
     template <template <class...> class Container, typename number>
     typename std::enable_if<
       std::is_same<Container<number>, FullMatrix<number>>::value,
@@ -135,11 +147,23 @@ namespace HDF5
       return data.data();
     }
 
+    template <template <class...> class Container, typename number>
+    typename std::enable_if<
+      std::is_same<Container<number>, Vector<number>>::value,
+      void *>::type
+    get_container_pointer(Container<number> &data)
+    {
+      // It is very important to pass the variable "data" by reference otherwise
+      // the pointer will be wrong.
+      // Use the first element of FullMatrix to get the pointer to the raw data
+      return &data[0];
+    }
+
     template <template <class...> class Container, typename number>
     typename std::enable_if<
       std::is_same<Container<number>, FullMatrix<number>>::value,
       void *>::type
-    get_container_pointer(FullMatrix<number> &data)
+    get_container_pointer(Container<number> &data)
     {
       // It is very important to pass the variable "data" by reference otherwise
       // the pointer will be wrong.
@@ -161,11 +185,24 @@ namespace HDF5
       return data.data();
     }
 
+    template <template <class...> class Container, typename number>
+    typename std::enable_if<
+      std::is_same<Container<number>, Vector<number>>::value,
+      const void *>::type
+    get_container_const_pointer(const Container<number> &data)
+    {
+      // It is very important to pass the variable "data" by reference otherwise
+      // the pointer will be wrong.
+      // Use the first element of FullMatrix to get the pointer to the raw data
+      return &*data.begin();
+    }
+
+
     template <template <class...> class Container, typename number>
     typename std::enable_if<
       std::is_same<Container<number>, FullMatrix<number>>::value,
       const void *>::type
-    get_container_const_pointer(const FullMatrix<number> &data)
+    get_container_const_pointer(const Container<number> &data)
     {
       // It is very important to pass the variable "data" by reference otherwise
       // the pointer will be wrong.
@@ -180,7 +217,17 @@ namespace HDF5
       Container<number>>::type
     initialize_container(std::vector<hsize_t> dimensions)
     {
-      return std::vector<number>(std::accumulate(
+      return Container<number>(std::accumulate(
+        dimensions.begin(), dimensions.end(), 1, std::multiplies<int>()));
+    }
+
+    template <template <class...> class Container, typename number>
+    typename std::enable_if<
+      std::is_same<Container<number>, Vector<number>>::value,
+      Container<number>>::type
+    initialize_container(std::vector<hsize_t> dimensions)
+    {
+      return Container<number>(std::accumulate(
         dimensions.begin(), dimensions.end(), 1, std::multiplies<int>()));
     }
 
index 83cb2f5d2627894696dab28424437e1d81eaa97f..9b1830ebfcf450d964f364a705b8120891c53ec3 100644 (file)
@@ -21,6 +21,7 @@ for (number : REAL_AND_COMPLEX_SCALARS)
                                                  number            value) const;
 
     template std::vector<number> DataSet::read<std::vector, number>();
+    template Vector<number>      DataSet::read<Vector, number>();
     template FullMatrix<number>  DataSet::read<FullMatrix, number>();
 
     template std::vector<number> DataSet::read_selection<number>(
@@ -28,7 +29,8 @@ for (number : REAL_AND_COMPLEX_SCALARS)
 
     template std::vector<number> DataSet::read_hyperslab<std::vector, number>(
       const std::vector<hsize_t> &offset, const std::vector<hsize_t> &count);
-
+    template Vector<number> DataSet::read_hyperslab<Vector, number>(
+      const std::vector<hsize_t> &offset, const std::vector<hsize_t> &count);
     template FullMatrix<number> DataSet::read_hyperslab<FullMatrix, number>(
       const std::vector<hsize_t> &offset, const std::vector<hsize_t> &count);
 
@@ -36,17 +38,21 @@ for (number : REAL_AND_COMPLEX_SCALARS)
 
     template void DataSet::write<std::vector, number>(
       const std::vector<number> &data);
-
+    template void DataSet::write<Vector, number>(const Vector<number> &data);
     template void DataSet::write<FullMatrix, number>(
       const FullMatrix<number> &data);
 
     template void DataSet::write_selection<number>(
       const std::vector<number> &data, const std::vector<hsize_t> coordinates);
+
     template void DataSet::write_hyperslab<std::vector, number>(
       const std::vector<number> & data,
       const std::vector<hsize_t> &offset,
       const std::vector<hsize_t> &count);
-
+    template void DataSet::write_hyperslab<Vector, number>(
+      const Vector<number> &      data,
+      const std::vector<hsize_t> &offset,
+      const std::vector<hsize_t> &count);
     template void DataSet::write_hyperslab<FullMatrix, number>(
       const FullMatrix<number> &  data,
       const std::vector<hsize_t> &offset,
@@ -59,7 +65,13 @@ for (number : REAL_AND_COMPLEX_SCALARS)
       const std::vector<hsize_t> &stride,
       const std::vector<hsize_t> &count,
       const std::vector<hsize_t> &block);
-
+    template void DataSet::write_hyperslab<Vector, number>(
+      const Vector<number> &      data,
+      const std::vector<hsize_t> &data_dimensions,
+      const std::vector<hsize_t> &offset,
+      const std::vector<hsize_t> &stride,
+      const std::vector<hsize_t> &count,
+      const std::vector<hsize_t> &block);
     template void DataSet::write_hyperslab<FullMatrix, number>(
       const FullMatrix<number> &  data,
       const std::vector<hsize_t> &data_dimensions,
index af88a364b7200de8306b2c6f28155956346af83f..80151073b92664204024f075efbdca019a7dcc80 100644 (file)
@@ -18,6 +18,9 @@
 #include <deal.II/base/conditional_ostream.h>
 #include <deal.II/base/hdf5.h>
 
+#include <deal.II/lac/full_matrix.h>
+#include <deal.II/lac/vector.h>
+
 #include <boost/type_traits.hpp>
 
 #include <numeric>
@@ -31,7 +34,16 @@ typename std::enable_if<
   Container<Number>>::type
 initialize_container(std::vector<hsize_t> dimensions)
 {
-  return std::vector<Number>(std::accumulate(
+  return Container<Number>(std::accumulate(
+    dimensions.begin(), dimensions.end(), 1, std::multiplies<int>()));
+}
+
+template <template <class...> class Container, typename Number>
+typename std::enable_if<std::is_same<Container<Number>, Vector<Number>>::value,
+                        Container<Number>>::type
+initialize_container(std::vector<hsize_t> dimensions)
+{
+  return Container<Number>(std::accumulate(
     dimensions.begin(), dimensions.end(), 1, std::multiplies<int>()));
 }
 
@@ -54,6 +66,14 @@ container_sum(Container<Number> data)
   return std::accumulate(data.begin(), data.end(), static_cast<Number>(0));
 }
 
+template <template <class...> class Container, typename Number>
+typename std::enable_if<std::is_same<Container<Number>, Vector<Number>>::value,
+                        Number>::type
+container_sum(Container<Number> data)
+{
+  return std::accumulate(data.begin(), data.end(), static_cast<Number>(0));
+}
+
 template <template <class...> class Container, typename Number>
 typename std::enable_if<
   std::is_same<Container<Number>, FullMatrix<Number>>::value,
@@ -102,6 +122,17 @@ assign_data(Container<Number> &data)
     }
 }
 
+template <template <class...> class Container, typename Number>
+typename std::enable_if<std::is_same<Container<Number>, Vector<Number>>::value,
+                        void>::type
+assign_data(Container<Number> &data)
+{
+  for (unsigned int idx = 0; idx < data.size(); ++idx)
+    {
+      data[idx] = static_cast<Number>(idx) * get_factor<Number>();
+    }
+}
+
 template <template <class...> class Container, typename Number>
 typename std::enable_if<
   std::is_same<Container<Number>, FullMatrix<Number>>::value,
@@ -815,6 +846,22 @@ main(int argc, char **argv)
                                                      dataset_dimensions,
                                                      mpi_communicator,
                                                      pcout);
+        write_test<Vector, float>(data_file,
+                                  dataset_dimensions,
+                                  mpi_communicator,
+                                  pcout);
+        write_test<Vector, double>(data_file,
+                                   dataset_dimensions,
+                                   mpi_communicator,
+                                   pcout);
+        write_test<Vector, std::complex<float>>(data_file,
+                                                dataset_dimensions,
+                                                mpi_communicator,
+                                                pcout);
+        write_test<Vector, std::complex<double>>(data_file,
+                                                 dataset_dimensions,
+                                                 mpi_communicator,
+                                                 pcout);
       }
 
       {
@@ -841,6 +888,14 @@ main(int argc, char **argv)
         read_test<FullMatrix, std::complex<double>>(data_file,
                                                     mpi_communicator,
                                                     pcout);
+        read_test<Vector, float>(data_file, mpi_communicator, pcout);
+        read_test<Vector, double>(data_file, mpi_communicator, pcout);
+        read_test<Vector, std::complex<float>>(data_file,
+                                               mpi_communicator,
+                                               pcout);
+        read_test<Vector, std::complex<double>>(data_file,
+                                                mpi_communicator,
+                                                pcout);
       }
     }
   catch (std::exception &exc)
index 3a0a81c6d746b098b9155df86d041db9f1f0b6df..fc3b1fa06edd1effc8d9c65e86d8402cbcf681f9 100644 (file)
@@ -159,6 +159,71 @@ DEAL::Rank dataset_4 FullMatrix<std::complex<double>> (Write): 2
 DEAL::Sum dataset_4 FullMatrix<std::complex<double>> (Write): (1179.00,1179.00)
 DEAL::Hyperslab_a sum dataset_4 FullMatrix<std::complex<double>> (Write): (45.0000,45.0000)
 DEAL::Hyperslab_b sum dataset_4 FullMatrix<std::complex<double>> (Write): (6.00000,6.00000)
+DEAL::Write tests for <float> datasets
+DEAL::Dimensions dataset_1 <float> (Write): 50 30
+DEAL::Size dataset_1 <float> (Write): 1500
+DEAL::Rank dataset_1 <float> (Write): 2
+DEAL::Sum dataset_1 <float> (Write): 1.12425e+06
+DEAL::Dimensions dataset_2 <float> (Write): 50 30
+DEAL::Size dataset_2 <float> (Write): 1500
+DEAL::Rank dataset_2 <float> (Write): 2
+DEAL::Sum dataset_2 <float> (Write): 61.0000
+DEAL::Dimensions dataset_3 <float> (Write): 50 30
+DEAL::Size dataset_3 <float> (Write): 1500
+DEAL::Rank dataset_3 <float> (Write): 2
+DEAL::Sum dataset_3 <float> (Write): 1.12425e+06
+DEAL::Dimensions dataset_4 <float> (Write): 50 30
+DEAL::Size dataset_4 <float> (Write): 1500
+DEAL::Rank dataset_4 <float> (Write): 2
+DEAL::Sum dataset_4 <float> (Write): 1179.00
+DEAL::Hyperslab_a sum dataset_4 <float> (Write): 45.0000
+DEAL::Hyperslab_b sum dataset_4 <float> (Write): 6.00000
+DEAL::Write tests for <double> datasets
+DEAL::Dimensions dataset_1 <double> (Write): 50 30
+DEAL::Size dataset_1 <double> (Write): 1500
+DEAL::Rank dataset_1 <double> (Write): 2
+DEAL::Sum dataset_1 <double> (Write): 1.12425e+06
+DEAL::Dimensions dataset_2 <double> (Write): 50 30
+DEAL::Size dataset_2 <double> (Write): 1500
+DEAL::Rank dataset_2 <double> (Write): 2
+DEAL::Sum dataset_2 <double> (Write): 61.0000
+DEAL::Sum dataset_3 <double> (Write): 1.12425e+06
+DEAL::Dimensions dataset_4 <double> (Write): 50 30
+DEAL::Size dataset_4 <double> (Write): 1500
+DEAL::Rank dataset_4 <double> (Write): 2
+DEAL::Sum dataset_4 <double> (Write): 1179.00
+DEAL::Hyperslab_a sum dataset_4 <double> (Write): 45.0000
+DEAL::Hyperslab_b sum dataset_4 <double> (Write): 6.00000
+DEAL::Write tests for <std::complex<float>> datasets
+DEAL::Dimensions dataset_1 <std::complex<float>> (Write): 50 30
+DEAL::Size dataset_1 <std::complex<float>> (Write): 1500
+DEAL::Rank dataset_1 <std::complex<float>> (Write): 2
+DEAL::Sum dataset_1 <std::complex<float>> (Write): (1.12425e+06,1.12425e+06)
+DEAL::Dimensions dataset_2 <std::complex<float>> (Write): 50 30
+DEAL::Size dataset_2 <std::complex<float>> (Write): 1500
+DEAL::Rank dataset_2 <std::complex<float>> (Write): 2
+DEAL::Sum dataset_2 <std::complex<float>> (Write): (61.0000,0.00000)
+DEAL::Dimensions dataset_4 <std::complex<float>> (Write): 50 30
+DEAL::Size dataset_4 <std::complex<float>> (Write): 1500
+DEAL::Rank dataset_4 <std::complex<float>> (Write): 2
+DEAL::Sum dataset_4 <std::complex<float>> (Write): (1179.00,1179.00)
+DEAL::Hyperslab_a sum dataset_4 <std::complex<float>> (Write): (45.0000,45.0000)
+DEAL::Hyperslab_b sum dataset_4 <std::complex<float>> (Write): (6.00000,6.00000)
+DEAL::Write tests for <std::complex<double>> datasets
+DEAL::Dimensions dataset_1 <std::complex<double>> (Write): 50 30
+DEAL::Size dataset_1 <std::complex<double>> (Write): 1500
+DEAL::Rank dataset_1 <std::complex<double>> (Write): 2
+DEAL::Sum dataset_1 <std::complex<double>> (Write): (1.12425e+06,1.12425e+06)
+DEAL::Dimensions dataset_2 <std::complex<double>> (Write): 50 30
+DEAL::Size dataset_2 <std::complex<double>> (Write): 1500
+DEAL::Rank dataset_2 <std::complex<double>> (Write): 2
+DEAL::Sum dataset_2 <std::complex<double>> (Write): (61.0000,0.00000)
+DEAL::Dimensions dataset_4 <std::complex<double>> (Write): 50 30
+DEAL::Size dataset_4 <std::complex<double>> (Write): 1500
+DEAL::Rank dataset_4 <std::complex<double>> (Write): 2
+DEAL::Sum dataset_4 <std::complex<double>> (Write): (1179.00,1179.00)
+DEAL::Hyperslab_a sum dataset_4 <std::complex<double>> (Write): (45.0000,45.0000)
+DEAL::Hyperslab_b sum dataset_4 <std::complex<double>> (Write): (6.00000,6.00000)
 DEAL::Read tests for std::vector<float> datasets
 DEAL::Dimensions dataset_1 std::vector<float> (Read): 50 30
 DEAL::Size dataset_1 std::vector<float> (Read): 1500
@@ -335,3 +400,75 @@ DEAL::Rank dataset_4 FullMatrix<std::complex<double>> (Read): 2
 DEAL::Sum dataset_4 FullMatrix<std::complex<double>> (Read): (1173.00,1173.00)
 DEAL::Hyperslab_a sum dataset_4 FullMatrix<std::complex<double>> (Read): (45.0000,45.0000)
 DEAL::Hyperslab_b sum dataset_4 FullMatrix<std::complex<double>> (Read): (0.00000,0.00000)
+DEAL::Read tests for <float> datasets
+DEAL::Dimensions dataset_1 <float> (Read): 50 30
+DEAL::Size dataset_1 <float> (Read): 1500
+DEAL::Rank dataset_1 <float> (Read): 2
+DEAL::Sum dataset_1 <float> (Read): 1.12425e+06
+DEAL::Dimensions dataset_2 <float> (Read): 50 30
+DEAL::Size dataset_2 <float> (Read): 1500
+DEAL::Rank dataset_2 <float> (Read): 2
+DEAL::Sum dataset_2 <float> (Read): 16.0000
+DEAL::Selection dataset_2 <float> (Read): 2.00000, 3.00000, 5.00000, 6.00000
+DEAL::Dimensions dataset_3 <float> (Read): 50 30
+DEAL::Size dataset_3 <float> (Read): 1500
+DEAL::Rank dataset_3 <float> (Read): 2
+DEAL::Sum dataset_3 <float> (Read): 1.12425e+06
+DEAL::Dimensions dataset_4 <float> (Read): 50 30
+DEAL::Size dataset_4 <float> (Read): 1500
+DEAL::Rank dataset_4 <float> (Read): 2
+DEAL::Sum dataset_4 <float> (Read): 1173.00
+DEAL::Hyperslab_a sum dataset_4 <float> (Read): 45.0000
+DEAL::Hyperslab_b sum dataset_4 <float> (Read): 0.00000
+DEAL::Read tests for <double> datasets
+DEAL::Dimensions dataset_1 <double> (Read): 50 30
+DEAL::Size dataset_1 <double> (Read): 1500
+DEAL::Rank dataset_1 <double> (Read): 2
+DEAL::Sum dataset_1 <double> (Read): 1.12425e+06
+DEAL::Dimensions dataset_2 <double> (Read): 50 30
+DEAL::Size dataset_2 <double> (Read): 1500
+DEAL::Rank dataset_2 <double> (Read): 2
+DEAL::Sum dataset_2 <double> (Read): 16.0000
+DEAL::Selection dataset_2 <double> (Read): 2.00000, 3.00000, 5.00000, 6.00000
+DEAL::Dimensions dataset_3 <double> (Read): 50 30
+DEAL::Size dataset_3 <double> (Read): 1500
+DEAL::Rank dataset_3 <double> (Read): 2
+DEAL::Sum dataset_3 <double> (Read): 1.12425e+06
+DEAL::Dimensions dataset_4 <double> (Read): 50 30
+DEAL::Size dataset_4 <double> (Read): 1500
+DEAL::Rank dataset_4 <double> (Read): 2
+DEAL::Sum dataset_4 <double> (Read): 1173.00
+DEAL::Hyperslab_a sum dataset_4 <double> (Read): 45.0000
+DEAL::Hyperslab_b sum dataset_4 <double> (Read): 0.00000
+DEAL::Read tests for <std::complex<float>> datasets
+DEAL::Dimensions dataset_1 <std::complex<float>> (Read): 50 30
+DEAL::Size dataset_1 <std::complex<float>> (Read): 1500
+DEAL::Rank dataset_1 <std::complex<float>> (Read): 2
+DEAL::Sum dataset_1 <std::complex<float>> (Read): (1.12425e+06,1.12425e+06)
+DEAL::Dimensions dataset_2 <std::complex<float>> (Read): 50 30
+DEAL::Size dataset_2 <std::complex<float>> (Read): 1500
+DEAL::Rank dataset_2 <std::complex<float>> (Read): 2
+DEAL::Sum dataset_2 <std::complex<float>> (Read): (16.0000,0.00000)
+DEAL::Selection dataset_2 <std::complex<float>> (Read): (2.00000,0.00000), (3.00000,0.00000), (5.00000,0.00000), (6.00000,0.00000)
+DEAL::Dimensions dataset_4 <std::complex<float>> (Read): 50 30
+DEAL::Size dataset_4 <std::complex<float>> (Read): 1500
+DEAL::Rank dataset_4 <std::complex<float>> (Read): 2
+DEAL::Sum dataset_4 <std::complex<float>> (Read): (1173.00,1173.00)
+DEAL::Hyperslab_a sum dataset_4 <std::complex<float>> (Read): (45.0000,45.0000)
+DEAL::Hyperslab_b sum dataset_4 <std::complex<float>> (Read): (0.00000,0.00000)
+DEAL::Read tests for <std::complex<double>> datasets
+DEAL::Dimensions dataset_1 <std::complex<double>> (Read): 50 30
+DEAL::Size dataset_1 <std::complex<double>> (Read): 1500
+DEAL::Rank dataset_1 <std::complex<double>> (Read): 2
+DEAL::Sum dataset_1 <std::complex<double>> (Read): (1.12425e+06,1.12425e+06)
+DEAL::Dimensions dataset_2 <std::complex<double>> (Read): 50 30
+DEAL::Size dataset_2 <std::complex<double>> (Read): 1500
+DEAL::Rank dataset_2 <std::complex<double>> (Read): 2
+DEAL::Sum dataset_2 <std::complex<double>> (Read): (16.0000,0.00000)
+DEAL::Selection dataset_2 <std::complex<double>> (Read): (2.00000,0.00000), (3.00000,0.00000), (5.00000,0.00000), (6.00000,0.00000)
+DEAL::Dimensions dataset_4 <std::complex<double>> (Read): 50 30
+DEAL::Size dataset_4 <std::complex<double>> (Read): 1500
+DEAL::Rank dataset_4 <std::complex<double>> (Read): 2
+DEAL::Sum dataset_4 <std::complex<double>> (Read): (1173.00,1173.00)
+DEAL::Hyperslab_a sum dataset_4 <std::complex<double>> (Read): (45.0000,45.0000)
+DEAL::Hyperslab_b sum dataset_4 <std::complex<double>> (Read): (0.00000,0.00000)
index ec49502f5ed4c2b15395c57821e7374a56b8a518..9d6d338b12924ddcdfa4b1f00626a73e94922ce6 100644 (file)
@@ -159,6 +159,71 @@ DEAL::Rank dataset_4 FullMatrix<std::complex<double>> (Write): 2
 DEAL::Sum dataset_4 FullMatrix<std::complex<double>> (Write): (1179.00,1179.00)
 DEAL::Hyperslab_a sum dataset_4 FullMatrix<std::complex<double>> (Write): (45.0000,45.0000)
 DEAL::Hyperslab_b sum dataset_4 FullMatrix<std::complex<double>> (Write): (6.00000,6.00000)
+DEAL::Write tests for <float> datasets
+DEAL::Dimensions dataset_1 <float> (Write): 50 30
+DEAL::Size dataset_1 <float> (Write): 1500
+DEAL::Rank dataset_1 <float> (Write): 2
+DEAL::Sum dataset_1 <float> (Write): 1.12425e+06
+DEAL::Dimensions dataset_2 <float> (Write): 50 30
+DEAL::Size dataset_2 <float> (Write): 1500
+DEAL::Rank dataset_2 <float> (Write): 2
+DEAL::Sum dataset_2 <float> (Write): 61.0000
+DEAL::Dimensions dataset_3 <float> (Write): 50 30
+DEAL::Size dataset_3 <float> (Write): 1500
+DEAL::Rank dataset_3 <float> (Write): 2
+DEAL::Sum dataset_3 <float> (Write): 1.12425e+06
+DEAL::Dimensions dataset_4 <float> (Write): 50 30
+DEAL::Size dataset_4 <float> (Write): 1500
+DEAL::Rank dataset_4 <float> (Write): 2
+DEAL::Sum dataset_4 <float> (Write): 1179.00
+DEAL::Hyperslab_a sum dataset_4 <float> (Write): 45.0000
+DEAL::Hyperslab_b sum dataset_4 <float> (Write): 6.00000
+DEAL::Write tests for <double> datasets
+DEAL::Dimensions dataset_1 <double> (Write): 50 30
+DEAL::Size dataset_1 <double> (Write): 1500
+DEAL::Rank dataset_1 <double> (Write): 2
+DEAL::Sum dataset_1 <double> (Write): 1.12425e+06
+DEAL::Dimensions dataset_2 <double> (Write): 50 30
+DEAL::Size dataset_2 <double> (Write): 1500
+DEAL::Rank dataset_2 <double> (Write): 2
+DEAL::Sum dataset_2 <double> (Write): 61.0000
+DEAL::Sum dataset_3 <double> (Write): 1.12425e+06
+DEAL::Dimensions dataset_4 <double> (Write): 50 30
+DEAL::Size dataset_4 <double> (Write): 1500
+DEAL::Rank dataset_4 <double> (Write): 2
+DEAL::Sum dataset_4 <double> (Write): 1179.00
+DEAL::Hyperslab_a sum dataset_4 <double> (Write): 45.0000
+DEAL::Hyperslab_b sum dataset_4 <double> (Write): 6.00000
+DEAL::Write tests for <std::complex<float>> datasets
+DEAL::Dimensions dataset_1 <std::complex<float>> (Write): 50 30
+DEAL::Size dataset_1 <std::complex<float>> (Write): 1500
+DEAL::Rank dataset_1 <std::complex<float>> (Write): 2
+DEAL::Sum dataset_1 <std::complex<float>> (Write): (1.12425e+06,1.12425e+06)
+DEAL::Dimensions dataset_2 <std::complex<float>> (Write): 50 30
+DEAL::Size dataset_2 <std::complex<float>> (Write): 1500
+DEAL::Rank dataset_2 <std::complex<float>> (Write): 2
+DEAL::Sum dataset_2 <std::complex<float>> (Write): (61.0000,0.00000)
+DEAL::Dimensions dataset_4 <std::complex<float>> (Write): 50 30
+DEAL::Size dataset_4 <std::complex<float>> (Write): 1500
+DEAL::Rank dataset_4 <std::complex<float>> (Write): 2
+DEAL::Sum dataset_4 <std::complex<float>> (Write): (1179.00,1179.00)
+DEAL::Hyperslab_a sum dataset_4 <std::complex<float>> (Write): (45.0000,45.0000)
+DEAL::Hyperslab_b sum dataset_4 <std::complex<float>> (Write): (6.00000,6.00000)
+DEAL::Write tests for <std::complex<double>> datasets
+DEAL::Dimensions dataset_1 <std::complex<double>> (Write): 50 30
+DEAL::Size dataset_1 <std::complex<double>> (Write): 1500
+DEAL::Rank dataset_1 <std::complex<double>> (Write): 2
+DEAL::Sum dataset_1 <std::complex<double>> (Write): (1.12425e+06,1.12425e+06)
+DEAL::Dimensions dataset_2 <std::complex<double>> (Write): 50 30
+DEAL::Size dataset_2 <std::complex<double>> (Write): 1500
+DEAL::Rank dataset_2 <std::complex<double>> (Write): 2
+DEAL::Sum dataset_2 <std::complex<double>> (Write): (61.0000,0.00000)
+DEAL::Dimensions dataset_4 <std::complex<double>> (Write): 50 30
+DEAL::Size dataset_4 <std::complex<double>> (Write): 1500
+DEAL::Rank dataset_4 <std::complex<double>> (Write): 2
+DEAL::Sum dataset_4 <std::complex<double>> (Write): (1179.00,1179.00)
+DEAL::Hyperslab_a sum dataset_4 <std::complex<double>> (Write): (45.0000,45.0000)
+DEAL::Hyperslab_b sum dataset_4 <std::complex<double>> (Write): (6.00000,6.00000)
 DEAL::Read tests for std::vector<float> datasets
 DEAL::Dimensions dataset_1 std::vector<float> (Read): 50 30
 DEAL::Size dataset_1 std::vector<float> (Read): 1500
@@ -335,3 +400,75 @@ DEAL::Rank dataset_4 FullMatrix<std::complex<double>> (Read): 2
 DEAL::Sum dataset_4 FullMatrix<std::complex<double>> (Read): (1179.00,1179.00)
 DEAL::Hyperslab_a sum dataset_4 FullMatrix<std::complex<double>> (Read): (45.0000,45.0000)
 DEAL::Hyperslab_b sum dataset_4 FullMatrix<std::complex<double>> (Read): (6.00000,6.00000)
+DEAL::Read tests for <float> datasets
+DEAL::Dimensions dataset_1 <float> (Read): 50 30
+DEAL::Size dataset_1 <float> (Read): 1500
+DEAL::Rank dataset_1 <float> (Read): 2
+DEAL::Sum dataset_1 <float> (Read): 1.12425e+06
+DEAL::Dimensions dataset_2 <float> (Read): 50 30
+DEAL::Size dataset_2 <float> (Read): 1500
+DEAL::Rank dataset_2 <float> (Read): 2
+DEAL::Sum dataset_2 <float> (Read): 61.0000
+DEAL::Selection dataset_2 <float> (Read): 2.00000, 3.00000, 5.00000, 6.00000
+DEAL::Dimensions dataset_3 <float> (Read): 50 30
+DEAL::Size dataset_3 <float> (Read): 1500
+DEAL::Rank dataset_3 <float> (Read): 2
+DEAL::Sum dataset_3 <float> (Read): 1.12425e+06
+DEAL::Dimensions dataset_4 <float> (Read): 50 30
+DEAL::Size dataset_4 <float> (Read): 1500
+DEAL::Rank dataset_4 <float> (Read): 2
+DEAL::Sum dataset_4 <float> (Read): 1179.00
+DEAL::Hyperslab_a sum dataset_4 <float> (Read): 45.0000
+DEAL::Hyperslab_b sum dataset_4 <float> (Read): 6.00000
+DEAL::Read tests for <double> datasets
+DEAL::Dimensions dataset_1 <double> (Read): 50 30
+DEAL::Size dataset_1 <double> (Read): 1500
+DEAL::Rank dataset_1 <double> (Read): 2
+DEAL::Sum dataset_1 <double> (Read): 1.12425e+06
+DEAL::Dimensions dataset_2 <double> (Read): 50 30
+DEAL::Size dataset_2 <double> (Read): 1500
+DEAL::Rank dataset_2 <double> (Read): 2
+DEAL::Sum dataset_2 <double> (Read): 61.0000
+DEAL::Selection dataset_2 <double> (Read): 2.00000, 3.00000, 5.00000, 6.00000
+DEAL::Dimensions dataset_3 <double> (Read): 50 30
+DEAL::Size dataset_3 <double> (Read): 1500
+DEAL::Rank dataset_3 <double> (Read): 2
+DEAL::Sum dataset_3 <double> (Read): 1.12425e+06
+DEAL::Dimensions dataset_4 <double> (Read): 50 30
+DEAL::Size dataset_4 <double> (Read): 1500
+DEAL::Rank dataset_4 <double> (Read): 2
+DEAL::Sum dataset_4 <double> (Read): 1179.00
+DEAL::Hyperslab_a sum dataset_4 <double> (Read): 45.0000
+DEAL::Hyperslab_b sum dataset_4 <double> (Read): 6.00000
+DEAL::Read tests for <std::complex<float>> datasets
+DEAL::Dimensions dataset_1 <std::complex<float>> (Read): 50 30
+DEAL::Size dataset_1 <std::complex<float>> (Read): 1500
+DEAL::Rank dataset_1 <std::complex<float>> (Read): 2
+DEAL::Sum dataset_1 <std::complex<float>> (Read): (1.12425e+06,1.12425e+06)
+DEAL::Dimensions dataset_2 <std::complex<float>> (Read): 50 30
+DEAL::Size dataset_2 <std::complex<float>> (Read): 1500
+DEAL::Rank dataset_2 <std::complex<float>> (Read): 2
+DEAL::Sum dataset_2 <std::complex<float>> (Read): (61.0000,0.00000)
+DEAL::Selection dataset_2 <std::complex<float>> (Read): (2.00000,0.00000), (3.00000,0.00000), (5.00000,0.00000), (6.00000,0.00000)
+DEAL::Dimensions dataset_4 <std::complex<float>> (Read): 50 30
+DEAL::Size dataset_4 <std::complex<float>> (Read): 1500
+DEAL::Rank dataset_4 <std::complex<float>> (Read): 2
+DEAL::Sum dataset_4 <std::complex<float>> (Read): (1179.00,1179.00)
+DEAL::Hyperslab_a sum dataset_4 <std::complex<float>> (Read): (45.0000,45.0000)
+DEAL::Hyperslab_b sum dataset_4 <std::complex<float>> (Read): (6.00000,6.00000)
+DEAL::Read tests for <std::complex<double>> datasets
+DEAL::Dimensions dataset_1 <std::complex<double>> (Read): 50 30
+DEAL::Size dataset_1 <std::complex<double>> (Read): 1500
+DEAL::Rank dataset_1 <std::complex<double>> (Read): 2
+DEAL::Sum dataset_1 <std::complex<double>> (Read): (1.12425e+06,1.12425e+06)
+DEAL::Dimensions dataset_2 <std::complex<double>> (Read): 50 30
+DEAL::Size dataset_2 <std::complex<double>> (Read): 1500
+DEAL::Rank dataset_2 <std::complex<double>> (Read): 2
+DEAL::Sum dataset_2 <std::complex<double>> (Read): (61.0000,0.00000)
+DEAL::Selection dataset_2 <std::complex<double>> (Read): (2.00000,0.00000), (3.00000,0.00000), (5.00000,0.00000), (6.00000,0.00000)
+DEAL::Dimensions dataset_4 <std::complex<double>> (Read): 50 30
+DEAL::Size dataset_4 <std::complex<double>> (Read): 1500
+DEAL::Rank dataset_4 <std::complex<double>> (Read): 2
+DEAL::Sum dataset_4 <std::complex<double>> (Read): (1179.00,1179.00)
+DEAL::Hyperslab_a sum dataset_4 <std::complex<double>> (Read): (45.0000,45.0000)
+DEAL::Hyperslab_b sum dataset_4 <std::complex<double>> (Read): (6.00000,6.00000)

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.