← Back to team overview

dolfin team mailing list archive

Re: Functions for applying boundary conditions to the RHS vector only now accept the solution vector x. Where Dirichlet boundary conditions are applied, b = x - bc.The is useful for applying boundary conditions within Newton iterations. [...]

 

Ok, sounds good. And also Dirichlet conditions applied weakly should fall
into the same cathegory, I guess.

/Johan


> Now that I'm thinking properly, a function like FEM::assembleBCresidual
> should
> return the residual for both Neumann and Dirichlet BCs (since non-zero
> Neumann
> BCs are not yet implemented, I'm starting to forget that they even exist!)
>
> I'll revert to the old applyBC to keep things consistent and add
> FEM::assembleBCresidual which we can discuss if needed.
>
> Garth
>
>
>
> Quoting Johan Hoffman <jhoffman@xxxxxxxxxxx>:
>
>> I think that would be a good idea. And the name is an accurate
>> description
>> of what is going on.
>>
>> /Johan
>>
>>
>> > A possibility would be a function "FEM::assembleBCresidual".
>> >
>> > Garth
>> >
>> > On Fri, 2005-12-02 at 09:11 +0100, Garth N. Wells wrote:
>> >> Quoting Anders Logg <logg@xxxxxxxxx>:
>> >>
>> >> > This looks strange to me, but maybe I don't understand it.
>> >> >
>> >> > What if you don't even have a vector x? What vector should x should
>> >> > you then give as an argument?
>> >>
>> >> If you don't have a vector x, you don't want to use this function
>> :-).
>> >> It's
>> >> basically returning the Dirichlet boundary condition "residual".
>> >>
>> >> >
>> >> > Maybe it is better to just call the standard version of applyBC()
>> >> > without x and then do
>> >> >
>> >> > b *= -1.0;
>> >> > b += x;
>> >>
>> >> This would add x to all elements of b, not just to elements where
>> >> Dirichlet
>> >> boundary conditions are applied. I originally used the old applyBC
>> for a
>> >> vector
>> >> to use an analogous procedure to the above, but this required two
>> >> temporary
>> >> vectors to be created, initialised and have boundary conditions
>> applied
>> >> at each
>> >> Newton iteration (in addtion to the usual assemble of b) - not very
>> >> nice.
>> >>
>> >> >
>> >> > This would be two lines of code extra (one if you put them on the
>> same
>> >> > line... :-). It's probably better to put this in the Newton solver
>> >> > since the Newton solver knows why this operation should be
>> performed.
>> >>
>> >> The Newton solver knows nothing about the boundary coniditons. The
>> BC's
>> >> need to
>> >> be applied by the user in the resdiudal vector b. This is done in the
>> >> class
>> >> NonlinearFunction.
>> >>
>> >> A possibility is a function that inserts components of x into b
>> (rather
>> >> than the
>> >> BC value), where Dirichlet BCs are applied. PETSc has a function to
>> the
>> >> set the
>> >> vector R, where F(u) = R is being solved, so R would contain the
>> >> Dirichlet BCs.
>> >>
>> >>
>> >> Garth
>> >>
>> >> >
>> >> > /Anders
>> >> >
>> >> >
>> >> > On Thu, Dec 01, 2005 at 02:16:12PM +0100, dolfin@xxxxxxxxxx wrote:
>> >> > > Commit from garth (2005-12-01 14:16 CET)
>> >> > > -----------------
>> >> > >
>> >> > > Functions for applying boundary conditions to the RHS vector only
>> >> > now accept the solution vector x. Where Dirichlet boundary
>> conditions
>> >> > are applied, b = x - bc.The is useful for applying boundary
>> conditions
>> >> > within Newton iterations.
>> >> > >
>> >> > > This is not consistent with the other applyBC functions which
>> return
>> >> b = bc
>> >> > (no minus sign). This is due to the definition of the nonlinear
>> >> function
>> >> > F(u)=0.
>> >> > > For Poisson's equation, I've been using the format F(u) = (grad
>> >> v,grad u) -
>> >> > (v,f), hence the need for the minus. Is there a preference as to
>> how
>> >> we
>> >> > set-up nonlinear problems?
>> >> > >
>> >> > > Would it be better to use a different name for funtions that
>> return
>> >> the
>> >> > difference between the current approximate solution and the
>> Dirichlet
>> >> BC?
>> >> > >
>> >> > >   dolfin  src/kernel/fem/FEM.cpp       1.43
>> >> > >   dolfin  src/kernel/fem/dolfin/FEM.h  1.23
>> >> > >
>> >> > > _______________________________________________
>> >> > > DOLFIN-dev mailing list
>> >> > > DOLFIN-dev@xxxxxxxxxx
>> >> > > http://www.fenics.org/cgi-bin/mailman/listinfo/dolfin-dev
>> >> > >
>> >> >
>> >> > --
>> >> > Anders Logg
>> >> > Research Assistant Professor
>> >> > Toyota Technological Institute at Chicago
>> >> > http://www.tti-c.org/logg/
>> >> >
>> >> > _______________________________________________
>> >> > DOLFIN-dev mailing list
>> >> > DOLFIN-dev@xxxxxxxxxx
>> >> > http://www.fenics.org/cgi-bin/mailman/listinfo/dolfin-dev
>> >> >
>> >>
>> >> _______________________________________________
>> >> DOLFIN-dev mailing list
>> >> DOLFIN-dev@xxxxxxxxxx
>> >> http://www.fenics.org/cgi-bin/mailman/listinfo/dolfin-dev
>> > --
>> > Dr. Garth N. Wells
>> > Faculty of Civil Engineering and Geosciences
>> > Delft University of Technology
>> > Stevinweg 1
>> > 2628 CN Delft
>> > The Netherlands
>> >
>> > tel.     +31 15 278 7922
>> > fax.     +31 15 278 6383
>> > e-mail   g.n.wells@xxxxxxxxxxxxxxx
>> > url      http://www.mechanics.citg.tudelft.nl/~garth
>> >
>> >
>> >
>> > _______________________________________________
>> > DOLFIN-dev mailing list
>> > DOLFIN-dev@xxxxxxxxxx
>> > http://www.fenics.org/cgi-bin/mailman/listinfo/dolfin-dev
>> >
>>
>>
>>
>> _______________________________________________
>> DOLFIN-dev mailing list
>> DOLFIN-dev@xxxxxxxxxx
>> http://www.fenics.org/cgi-bin/mailman/listinfo/dolfin-dev
>>
>





References