Source code for sectionproperties.pre.library.timber_sections

"""Timber sections library."""

from __future__ import annotations

import sectionproperties.pre.geometry as geometry
import sectionproperties.pre.library.primitive_sections as primitive_sections
import sectionproperties.pre.pre as pre


[docs] def clt_rectangular_section( d: list[float], layer_mat: list[pre.Material], b: float, ) -> geometry.CompoundGeometry: """Constructs a CLT rectangular section. Constructs a CLT rectangular section, with layer depths ``d``, layer materials ``layer_mat``, and width ``b``. Args: d: CLT layer section thickness layer_mat: A list of timber materials for each layer (from top to bottom) b: CLT section width Returns: CLT rectangular section geometry Example: The following example creates a 120mm CLT cross-section: .. plot:: :include-source: True :caption: 120mm CLT section geometry from sectionproperties.pre import Material from sectionproperties.pre.library import clt_rectangular_section from sectionproperties.analysis import Section timber0 = Material( name="Timber0", elastic_modulus=9.5e3, poissons_ratio=0.35, density=4.4e-7, yield_strength=5.5, color="burlywood", ) timber90 = Material( name="Timber90", elastic_modulus=317, poissons_ratio=0.35, density=4.4e-7, yield_strength=5.5, color="orange", ) geom = clt_rectangular_section( d=[40, 40, 40], layer_mat=[timber0, timber90, timber0], b=1000 ) geom.create_mesh(mesh_sizes=[0]) # a size of zero creates a coarse mesh Section(geometry=geom).plot_mesh() """ layer_geom: list[geometry.Geometry] = [] for idx in range(len(d)): di = float(d[idx]) layer = layer_mat[idx] timb_mat = layer # create rectangular timber geometry layer = primitive_sections.rectangular_section(d=di, b=b, material=timb_mat) offset = -d[idx] * (idx + 1) layer = layer.shift_section(y_offset=offset) layer_geom.append(layer) # create compound geometry return geometry.CompoundGeometry(geoms=layer_geom)