]> https://gitweb.dealii.org/ - dealii.git/commitdiff
Check vector-space-vector concepts for all vector classes. 15637/head
authorWolfgang Bangerth <bangerth@colostate.edu>
Mon, 3 Jul 2023 22:17:39 +0000 (16:17 -0600)
committerWolfgang Bangerth <bangerth@colostate.edu>
Tue, 4 Jul 2023 01:29:51 +0000 (19:29 -0600)
source/lac/block_vector.inst.in
source/lac/la_parallel_block_vector.inst.in
source/lac/la_parallel_vector.inst.in
source/lac/petsc_parallel_block_vector.cc
source/lac/petsc_parallel_vector.cc
source/lac/trilinos_epetra_vector.cc
source/lac/trilinos_tpetra_vector.cc
source/lac/vector.inst.in

index e4a758c6c45ddfda045041714cf242efc2241253..590a89688f71cf12a2fbd848cec98db8374ccc4e 100644 (file)
 
 for (S : REAL_AND_COMPLEX_SCALARS)
   {
+    // Check that the class we declare here satisfies the
+    // vector-space-vector concept. If we catch it here,
+    // any mistake in the vector class declaration would
+    // show up in uses of this class later on as well.
+#ifdef DEAL_II_HAVE_CXX20
+    static_assert(concepts::is_vector_space_vector<BlockVector<S>>);
+#endif
     template class BlockVector<S>;
   }
 
index 0f3e8f1bf819f5832f58b8e4f5e57d6d775c1552..cddb19fd82c24dcb6b13710e3b238da788ae1690 100644 (file)
@@ -21,7 +21,12 @@ for (SCALAR : REAL_AND_COMPLEX_SCALARS)
     \{
       namespace distributed
       \{
+#ifdef DEAL_II_HAVE_CXX20
+        static_assert(concepts::is_vector_space_vector<BlockVector<SCALAR>>);
+#endif
+
         template class BlockVector<SCALAR>;
+
         template void
         BlockVector<SCALAR>::multivector_inner_product(
           FullMatrix<SCALAR> &,
index 64032b7ec17e4b9673a0e6ee218b0bfeecc740fd..3a8b480310b3c8dccc7d8d9e462193583c959713 100644 (file)
@@ -21,7 +21,13 @@ for (SCALAR : REAL_AND_COMPLEX_SCALARS)
     \{
       namespace distributed
       \{
+#ifdef DEAL_II_HAVE_CXX20
+        static_assert(concepts::is_vector_space_vector<
+                      Vector<SCALAR, ::dealii::MemorySpace::Host>>);
+#endif
+
         template class Vector<SCALAR, ::dealii::MemorySpace::Host>;
+
         template void
         Vector<SCALAR, ::dealii::MemorySpace::Host>::import_elements<
           ::dealii::MemorySpace::Host>(
index d96544f9547f312f7dc7838892d19cf13b3b2af1..76802b3dadf05141f17e00b341e598f6dc794492 100644 (file)
@@ -25,6 +25,14 @@ namespace PETScWrappers
 {
   namespace MPI
   {
+    // Check that the class we declare here satisfies the
+    // vector-space-vector concept. If we catch it here,
+    // any mistake in the vector class declaration would
+    // show up in uses of this class later on as well.
+#  ifdef DEAL_II_HAVE_CXX20
+    static_assert(concepts::is_vector_space_vector<BlockVector>);
+#  endif
+
     using size_type = types::global_dof_index;
 
     BlockVector::~BlockVector()
index a5145b3837a910935bb9165491712bbf89866bc3..91a40a087e9acc48b78977548b81e1e3970016e2 100644 (file)
@@ -28,6 +28,14 @@ namespace PETScWrappers
 {
   namespace MPI
   {
+    // Check that the class we declare here satisfies the
+    // vector-space-vector concept. If we catch it here,
+    // any mistake in the vector class declaration would
+    // show up in uses of this class later on as well.
+#  ifdef DEAL_II_HAVE_CXX20
+    static_assert(concepts::is_vector_space_vector<Vector>);
+#  endif
+
     Vector::Vector()
     {
       // virtual functions called in constructors and destructors never use the
index 9a69a287c8dcf09ed31c1830d03030ba86bdaa8f..7b179c93929add63ff4dbef6e8563b4bb881dfdf 100644 (file)
@@ -38,6 +38,14 @@ namespace LinearAlgebra
 {
   namespace EpetraWrappers
   {
+    // Check that the class we declare here satisfies the
+    // vector-space-vector concept. If we catch it here,
+    // any mistake in the vector class declaration would
+    // show up in uses of this class later on as well.
+#  ifdef DEAL_II_HAVE_CXX20
+    static_assert(concepts::is_vector_space_vector<Vector>);
+#  endif
+
     Vector::Vector()
       : Subscriptor()
       , vector(new Epetra_FEVector(
index 8c5f19d4b0fb75ffcebd8bfb2aea54d7824aead5..dc3805712488bda1e2011818c4b4741bef563185 100644 (file)
@@ -23,17 +23,39 @@ namespace LinearAlgebra
 {
   namespace TpetraWrappers
   {
+    // Instantiate these vectors types for specific scalar types.
+    //
+    // While there:
+    // Check that the class we declare here satisfies the
+    // vector-space-vector concept. If we catch it here,
+    // any mistake in the vector class declaration would
+    // show up in uses of this class later on as well.
+
 #  ifdef HAVE_TPETRA_INST_FLOAT
+#    ifdef DEAL_II_HAVE_CXX20
+    static_assert(concepts::is_vector_space_vector<Vector<float>>);
+#    endif
     template class Vector<float>;
 #  endif
 #  ifdef HAVE_TPETRA_INST_DOUBLE
+#    ifdef DEAL_II_HAVE_CXX20
+    static_assert(concepts::is_vector_space_vector<Vector<double>>);
+#    endif
     template class Vector<double>;
 #  endif
 #  ifdef DEAL_II_WITH_COMPLEX_VALUES
 #    ifdef HAVE_TPETRA_INST_COMPLEX_FLOAT
+#      ifdef DEAL_II_HAVE_CXX20
+    static_assert(concepts::is_vector_space_vector <
+                  Vector<std::complex<float>>);
+#      endif
     template class Vector<std::complex<float>>;
 #    endif
 #    ifdef HAVE_TPETRA_INST_COMPLEX_DOUBLE
+#      ifdef DEAL_II_HAVE_CXX20
+    static_assert(concepts::is_vector_space_vector <
+                  Vector<std::complex<double>>);
+#      endif
     template class Vector<std::complex<double>>;
 #    endif
 #  endif
index a9ae3d395e52ccce1ca7e5de7f470213f57d2e64..ac2b2fcaaa8e533ed38208c40a7be382d84dd5a9 100644 (file)
 
 for (SCALAR : REAL_AND_COMPLEX_SCALARS)
   {
+    // Check that the class we declare here satisfies the
+    // vector-space-vector concept. If we catch it here,
+    // any mistake in the vector class declaration would
+    // show up in uses of this class later on as well.
+#ifdef DEAL_II_HAVE_CXX20
+    static_assert(concepts::is_vector_space_vector<Vector<SCALAR>>);
+#endif
+
     template class Vector<SCALAR>;
   }
 

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.