> 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