Hello,
I am currently working on a parallel implementation of step-57, thus I am 
learning to live with BlockVectors, BlockMatrices and BlockSparsityPatterns 
in parallel. 
Originally, I thought that I could make my sparsity pattern the following 
way (i.e as in step-57, but distributing it afterwards) :
std::vector<unsigned int> block_component(dim+1, 0);
block_component[dim] = 1;
DoFRenumbering::component_wise (dof_handler, block_component);
dofs_per_block.resize (2);
DoFTools::count_dofs_per_block (dof_handler, dofs_per_block, block_component
);
unsigned int dof_u = dofs_per_block[0];
unsigned int dof_p = dofs_per_block[1];

locally_owned_dofs.resize(2);
locally_owned_dofs[0] = dof_handler.locally_owned_dofs().get_view(0, dof_u);
locally_owned_dofs[1] =dof_handler.locally_owned_dofs().get_view(dof_u, 
dof_u + dof_p);

IndexSet locally_relevant_dofs_acquisition;
DoFTools::extract_locally_relevant_dofs(dof_handler, 
locally_relevant_dofs_acquisition);
locally_relevant_dofs.resize(2);
locally_relevant_dofs[0] = locally_relevant_dofs_acquisition.get_view(0, 
dof_u);
locally_relevant_dofs[1] = locally_relevant_dofs_acquisition.get_view(dof_u, 
dof_u + dof_p);

... Place where I make my constraints ...

BlockDynamicSparsityPattern dsp(dofs_per_block, dofs_per_block);
DoFTools::make_sparsity_pattern(dof_handler, dsp, nonzero_constraints);

SparsityTools::distribute_sparsity_pattern(
 dsp,
 dof_handler.locally_owned_dofs_per_processor(),
 mpi_communicator,
 locally_relevant_dofs_acquisition);

system_matrix.reinit(dsp);
pressure_mass_matrix.reinit(dsp.block(1, 1));

When launching in sequential - Debug I have no issue and my solver works 
perfectly. When launching in parallel, within my pre-conditioner, I get an 
error such as :
The violated condition was: 
    in.trilinos_partitioner().SameAs(m.DomainMap()) == true
Additional information: 
    Column map of matrix does not fit with vector map!

Clearly, I am doing something wrong with my sparsity pattern since it 
appears the block of my vector and the block of my matrix are incompatible 
in size.
I have found that step 32 uses a TrilinosWrappers::BlockSparsityPattern 
instead of a BlockDynamicSparsityPattern. Is this what I should do with my 
case?
I am unsure what is the distinction between what I am doing right now and 
what the TrilinosWrappers::BlockSparsityPattern would do?

If there is a lack of information, I can post a link to the code which is, 
regretfully, quite big.
Best
Bruno

-- 
The deal.II project is located at http://www.dealii.org/
For mailing list/forum options, see 
https://groups.google.com/d/forum/dealii?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"deal.II User Group" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to dealii+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/dealii/f1b8455d-5a5e-4623-9b70-b4baf87e2435%40googlegroups.com.

Reply via email to