From d13d6671660547a8e1f6fef7b643baba9ec3b569 Mon Sep 17 00:00:00 2001
From: Stefano Zampini <stefano.zampini@gmail.com>
Date: Wed, 12 Apr 2023 13:17:18 +0300
Subject: [PATCH] All get_mpi_communicator methods now return MPI_Comm by value

---
 .../changes/incompatibilities/20230412Zampini |   4 +
 .../deal.II/base/communication_pattern_base.h |   4 +-
 include/deal.II/base/mpi.h                    |   2 +-
 .../base/mpi_noncontiguous_partitioner.h      |   4 +-
 include/deal.II/base/partitioner.h            |   6 +-
 include/deal.II/lac/la_parallel_vector.h      |   7 +-
 .../deal.II/lac/petsc_block_sparse_matrix.h   |   5 +-
 include/deal.II/lac/petsc_block_vector.h      |  14 +-
 .../deal.II/lac/petsc_communication_pattern.h |   4 +-
 include/deal.II/lac/petsc_matrix_base.h       |  13 +-
 include/deal.II/lac/petsc_precondition.h      |   4 +-
 include/deal.II/lac/petsc_vector_base.h       |  13 +-
 .../lac/trilinos_block_sparse_matrix.h        |   2 +-
 .../trilinos_epetra_communication_pattern.h   |   2 +-
 include/deal.II/lac/trilinos_epetra_vector.h  |   2 +-
 include/deal.II/lac/trilinos_precondition.h   |   2 +-
 include/deal.II/lac/trilinos_sparse_matrix.h  |   2 +-
 .../deal.II/lac/trilinos_sparsity_pattern.h   |   3 +-
 .../trilinos_tpetra_communication_pattern.h   |   2 +-
 include/deal.II/lac/trilinos_tpetra_vector.h  |   2 +-
 include/deal.II/lac/trilinos_vector.h         |  15 +-
 .../matrix_free/vector_data_exchange.h        |   2 +-
 include/deal.II/multigrid/multigrid.h         |   2 +-
 source/base/mpi_noncontiguous_partitioner.cc  |   2 +-
 source/lac/petsc_communication_pattern.cc     |   7 +-
 .../lac/petsc_parallel_block_sparse_matrix.cc |   9 +-
 source/lac/petsc_precondition.cc              |   8 +-
 .../trilinos_epetra_communication_pattern.cc  |   2 +-
 .../trilinos_tpetra_communication_pattern.cc  |   2 +-
 source/matrix_free/vector_data_exchange.cc    |   2 +-
 tests/sundials/n_vector.cc                    |  10 +-
 ...n=1.with_trilinos=off.with_petsc=on.output | 133 ++++++++++++++++++
 ...n=1.with_trilinos=on.with_petsc=off.output | 133 ++++++++++++++++++
 33 files changed, 335 insertions(+), 89 deletions(-)
 create mode 100644 doc/news/changes/incompatibilities/20230412Zampini
 create mode 100644 tests/sundials/n_vector.mpirun=1.with_trilinos=off.with_petsc=on.output
 create mode 100644 tests/sundials/n_vector.mpirun=1.with_trilinos=on.with_petsc=off.output

diff --git a/doc/news/changes/incompatibilities/20230412Zampini b/doc/news/changes/incompatibilities/20230412Zampini
new file mode 100644
index 0000000000..be73f52e6b
--- /dev/null
+++ b/doc/news/changes/incompatibilities/20230412Zampini
@@ -0,0 +1,4 @@
+Changed: The get_mpi_communicator() methods no longer return references to MPI_Comm.
+They all now return the MPI_Comm by value.
+<br>
+(Stefano Zampini, 2023/04/12)
diff --git a/include/deal.II/base/communication_pattern_base.h b/include/deal.II/base/communication_pattern_base.h
index fb3c24c8f3..e1f7866618 100644
--- a/include/deal.II/base/communication_pattern_base.h
+++ b/include/deal.II/base/communication_pattern_base.h
@@ -91,9 +91,9 @@ namespace Utilities
              const MPI_Comm &communicator) = 0;
 
       /**
-       * Return a constant reference to the underlying MPI communicator.
+       * Return the underlying MPI communicator.
        */
-      virtual const MPI_Comm &
+      virtual MPI_Comm
       get_mpi_communicator() const = 0;
     };
 
diff --git a/include/deal.II/base/mpi.h b/include/deal.II/base/mpi.h
index 17198a215d..7582cf1f69 100644
--- a/include/deal.II/base/mpi.h
+++ b/include/deal.II/base/mpi.h
@@ -277,7 +277,7 @@ namespace Utilities
       /**
        * Access the stored communicator.
        */
-      const MPI_Comm &
+      MPI_Comm
       operator*() const
       {
         return comm;
diff --git a/include/deal.II/base/mpi_noncontiguous_partitioner.h b/include/deal.II/base/mpi_noncontiguous_partitioner.h
index e0927bbf00..8b62a5f9b3 100644
--- a/include/deal.II/base/mpi_noncontiguous_partitioner.h
+++ b/include/deal.II/base/mpi_noncontiguous_partitioner.h
@@ -189,9 +189,9 @@ namespace Utilities
       memory_consumption();
 
       /**
-       * Return the underlying communicator.
+       * Return the underlying MPI communicator.
        */
-      const MPI_Comm &
+      MPI_Comm
       get_mpi_communicator() const override;
 
       void
diff --git a/include/deal.II/base/partitioner.h b/include/deal.II/base/partitioner.h
index 479e29134c..e5bb2703e7 100644
--- a/include/deal.II/base/partitioner.h
+++ b/include/deal.II/base/partitioner.h
@@ -474,9 +474,9 @@ namespace Utilities
       n_mpi_processes() const;
 
       /**
-       * Return the MPI communicator underlying the partitioner object.
+       * Return the underlying MPI communicator.
        */
-      virtual const MPI_Comm &
+      virtual MPI_Comm
       get_mpi_communicator() const override;
 
       /**
@@ -985,7 +985,7 @@ namespace Utilities
 
 
 
-    inline const MPI_Comm &
+    inline MPI_Comm
     Partitioner::get_mpi_communicator() const
     {
       return communicator;
diff --git a/include/deal.II/lac/la_parallel_vector.h b/include/deal.II/lac/la_parallel_vector.h
index afd9a24bcd..da5f4ef398 100644
--- a/include/deal.II/lac/la_parallel_vector.h
+++ b/include/deal.II/lac/la_parallel_vector.h
@@ -1158,10 +1158,9 @@ namespace LinearAlgebra
       /** @{ */
 
       /**
-       * Return a reference to the MPI communicator object in use with this
-       * vector.
+       * Return the underlying MPI communicator.
        */
-      const MPI_Comm &
+      MPI_Comm
       get_mpi_communicator() const;
 
       /**
@@ -1722,7 +1721,7 @@ namespace LinearAlgebra
 
 
     template <typename Number, typename MemorySpace>
-    inline const MPI_Comm &
+    inline MPI_Comm
     Vector<Number, MemorySpace>::get_mpi_communicator() const
     {
       return partitioner->get_mpi_communicator();
diff --git a/include/deal.II/lac/petsc_block_sparse_matrix.h b/include/deal.II/lac/petsc_block_sparse_matrix.h
index 7b9a67ff95..c78b412fb1 100644
--- a/include/deal.II/lac/petsc_block_sparse_matrix.h
+++ b/include/deal.II/lac/petsc_block_sparse_matrix.h
@@ -284,10 +284,9 @@ namespace PETScWrappers
       n_nonzero_elements() const;
 
       /**
-       * Return a reference to the MPI communicator object in use with this
-       * matrix.
+       * Return the underlying MPI communicator.
        */
-      const MPI_Comm &
+      MPI_Comm
       get_mpi_communicator() const;
 
       /**
diff --git a/include/deal.II/lac/petsc_block_vector.h b/include/deal.II/lac/petsc_block_vector.h
index ed85850912..3935a0f2c7 100644
--- a/include/deal.II/lac/petsc_block_vector.h
+++ b/include/deal.II/lac/petsc_block_vector.h
@@ -265,10 +265,9 @@ namespace PETScWrappers
       has_ghost_elements() const;
 
       /**
-       * Return a reference to the MPI communicator object in use with this
-       * vector.
+       * Return the underlying MPI communicator.
        */
-      const MPI_Comm &
+      MPI_Comm
       get_mpi_communicator() const;
 
       /**
@@ -516,15 +515,10 @@ namespace PETScWrappers
 
 
 
-    inline const MPI_Comm &
+    inline MPI_Comm
     BlockVector::get_mpi_communicator() const
     {
-      static MPI_Comm comm = PETSC_COMM_SELF;
-      MPI_Comm        pcomm =
-        PetscObjectComm(reinterpret_cast<PetscObject>(petsc_nest_vector));
-      if (pcomm != MPI_COMM_NULL)
-        comm = pcomm;
-      return comm;
+      return PetscObjectComm(reinterpret_cast<PetscObject>(petsc_nest_vector));
     }
 
     inline bool
diff --git a/include/deal.II/lac/petsc_communication_pattern.h b/include/deal.II/lac/petsc_communication_pattern.h
index eabadfb448..be5eab800d 100644
--- a/include/deal.II/lac/petsc_communication_pattern.h
+++ b/include/deal.II/lac/petsc_communication_pattern.h
@@ -171,7 +171,7 @@ namespace PETScWrappers
     /**
      * Return the underlying MPI communicator.
      */
-    const MPI_Comm &
+    MPI_Comm
     get_mpi_communicator() const override;
 
     /**
@@ -354,7 +354,7 @@ namespace PETScWrappers
     /**
      * Return the underlying MPI communicator.
      */
-    const MPI_Comm &
+    MPI_Comm
     get_mpi_communicator() const override;
 
   protected:
diff --git a/include/deal.II/lac/petsc_matrix_base.h b/include/deal.II/lac/petsc_matrix_base.h
index 148cc48944..ba025c4d6c 100644
--- a/include/deal.II/lac/petsc_matrix_base.h
+++ b/include/deal.II/lac/petsc_matrix_base.h
@@ -697,10 +697,9 @@ namespace PETScWrappers
     local_domain() const;
 
     /**
-     * Return a reference to the MPI communicator object in use with this
-     * matrix.
+     * Return the underlying MPI communicator.
      */
-    const MPI_Comm &
+    MPI_Comm
     get_mpi_communicator() const;
 
     /**
@@ -1665,14 +1664,10 @@ namespace PETScWrappers
     prepare_action(VectorOperation::insert);
   }
 
-  inline const MPI_Comm &
+  inline MPI_Comm
   MatrixBase::get_mpi_communicator() const
   {
-    static MPI_Comm comm = PETSC_COMM_SELF;
-    MPI_Comm pcomm = PetscObjectComm(reinterpret_cast<PetscObject>(matrix));
-    if (pcomm != MPI_COMM_NULL)
-      comm = pcomm;
-    return comm;
+    return PetscObjectComm(reinterpret_cast<PetscObject>(matrix));
   }
 
 #  endif // DOXYGEN
diff --git a/include/deal.II/lac/petsc_precondition.h b/include/deal.II/lac/petsc_precondition.h
index c0b2f6189e..a6b590b971 100644
--- a/include/deal.II/lac/petsc_precondition.h
+++ b/include/deal.II/lac/petsc_precondition.h
@@ -109,9 +109,9 @@ namespace PETScWrappers
     get_pc() const;
 
     /**
-     * Return the MPI communicator object used by this preconditioner.
+     * Return the underlying MPI communicator.
      */
-    const MPI_Comm &
+    MPI_Comm
     get_mpi_communicator() const;
 
   protected:
diff --git a/include/deal.II/lac/petsc_vector_base.h b/include/deal.II/lac/petsc_vector_base.h
index a5ccbd0d46..61e24a45cb 100644
--- a/include/deal.II/lac/petsc_vector_base.h
+++ b/include/deal.II/lac/petsc_vector_base.h
@@ -803,10 +803,9 @@ namespace PETScWrappers
     memory_consumption() const;
 
     /**
-     * Return a reference to the MPI communicator object in use with this
-     * object.
+     * Return the underlying MPI communicator.
      */
-    const MPI_Comm &
+    MPI_Comm
     get_mpi_communicator() const;
 
   protected:
@@ -1178,14 +1177,10 @@ namespace PETScWrappers
     return operator()(index);
   }
 
-  inline const MPI_Comm &
+  inline MPI_Comm
   VectorBase::get_mpi_communicator() const
   {
-    static MPI_Comm comm = PETSC_COMM_SELF;
-    MPI_Comm pcomm = PetscObjectComm(reinterpret_cast<PetscObject>(vector));
-    if (pcomm != MPI_COMM_NULL)
-      comm = pcomm;
-    return comm;
+    return PetscObjectComm(reinterpret_cast<PetscObject>(vector));
   }
 
   inline void
diff --git a/include/deal.II/lac/trilinos_block_sparse_matrix.h b/include/deal.II/lac/trilinos_block_sparse_matrix.h
index 8bb38cbb9b..26dc8eb32e 100644
--- a/include/deal.II/lac/trilinos_block_sparse_matrix.h
+++ b/include/deal.II/lac/trilinos_block_sparse_matrix.h
@@ -223,7 +223,7 @@ namespace TrilinosWrappers
     n_nonzero_elements() const;
 
     /**
-     * Return the MPI communicator object in use with this matrix.
+     * Return the underlying MPI communicator.
      */
     MPI_Comm
     get_mpi_communicator() const;
diff --git a/include/deal.II/lac/trilinos_epetra_communication_pattern.h b/include/deal.II/lac/trilinos_epetra_communication_pattern.h
index 2168c0af61..b6e8a47068 100644
--- a/include/deal.II/lac/trilinos_epetra_communication_pattern.h
+++ b/include/deal.II/lac/trilinos_epetra_communication_pattern.h
@@ -63,7 +63,7 @@ namespace LinearAlgebra
       /**
        * Return the underlying MPI communicator.
        */
-      virtual const MPI_Comm &
+      virtual MPI_Comm
       get_mpi_communicator() const override;
 
       /**
diff --git a/include/deal.II/lac/trilinos_epetra_vector.h b/include/deal.II/lac/trilinos_epetra_vector.h
index 10abb5ce7b..8be058b6a6 100644
--- a/include/deal.II/lac/trilinos_epetra_vector.h
+++ b/include/deal.II/lac/trilinos_epetra_vector.h
@@ -291,7 +291,7 @@ namespace LinearAlgebra
       locally_owned_size() const;
 
       /**
-       * Return the MPI communicator object in use with this object.
+       * Return the underlying MPI communicator.
        */
       MPI_Comm
       get_mpi_communicator() const;
diff --git a/include/deal.II/lac/trilinos_precondition.h b/include/deal.II/lac/trilinos_precondition.h
index d1f6a213a1..95a8654a2f 100644
--- a/include/deal.II/lac/trilinos_precondition.h
+++ b/include/deal.II/lac/trilinos_precondition.h
@@ -114,7 +114,7 @@ namespace TrilinosWrappers
     clear();
 
     /**
-     * Return the MPI communicator object in use with this matrix.
+     * Return the underlying MPI communicator.
      */
     MPI_Comm
     get_mpi_communicator() const;
diff --git a/include/deal.II/lac/trilinos_sparse_matrix.h b/include/deal.II/lac/trilinos_sparse_matrix.h
index daab898a2f..b28d0b9d25 100644
--- a/include/deal.II/lac/trilinos_sparse_matrix.h
+++ b/include/deal.II/lac/trilinos_sparse_matrix.h
@@ -973,7 +973,7 @@ namespace TrilinosWrappers
     memory_consumption() const;
 
     /**
-     * Return the MPI communicator object in use with this matrix.
+     * Return the underlying MPI communicator.
      */
     MPI_Comm
     get_mpi_communicator() const;
diff --git a/include/deal.II/lac/trilinos_sparsity_pattern.h b/include/deal.II/lac/trilinos_sparsity_pattern.h
index 0f918eea89..86af299349 100644
--- a/include/deal.II/lac/trilinos_sparsity_pattern.h
+++ b/include/deal.II/lac/trilinos_sparsity_pattern.h
@@ -812,10 +812,11 @@ namespace TrilinosWrappers
     range_partitioner() const;
 
     /**
-     * Return the MPI communicator object in use with this matrix.
+     * Return the underlying MPI communicator.
      */
     MPI_Comm
     get_mpi_communicator() const;
+
     /** @} */
 
     /**
diff --git a/include/deal.II/lac/trilinos_tpetra_communication_pattern.h b/include/deal.II/lac/trilinos_tpetra_communication_pattern.h
index 927c935370..8dd027b754 100644
--- a/include/deal.II/lac/trilinos_tpetra_communication_pattern.h
+++ b/include/deal.II/lac/trilinos_tpetra_communication_pattern.h
@@ -62,7 +62,7 @@ namespace LinearAlgebra
       /**
        * Return the underlying MPI communicator.
        */
-      virtual const MPI_Comm &
+      virtual MPI_Comm
       get_mpi_communicator() const override;
 
       /**
diff --git a/include/deal.II/lac/trilinos_tpetra_vector.h b/include/deal.II/lac/trilinos_tpetra_vector.h
index 3a53c80694..bb2094485d 100644
--- a/include/deal.II/lac/trilinos_tpetra_vector.h
+++ b/include/deal.II/lac/trilinos_tpetra_vector.h
@@ -347,7 +347,7 @@ namespace LinearAlgebra
       locally_owned_size() const;
 
       /**
-       * Return the MPI communicator object in use with this object.
+       * Return the underlying MPI communicator.
        */
       MPI_Comm
       get_mpi_communicator() const;
diff --git a/include/deal.II/lac/trilinos_vector.h b/include/deal.II/lac/trilinos_vector.h
index 0a88440e15..45a8f37448 100644
--- a/include/deal.II/lac/trilinos_vector.h
+++ b/include/deal.II/lac/trilinos_vector.h
@@ -1265,10 +1265,9 @@ namespace TrilinosWrappers
       memory_consumption() const;
 
       /**
-       * Return a reference to the MPI communicator object in use with this
-       * object.
+       * Return the underlying MPI communicator.
        */
-      const MPI_Comm &
+      MPI_Comm
       get_mpi_communicator() const;
       /** @} */
 
@@ -2175,18 +2174,16 @@ namespace TrilinosWrappers
 
 
 
-    inline const MPI_Comm &
+    inline MPI_Comm
     Vector::get_mpi_communicator() const
     {
-      static MPI_Comm comm;
-
       const Epetra_MpiComm *mpi_comm =
         dynamic_cast<const Epetra_MpiComm *>(&vector->Map().Comm());
-      comm = mpi_comm->Comm();
-
-      return comm;
+      return mpi_comm->Comm();
     }
 
+
+
     template <typename number>
     Vector::Vector(const IndexSet &              parallel_partitioner,
                    const dealii::Vector<number> &v,
diff --git a/include/deal.II/matrix_free/vector_data_exchange.h b/include/deal.II/matrix_free/vector_data_exchange.h
index e3f285edb7..9c2f9cc040 100644
--- a/include/deal.II/matrix_free/vector_data_exchange.h
+++ b/include/deal.II/matrix_free/vector_data_exchange.h
@@ -281,7 +281,7 @@ namespace internal
         virtual types::global_dof_index
         size() const override;
 
-        const MPI_Comm &
+        MPI_Comm
         get_sm_mpi_communicator() const;
 
         void
diff --git a/include/deal.II/multigrid/multigrid.h b/include/deal.II/multigrid/multigrid.h
index ed844ba369..d704bc048b 100644
--- a/include/deal.II/multigrid/multigrid.h
+++ b/include/deal.II/multigrid/multigrid.h
@@ -578,7 +578,7 @@ public:
   locally_owned_domain_indices(const unsigned int block = 0) const;
 
   /**
-   * Return the MPI communicator object in use with this preconditioner.
+   * Return the underlying MPI communicator.
    */
   MPI_Comm
   get_mpi_communicator() const;
diff --git a/source/base/mpi_noncontiguous_partitioner.cc b/source/base/mpi_noncontiguous_partitioner.cc
index ac842e2ff1..9920482537 100644
--- a/source/base/mpi_noncontiguous_partitioner.cc
+++ b/source/base/mpi_noncontiguous_partitioner.cc
@@ -80,7 +80,7 @@ namespace Utilities
 
 
 
-    const MPI_Comm &
+    MPI_Comm
     NoncontiguousPartitioner::get_mpi_communicator() const
     {
       return communicator;
diff --git a/source/lac/petsc_communication_pattern.cc b/source/lac/petsc_communication_pattern.cc
index f89f9a93c3..884019eefa 100644
--- a/source/lac/petsc_communication_pattern.cc
+++ b/source/lac/petsc_communication_pattern.cc
@@ -249,11 +249,10 @@ namespace PETScWrappers
     AssertPETSc(PetscSFDestroy(&sf));
   }
 
-  const MPI_Comm &
+  MPI_Comm
   CommunicationPattern::get_mpi_communicator() const
   {
-    static MPI_Comm comm = PetscObjectComm(reinterpret_cast<PetscObject>(sf));
-    return comm;
+    return PetscObjectComm(reinterpret_cast<PetscObject>(sf));
   }
 
   template <typename Number>
@@ -392,7 +391,7 @@ namespace PETScWrappers
     n_ghost_indices_larger = larger_ghost_indices.n_elements();
   }
 
-  const MPI_Comm &
+  MPI_Comm
   Partitioner::get_mpi_communicator() const
   {
     return ghost.get_mpi_communicator();
diff --git a/source/lac/petsc_parallel_block_sparse_matrix.cc b/source/lac/petsc_parallel_block_sparse_matrix.cc
index fdaa00f15f..b643610107 100644
--- a/source/lac/petsc_parallel_block_sparse_matrix.cc
+++ b/source/lac/petsc_parallel_block_sparse_matrix.cc
@@ -280,15 +280,10 @@ namespace PETScWrappers
 
 
 
-    const MPI_Comm &
+    MPI_Comm
     BlockSparseMatrix::get_mpi_communicator() const
     {
-      static MPI_Comm comm = PETSC_COMM_SELF;
-      MPI_Comm        pcomm =
-        PetscObjectComm(reinterpret_cast<PetscObject>(petsc_nest_matrix));
-      if (pcomm != MPI_COMM_NULL)
-        comm = pcomm;
-      return comm;
+      return PetscObjectComm(reinterpret_cast<PetscObject>(petsc_nest_matrix));
     }
 
     BlockSparseMatrix::operator const Mat &() const
diff --git a/source/lac/petsc_precondition.cc b/source/lac/petsc_precondition.cc
index 1a7701a7e5..55ba96edd2 100644
--- a/source/lac/petsc_precondition.cc
+++ b/source/lac/petsc_precondition.cc
@@ -90,14 +90,10 @@ namespace PETScWrappers
     AssertThrow(ierr == 0, ExcPETScError(ierr));
   }
 
-  const MPI_Comm &
+  MPI_Comm
   PreconditionBase::get_mpi_communicator() const
   {
-    static MPI_Comm comm  = PETSC_COMM_SELF;
-    MPI_Comm        pcomm = PetscObjectComm(reinterpret_cast<PetscObject>(pc));
-    if (pcomm != MPI_COMM_NULL)
-      comm = pcomm;
-    return comm;
+    return PetscObjectComm(reinterpret_cast<PetscObject>(pc));
   }
 
   void
diff --git a/source/lac/trilinos_epetra_communication_pattern.cc b/source/lac/trilinos_epetra_communication_pattern.cc
index 3761e27d62..a5d010bb11 100644
--- a/source/lac/trilinos_epetra_communication_pattern.cc
+++ b/source/lac/trilinos_epetra_communication_pattern.cc
@@ -65,7 +65,7 @@ namespace LinearAlgebra
 
 
 
-    const MPI_Comm &
+    MPI_Comm
     CommunicationPattern::get_mpi_communicator() const
     {
       return *comm;
diff --git a/source/lac/trilinos_tpetra_communication_pattern.cc b/source/lac/trilinos_tpetra_communication_pattern.cc
index 795ce68185..303ab93521 100644
--- a/source/lac/trilinos_tpetra_communication_pattern.cc
+++ b/source/lac/trilinos_tpetra_communication_pattern.cc
@@ -71,7 +71,7 @@ namespace LinearAlgebra
 
 
 
-    const MPI_Comm &
+    MPI_Comm
     CommunicationPattern::get_mpi_communicator() const
     {
       return *comm;
diff --git a/source/matrix_free/vector_data_exchange.cc b/source/matrix_free/vector_data_exchange.cc
index 6b6e146004..4484dff5b3 100644
--- a/source/matrix_free/vector_data_exchange.cc
+++ b/source/matrix_free/vector_data_exchange.cc
@@ -1368,7 +1368,7 @@ namespace internal
 
 
 
-      const MPI_Comm &
+      MPI_Comm
       Full::get_sm_mpi_communicator() const
       {
         return this->comm_sm;
diff --git a/tests/sundials/n_vector.cc b/tests/sundials/n_vector.cc
index 4cb04da272..03ef90223e 100644
--- a/tests/sundials/n_vector.cc
+++ b/tests/sundials/n_vector.cc
@@ -130,7 +130,7 @@ namespace
     return vector;
   }
 
-
+#ifdef DEAL_II_WITH_TRILINOS
   template <>
   TrilinosWrappers::MPI::Vector
   create_test_vector(const double value)
@@ -156,7 +156,9 @@ namespace
     vector = value;
     return vector;
   }
+#endif
 
+#ifdef DEAL_II_WITH_PETSC
   template <>
   PETScWrappers::MPI::Vector
   create_test_vector(const double value)
@@ -182,6 +184,7 @@ namespace
     vector = value;
     return vector;
   }
+#endif
 
   template <typename VectorType>
   bool
@@ -1008,18 +1011,21 @@ main(int argc, char **argv)
     "LinearAlgebra::distributed::Vector<double>");
   run_all_tests<LinearAlgebra::distributed::BlockVector<double>>(
     "LinearAlgebra::distributed::BlockVector<double>");
+#ifdef DEAL_II_WITH_TRILINOS
   run_all_tests<TrilinosWrappers::MPI::Vector>("TrilinosWrappers::MPI::Vector");
   run_all_tests<TrilinosWrappers::MPI::BlockVector>(
     "TrilinosWrappers::MPI::BlockVector");
+#endif
+#ifdef DEAL_II_WITH_PETSC
   run_all_tests<PETScWrappers::MPI::Vector>("PETScWrappers::MPI::Vector");
   run_all_tests<PETScWrappers::MPI::BlockVector>(
     "PETScWrappers::MPI::BlockVector");
-
   // although the memory would be cleared in ~MPI_InitFinalize it needs to be
   // done manually to satisfy the PETSc memory check inside ~MPILogInitAll,
   // which is invoked first
   GrowingVectorMemory<PETScWrappers::MPI::Vector>::release_unused_memory();
   GrowingVectorMemory<PETScWrappers::MPI::BlockVector>::release_unused_memory();
+#endif
 
 #if DEAL_II_SUNDIALS_VERSION_GTE(6, 0, 0)
   SUNContext_Free(&global_nvector_context);
diff --git a/tests/sundials/n_vector.mpirun=1.with_trilinos=off.with_petsc=on.output b/tests/sundials/n_vector.mpirun=1.with_trilinos=off.with_petsc=on.output
new file mode 100644
index 0000000000..0a1ccaeb3f
--- /dev/null
+++ b/tests/sundials/n_vector.mpirun=1.with_trilinos=off.with_petsc=on.output
@@ -0,0 +1,133 @@
+
+DEAL:0:Vector<double>::test_nvector_view_unwrap OK
+DEAL:0:Vector<double>::test_get_vector_id OK
+DEAL:0:Vector<double>::test_clone OK
+DEAL:0:Vector<double>::test_destroy OK
+DEAL:0:Vector<double>::test_get_communicator OK
+DEAL:0:Vector<double>::test_length OK
+DEAL:0:Vector<double>::test_linear_sum OK
+DEAL:0:Vector<double>::test_dot_product OK
+DEAL:0:Vector<double>::test_set_constant OK
+DEAL:0:Vector<double>::test_add_constant OK
+DEAL:0:Vector<double>::test_elementwise_product OK
+DEAL:0:Vector<double>::test_elementwise_div OK
+DEAL:0:Vector<double>::test_elementwise_inv OK
+DEAL:0:Vector<double>::test_elementwise_abs OK
+DEAL:0:Vector<double>::test_weighted_rms_norm OK
+DEAL:0:Vector<double>::test_weighted_rms_norm_mask 1 OK
+DEAL:0:Vector<double>::test_weighted_rms_norm_mask 0 OK
+DEAL:0:Vector<double>::test_weighted_l2_norm OK
+DEAL:0:Vector<double>::test_max_norm OK
+DEAL:0:Vector<double>::test_l1_norm OK
+DEAL:0:Vector<double>::test_min_element OK
+DEAL:0:Vector<double>::test_scale OK
+DEAL:0:BlockVector<double>::test_nvector_view_unwrap OK
+DEAL:0:BlockVector<double>::test_get_vector_id OK
+DEAL:0:BlockVector<double>::test_clone OK
+DEAL:0:BlockVector<double>::test_destroy OK
+DEAL:0:BlockVector<double>::test_get_communicator OK
+DEAL:0:BlockVector<double>::test_length OK
+DEAL:0:BlockVector<double>::test_linear_sum OK
+DEAL:0:BlockVector<double>::test_dot_product OK
+DEAL:0:BlockVector<double>::test_set_constant OK
+DEAL:0:BlockVector<double>::test_add_constant OK
+DEAL:0:BlockVector<double>::test_elementwise_product OK
+DEAL:0:BlockVector<double>::test_elementwise_div OK
+DEAL:0:BlockVector<double>::test_elementwise_inv OK
+DEAL:0:BlockVector<double>::test_elementwise_abs OK
+DEAL:0:BlockVector<double>::test_weighted_rms_norm OK
+DEAL:0:BlockVector<double>::test_weighted_rms_norm_mask 1 OK
+DEAL:0:BlockVector<double>::test_weighted_rms_norm_mask 0 OK
+DEAL:0:BlockVector<double>::test_weighted_l2_norm OK
+DEAL:0:BlockVector<double>::test_max_norm OK
+DEAL:0:BlockVector<double>::test_l1_norm OK
+DEAL:0:BlockVector<double>::test_min_element OK
+DEAL:0:BlockVector<double>::test_scale OK
+DEAL:0:LinearAlgebra::distributed::Vector<double>::test_nvector_view_unwrap OK
+DEAL:0:LinearAlgebra::distributed::Vector<double>::test_get_vector_id OK
+DEAL:0:LinearAlgebra::distributed::Vector<double>::test_clone OK
+DEAL:0:LinearAlgebra::distributed::Vector<double>::test_destroy OK
+DEAL:0:LinearAlgebra::distributed::Vector<double>::test_get_communicator OK
+DEAL:0:LinearAlgebra::distributed::Vector<double>::test_length OK
+DEAL:0:LinearAlgebra::distributed::Vector<double>::test_linear_sum OK
+DEAL:0:LinearAlgebra::distributed::Vector<double>::test_dot_product OK
+DEAL:0:LinearAlgebra::distributed::Vector<double>::test_set_constant OK
+DEAL:0:LinearAlgebra::distributed::Vector<double>::test_add_constant OK
+DEAL:0:LinearAlgebra::distributed::Vector<double>::test_elementwise_product OK
+DEAL:0:LinearAlgebra::distributed::Vector<double>::test_elementwise_div OK
+DEAL:0:LinearAlgebra::distributed::Vector<double>::test_elementwise_inv OK
+DEAL:0:LinearAlgebra::distributed::Vector<double>::test_elementwise_abs OK
+DEAL:0:LinearAlgebra::distributed::Vector<double>::test_weighted_rms_norm OK
+DEAL:0:LinearAlgebra::distributed::Vector<double>::test_weighted_rms_norm_mask 1 OK
+DEAL:0:LinearAlgebra::distributed::Vector<double>::test_weighted_rms_norm_mask 0 OK
+DEAL:0:LinearAlgebra::distributed::Vector<double>::test_weighted_l2_norm OK
+DEAL:0:LinearAlgebra::distributed::Vector<double>::test_max_norm OK
+DEAL:0:LinearAlgebra::distributed::Vector<double>::test_l1_norm OK
+DEAL:0:LinearAlgebra::distributed::Vector<double>::test_min_element OK
+DEAL:0:LinearAlgebra::distributed::Vector<double>::test_scale OK
+DEAL:0:LinearAlgebra::distributed::BlockVector<double>::test_nvector_view_unwrap OK
+DEAL:0:LinearAlgebra::distributed::BlockVector<double>::test_get_vector_id OK
+DEAL:0:LinearAlgebra::distributed::BlockVector<double>::test_clone OK
+DEAL:0:LinearAlgebra::distributed::BlockVector<double>::test_destroy OK
+DEAL:0:LinearAlgebra::distributed::BlockVector<double>::test_get_communicator OK
+DEAL:0:LinearAlgebra::distributed::BlockVector<double>::test_length OK
+DEAL:0:LinearAlgebra::distributed::BlockVector<double>::test_linear_sum OK
+DEAL:0:LinearAlgebra::distributed::BlockVector<double>::test_dot_product OK
+DEAL:0:LinearAlgebra::distributed::BlockVector<double>::test_set_constant OK
+DEAL:0:LinearAlgebra::distributed::BlockVector<double>::test_add_constant OK
+DEAL:0:LinearAlgebra::distributed::BlockVector<double>::test_elementwise_product OK
+DEAL:0:LinearAlgebra::distributed::BlockVector<double>::test_elementwise_div OK
+DEAL:0:LinearAlgebra::distributed::BlockVector<double>::test_elementwise_inv OK
+DEAL:0:LinearAlgebra::distributed::BlockVector<double>::test_elementwise_abs OK
+DEAL:0:LinearAlgebra::distributed::BlockVector<double>::test_weighted_rms_norm OK
+DEAL:0:LinearAlgebra::distributed::BlockVector<double>::test_weighted_rms_norm_mask 1 OK
+DEAL:0:LinearAlgebra::distributed::BlockVector<double>::test_weighted_rms_norm_mask 0 OK
+DEAL:0:LinearAlgebra::distributed::BlockVector<double>::test_weighted_l2_norm OK
+DEAL:0:LinearAlgebra::distributed::BlockVector<double>::test_max_norm OK
+DEAL:0:LinearAlgebra::distributed::BlockVector<double>::test_l1_norm OK
+DEAL:0:LinearAlgebra::distributed::BlockVector<double>::test_min_element OK
+DEAL:0:LinearAlgebra::distributed::BlockVector<double>::test_scale OK
+DEAL:0:PETScWrappers::MPI::Vector::test_nvector_view_unwrap OK
+DEAL:0:PETScWrappers::MPI::Vector::test_get_vector_id OK
+DEAL:0:PETScWrappers::MPI::Vector::test_clone OK
+DEAL:0:PETScWrappers::MPI::Vector::test_destroy OK
+DEAL:0:PETScWrappers::MPI::Vector::test_get_communicator OK
+DEAL:0:PETScWrappers::MPI::Vector::test_length OK
+DEAL:0:PETScWrappers::MPI::Vector::test_linear_sum OK
+DEAL:0:PETScWrappers::MPI::Vector::test_dot_product OK
+DEAL:0:PETScWrappers::MPI::Vector::test_set_constant OK
+DEAL:0:PETScWrappers::MPI::Vector::test_add_constant OK
+DEAL:0:PETScWrappers::MPI::Vector::test_elementwise_product OK
+DEAL:0:PETScWrappers::MPI::Vector::test_elementwise_div OK
+DEAL:0:PETScWrappers::MPI::Vector::test_elementwise_inv OK
+DEAL:0:PETScWrappers::MPI::Vector::test_elementwise_abs OK
+DEAL:0:PETScWrappers::MPI::Vector::test_weighted_rms_norm OK
+DEAL:0:PETScWrappers::MPI::Vector::test_weighted_rms_norm_mask 1 OK
+DEAL:0:PETScWrappers::MPI::Vector::test_weighted_rms_norm_mask 0 OK
+DEAL:0:PETScWrappers::MPI::Vector::test_weighted_l2_norm OK
+DEAL:0:PETScWrappers::MPI::Vector::test_max_norm OK
+DEAL:0:PETScWrappers::MPI::Vector::test_l1_norm OK
+DEAL:0:PETScWrappers::MPI::Vector::test_min_element OK
+DEAL:0:PETScWrappers::MPI::Vector::test_scale OK
+DEAL:0:PETScWrappers::MPI::BlockVector::test_nvector_view_unwrap OK
+DEAL:0:PETScWrappers::MPI::BlockVector::test_get_vector_id OK
+DEAL:0:PETScWrappers::MPI::BlockVector::test_clone OK
+DEAL:0:PETScWrappers::MPI::BlockVector::test_destroy OK
+DEAL:0:PETScWrappers::MPI::BlockVector::test_get_communicator OK
+DEAL:0:PETScWrappers::MPI::BlockVector::test_length OK
+DEAL:0:PETScWrappers::MPI::BlockVector::test_linear_sum OK
+DEAL:0:PETScWrappers::MPI::BlockVector::test_dot_product OK
+DEAL:0:PETScWrappers::MPI::BlockVector::test_set_constant OK
+DEAL:0:PETScWrappers::MPI::BlockVector::test_add_constant OK
+DEAL:0:PETScWrappers::MPI::BlockVector::test_elementwise_product OK
+DEAL:0:PETScWrappers::MPI::BlockVector::test_elementwise_div OK
+DEAL:0:PETScWrappers::MPI::BlockVector::test_elementwise_inv OK
+DEAL:0:PETScWrappers::MPI::BlockVector::test_elementwise_abs OK
+DEAL:0:PETScWrappers::MPI::BlockVector::test_weighted_rms_norm OK
+DEAL:0:PETScWrappers::MPI::BlockVector::test_weighted_rms_norm_mask 1 OK
+DEAL:0:PETScWrappers::MPI::BlockVector::test_weighted_rms_norm_mask 0 OK
+DEAL:0:PETScWrappers::MPI::BlockVector::test_weighted_l2_norm OK
+DEAL:0:PETScWrappers::MPI::BlockVector::test_max_norm OK
+DEAL:0:PETScWrappers::MPI::BlockVector::test_l1_norm OK
+DEAL:0:PETScWrappers::MPI::BlockVector::test_min_element OK
+DEAL:0:PETScWrappers::MPI::BlockVector::test_scale OK
diff --git a/tests/sundials/n_vector.mpirun=1.with_trilinos=on.with_petsc=off.output b/tests/sundials/n_vector.mpirun=1.with_trilinos=on.with_petsc=off.output
new file mode 100644
index 0000000000..0f190076ae
--- /dev/null
+++ b/tests/sundials/n_vector.mpirun=1.with_trilinos=on.with_petsc=off.output
@@ -0,0 +1,133 @@
+
+DEAL:0:Vector<double>::test_nvector_view_unwrap OK
+DEAL:0:Vector<double>::test_get_vector_id OK
+DEAL:0:Vector<double>::test_clone OK
+DEAL:0:Vector<double>::test_destroy OK
+DEAL:0:Vector<double>::test_get_communicator OK
+DEAL:0:Vector<double>::test_length OK
+DEAL:0:Vector<double>::test_linear_sum OK
+DEAL:0:Vector<double>::test_dot_product OK
+DEAL:0:Vector<double>::test_set_constant OK
+DEAL:0:Vector<double>::test_add_constant OK
+DEAL:0:Vector<double>::test_elementwise_product OK
+DEAL:0:Vector<double>::test_elementwise_div OK
+DEAL:0:Vector<double>::test_elementwise_inv OK
+DEAL:0:Vector<double>::test_elementwise_abs OK
+DEAL:0:Vector<double>::test_weighted_rms_norm OK
+DEAL:0:Vector<double>::test_weighted_rms_norm_mask 1 OK
+DEAL:0:Vector<double>::test_weighted_rms_norm_mask 0 OK
+DEAL:0:Vector<double>::test_weighted_l2_norm OK
+DEAL:0:Vector<double>::test_max_norm OK
+DEAL:0:Vector<double>::test_l1_norm OK
+DEAL:0:Vector<double>::test_min_element OK
+DEAL:0:Vector<double>::test_scale OK
+DEAL:0:BlockVector<double>::test_nvector_view_unwrap OK
+DEAL:0:BlockVector<double>::test_get_vector_id OK
+DEAL:0:BlockVector<double>::test_clone OK
+DEAL:0:BlockVector<double>::test_destroy OK
+DEAL:0:BlockVector<double>::test_get_communicator OK
+DEAL:0:BlockVector<double>::test_length OK
+DEAL:0:BlockVector<double>::test_linear_sum OK
+DEAL:0:BlockVector<double>::test_dot_product OK
+DEAL:0:BlockVector<double>::test_set_constant OK
+DEAL:0:BlockVector<double>::test_add_constant OK
+DEAL:0:BlockVector<double>::test_elementwise_product OK
+DEAL:0:BlockVector<double>::test_elementwise_div OK
+DEAL:0:BlockVector<double>::test_elementwise_inv OK
+DEAL:0:BlockVector<double>::test_elementwise_abs OK
+DEAL:0:BlockVector<double>::test_weighted_rms_norm OK
+DEAL:0:BlockVector<double>::test_weighted_rms_norm_mask 1 OK
+DEAL:0:BlockVector<double>::test_weighted_rms_norm_mask 0 OK
+DEAL:0:BlockVector<double>::test_weighted_l2_norm OK
+DEAL:0:BlockVector<double>::test_max_norm OK
+DEAL:0:BlockVector<double>::test_l1_norm OK
+DEAL:0:BlockVector<double>::test_min_element OK
+DEAL:0:BlockVector<double>::test_scale OK
+DEAL:0:LinearAlgebra::distributed::Vector<double>::test_nvector_view_unwrap OK
+DEAL:0:LinearAlgebra::distributed::Vector<double>::test_get_vector_id OK
+DEAL:0:LinearAlgebra::distributed::Vector<double>::test_clone OK
+DEAL:0:LinearAlgebra::distributed::Vector<double>::test_destroy OK
+DEAL:0:LinearAlgebra::distributed::Vector<double>::test_get_communicator OK
+DEAL:0:LinearAlgebra::distributed::Vector<double>::test_length OK
+DEAL:0:LinearAlgebra::distributed::Vector<double>::test_linear_sum OK
+DEAL:0:LinearAlgebra::distributed::Vector<double>::test_dot_product OK
+DEAL:0:LinearAlgebra::distributed::Vector<double>::test_set_constant OK
+DEAL:0:LinearAlgebra::distributed::Vector<double>::test_add_constant OK
+DEAL:0:LinearAlgebra::distributed::Vector<double>::test_elementwise_product OK
+DEAL:0:LinearAlgebra::distributed::Vector<double>::test_elementwise_div OK
+DEAL:0:LinearAlgebra::distributed::Vector<double>::test_elementwise_inv OK
+DEAL:0:LinearAlgebra::distributed::Vector<double>::test_elementwise_abs OK
+DEAL:0:LinearAlgebra::distributed::Vector<double>::test_weighted_rms_norm OK
+DEAL:0:LinearAlgebra::distributed::Vector<double>::test_weighted_rms_norm_mask 1 OK
+DEAL:0:LinearAlgebra::distributed::Vector<double>::test_weighted_rms_norm_mask 0 OK
+DEAL:0:LinearAlgebra::distributed::Vector<double>::test_weighted_l2_norm OK
+DEAL:0:LinearAlgebra::distributed::Vector<double>::test_max_norm OK
+DEAL:0:LinearAlgebra::distributed::Vector<double>::test_l1_norm OK
+DEAL:0:LinearAlgebra::distributed::Vector<double>::test_min_element OK
+DEAL:0:LinearAlgebra::distributed::Vector<double>::test_scale OK
+DEAL:0:LinearAlgebra::distributed::BlockVector<double>::test_nvector_view_unwrap OK
+DEAL:0:LinearAlgebra::distributed::BlockVector<double>::test_get_vector_id OK
+DEAL:0:LinearAlgebra::distributed::BlockVector<double>::test_clone OK
+DEAL:0:LinearAlgebra::distributed::BlockVector<double>::test_destroy OK
+DEAL:0:LinearAlgebra::distributed::BlockVector<double>::test_get_communicator OK
+DEAL:0:LinearAlgebra::distributed::BlockVector<double>::test_length OK
+DEAL:0:LinearAlgebra::distributed::BlockVector<double>::test_linear_sum OK
+DEAL:0:LinearAlgebra::distributed::BlockVector<double>::test_dot_product OK
+DEAL:0:LinearAlgebra::distributed::BlockVector<double>::test_set_constant OK
+DEAL:0:LinearAlgebra::distributed::BlockVector<double>::test_add_constant OK
+DEAL:0:LinearAlgebra::distributed::BlockVector<double>::test_elementwise_product OK
+DEAL:0:LinearAlgebra::distributed::BlockVector<double>::test_elementwise_div OK
+DEAL:0:LinearAlgebra::distributed::BlockVector<double>::test_elementwise_inv OK
+DEAL:0:LinearAlgebra::distributed::BlockVector<double>::test_elementwise_abs OK
+DEAL:0:LinearAlgebra::distributed::BlockVector<double>::test_weighted_rms_norm OK
+DEAL:0:LinearAlgebra::distributed::BlockVector<double>::test_weighted_rms_norm_mask 1 OK
+DEAL:0:LinearAlgebra::distributed::BlockVector<double>::test_weighted_rms_norm_mask 0 OK
+DEAL:0:LinearAlgebra::distributed::BlockVector<double>::test_weighted_l2_norm OK
+DEAL:0:LinearAlgebra::distributed::BlockVector<double>::test_max_norm OK
+DEAL:0:LinearAlgebra::distributed::BlockVector<double>::test_l1_norm OK
+DEAL:0:LinearAlgebra::distributed::BlockVector<double>::test_min_element OK
+DEAL:0:LinearAlgebra::distributed::BlockVector<double>::test_scale OK
+DEAL:0:TrilinosWrappers::MPI::Vector::test_nvector_view_unwrap OK
+DEAL:0:TrilinosWrappers::MPI::Vector::test_get_vector_id OK
+DEAL:0:TrilinosWrappers::MPI::Vector::test_clone OK
+DEAL:0:TrilinosWrappers::MPI::Vector::test_destroy OK
+DEAL:0:TrilinosWrappers::MPI::Vector::test_get_communicator OK
+DEAL:0:TrilinosWrappers::MPI::Vector::test_length OK
+DEAL:0:TrilinosWrappers::MPI::Vector::test_linear_sum OK
+DEAL:0:TrilinosWrappers::MPI::Vector::test_dot_product OK
+DEAL:0:TrilinosWrappers::MPI::Vector::test_set_constant OK
+DEAL:0:TrilinosWrappers::MPI::Vector::test_add_constant OK
+DEAL:0:TrilinosWrappers::MPI::Vector::test_elementwise_product OK
+DEAL:0:TrilinosWrappers::MPI::Vector::test_elementwise_div OK
+DEAL:0:TrilinosWrappers::MPI::Vector::test_elementwise_inv OK
+DEAL:0:TrilinosWrappers::MPI::Vector::test_elementwise_abs OK
+DEAL:0:TrilinosWrappers::MPI::Vector::test_weighted_rms_norm OK
+DEAL:0:TrilinosWrappers::MPI::Vector::test_weighted_rms_norm_mask 1 OK
+DEAL:0:TrilinosWrappers::MPI::Vector::test_weighted_rms_norm_mask 0 OK
+DEAL:0:TrilinosWrappers::MPI::Vector::test_weighted_l2_norm OK
+DEAL:0:TrilinosWrappers::MPI::Vector::test_max_norm OK
+DEAL:0:TrilinosWrappers::MPI::Vector::test_l1_norm OK
+DEAL:0:TrilinosWrappers::MPI::Vector::test_min_element OK
+DEAL:0:TrilinosWrappers::MPI::Vector::test_scale OK
+DEAL:0:TrilinosWrappers::MPI::BlockVector::test_nvector_view_unwrap OK
+DEAL:0:TrilinosWrappers::MPI::BlockVector::test_get_vector_id OK
+DEAL:0:TrilinosWrappers::MPI::BlockVector::test_clone OK
+DEAL:0:TrilinosWrappers::MPI::BlockVector::test_destroy OK
+DEAL:0:TrilinosWrappers::MPI::BlockVector::test_get_communicator OK
+DEAL:0:TrilinosWrappers::MPI::BlockVector::test_length OK
+DEAL:0:TrilinosWrappers::MPI::BlockVector::test_linear_sum OK
+DEAL:0:TrilinosWrappers::MPI::BlockVector::test_dot_product OK
+DEAL:0:TrilinosWrappers::MPI::BlockVector::test_set_constant OK
+DEAL:0:TrilinosWrappers::MPI::BlockVector::test_add_constant OK
+DEAL:0:TrilinosWrappers::MPI::BlockVector::test_elementwise_product OK
+DEAL:0:TrilinosWrappers::MPI::BlockVector::test_elementwise_div OK
+DEAL:0:TrilinosWrappers::MPI::BlockVector::test_elementwise_inv OK
+DEAL:0:TrilinosWrappers::MPI::BlockVector::test_elementwise_abs OK
+DEAL:0:TrilinosWrappers::MPI::BlockVector::test_weighted_rms_norm OK
+DEAL:0:TrilinosWrappers::MPI::BlockVector::test_weighted_rms_norm_mask 1 OK
+DEAL:0:TrilinosWrappers::MPI::BlockVector::test_weighted_rms_norm_mask 0 OK
+DEAL:0:TrilinosWrappers::MPI::BlockVector::test_weighted_l2_norm OK
+DEAL:0:TrilinosWrappers::MPI::BlockVector::test_max_norm OK
+DEAL:0:TrilinosWrappers::MPI::BlockVector::test_l1_norm OK
+DEAL:0:TrilinosWrappers::MPI::BlockVector::test_min_element OK
+DEAL:0:TrilinosWrappers::MPI::BlockVector::test_scale OK
-- 
2.39.5