16 #ifndef dealii_vector_element_access_h 17 #define dealii_vector_element_access_h 20 #include <deal.II/lac/trilinos_epetra_vector.h> 21 #include <deal.II/lac/trilinos_tpetra_vector.h> 23 DEAL_II_NAMESPACE_OPEN
27 template <
typename VectorType>
32 add(
const typename VectorType::value_type value,
37 set(
typename VectorType::value_type value,
41 static typename VectorType::value_type
47 template <
typename VectorType>
49 ElementAccess<VectorType>::add(
const typename VectorType::value_type value,
58 template <
typename VectorType>
69 template <
typename VectorType>
70 inline typename VectorType::value_type
71 ElementAccess<VectorType>::get(
const VectorType & V,
79 #if defined(DEAL_II_WITH_TRILINOS) && defined(DEAL_II_WITH_MPI) 82 ElementAccess<LinearAlgebra::EpetraWrappers::Vector>::add(
89 TrilinosWrappers::types::int_type trilinos_i =
90 vector.Map().LID(static_cast<TrilinosWrappers::types::int_type>(i));
92 vector[0][trilinos_i] += value;
106 TrilinosWrappers::types::int_type trilinos_i =
107 vector.Map().LID(static_cast<TrilinosWrappers::types::int_type>(i));
109 vector[0][trilinos_i] = value;
114 ElementAccess<LinearAlgebra::EpetraWrappers::Vector>::get(
120 TrilinosWrappers::types::int_type trilinos_i =
121 vector.Map().LID(static_cast<TrilinosWrappers::types::int_type>(i));
123 return vector[0][trilinos_i];
128 # ifdef DEAL_II_TRILINOS_WITH_TPETRA 129 template <
typename NumberType>
133 using VectorType = LinearAlgebra::TpetraWrappers::Vector<NumberType>;
135 add(
const typename VectorType::value_type value,
140 set(
typename VectorType::value_type value,
144 static typename VectorType::value_type
150 template <
typename NumberType>
152 ElementAccess<LinearAlgebra::TpetraWrappers::Vector<NumberType>>::add(
153 const typename VectorType::value_type value,
155 LinearAlgebra::TpetraWrappers::Vector<NumberType> &V)
158 Tpetra::Vector<NumberType, int, types::global_dof_index> vector =
160 TrilinosWrappers::types::int_type trilinos_i =
161 vector.getMap()->getLocalElement(
162 static_cast<TrilinosWrappers::types::int_type>(i));
164 vector.template sync<Kokkos::HostSpace>();
165 auto vector_2d = vector.template getLocalView<Kokkos::HostSpace>();
166 auto vector_1d = Kokkos::subview(vector_2d, Kokkos::ALL(), 0);
168 vector.template modify<Kokkos::HostSpace>();
169 vector_1d(trilinos_i) += value;
170 vector.template sync<
171 typename Tpetra::Vector<NumberType, int, types::global_dof_index>::
172 device_type::memory_space>();
177 template <
typename NumberType>
179 ElementAccess<LinearAlgebra::TpetraWrappers::Vector<NumberType>>
::set(
180 const typename VectorType::value_type value,
182 LinearAlgebra::TpetraWrappers::Vector<NumberType> &V)
185 Tpetra::Vector<NumberType, int, types::global_dof_index> vector =
187 TrilinosWrappers::types::int_type trilinos_i =
188 vector.getMap()->getLocalElement(
189 static_cast<TrilinosWrappers::types::int_type>(i));
191 vector.template sync<Kokkos::HostSpace>();
192 auto vector_2d = vector.template getLocalView<Kokkos::HostSpace>();
193 auto vector_1d = Kokkos::subview(vector_2d, Kokkos::ALL(), 0);
195 vector.template modify<Kokkos::HostSpace>();
196 vector_1d(trilinos_i) = value;
197 vector.template sync<
198 typename Tpetra::Vector<NumberType, int, types::global_dof_index>::
199 device_type::memory_space>();
204 template <
typename NumberType>
205 inline typename LinearAlgebra::TpetraWrappers::Vector<NumberType>::value_type
206 ElementAccess<LinearAlgebra::TpetraWrappers::Vector<NumberType>>::get(
207 const LinearAlgebra::TpetraWrappers::Vector<NumberType> &V,
211 Tpetra::Vector<NumberType, int, types::global_dof_index> vector =
213 TrilinosWrappers::types::int_type trilinos_i =
214 vector.getMap()->getLocalElement(
215 static_cast<TrilinosWrappers::types::int_type>(i));
217 vector.template sync<Kokkos::HostSpace>();
218 auto vector_2d = vector.template getLocalView<Kokkos::HostSpace>();
219 auto vector_1d = Kokkos::subview(vector_2d, Kokkos::ALL(), 0);
221 return vector_1d(trilinos_i);
227 DEAL_II_NAMESPACE_CLOSE
LinearAlgebra::distributed::Vector< Number > Vector
const Epetra_FEVector & trilinos_vector() const
unsigned int global_dof_index
__global__ void set(Number *val, const Number s, const size_type N)