Simulation Case study

Suspension upright: one design, every load case

A part optimized for a single load case looks efficient, then turns out weak when the load changes direction. Here is the same solver, the same mass, two answers.

Material layout optimized for the bump case only
Baseline: optimized for the 3g bump case only.
Material layout optimized for the worst of bump, braking and cornering
All cases: minimizes the worst of bump, braking and cornering (p-norm min-max compliance).

2D plane-stress simulation of a synthetic part. Not a physical test. 3D solves are in development. Density maps are the solver's own output fields, rendered without retouching.

Problem

A suspension upright sees a 3g bump, hard braking and cornering. A part optimized only for the bump looks efficient but is weak in the other cases.

Setup

  • 260 × 260 mm design space, 40 mm thick, 4140 steel
  • hub bore and upper/lower arm mounts as hard points
  • 35% material fraction, 120 × 120 plane-stress elements
  • three load cases: bump 3g, braking, cornering
  • SIMP with optimality-criteria updates, density filter, p-norm min-max over the load cases
  • about one minute per solve

Result, same mass (8.69 kg)

Simulationvs the bump-only baseline
about 41%stiffer in the worst load case (29% lower worst-case compliance), same 8.69 kg mass
14%lower peak von Mises stress (58.9 to 50.9 MPa)
4.2x → 4.9xmargin to the material's endurance limit

8.69 kg is 59% lighter than a solid block of the same envelope (21.2 kg).

Per load case (simulation)
Load casePeak von Mises, baseline (MPa)Peak von Mises, all cases (MPa)Compliance, baselineCompliance, all cases
bump 3g32.650.9530779
braking27.429.2244274
cornering58.931.514541032

The baseline wins on the bump case it was built for and loses badly on cornering. The all-cases part gives up a little bump stiffness to cut the worst case. Lower compliance is stiffer.

The spec that drove it

This is the contract format: you own it, the solver works only inside it. Coordinates are fractions of the envelope. The load values are synthetic.

{
  "name": "Demo upright, front-left (synthetic)",
  "note": "Design-domain spec: the CLIENT supplies this. Engine optimizes inside it. Coords are fractions (0..1) of the bounding envelope; a real frame maps hard-point mm -> fractions.",
  "units": "mm_N_MPa",
  "domain": { "width": 260, "height": 260, "thickness": 40, "nelx": 120, "nely": 120 },
  "material": { "name": "4140 steel", "E": 205000, "nu": 0.29, "rho_kg_mm3": 7.85e-6, "sigma_endurance": 250 },
  "optimization": { "volfrac": 0.35, "penal": 3.0, "rmin": 3.5, "maxiter": 60, "p_norm": 8.0 },
  "hard_points": [
    { "id": "hub",  "type": "bore", "cx": 0.60, "cy": 0.50, "r_inner": 0.17, "r_outer": 0.235, "role": "load_surface" },
    { "id": "uca",  "type": "pad",  "box": [0.10, 0.30, 0.84, 0.98], "role": "anchor" },
    { "id": "lca",  "type": "pad",  "box": [0.10, 0.30, 0.02, 0.16], "role": "anchor" }
  ],
  "keep_out": [],
  "load_cases": [
    { "label": "bump 3g",   "at": "hub", "Fx": 0,      "Fy": 45000, "M": 0      },
    { "label": "braking",   "at": "hub", "Fx": -25000, "Fy": 20000, "M": 0      },
    { "label": "cornering", "at": "hub", "Fx": 0,      "Fy": 15000, "M": 7.0e6  }
  ]
}

Send us a spec.

Envelope, mounting points, keep-outs, material and the loads it has to survive. A sketch and a few numbers are enough to start. We reply with what we can solve, what we need, and a first scope.

Send a spec

Every job is scoped to the part.