From 9a9bf186e4eb8a4d408aa43f38c3c71c957a8be0 Mon Sep 17 00:00:00 2001
From: Sebastian Kinnewig <kinnewig@ifam.uni-hannover.de>
Date: Fri, 9 Feb 2024 09:46:23 +0100
Subject: [PATCH] Implementation for TpetraWrappers::Vector::operator Number()

---
 .../lac/trilinos_tpetra_vector.templates.h    | 31 +++++++++++++++++++
 1 file changed, 31 insertions(+)

diff --git a/include/deal.II/lac/trilinos_tpetra_vector.templates.h b/include/deal.II/lac/trilinos_tpetra_vector.templates.h
index cfb5ecfb2b..eed13a0575 100644
--- a/include/deal.II/lac/trilinos_tpetra_vector.templates.h
+++ b/include/deal.II/lac/trilinos_tpetra_vector.templates.h
@@ -44,6 +44,37 @@ namespace LinearAlgebra
 {
   namespace TpetraWrappers
   {
+    namespace internal
+    {
+      template <typename Number, typename MemorySpace>
+      VectorReference<Number, MemorySpace>::operator Number() const
+      {
+        // Get the local index
+        const TrilinosWrappers::types::int_type local_index =
+          vector.vector->getMap()->getLocalElement(
+            static_cast<TrilinosWrappers::types::int_type>(index));
+
+#  if DEAL_II_TRILINOS_VERSION_GTE(14, 0, 0)
+        Assert((local_index != Teuchos::OrdinalTraits<int>::invalid()),
+               ExcAccessToNonLocalElement(
+                 index,
+                 vector.vector->getMap()->getLocalNumElements(),
+                 vector.vector->getMap()->getMinLocalIndex(),
+                 vector.vector->getMap()->getMaxLocalIndex()));
+#  else
+        Assert((local_index != Teuchos::OrdinalTraits<int>::invalid()),
+               ExcAccessToNonLocalElement(
+                 index,
+                 vector.vector->getMap()->getNodeNumElements(),
+                 vector.vector->getMap()->getMinLocalIndex(),
+                 vector.vector->getMap()->getMaxLocalIndex()));
+#  endif
+        return vector.vector->getData()[local_index];
+      }
+    } // namespace internal
+
+
+
     template <typename Number, typename MemorySpace>
     Vector<Number, MemorySpace>::Vector()
       : Subscriptor()
-- 
2.39.5