Changelog

This page tracks notable changes across GenSec releases.

v0.2.0 (current)

Performance overhaul and architecture refinements.

Performance

  • Batch integration (integrate_batch()): evaluate thousands of strain configurations in a single vectorized NumPy call. Eliminates Python-loop overhead in all capacity generators.

  • Mega-batch with chunking: biaxial generators (generate_biaxial, generate_mx_my) concatenate all curvature directions into a single flat array and integrate in large chunks, reducing per-call overhead by 10–70×.

  • Analytical tangent stiffness (integrate_with_tangent()): compute internal forces and the 3×3 tangent matrix in one pass, halving the cost of each Newton-Raphson iteration.

  • Optional Numba JIT: when numba is installed (pip install gensec[fast]), stress and tangent kernels for Concrete and Steel are JIT-compiled to native code (~2–3× speed-up on large fiber arrays).

  • Measured end-to-end improvement: 15–40× faster on typical biaxial analyses.

Materials

  • tangent(eps) and tangent_array(eps) added to the abstract Material interface. Closed-form implementations for Concrete, Steel, and TabulatedMaterial. Finite-difference fallback in the base class for custom materials.

  • stress_array now accepts arrays of any shape (1-D, 2-D, …) across all built-in materials.

Geometry

  • RectSection is now a factory function returning a GenericSection directly, eliminating the former wrapper class with its 15 delegated properties.

  • GenericSection accepts optional n_grid_x / n_grid_y parameters for explicit grid control.

  • GenericSection exposes dx and dy attributes.

  • Isotropic grid by default: when n_fibers_x is omitted or set to 1, the grid cell size is derived from n_fibers_y (approximately square cells).

Verification

  • VerificationEngine auto-disables eta_2D / eta_path_2D when the resistance domain is 2-D (no My data), preventing QHull errors on degenerate contours.

  • _get_contour caches failures (degenerate contours at extreme N levels) as None to avoid expensive retries.

Output flags

  • New YAML flags: generate_moment_curvature, generate_polar_ductility, generate_3d_moment_curvature (all default true for backward compatibility).

  • Setting all three to false skips the computationally expensive moment-curvature pipeline entirely.

v0.1.0

Phase 2 complete: biaxial bending and generic sections.

  • Generic section with arbitrary Shapely polygons and automatic fiber meshing (grid and triangular).

  • Parametric primitives: rectangle, circle, annulus, T, inverted T, H, box, single-tee slab, double-tee slab.

  • Biaxial bending: full \((N, M_x, M_y)\) resistance surface generation via curvature-angle scanning.

  • \(M_x\text{-}M_y\) contour diagrams at constant \(N\).

  • 3-D resistance surface visualization.

  • Convex-hull demand verification in both 2-D and 3-D modes.

  • Combinations: named groups of demand triples with envelope \(\eta_{\max}\).

  • EN 10025-2 structural steel with thickness-dependent properties.

  • Multi-material bulk support for composite sections.

  • Per-fiber post-processing: strain/stress extraction and section state plots.

  • 106 tests covering materials, solvers, infrastructure, and biaxial analysis.

v0.0.1

Phase 0 + Phase 1: uniaxial bending for rectangular sections.

  • Parabola-rectangle concrete (EC2 / NTC 2018).

  • Elastic-plastic steel with optional hardening.

  • Fiber integrator with Newton–Raphson inverse solver.

  • \(N\text{-}M\) interaction diagram via EC2 pivot method.

  • YAML-driven input.

  • CLI and Python API.

  • EC2 Table 3.1 property computation (French National Annex).

  • Six analytical validation test cases, all passing within 1 %.