std::vector<bool> component_select(dof_handler.get_fe().n_components(),true);
std::set<types::boundary_id> id_boundary1 = {1};
std::set<types::boundary_id> id_boundary2 = {2};
const IndexSet connected_dofs1 = DoFTools::extract_boundary_dofs(dof_handler,component_select,id_boundary1);
const IndexSet connected_dofs2 = DoFTools::extract_boundary_dofs(dof_handler,component_select,id_boundary2);
std::cout << "Dof of beam 1: ";
connected_dofs1.print(std::cout);
std::cout << "should be constrained with dofs of beam 2: ";
connected_dofs2.print(std::cout);
constraints.add_lines(connected_dofs1);
std::cout << "Constrained dof1: " << connected_dofs1.nth_index_in_set(0) << "constrained dof2: "
<<connected_dofs2.nth_index_in_set(0) << std::endl;
constraints.add_entry(connected_dofs1.nth_index_in_set(0),connected_dofs2.nth_index_in_set(0),-1);
constraints.add_entry(connected_dofs1.nth_index_in_set(1),connected_dofs2.nth_index_in_set(1),-1);
constraints.add_entry(connected_dofs1.nth_index_in_set(2),connected_dofs2.nth_index_in_set(2),-1);
constraints.add_entry(connected_dofs1.nth_index_in_set(3),connected_dofs2.nth_index_in_set(3),-1);
constraints.add_entry(connected_dofs1.nth_index_in_set(4),connected_dofs2.nth_index_in_set(4),-1);
constraints.add_entry(connected_dofs1.nth_index_in_set(5),connected_dofs2.nth_index_in_set(5),-1);
constraints.close();
DynamicSparsityPattern dsp(all_dofs, all_dofs);
DoFTools::make_sparsity_pattern(dof_handler, dsp,constraints);
sparsity_pattern.copy_from(dsp);
system_matrix_network.reinit(sparsity_pattern);
std::ostringstream oss;
oss <<"sparsity_pattern.svg";
std::string filename = oss.str();
std::ofstream output(filename.c_str());
sparsity_pattern.print_svg(output);