Ten Node Tetrahedron โ
The ten node tetrahedron is the quadratic 3D solid element: the four corners of a tetrahedron plus a node at the middle of each of its six edges. Its strain varies linearly through it, so it can bend, where the linear four node tetrahedron, with one constant strain, locks up. It is the element to use for volumes that only mesh into tetrahedra.
It is made from a 4-vertex mesh per tetrahedron. The six edge nodes are added for you at the edge midpoints.
It replaces the Four Node Tetrahedron component.
Warning
It needs an OpenSees newer than 3.8.0. In OpenSees 3.8.0 and earlier the element integrates over a sixth of its volume, so it comes out six times too soft (and six times too light), and reading its stresses corrupts memory. The fixes are in OpenSees pull request #1833, merged into the master branch on 16 October 2026. Use an OpenSees built from master since then, or a release after 3.8.0. On an older one, Run Analysis stops with a message saying so; it does not hand back wrong numbers.
๐ง Grasshopper component โ

MeshTetrahedral mesh with 4 vertices, its corners, in m.
ElementIdOptional name for the element, used to pull its results out later.
Constructs one quadratic tetrahedral element from one 4-vertex mesh.
Supports and point loads go on nodes โ
A Support holds the one node at its point. A face supported only at its mesh vertices is held at its corners and free at the edge nodes between them, and bulges there. Support the edge nodes too: take the points from Points, keep the ones on the supported face, and remove duplicates. Assemble warns when it finds an edge node between two supported corners with no support of its own.
๐ When to use it โ
Use it when
- The volume cannot be meshed into hexahedra, which is most geometry not drawn with bricking in mind.
- The solid bends: a cantilever 10 ร 1 ร 1 cut into 60 tetrahedra deflects 0.4018 against beam theory's 0.4024 with ten node elements, and 0.098 with four node ones, a quarter of it.
Do not use it when
- A hexahedral mesh is available and coarse is good enough โ SSP Brick is cheaper.
- The body is thin โ use Shell.
Examples: Spot the Cow, Femur and The Rebellious Slave, at the end of this page, bring tetrahedral meshes from a mesher into Grasshopper, under their own weight, a point force and in vibration.
๐ Results โ
Brick Stresses gives one value per element: the mean of its four integration points, which is the stress at its centre. Model View draws how the stress varies across each element, from the four points read back to its nodes.
Its own weight (Gravity Load) is shared among the nodes the way the element itself shares a body force: โ1/20 of the element's weight on each corner and 1/5 on each edge node. The total is the weight.
๐ Relation to OpenSees
element TenNodeTetrahedronStd $eleTag $n1 $n2 $n3 $n4 $n5 $n6 $n7 $n8 $n9 $n10 $matTag $bx $by $bz$n1 โฆ $n4are the corners,$n5 โฆ $n10the edge nodes on 1-2, 2-3, 3-1, 1-4, 2-4, 3-4.TenNodeTetrahedronStdtakes them in that standard order; plainTenNodeTetrahedronhas$n9and$n10the other way round.$matTagis the Material input.- Body forces are not exposed by the component; use Gravity Load for self-weight.
Tetrahedron nodes have 3 DOF.
Examples โ
Three tetrahedral meshes from a mesher, brought into Grasshopper. Download a definition from the link under its picture. Each needs an OpenSees newer than 3.8.0, as the warning at the top of this page explains; with 3.8.0 the analysis stops and says so.
Spot the Cow โ

GHspot-the-cow.ghGrasshopper file ยท download
A solid concrete cow, 2.4 m long, standing on its four hooves under its own weight, in 5 030 Ten Node Tetrahedra. It shows how to bring a tetrahedral mesh into Grasshopper, how to hold a solid on the ground, and how to read the stress inside it. Spot is Keenan Crane's cow, a mesh used throughout geometry processing.
The model โ
| Group | What it does |
|---|---|
| 1 - Spot the cow in tetrahedra | The tetrahedra as a mesher writes them: Nodes, the 1 431 corner points, and Tetrahedra, four node numbers per tetrahedron, one branch each. List Item picks each tetrahedron's corners and Construct Mesh makes them into a four vertex mesh. |
| 2 - Concrete, and Ten Node Tetrahedra | An nD Elastic Isotropic material, C30/37, with its density, and a Ten Node Tetrahedron for each mesh. |
| 3 - Pinned at every node on the ground | Every element's ten nodes from its Points output, in one list; those below 1 mm, once each, held in X, Y and Z by a Support. |
| 4 - Its own weight | Gravity, in a Load Pattern. |
| 5 - Assemble Model | Assemble, and Model View to see the elements and the supports. |
| 6 - Solve, and the vertical stress | Run Analysis, and Model View on Brick stresses, ฯ33, over a Range of -0.15 to 0.15 MPa, with its Legend. |
Tetrahedra from a mesher โ
Grasshopper has no tetrahedral mesher, so the tetrahedra come in as one hands them out: a list of points, and four point numbers per tetrahedron, counted from 0. Ten Node Tetrahedron takes a four vertex mesh, puts the corners in the order OpenSees wants, and adds a node in the middle of each edge. The four mesh faces do not matter: any four that close the mesh will do.
The same two lists come out of any tetrahedral mesher: a TetGen .node and .ele, the nodes and the tetrahedra of a gmsh .msh. Paste or read yours into Nodes and Tetrahedra, and the rest of the definition runs as it is. This cow was meshed with gmsh, by Tools/Examples/SpotTheCowMesh.py in the Alpaca4d repository.
Holding a solid โ
As Supports and point loads go on nodes explains, a support holds only the node at its point. So the hooves are held at every node on the ground, taken from Points, which gives each element's ten nodes, edge nodes included. Cull Duplicates keeps each node once: a node is shared by the elements around it.
A solid node has no rotations, so a support on it holds translations only. The cow stands on pinned points.
What it shows โ
The cow weighs 47.4 kN: 1.93 mยณ of concrete at 2 500 kg/mยณ. The reactions add up to that.
| Where | Vertical stress |
|---|---|
| Legs, 20 cm up | -0.094 MPa |
| Body, 60 cm up | -0.024 MPa |
| Top of the neck, where the head hangs out past the front legs | +0.11 MPa |
| At the pinned nodes under the hooves | down to -1.4 MPa |
The legs check by hand. At 20 cm up their cross-section is 0.52 mยฒ and carries the 45.7 kN of cow above it: 45.7 / 0.52 = -0.089 MPa, against -0.094 MPa in the model.
The stress under the hooves is not real. Holding a solid at its nodes makes a point support, and the stress at a point support grows every time the mesh is refined. That is why Range is set to ยฑ0.15 MPa: fitted to everything drawn, the scale would stretch from -1.4 to +0.3 MPa and leave the rest of the cow one colour. Clear Range to see all of it.
Tick another result in Model View's Results menu: Von Mises, or Displacement, at most 0.02 mm.
Spot by Keenan Crane, from his 3D model repository, dedicated to the public domain (CC0).
Femur โ

GHfemur.ghGrasshopper file ยท download
A thigh bone, held at the knee, with the force of the hip on its head, in 3 813 Ten Node Tetrahedra. The bone is the Standardised Femur, the reference geometry for finite element studies of the femur. The example shows how to hold one end of a solid and load the other through a patch of nodes.
The model โ
| Group | What it does |
|---|---|
| 1 - The femur in tetrahedra | The tetrahedra as a mesher writes them: Nodes, the 1 297 corner points, and Tetrahedra, four node numbers per tetrahedron, one branch each. List Item and Construct Mesh make each into a four vertex mesh. See Tetrahedra from a mesher. |
| 2 - Bone, and Ten Node Tetrahedra | An nD Elastic Isotropic material: cortical bone, E = 17 GPa, ฮฝ = 0.3. |
| 3 - Held at the knee | Every element's ten nodes from its Points output; those in the bottom 2 cm, once each, held in X, Y and Z, as a bone potted in cement for a test. |
| 4 - The hip's force | The highest node is the top of the head. The force is shared equally among the nodes within 15 mm of it: List Length counts them and Division gives each its share of the 2 kN, as Point Loads. |
| 5 - Assemble Model | Assemble, with a Tolerance of 0.0001 m (0.1 mm). The default, 1 cm, is larger than the tetrahedra and would weld their nodes together. Model View shows the supports and the loads. |
| 6 - Solve, and the displacement | Run Analysis, and Model View on Displacement, drawn 20 times larger, with its Legend. |
The load โ
When you walk, the hip pushes on the head of the femur with about two and a half times your weight. For an 80 kg person that is 2 kN. Here it leans 13ยฐ from the shaft, pushing the head down and out: (0.45, 0, -1.95) kN. Spread over the 90 nodes on the top of the head, it does not punch through a single node.
What it shows โ
The head moves 3.4 mm, mostly sideways. The shaft bends over the knee, as it does under the eccentric load of the neck. The reactions at the knee balance the 2 kN exactly.
Next to the groups, a Natural Vibration Analysis and a second Model View shows the bone's modes. Move the Step slider to go through them. The first two are at 57 and 61 Hz.
Treat the numbers as an illustration, not as biomechanics. The bone is solid cortical bone all through: the canal and the softer bone inside the ends are filled in, so this femur is stiffer than a real one. Change E and the load in groups 2 and 4 to try your own.
The geometry โ
The Standardised Femur comes as IGES surfaces that do not close into a solid: its faces stand up to a millimetre apart, and CAD will not sew them. Tools/Examples/FemurMesh.py, in the Alpaca4d repository, rebuilds a closed surface from the outer faces with a signed distance and marching cubes. It then fills that surface with tetrahedra with gmsh.
The Standardised Femur by Marco Viceconti, University of Sheffield, licensed under CC BY 4.0; see Viceconti et al., Journal of Biomechanics 29 (1996), 1241. Here its outer surface was rebuilt as a closed solid and meshed with tetrahedra.
The Rebellious Slave โ

GHrebellious-slave.ghGrasshopper file ยท download
Michelangelo's Rebellious Slave, 2.13 m of marble on its plinth, in 28 119 Ten Node Tetrahedra: how its own weight comes down through it, and the ways it sways. Michelangelo carved it about 1513 for the tomb of Pope Julius II; it is in the Louvre. The example runs a static analysis under its own weight and a Natural Vibration analysis on the same solid.

Its first mode, 49.8 Hz: forward and back, seen from its left.
The model โ
| Group | What it does |
|---|---|
| 1 - The Rebellious Slave in tetrahedra | The tetrahedra as a mesher writes them: Nodes, the 8 406 corner points, and Tetrahedra, four node numbers per tetrahedron, one branch each. List Item and Construct Mesh make each into a four vertex mesh. See Tetrahedra from a mesher. |
| 2 - Marble, and Ten Node Tetrahedra | An nD Elastic Isotropic material: Carrara marble, E 50 GPa, ฮฝ 0.25, 2 700 kg/mยณ. |
| 3 - Held at every node under the plinth | Every element's ten nodes from its Points output; those below 1 mm, once each, held in X, Y and Z by a Support. |
| 4 - Its own weight | Gravity Load in a Load Pattern. |
| 5 - Assemble, solve, and the vertical stress | Assemble, with Tolerance 0.1 mm, and Run Analysis; Model View draws ฯ33, the vertical stress, in iso-surfaces over -0.4 to 0 MPa, with the edges of the tetrahedra on the statue's surface. |
| 6 - Its first six modes | Natural Vibration with Vibration Modes set to 6, and a Mode slider into the Step of a second Model View, which draws the mode deformed. Frequencies lists them, in Hz. Show its preview, and hide the stress's, to see it. |
Warning
Assemble's Tolerance is 0.1 mm here. Nodes closer than Tolerance are welded into one. The 1 cm default is half an element on this mesh, about 2.5 cm in the legs: it would weld the node in the middle of an edge to its corners, and OpenSees would warn of a non-positive Jacobian.
Its weight โ
875 kg of marble, 0.32 mยณ. Above the hips its own weight hardly squeezes it. Below, it comes down through both legs and the rough stone the figure is carved against, into the plinth: a compression of 0.1 to 0.3 MPa in the legs, and 0.35 to 0.4 MPa at the ankles, where they are thinnest. Even there it is a few hundredths of what marble takes in compression, about 100 MPa.
The modes โ
| Mode | Step | Frequency | Shape |
|---|---|---|---|
| 1 | 0 | 49.8 Hz | sways forward and back, over the plinth |
| 2 | 1 | 59.3 Hz | sways side to side |
A statue this stiff swings fifty times a second: far above the 1 to 10 Hz an earthquake's ground motion is strongest in, so it moves with its plinth rather than amplifying the shaking.

Its second mode, 59.3 Hz: side to side, seen from in front.
The geometry โ
Tools/Examples/RebelliousSlaveMesh.py, in the Alpaca4d repository, downloads the scan, turns it to face -Y, remeshes its surface to about 3 cm, finer below the knees, keeps the plinth's underside flat, and fills it with tetrahedra with gmsh. Nothing is thickened or closed: the fingers, the band round the chest and the hair are meshed as scanned.
Michelangelo, Rebellious Slave, about 1513, Musรฉe du Louvre. 3D scan of the plaster cast KAS86, SMK - Statens Museum for Kunst, in the public domain.
