Hi everyone,
I am trying to perform a sizing/layout topology optimization of bolts using 1D elements (PBEAML). My goal is to reduce the number of bolts based on the maximum allowable axial load capacity of each individual bolt.
My Setup:
- To avoid numeric singularities, I split each bolt into two parts connected in series:
- Design Part: A long beam element controlled via standard topology optimization (
DTPL). - Sensor Part: A short, separate beam element defined as a Non-Design property (not included in
DTPL).
- Objective: Minimize global volume/mass fraction (
VOLUMEFRAC / MASSFRAC). - Constraint: Upper bound limit on the axial load capacity of the bolt, measured at the Non-Design Sensor element.
The Problem:
No matter if I use a FORCE response or a STRESS response on the Non-Design sensor element, the optimizer completely ignores the constraint. In the .out file, the Maximum Constraint Violation percentage stays exactly constant to the last decimal place over all iterations (e.g., constantly at 115.727%), while the objective function steadily decreases. It is obvious that OptiStruct evaluates the sensitivities/gradients of this response with respect to the DTPL design variables as exactly zero.Mathematically, since they are in series, the axial force in the design element and the sensor element must be identical. Modifying the density of the design element should dynamically shift the load path and alter the force in the sensor, providing a valid gradient.Is this a known hard-coded solver limitation where 1D element stress/force responses cannot be mathematically coupled back to DTPL cards, even if the response is placed on a completely separate, Non-Design property?Are there any elegant workarounds (e.g., using relative displacement DISP grids via DRESP2 to capture the compliance/force of the sensor)?
Thanks in advance for your help!
Best regards,
QETU