12 #ifndef __deal2__trilinos_vector_h
13 #define __deal2__trilinos_vector_h
16 #include <deal.II/base/config.h>
18 #ifdef DEAL_II_WITH_TRILINOS
20 # include <deal.II/base/std_cxx1x/shared_ptr.h>
21 # include <deal.II/base/subscriptor.h>
22 # include <deal.II/base/index_set.h>
23 # include <deal.II/base/utilities.h>
24 # include <deal.II/lac/exceptions.h>
25 # include <deal.II/lac/vector.h>
26 # include <deal.II/lac/trilinos_vector_base.h>
28 # include "Epetra_Map.h"
29 # include "Epetra_LocalMap.h"
31 DEAL_II_NAMESPACE_OPEN
35 template <
typename>
class Vector;
41 namespace TrilinosWrappers
47 #ifndef DEAL_II_USE_LARGE_INDEX_TYPE
51 int gid(
const Epetra_BlockMap &map,
int i)
59 long long int gid(
const Epetra_BlockMap &map,
int i)
272 const bool fast =
false,
273 const bool allow_different_maps =
false);
276 const bool import_data =
false);
315 operator = (const ::TrilinosWrappers::Vector &V);
334 template <
typename Number>
379 (const ::TrilinosWrappers::SparseMatrix &matrix,
397 Vector (
const Epetra_Map ¶llel_partitioning);
410 explicit Vector (
const Epetra_Map ¶llel_partitioning,
418 template <
typename number>
419 void reinit (
const Epetra_Map ¶llel_partitioner,
420 const ::Vector<number> &v);
429 void reinit (
const Epetra_Map ¶llel_partitioning,
430 const bool fast =
false);
438 template <
typename Number>
439 explicit Vector (
const Epetra_Map ¶llel_partitioning,
440 const ::Vector<Number> &v);
457 const MPI_Comm &communicator = MPI_COMM_WORLD);
472 const MPI_Comm &communicator = MPI_COMM_WORLD);
480 template <
typename Number>
482 const ::Vector<Number> &v,
483 const MPI_Comm &communicator = MPI_COMM_WORLD);
495 const MPI_Comm &communicator = MPI_COMM_WORLD,
496 const bool fast =
false);
523 template <
typename number>
525 const ::Vector<number> &v)
532 template <
typename number>
534 const ::Vector<number> &v,
535 const MPI_Comm &communicator)
544 template <
typename number>
546 const ::Vector<number> &v)
548 if (
vector.get() != 0 &&
vector->Map().SameAs(parallel_partitioner))
549 vector.reset (
new Epetra_FEVector(parallel_partitioner));
553 const int size = parallel_partitioner.NumMyElements();
558 for (
int i=0; i<
size; ++i)
559 (*
vector)[0][i] = v(gid(parallel_partitioner,i));
573 template <
typename Number>
577 if (
size() != v.size())
579 vector.reset (
new Epetra_FEVector(Epetra_Map
580 (static_cast<TrilinosWrappers::types::int_type>(v.size()), 0,
581 #ifdef DEAL_II_WITH_MPI
582 Epetra_MpiComm(MPI_COMM_SELF)
649 Vector (
const size_type n);
663 Vector (
const Epetra_Map &partitioning);
677 const MPI_Comm &communicator = MPI_COMM_WORLD);
694 template <
typename Number>
695 explicit Vector (const ::Vector<Number> &v);
702 void reinit (
const size_type n,
703 const bool fast =
false);
721 void reinit (
const Epetra_Map &input_map,
722 const bool fast =
false);
741 const MPI_Comm &communicator = MPI_COMM_WORLD,
742 const bool fast =
false);
751 const bool fast =
false,
752 const bool allow_different_maps =
false);
779 template <
typename Number>
831 template <
typename number>
835 vector.reset (
new Epetra_FEVector(map));
852 template <
typename Number>
856 if (
size() != v.size())
860 Epetra_LocalMap map ((TrilinosWrappers::types::int_type)v.size(), 0,
862 vector.reset (
new Epetra_FEVector(map));
866 const TrilinosWrappers::types::int_type size = map.NumMyElements();
868 Assert (map.MaxLID() == size-1,
874 for (TrilinosWrappers::types::int_type i=0; i<
size; ++i)
896 DEAL_II_NAMESPACE_CLOSE
898 #endif // DEAL_II_WITH_TRILINOS