22 #ifndef __HERMES_COMMON_SOLVER_EPETRA_H_
23 #define __HERMES_COMMON_SOLVER_EPETRA_H_
26 #define EPETRA_NO_64BIT_GLOBAL_INDICES
28 #include <Epetra_SerialComm.h>
29 #include <Epetra_Map.h>
30 #include <Epetra_Vector.h>
31 #include <Epetra_CrsGraph.h>
32 #include <Epetra_CrsMatrix.h>
38 template <
typename Scalar>
class AmesosSolver;
39 template <
typename Scalar>
class AztecOOSolver;
40 template <
typename Scalar>
class NewtonSolverNOX;
42 namespace Preconditioners
44 template <
typename Scalar>
class IfpackPrecond;
45 template <
typename Scalar>
class MlPrecond;
53 template <
typename Scalar>
54 class HERMES_API EpetraMatrix :
public SparseMatrix<Scalar>
58 EpetraMatrix(Epetra_RowMatrix &mat);
59 virtual ~EpetraMatrix();
61 virtual void prealloc(
unsigned int n);
62 virtual void pre_add_ij(
unsigned int row,
unsigned int col);
63 virtual void finish();
67 virtual Scalar
get(
unsigned int m,
unsigned int n);
68 virtual int get_num_row_entries(
unsigned int row);
69 virtual void extract_row_copy(
unsigned int row,
unsigned int len,
unsigned int &n_entries,
double *vals,
unsigned int *idxs);
71 virtual void add(
unsigned int m,
unsigned int n, Scalar v);
72 virtual void add_to_diagonal(Scalar v);
73 virtual void add_to_diagonal_blocks(
int num_stages, EpetraMatrix<Scalar>* mat);
74 virtual void add_sparse_to_diagonal_blocks(
int num_stages, SparseMatrix<Scalar>* mat);
75 virtual void multiply_with_vector(Scalar* vector_in, Scalar* vector_out);
76 virtual void add_as_block(
unsigned int i,
unsigned int j, EpetraMatrix<Scalar>* mat);
77 virtual void add(
unsigned int m,
unsigned int n, Scalar **mat,
int *rows,
int *cols);
79 virtual unsigned int get_matrix_size()
const;
80 virtual unsigned int get_nnz()
const;
81 virtual double get_fill_in()
const;
84 Epetra_BlockMap *std_map;
85 Epetra_CrsGraph *grph;
86 Epetra_CrsMatrix *mat;
88 Epetra_CrsMatrix *mat_im;
91 friend class Hermes::Solvers::AmesosSolver<Scalar>;
92 friend class Hermes::Solvers::AztecOOSolver<Scalar>;
93 friend class Hermes::Solvers::NewtonSolverNOX<Scalar>;
94 friend class Hermes::Preconditioners::IfpackPrecond<Scalar>;
95 friend class Hermes::Preconditioners::MlPrecond<Scalar>;
98 template <
typename Scalar>
99 class HERMES_API EpetraVector :
public Vector<Scalar>
103 EpetraVector(
const Epetra_Vector &v);
104 virtual ~EpetraVector();
106 virtual void alloc(
unsigned int ndofs);
108 virtual Scalar
get(
unsigned int idx);
109 virtual void extract(Scalar *v)
const;
111 virtual void change_sign();
112 virtual void set(
unsigned int idx, Scalar y);
113 virtual void add(
unsigned int idx, Scalar y);
114 virtual void add(
unsigned int n,
unsigned int *idx, Scalar *y);
115 virtual void add_vector(Vector<Scalar>* vec);
116 virtual void add_vector(Scalar* vec);
120 Epetra_BlockMap *std_map;
123 Epetra_Vector *vec_im;
126 friend class Hermes::Solvers::AmesosSolver<Scalar>;
127 friend class Hermes::Solvers::AztecOOSolver<Scalar>;
128 friend class Hermes::Solvers::NewtonSolverNOX<Scalar>;