Creating materials#

The definition of an appropriate material-model is - beside the geometry - another basic component for building a cross-section in m_n_kappa. In succession it is crucial for a successful computation.

For steel-concrete composite structures Concrete, Steel and Reinforcement are pre-defined materials you can use right away. If these materials do not fit your needs. No problem! You can create your own material.

Concrete#

For creating Concrete you can choose between different material-models under compression and under tension.

In any case you have to pass the mean concrete compressive strength f_cm to Concrete

Under compression you may decide if the stress-strain-relationship is Nonlinear, Parabola-Rectangle or Bilinear shaped. This is controlled by argument compression_stress_strain_type. The default-value is compression_stress_strain_type='Nonlinear'.

>>> from m_n_kappa import Concrete
>>> nonlinear_no_tension = Concrete(f_cm=30.0, use_tension=False)
>>> parabola_no_tension = Concrete(f_cm=30.0, use_tension=False,
...                                compression_stress_strain_type='Parabola')
>>> bilinear_no_tension = Concrete(f_cm=30.0, use_tension=False,
...                                compression_stress_strain_type='Bilinear')
../_images/material_concrete_nonlinear-light.svg
../_images/material_concrete_nonlinear-dark.svg

Nonlinear stress-strain-relationship of concrete under compression acc. EN 1992-1-1 (Default)#

../_images/material_concrete_parabola_rectangle-light.svg
../_images/material_concrete_parabola_rectangle-dark.svg

Parabola-Rectangle stress-strain-relationship of concrete under compression acc. EN 1992-1-1#

../_images/material_concrete_bilinear-light.svg
../_images/material_concrete_bilinear-dark.svg

Bilinear stress-strain-relationship of concrete under compression acc. EN 1992-1-1#

The behaviour under tension is first controlled by argument use_tension. In case use_tension is set to False no tensile capacity is defined, but a single stress-strain-point (0.0 | 10.0) is applied.

>>> nonlinear_no_tension.tension.stress_strain()
[[0.0, 10.0]]

This value makes sure, that m_n_kappa does not stop computing if the concrete starts cracking due exceeding the maximum tensile strain under tensile loading.

If you want to apply concrete tensile behaviour set use_tension=True. The tensile strength may be controlled by argument f_ctm. If not provided it may be computed using the given mean concrete compressive strength.

The tensile behaviour is controlled by argument tension_stress_strain_type. By default tension_stress_strain_type='Default' is set, that leads to an immediate drop of the stresses after the maximum tensile stress has been reached. In contrary tension_stress_strain_type='consider opening behaviour' leads to a post-breaking behaviour as indicated in the following figure.

../_images/material_concrete_tension-light.svg
../_images/material_concrete_tension-dark.svg

Stress-strain-relationship of concrete under tension#

See also

Concrete: Background how stress-strain relationships are computed

Steel#

The stress-strain behaviour of Steel is defined to be isotropic. In consequence it behaves under compression exactly like under tension.

In Steel is initialized without arguments pure elastic behaviour with modulus of elasticity \(E_\mathrm{a}\) defined as E_a=210000.0 [N/mm²] utilizing Hooke’s law <https://en.wikipedia.org/wiki/Hooke%27s_law>_. The maximum strain in this case is set to 1.0.

>>> from m_n_kappa import Steel
>>> elastic_steel = Steel()
>>> for point in elastic_steel.stress_strain:
...     print(point.stress, point.strain)
-210000.0 -1.0
-0.0 -0.0
210000.0 1.0

If you want to apply bi-linear ideal-plastic stress-strain behaviour of steel you must pass the yield strength f_y as well as the failure_strain to Steel.

>>> bilinear_steel = Steel(f_y=355, failure_strain=0.15)
>>> for point in bilinear_steel.stress_strain:
...     print(point.stress, round(point.strain, 4))
-355.0 -0.15
-355.0 -0.0017
-0.0 -0.0
355.0 0.0017
355.0 0.15

If additional harding shall be applied you only have to pass the tensile stress f_u to the Steel.

>>> bilinear_hardening_steel = Steel(f_y=355, f_u=400, failure_strain=0.15)
../_images/material_steel_elastic-light.svg
../_images/material_steel_elastic-dark.svg

Elastic stress-strain-relationship of steel#

../_images/material_steel_bilinear-light.svg
../_images/material_steel_bilinear-dark.svg

Bi-linear stress-strain-relationship of steel#

../_images/material_steel_trilinear-light.svg
../_images/material_steel_trilinear-dark.svg

Bi-linear stress-strain-relationship with hardening of steel#

Reinforcement#

Reinforcement works similar as Steel, but the arguments switch as follows:

  • f_s: yield strength

  • f_su: tensile strength

  • E_s: modulus of elasticity

The following code therefore describes bi-linear behaviour of the reinforcement with hardening. Linear-elastic and ideal-plastic behaviour are of course also possible. Isotropy applies similarly to Steel.

>>> from m_n_kappa import Reinforcement
>>> reinforcement = Reinforcement(f_s=500.0, f_su=550.0, failure_strain=0.25)

Nothing found for your needs? Create your own material!#

Note

You should have a basic understanding of python classes to create your own material.

All materials you create must fulfil the following requirements to have the full functionality for computation in m_n_kappa:

Beside its functionality for computation the inheritance from Material is also needed to merge your material with geometric instances to a Section (see Build a section).

The following example creates a new material called Arbitrary.

from m_n_kappa.material import Material, StressStrain

class Arbitrary(Material):

    """arbitrary material"""

    def __init__(self):
        self._stress_strain = [
            StressStrain(stress=-10.0, strain=-0.001),
            StressStrain(stress=0.0, strain=0.0),
            StressStrain(stress=10.0, strain=0.001),
            StressStrain(stress=10.0, strain=0.01),
        ]

    @property
    def section_type(self):
        return "girder"

Of course, you can produce the stress-strain-relationship programmatically i.e. by using models from literature.

Important

Please be aware that m_n_kappa is not able to compute strains that exceed the maximum strain or fall below the minium strain of a material model. See also Concrete.

If you implemented your Material successfully, please consider Contributing it to help others.