Please, ignore that this method will apply a value correspond to a common 
node between two adjacent element twice. I will correct that. I just want 
to be sure what I am calculating is correct or not.


On Friday, July 1, 2016 at 12:05:24 PM UTC+4:30, dealii...@gmail.com wrote:
>
> 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