Materials and sections

A Material carries E (Young's modulus), G (shear modulus), ρ (density), and ν (Poisson's ratio):

steel  = Material(200e6, 77e6, 8.0, 0.3)   # explicit G
timber = Material(13.1e6, 560.0, 0.35)     # isotropic: G derived as E / 2(1+ν)
Material
  E = 1.31e7  [force/length²]  (Young's modulus — normal stiffness)
  G = 4.851851851851852e6  [force/length²]  (shear modulus)
  ρ = 560.0  [mass/length³]   (mass density)
  ν = 0.35                   (Poisson's ratio — transverse strain ratio)

Sections implement a five-accessor contract — EA, EIx, EIy, GJ, ρA — and the analysis never reads anything else. Two implementations:

Section — geometry plus material

The standard workflow:

wshape = Section(steel, 1e-2, 8e-5, 3e-5, 5e-7)   # A, Ix (strong), Iy (weak), J
bar    = Section(steel, 5e-3)                     # axial-only: for truss members
EA(wshape), EIx(wshape)                           # derived rigidity products
(2.0e6, 16000.000000000002)

Mismatches are caught early: assigning an axial-only section to a frame element that has moment connections raises a descriptive error at process! time, instead of a singular factorization (or a member that silently carries no bending).

RigiditySection — rigidity products directly

RigiditySection stores the rigidity products directly. This is the natural type for cracked/effective concrete stiffness: linear analysis only ever consumes EA, EIx, EIy, GJ, so an equivalent-stiffness section loses nothing.

Ec, Ig, Ag = 30e6, 8e-4, 0.12
cracked_beam = RigiditySection(
    Ec * Ag,                          # EA
    0.35 * Ec * Ig, 0.35 * Ec * Ig,   # EIx, EIy — ACI 318 cracked-beam modifier
    0.10 * Ec * Ig,                   # GJ
    2.4 * Ag)                         # ρA: mass per length, stored explicitly
RigiditySection  (effective rigidities stored directly)
  EA  = 3.6e6  [force]          (axial rigidity)
  EIx = 8400.0  [force·length²]  (flexural rigidity, strong axis)
  EIy = 8400.0  [force·length²]  (flexural rigidity, weak axis)
  GJ  = 2400.0  [force·length²]  (torsional rigidity)
  ρA  = 0.288  [mass/length]    (mass per unit length)

Any element accepts either type interchangeably.