From: bangerth Date: Sun, 21 Sep 2008 04:20:06 +0000 (+0000) Subject: Add the possibility to create block sparse matrices without an Epetra_Map when runnin... X-Git-Url: https://gitweb.dealii.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2e9474d2de0f7627211f6f2a6d62882ded75153c;p=dealii-svn.git Add the possibility to create block sparse matrices without an Epetra_Map when running on a single processor. git-svn-id: https://svn.dealii.org/trunk@16875 0785d39b-7218-0410-832d-ea1e28bc413d --- diff --git a/deal.II/lac/include/lac/trilinos_block_sparse_matrix.h b/deal.II/lac/include/lac/trilinos_block_sparse_matrix.h index 2167a2617b..4b9d3a761a 100644 --- a/deal.II/lac/include/lac/trilinos_block_sparse_matrix.h +++ b/deal.II/lac/include/lac/trilinos_block_sparse_matrix.h @@ -2,7 +2,7 @@ // $Id$ // Version: $Name$ // -// Copyright (C) 2004, 2005, 2006, 2007 by the deal.II authors +// Copyright (C) 2008 by the deal.II authors // // This file is subject to QPL and may not be distributed // without copyright and license information. Please refer @@ -182,6 +182,15 @@ namespace TrilinosWrappers void reinit (const std::vector &input_maps, const BlockSparsityPattern &block_sparsity_pattern); + /** + * Resize the matrix and initialize it + * by the given sparsity pattern. Since + * no distribution map is given, the + * result is a block matrix for which + * all elements are stored locally. + */ + void reinit (const BlockSparsityPattern &block_sparsity_pattern); + /** * This function initializes the * Trilinos matrix using the deal.II diff --git a/deal.II/lac/source/trilinos_block_sparse_matrix.cc b/deal.II/lac/source/trilinos_block_sparse_matrix.cc index 1b8d171490..8d36581430 100644 --- a/deal.II/lac/source/trilinos_block_sparse_matrix.cc +++ b/deal.II/lac/source/trilinos_block_sparse_matrix.cc @@ -2,7 +2,7 @@ // $Id: trilinos_block_sparse_matrix.cc 15631 2008-01-17 23:47:31Z bangerth $ // Version: $Name$ // -// Copyright (C) 2004, 2005, 2006, 2008 by the deal.II authors +// Copyright (C) 2008 by the deal.II authors // // This file is subject to QPL and may not be distributed // without copyright and license information. Please refer @@ -93,6 +93,13 @@ namespace TrilinosWrappers reinit (const std::vector &input_maps, const BlockSparsityPattern &block_sparsity_pattern) { + Assert (input_maps.size() == block_sparsity_pattern.n_block_rows(), + ExcDimensionMismatch (input_maps.size(), + block_sparsity_pattern.n_block_rows())); + Assert (input_maps.size() == block_sparsity_pattern.n_block_cols(), + ExcDimensionMismatch (input_maps.size(), + block_sparsity_pattern.n_block_cols())); + const unsigned int n_block_rows = input_maps.size(); if (input_maps[0].Comm().MyPID()==0) @@ -122,6 +129,38 @@ namespace TrilinosWrappers + void + BlockSparseMatrix:: + reinit (const BlockSparsityPattern &block_sparsity_pattern) + { + Assert (block_sparsity_pattern.n_block_rows() == + block_sparsity_pattern.n_block_cols(), + ExcDimensionMismatch (block_sparsity_pattern.n_block_rows(), + block_sparsity_pattern.n_block_cols())); + Assert (block_sparsity_pattern.n_rows() == + block_sparsity_pattern.n_cols(), + ExcDimensionMismatch (block_sparsity_pattern.n_rows(), + block_sparsity_pattern.n_cols())); + + // produce a dummy local map and pass it + // off to the other function +#ifdef DEAL_II_COMPILER_SUPPORTS_MPI + Epetra_MpiComm trilinos_communicator (MPI_COMM_WORLD); +#else + Epetra_SerialComm trilinos_communicator; +#endif + + std::vector input_maps; + for (unsigned int i=0; i &input_maps,