On Thu, 23 Jan 2014 18:19:45 +0100 Jan Blechta <[email protected]> wrote:
> On Thu, 23 Jan 2014 08:53:13 -0800 > Nikolaus Rath <[email protected]> wrote: > > > On 01/23/2014 04:19 AM, Jan Blechta wrote: > > > On Wed, 22 Jan 2014 11:39:30 -0800 > > > Nikolaus Rath <[email protected]> wrote: > > > > > >> Hi Jan, > > >> > > >> It was my impression from the other thread that I could handle > > >> the problem of multiple solutions by giving the nullspace to the > > >> solver. But I'll try the Laplace constraint as well. > > >> > > >> But then, even with u constrained, I still need to somehow put > > >> the same constraint on the test functions, don't I? That's the > > >> part I'm struggling with. > > > > > > Sure. This is why it seems logical to me to constraint both trial > > > and test space by Laplace equation. Nevertheless I did not think > > > it over a much. > > > > > > For what it's worth, it seems logical to me as well... I just don't > > know how to impose the second constraint. > > Check > http://fenicsproject.org/documentation/dolfin/1.3.0/python/demo/documented/neumann-poisson/python/documentation.html > > Testing by (v, 0) and (v + c, 0) gives linearly dependent equations - > in fact, the same. Similar construction can apply to your problem. Here, I meant (v, 0) and (v + arbitrary_constant, 0). And it holds because "the sufficient condition" \int f \dx + \int g \ds = c |\Omega| is fulfilled. Jan > > Jan > > > > > So, if anyone could give me a hint or point me to a demo that shows > > how to constrain test functions, I'd be very happy. > > > > > > Best, > > Nikolaus > > > > > > > > >> On 01/22/2014 11:22 AM, Jan Blechta wrote: > > >>> Actually there is a very good reason to constraint also u, say > > >>> by Laplace equation in the interior, as your original problem is > > >>> singular on a usual H^1 space - there are infinintely many > > >>> solutions to the problem. So you need to pick some. > > >>> > > >>> Jan > > >>> ------------------------------------------------------------------------ > > >>> From: Nikolaus Rath <mailto:[email protected]> > > >>> Sent: 22/01/2014 19:27 > > >>> To: Jan Blechta <mailto:[email protected]> > > >>> Cc: [email protected] <mailto:[email protected]> > > >>> Subject: Re: [FEniCS] How to impose constraints on test > > >>> functions? > > >>> > > >>> On 01/21/2014 01:57 AM, Jan Blechta wrote: > > >>>>>>>> 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. > > >>>>>>> > > >>>>>>> Ok, potential for Poisson problem is > > >>>>>>> > > >>>>>>> \Psi(u) = 1/2 \int |\nabla u|^2 - L(u) > > >>>>>> > > >>>>>> Ah, the potential is the starting point. Thanks! > > >>>>>> > > >>>>>>> So if you want to minimize \Psi on V = H^1(\Omega) subject > > >>>>>>> to constraint \int u = 0, you do can try to find a minimum > > >>>>>>> (u, c) \in (V \times R) of > > >>>>>>> > > >>>>>>> \Psi(u) - c \int u > > >>>>>>> > > >>>>>> > > >>>>>> My apologies if I'm slow, but why would I want to find a > > >>>>>> minimum (u,c) \in (V * R)? It seems to me that I don't want > > >>>>>> to find a specific value c -- I want a minimum u \in V > > >>>>>> \forall c. > > >>>>> > > >>>>> Nevermind that question. Since c is the Lagrange multiplier of > > >>>>> course we need to solve for it. I got confused because I > > >>>>> didn't see any additional constraint equations being used to > > >>>>> actually determine the value. But that is just because of the > > >>>>> special case \int u = 0, correct? > > >>>>> > > >>>>> For the more general case \int u = u0, am I right that we'd > > >>>>> need to set up an extra term in the linear form? > > >>>>> > > >>>>> (u, c) = TrialFunction(W) > > >>>>> (v, d) = TestFunctions(W) > > >>>>> g = Expression("-sin(5*x[0])") > > >>>>> a = (inner(grad(u), grad(v)) + c*v + u*d)*dx > > >>>>> L = g*v*ds + Constant(u0) * d * dx > > >>>> > > >>>> Correct. > > >>> > > >>> Ah, good :-). Thanks! > > >>> > > >>> > > >>> Could you also give me a similar hint for my original problem? > > >>> > > >>> To recap: I want to find u on the boundary such that with > > >>> > > >>> L = dot(f, grad(v)) * dx > > >>> a = u * dot(grad(v), FacetNormal(mesh)) * ds > > >>> > > >>> L(v) == a(u, v) holds for all v that satisfy div(grad(v)) = 0 > > >>> (without any boundary conditions on v). > > >>> > > >>> > > >>> I tried to start setting up the potential problem: > > >>> > > >>> \Psi(u) = 1/2 a(u,u) - L(u) > > >>> > > >>> but in contrast to the Poisson-Neumann example, now the > > >>> constraint isn't on the solution u but on the test functions v, > > >>> so I'm not sure how I can add the Lagrange multiplier here... > > >>> As far as I can see, there's no reason to constrain the > > >>> variation of u to satisfy Laplace's equation when looking for a > > >>> stationary point of \Psi. > > >>> > > >>> What am I missing this time? > > >>> > > >>> > > >>> Thanks so much for all your help! > > >>> Nikolaus > > >> > > >> > > > > > > > > > _______________________________________________ > fenics mailing list > [email protected] > http://fenicsproject.org/mailman/listinfo/fenics _______________________________________________ fenics mailing list [email protected] http://fenicsproject.org/mailman/listinfo/fenics
