Skip to content

Some examples

Here are shown many examples to help you get started and familiar with defining a spring model in springable. To run and simulate an example, copy the corresponding code in a text file and save it under the name example.csv. Then, run this Python script:

from springable.simulation import simulate_model

simulate_model('example.csv')

Just want to be shown many examples and simulations?

Examples can also be automatically simulated and shown to you by running this Python script:

from springable.discover import show_examples

show_examples()

More complex spring structures can be shown by running:

from springable.discover import show_gallery

show_gallery()

Some help if you are not sure how to run a Python script or get set up is provided here.

Single longitudinal springs

with linear behavior

PARAMETERS
stiffness, 1.0
NODES
0, 0.0, 0.0, 1, 1
1, 5.0, 0.0, 0, 1
SPRINGS
0-1, stiffness
LOADING
1, X, +2.0

with a piecewise softening behavior

PARAMETERS
initial_stiffness, 2.0
final_stiffness, 0.2
transition_displacement, 1.0
NODES
0, 0.0, 0.0, 1, 1
1, 5.0, 0.0, 0, 1
SPRINGS
0-1, PIECEWISE(k_i=[initial_stiffness;final_stiffness];u_i=[transition_displacement];us=0.2)
LOADING
1, X, 2.50

with a piecewise stiffening behavior

PARAMETERS
initial_stiffness, 0.2
final_stiffness, 2.0
transition_displacement, 1.0
NODES
0, 0.0, 0.0, 1, 1
1, 5.0, 0.0, 0, 1
SPRINGS
0-1, PIECEWISE(k_i=[initial_stiffness;final_stiffness];u_i=[transition_displacement];us=0.2)
LOADING
1, X, 2.50

with a piecewise nonmonotonic behavior

PARAMETERS
stiffness0, 1.0
stiffness1, -0.75
stiffness2, 1.5
critical_displacement_loading, 1.0
critical_displacement_unloading, 2.0
NODES
0, 0.0, 0.0, 1, 1
1, 5.0, 0.0, 0, 1
SPRINGS
0-1, PIECEWISE(k_i=[stiffness0;stiffness1;stiffness2];u_i=[critical_displacement_loading; critical_displacement_unloading];us=0.1)
LOADING
1, X, 2.50

with a complex multi-valued zigzag behavior

NODES
0, 0.0, 0.0, 1, 1
1, 5.0, 0.0, 0, 1
SPRINGS
0-1, ZIGZAG2(u_i=[1.129E+00; 8.194E-01; 1.697E+00; 1.955E+00; 2.690E+00; 3.413E+00; 3.000E+00; 3.439E+00; 3.787E+00]; f_i=[1.708E+00; 3.312E-01; 1.344E+00; 5.779E-01; 1.708E+00; 1.929E+00; 1.136E+00; 6.948E-01; 1.565E+00]; epsilon=5.000E-02)
LOADING
1, X, 2.0

Basic geometrically nonlinear structures

two springs connected at an angle and a flexure

PARAMETERS
    width, 8.0
    triangle_height, 3.0
    triangle_side_stiffness, 9.0
    hinge_stiffness, 7.5
NODES
    0,0.0,0.0,1,1
    1,width/2,triangle_height,1,0
    2,width,0.0,1,1
SPRINGS
    1-2,triangle_side_stiffness
    1-0,triangle_side_stiffness
ANGULAR SPRINGS
    0-1-2, hinge_stiffness
LOADING
    1, Y, -9.0

Von-Mises truss

PARAMETERS
    width, 8.0
    triangle_height, 3.0
    vertical_element_length, 8.0
    triangle_side_stiffness, 9.0
    vertical_element_stiffness, 1.4, [1;2.5;4]
    hinge_stiffness, 7.5
NODES
    0,0.0,0.0,1,1
    1,width/2,triangle_height,1,0
    2,width,0.0,1,1
    3,width/2,triangle_height + vertical_element_length,1,0
SPRINGS
    1-2,triangle_side_stiffness
    1-0,triangle_side_stiffness
    1-3,vertical_element_stiffness
ANGULAR SPRINGS
    0-1-2, hinge_stiffness
LOADING
    3, Y, -10.0

Buckling

PARAMETERS
    stiffness, 10.0
    hinge_stiffness, 1.0
    l, 5.0
NODES
    0,0.0,0.0,1,1
    1,0.0,l/2,0,0
    2,0.0,l,1,0
SPRINGS
    1-2,stiffness
    1-0,stiffness
ANGULAR SPRINGS
    0-1-2, hinge_stiffness, PI*0.99
LOADING
    2, Y, -5.0, -0.9*l

Different type of springs

angular spring (to model (non)linear flexures)

NODES
0, -1.0, 0.0, 1, 1
1, 1.0, 0.0, 0, 1
2, 0.0, 0.15, 0, 0
ANGULAR SPRINGS
1-2-0, BEZIER2(u_i=[2.0E-01; 10E-01; 10E-01; -13.33E-02; -2E-01; 3.3E-01; 6.774E-01]; f_i=[2.749E+00; 3.297E+00; 1.515E-01; 1.623E+00; 1.190E+00; -2.648E+00; 1.364E+00])
SPRINGS
0-2, k=1
2-1, k=1
LOADING
2, Y, -5

area spring (to model pressure actuation)

NODES
0, 0.0, 0.0, 0, 0
1, -1.0, -1.5, 1, 1
2, +1.0, -1.5, 1, 1
3, 0.0, -1, 1, 0
ANGULAR SPRINGS
1-0-2, k=0.05
SPRINGS
1-0, k=.6
2-0, k=.6
AREA SPRINGS
0-1-3-2, ISOTHERMAL(n=2;R=1;T0=1)
LOADING
3, Y, -1.0, -3.0

path spring (to model cable, rope and pulleys)

NODES
0, 0.0, 0.0, 1, 1
1, 0.5, 0.5, 0, 0
2, -1.5, 0.0, 1, 1
3, -2, 0.0, 0, 1
SPRINGS
0-1, LINEAR(k=20.0)
ANGULAR SPRINGS
1-0-2, LINEAR(k=0.2)
PATH SPRINGS
1-2-3, PIECEWISE(k_i=[.02;10];u_i=[0.5];us=.01)
LOADING
3, X, -1.25

distance spring (to model contact)

NODES
0, 0.0, 0.0, 1, 1
1, 1.0, 0.35, 0, 0
2, 2.0, 0.0, 0, 1
3, 0.0, .5, 1, 1
4, 2.0, 1, 1, 1
SPRINGS
0-1, 20
1-2, 20
ANGULAR SPRINGS
0-1-2, 2
DISTANCE SPRINGS
1-4-3, CONTACT(f0=3;uc=.05;delta=0)
LOADING
2, X, -10.0, -1.9

Inflatables

pneunet actuator

PARAMETERS
chamber_length, 1.0
chamber_height, 1.0
syringe_height, 5.0
syringe_length, 3.0
k0, 1.0
k1, 5.0
k_rot, 0.2
k_area, 20.0
NODES
0, 0*chamber_length, chamber_height / 2, 1, 1
1, 1*chamber_length, chamber_height / 2, 0, 0
2, 2*chamber_length, chamber_height / 2, 0, 0
3, 3*chamber_length, chamber_height / 2, 0, 0
4, 4*chamber_length, chamber_height / 2, 0, 0
5, 4*chamber_length, -chamber_height / 2, 0, 0
6, 3*chamber_length, -chamber_height / 2, 0, 0
7, 2*chamber_length, -chamber_height / 2, 0, 0
8, 1*chamber_length, -chamber_height / 2, 0, 0
9, 0*chamber_length, -chamber_height / 2, 1, 1
10, 0*chamber_length, -syringe_height / 2, 1, 1
11, -syringe_length, -syringe_height / 2, 0, 1
12, -syringe_length, 0.0, 0, 1
13, -syringe_length, +syringe_height / 2, 0, 1
14, 0*chamber_length, +syringe_height / 2, 1, 1
SPRINGS
0-1, k0
1-2, k0
2-3, k0
3-4, k0
9-8, k1
8-7, k1
7-6, k1
6-5, k1
1-8, k1
2-7, k1
3-6, k1
4-5, k1
ANGULAR SPRINGS
1-0-14, k_rot
2-1-0, k_rot
3-2-1, k_rot
4-3-2, k_rot
5-4-3, k_rot
6-5-4, k_rot
7-6-5, k_rot
8-7-6, k_rot
9-8-7, k_rot
10-9-8, k_rot
10-11-12, 100
11-12-13, 100
12-13-14, 100
AREA SPRINGS
0-1-2-3-4-5-6-7-8-9-10-11-12-13-14, k_area
LOADING
12, X, 12.0, syringe_length

dome under pressure

PARAMETERS
diameter, 10.0
alpha0, 0.675
stiffness0, 0.5
stiffness1, 0.025
NODES
0,diameter/2 * COS(alpha0 + (PI-2*alpha0) / 4 * 0),diameter/2 * SIN(alpha0 + (PI-2*alpha0) / 4 * 0),1,1
1,diameter/2 * COS(alpha0 + (PI-2*alpha0) / 4 * 1),diameter/2 * SIN(alpha0 + (PI-2*alpha0) / 4 * 1),0,0
2,diameter/2 * COS(alpha0 + (PI-2*alpha0) / 4 * 2),diameter/2 * SIN(alpha0 + (PI-2*alpha0) / 4 * 2),0,0
3,diameter/2 * COS(alpha0 + (PI-2*alpha0) / 4 * 3),diameter/2 * SIN(alpha0 + (PI-2*alpha0) / 4 * 3),0,0
4,diameter/2 * COS(alpha0 + (PI-2*alpha0) / 4 * 4),diameter/2 * SIN(alpha0 + (PI-2*alpha0) / 4 * 4),1,1
5,X4,Y4-diameter/7,1,0
6,(X0+X4)/2,Y4-diameter/7,1,0
7,X0,Y4-diameter/7,1,0
SPRINGS
0-1,k=4.0*stiffness0
1-2,k=4.0*stiffness0
2-3,k=4.0*stiffness0
3-4,k=4.0*stiffness0
ANGULAR SPRINGS
7-0-1,k=2.94*stiffness1
0-1-2,k=2.96*stiffness1
1-2-3,k=3.06*stiffness1
2-3-4,k=3.0*stiffness1
3-4-5,k=3.03*stiffness1
6-5-4,k=40
7-6-5,k=40
0-7-6,k=40
AREA SPRINGS
0-1-2-3-4-5-6-7, ISOTHERMAL(n=1.404E-01; R=1.000E+00; T0=4.000E+00)
LOADING
6,Y,-0.25, -diameter*1.2

another dome under pressure

PARAMETERS
diameter, 10.0
alpha0, 0.675
stiffness0, 0.5
stiffness1, 0.025
NODES
0,diameter/2 * COS(alpha0 + (PI-2*alpha0) / 4 * 0),diameter/2 * SIN(alpha0 + (PI-2*alpha0) / 4 * 0),1,1
1,diameter/2 * COS(alpha0 + (PI-2*alpha0) / 4 * 1),diameter/2 * SIN(alpha0 + (PI-2*alpha0) / 4 * 1),0,0
2,diameter/2 * COS(alpha0 + (PI-2*alpha0) / 4 * 2),diameter/2 * SIN(alpha0 + (PI-2*alpha0) / 4 * 2),0,0
3,diameter/2 * COS(alpha0 + (PI-2*alpha0) / 4 * 3),diameter/2 * SIN(alpha0 + (PI-2*alpha0) / 4 * 3),0,0
4,diameter/2 * COS(alpha0 + (PI-2*alpha0) / 4 * 4),diameter/2 * SIN(alpha0 + (PI-2*alpha0) / 4 * 4),1,1
5,X4,Y4-diameter/7,1,0
6,(X0+X4)/2,Y4-diameter/7,1,0
7,X0,Y4-diameter/7,1,0
SPRINGS
0-1,k=4.0*stiffness0
1-2,k=4.0*stiffness0
2-3,k=4.0*stiffness0
3-4,k=4.0*stiffness0
ANGULAR SPRINGS
7-0-1,k=2.94*stiffness1
0-1-2,k=2.96*stiffness1
1-2-3,k=3.01*stiffness1
2-3-4,k=3.0*stiffness1
3-4-5,k=3.02*stiffness1
6-5-4,k=40
7-6-5,k=40
0-7-6,k=40
AREA SPRINGS
0-1-2-3-4-5-6-7, ISOTHERMAL(n=0.175; R=1.000E+00; T0=4.000E+00)
LOADING
6,Y,-0.25, -diameter*0.4

Snapping, sequencing, buckling and contact

sequencing with nonmonotonic Bezier springs

NODES
0, 0.0, 0.0, 1, 1
1, 5.0, 0.0, 0, 1
2, 10.0, 0.0, 0, 1
SPRINGS
0-1, BEZIER(u_i=[1.8E+00; 0.5E+00; 3.000E+00]; f_i=[1.7E+00; -1.E+00; 1.000E+00])
1-2, BEZIER(u_i=[0.6E+00; 1.7E+00; 3.000E+00]; f_i=[2.4E+00; -1.7E+00; 1.000E+00])
LOADING
2, X, 1.

bumping beams

PARAMETERS
d, 0.75
k, 5.0
NODES
0, 0.0, 0.0, 1, 1
1, 0.001, 1.0, 0, 0
2, 0.0, 2.0, 1, 0
3, d, 0.0, 1, 1
4, d-0.001, 1.0, 0, 0
5, d, 2.0, 1, 0
6, d/2, 2.0, 1, 0
SPRINGS
0-1, 10.0
1-2, 10.0
3-4, 10.0
4-5, 10.0
Y DISTANCE SPRINGS
6-2, 250
6-5, 250
ANGULAR SPRINGS
0-1-2, 0.5
3-4-5, 0.6
X DISTANCE SPRINGS
4-1, CONTACT(f0=5;uc=0.025;delta=0)
LOADING
6, Y, -6.0, -1.5

beam in compression with wall

PARAMETERS
ks, 10.0
kr, 1.0
dl, 1.0
dy, 1.0
NODES
0, 0*dl, 0.0, 1, 1
1, 1*dl, 0.0, 0, 1
2, 2*dl, 0.0, 0, 0
3, 3*dl, 0.0, 0, 0
4, 4*dl, 0.0, 0, 0
5, 5*dl, 0.0, 0, 0
6, 6*dl, 0.0, 0, 0
7, 7*dl, 0.0, 0, 0
8, 8*dl, 0.0, 0, 0
9, 9*dl, 0.0, 0, 0
10,10*dl,0.0, 0, 0
11,11*dl,0.0, 0, 0
12,12*dl,0.0, 0, 0
13,13*dl,0.0, 0, 0
14,14*dl,0.0, 0, 1
15,15*dl,0.0, 0, 1
16, 7.5*dl, -dy, 1, 1
SPRINGS
0-1,  ks
1-2,  ks
2-3,  ks
3-4,  ks
4-5,  ks
5-6,  ks
6-7,  ks
7-8,  ks
8-9,  ks
9-10, ks
10-11,ks
11-12,ks
12-13,ks
13-14,ks
14-15,ks
ANGULAR SPRINGS
0-1-2, kr*50
1-2-3, kr
2-3-4, kr, PI*0.95
3-4-5, kr
4-5-6, kr
5-6-7, kr
6-7-8, kr, PI*1.025
7-8-9, kr
8-9-10,kr, PI*1.025
9-10-11,kr
10-11-12,kr
11-12-13,kr
12-13-14,kr
13-14-15,kr*50
Y DISTANCE SPRINGS
2-16, CONTACT(f0=1.0; uc=dl/10; delta=0)
3-16, CONTACT(f0=1.0; uc=dl/10; delta=0)
4-16, CONTACT(f0=1.0; uc=dl/10; delta=0)
5-16, CONTACT(f0=1.0; uc=dl/10; delta=0)
6-16, CONTACT(f0=1.0; uc=dl/10; delta=0)
7-16, CONTACT(f0=1.0; uc=dl/10; delta=0)
8-16, CONTACT(f0=1.0; uc=dl/10; delta=0)
9-16, CONTACT(f0=1.0; uc=dl/10; delta=0)
10-16,CONTACT(f0=1.0; uc=dl/10; delta=0)
11-16,CONTACT(f0=1.0; uc=dl/10; delta=0)
12-16,CONTACT(f0=1.0; uc=dl/10; delta=0)
13-16,CONTACT(f0=1.0; uc=dl/10; delta=0)
LOADING
15, X, -1.5, -6.5*dl

beam in compression with two walls

PARAMETERS
ks, 10.0
kr, 1.0
dl, 1.0
dy0, 1.0
dy1, 1.75, [1.75;2.25;5]
NODES
0, 0*dl, 0.0, 1, 1
1, 1*dl, 0.0, 0, 1
2, 2*dl, 0.0, 0, 0
3, 3*dl, 0.0, 0, 0
4, 4*dl, 0.0, 0, 0
5, 5*dl, 0.0, 0, 0
6, 6*dl, 0.0, 0, 0
7, 7*dl, 0.0, 0, 0
8, 8*dl, 0.0, 0, 0
9, 9*dl, 0.0, 0, 0
10,10*dl,0.0, 0, 0
11,11*dl,0.0, 0, 0
12,12*dl,0.0, 0, 0
13,13*dl,0.0, 0, 0
14,14*dl,0.0, 0, 1
15,15*dl,0.0, 0, 1
16, 0, -dy0, 1, 1
17, 0, +dy1, 1, 1
SPRINGS
0-1,  ks
1-2,  ks
2-3,  ks
3-4,  ks
4-5,  ks
5-6,  ks
6-7,  ks
7-8,  ks
8-9,  ks
9-10, ks
10-11,ks
11-12,ks
12-13,ks
13-14,ks
14-15,ks
ANGULAR SPRINGS
0-1-2, LINEAR(k=15*kr)
1-2-3, LINEAR(k=kr), PI*0.95
2-3-4, LINEAR(k=kr)
3-4-5, LINEAR(k=kr)
4-5-6, LINEAR(k=kr)
5-6-7, LINEAR(k=kr), PI*1.025
6-7-8, LINEAR(k=kr), PI*1.025
7-8-9, LINEAR(k=kr)
8-9-10,LINEAR(k=kr), PI*1.05
9-10-11,LINEAR(k=kr)
10-11-12,LINEAR(k=kr)
11-12-13,LINEAR(k=kr), PI*1.05
12-13-14,LINEAR(k=kr)
13-14-15,LINEAR(k=15*kr)


Y DISTANCE SPRINGS
2-16, CONTACT(f0=1.0; uc=dl/10; delta=0)
3-16, CONTACT(f0=1.0; uc=dl/10; delta=0)
4-16, CONTACT(f0=1.0; uc=dl/10; delta=0)
5-16, CONTACT(f0=1.0; uc=dl/10; delta=0)
6-16, CONTACT(f0=1.0; uc=dl/10; delta=0)
7-16, CONTACT(f0=1.0; uc=dl/10; delta=0)
8-16, CONTACT(f0=1.0; uc=dl/10; delta=0)
9-16, CONTACT(f0=1.0; uc=dl/10; delta=0)
10-16,CONTACT(f0=1.0; uc=dl/10; delta=0)
11-16,CONTACT(f0=1.0; uc=dl/10; delta=0)
12-16,CONTACT(f0=1.0; uc=dl/10; delta=0)
13-16,CONTACT(f0=1.0; uc=dl/10; delta=0)


17-2, CONTACT(f0=1.0; uc=dl/10; delta=0)
17-3, CONTACT(f0=1.0; uc=dl/10; delta=0)
17-4, CONTACT(f0=1.0; uc=dl/10; delta=0)
17-5, CONTACT(f0=1.0; uc=dl/10; delta=0)
17-6, CONTACT(f0=1.0; uc=dl/10; delta=0)
17-7, CONTACT(f0=1.0; uc=dl/10; delta=0)
17-8, CONTACT(f0=1.0; uc=dl/10; delta=0)
17-9, CONTACT(f0=1.0; uc=dl/10; delta=0)
17-10,CONTACT(f0=1.0; uc=dl/10; delta=0)
17-11,CONTACT(f0=1.0; uc=dl/10; delta=0)
17-12,CONTACT(f0=1.0; uc=dl/10; delta=0)
17-13,CONTACT(f0=1.0; uc=dl/10; delta=0)
LOADING
15, X, -1.5, -4.5*dl

snapping square

PARAMETERS
side, 1.0
eccentricity, 0.1
ks, 5.0
kh, 1.0
NODES
0, +side, -side, 0, 0
1, +side, +side, 0, 0
2, -side, +side, 0, 0
3, -side, -side, 0, 0
4, +side, 0.0, 0, 0
5, 0.0, +side, 1, 0
6, -side, 0.0, 0, 0
7, 0.0, -side, 1, 1
8, -eccentricity*side, 0.0, 0, 0
9, (1-eccentricity)/2*side, 0.0005, 0, 0
SPRINGS
0-4, 10*ks
4-1, 10*ks
1-5, 10*ks
5-2, 10*ks
2-6, 10*ks
6-3, 10*ks
3-7, 10*ks
7-0, 10*ks
5-8, ks
7-8, ks
8-9, ks
9-4, ks
ANGULAR SPRINGS
4-0-7, 100*kh
7-3-6, 100*kh
6-2-5, 100*kh
5-1-4, 100*kh
0-4-1, kh
1-5-2, kh
2-6-3, kh
3-7-0, kh
8-9-4, kh/15
DISTANCE SPRINGS
9-4-5, CONTACT(f0=5.0; uc=0.02; delta=0.0)
LOADING
5, Y, -1.85, 3/4*side