# How to model elastic spring back

**URL:** <https://calculix.discourse.group/t/how-to-model-elastic-spring-back/2811>\
**Category:** Model setup\
**Created:** [July 18, 2025, 7:33pm UTC](https://calculix.discourse.group/t/how-to-model-elastic-spring-back/2811 "2025-07-18T19:33:39Z")\
**Posts on this page:** 15\
**Page:** 1

<div class="post-metadata">

**Author:** ![Juseche](https://avatars.discourse-cdn.com/v4/letter/j/258eb7/32.png) [@Juseche](https://calculix.discourse.group/u/Juseche)\
**Post date:** [July 18, 2025, 7:33pm UTC](https://calculix.discourse.group/t/how-to-model-elastic-spring-back/2811/1 "2025-07-18T19:33:39Z")

</div>

Hi

I simulated the forming process of a metal plate (considering plasticity and large displacements) by incrementally imposing a displacement field on the plate. This simulation works well. Now, how do I simulate the plate’s natural (elastic) recovery (spring-back) by removing the imposed displacement boundary condition?

Thank you.

Thank you.

Jack.

---

<div class="post-metadata">

**Author:** ![Calc\_em](https://avatars.discourse-cdn.com/v4/letter/c/43a26b/32.png) [@Calc\_em](https://calculix.discourse.group/u/Calc_em)\
**Post date:** [July 19, 2025, 10:09am UTC](https://calculix.discourse.group/t/how-to-model-elastic-spring-back/2811/2 "2025-07-19T10:09:45Z")

</div>

> [@Juseche](#):
>
> by removing the imposed displacement boundary condition

BCs can be removed with `*BOUNDARY, OP=NEW` and no redefinition in the subsequent step.

---

<div class="post-metadata">

**Author:** ![Juseche](https://avatars.discourse-cdn.com/v4/letter/j/258eb7/32.png) [@Juseche](https://calculix.discourse.group/u/Juseche)\
**Post date:** [July 21, 2025, 9:23pm UTC](https://calculix.discourse.group/t/how-to-model-elastic-spring-back/2811/3 "2025-07-21T21:23:46Z")

</div>

Thanks for your answer.

I used `*BOUNDARY, OP=NEW` before the next `*STEP` block and ran the analysis. However, no convergence was achieved. I believe that removing the displacement boundary conditions instantaneously is causing convergence problems.  
Is there a way to remove the boundary conditions gradually?

By the way, under the `*BOUNDARY, OP=NEW` command, should I list only the boundary conditions to be retained, or should I also include those to be removed?

Thanks,

Jack

---

<div class="post-metadata">

**Author:** ![Calc\_em](https://avatars.discourse-cdn.com/v4/letter/c/43a26b/32.png) [@Calc\_em](https://calculix.discourse.group/u/Calc_em)\
**Post date:** [July 22, 2025, 9:43am UTC](https://calculix.discourse.group/t/how-to-model-elastic-spring-back/2811/4 "2025-07-22T09:43:48Z")

</div>

The idea is to use `*BOUNDARY, OP=NEW` in the step where you want to release BCs and redefine only the necessary ones.

That’s also how Abaqus deactivates BCs:

 ![release BC](https://global.discourse-cdn.com/free1/uploads/calculix/original/2X/6/6d244127b51bb9aa5a4b5107ddc4ef83bf7fbf5b.jpeg)

And they are removed by replacing them with equivalent forces and ramping them down to zero during the whole step (or immediately in dynamic analyses due to a different default amplitude).

---

<div class="post-metadata">

**Author:** ![Juseche](https://avatars.discourse-cdn.com/v4/letter/j/258eb7/32.png) [@Juseche](https://calculix.discourse.group/u/Juseche)\
**Post date:** [July 23, 2025, 2:36am UTC](https://calculix.discourse.group/t/how-to-model-elastic-spring-back/2811/5 "2025-07-23T02:36:10Z")

</div>

Thanks!

Now is working!

Replacing the removed BCs with equivalent forces sounds good. But, I not know how to replace them with the reaction forces in those BCs). Instead I using a second step considering dynamic response. However, how to reproduce a quase-static response?. Increasing the damping coefficient?

Thank you so much again!  
(however  
Jack

---

<div class="post-metadata">

**Author:** ![Calc\_em](https://avatars.discourse-cdn.com/v4/letter/c/43a26b/32.png) [@Calc\_em](https://calculix.discourse.group/u/Calc_em)\
**Post date:** [July 23, 2025, 7:38am UTC](https://calculix.discourse.group/t/how-to-model-elastic-spring-back/2811/6 "2025-07-23T07:38:58Z")

</div>

> [@Juseche](#):
>
> Replacing the removed BCs with equivalent forces sounds good. But, I not know how to replace them with the reaction forces in those BCs).

What I described is done automatically by the solver when you deactivate a BC with `*BOUNDARY, OP=NEW`.

> [@Juseche](#):
>
> Instead I using a second step considering dynamic response. However, how to reproduce a quase-static response?. Increasing the damping coefficient?

Dynamic implicit ? Unfortunately, CalculiX (unlike Abaqus) doesn’t have predefined quasi-static application mode but you could try decreasing the alpha parameter:

> The parameter ALPHA takes an argument between -1/3 and 0. It controls the dissipation of the high frequency response: lower numbers lead to increased numerical damping ([65]). The default value is -0.05.

So −0.333 is maximum damping.

---

<div class="post-metadata">

**Author:** ![Juseche](https://avatars.discourse-cdn.com/v4/letter/j/258eb7/32.png) [@Juseche](https://calculix.discourse.group/u/Juseche)\
**Post date:** [July 23, 2025, 4:12pm UTC](https://calculix.discourse.group/t/how-to-model-elastic-spring-back/2811/7 "2025-07-23T16:12:06Z")

</div>

What I described is done automatically by the solver when you deactivate a BC with ‘\*BOUNDARY, OP=NEW’.

Ok!. This is part of the \*.inp file. This way of do that is ok? (thanks again):  
…  
\*\* BC displacement  
\*BOUNDARY,AMPLITUDE=Damp  
33,1,1, 0.000000  
33,2,2, 0.000100  
33,3,3, 0.000200  
65,1,1, -0.000304  
65,2,2, 0.000401  
65,3,3, 0.000500  
97,1,1, -0.000604  
…  
\*\*  
\*BOUNDARY  
NFRO, 1,3  
NEND, 1,3  
\*\*  
\*\* amplitude curve displacements  
\*AMPLITUDE,NAME=Damp  
0.0000, 0.0000,  
1.0000, 1.0000,  
2.0000, 0.0000,  
\*\*  
\*\* step block  
\*STEP, NLGEOM,INC=1000,  
\*STATIC,  
1.0000e-04,1.000e+00,1.0000e-06,1.0000e-01  
\*\*  
\*END STEP  
\*\*  
\*\* second step block  
\*STEP,INC=10000  
\*STATIC  
1.0000e-04,1.000e+00,1.0000e-02  
\*\*  
\*BOUNDARY,OP=NEW,AMPLITUDE=Damp  
\*\*  
\*BOUNDARY  
NFRO, 1,3  
NEND, 1,3  
\*\*  
…

---

<div class="post-metadata">

**Author:** ![Calc\_em](https://avatars.discourse-cdn.com/v4/letter/c/43a26b/32.png) [@Calc\_em](https://calculix.discourse.group/u/Calc_em)\
**Post date:** [July 23, 2025, 4:22pm UTC](https://calculix.discourse.group/t/how-to-model-elastic-spring-back/2811/8 "2025-07-23T16:22:02Z")

</div>

No need for `*AMPLITUDE`, just `*BOUNDARY, OP=NEW` and respecification of the BC(s) that you want to keep in the second step.

---

<div class="post-metadata">

**Author:** ![Juseche](https://avatars.discourse-cdn.com/v4/letter/j/258eb7/32.png) [@Juseche](https://calculix.discourse.group/u/Juseche)\
**Post date:** [July 23, 2025, 4:26pm UTC](https://calculix.discourse.group/t/how-to-model-elastic-spring-back/2811/9 "2025-07-23T16:26:21Z")

</div>

But how to reduce to zero (slowly) the reactions in the removed BCs ?

---

<div class="post-metadata">

**Author:** ![Calc\_em](https://avatars.discourse-cdn.com/v4/letter/c/43a26b/32.png) [@Calc\_em](https://calculix.discourse.group/u/Calc_em)\
**Post date:** [July 23, 2025, 4:31pm UTC](https://calculix.discourse.group/t/how-to-model-elastic-spring-back/2811/10 "2025-07-23T16:31:12Z")

</div>

This happens automatically with no need for explicit amplitude definition. At least that’s what Abaqus does. CalculiX User’s Manual is less informative but it should be the same.

> If a boundary condition is removed in a stress/displacement analysis in Abaqus/Standard, it will be replaced by a concentrated force equal to the reaction force calculated at the restrained degree of freedom at the end of the previous step. If the step is a general nonlinear analysis step, this concentrated force will then be removed according to the AMPLITUDE parameter on the \*STEP option. **Therefore, if the default amplitudes are used, the concentrated force will be reduced linearly to zero over the period of the step in a static analysis** and immediately in a dynamic analysis.

---

<div class="post-metadata">

**Author:** ![Juseche](https://avatars.discourse-cdn.com/v4/letter/j/258eb7/32.png) [@Juseche](https://calculix.discourse.group/u/Juseche)\
**Post date:** [July 7, 2026, 11:19pm UTC](https://calculix.discourse.group/t/how-to-model-elastic-spring-back/2811/11 "2026-07-07T23:19:55Z")

</div>

Hi Again!

No sé porqué no se ejecuta el segundo STEP. Termina el primer STEP correctamente pero no ejecuta el segundo STEP. EL screenshot muestra que para el proceso sin mayores indicaciones. Cual puede ser el problema? El siguiente es el link al archivo de entrada INP:

> **[tubo.inp](https://drive.google.com/file/d/1fF-dNldBFEIyIM0pP8nNXaOO4ESOxqk3/view?usp=drive_link)**
>
> Google Drive file.

Muchas gracias nuevamente,

Jack

 ![Screenshot from 2026-07-07 18-08-06](https://global.discourse-cdn.com/free1/uploads/calculix/original/2X/f/f9e4de71de6a27834c6cbf5a801739cf1da03676.png)

---

<div class="post-metadata">

**Author:** ![jbr](https://avatars.discourse-cdn.com/v4/letter/j/ecccb3/32.png) [@jbr](https://calculix.discourse.group/u/jbr)\
**Post date:** [July 9, 2026, 1:08am UTC](https://calculix.discourse.group/t/how-to-model-elastic-spring-back/2811/12 "2026-07-09T01:08:21Z")

</div>

Saludos @Juseche / Jack,

No sé tampoco por qué no estaba ejecutándose tu segundo step, pero hice unos cambios mínimos (aquí debajo) y se ejecutó, pero fallo al final:

```auto
divergence; the increment size is decreased to 2.441406e-08
 the increment is reattempted
 *ERROR: too many cutbacks
 best solution and residuals are in the frd file

```

Cambios:

1. Agregue un valor diferente de cero a tú amplitude card
2. Quite algunos comentarios que tenían caracteres acentuados… Usualmente, es buena idea no usarlos.
3. Me acostumbro a agregar valores en el boundary card aunque por default es cero en ese caso.

```auto
*AMPLITUDE,NAME=Pamp
 0.0E+0, 0.0E+0,
 5.0E-2, 0.0E+0,
 1.0E-2, 1.0E-2
**---------------------------------------------
*STEP, NLGEOM, INC=1000
*STATIC,
 1.E-4, 1.E-2,1.E-6, 1.E-2
*DLOAD,AMPLITUDE=Pamp
 EALL, P1, -1.0
*EL FILE, TIME POINTS=t10,OUTPUT=2D,GLOBAL=YES
 S, PEEQ, E
*NODE FILE
 U
*EL PRINT,ELSET=EALL,TIME POINTS=t10,GLOBAL=YES
 S, PEEQ, E
*EL PRINT,ELSET=EALL,TOTALS=ONLY
 ENER
*END STEP
*STEP, NLGEOM, INC=10000
*STATIC
 1.E-4, 1.E-2, , 1.E-2
*BOUNDARY,OP=NEW
 NFRO, 2, 2, 0.0
 NEND, 2, 2, 0.0
*EL FILE, TIME POINTS=t10,OUTPUT=2D,GLOBAL=YES
 S,PEEQ,E
*NODE FILE
 U
*EL PRINT,ELSET=EALL,TIME POINTS=t10,GLOBAL=YES
 S,PEEQ,E
*EL PRINT,ELSET=EALL,TOTALS=ONLY
 ENER
*END STEP

```

Recomendaciones:

1. Necesitas un mesh tan denso? No me parece que te beneficies de eso en este caso.
2. No podrías usar 1D beam elements?

* * *

English per @Calc_em request:  
Hello @Juseche / Jack,

I’m also not sure why your second step was not running, but I made a few minor changes, shown below, and it ran. However, it failed at the end:

```plaintext
divergence; the increment size is decreased to 2.441406e-08
 the increment is reattempted
 *ERROR: too many cutbacks
 best solution and residuals are in the frd file

```

Changes:

1. I added a nonzero value to your amplitude card.
2. I removed some comments that contained accented characters. It is usually a good idea to avoid using them.
3. I am accustomed to adding values to the boundary card, even though the default value is zero in this case.

```plaintext
*AMPLITUDE,NAME=Pamp
 0.0E+0, 0.0E+0,
 5.0E-2, 0.0E+0,
 1.0E-2, 1.0E-2
**---------------------------------------------
*STEP, NLGEOM, INC=1000
*STATIC,
 1.E-4, 1.E-2,1.E-6, 1.E-2
*DLOAD,AMPLITUDE=Pamp
 EALL, P1, -1.0
*EL FILE, TIME POINTS=t10,OUTPUT=2D,GLOBAL=YES
 S, PEEQ, E
*NODE FILE
 U
*EL PRINT,ELSET=EALL,TIME POINTS=t10,GLOBAL=YES
 S, PEEQ, E
*EL PRINT,ELSET=EALL,TOTALS=ONLY
 ENER
*END STEP
*STEP, NLGEOM, INC=10000
*STATIC
 1.E-4, 1.E-2, , 1.E-2
*BOUNDARY,OP=NEW
 NFRO, 2, 2, 0.0
 NEND, 2, 2, 0.0
*EL FILE, TIME POINTS=t10,OUTPUT=2D,GLOBAL=YES
 S,PEEQ,E
*NODE FILE
 U
*EL PRINT,ELSET=EALL,TIME POINTS=t10,GLOBAL=YES
 S,PEEQ,E
*EL PRINT,ELSET=EALL,TOTALS=ONLY
 ENER
*END STEP

```

Recommendations:

1. Do you need such a dense mesh? It does not seem to provide much benefit in this case.
2. Could you use 1D beam elements instead?

---

<div class="post-metadata">

**Author:** ![Calc\_em](https://avatars.discourse-cdn.com/v4/letter/c/43a26b/32.png) [@Calc\_em](https://calculix.discourse.group/u/Calc_em)\
**Post date:** [July 9, 2026, 10:22am UTC](https://calculix.discourse.group/t/how-to-model-elastic-spring-back/2811/13 "2026-07-09T10:22:10Z")

</div>

Could you add English translation to your posts ?

You have non-zero (prescribed) BC before the first step, which is incorrect:

```auto
** BC desplazamiento del tubo
*BOUNDARY,AMPLITUDE=Damp
1,1,1, 0.169900
1,3,3, -0.250500
33,1,1, 0.169181
...

```

There are also some redundant commas here:

```auto
** step block
*STEP, NLGEOM,INC=1000,
*STATIC,
1.0000e-04,0.0100e+00,1.0000e-06,1.0000e-02

```

S3 elements are not the best choice, try meshing with quads (S4/S4R).

To achieve convergence, make sure that rigid body motions are eliminated during the whole analysis (especially in the second step that fails to converge right from the start suggesting underconstraint).

---

<div class="post-metadata">

**Author:** ![Juseche](https://avatars.discourse-cdn.com/v4/letter/j/258eb7/32.png) [@Juseche](https://calculix.discourse.group/u/Juseche)\
**Post date:** [July 13, 2026, 2:32pm UTC](https://calculix.discourse.group/t/how-to-model-elastic-spring-back/2811/14 "2026-07-13T14:32:08Z")

</div>

Thanks! Its working now.

Jack

---

<div class="post-metadata">

**Author:** ![Juseche](https://avatars.discourse-cdn.com/v4/letter/j/258eb7/32.png) [@Juseche](https://calculix.discourse.group/u/Juseche)\
**Post date:** [July 13, 2026, 2:32pm UTC](https://calculix.discourse.group/t/how-to-model-elastic-spring-back/2811/15 "2026-07-13T14:32:49Z")

</div>

Its working now!

Thanks

Jack
