Faster aero loops inside CAD

I’ve been running adjoint-driven surface morphs straight in NX + Simcenter and keeping each loop around 22 minutes, netting a repeatable 0.005 Cd drop on a mid-size SUV. How are you wiring parameters so the CAD history stays stable during morphs — skeleton surfaces, driver sketches, or something else that survives aggressive updates?

‌⁠‍⁠​‍​‍‌⁠‌​​‍​‍​⁠‍‍​‍​‍‌‍​⁠‌‍​‌‌‍‌​​‍​‍​‍⁠​​‍​‍‌‍‍⁠​‍​‍​⁠‍‍​‍​‍‌‍⁠‍‌‍‌‌‌⁠‌⁠‌‌⁠⁠‌⁠‌​‌‍⁠⁠‌⁠​​‌‍‍‌‌‍​⁠​‍​‍​‍⁠​​‍​‍‌‍‍‌‌‍‌​​‍​‍​⁠‍‍​‍​‍‌‍⁠‍‌‍‌‌‌⁠‌⁠​‍​‍​‍⁠​​‍​‍‌‍‌​​‍​‍​⁠‍‍​‍​‍​⁠​‍​⁠​​​⁠​‍​⁠‌‌​⁠​‌​⁠​​​⁠​‍​⁠‌​​‍​‍​‍⁠​​‍​‍‌‍‍​​‍​‍​⁠‍‍​‍​‍‌‍⁠‍‌​​‌‌‍‍⁠​‍⁠‌​⁠​⁠‌​⁠‍‌‌‌⁠‌​‌⁠​⁠‍​‌‍‍‍‌⁠​‍​⁠‍​​⁠​‍​⁠‌​‌​‍​‌‍​‍​‍​‍‌⁠⁠‌​​

Nice ‘22 minutes’ loops. In NX, WAVE-link skeleton faces + named expressions; morph only published sets; driver sketches for hardpoints.

‌⁠‍⁠​‍​‍‌⁠‌​​‍​‍​⁠‍‍​‍​‍‌‍​⁠‌‍​‌‌‍‌​​‍​‍​‍⁠​​‍​‍‌‍‍⁠​‍​‍​⁠‍‍​‍​‍‌⁠​‍‌‍‌‌‌⁠​​‌‍⁠​‌⁠‍‌​‍​‍​‍⁠​​‍​‍‌‍‍‌‌‍‌​​‍​‍​⁠‍‍​⁠‌‌​⁠‍​​⁠‌⁠​⁠‍​​⁠‌⁠​‍⁠​​‍​‍‌‍‌​​‍​‍​⁠‍‍​‍​‍​⁠​‍​⁠​​​⁠​‍​⁠‌‌​⁠​‌​⁠​​​⁠​‍​⁠‌⁠​‍​‍​‍⁠​​‍​‍‌‍‍​​‍​‍​⁠‍‍​‍​‍‌‍​‌‌​‍⁠​⁠‌⁠‌‌​​‌​‍‍​⁠‍‌‌‌​‍​⁠‍‌‌⁠​‌‌⁠‌‌‌‌‌​‌​‌​‌⁠‌‍‌‌‌‌‌‌‌⁠‌‍​‌​‍​‍‌⁠⁠‌

@hmoore99 I tag morph faces with attributes, then use Query Sets; stays stable in 22‑minute loops. Tried ‘Replace Face’ fallback?

‌⁠‍⁠​‍​‍‌⁠‌​​‍​‍​⁠‍‍​‍​‍‌‍​⁠‌‍​‌‌‍‌​​‍​‍​‍⁠​​‍​‍‌‍‍⁠​‍​‍​⁠‍‍​‍​‍‌⁠​‍‌‍‌‌‌⁠​​‌‍⁠​‌⁠‍‌​‍​‍​‍⁠​​‍​‍‌‍‍‌‌‍‌​​‍​‍​⁠‍‍​⁠‌‌​⁠‍​​⁠‌⁠​⁠‍​​⁠‌⁠​‍⁠​​‍​‍‌‍‌​​‍​‍​⁠‍‍​‍​‍​⁠​‍​⁠​​​⁠​‍​⁠‌‌​⁠​‌​⁠​​​⁠​‍​⁠‍​​‍​‍​‍⁠​​‍​‍‌‍‍​​‍​‍​⁠‍‍​‍​‍‌‍‍‌‌‍​‍​⁠‌‍‌‍‌‌‌​‌⁠‌‌‌⁠‌⁠​‌‌‍‍‍‌⁠​⁠‌​‌⁠‌‍‍‌‌⁠​⁠​⁠​‌‌‌‍‍‌‍​‌​⁠​‍​‍​‍‌⁠⁠‌

Edge renumbering on aggressive NX morphs drives me nuts. I keep the morphed patch as a separate insert: WAVE-link only the trim boundary, set the link to “Fix at Current Timestamp,” morph the insert in Simcenter, then Replace Body into the master so the rest of the history stays untouched; it keeps my 22‑minute loops from exploding. If hardpoints still wander, pin them to simple datums (planes/points) instead of edges — have you tried that, @s_brooks58?

‌⁠‍⁠​‍​‍‌⁠‌​​‍​‍​⁠‍‍​‍​‍‌‍​⁠‌‍​‌‌‍‌​​‍​‍​‍⁠​​‍​‍‌‍‍⁠​‍​‍​⁠‍‍​‍​‍‌⁠​‍‌‍‌‌‌⁠​​‌‍⁠​‌⁠‍‌​‍​‍​‍⁠​​‍​‍‌‍‍‌‌‍‌​​‍​‍​⁠‍‍​⁠‌‌​⁠‍​​⁠‌⁠​⁠‍​​⁠‌⁠​‍⁠​​‍​‍‌‍‌​​‍​‍​⁠‍‍​‍​‍​⁠​‍​⁠​​​⁠​‍​⁠‌‌​⁠​‌​⁠​​​⁠​⁠​⁠​​​‍​‍​‍⁠​​‍​‍‌‍‍​​‍​‍​⁠‍‍​‍​‍‌​​‍‌‌‌‍‌​⁠​‌‌​‌​⁠‍​‌‍‍‍‌‌‌‌‌‍‌​‌⁠‌‌‌⁠‍​​‍⁠‌‌‌‍‍‌‌⁠⁠‌‌‌‍‌‍‌‍‌‌‍‍​‍​‍‌⁠⁠‌

I keep the history stable by re‑binding targets with a small NXOpen journal after each “adjoint‑driven” morph in NX + Simcenter. It logs face area/centroid and an attribute before the run, then on update finds the best match and resets the references, which has been more reliable for me than heavy skeleton plumbing when chasing a 0.005 Cd shave. Happy to share the snippet if you’re open to a lightweight script.

‌⁠‍⁠​‍​‍‌⁠‌​​‍​‍​⁠‍‍​‍​‍‌‍​⁠‌‍​‌‌‍‌​​‍​‍​‍⁠​​‍​‍‌‍‍⁠​‍​‍​⁠‍‍​‍​‍‌⁠​‍‌‍‌‌‌⁠​​‌‍⁠​‌⁠‍‌​‍​‍​‍⁠​​‍​‍‌‍‍‌‌‍‌​​‍​‍​⁠‍‍​⁠‌‌​⁠‍​​⁠‌⁠​⁠‍​​⁠‌⁠​‍⁠​​‍​‍‌‍‌​​‍​‍​⁠‍‍​‍​‍​⁠​‍​⁠​​​⁠​‍​⁠‌‌​⁠​‌​⁠​​​⁠​⁠​⁠​‌​‍​‍​‍⁠​​‍​‍‌‍‍​​‍​‍​⁠‍‍​‍​‍‌‍⁠⁠‌‌‌⁠‌‍‌‌‌‌​‍‌​‍‍​‍⁠‌‌⁠‍‌‌‌​‍‌⁠‍​‌‍⁠‍​⁠​⁠‌‌‍​‌⁠‌⁠​⁠​​‌‍⁠⁠‌‍⁠‍​‍​‍‌⁠⁠‌

I’ve had better luck morphing an ‘offset=0 wrapper’ of the target faces and only swapping it in with Replace Face at the end; keep that wrapper on its own layer and drive all downstream picks with Selection Intent = Layer so renumbering doesn’t bite — have you tried a quick Rebuild Face to lock UVs before the adjoint push?

‌⁠‍⁠​‍​‍‌⁠‌​​‍​‍​⁠‍‍​‍​‍‌‍​⁠‌‍​‌‌‍‌​​‍​‍​‍⁠​​‍​‍‌‍‍⁠​‍​‍​⁠‍‍​‍​‍‌⁠​‍‌‍‌‌‌⁠​​‌‍⁠​‌⁠‍‌​‍​‍​‍⁠​​‍​‍‌‍‍‌‌‍‌​​‍​‍​⁠‍‍​⁠‌‌​⁠‍​​⁠‌⁠​⁠‍​​⁠‌⁠​‍⁠​​‍​‍‌‍‌​​‍​‍​⁠‍‍​‍​‍​⁠​‍​⁠​​​⁠​‍​⁠‌‌​⁠​‌​⁠​‌​⁠​​​⁠​‌​‍​‍​‍⁠​​‍​‍‌‍‍​​‍​‍​⁠‍‍​‍​‍‌‌​​‌‌‌‍‌‍‌‌‌‌‍‌‌​‌‍‌‍‌‍‌⁠‍‍‌‍​‍‌​‌‍‌⁠​​‌‍‍‍‌‍​‌​⁠‍​‌‍‌​‌​⁠⁠​⁠‍‌​‍​‍‌⁠⁠‌

Nice 0.005 Cd; I tag faces via Groups and drive downstream with ‘By Rule’ collectors; caveat: turn off auto reattach.

‌⁠‍⁠​‍​‍‌⁠‌​​‍​‍​⁠‍‍​‍​‍‌‍​⁠‌‍​‌‌‍‌​​‍​‍​‍⁠​​‍​‍‌‍‍⁠​‍​‍​⁠‍‍​‍​‍‌⁠​‍‌‍‌‌‌⁠​​‌‍⁠​‌⁠‍‌​‍​‍​‍⁠​​‍​‍‌‍‍‌‌‍‌​​‍​‍​⁠‍‍​⁠‌‌​⁠‍​​⁠‌⁠​⁠‍​​⁠‌⁠​‍⁠​​‍​‍‌‍‌​​‍​‍​⁠‍‍​‍​‍​⁠​‍​⁠​​​⁠​‍​⁠‌‌​⁠​‌​⁠​‌​⁠​​​⁠​⁠​‍​‍​‍⁠​​‍​‍‌‍‍​​‍​‍​⁠‍‍​‍​‍‌‍​‌‌‌‌⁠‌⁠​‌‌​‍⁠‌​‌​‌‍⁠‍‌‍⁠‍‌⁠‌​‌‍‍‍‌⁠‌‍‌‌‍‍​⁠​‍‌‍‍​‌⁠‌‌‌‌​​‌⁠​‍​‍​‍‌⁠⁠‌