Looking through the FEniCS 1.6.0 demos I've noticed that the Stokes and Navier-Stokes examples use the velocity gradient grad(u)
rather than the strain rate tensor epsilon(u) = sym(grad(u)) = 1/2*(grad(u) + transpose(grad(u)))
. At first I thought this was because for these problems the two operators are equivalent. But, I recently compared the results of demo_stokes-taylor-hood.py
which uses grad(u)
and those using epsilon(u)
as defined above, i.e.
a = (inner(sym(grad(u)), grad(v)) - div(v)*p + q*div(u))*dx
instead of
a = (inner(grad(u), grad(v)) - div(v)*p + q*div(u))*dx
Here is a summary of the results (min and max magnitudes):
| u | p
|-------------|-----------
| min max | min max
------------|-------------|-----------
grad(u) | 0 2.1 | -66 160
epsilon(u) | 0 2.2 | -33 78
Could someone please explain why the FEniCS demos use grad(u)
instead of epsilon(u)
, why the results are different, and which results are correct?