--- /dev/null
+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)
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;
};
/**
* Access the stored communicator.
*/
- const MPI_Comm &
+ MPI_Comm
operator*() const
{
return comm;
memory_consumption();
/**
- * Return the underlying communicator.
+ * Return the underlying MPI communicator.
*/
- const MPI_Comm &
+ MPI_Comm
get_mpi_communicator() const override;
void
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;
/**
- inline const MPI_Comm &
+ inline MPI_Comm
Partitioner::get_mpi_communicator() const
{
return communicator;
/** @{ */
/**
- * 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;
/**
template <typename Number, typename MemorySpace>
- inline const MPI_Comm &
+ inline MPI_Comm
Vector<Number, MemorySpace>::get_mpi_communicator() const
{
return partitioner->get_mpi_communicator();
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;
/**
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;
/**
- 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
/**
* Return the underlying MPI communicator.
*/
- const MPI_Comm &
+ MPI_Comm
get_mpi_communicator() const override;
/**
/**
* Return the underlying MPI communicator.
*/
- const MPI_Comm &
+ MPI_Comm
get_mpi_communicator() const override;
protected:
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;
/**
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
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:
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:
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
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;
/**
* Return the underlying MPI communicator.
*/
- virtual const MPI_Comm &
+ virtual MPI_Comm
get_mpi_communicator() const override;
/**
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;
clear();
/**
- * Return the MPI communicator object in use with this matrix.
+ * Return the underlying MPI communicator.
*/
MPI_Comm
get_mpi_communicator() const;
memory_consumption() const;
/**
- * Return the MPI communicator object in use with this matrix.
+ * Return the underlying MPI communicator.
*/
MPI_Comm
get_mpi_communicator() const;
range_partitioner() const;
/**
- * Return the MPI communicator object in use with this matrix.
+ * Return the underlying MPI communicator.
*/
MPI_Comm
get_mpi_communicator() const;
+
/** @} */
/**
/**
* Return the underlying MPI communicator.
*/
- virtual const MPI_Comm &
+ virtual MPI_Comm
get_mpi_communicator() const override;
/**
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;
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;
/** @} */
- 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,
virtual types::global_dof_index
size() const override;
- const MPI_Comm &
+ MPI_Comm
get_sm_mpi_communicator() const;
void
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;
- const MPI_Comm &
+ MPI_Comm
NoncontiguousPartitioner::get_mpi_communicator() const
{
return communicator;
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>
n_ghost_indices_larger = larger_ghost_indices.n_elements();
}
- const MPI_Comm &
+ MPI_Comm
Partitioner::get_mpi_communicator() const
{
return ghost.get_mpi_communicator();
- 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
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
- const MPI_Comm &
+ MPI_Comm
CommunicationPattern::get_mpi_communicator() const
{
return *comm;
- const MPI_Comm &
+ MPI_Comm
CommunicationPattern::get_mpi_communicator() const
{
return *comm;
- const MPI_Comm &
+ MPI_Comm
Full::get_sm_mpi_communicator() const
{
return this->comm_sm;
return vector;
}
-
+#ifdef DEAL_II_WITH_TRILINOS
template <>
TrilinosWrappers::MPI::Vector
create_test_vector(const double value)
vector = value;
return vector;
}
+#endif
+#ifdef DEAL_II_WITH_PETSC
template <>
PETScWrappers::MPI::Vector
create_test_vector(const double value)
vector = value;
return vector;
}
+#endif
template <typename VectorType>
bool
"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);
--- /dev/null
+
+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
--- /dev/null
+
+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