I am writing some code for the analysis of 3D truss structures. The program is a typical implementation of the direct stiffness method for truss elements. While testing it and comparing results to other FEM programs, I encountered the following problem.
When I have a joint with zero-force truss elements (for example a joint where 3 non-coplanar truss elements meet), the forces in these elements do not equal zero, which contradicts the joint equilibrium equation. This only happens for space trusses. When I consider plane trusses and add zero-force joints (for example a joint where two non-colinear truss elements meet), everything works out okay.
I cannot see what causes this problem. Perhaps some additional form of static condensation is needed for the 3D-case?
My thought process is that if the force in an element equals zero, that means that $u_{i} - u_{j} = 0$, where $u_{i}$ and $u_{j}$ are the axial displacements of that element, expressed in its local coordinate system. Simply stated, no elongation means no force. Of course, the whole element can be displaced in a rigid-motion-manner only, if at all.
The problem seems to be the following. Assume you have a 3D truss defined, with no zero-force members. Attach 3 elements to it (i.e. a tetrahedron, which is stable by itself) so that the entire truss is stable again. Assume the joint where these elements meet is unloaded, hence all the forces in the added elements must equal zero. Of course, the other displacements and forces in the truss are not affected by this - it just acts the same as without the added three elements. Hence, the truss would somehow need to "know" that it must be displaced in such a manner that none of the three members is elongated (or contracted), i.e. they can only be displaced as a whole, rigidly.
This seems pretty weird and it hints that perhaps such situations should indeed be treated before the analysis. Then again, the direct stiffness method is, as far as I know, completely general and should be able to calculate any truss.
Further on, for 2D trusses this situation does not seem to arise at all; the zero force members are always recognized correctly by the direct stiffness method.
Below is an example of a truss where I encounter the problem. The image represents the element and node labeling of the truss.
From equilibrium of node 10013 (the upmost node), it follows that the forces in elements 112, 114 and 116 must equal zero. But, the program only calculated zero force in element 114. The forces in elements 112 and 116 are of order of magnitude similar to the other forces in the truss.
When I remove elements 112, 114 and 116, all the forces in the truss are calculated correctly when compared to another FEM solver (up to 3% difference, as mentioned above).