Loading#

Units: Millimeter [mm], Newton [N]

Introduction#

For computing deformations the loading of a beam is crucial. Therefore, m_n_kappa provides currently two functions to compute the stress resultants of single-span girders.

Single Loads#

For computation of the stress-resultants of a single-span beam first at leas one SingleLoad must be defined. This SingleLoad defines the position of the load along the beam as well as its value. Here, SingleLoad is defined at 4000 mm, what applies to the middle of the beam. But every other position within the beam-span (0 mm < \(L\) < 8000 mm) is possible.

This SingleLoad (i.e. load_1) is passed to SingleSpanSingleLoads in a list, together with the length of the beam.

maximum_moment() computes then the maximum Moment.

>>> from m_n_kappa import SingleSpanSingleLoads, SingleLoad
>>> load_1 = SingleLoad(position_in_beam=4000, value=10)
>>> single = SingleSpanSingleLoads(length=8000, loads=[load_1])
>>> single.maximum_moment
20000.0

The transversal shear at the supports is given by transversal_shear_support_left() for the left support and transversal_shear_support_right() for the right support.

>>> single.transversal_shear_support_left, single.transversal_shear_support_right
(5.0, -5.0)

The summarized loading is given by loading().

>>> single.loading
10.0

Of course, the moment may be computed at every position along the beam.

>>> single.moment(at_position=2000)
10000.0

As well as the transversal shear.

>>> single.transversal_shear(at_position=2000)
5.0

This allows to compute the course of the moment over the length of the beam.

import pandas as pd
import altair as alt

positions = [index*100 for index in range(0, 81, 1)]
moments = [single.moment(at_position=position) for position in positions]

df_moments = pd.DataFrame({'moments': moments, 'positions': positions})

alt.Chart(df_moments, height=100.0, background='#00000000').mark_line().encode(
   x=alt.X('positions', title='Position [mm]'),
   y=alt.Y('moments', title='Moment [Nmm]', scale=alt.Scale(reverse=True)))

As well as the transversal shear over the length of the beam.

shear = [single.transversal_shear(at_position=position) for position in positions]

df_shear = pd.DataFrame({'shear': shear, 'positions':  positions})

alt.Chart(df_shear, height=100.0, background='#00000000').mark_line().encode(
   x=alt.X('positions', title='Position [mm]'),
   y=alt.Y('shear', title='Transversal shear [N]'))

SingleSpanSingleLoads accepts more than one SingleLoad as load-argument. Therefore, more complicated load-scenarios are possible as only a single load.

Uniform loading#

The SingleSpanUniformLoad class follows a similar procedure as SingleSpanSingleLoads, but no definition of SingleLoad is needed. The load is passed directly as argument to the class also with the length of the beam.

The maximum moment is then given by maximum_moment

>>> from m_n_kappa import SingleSpanUniformLoad
>>> uniform = SingleSpanUniformLoad(length=8000, load=10.0)
>>> uniform.maximum_moment
80000000.0

Transversal shear at the support is given by transversal_shear_support_left and transversal_shear_support_right.

>>> uniform.transversal_shear_support_left, uniform.transversal_shear_support_right
(40000.0, -40000.0)

The summarized loading is given as follows.

>>> uniform.loading
80000.0

Whereas, the moment is computed by moment passing the position where the moment needs to be obtained.

>>> uniform.moment(at_position=2000)
60000000.0

Similarly for transversal shear using transversal_shear, what applies to 0.0 in case of uniformly loaded beam.

>>> uniform.transversal_shear(at_position=4000)
0.0

moment allows to plot the moment along the beam.

import pandas as pd
import altair as alt

positions = [index*100 for index in range(0, 81, 1)]
moments = [uniform.moment(at_position=position)*0.001*0.001 for position in positions]

df_moments = pd.DataFrame({'moments': moments, 'positions': positions})

alt.Chart(df_moments, height=100.0, background='#00000000').mark_line().encode(
   x=alt.X('positions', title='Position [mm]'),
   y=alt.Y('moments', title='Moment [kNm]', scale=alt.Scale(reverse=True)))

And the transversal shear is given as follows.

shear = [uniform.transversal_shear(at_position=position) for position in positions]

df_shear = pd.DataFrame({'shear': shear, 'positions': positions})

alt.Chart(df_shear, height=100.0, background='#00000000').mark_line().encode(
   x=alt.X('positions', title='Position [mm]'),
   y=alt.Y('shear', title='Transversal shear [N]'))

See also

Loading : Theory to the given functions

The SingleSpan class has SingleSpanSingleLoads and SingleSpanUniformLoad implemented.

The invoked class depends on the argument that is passed. In case loads is passed, then SingleSpanSingleLoads is initialized. SingleSpanUniformLoad is initialized in case uniform_load is passed. In each case the length of the beam must be passed.

>>> from m_n_kappa import SingleSpan
>>> single = SingleSpan(length=8000, loads=[load_1])
>>> uniform = SingleSpan(length=8000, uniform_load=10)
>>> single.maximum_moment, uniform.maximum_moment
(20000.0, 80000000.0)