Dear Daniel

My name is Pasha. Thank you for your response. I want to extract sum of 
values from system RHS ( which is a 
dealii:TrilinosWrappers::MPI::BlockVector) correspond to  all degrees of 
freedom which are at the boundary.  I am working with a 
parallel::distributed::Triangulation. I wrote the following code to extract 
value for component 1 at boundary 3:

  IndexSet in_set;

  std::vector<bool> component_select (n_components, false);
  component_select[1] = true;

  std::set< types::boundary_id > boundary_ids;
  boundary_ids.insert(3);

  DoFTools::extract_boundary_dofs(dof_handler, component_select,
 in_set, boundary_ids);

  typename DoFHandler<dim>::active_cell_iterator
  cell = dof_handler.begin_active(),
  endc = dof_handler.end();

  double local_load = 0.0 ;

  for (; cell!=endc; ++cell)
    if (cell->is_locally_owned())
    {
    cell->get_dof_indices(local_dof_indices);

    dealii::IndexSet::ElementIterator
    index = in_set.begin(),
    endind = in_set.end();

    for (; index!=endind; ++index)
    {
    dealii::types::global_dof_index gdi = *index;

        unsigned int pos = find(local_dof_indices.begin(), 
local_dof_indices.end(),
        gdi) - local_dof_indices.begin();
        if(pos >= local_dof_indices.size()) {
           //not found
        continue;
        }

        // now DoF is in this cell
        local_load -= saved_residual(gdi);

    }
}

double load_value = Utilities::MPI::sum(local_load, mpi_com);

is the above method correct? I am confusing because degrees of freedom on 
the boundary that belong to the locally relevant set. 
>From deal II online documentation for DoFTools::extract_boundary_dofs():
If the DofHandler object is indeed defined on a 
parallel::distributed::Triangulation, then the selected_dofs index set will 
contain only those degrees of freedom on the boundary that belong to the 
locally relevant set.

*Locally relevant degrees of freedom*

This concept identifies a subset of all degrees of freedom when using 
distributed meshes, see the Parallel computing with multiple processors 
using distributed memory 
<https://www.dealii.org/8.4.0/doxygen/deal.II/group__distributed.html> module. 
Locally relevant degrees of freedom are those that live on locally owned or 
ghost cells. Consequently, they may be owned by different processors.

Thank you again,
Pasha


On Thursday, June 30, 2016 at 9:26:54 PM UTC+4:30, Daniel Arndt wrote:

> Dear ?,
>
> dealii::IndexSet::ElementIterator::operator*() returns the stored 
> global_dof_index [1]. 
> Therefore, all you have to do is to dereference index:
>
> dealii::types::global_dof_index gdi = *index
>
> Best,
> Daniel
>
> [1] 
> https://www.dealii.org/8.4.1/doxygen/deal.II/classIndexSet_1_1ElementIterator.html#a6218ab9e8e76699fc998834bf8e006ee
>
> Am Donnerstag, 30. Juni 2016 15:12:00 UTC+2 schrieb dealii...@gmail.com:
>>
>> Hi
>>
>> I am trying to extract all degrees of freedom which are at the boundary 
>> and belong to specified components using DoFTools::extract_boundary_dofs() 
>> function and IndexSet for a parallel distributed triangulation. Now, how I 
>> can iterate over the IndexSet and how I can access to the Dof index in it?
>>
>> Something like this:
>>
>>     dealii::IndexSet::ElementIterator     index = in_set.begin(),     endind 
>> = in_set.end();
>>
>>      for (; index!=endind; ++index)
>>      {
>>      how to access to dof index here?
>>      }
>>
>> Thank you
>>
>

-- 
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.
For more options, visit https://groups.google.com/d/optout.

Reply via email to