On Sat, Oct 17, 2009 at 01:54:57PM +0100, Garth N. Wells wrote:
Johan Hake wrote:
On Saturday 17 October 2009 12:32:54 Garth N. Wells wrote:
Will
uh = U[1]
return a deep or shallow copy of the sub-Function?
To avoid confusion with the ufl interface we have limited the interface for
SubFunctions in PyDOLFIN to split. split returns a shallow copy by default.
pass True to split and it will return a deepcopy. In your case it would be:
uh = U.split()[0]
and
uh = U.split(True)[0]
operator[] is used when you define forms. We have not yet managed to merge the
two operations into one.
OK. Do we still have the function 'sub'?
Where is the operator [] define for sub-Functions?
The operator you are using is the ufl one, which is defined in
ufl.exproperators.py.
OK, but it's not clear to me then what's happing with this extract of my
code:
problem = VariationalProblem(a, L, bcs)
Uh = problem.solve()
u = Expression("epx(x[0])", V = Vexact)
uh = Uh[1]
M = (uh-u)*(uh-u)*dx
error = sqrt(assemble(M, mesh=mesh))
This should work fine since uh will be a component of the coefficient
Uh in the UFL form.
Same as when you write say inner(v, u)*dx or anything else that
accesses components.
So in summary [] can be used for any purpose in forms. It can also be
used for plotting, but extracting the vector etc will not work.