(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-PM5M9PRG');
13 minutes read
12 December 2022

Rigidity of GAP elements in contact

13 minutes read

There are various reasons why you may want to use GAP elements to simulate contact problems. Some solvers simply do not support “typical” contact in nonlinear analysis (while still supporting GAP elements), but also GAP elements seem to converge better in certain problems.

You can’t define contact with GAP elements without defining their rigidity. Since GAPs represent “contact” it’s not obvious what value to use. This rigidity will depend on the material of the elements in contact… and also on the mesh size! Here, I will show you precisely how to calculate it for your case!

This is a short technical article, so I won’t discuss when and why using GAPs make sense – let’s dive straight into the problem!

How to model contact with GAP elements

I will use an endplate connection to discuss the steps of the procedure using some tangible values. Let’s use a connection that looks like this:

Of course, in FEA, we want to model everything with 2D plates (in the middle of each plate, so in “midsurface”), so our model would look like this:

Normally, you would simply select both plates that will touch each other, and define the contact condition between them. But here, we want to use GAP elements.

This effectively means, that both plates in contact, need to have the same mesh, and from each node on one plate, to each corresponding node on another plate we will define a GAP element that only transfers compression:

This is a very simple idea really. Since each GAP element only transfers compression, if the plates in a given region will really press one against the other – there will be compressions in the GAP elements!

If the plates would like to “come apart”, GAP elements would be in tension, and since they don’t transfer it, they won’t resist this either!

This is why using GAP elements actually works! Realistically, the only drawback here is, that you need to pay attention to meshing, as you need an identical mesh on both parts for this to work!

There is only one problem – the GAP element definition requires a rigidity of the GAP to be provided. So we need it, to make the model work!

How to calculate contact rigidity

Let me start with a devious question! When you use a “real contact” (not with GAPs, but just by defining contact property) – what is the rigidity of that?

Nobody really asks this question, since it’s not required to provide such input in the contact definition. But clearly, we are aiming to provide GAP rigidity that will nicely represent the contact “rigidity”.

Let’s see a closeup of our plates in contact, firstly in reality:

I think it’s very important to understand, that the above is a big simplification. It assumes, that the pressure is applied evenly on both plates “from the outside”.

Usually, the stress is not “perfectly evenly” distributed in the entire surface of contact. In our case, there will be way more stress near flanges and the web, and very little “far away” from those elements.

But let’s assume that we are ok with such simplification to move on!

If we would think about this under the applied load, the plates will deform “a bit”. It’s actually quite easy to calculate how much this “bit” really is!

We want to calculate “linear rigidity”. This means, that the deformation will depend on the contact pressure in a linear way. If this is the case it doesn’t really matter how big the contact pressure we will assume. So just for the sake of simplicity, let’s assume 100MPa.

Now, we can treat our plates, as a “beam” under compression. The length of the “beam” is the sum of plate thicknesses (t1 + t2 in the figure above). We don’t really know what is the cross-section of our beam… but it won’t matter!

Elastic shortening of a beam under load can be calculated as:

It’s actually quite easy to realize, that when you divide the Force by cross-section Area (F/A above) you get the compression stress. And we already have it – we assumed that the contact stress will be 100MPa!

Things start to be simple now: Assuming that we have two 20mm plates in contact (so “length” is L = 2 x 20mm = 40mm = 0.04m) made of steel (E = 210GPa) the shortening would be:

This means, that if you press two 20mm plates against each other with 100MPa of stress, you get 0.019mm of shortening of those (through their thickness).

This in turn means, that the rigidity of such contact is:

Physical interpretation of this rigidity is:

It would take 5.26 *103 MPa of stress to “push” those plates into each other for 1mm.

While 1mm may seem like a lot, using this parameter you may calculate how much those plates would “crush” into one another under other stress values.

The above would be the “real” contact rigidity, under the conditions we described at the begining.

Calculating GAP rigidity

If you would model such a connection with 3D HEX elements, what we just calculated would simply work. Unless you are expecting crazily high contact stresses that would go beyond yield, but let’s not go there!

In reality, such models are very often simplified to 2D geometry with QUAD elements (and for good reason!).

So let’s take a look at what the situation looks like in a connection that uses 2D plate elements, and GAPs. Of course, we will look at this with a rather big close-up:

First of all, in the 2D model, we would represent our plates with QUAD elements in the midsurfaces of the actual plates. And this means that those plates do not touch each other in the model.

There is a distance between those plate midsurfaces, equal to t1/2 + t2/2. This distance is filled with GAP elements. And those GAPs will represent the “contact rigidity”.

This is where the mesh size comes into play! But firstly, let’s take a look at an even bigger close-up:

Note, that we will connect each node on both plates with a single GAP element. Above, I only marked the “middle” one not to obscure the view.

I assumed that we are using QUAD4 elements (with 4 nodes). Each GAP element has an area “associated” with it. I marked this area in blue, and in this case, it will be more or less equal to an area of a single QUAD element.

And this is important since we already know what is the rigidity of our contract! As we calculated before it’s 5.26*103 MPa/mm.

However, GAP needs rigidity in kN/m since it’s a linear element. And since we know the area “associated” with each GAP element, it’s easy to calculate it!

For the sake of the example, let’s say, that we have QUAD4 elements that are 10x10mm. This means that:

And this is the GAP rigidity you should use in our case!

Of course, now, as you understand this all, there is a simpler formula you could use!

Since the rigidity is force divided by shortening caused by this force, we can write:

This is how you can estimate the GAP rigidity, and of course, you can average the element area. If this is what you were searching for then this is it!

But I feel that we have to discuss a few more things!

Contact rigidity in 2D plate models with contact

I think that to start to dissect this a bit more, we should look at how the same problem is solved if our 2D mesh model actually uses contact!

This time, the close-up would look like this:

Two things we should observe here:

  • 2D plates do not deform through thickness! Notice, that the deformation of contact in the “real” case, came from the fact, that the plates were pushed one into the other, and got “thinner” in the process. Such an effect simply can’t happen in 2D elements!
  • There are no elements between plates! Note that there are no “elements” between midsurfaces. We only have the contact that tells the solver, that those 2 midsurfaces may touch, and dictates the rules for this contact.

The above means one thing! If the plates themselves won’t deform, and there are no “elements” between midsurfaces. This means that unless we can define something in the contact itself, it will act as “infinitely rigid”.

To change that, we could for instance set contact compliance. It would allow those 2 plates to be pushed one into the other. This would achieve what we want – a certain “give” in the contact rigidity, that we could control.

However, it has to be said, that contact compliance is usually seen as a tool that is used not to make the contact “more realistic”, but rather to help with convergence.

And this is where we have to wonder… does this all make sense?

When does infinitely rigid contact make sense?

I think this is a very important question we should ask!

When we define a “real contact” in models, we don’t really think how “rigid” it would be. In many cases, we would treat this setup as a tool to help with convergence, not to increase accuracy.

I’m willing to guess that in most solvers compliance is set to zero as “default”, so if we won’t tweak it… contact will act as infinitely rigid by default. And often, this is completely fine!

Why is that?

So far, I’ve shown you the contact modeling in our connection in a huge close-up. Now it’s time to take a step back!

Note, that under the applied load, the endplates themselves will deform.

And the deformations of the model “around” the place where the contact happens are a LOT bigger, than the contact deformation itself.

Sure, the plates will push one into another “a tiny bit”. But this amount is insignificant compared to how much both plates will deform under load in bending!

This means, that if we would treat the contact as “rigid”, we are not making a big mistake. In fact, I wouldn’t call this a mistake at all!

We could simply use the infinitely right GAPs here, and be completely fine. But it’s not so easy to figure out how big a number is “infinitely big”. We don’t want it to be “too big”, and at the same time it should not be “too small”. After all, we don’t want to “overshoot this” by several digits in either direction!

So, while the actual value may not be that important, having the order of magnitude right is important. And I feel that this guide nicely shows you, how to calculate it!

When do you need to pay attention to GAP rigidity?

This is another important question!

First of all, we need to have a value! We need to provide it, to make the GAP element work. So it’s not like you can ignore this altogether.

But at the same time oftentimes a “generic value” with a correct order of magnitude is enough, you don’t have to differentiate this for every connection you may have.

But there are situations where you really want to pay attention to this:

Contact of a rigid element to a softer element:

Imagine, that you have an I-section standing on a concrete foundation, and you want to model that support:

If you want to use GAP elements for this, you will simply attach them to the bottom flange, and support them on the other side (to represent the supporting effect of the foundation):

If you would assume super-rigid GAP elements here… all the reaction force would go to the middle one (I marked it in green!).

The bottom flange would have to deform a bit to transfer the load to the blue GAPs. For that to happen, the green GAP would have to “give in” a little bit.

This would not happen if the rigidity of the green GAP would be insanely high!

But you could use the formula I just showed you here. Just imagine that the ground below the foundation is not moving at all (this is conservative in such a case!). Then, each GAP would represent a “column” of concrete!

The length of the beam is of course the foundation depth. The cross-section is the size of the QUAD4 element, just like before. And you should know Young’s Modulus of concrete!

Using those together would allow you to calculate a semi-realistic rigidity of each GAP. And the difference in stress distribution will be there!

This is really important in this case, as you don’t want to exceed the maximum allowed contact stress for concrete! It would be quite easy to get too high values with unrealistically rigid GAPs!

Contact through something elastic:

This is another fun one!

I once had to calculate a vessel that had rubber seals in the end-plate connections. It was a rather big and sophisticated model.

I just couldn’t place a 3D HEX hyperelastic pad in every joint… that would never compute. So with some time, I did smaller models to estimate the rubber rigidity.

Knowing the rigidity, I translated it into GAP rigidity that I used in my main model. This way, I was able to solve the problem, which would be pretty difficult to tackle otherwise!

You need to prove your assumptions:

This is a tricky one! If you feel that someone will really check your work, will like to know how you did things, and ask about every parameter you use – this would be awesome!

Not many people would think to worry about this rigidity, and if you would demonstrate that you did consider it, and calculate it as needed. Well, you can definitely score some easy points this way!


In this post, you’ve learned how to estimate the GAP rigidity you may want to use as a contact or support.

A few things worth remembering:

  • Calculating GAP rigidity is not that bad! All you need to know is the average size of the area “associated” with each GAP. With QUAD4 elements, that will be an area of a single QUAD element. The rest is simple: Length is the thickness through which the contact is “traveling” (i.e. twice the plate thickness, or foundation depth) and you should know Young’s Modulus. The rigidity is A * E / L
  • This is of course a simplification. But realistically speaking you shouldn’t need a more accurate estimate. In my experience, all you need is to get the order of magnitude of the rigidity correctly. That will be enough for your analysis accuracy!
  • You don’t have to calculate it all the time! It has to be said, that in many cases, this rigidity won’t play a significant role. Mostly, because the elements in contact will deform a lot under load. And compared to that, contact rigidity will be negligible.
  • But there are situations where this can really save your life! Contact of something rigid to something less rigid, contact through elastic pads, and other “softer elements” you can’t model, or even ability to prove that you thought about it. You will encounter those things in your models from time to time. And then, this method will really help you out!

I really hope that you’ve enjoyed this post. Don’t forget to sign up for my Free FEA training below, if you haven’t already!

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

Join my FEA Newsletter

Get my 1h video Lecture on Nonlinear Material

    Your personal data administrator is Enterfea Łukasz Skotny, Skrzydlata 1/7, 54-129 Wrocław/POLAND, Email. By subscribing to the newsletter that includes marketing messages you consent to your personal data processing in accordance with this privacy policy

    Join the discussion

    Comments (6)

    tatok - 2023-07-24 17:44:50

    Your blog is good.
    I was wondering to model contact end plate connection as efficiently as possible.
    Usually, my bolt connection modeled as bearing shear spider web compression only element with some rigidity for tension/compression. Check the plate stress and calculate bolt check from distribution force. But for gap plate to plate, must be done in solid? then all solid elements will be a lot modeling.

    Łukasz Skotny Ph.D. - 2023-08-14 08:48:15

    I'm glad that you like my work Mate :)
    I'm not 100% sure in I understand how you wish to do it based on your short description. I rarely use 3D solid mesh - and I model my connections mostly with plates. Then I would use contact (or GAP elements depending on your solver limitations) between plates, and bolts with spiders.
    Hope this helps, but feel free to ask further if I misunderstood something :)

    Rekatsinas Vasilis - 2023-02-18 09:41:11

    Lucasz, I would like also to point out that in case of gap element between two different materials, like steel and concrete the rule to calculate the gap element stiffness is 1/ktot = 1/ks + 1/kc, where ktot = stiffness of the gap element, ks=Es*A/Ls for steel plate and kc = Ec*A/Lc for concrete. Of course Lc must be estimated according an assumed effective depth.

    Łukasz Skotny Ph.D. - 2023-02-20 15:33:27


    I see what you did here, but I must say I'm not 100% a fan of such an approach. I would rather model the steel plate, and let it deform as it likes (since the plate deformations will also come from bending and various other effects), and I would use the concrete material for gap rigidity (as I have steel in my model, but I do not have concrete, so I represent it by GAP element). Also, I think that the steel component would be super small in that formula, and wouldn't contribute much - or am I wrong here?

    All the best!

    Rekatsinas Vasilis - 2023-02-18 09:22:32

    Very nice post Lucasz. Another subject that is very common and often underestimated by most structural engineers is the rigidity modelling of steel connections concerning moments. Usually the model is done either as hinged or as completely rigid. Semi rigid connections are almost never modeled in common practice, with the tendency to model them as hinged connection.
    This may be not so risky for the steel member design, but it is unsafe for connection design , especially base plate design (as the neglected moments have major impact in anchorage strength) where concrete is involved with the relevant brittle failure mechanisms.
    Even before advanced software such as IDEA-Statica for easy modelling of connections, a simplified estimation of connection moment rigidity is very easy following similar simple models like the one you mentioned in this post.
    Thank you for sharing your thoughts.

    Łukasz Skotny Ph.D. - 2023-02-20 15:31:11


    Oh, I completely agree... I even have some old posts on connection rigidity somewhere in the blog archives :)

    You are absolutely right, this is an overlooked topic in many projects!

    All the best!


    Sign up for my FEA Newsletter!

    Each Tuesday you will get awesome FEA Content directly yo your email!

      Your personal data administrator is Enterfea Łukasz Skotny, Skrzydlata 1/7, 54-129 Wrocław/POLAND, Email. By subscribing to the newsletter that includes marketing messages you consent to your personal data processing in accordance with this privacy policy