55 #ifndef AMESOS2_MULTIVEC_ADAPTER_DECL_HPP
56 #define AMESOS2_MULTIVEC_ADAPTER_DECL_HPP
58 #include <Teuchos_RCP.hpp>
59 #include <Teuchos_Ptr.hpp>
60 #include <Teuchos_ArrayView.hpp>
61 #include <Tpetra_Map.hpp>
64 #include "Amesos2_VectorTraits.hpp"
187 Teuchos::RCP<MultiVecAdapter<MV> >
191 if(mv.is_null())
return Teuchos::null;
196 Teuchos::RCP<const MultiVecAdapter<MV> >
197 createConstMultiVecAdapter(Teuchos::RCP<const MV> mv){
199 using Teuchos::rcp_const_cast;
201 if(mv.is_null())
return Teuchos::null;
202 return( rcp(
new MultiVecAdapter<MV>(Teuchos::rcp_const_cast<MV,const MV>(mv))).getConst() );
218 template <
typename MV,
typename V>
221 typedef typename VectorTraits<V>::ptr_scalar_type ptr_return_type ;
223 static ptr_return_type * get_pointer_to_vector (
const Teuchos::Ptr< MV> &mv ) ;
225 static ptr_return_type * get_pointer_to_vector ( Teuchos::Ptr< MV> &mv ) ;
227 static ptr_return_type * get_pointer_to_vector (
const Teuchos::Ptr< const MV > &mv ) ;
229 static ptr_return_type * get_pointer_to_vector ( Teuchos::Ptr< const MV > &mv ) ;
236 template <
typename MV>
237 struct same_type_get_copy {
238 static void apply(
const Teuchos::Ptr<const MV> mv,
239 const Teuchos::ArrayView<typename MV::scalar_t>& v,
241 Teuchos::Ptr<
const Tpetra::Map<typename MV::local_ordinal_t, typename MV::global_ordinal_t, typename MV::node_t> > distribution_map,
251 template <
typename MV,
typename S>
252 struct diff_type_get_copy {
253 static void apply(
const Teuchos::Ptr<const MV> mv,
254 const Teuchos::ArrayView<S>& v,
256 Teuchos::Ptr<
const Tpetra::Map<typename MV::local_ordinal_t, typename MV::global_ordinal_t, typename MV::node_t> > distribution_map,
266 template <
class MV,
typename S>
269 do_get (
const Teuchos::Ptr<const MV>& mv,
270 const Teuchos::ArrayView<S>& vals,
272 Teuchos::Ptr<
const Tpetra::Map<typename MV::local_ordinal_t, typename MV::global_ordinal_t, typename MV::node_t> > distribution_map,
276 do_get (
const Teuchos::Ptr<const MV>& mv,
277 const Teuchos::ArrayView<S>& vals,
280 typename MV::global_ordinal_t indexBase = 0);
283 do_get (
const Teuchos::Ptr<const MV>& mv,
284 const Teuchos::ArrayView<S>& vals,
313 template <
class MV,
typename KV>
314 struct get_1d_copy_helper_kokkos_view {
316 do_get (
bool bInitialize,
317 const Teuchos::Ptr<const MV>& mv,
320 Teuchos::Ptr<
const Tpetra::Map<typename MV::local_ordinal_t, typename MV::global_ordinal_t, typename MV::node_t> > distribution_map,
324 do_get (
bool bInitialize,
325 const Teuchos::Ptr<const MV>& mv,
329 typename MV::global_ordinal_t indexBase = 0);
332 do_get (
bool bInitialize,
333 const Teuchos::Ptr<const MV>& mv,
342 template <
typename MV>
343 struct same_type_data_put {
344 static void apply(
const Teuchos::Ptr<MV>& mv,
345 const Teuchos::ArrayView<typename MV::scalar_t>& data,
347 Teuchos::Ptr<
const Tpetra::Map<typename MV::local_ordinal_t, typename MV::global_ordinal_t, typename MV::node_t> > distribution_map,
357 template <
typename MV,
typename S>
358 struct diff_type_data_put {
359 static void apply(
const Teuchos::Ptr<MV>& mv,
360 const Teuchos::ArrayView<S>& data,
362 Teuchos::Ptr<
const Tpetra::Map<typename MV::local_ordinal_t, typename MV::global_ordinal_t, typename MV::node_t> > distribution_map,
372 template <
class MV,
typename S>
374 static void do_put(
const Teuchos::Ptr<MV>& mv,
375 const Teuchos::ArrayView<S>& data,
377 Teuchos::Ptr<
const Tpetra::Map<typename MV::local_ordinal_t, typename MV::global_ordinal_t, typename MV::node_t> > distribution_map,
380 static void do_put(
const Teuchos::Ptr<MV>& mv,
381 const Teuchos::ArrayView<S>& data,
383 EDistribution distribution,
typename MV::global_ordinal_t indexBase = 0);
385 static void do_put(
const Teuchos::Ptr<MV>& mv,
386 const Teuchos::ArrayView<S>& data,
390 template <
class MV,
typename KV>
391 struct put_1d_data_helper_kokkos_view {
392 static void do_put(
const Teuchos::Ptr<MV>& mv,
395 Teuchos::Ptr<
const Tpetra::Map<typename MV::local_ordinal_t, typename MV::global_ordinal_t, typename MV::node_t> > distribution_map,
398 static void do_put(
const Teuchos::Ptr<MV>& mv,
401 EDistribution distribution,
typename MV::global_ordinal_t indexBase = 0);
403 static void do_put(
const Teuchos::Ptr<MV>& mv,
412 #ifdef HAVE_AMESOS2_EPETRA
416 #endif // AMESOS2_MULTIVEC_ADAPTER_DECL_HPP
Teuchos::RCP< MultiVecAdapter< MV > > createMultiVecAdapter(Teuchos::RCP< MV > mv)
Factory creation method for MultiVecAdapters.
Definition: Amesos2_MultiVecAdapter_decl.hpp:188
Amesos2::MultiVecAdapter specialization for the Kokkos::View class.
Helper class for getting 1-D copies of multivectors.
Definition: Amesos2_MultiVecAdapter_decl.hpp:267
Helper struct for getting pointers to the MV data - only used when number of vectors = 1 and single M...
Definition: Amesos2_MultiVecAdapter_decl.hpp:219
static void do_get(const Teuchos::Ptr< const MV > &mv, const Teuchos::ArrayView< S > &vals, const size_t ldx, Teuchos::Ptr< const Tpetra::Map< typename MV::local_ordinal_t, typename MV::global_ordinal_t, typename MV::node_t > > distribution_map, EDistribution distribution=ROOTED)
Helper class for getting 1-D copies of multivectors.
Definition: Amesos2_MultiVecAdapter_def.hpp:146
Amesos2::MultiVecAdapter specialization for the Tpetra::MultiVector class.
Amesos2::MultiVecAdapter specialization for the Epetra_MultiVector class.
Enum and other types declarations for Amesos2.
static void do_put(const Teuchos::Ptr< MV > &mv, const Teuchos::ArrayView< S > &data, const size_t ldx, Teuchos::Ptr< const Tpetra::Map< typename MV::local_ordinal_t, typename MV::global_ordinal_t, typename MV::node_t > > distribution_map, EDistribution distribution=ROOTED)
Helper class for putting 1-D data arrays into multivectors.
Definition: Amesos2_MultiVecAdapter_def.hpp:321
EDistribution
Definition: Amesos2_TypeDecl.hpp:123
Helper class for putting 1-D data arrays into multivectors.
Definition: Amesos2_MultiVecAdapter_decl.hpp:373
A templated MultiVector class adapter for Amesos2.
Definition: Amesos2_MultiVecAdapter_decl.hpp:176