# [deal.II] Re: Use of 'VectorTools::interpolate_boundary_values' using numerical solution.

```Hi Jaekwang

One way I can think of is to construct your ConstraintMatrix for Part B
manually. Iterate over your triangulation, find all the dofs on the target
boundaries, then use ConstraintMatrix::add_line and
ConstraintMatrix::set_inhomogeinity to set the BC.```
```
Another method might be putting your calc_tangential_velocity function
inside New_VelBndValues. I assume this function needs to know the solution,
triangulation etc. Then you would have to create some references or dealii
SmartPointers in this class as well.

I hope this helps.

Jie

On Monday, April 9, 2018 at 6:32:28 PM UTC-4, Jaekwang Kim wrote:
>
> Hi, all
>
>
> I am always thank you for all guys here in this community.
>
>
> I have a question on the use of  VectorTools::interpolate_boundary_values
> functions
>
>
> Typically we use this function in when we set-up system as in the form
>
>
>
> VectorTools::interpolate_boundary_values (dof_handler,
>
>                                         1,
>
>                                        *Original**_VelBndValues<dim>(),*
>
>                                        constraints,
>
>
>
>
> The red lined functions are usually declared out side of main class.
>
>
> One problem I am interested in now is to (Part A) solve stokes flow with
> no slip boundary condition on every boundary one time (as step-22), -
>
>
> and then to (Part B) solve same system again with slightly different
> boundary condition comes from the straight problem
>
>
> If I finish Part A, i have numerical solution of (u,p) linked with dot
> handler.
>
>
> In (Part B), I post process solutions part A, e.g. I calculated stress
> value and I calculated tangential velocity of a boundary using Navier slip
> condition,
>
>
> So, I need to use
>
>
>
> VectorTools::interpolate_boundary_values (dof_handler,
>
>                                         1,
>
>                                        *New_VelBndValues<dim>(),*
>
>                                        constraints,
>
>
>
> such that
>
>
>
>      template<intdim>
>
>      double
>
>      New_VelBndValues<dim>::value (constPoint<dim>  &p,
>
>      constunsignedintcomponent) const
>
>      {
>
>      Assert (component < this->n_components,
>
>      ExcIndexRange (component, 0, this->n_components));
>
>
>
>      if(component == 0)
>
>          *return calc_tangential_velocity ();     (Error Here!!)*
>
>      else
>
>          return0;
>
>      }
>
>
>
>
> where '*calc_tangential_velocity ();' *is declared in main class, since I
> should have information of dot_handler and solution vectors.
>
>
>   template<intdim>
>
>   classStokesProblem
>
>   {
>
>   public:
>
>     StokesProblem (constunsignedintdegree);
>
>     voidrun ();
>
>   private:
>
>
>
>       ……
>
>
>
>     *double calc_tangential_velocity ();*
>
>
>
>     BlockVector<double> solution;
>
>
>
> };
>
>
>
>   ////////
>
> Obviously, this method does not work, I mean I cannot compile the code and
> it shows  'use of undeclared identifier 'calc_tangential_velocity' on the
> line  *(Error Here!!)*
>
> I would appreciate any one who comment it. It seems that complier has to
> know what is that before.
>
>
> Will this be possible in a certain way? How can I  go around this problem
> ?
>
>
> Thanks,
>
>
> Jaekwang
>
>
>
>

--
The deal.II project is located at http://www.dealii.org/
For mailing list/forum options, see