Hi Andrew,
yes, this should be sufficient in my case, my velocity space is always HDiv(U2xV0) + HDiv(U1xV1), where the second part is the vertical velocity. At lowest order I use so far
U1 = RT_0, U2 = DG_0, V0 = CG_1, V1 = DG_0,
but I also want to work with the next-to-lowest-order case
U1 = BDFM_1, U2=DG_1, V0 = CG_2, V1 = DG_1.
I will try out what you suggest. Thanks a lot for your help,
Eike
--
Dr Eike Hermann Mueller
Research Associate (PostDoc)
Department of Mathematical Sciences
University of Bath
Bath BA2 7AY, United Kingdom
+44 1225 38 5803
e.mueller@bath.ac.ukhttp://people.bath.ac.uk/em459/
Hi Eike,
In general, we don't actually have proper functionality for that.
However, assuming you're using some H(div) space for u, including an HDiv(U2xV0) + HDiv(U1xV1) sort of thing, you can obtain the BC u.n=0 by doing, for example,
bcs = [DirichletBC(W2, 0.0, "bottom"), DirichletBC(W2, 0.0, "top")]
Why does this work? Well, this causes any degrees of freedom on the 'bottom' and 'top' boundaries to be set to 0. But the degrees of freedom on the boundary in an H(div) space are precisely u.n (technically with some sort of scaling, but scaled 0 is still 0). And any interior DOFs, or DOFs on other facets, have vanishing normal component on the original facet. So indeed, this does the right thing.
If your velocity was in something like VectorFunctionSpace(mesh, "CG", n), unfortunately this approach wouldn't work, and I think you'd have to apply the BC weakly by adding on a surface integral. But in the H(div) case, what I described above happens to work.
Hope this helps!
Best,
Andrew
_______________________________________________
firedrake mailing list
firedrake@imperial.ac.ukhttps://mailman.ic.ac.uk/mailman/listinfo/firedrake