Hello everyone,
I was wondering if it is correct to take second order derivatives on Lagrange finite element spaces by performing grad(grad(u)). Similarly, for third order derivatives one would take grad(grad(grad(u)))
E.g:
Given V = FunctionSpace(submesh, “Lagrange”, 2)
u = TrialFunction(V)
to get the second derivative one would need to do:
The problem does not come from the computation of grad(grad(u)). The problem comes from the discrete function space V in which you look for your solution which must be in H2 i.e. the normal derivative must be continuous across facets. This is not the case with Lagrange elements (for any order!) which are only in H1, you will miss contributions of the normal derivative jumps in the weak form and your solution will make no sense. I strongly suggest reading the above demos and some background references on biharmonic equations.
The difference with weak forms involving only grad(u) (Poisson equation for instance), is that u must be in H1 i.e. continuous but no continuity on its derivatives. This is indeed the case for Lagrange elements of any order, so no problem in this case.
Thank you. Yes, I am aware that for the biharmonic equation I would either need to solve it through an interior penalty DG formulation or by means of a mixed method otherwise I would be unstable. However, my interest is in second order elliptic equations where I am considering higher order gradients.