Global friction over small angles - simplification#

In the following case the a doubled grommet is used between a lifting-beam and a hook. Here round-bar nodes are used to guide the grommet around the top-edges of the lifting-beam.

image-20231005120924776

The result is 8 friction points so \(2^{8+1} = 512\) load-cases.

And the whole model has 8 of these details brining the total to 4096 loadcases for friction in grommets alone. Definitely do-able if needed, but not always practical.

For cases like this, in which small angles are present and the number of load-cases is high, it is possible to reduce number of loadcases by relocating the frictions at the small turns (the edges of the lifting beam) to the neighboring connections. The friction at the edges of the lifting beam can then be set to 0.

Consider the following model with angles 210, 9, 162 and 40 degrees. All friction factor are 0.1.

The tension in the cable without friction is 248kN.

Running all 512 friction load-cases results in a maximum load of 309 kN

Merging the frictions at connections with an angle less than 50 degrees (4 occurences) into the adjacent connections results in \(2^{4+1} = 32\) loadcases and a maximum of 310 kN.

image-20231128140415896

Note:

The equivalent Friction Factor (FEQ) can be calculated as follows: FEQ = image-20231128114450469

Here FA and FB are the original friction factors are connections A and B. fa and fb are the angles at the connections divided by 180 degrees. FEQ can be applied to connection A, replacing FA. The friction at connection B can be set to 0.

The threshold angle to trigger simplification can be specified in the rigging analysis. Also a minimum number of connection can be given below which simplification will not be performed regardless of the angles.

Model#


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

# code for Body2d
s.new_rigidbody(name='Body2d',
                mass=100,
                cog=(0.1,
                     0,
                     0),
           position=(-0.09982387114127766,
                     0,
                     -14.602846489040074),
           rotation=(0,
                     3.39987,
                     0),
           fixed =(False, True, False, True, False, True),
                )

# Rigging Analysis
ra = RiggingAnalysis(s, "Rigging Analysis")
ra.WCF = 1
ra.COGIF = 1
ra.DAF = 1
ra.SKEW = 1
ra.YAW = 1
ra.enforce_dual_crane = False
ra.lifted_object = s["Body2d"]
ra.dual_crane_tilt_axis = "y"

# code for Circle
c = s.new_circle(name='Circle',
            parent='Point',
            axis=(0, 1, 0),
            radius=1 )

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

# code for Point3
s.new_point(name='Point3',
          parent='Body2d',
          position=(-2,
                    0,
                    -2))

# code for Point4
s.new_point(name='Point4',
          parent='Body2d',
          position=(-2,
                    0,
                    2))

# code for Point5
s.new_point(name='Point5',
          parent='Body2d',
          position=(2,
                    0,
                    2))

# code for Circle2
c = s.new_circle(name='Circle2',
            parent='Point2',
            axis=(0, 1, 0),
            radius=1 )

# code for Circle3
c = s.new_circle(name='Circle3',
            parent='Point3',
            axis=(0, 1, 0),
            radius=1 )

# code for Circle4
c = s.new_circle(name='Circle4',
            parent='Point4',
            axis=(0, 1, 0),
            roundbar=True,
            radius=1 )

# code for Circle5
c = s.new_circle(name='Circle5',
            parent='Point5',
            axis=(0, 1, 0),
            roundbar=True,
            radius=1 )

# code for Cable
s.new_cable(name='Cable',
            endA='Circle3',
            endB='Circle3',
            length=80.0628,
            diameter=0.02,
            EA=27344.422456845565,
            sheaves = ['Circle4',
                       'Circle',
                       'Circle5',
                       'Circle2',
                       'Circle5',
                       'Circle',
                       'Circle4'])
s['Cable'].reversed = (False, False, False, False, False, True, True, True, True)