2008/6/6 Anders Logg <[EMAIL PROTECTED]>: > On Fri, Jun 06, 2008 at 01:40:15PM +0200, Martin Sandve Alnæs wrote: >> 2008/6/6 Johan Hake <[EMAIL PROTECTED]>: >> > On Friday 06 June 2008 13:19:54 Martin Sandve Alnæs wrote: >> >> Say I have a form >> >> >> >> a = u*v*dx + f*v*ds >> > >> > Isn't it possible to do >> > >> > a = u*v*dx + f0*v*ds0 + f1*v*ds1 >> > >> > Johan >> >> Sure, but my forms are more complicated than that, >> and it would add to the compilation time for the forms. > > Well, there are two options: > > 1. Use two subdomains and two Functions, one on each domain. > > 2. Use one subdomain and one Function for the whole domain. > > If you think (1) costs too much, then you need to define your Function > in such a way that it is takes care of the different domains. I guess > it should be possible to create one Function f which owns two > Functions f0 and f1, overload interpolate() for f and there send the > data on to either f0 or f1. > > We could add an interface for this, something like > > f = Function([f0, f1, f2, ...], sub_domains) > > but it seems overly complicated and specific.
Yes, it quickly becomes very complicated. Another solution could be to add an argument "bool zero_tensor=true" next to reset_tensor in assemble functions, define a separate form with just the boundary integral, and call assemble repeatedly for each coefficient set with zero_tensor=false. This would be much efficient if iteration directly over a subdomain was possible, which will require the "inverse" of a MeshFunction. -- Martin _______________________________________________ DOLFIN-dev mailing list [email protected] http://www.fenics.org/mailman/listinfo/dolfin-dev
