Skip to content

feat: add ACI 318-19 concrete and reinforcement material properties#343

Open
gabe-kafka wants to merge 1 commit intofib-international:devfrom
gabe-kafka:feature/aci318-material-properties
Open

feat: add ACI 318-19 concrete and reinforcement material properties#343
gabe-kafka wants to merge 1 commit intofib-international:devfrom
gabe-kafka:feature/aci318-material-properties

Conversation

@gabe-kafka
Copy link
Copy Markdown

Summary

Adds the first American design code to the library — ACI 318-19 material properties from Chapters 19, 20, and 22.

  • Concrete: Ec, fr, beta1, eps_cu, alpha1, fct, lambda_factor — all as standalone functions following the existing EC2/MC2010 patterns
  • Reinforcement: Es, fy_design, epsyd, reinforcement_grade_props (ASTM grade lookup)
  • Material classes: ConcreteACI318 and ReinforcementACI318 with constitutive law support (elastic, parabola-rectangle, bilinear for concrete; elastic, elastic-plastic for steel)
  • 73 new tests, all passing. Zero regressions on the existing 10,113 tests.

All units are SI (MPa, kg/m³) to match library conventions.

ACI vs Eurocode safety philosophy

ACI 318 uses LRFD — strength reduction factors (φ) are applied at member capacity level, not material level. The material classes default gamma_c=1.0 and gamma_s=1.0. This is documented in class docstrings. See discussion in #187 about long-term architectural implications.

Scope

Material properties only. No member design (shear, flexure, etc.) in this PR — that can follow once the architecture question in #187 is resolved.

Closes #187 (partially — first code added, more can follow).

Test plan

  • make form — ruff formatting passes
  • make lint — ruff linting passes
  • make test — 10,186 passed (73 new + 10,113 existing), 1 pre-existing failure in EC2 2023
  • Round-trip: set_design_code('aci318')create_concrete(fck=28).Ec returns correct value
  • Factory dispatch works for both concrete and reinforcement
  • All three constitutive laws instantiate correctly

Add the first American design code to the library. Implements
material properties from ACI 318-19 Chapters 19, 20, and 22:

Concrete (codes/aci318):
- Ec: modulus of elasticity (Table 19.2.2.1)
- fr: modulus of rupture (Eq. 19.2.3.1)
- beta1: Whitney stress block depth factor (Table 22.2.2.4.3)
- eps_cu: ultimate concrete strain (Section 22.2.2.1)
- alpha1: stress block intensity (Section 22.2.2.4.1)
- fct: splitting tensile strength (Section 19.2.4.3)
- lambda_factor: lightweight modification factor (Table 19.2.4.2)

Reinforcement (codes/aci318):
- Es: modulus of elasticity (Section 20.2.2.2)
- fy_design: design yield strength
- epsyd: yield strain
- reinforcement_grade_props: ASTM grade lookup (Table 20.2.2.4a)

Material classes:
- ConcreteACI318 with elastic, parabola-rectangle, and bilinear
  constitutive laws
- ReinforcementACI318 with elastic and elastic-plastic laws

ACI 318 uses LRFD (strength reduction factors on member capacity)
rather than partial safety factors on material strength. Material
classes default gamma_c=1.0 and gamma_s=1.0 accordingly.

Ref: fib-international#187
@mortenengen mortenengen moved this to New ✨ in PR tracker Apr 9, 2026
@mortenengen mortenengen added the enhancement New feature or request label Apr 9, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

Status: New ✨

Development

Successfully merging this pull request may close these issues.

2 participants