# Spring between two nodes

Hi,

I’m trying to add to my fea model spring between two nodes. I want to check how distanse between two nodes are changing during analyze.
How to implement spring with stiffness close to 0 between for example node with id 1 and node with id 2?

you can have a look into the manul ccx
there is the spring card *SPRING, and
maybe *EQUATION

and there is also a link to examples:

you can also use /try a truss element

I saw it, but it didn’t solve my problem.

For example, easy model:

I want to check how distance between two surfaces (in which I apply forces) will change.
Spring have start point in node with ID 1 and end point in node with ID2. Stiffness k close to 0.

IMO keywords *spring in this situation is not enough. *EQUATION imo is useless here.

how you apply your forces?
take 3 nodes of your surface and calc. the change, the same with other surface?

Surface traction to surfaces.
The picture above is only an example. In my main model situation is a bit different.
However, you are right with your idea - manual calc. displacement, but I want to do it more professional with idea which about I’m talking above.

Maybe you could define a rigid body between your two surfaces, and then a spring between the two references nodes of the rigid bodies. The two rigid bodies will have a nice graphical representation on PrePomax, but the spring not.

1 Like

I don’t understant this clue. What is a reason to use RB? I want to use existing nodes as a start and end point of my spring.

But what is the problem with that approach using spring with very low stiffness ? It seems like the best idea here since CalculiX doesn’t have connector elements. Are you getting errors ? Or are you not sure how to define this spring in practice ? It should be quite easy with keywords. But you have to define it as element first and then refer to its elset in the *Spring keyword where you specify the stiffness.

“Or are you not sure how to define this spring in practice ?”

Exactly - I don’t understant where I can define spring as element which section, material(?) and subsequently where I can specify nodes ID and stiffness. Could you write for me some guide or all needed keywords?
And next - how to get output which give me information about changing length of my spring during analyze?

Sure, here’s an example from spring1.inp available in CalculiX documentation:

``````*NODE
1,0.,0.,0.
2,1.,0.,0.
*ELEMENT,TYPE=SPRINGA,ELSET=Spring1
1,1,2
*SPRING,ELSET=Spring1

10.
``````

So you need two nodes first, then SPRINGA element definition based on these nodes and finally a *SPRING keyword referring to that element and specifying the stiffness.

Of course, you will also need some output requests but this is done in the same way as in the case of other element types. For example, you can use *EL PRINT to save strain (E) for elset with a spring.

1 Like

Thank you very much. I will check this solution

It seams it works.
I’ve got:
**SPRING
*ELEMENT, Type=SPRINGA, ELSET=Spring1
1,6009,5975
*SPRING, ELSET=Spring1
0.1

and

*EL PRINT, ELSET=Spring1
E

to get strain of my spring, but where I can see the results? PrePoMax don’t support type element: spring so I’m trying in cgx

but I have no idea where is result of spring strain.

Check the dat file. *EL PRINT saves the results there.

uh, so something is wrong

I assumed that strain (specifically E11 strain) output for spring elements is supported in CalculiX, just like in Abaqus but maybe it’s not the case.

For sure you can request displacements of spring’s nodes using *NODE PRINT but this may not be particularly useful in your case.

Okej, I will be doing it manually or maybe I will write python script to calculate distance using data:

Thanks for help

try this example.
spring stiffness should not be close to “zero”, but should be small relative to other structure
spring energy is calculated so that the 1/2 kx**2 can be use to calculate the spring deflection
dx= ( (spring energy)*2/k )^0.5

*NODE
1,0.005,0.005,0.01
2,0.01,0,0.015
3,0,0.02,0.015
4,0.015,0,0.015
5,0.005,0.02,0.015
6,0,0.01,0.015
7,0.005,0,0.015
8,0.01,0.005,0.015
9,0.015,0.015,0.01
10,0.005,0.015,0.01
11,0,0.015,0.015
12,0.02,0.005,0.015
13,0.005,0.01,0.015
14,0,0.005,0.015
15,0.02,0.02,0.015
16,0.015,0.01,0.015
17,0,0,0.01
18,0.02,0,0.01
19,0.02,0.02,0.01
20,0,0.02,0.01
21,0.01,0,0.01
22,0.02,0.01,0.01
23,0.005,0.005,0.015
24,0,0.01,0.01
25,0.02,0.015,0.015
26,0.015,0.02,0.015
27,0.005,0.015,0.015
28,0,0,0.015
29,0.005,0.02,0.01
30,0,0.015,0.01
31,0.015,0,0.01
32,0.005,0,0.01
33,0.01,0.005,0.01
34,0.005,0.01,0.01
35,0,0.005,0.01
36,0.02,0.005,0.01
37,0.015,0.01,0.01
38,0.015,0.005,0.01
39,0.02,0,0.015
40,0.02,0.01,0.015
41,0.015,0.015,0.015
42,0.02,0.015,0.01
43,0.015,0.02,0.01
44,0.015,0.005,0.015
*ELEMENT,TYPE=C3D8
1,24,34,10,30,6,13,27,11
2,17,32,1,35,28,7,23,14
3,32,21,33,1,7,2,8,23
4,30,10,29,20,11,27,5,3
5,37,22,42,9,16,40,25,41
6,9,42,19,43,41,25,15,26
7,35,1,34,24,14,23,13,6
8,31,18,36,38,4,39,12,44
10,21,31,38,33,2,4,44,8
11,38,36,22,37,44,12,40,16
*ELEMENT,TYPE=SPRINGA
9,29,43
*ELSET,ELSET=block
1
2
3
4
5
6
7
8
10
11
*ELSET,ELSET=spring
9
*MATERIAL,NAME=steel
*ELASTIC,TYPE=ISOTROPIC
200000000000,0.29

*SOLID SECTION,ELSET=block,MATERIAL=steel
*SPRING,ELSET=spring

1.000000000000E+003
*BOUNDARY
2,1,0
2,2,0
2,3,0
4,1,0
4,2,0
4,3,0
7,1,0
7,2,0
7,3,0
17,1,0
17,2,0
17,3,0
18,1,0
18,2,0
18,3,0
21,1,0
21,2,0
21,3,0
28,1,0
28,2,0
28,3,0
31,1,0
31,2,0
31,3,0
32,1,0
32,2,0
32,3,0
39,1,0
39,2,0
39,3,0
*STEP
*STATIC
30,1,50000
42,1,-20000
*NODE FILE,GLOBAL=YES
U,RF
*EL FILE
S,E,ENER
*EL PRINT, ELSET=spring
ELSE
*END STEP

3 Likes

Nice workaround! But I wonder if the fact that strain output doesn’t work for spring elements is a bug or just not implemented feature.

1 Like

I had this issue a while back, and simply tested all of the output variables until I hit on spring energy.

1 Like