Please reply to all, so that other people can also read this discussion on the mailing list.
I do currently have problems understanding the inner workings of
PetscFE. For example how the element matrix is assembled. As far as I
could deduce from your example, g3_uu_3d is the fourth-order elasticity
tensor which means that we should form the double-dot product of it with
the strain for it to be the integrand of the gradient of the basis
functions ( int_omega [g3:epsilon]•grad(v) d omega). So for a linear
elastic problem, according to my understanding, g3 should be the
elasticity tensor and g0,g1,g2 = NULL if there is no volumetric force.
And the residual should be f0 = 0 ; f1= the cauchy stress tensor.
Yes, that seems correct.
I also have troubles understanding how to apply boundary conditions.
There seems to be the concept of DMAddBoundary() and the
PetscDSSetBdJacobian() and PetscDSSetBdResidual(). I struggle to
understand what sets them apart from each other. My impression is that
DMAddBoundary() is for Dirichlet and Neumann conditions and
that PetscDSSetBdJacobian() and PetscDSSetBdResidual() are for BC types
that do not fall in those categories?
Note that you can also use PetscDSAddBoundary now (if you use the master branch). DMAddBoundary is basically used to tell which boundary region to apply which bc. If it's a Dirichlet bc you have to provide a function to prescribe the values on the boundary, if it's a Neumann bc you just give it NULL. PetscDSSetBdJacobian() and PetscDSSetBdResidual() are for Neumann bcs.
The reason why there's this difference for Dirichlet and Neumann bcs is because for finite elements you need to assemble stuff for non-zero Neumann bcs while for Dirichlet you set some dofs to some prescribed value.
ex77 works with the options you provided me with. However the solver does not seem to converge.
What do you mean that it works but it doesn't converge? Did you use all the options I provided you? In case not, you should send the output of -snes_view.
The problem I have with the documentation online so far is that I fail
to fully understand how to apply petscFE. I did for example not know
that you had to set the order of the finite element space and I have the
feeling that there is much more I am missing.
I don't really understand what you mean with "applying PetscFE".
I think the simplest way to learn how to use it is to start from one of the examples and if you don't understand what a function does you look it up in the documentation. If you want to see what kind of options there are for some object, for example petscspace, you add "-help|grep petscspace" to the command line.
Thanks,
Sander