> I'm trying to implement a specular BC, i.e. the boundary condition for the
> direction analyzed (output direction) is the result of the reflection at
> the boundary of another direction (input direction) that has been already
> solved in previous steps.
> 
> I store the solution for every direction as:
> 
>    BlockVector<double> angular_solution

Do I understand correctly that each block of this block vector corresponds to 
a single angle? If so, do you build a global matrix for the whole coupled 
problem?


> Can I define
> 
>    Function<dim> input_solution (Vector<double> solution)
> 
> to put in
> 
> 
> VectorTools::interpolate_boundary_values(dof_handler,'1',input_solution<dim
> > (angular_solution.block(i)),boundary_values)
> 
> If so, how do I define it?

No, there is not currently any way to do this. In particular, since by the 
time you solve for block i you need the solution of block j, but that isn't 
available yet.

I believe the simplest way to deal with this is to realize that at each 
boundary point, you can write your boundary condition in the form
    u_j(x) = u_{opposite(j)}(x)
where j indicates the angle and, if I understand corrrectly, corresponds to 
the blocks of your solution. In terms of degrees of freedom, this means that 
you can write it as
  U_k = U_m
for some pair of global DoF indices k,m; if angles don't exactly match, then 
the right hand side is not just a single DoF but a linear combination of other 
DoFs. In either case, this is exactly the case the ConstraintMatrix class 
handles. You may want to look through step-45 which deals with setting up such 
a constraint object for the case of periodic boundary conditions.

Best
 W.

-------------------------------------------------------------------------
Wolfgang Bangerth                email:            [email protected]
                                 www: http://www.math.tamu.edu/~bangerth/
_______________________________________________
dealii mailing list http://poisson.dealii.org/mailman/listinfo/dealii

Reply via email to