Dear Elena,

I want to do something like below code, but I don't know how to write it 
> correctly:
>
> template <int dim>
>     void
>     Solver<dim>::*assemble_linear_system *(LinearSystem &linear_system)
>     {
>         ....
>         VectorTools::interpolate_boundary_values (dof_handler,
>                                                                       0,
>                                                                      
> **boundary_values(0),*
>                                                                      
> boundary_value_map);
>
>         VectorTools::interpolate_boundary_values (dof_handler,
>                                                                       1,
>                                                                       
> **boundary_values(1),*
>                                                                       
> boundary_value_map);
>         ...  
>     }  
>
>
> template<int dim>
>     void* My_Case_2*<dim>::*BoundaryValues::vector_value*(const 
> Point<dim> &p,
>                 
>                                                                     
> Vector<double> &values) const
>     {
>         ...
>         if (boundary_indicator == 0) {
>            BC = p(0) + p(1);
>         } else if (boundary_indicator == 1) {
>            BC = p(0)*p(0) + p(1);
>         } 
>         ...
>     }
>
You can do something like this if you define a member variable 
current_boundary_indicator and set it correctly before calling 
interpolate_boundary_values(), i.e. you would do

> boundary_values.current_boundary_indicator=0;

VectorTools::interpolate_boundary_values (dof_handler,0,boundary_values, 
> boundary_value_map);
>
boundary_values.current_boundary_indicator=1; 

VectorTools::interpolate_boundary_values (dof_handler,1,boundary_values, 
> boundary_value_map);
>
 
If you have a look at the documentation of 
VectorTools::interpolate_boundary_value [1], you see that there are 
multiple functions with this name.
In particular, the one with the signature

> void VectorTools::interpolate_boundary_values

  (const DoFHandlerType< dim, spacedim > &                                 
>                       dof,

   const std::map< types::boundary_id, const Function< spacedim, number > * 
> > & function_map,

   std::map< types::global_dof_index, number > &                           
>                       boundary_values,

   const ComponentMask &                                                    
>                              component_mask = ComponentMask() ) 

might be a good alternative for you as also Bruno (with a ConstraintMatrix 
instead of std::map< types::global_dof_index, number > &) already pointed 
out.
Then, you would define one Function for each boundary_indicator and call 
VectorTools::interpolate_boundary_values only once.

Best,
Daniel

[1] 
https://www.dealii.org/8.5.0/doxygen/deal.II/namespaceVectorTools.html#a9f3e3ae1396811f998cc35f94cbaa926

-- 
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