(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-5M6SH59');
28 minutes read
30 August 2019

What is Meant by Degrees of Freedom in FEA?

28 minutes read

What I really like about Finite Element Analysis (FEA) is, that it’s full of small things that make you say “ah, so this is what it does!”. Degrees of Freedom is just like that. It’s critical to understand the very basics, but there are a few fun nuances here and there as well. Let’s take a look at what Degrees of Freedom (DoF) are!

Degree of Freedom (DoF) is a “possibility” to move in a defined direction. There are 6 DoF in a 3D space: you can move or rotate along axis x, y or z. Together, those components describe a motion in 3D. DoF in FEA also do other things: they control supports, information about stresses and more!

Before we go into the more abstract things (like the 7th DoF in beam models) let’s start with the basics. This way we will be on the same page when more complex topics will appear!

Is a Degree really Free?

You may have noticed, that I used a weird definition for a Degree of Freedom. I called it a “possibility” to move in a defined direction. And I think that this is a good starting point for our discussion about Degrees of Freedom.

When it is “possible” to move?

Imagine you are walking down the corridol. Since you are moving along it’s length it’s rather clear that you have the “possibility” to move along that coridol. That would be a Degree of Freedom by the definition I just wrote.

But imagine that the corridol ends with a wooden wall… You can’t move any more – but is the movement “possible”?

And believe it or not, the answer is: yes it is! You could for instance destroy the wall, and more on.

This bring us to a very disturbing question… if that is the case, when the movement is not “possible”?

Degrees of Freedom are not related to the fact that something can or cannot more in a given direction, but that the movement is “possible” at all. This is tightly correlated with how many dimensions the space of your model has! As I mentioned a 3D space (space that has 3 dimensions) has 6 movement directions possible. But for the start, let’s think about something simpler.

Traveling along the string – a 1D space

I could start with 0D space, but this is rather depressing (and has no practical utility).

Instead, let’s start with a classical 1D space. It is here, mostly as it will make things easier to understand. There aren’t a lot of practical uses for 1D FEA… in fact, it is almost only used when you want to do FEA by hand. Since you are dealing with only 1 dimension, the matrixes are small, so there is less work for everybody. This is also, why it is a good place to start.

Imagine you have a piece of a string:

Space with 1 dimension, is precisely like the string. You have points “on” the string, and they can only move “along” the string. So there is only one “direction” of movement possible. This direction is “along the string”. Note, that it doesn’t matter if the movement is “forward” (from A to B) or “backward” (from B to A). This is still one “direction”, but we will consider movement “positive” or “negative” in such cases. This is why I marked an axis X, that defines which direction is the “positive” one.

A string is a 1 dimension space because the point cannot “jump” vertically on the picture above. That would mean movement “outside” of the string, and this wouldn’t be a 1 dimension space in such a case! The same is true for the “inward the screen” direction in this case.

This means that in order to describe a movement of a point, you only need one number. That is, how far along the string your point moved. This value can be positive, or negative as I just described.

End of math, let’s get back to FEA!

In a 1D space, you can only have forces acting along the string. All others would require an additional dimension.

This means for instance, that there cannot be bending etc. Technically even buckling is impossible in compression (there is nowhere to buckle to – you can only shorten or elongate!). This means that the only thing we have to consider is tension or compression.

To model our 1D string in FEA, you will need a series of 1D Finite Elements:

Our model already has all the things that a proper model needs. I assumed that the string is attached to the wall in point A and that there is a pulling force at the other end (E). Note, that while point A cannot move (it’s supported) movement of this point along the axis X is still “possible”. By this, I simply mean that in a 1D space, movement along the axis X is possible.

I won’t bother to do the FEA by hand here (if you are in such sort of thing, read this instead). Instead, let’s assume that each element elongated 1mm. This means that point B moves 1mm to the right. Point C moves 2mm, point D moves 3mm, and point E traveled 4mm. Note that the only deformation we have is “along” our 1 dimension (in this case axis X).

As you know each finite element has nodes (I marked them with letters A-E). This means that the first element from the left (with nodes A and B), “shares” node B with the second element (which has nodes B and C). This is how they are connected in our FEA model. If you need a refresher on how this works, read this!

Think about what sort of information this node B has to “share” between both elements to “connect them”. Not much really… it only needs to tell both elements, how much it has traveled along axis X. This way both elements know if they are elongated or shortened (if they take into account the info from their second node as well), and proper strain (and then stress) can be calculated.

The fact that node B needs to share only 1 information between elements (deformation along axis X) means, that this is a 1DoF system, and our elements are 1DoF elements.

Living on a plate – a 2D space

All right, now we are entering into an actually useful realm. In fact, when I was starting my FEA career, 2D models were still pretty popular, and not all companies calculated their structures in 3D. To this day there are programs that can operate only in a 2D space!

You already know quite a lot about directions, but of course, there is more!

Now, we are talking about a piece of paper:

You may notice, that this is a very similar problem to the 1D string we have just discussed. We still have support in “X” direction (DoF “along X” is blocked). We are applying the same tension on the right, and technically this *should* work as our previous case… well it won’t!

You see in a 2D space there are more “movement possibilities” that in a 1D space we described before… and we are making nothing about those! The first one is quite obvious, movement along Y:

You see, if we would apply even the smallest load in the vertical direction (along Y) our model will simply “slide to eternity”. There is no support in the vertical direction, but the movement is possible! In 1D space, we didn’t have to worry about it – the 1D space made that movement impossible!

All right then, let’s modify our support in point A to block vertical movement as well:

Note, that our model does not “slide to eternity” anymore… but it can “spin for eternity” around point A instead! While point A cannot “move” (authors often call such movement “translation”), nothing blocks its rotation! Applying vertical load in node C will cause infinite rotation of the model.

This is how we discover another “movement” possibility – that is rotation. It’s impossible in 1D space, but in 2D one rotation direction is possible. In order to block it, we should make a *rigid* support in point A, or support another node in the vertical direction. Let’s go with the rigid option since we want to “discover” all DoF in this article!

The thing about *rigid* supports

“Rigid support” is a funny term. It can mean a LOT depending on the context. In essence rigid supports blocks rotation, and pinned supports do not block rotation (like in the example above).

However, it’s not always obvious which rotations should be blocked for the support to be rigid. This is not a problem in 2D space (there is only one rotation aviable), but it will be a bit more fun in a 3D space. We will get to that.

Up to this point, our beloved solver wouldn’t calculate our 2D model. Even with only horizontal force, the model is “unstable”. Even if there are no loads acting in the unsupported direction, the movement there is “possible” and “not blocked”. This means that the solver sees this problem as “unsolvable” and will throw errors at you (you know, the infamous non-convergence ones).

Now we are ready to actually solve our model:

First of all, let’s say this is a stick, not a string. Strings aren’t great in bending situations, and would behave in a rather complicated manner I don’t want to get into that here. Sticks are much more “normal” when it comes to that!

Note, that the “real” deformation is a really smoothly curved line. But FEA isn’t as smart, especially since I used only 2 Finite Elements to model a cantilever (not very smart, but of course I did it on purpose). Since our elements have only 2 nodes each (beginning and the end), they can only be a straight line. This makes the shape a bit awkward in FEA, as you can see above. Of course, adding more elements would help, as well as using higher-order elements. You can learn more about elements here!

Since we are discussing Degrees of Freedom the most important thing from this example is: how much information do nodes have to share?

The first part of the answer is pretty obvious. Movements along axis X and axis Y are definitely important. This is how you can say “how far” the node traveled in a 2D space. But we already know that this is not enough! We had to support our model with *rigid* support blocking rotation. The same rotation node B shared between elements on the drawing above. Note, that they are not in line, and there is a certain “angle” between them, as they try to fit as best as they can to actual deformation. This is a 3rd DoF in a 2D space… rotation “in-plane”.

Degrees of Freedom in a 2D space:

As I just clarified there are 3 DoF in a 2D space:

  • Movement along axis X
  • Movement along axis Y
  • Rotation “in plane” – that would be rotation around axis Z

What Degrees of Freedom “gives” you?

I could easily end here, but as I told you at the beginning there is more to the “DoF” than just the possibility of movement. In fact, there is plenty more! Let’s take a look at some important things!

Support your DoF!

The first important thing is, that you need to support each DoF of your model.

In a 1D space, this was easy. We could only move along the string, so supporting one point to block the possible movement and keeping that point “in place” was sufficient. In a 1D space you need to block only 1 DoF to make your model work!

In a 2D space, things became a bit more messy. Each node has 3 DoF carying both translations (along X and Y) and an in-plane rotation. This means, that we have to support 3 DoF in our model to make it stable. And we did that!

Of course, the same will apply to a 3D space… but we will get there.

What is important here is, that you how many DoF you need to support for your single model to “work”.

Note, that above I used the word “single model”. Sometimes in analysis, you may have several “pieces” of your model connected somehow, but not completely. In those cases, supports will require a different amount of DoF blocked, depending on how many pieces you have, and how they are connected with each other. But for a single model, the above is true.

The next thing is the internal forces. Those also depend on the amount of DoF each node in your system has! Since in 2D a single model has 3 DoF, you have to support 3 DoF to make it work!

DoF and internal forces!

In a 1D space nodes had only 1 DoF. This was “move along the string” information. Such situation means, that in our model we can only have tension or compression in elements… we couldn’t transfer any other information between elements! This is only one internal force, called “normal force” (since it acts in a direction “normal” to the cross section).

The equation for beams is simple 1 DoF = 1 Internal Force

Since we already know that a 2D space have 3 DoF, let’s wonder what internal forces are possible in beams in 2D space.

The first one is pretty obvious: the “normal force” we just described! The second is shear force, and the third is the in-plane bending. So again, our beam elements have 3 DoF each node… leading to 3 different internal forces. Beams are cute this way!

Elements in space!

So far we have used beams (line elements) that are usually referred to as 1D elements. Of course, in a 2D space, we can use 2D elements as well!

Of course, in a 2D space, those still have 3 DoF in each node. The same ones as the beam elements we have used so far. Each node of our element can move along X, along Y, and rotate in-plane. The same stuff applies.

The only difference is, that 2D elements have different “internal forces” as beams do. I suspect, that you are more familiar with stresses (as they are used in the design) so let’s go with stresses instead (there is a 1:1 correlation in 2D plates, so it’s basically the same thing). I don’t want to derail the subject to much, so let’s just say, that there are 3 unique stress components in a 2D space:

Your element can be in tension or compression along axis x, the same along axis y and in shear. Note, that this time I used small letters for axis description. This is because for each element “local” coordinate system is used, instead of the global one. This is a completely different topic about how FEA works.

Local and global coordinate systems

In short all finite elements (beams, plates and solids) have their own coordinate system each. Those do not have to be aligned with your model coordinate system (usually called “global”) and all stresses and internal forces relate to the local coordinate system of the element (I will call it “local” but “elements” sounds nice too).

In the examples here I try to keep the local and global coordinate systems of elements aligned, not to add more confusion to the topic. But the local/global coordinate system is a cool thing on it’s own for sure!

With those 3 components, you can describe everything that is happening with your 2D element. So 3 DoF leads to 3 unique stress components as well! This may seem that there is always the same amount of stress/internal forces components as there is DoF in each node… but things will complicate further down the road.

Things start to disappear in 2D elements!

This will come into play later, but let’s make a small observation already. Bending has disappeared! I mean, there is no bending stress (if that is even a thing!). While we could say that the normal stress along X is the “normal force” in a beam, and shear stress relates to shear force in a beam… additional normal stress in Y appeared. There is obviously no value correlated with this in beams, as they are 1D elements, so they don’t consider Y normal direction by default. But what happened to bending moment we had in beams?

It obviously didn’t disappear! Simply put, the bending moment is carried as a difference between normal stresses in various nodes! Imagine a bending like this:

Note, that if we would model this as a beam (on the left) model will only “see” the axis. In such a case bending moment will be assigned to the cross-section. This is the DoF that shares information about rotation between elements.

But in 2D we don’t need this. I’m sure you know how the stress distribution looks like in bending. If you have several 2D elements along with the height of this plate, you don’t need to carry the information about rotation to catch bending. All you need is the information about how high is the normal stress on the top, in the middle, and at the bottom parts of your plate. This will nicely describe bending for you!

The rotation in the nodes “in-plane” of the 2D elements is useful when you want to connect a beam to the plate and in similar cases. Some FEA packages may use 2D elements that do not have “in-plane rotations” at nodes as well, but I think this is not a popular choice in 2D.

Living in a box – a 3D space

Finally, we got to the place where you most likely operate in FEA. To be honest, we covered most of the things already, so this will be rather quick. This is why I like to start with spaces with fewer dimensions. You can discuss things with simpler examples first. Here, we will more or less sum up what you’ve already learned!

Firstly, the beam models, so 1D elements in a 3D space. I’m not much of an artist when it comes to drawings, so you will have to use some imagination here. No worries, only a little 😛

Remember when we just moved from 1D space to 2D space a while back? The first thing I’ve described was, that we needed additional support in Y because otherwise, our model will “slide to eternity”. Of course, the same happens in 3D… but twice! Once along axis Y (up and down on the drawing above) and once again axis Z (into the drawing and out).

In a 3D space, we have 3 translations. Movement is possible along axis X, Y and Z. Of course, our model doesn’t have to move orthogonally. It can go in “any” direction, even if this is not along any of those axes. However, each translation can be shown as a sum of movement along those 3 axes. This is why we use them!

Nice! We already have 3 DoF here! But of course, there is more.

After we figured out how to block translations in 2D, there was another problem. Having one node that didn’t move, but our model could still rotate around that point. I called that “in-plane rotation”… since our 2D model had only one plane! Now the rotation is possible in 3 directions. 2 of them are easy to see!

Firstly, our model can rotate around axis Z – just as in a 2D task. This was the first rotation we had to block, to make our cantilever stable in 2D. Secondly, the same can happen around axis Y. It’s the same situation, but rotation happens inward into the picture as if point C was pushed into your screen.

All right, we can rotate around axis Y and Z already. That was simple. Now the last part: rotation around X. It’s a bit more difficult to see since this means that our beam rotates around its own axis! This is called torsion, and sometimes can be a pain.

This gives us a total of 6 DoF: 3 translations and 3 rotations around axis X, Y, and Z. Nice! We’ve got there!

The second thing about *rigid* supports

I already started this topic when we first “discovered” rotations. I told you then, that the *rigid* support has the rotations blocked, while pinned support has rotations free. Since in 2D there was only one rotation possible, this was simple.

Now, in 3D you shuld ask: which rotations?!?

That is a very good one. Clasically, a rigid connection should have all 3 rotations blocked.

However, people usually discuss only 2 rotations (since they are of bigger interest). Someone can say something like “rigid in Z direction”. This means, that the rotation around axis Z is blocked, while around axis Y is free (traditionally torsion will be blocked in supports. This is around axis X in our example, but of course can differ in your model).

This may seem complicated, I know. It is always best to discuss which directions should be supported (“blocked”) and which should be free. Mistakes in this area can gave pretty bad consequences, so it’s better to be sure!

It seems we have the beams figured out! Of course, as you already know, in beams each DoF is “associated” with internal force. It’s the same as last time. Along the beam, there is a “normal force”. In 2D we had a shear force, now there are two (since shearing can happen in 2 perpendicular directions). in 2D there was one bending moment, now we have two (the same thing, bending can happen in two perpendicular planes). And finally the Torsional moment, the one responsible for rotating our beam around its own axis.

I think that at this point it’s obvious to you, that nodes have to communicate 6 values between elements to describe what is going on. This means that we have 6 DoF in each node!

2D elements in 3D space

Of course, you will use other elements than beams in 3D space as well. Planar elements are next on the list!

I think you already know where this is going right? Of course, there are 3 translations and 3 rotations in each node. I guess I don’t have to draw the translations for you – they are simply along axis X, Y, and Z as in all the previous cases. The rotations are also quite simple, but I figured a nice way to draw them, so why not:

Above you see 4 finite elements A-D. Only A and D are on the same plane. Element B rotated around axis Y in relation to element A. Element C rotated around axis X in relation to element A. And Element D is in the same plane, but it rotated in this plane (this is the same in-plane rotation we discussed in 2D space). I’ve marked the angles of rotation to make it a bit easier to see what I mean.

I hope, that at this point it is obvious that each node has 6 DoF (3 translations and 3 rotations)

The less obvious stuff…

But you see, things start to get more complicated when it comes to stresses. Even as we have 6DoF in each node… each element (the QUAD4 one) has 4 nodes. This means, that it doesn’t have clear “in” and “out” nodes as the beam element does. You know, in a beam element internal forces come “in” and one end, and goes “out” on the other end. It cannot “go somewhere else”. Since we have 6 DoF at the “in” and 6 DoF and the “out”… there must be 6 internal forces. Each for each element.

In planes, stress can come “in” at one node, and go “out” on 3 nodes, or maybe one specific one, etc. Stress has “choices” where to go to. This means that even since each node has 6 DoF, inside a finite element “more” is actually happening.

This is why there are more stress components in 2D elements in 3D space than there is DoF per node. Let’s take a look at the possible stresses in a single plate element in 3D.

  • You already know about the first 3 components. We have discussed those in a 2D space. The only interesting thing here is, that their distribution through “thickness” of the element is constant. It must be… in 2D our element had no “thickness”!
  • The next part is pretty easy to imagine. It’s the bending. You already saw that elements can bend “out of plane”. This means that there will be some normal stress from bending in them. This stress can easily be added to the stress from the normal force (above), but here distribution varies through-thickness of the element (this is why I draw a “fake” thickness to illustrate the distribution). There are two components of this bending – bending around axis X and around axis Y of the element local coordinate system:
  • The next two are shear components. But not “in-plane” like the first one we already discussed. Those are “out-of-plane” shear vectors, and there are two of them, as you can see below:
  • And finally the torsion. I think it is the hardest one to get, so let’s dive a bit deeper. Think about the normal stress in the Y direction. This was the first step in this list. It has a uniform distribution through-thickness of the element. What happens if the distribution stops being uniform? Bending appears (I described it with subscript “MY”). The same is true for the normal stress in X direction – the nonuniform distribution is causing bending I described with subscript “MX” above. And what happens if the last “2D stress” (shear) gets a nonuniform distribution through thickness? This time a torsional moment appear. And this is the last component. Normal stress can be different on “sides X and Y”, but the in-plane shear stress is equal. This is also true for torsional stress, that is equal on both edges.

And those are all of the components. Quite a few isn’t it? Definitely more than 6!

I listed them here, so you can see with your own eyes, that the number of internal forces/stresses in 2D and 3D elements, does not have to be equal to the amount of DoF each node has. It just happens to be the case for beams.

3D elements in a 3D space!

Well… if you think that this is a pinnacle of what “FEA people” can accomplish, you will be disappointed. First of all, you already know that in a 3D space, 6 movements are possible. That is 3 translations and 3 rotations. You also know, that apart from the beams, there aren’t as many internal forces/stress types as DOF in each node. There can be plenty more.

FEA solvers “communicate” with deformations. By this, I mean that nodes “share” deformations between elements, not stresses or forces. Each element will then do whatever it sees fit with the deformation input it got from all the nodes and will calculate forces/stresses on its own. This even leads to funny situations at times… but this is not a topic for this post!

So following the logic I have described so far, it would be easy to assume that each node in a 3D element in a 3D space has 6 DoF. But this is not true most of the time! Remember how I explained that plates don’t need “rotation” in their nodes to carry bending in-plane in a 2D problem. You know, this below:

It’s exactly like that in solid elements. You don’t need the rotations… simply because you can carry bending as a difference in normal stress in any given direction. Just as you can see above. This means, that in many FEA codes 3D elements are implemented only with translations in nodes! This means that each node has only 3 DoF!

This leads to a funny situation, where you can’t make a *rigid* connection between the beam and a solid in a 3D space… since solid won’t “take” the rotations. This means, that the solver will always treat this as pinned connection instead! The same goes for connecting 2D elements to 3D elements. The line of connection will always be a hinge… since solid won’t take the bending moment, the plate element wants to transfer. It’s just as if you defined a pinned connection along the connecting edge.

I won’t go into the stress tensor of solid elements. This is a pretty well-known thing, and since you already know there can be more stress components than DoF in each node, it’s also not relevant to the topic. If you want to learn about the stress component, I would start in Wikipedia… but there is a lot of math there and surprisingly few drawings!

7th DoF!

Ok, I admit, I left the most bizarre thing at the end! If you are into steel structures, especially when you use beam models, you most likely heard that the ruckus was caused by the “7th Degree of Freedom” in the software industry.

Since we are talking about DoF here, I believe it’s only fair to mention it!

We already established that there are 6 ways in which you can move in a 3D space… so what on earth does the 7th DoF?

In short, warping really likes 7th DoF. This is a thing that happens in cross-sections under torsion. The crucial thing is, that “on average” the cross-section stays in place (doesn’t move at all). This is why it’s somewhat independent of the 3 rotations and 3 translations we talked about before. You can actually see below that 2 corners go outward, and 2 corners go inward if you apply torsion to a rectangle. This is warping in its glory:

As I already mentioned, all the normal stresses that this produces are self-contained (its sum is zero). So nobody really cared all that much!

But this is a pretty nifty trick if you want to do Linear Buckling Analysis LBA for beam models. With only 6 DoF the only thing that can produce buckling is compression. If you would take a simply supported beam in bending LBA would tell you “there is no compression, so no buckling”. This means that with 6 DoF, LBA in beam models can’t predict Lateral Torsional Buckling (if you are not familiar with the term, you should really read this!). With the 7th DoF implemented, the nodes can share the information about warping between elements… and this allows LBA to “see” lateral-torsional buckling of bent beams. And that is it!

Pretty useful stuff, but if you don’t have 7th DoF, you can always model the beam you are interested in with plates… then lateral-torsional buckling works like a charm with LBA. Additionally, you can check all the local buckling failures and other interesting things!


Oh, wow… now that was a long one wasn’t it?

I will try to briefly recap all the things I have mentioned here:

  • Degree of Freedom (DoF) is a possibility to move in a given direction. But not understood as “movement is free” or “movement is blocked”, but rather is it possible to move in this direction, taking into account how many dimensions the space of the task has.
  • Nodes connecting finite elements share information about all possible movements between the elements. Each node has as many DoF as many movements are possible. This means:
    • 1 is a 1D space (1 translation)
    • 3 in a 2D space (2 translation and 1 rotation)
    • 6 in a 3D space (3 translations and 3 rotations)
  • Sometimes, depending on element type it’s unnecessary to have all DoF in the nodes. The best example comes from 3D elements, that usually have only 3DoF (3 translations) in each node.
  • On another hand, in some rare cases, it’s actually cool to have more than 6DoF in a 3D space. That is the case with 7th DoF in beam models, that allows verifying lateral-torsional buckling for beams in bending.
  • In beams, you have as many internal forces as DoF in each node. This means:
    • 1 internal force (normal force) in 1D space
    • 3 internal forces (normal and shear force and in-plane bending moment) in 2D space
    • 6 internal forces (normal, 2x shear, 2x bending and torsion) in a 3D space (+eventual warping if you have 7th DoF implemented)
  • The above is not true for plates and solid elements. They have more nodes per element, and this allows them to “capture” more complex behaviors with less DoF per node. This means that they can have more stress components than DoF in each node.

And that is it! I really hope that you have enjoyed the post. Definitely let me know in the comments below, and don’t forget to share this article with your friends!

Author: Łukasz Skotny Ph.D.

I have over 10 years of practical FEA experience (I'm running my own Engineering Consultancy), and I've been an academic teacher for a decade. Here, I gladly share my engineering knowledge through courses, and on the blog!

Read more

10 Lessons I’ve Learned in 10 Years!

Get Essential FEA Course for Free!

Join the discussion

Comments (20)

Filip - 2020-05-20 21:04:23

Hey Lukasz!

Firstly let me also thank you for your post here. Nice done!

I am just wondering about one thing. From time to time I can find someone using DOFs for a description of how big their FEM is. Let's say for example "my model got 500000 DOFs". Think that this is a different way how to say "my model consists of #A shell elements of this type, #B shell element of this type, #C solid element of that type, etc." since every element got its number of nodes and every node its DOFs. Am I right? Is there any other advantage to describe FEM by the number of DOFs? Just came up on my mind that this is more relevant info for guessing how time-consuming analysis it needs rather than just say the number of nodes. Am I right again?

Thanks for your answer.

Łukasz Skotny Ph.D. - 2020-05-24 09:53:34

Hey Filip

DoF is the most accurate measure - this is how many equations you will have. Sure, each element has a certain amount of nodes, and those have DoF... but elements also share nodes when they touch... so it's a bit "messy". Also, not every soft "produces" the DoF count easily, while all show you how many elements/nodes you have.

So while DoF is the most accurate, Node or Element count in your model is a nice and "easy to get" substitute. While it may not be as accurate, you should be fine. After all, you use it mostly to do mesh convergence studies etc. Not to compare with other folks. This is important as if you use different elements element count may not be the best measure, the same goes for node count too but to a lesser degree (3D mesh usually has 3 DoF per more, 2D mesh usually has 6 DoF per node etc.).

I hope this helps :)

All the best, and thank you for writing and simply being here :)

Foyjullah Sumon - 2020-05-03 06:09:25

Your explanations are very Clear! You are great Sir !!!

Łukasz Skotny Ph.D. - 2020-05-04 14:10:19

Thank you Foyjullah!

I'm really glad that you like my work!

All the best!

tom - 2020-01-06 12:59:21


Great article but i have a remark. You say that in 3D space we have 6 DOF but with 3D element we have generally 3DOF. I am agree with that but can we say also that in 2D space we have 3DOF but 2D element have 5DOF (Tx,Ty,Tz,Rx et Ry) ,rotation around the normal axis is not significant.

Łukasz Skotny Ph.D. - 2020-01-06 13:57:25

Hey Tom...

I just realized that it seems that my recent update of the blog deleted all the comments - I need to work on that.

I already discussed this it seems. Anyway, a 3D space have 6 DoF that allow for rigid body movement (in essence this is how you can "move" in a 3D space). But to "model" that movement you don't necessarily have to have 6DoF each node... some are simply not needed (as I explain in the post) and then you have less DoF than space for this still to work :)

This is also a semantic issue. I think that someone already pointed out (bugger there are no comments I really need to check that!) that DoF should refer to nodes in FEA system only, while the "possibility of movement" in space shouldn't be referenced to as DoF... but this is how I would translate a Polish "stopień swobody" into English, and we use this term in both places...

Stanislaw - 2019-10-22 19:48:14

I've read your article and I see that you mix few ideas - rigid motions, stress components, DoFs in mechanics and DoFs in FEM.
DoFs in FEM are usually nodal parameters which are necessary to describe whole deformation of FE. If deformation is known, then strain and stresses could be calculated and finally nodal forces. In classical FEM translations and rotations are DoFs. In nonclassical FEM stress components could also be DoFs.
Every FEM code documentation consist of list of FE and their DoFs. For example, 2D truss has 2 DoFs (2 translations), 2D beam has 3 DoFs (2 trans. and 1 rot.) and so on. This information is crucial when 2 types of elements are joined in single node, for example when only one element "has rotations" as DoF.

Łukasz Skotny Ph.D. - 2019-10-23 06:05:56

Hey Stanisław!

Thanks for posting! I must confess I've read your comment, and I agree... but I don't know where is the place where I "mixed" the things you mentioned. Would you care to write what you do not agree with so we could discuss this further? I'm on a mission of helping others here, and I definitely don't want to misinform anyone! So if you have any critical points just let me know, and I will gladly discuss them! As of now, I'm not sure what you are not agreeing with...

All the best

Stanislaw - 2019-10-23 10:14:08

My first confusion is when you move from 1D to 2D and you change 1D truss/bar element into 2D beam element with bending without any explanantion. You say that you discovered rotation here. But this rotation should be understood as rigid motion not a DoF in FEM and it do not explain why beam elements have this rotational DoF.
Later in section "Elements in space" you describe state of stress in 2D plane stress, with 3 independent components. But you write "With those 3 components, you can describe everything that is happening with your 2D element. So 3 DoF leads to 3 unique stress components as well!" This in not true, since plane stress FE has only 2 transational DoFs in node and this is enough to describe everything. When 2 translations are known, 3 strain or stress components could be calculated.
This is also misleading: "The rotation in the nodes “in-plane” of the 2D elements is useful when you want to connect a beam to the plate and in similar cases. You can also cause shear stress in the element by applying rotation to 2D element nodes… but this is not too important here.". To have inplane rotations in 2D elements you have to use 6DoFs shell elements (if they exist in the code that you use) or introduce Cosserat (micropolar) media what is quite complicated. And shear stress is caused not by nodal rotation but by translations only.
Later again you justify 6 DoFs in shells by analysing their possible rigid motions in space. But 3D solid could also can translate and rotate, but they only have 3 transational DoFs. You also forget that shells could also have 5 DoFs (3 trans. and 2 rot.) and they work well.
Putting it all together - you justifiy number of DoFs by number of rigid motions, what is misleading. Proper way to understand why each type of FE have different number of DoFs is by studying a little bit of theory. You also skip form DoFs to stress components to many times, what makes whole text hard to understand.
I'm happy to see work that you do in this blog but sometimes you dive to deep into theoretical background without taking a deep breath.

Łukasz Skotny Ph.D. - 2019-10-23 18:22:40

Hey Stanisław!

First of all, I want to really thank you for your comment. It's apparent that you've made a lot of effort to think this through and reply back. I think we are both aiming at making things clear for others, and it's a common cause. I'm really thankful for your involvement.

I should also start with the thing that many of my readers know, and that is I'm not a really "theoretical guy", and also, I don't like the "scientific semantics". Reading scientific articles for 10 years got me to really dislike the terminology used there, so indeed even with my best efforts, I may be incoherent at times :)

With that all being said, let me take a swing at your comments. I will number my responses so it may be easier for you (or others) to comment on particular points.

1. With the 1D / 2D element. I admit that I omitted that on purpose at the beginning. I never liked when someone starts to explain something by "invoking" various theory things (like element formulation). So instead, I showed what the movements are possible (sure, the first rotation is a Rigid Body Motion, but I wanted to show what rotation is "in general" which may not be obvious for the beginners, who by default will be interested in the article). The 2D "formulation" happens later, where I discuss what sort of information gets "shared" between nodes. But I see why you felt the lack of this knowing all that "upfront". I guess this is not how "classical" textbooks approach such subjects.

2. The 3 Dof vs 3 Stress components. Yea, I get what you mean with plane stress. But I would also point out that this is a rather borderline example. In most cases, people will use 2D models for beam structures, but indeed in 2D plate models that are loaded "in-plane" (this has a specific name in polish "tarcza" no idea how to call that in English), this could happen. Still, it would be great to have a rotational DoF in the 2D elements implemented, simply so you can attach a cantilever to such a 2D wall right? You know like this:

Do you know any commercial FEA code that really runs a 2DOF 2D elements? I mean I understand that this is "technically possible" but I haven't seen such code so far. Still, you are right I was not precise with the description there, but to that, I get the feeling that if I would have to make all "possible" reservations to each statement I make it would be pretty hard for me to move anywhere. This is precisely what I didn't like in the "science world" where every title had 20 words... just to be "precise enough". I think this is why people don't fancy reading those articles as well, but this was sloppy on my part - sure!

3. With the shear stress, it's possible that you simply got me. I was thinking that you could cause a "shear" deformation by applying rotations to the nodes, but since you challenged that I won't defend here, simply since I'm not 100% certain. To be fair it never came up with my designs, so I didn't have to analyze it in depth... but I may have gone too far there so I will just remove that part. Thank you for pointing this out I'm the last person to want to mislead anyone!

4. I'm curious about the in-plane rotations in 6DoF shells. Again, I'm not a theoretical mega-mind, but the pic above (from RFEM BTW) suggests that you can have a 3DoF shell element formulation. Perhaps this is not the case... Any light on this matter would be great from you as it is clear that you know your way around this :)

5. I understand what you mean with Rigid Body motions and DoF, but I think I won't agree that this is misleading. I needed to show possibilities of motion, simply because I assume that a beginner may never think about it this way. And yes, there are possibilities to have "less DoF" in a 3D space, and I even describe it in detail (or so I hope) later on in the text. And while you are completely right that my article "misses things" here and there, I also think that if I would include all of those it would be much more intimidating for the beginners. And my goal was to provide them with basics, so they could understand this, at least more or less.

I'm really glad that you like my work, and again, I'm super thankful for your comment.

It's clear that you know your stuff when it comes to FEA - do you run a blog or maybe you have a book? I would love to read some of your work (articles perhaps?) as I get a feeling I might be able to learn a thing or two from you!

All the best, and once more thank you for writing this all. It really means a lot that you cared enough to write this!

Yaniv Ben-David - 2019-10-20 20:55:45

Great article Lukasz!

Can you please elaborate a little about the case of connecting 2D element to a 3D one?
Is the hinge issue handled automatically by commercial tools like ANSYS or NASTRAN, or should the user treat those connections manually?

Łukasz Skotny Ph.D. - 2019-10-21 06:51:46

Hey Yaniv!

Thank you for the kind words! If the solid has 3DoF per node (it does in Nastran, never used Ansys so no clue there, but I would assume it's the same) then when you connect a 2D element to a 3D element nodes... each connection is a hinge "bu default". You don't have to do a thing :)

All the best

Yaniv Ben-David - 2019-10-21 08:51:36

Thanks for the quick answer Lukasz

If I want the connection between these elements to be rigid - I should somehow demand from 3 DOF nodes (of the solid) to not allow a rotation. How is that possible?

Łukasz Skotny Ph.D. - 2019-10-22 06:43:45

This is not possible. If you have a 3DoF formulation of a 3D element, there is no way to "demand" that those nodes will carry rotation. This is simply impossible to do. I mean you could write your own 3D elements with 6DoF, but the amount of work that would involve is just insane!

Luv kumar - 2019-09-25 03:38:13

Does Tria element has 2Dof per node???

Łukasz Skotny Ph.D. - 2019-09-25 16:07:09

No, it shouldn't have. That would be a weird formulation I think.

Stephen Brinkman - 2019-09-08 19:58:49

I really like your "possibility of movement" description. For structurea this ties up nicely with differential settlement or other node displacement analyses.

Łukasz Skotny Ph.D. - 2019-09-09 07:09:14

Thank you Stephen! I'm really glad that you like it!

Indeed, infinitely rigid supports are rarely rigid and never infinitely :)

All the best

Alexander Karachun - 2019-09-02 14:11:51

Here is an example of unconventional use of DoF results. Some commercial codes like Nastran and Ansys like to store sound pressure results of acoustic elements in output vector of TX translation. That’s why when you calculate normal modes ow tank filled with water you see some weird stuff instead of deformed shapes of water volume. And that’s why structural and acoustic mesh never share same nodes.

Łukasz Skotny Ph.D. - 2019-09-02 15:42:09

Nice Alexander!

I had no idea that this is how it works (I have never run acoustic analysis). That is cool info for sure :)

Thank you for commenting :)


Sign up to newsletter

and get Free FEA Course!