> All right, but, where is the class Trilinos::BlockSparseMatrix? Possibly,
> could you let me know? If then, it must be a good reference for me.

The class TrilinosWrappers::BlockSparseMatrix header file sits in
lac/include/lac/trilinos_block_sparse_matrix.h, the source in
lac/source/trilinos_block_sparse_matrix.cc. The respective PETSc
structures are in the same directories, but are specified in serial in
lac/../petsc_block_sparse_matrix.h/.cc and for MPI in
lac/../petsc_parallel_block_sparse_matrix.h/.cc.

For your purpose, you'd need to copy the function 
  template <typename TrilinosMatrix, typename TrilinosBlockVector>
  void
  apply_block_boundary_values (const std::map<unsigned int,double>
&boundary_values,
                               TrilinosMatrix      &matrix,
                               TrilinosBlockVector &solution,
                               TrilinosBlockVector &right_hand_side,
                               const bool          eliminate_columns)
that sits in lines 807-887 in
deal.II/source/numerics/matrices.all_dimensions.cc to the respective
PETSc part of that file, and replace Trilinos by PETSc. Then you need to
create explicit instantiations for PETScWrappers::BlockSparseMatrix and
PETScWrappers::MPI::BlockSparseMatrix, just look how it is done for
non-block PETSc structures in lines 650-682.

Best,
Martin


_______________________________________________

Reply via email to