Beam#

Beams can be used to model slender and linear elastic items such as:

  • beams (obviously)

  • pipes

  • wires

  • chains

  • catenaries

Beams may have a mass, bending stiffness, torsional stiffness and axial stiffness. Beams can be placed between Frame nodes. The segmented approach allows for accurate modelling of large displacements.

image-20231117180326387

A beam node consists of a number of segments. Each of these segments has torsion and axis springs at its center and bending springs at its ends:

image

Not a typical FEM (Euler / Bernouilli) beam#

Users of (older) FEM packages may wonder why a beam element in DAVE is not equal to the typical Bernouilli-Euler beam element as found in many FEM packages. The reason for that is that FEM packages assume small displacements where DAVE does not. The small displacements assumption allow FEM packages to simplify the bending of a beam as the second derivative of the shape function. DAVE can not make this assumption.

Examples:#

  • Cantilever beams

  • Wire catenaries


# code for Frame
s.new_frame(name='Frame',
           position=(0,
                     0,
                     0),
           rotation=(0,
                     0,
                     0),
           fixed =(True, True, True, True, True, True),
            )

# code for Frame2
s.new_frame(name='Frame2',
           position=(solved(9.85134434197958),
                     solved(-0.854768156439234),
                     solved(-1.994389547930181)),
           rotation=(solved(-14.7755),
                     solved(17.6433),
                     solved(-6.36028)),
           fixed =(False, False, False, False, False, False),
            )

# code for Frame4
s.new_frame(name='Frame4',
           position=(solved(10.168661907299452),
                     solved(3.5854138945556806),
                     solved(-4.519383806753675)),
           rotation=(solved(-13.4014),
                     solved(40.8139),
                     solved(76.791)),
           fixed =(False, False, False, False, False, False),
            )

# code for beam Beam
s.new_beam(name='Beam',
            nodeA='Frame',
            nodeB='Frame2',
            n_segments=10.0,
            tension_only=False,
            EIy =1000,
            EIz =1000,
            GIp =1000,
            EA =100,
            mass =0,
            L =10) # L can possibly be omitted

# code for Frame3
s.new_frame(name='Frame3',
           parent='Frame2',
           position=(0,
                     0,
                     0),
           rotation=(0,
                     0,
                     90),
           fixed =(True, True, True, True, True, True),
            )

# code for Point2
s.new_point(name='Point2',
          parent='Frame2',
          position=(0,
                    0,
                    0))

# code for Point
s.new_point(name='Point',
          parent='Frame4',
          position=(0,
                    0,
                    0))

# code for beam Beam2
s.new_beam(name='Beam2',
            nodeA='Frame3',
            nodeB='Frame4',
            n_segments=10.0,
            tension_only=False,
            EIy =100,
            EIz =1000,
            GIp =1000,
            EA =100,
            mass =0,
            L =5) # L can possibly be omitted

# code for Force2
s.new_force(name='Force2',
            parent='Point2',
            force=(0, -2, 0),
            moment=(0, 0, 0) )

# code for Force
s.new_force(name='Force',
            parent='Point',
            force=(0, 0, -6),
            moment=(0, 0, 0) )