← Back to team overview

fenics team mailing list archive

Re: Breaking change in trunk: *dx now means integration over entire domain

 

Exactly.

Martin


On 30 January 2013 09:49, Johan Hake <hake.dev@xxxxxxxxx> wrote:

> Very nice!
>
> So:
>
>   f*dx
>
> will be assembled over all cells also if the mesh contains domain
> information for some or all cells?
>
> Johan
>
> On 01/30/2013 09:32 AM, Martin Sandve Alnæs wrote:
> > Hi all,
> > yesterday I pushed a change to trunk, which fixes a long standing
> > confusing issue. Unfortunately, the only way to stop this issue from
> > confusing new users is to change the interpretation of some
> > forms. Hopefully few codes will break from this change, but I'll explain
> > it here so you can judge for yourself.
> >
> > Previously dx, ds and dS were aliases for dx(0), ds(0) and dS(0)
> > respectively, and the assembler in dolfin interpreted a missing
> > meshfunction for subdomains as if all cells were labeled with 0. So if
> > you wrote a form
> >   u*v*dx      [1a]
> > or
> >   u*v*dx(0)   [1b]
> > and assembled it without specifying subdomains, you got the integral
> > over the entire mesh in both cases.
> >
> > However if you wrote
> >   f*dx + g*dx(1)   [2]
> > and assembled it with subdomains, then f would only be integrated over
> > the subdomain labeled 0, just as if you wrote
> >   f*dx(0) + g*dx(1)   [3]
> > This has naturally caused some confusion and bugs.
> >
> > With the development version of ufc,ufl,ffc,dolfin from today, you can
> > explicitly write
> >   f*dx() + g*dx(1)   [4]
> > to integrate f over the entire domain and g over subdomain 1,
> > independent of subdomain labeling.
> >
> > The breaking change is that [2] is now equivalent to [4], not [3].
> >
> > That is, f*dx is now interpreted as f*dx(), and not as f*dx(0). This
> > means that if you have code that depends on *dx being assembled only
> > over subdomain 0, that code will break. I do not believe this to be a
> > big problem, as it would be more natural to write explicitly dx(0) in
> > such a case. However, if you do have such code, I recommend changing *dx
> > to *dx(0) to be explicit, even if you are using 1.0 or 1.1 today.
> >
> > Martin
> >
> >
> > _______________________________________________
> > Mailing list: https://launchpad.net/~fenics
> > Post to     : fenics@xxxxxxxxxxxxxxxxxxx
> > Unsubscribe : https://launchpad.net/~fenics
> > More help   : https://help.launchpad.net/ListHelp
> >
>
>

References