Antoine
ec5e42d733
feat: Add M1 mirror Zernike optimization with correct RMS calculation
Major improvements to telescope mirror optimization workflow:
Assembly FEM Workflow (solve_simulation.py):
- Fixed multi-part assembly FEM update sequence
- Use ImportFromFile() for reliable expression updates
- Add DuplicateNodesCheckBuilder with MergeOccurrenceNodes=True
- Switch to Foreground solve mode for multi-subcase solutions
- Add detailed logging and diagnostics for node merge operations
Zernike RMS Calculation:
- CRITICAL FIX: Use correct surface-based RMS formula
- Global RMS = sqrt(mean(W^2)) from actual WFE values
- Filtered RMS = sqrt(mean(W_residual^2)) after removing low-order fit
- This matches zernike_Post_Script_NX.py (optical standard)
- Previous WRONG formula was: sqrt(sum(coeffs^2))
- Add compute_rms_filter_j1to3() for optician workload metric
Subcase Mapping:
- Fix subcase mapping to match NX model:
- Subcase 1 = 90 deg (polishing orientation)
- Subcase 2 = 20 deg (reference)
- Subcase 3 = 40 deg
- Subcase 4 = 60 deg
New Study: M1 Mirror Zernike Optimization
- Full optimization config with 11 design variables
- 3 objectives: rel_filtered_rms_40_vs_20, rel_filtered_rms_60_vs_20, mfg_90_optician_workload
- Neural surrogate support for accelerated optimization
Documentation:
- Update ZERNIKE_INTEGRATION.md with correct RMS formula
- Update ASSEMBLY_FEM_WORKFLOW.md with expression import and node merge details
- Add reference scripts from original zernike_Post_Script_NX.py
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-28 16:30:15 -05:00
..
2025-11-26 12:01:50 -05:00
2025-11-28 16:30:15 -05:00
2025-11-16 13:35:41 -05:00
2025-11-17 20:48:40 -05:00
2025-11-25 19:23:58 -05:00
2025-11-25 19:23:58 -05:00
2025-11-25 19:23:58 -05:00
2025-11-28 16:30:15 -05:00
2025-11-16 13:35:41 -05:00