On 9/30/21 6:49 AM, Мария Бронзова wrote:
> So, there are two boundary integrals in the formulation and I am trying to
> implement them for the case of fixed displacement boundary condition. The
> first boundary integral falls to zero for such a BC, as no displacement
> variation is possible in this case. So, I am implementing the second integral
> from the second equation. The integral can be represented as in the BC.PNG
> file. There are those factors in brackets, assigned displacement values and
> variation of the pressure multiplied together:
>
> *local_rhs*(i) += -porosity*(1.+Q[k]/R[k])
> *d_boundary_values[q]
> *fe_face_values[pressure].value(i,q)
> *fe_face_values.JxW(q);
>
> But the way it is written now it cannot work, as the *d_boundary_values* term
> is a vector of vectors (as we have three displacement components). So, the
> question is, whether there is a way to treat the displacement components
> seperately in this *d_boundary_values* term? Or maybe even a smarter way to
> make it work?
I think that your question is actually of mathematical nature, not one of
implementation. If I read the integral I_2 correctly in your previous email,
then what you prescribe there is
u^i_n
which I believe is not actually the displacement on the boundary (a vector)
but only the *normal component* of the velocity (a scalar). So you have two
options:
- You write a function that only returns the normal velocity (which is all
you can prescribe anyway)
- You write a function that returns the velocity at the boundary as a vector
and then in the bilinear form, you take the dot product with the normal
vector (which you can get from the fe_face_values object).
Both are reasonable, though if all you can prescribe is the normal component,
you might as well write your function in such a way that that is what it returns.