On 01/09/2014 11:19 AM, Jan Blechta wrote:
>>>> I would like to solve the following equation (which does not
>>>> directly come from a PDE):
>>>>
>>>> \int dV f(x) * \partial_r g(x) = \int dA u(x) * \partial_n g(x)
>>>>
>>>> f(x) is known, u(x) is unknown, and the equation should hold for
>>>> any g(x) that satisfy Laplace's equation.
>>>>
>>>> In other words, I'm looking for a weight function u(x), such that
>>>> the surface integral of the normal derivative of any g(x)
>>>> (weighted by u) gives the same result as the volume integral of
>>>> the radial derivative of
>>>> g(x) (weighted by the known function f(x)).
>>>>
>>>> Is it possible to do this with FEniCS?
>>>> It seems that the equation itself is easy to express in UFL, but I
>>>> am not sure how do deal with the fact that there are no boundary
>>>> conditions, and that any trial function g(x) needs to satisfy
>>>> Laplace's equation.
>>>
>>> Yes. Look at the demo
>>>
>>> demo/documented/neumann-poisson
>>>
[...]
>>
>> However, even after going through the example, I'm not sure how I can
>> tell FEniCS to use only trial functions satisfying Laplace's equation.
>> In the example, the constraint on the test functions seems to fix just
>> the constant offset. It's not clear to me to extend this to something
>> more complicated, where the constraint itself takes the form of a PDE.
>> Do you think you could explain in a bit more detail?
>
> You change the constraint to Laplace problem, and the space R for
> Lagrange multiplier and corresponding test function to some appropriate
> FE subspace of Sobolev space W_0^{1,2}. Hint:
> http://en.wikipedia.org/wiki/Lagrange_multipliers_on_Banach_spaces
Alright, I did quite a bit of reading now (mostly Gockenbach, also
looked into Bhatti, Reddy and Strang), and I think I got the part about
natural/essential vs Neumann/Dirichlet boundary conditions (and also got
a lot more understanding of the finite element method itself). Thanks
for the pointers!
However, I am still struggling to combine the finite element method with
Lagrange multipliers. I think I have a good handle on Lagrange
multipliers for constrained optimization of a scalar function or
integral, but I fail to transfer this to FE.
I tried to work through the neumann-poisson problem on my own, but I
know I'm doing something fundamentally wrong. The approach that I would
use to incorporate \int u = u0 into the solution is to define
V = FunctionSpace(mesh, "CG", 1)
R = FunctionSpace(mesh, "R", 0)
u = TrialFunction(V)
v = TestFunctions(V)
a1 = inner(grad(u), grad(v) * dx
L1 = g*v*ds
r = TestFunctions(R)
a2 = u*r*dx
L2 = u0*r*dx
and then solve {a1 == L1, a2 == L2} simultaneously. But obviously that
doesn't use any Lagrange multipliers. Now I can imagine to introduce a
Laplace multiplier by minimizing norm(a1(u) - L1) subject to a2(u)=L2,
but that seems to be just adding complication without any gain.
I know that I probably have to introduce the Lagrange multiplier earlier
in the variational problem, but I do not see how. Could you maybe
explain some of the intermediate steps between \int u = 0 and the
definition of the variational form over the mixed function space? If I
look at a = (inner(grad(u), grad(v)) + c*v + u*d)*dx, I do not
understand how the Lagrange multiplier got introduced. Why is c (which I
assume is the lagrange multiplier) multiplied with v? And why is there a
second test function d?
Best,
Nikolaus
_______________________________________________
fenics mailing list
[email protected]
http://fenicsproject.org/mailman/listinfo/fenics