Anisotropic (Transversely Isotropic) Topology Optimization
Overview
Layered composites, wood and 3D-printed parts with a build direction are anisotropic: they are stiffer along one axis than perpendicular to it. For a transversely isotropic material the stiffness is set by five independent constants — E_par, E_perp, ν_par, ν_perp, G_par (parallel/perpendicular to the fibre axis). AnisotropicTopOpt optimizes the density under this anisotropic elasticity, so the layout aligns with the strong direction.
using RasmahA fibre-reinforced cantilever
Clamp and pull a cube whose material is stiffer along x (E_par > E_perp); the optimizer exploits the anisotropy.
m = tetrahedralize_box(1.0, 1.0, 1.0, 4, 4, 4)
n = size(m.nodes, 2)
fixed = Int[]
for i in 1:n
m.nodes[1, i] < 1e-6 && append!(fixed, 3i - 2, 3i - 1, 3i)
end
loads = zeros(3n)
for i in 1:n
m.nodes[1, i] > 0.999 && (loads[3i - 2] = 1e6)
end
x, hist = solve(AnisotropicTopOpt(), m, Material(youngs_modulus = 1e9, poisson_ratio = 0.3);
fixed = fixed, loads = loads, E_par = 2e9, E_perp = 1e9,
volfrac = 0.5, max_iter = 10)([0.6926907355831928, 0.5703441313481037, 0.48030694793764034, 0.48030694793764034, 0.62753057661745, 0.6920634438512278, 0.6568368187907901, 0.5167160672192057, 0.4758513693932075, 0.4752912933396743 … 0.658066702065966, 0.658563334596276, 0.539838057870024, 0.4526934437055576, 0.4459991675435654, 0.593911168032892, 0.6866359881188828, 0.6875278566470231, 0.5853319510394276, 0.44854283053661514], [5.175830112763331e6, 3.5734631908575236e6, 5.890131974259985e6, 5.049632713876429e6, 4.866269418760659e6, 4.812972115504249e6, 4.764586321389277e6, 4.706932908163616e6, 4.634475552402393e6, 4.540584713795812e6])
Verification — compliance drops
The compliance must fall from the uniform baseline, and the volume constraint is met:
println("compliance: ", round(hist[1]; digits = 3), " → ", round(hist[end]; digits = 3))
println("volume fraction ≈ 0.5: ", round(sum(x) / length(x); digits = 3))compliance: 5.175830113e6 → 4.540584714e6
volume fraction ≈ 0.5: 0.499
vtk(m; field = x, fieldname = "density (anisotropic)", edges = true)Next steps
- Materials — orthotropic and transversely isotropic materials.
- Neural, pressure & fiber — fiber-angle optimization.
