From: kronbichler Date: Fri, 14 Nov 2008 15:29:41 +0000 (+0000) Subject: Introduce another reinit function to copy from a Epetra_CrsMatix. X-Git-Url: https://gitweb.dealii.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=858cf498ed85a1d856445d71da9bb31ffb3ea200;p=dealii-svn.git Introduce another reinit function to copy from a Epetra_CrsMatix. git-svn-id: https://svn.dealii.org/trunk@17582 0785d39b-7218-0410-832d-ea1e28bc413d --- diff --git a/deal.II/lac/include/lac/trilinos_sparse_matrix.h b/deal.II/lac/include/lac/trilinos_sparse_matrix.h index 98129b4a00..b04db9f9e8 100755 --- a/deal.II/lac/include/lac/trilinos_sparse_matrix.h +++ b/deal.II/lac/include/lac/trilinos_sparse_matrix.h @@ -670,6 +670,13 @@ namespace TrilinosWrappers const ::dealii::SparseMatrix &dealii_sparse_matrix, const double drop_tolerance=1e-13); + /** + * This reinit function takes as + * input a Trilinos Epetra_CrsMatrix + * and copies its content. + */ + void reinit (const Epetra_CrsMatrix &input_matrix); + /** * This operator assigns a scalar * to a matrix. Since this does diff --git a/deal.II/lac/source/trilinos_sparse_matrix.cc b/deal.II/lac/source/trilinos_sparse_matrix.cc index d0bd56a514..054c80a60e 100755 --- a/deal.II/lac/source/trilinos_sparse_matrix.cc +++ b/deal.II/lac/source/trilinos_sparse_matrix.cc @@ -560,6 +560,39 @@ namespace TrilinosWrappers + void + SparseMatrix::reinit (const Epetra_CrsMatrix &input_matrix) + { + matrix.reset(); + + Assert (input_matrix.Filled()==true, + ExcMessage("Input CrsMatrix has not called FillComplete()!")); + + row_map = input_matrix.RangeMap(); + col_map = input_matrix.DomainMap(); + + const Epetra_CrsGraph *graph = &input_matrix.Graph(); + + matrix = std::auto_ptr + (new Epetra_FECrsMatrix(Copy, *graph, false)); + + matrix->FillComplete (col_map, row_map, true); + + int length; + int *row_indices; + TrilinosScalar *values; + for (unsigned int row=0; rowReplaceMyValues(local_row, length, values, row_indices); + } + + compress(); + } + + void SparseMatrix::clear () { @@ -1119,9 +1152,9 @@ namespace TrilinosWrappers if (matrix->Filled() == false) matrix->FillComplete(col_map, row_map, true); - Assert (src.vector->Map().SameAs(matrix->DomainMap()) == true, + Assert (src.vector->Map().SameAs(matrix->RangeMap()) == true, ExcMessage ("Column map of matrix does not fit with vector map!")); - Assert (dst.vector->Map().SameAs(matrix->RangeMap()) == true, + Assert (dst.vector->Map().SameAs(matrix->DomainMap()) == true, ExcMessage ("Row map of matrix does not fit with vector map!")); const int ierr = matrix->Multiply (true, *(src.vector), *(dst.vector));