← Back to team overview

dolfin team mailing list archive

[Question #123984]: Second derivatives of variational form

 

New question #123984 on DOLFIN:
https://answers.launchpad.net/dolfin/+question/123984

Hello,

I am trying to use derivative() twice to compute the second-derivatives of a variational form with respect to the unknown. Here is an example program:

---
from dolfin import *
import numpy as np

mesh = UnitSquare(5,5)
V = FunctionSpace(mesh, 'CG', 1)
u = Function(V)
v = TestFunction(V)
a = dot(grad(v), (1+u**2) * grad(u))*dx   # Nonlinear variational form

# First derivative of a.
du = TrialFunction(V)
da = derivative(a, u, du)

# Second derivative of a.
d2u = TrialFunction(V)
d2a = derivative(da, u, d2u)

# Evaluate a somewhere.
u.vector()[:] = np.random.random(V.dim())
a_val = assemble(a, mesh=mesh) ; print 'a(u) = ', a_val

# Evaluate da somewhere.
da_val = assemble(da, mesh=mesh) ; print 'da(u) = ', da_val
                                                                                
# Evaluate d2a somewhere.
d2a_val = assemble(d2a, mesh=mesh) ; print 'd2a(u) = ', d2a_val
---

The first two 'print' commands output:

a(u) =  <PETScVector of size 36>
da(u) =  <PETScMatrix of size 36 x 36>

but the last assemble() command raises an exception:

"ufl.log.UFLException: Found product of basis functions, forms must be linear in each basis function argument"

What am I doing wrong here? Shouldn't I obtain a tensor of order 3 by differentiating da?

Thanks in advance!
Dominique

-- 
You received this question notification because you are a member of
DOLFIN Team, which is an answer contact for DOLFIN.



Follow ups