Skip to content

Siddardth7/Virtual-Composite-Design-Optimization

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Composite Laminate Analysis & Layup Optimization Toolkit

A Python implementation of Classical Laminate Theory (CLT) for parametric analysis and optimization of composite laminates. Computes full ABD stiffness matrices, ply-level stress/strain recovery, Tsai-Wu failure indices, and Navier-series center deflections, then uses a Simulated Annealing optimizer to search for minimum-weight, maximum-stiffness stacking sequences under engineering constraints.

Built to support the design and analysis workflow for the 2024-25 SAMPE Fuselage Competition and general composites coursework at USC.


What This Does

Analysis (src/clt.py, src/main.py):

  • Assembles [A], [B], [D] stiffness matrices for arbitrary symmetric and unsymmetric laminates
  • Solves the coupled mid-plane strain-curvature problem via Schur complement
  • Recovers ply-level strains and stresses in both global (x-y) and local (1-2) axes
  • Computes Tsai-Wu failure index at every ply interface
  • Estimates SSSS plate center deflection via Navier double-sine series
  • Parametric angle sweep: sweeps ply orientation 0°→90° and exports Ex_eff vs angle

Optimization (src/layup_optimizer_sa.py):

  • Simulated Annealing over stacking sequence space (orientations + ply count)
  • Design variables: symmetric half-laminate with variable length
  • Moves: orientation change, ply insertion, ply deletion
  • Constraints: symmetry, balance (equal ±45° count), minimum 10% of each orientation (0°, 90°, ±45°)
  • Objective: minimize 1/D₁₁ + weight (penalty for constraint violations)

Results

Angle sweep on an 8-ply [θ]₈ IM7/8552-equivalent laminate:

θ (deg) Ex_eff (GPa)
0 ~145
45 ~17
90 ~10

The [0/±45/90]s quasi-isotropic baseline shows ~34 GPa effective modulus and satisfies all balance/symmetry constraints automatically.

SA optimizer on 4–40 ply symmetric laminates consistently identifies [−45/0/45/90]s variants as the Pareto-optimal configuration for stiffness-to-weight under competition geometry constraints.


Repository Structure

composite-laminate-clt/
├── src/
│   ├── clt.py                  # Core CLT: Q, Qbar, ABD, ply recovery, Tsai-Wu, Navier
│   ├── main.py                 # Driver: baseline + angle sweep + CSV/plot output
│   ├── utils.py                # Material loader and helper functions
│   ├── layup_optimizer_sa.py   # Simulated Annealing layup optimizer
│   └── compare_clt_fea.py      # CLT vs FEA comparison utilities
├── data/
│   ├── materials.csv           # Material property database (E1, E2, G12, v12, t_ply)
│   └── sweeps/                 # Output CSVs from parametric studies
├── notebooks/
│   └── validation.ipynb        # Validation notebook: CLT vs reference solutions
├── docs/
│   ├── Clt_theory.pdf          # Derivation of CLT equations
│   ├── Clt_theory.tex          # LaTeX source
│   └── Methodology_Notes.md    # Assumptions and validation plan
├── figures/                    # Plots (gitignored, generated by main.py)
├── fea/
│   ├── abaqus_inputs/          # Abaqus .inp files (gitignored)
│   └── results/                # FEA output exports
├── requirements.txt
└── .gitignore

How to Run

pip install -r requirements.txt

# Baseline laminate + angle sweep (generates data/sweeps/ CSVs and figures/)
python src/main.py

# Simulated annealing layup optimizer
python src/layup_optimizer_sa.py

Expected output from main.py:

=== Baseline Laminate =========================================
Stack: [0, 45, -45, 90, 90, -45, 45, 0]
Total thickness t = 1.000 mm
||A|| = 2.034e+08
||B|| = 4.012e-08   (near-zero for symmetric laminate ✓)
SSSS Navier center deflection at q=1 kPa: 0.041823 mm
Saved: data/sweeps/baseline_ply_summary.csv
Saved: data/sweeps/angle_sweep_ex.csv
Saved: figures/angle_sweep_ex.png

Geometry & Load Case

Parameter Value
Plate dimensions 300 mm × 300 mm
Total laminate thickness 1.0 mm
Ply thickness 0.125 mm
Baseline layup [0/+45/−45/90]s (8 plies)
Boundary conditions SSSS (Simply Supported all sides)
Applied load 1 kPa uniform transverse pressure

Material Properties (IM7/8552 equivalent)

Property Symbol Value Unit
Longitudinal modulus E₁ 161 GPa
Transverse modulus E₂ 11.4 GPa
Shear modulus G₁₂ 5.17 GPa
Poisson's ratio ν₁₂ 0.32
Density ρ 1600 kg/m³

CLT Implementation Notes

  • Q matrix: Plane-stress reduced stiffness in principal material axes
  • Q̄ matrix: Closed-form transformation using m = cos(θ), s = sin(θ) trig invariants
  • ABD assembly: Integration over ply z-interfaces; B → 0 confirmed for symmetric laminates
  • Mid-plane solve: Schur complement (faster and better-conditioned than 6×6 direct solve)
  • Navier series: Convergence verified with odd m,n up to 9; ±0.1% change from n=5 to n=9
  • Tsai-Wu: Uses F₁₂ = −0.5√(F₁₁·F₂₂) (biaxial strength interaction term)

Dependencies

  • numpy >= 1.24
  • scipy >= 1.10
  • matplotlib >= 3.7
  • pandas >= 2.0

Future Work

  • Implement Hashin failure criteria alongside Tsai-Wu for fiber/matrix mode separation
  • Add progressive failure analysis (ply-by-ply stiffness knockdown after first-ply failure)
  • Extend SA optimizer to multi-objective (stiffness + toughness + cost)
  • Wrap in a Streamlit GUI for interactive layup exploration
  • Validate against published benchmark problems (Reddy, Daniel & Ishai)

References

  • Jones, R.M. (1999). Mechanics of Composite Materials, 2nd ed.
  • Daniel, I.M. & Ishai, O. (2006). Engineering Mechanics of Composite Materials.
  • Tsai, S.W. & Wu, E.M. (1971). "A General Theory of Strength for Anisotropic Materials." Journal of Composite Materials.
  • MIL-HDBK-17; ASTM D3039, D7264, D6641.

About

CLT toolkit + Simulated Annealing layup optimizer: ABD matrices, Tsai-Wu failure index, Navier deflection, angle sweep parametrics. Identifies minimum-weight, maximum-stiffness symmetric balanced stacking sequences.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors