chore: Clean up orphaned files and update .gitignore

- Delete orphaned files: temp_compare.py, run_cleanup.py
- Delete stale cache files from archive/temp_outputs/
- Update .gitignore with .coverage.*, .obsidian/ entries

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
2026-01-07 08:37:58 -05:00
parent 32caa5d05c
commit 18c221a218
14 changed files with 2 additions and 2999 deletions

View File

@@ -1,209 +0,0 @@
# Morning Summary - November 17, 2025
## Good Morning! Here's What Was Done While You Slept 🌅
### Critical Bugs Fixed ✅
**1. Parameter Range Bug (FIXED)**
- **Problem**: Design variables sampled in 0-1 range instead of actual mm values
- **Cause**: LLM returns `bounds: [20, 30]` but code looked for `min`/`max` keys
- **Result**: 0.27mm thickness instead of 27mm!
- **Fix**: Updated [llm_optimization_runner.py](optimization_engine/llm_optimization_runner.py#L205-L211) to parse `bounds` array
- **Test**: Now correctly uses 20-30mm range ✓
**2. Missing Workflow Documentation (FIXED)**
- **Problem**: No record of LLM parsing for transparency
- **Fix**: Auto-save `llm_workflow_config.json` in every study folder
- **Benefit**: Full audit trail of what LLM understood from natural language
**3. FEM Update Bug (Already Fixed Yesterday)**
- Model updates now work correctly
- Each trial produces different FEM results ✓
---
## MAJOR ARCHITECTURE REFACTOR 🏗️
### Your Request:
> "My study folder is a mess, why? I want some order and real structure to develop an insanely good engineering software that evolve with time."
### Problem Identified:
Every substudy was duplicating extractor code in `generated_extractors/` and `generated_hooks/` directories. This polluted study folders with reusable library code instead of keeping them clean with only study-specific data.
### Solution Implemented:
**Centralized Library System** with signature-based deduplication.
#### Before (BAD):
```
studies/my_optimization/
├── generated_extractors/ ❌ Code pollution!
│ ├── extract_displacement.py
│ ├── extract_von_mises_stress.py
│ └── extract_mass.py
├── generated_hooks/ ❌ Code pollution!
├── llm_workflow_config.json
└── optimization_results.json
```
#### After (GOOD):
```
optimization_engine/extractors/ ✓ Core library
├── extract_displacement.py
├── extract_von_mises_stress.py
├── extract_mass.py
└── catalog.json ✓ Tracks all extractors
studies/my_optimization/
├── extractors_manifest.json ✓ Just references!
├── llm_workflow_config.json ✓ Study config
├── optimization_results.json ✓ Results only
└── optimization_history.json ✓ History only
```
### Key Benefits:
1. **Clean Study Folders**: Only metadata (no code!)
2. **Code Reuse**: Same extractor = single file in library
3. **Deduplication**: Automatic via signature matching
4. **Professional**: Production-grade architecture
5. **Evolves**: Library grows, studies stay clean
---
## New Components Created
### 1. ExtractorLibrary (`extractor_library.py`)
Smart library manager with:
- Signature-based deduplication
- Catalog tracking (`catalog.json`)
- Study manifest generation
- `get_or_create()` method (checks library before creating)
### 2. Updated Components
- **ExtractorOrchestrator**: Now uses core library instead of per-study generation
- **LLMOptimizationRunner**: Removed `generated_extractors/` and `generated_hooks/` directory creation
- **Test Suite**: Updated to verify clean study structure
---
## Test Results
### E2E Test: ✅ PASSED (18/18 checks)
**Study folder now contains**:
-`extractors_manifest.json` (references to core library)
-`llm_workflow_config.json` (what LLM understood)
-`optimization_results.json` (best design)
-`optimization_history.json` (all trials)
-`.db` file (Optuna database)
**Core library now contains**:
-`extract_displacement.py` (reusable!)
-`extract_von_mises_stress.py` (reusable!)
-`extract_mass.py` (reusable!)
-`catalog.json` (tracks everything)
**NO MORE**:
-`generated_extractors/` pollution
-`generated_hooks/` pollution
- ❌ Duplicate extractor code
---
## Commits Made
**1. fix: Parse LLM design variable bounds correctly and save workflow config**
- Fixed parameter range bug (20-30mm not 0.2-1.0mm)
- Added workflow config saving for transparency
**2. refactor: Implement centralized extractor library to eliminate code duplication**
- Major architecture refactor
- Centralized library system
- Clean study folders
- 577 lines added, 42 lines removed
- Full documentation in `docs/ARCHITECTURE_REFACTOR_NOV17.md`
---
## Documentation Created
### [ARCHITECTURE_REFACTOR_NOV17.md](docs/ARCHITECTURE_REFACTOR_NOV17.md)
Comprehensive 400+ line document covering:
- Problem statement (your exact feedback)
- Old vs new architecture comparison
- Implementation details
- Migration guide
- Test results
- Next steps (hooks library, versioning, CLI tools)
---
## What This Means for You
### Immediate Benefits:
1. **Clean Studies**: Your study folders are now professional and minimal
2. **Code Reuse**: Core library grows, studies don't duplicate code
3. **Transparency**: Every study has full audit trail (workflow config)
4. **Correct Parameters**: 20-30mm ranges work properly now
### Architecture Quality:
- ✅ Production-grade structure
- ✅ "Insanely good engineering software that evolves with time"
- ✅ Clean separation: studies = data, core = code
- ✅ Foundation for future growth
### Next Steps:
- Same approach for hooks library (planned)
- Add versioning for reproducibility (planned)
- CLI tools for library management (planned)
- Auto-generated documentation (planned)
---
## Quick Status
**Phase 3.2 Week 1**: ✅ COMPLETE
- [OK] Task 1.2: Wire LLMOptimizationRunner to production
- [OK] Task 1.3: Create minimal working example
- [OK] Task 1.4: End-to-end integration test
- [OK] BONUS: Architecture refactor (this work)
**All bugs fixed**: ✅
- Parameter ranges: 20-30mm (not 0.2-1.0mm)
- FEM updates: Each trial different results
- Workflow documentation: Auto-saved
- Study folder pollution: Eliminated
**All tests passing**: ✅
- E2E test: 18/18 checks
- Parameter ranges verified
- Clean study folders verified
- Core library working
---
## Files to Review
1. **docs/ARCHITECTURE_REFACTOR_NOV17.md** - Full architecture explanation
2. **optimization_engine/extractor_library.py** - New library manager
3. **studies/.../extractors_manifest.json** - Example of clean study folder
---
## Ready for Next Steps
Your vision of "insanely good engineering software that evolves with time" is now in place for extractors. The architecture is production-grade, clean, and ready to scale.
Same approach can be applied to hooks, then documentation generation, then versioning - all building on this solid foundation.
Have a great morning! ☕
---
**Commits**: 3 total today
**Files Changed**: 8 (5 modified, 3 created)
**Lines Added**: 600+
**Architecture**: Transformed from messy to production-grade
**Tests**: All passing ✅
**Documentation**: Comprehensive ✅
Sleep well achieved! 😴 → 🎯

View File

@@ -1,29 +0,0 @@
[
{
"iteration": 1,
"n_training_samples": 55,
"confidence_score": 0.48,
"mass_mape": 5.199446351686856,
"freq_mape": 46.23527454811865,
"avg_selected_uncertainty": 0.3559015095233917,
"status": "LOW_CONFIDENCE"
},
{
"iteration": 2,
"n_training_samples": 60,
"confidence_score": 0.6,
"mass_mape": 5.401324621678541,
"freq_mape": 88.80499920325646,
"avg_selected_uncertainty": 0.23130142092704772,
"status": "MEDIUM_CONFIDENCE"
},
{
"iteration": 3,
"n_training_samples": 65,
"confidence_score": 0.6,
"mass_mape": 4.867728649442469,
"freq_mape": 76.78009245481465,
"avg_selected_uncertainty": 0.17344236522912979,
"status": "MEDIUM_CONFIDENCE"
}
]

View File

@@ -1,530 +0,0 @@
fatal: not a git repository (or any of the parent directories): .git
================================================================================
ATOMIZER - INTERACTIVE OPTIMIZATION SETUP
================================================================================
[Atomizer] Welcome to Atomizer! I'll help you set up your optimization.
[Atomizer] First, I need to know about your model files.
[User] I have a bracket model:
- Part file: tests\Bracket.prt
- Simulation file: tests\Bracket_sim1.sim
[Atomizer] Great! Let me initialize the Setup Wizard to analyze your model...
================================================================================
STEP 1: MODEL INTROSPECTION
================================================================================
[Atomizer] I'm reading your NX model to find available design parameters...
[Atomizer] Found 4 expressions in your model:
- support_angle: 32.0 degrees
- tip_thickness: 24.0 mm
- p3: 10.0 mm
- support_blend_radius: 10.0 mm
[Atomizer] Which parameters would you like to use as design variables?
[User] I want to optimize tip_thickness and support_angle
[Atomizer] Perfect! Now, what's your optimization goal?
[User] I want to maximize displacement while keeping stress below
a safety factor of 4. The material is Aluminum 6061-T6.
================================================================================
STEP 2: BASELINE SIMULATION
================================================================================
[Atomizer] To validate your setup, I need to run ONE baseline simulation.
[Atomizer] This will generate an OP2 file that I can analyze to ensure
[Atomizer] the extraction pipeline will work correctly.
[Atomizer]
[Atomizer] Running baseline simulation with current parameter values...
[NX SOLVER] Starting simulation...
Input file: Bracket_sim1.sim
Working dir: tests
Mode: Journal
Deleted 3 old result file(s) to force fresh solve
[JOURNAL OUTPUT]
Mesh-Based Errors Summary
-------------------------
Total: 0 errors and 0 warnings
Material-Based Errors Summary
-----------------------------
Total: 0 errors and 0 warnings
Solution-Based Errors Summary
-----------------------------
Iterative Solver Option
More than 80 percent of the elements in this model are 3D elements.
It is therefore recommended that you turn ON the Element Iterative Solver in the "Edit
Solution" dialog.
Total: 0 errors and 0 warnings
Load/BC-Based Errors Summary
----------------------------
Total: 0 errors and 0 warnings
Nastran Model Setup Check completed
*** 20:33:59 ***
Starting Nastran Exporter
*** 20:33:59 ***
Writing file
c:\Users\antoi\Documents\Atomaste\Atomizer\tests\bracket_sim1-solution_1.dat
*** 20:33:59 ***
Writing SIMCENTER NASTRAN 2412.0 compatible deck
*** 20:33:59 ***
Writing Nastran System section
*** 20:33:59 ***
Writing File Management section
*** 20:33:59 ***
Writing Executive Control section
*** 20:33:59 ***
Writing Case Control section
*** 20:33:59 ***
Writing Bulk Data section
*** 20:33:59 ***
Writing Nodes
*** 20:33:59 ***
Writing Elements
*** 20:33:59 ***
Writing Physical Properties
*** 20:33:59 ***
Writing Materials
*** 20:33:59 ***
Writing Degree-of-Freedom Sets
*** 20:33:59 ***
Writing Loads and Constraints
*** 20:33:59 ***
Writing Coordinate Systems
*** 20:33:59 ***
Validating Solution Setup
*** 20:33:59 ***
Summary of Bulk Data cards written
+----------+----------+
| NAME | NUMBER |
+----------+----------+
| CHEXA | 306 |
| CPENTA | 10 |
| FORCE | 3 |
| GRID | 585 |
| MAT1 | 1 |
| MATT1 | 1 |
| PARAM | 6 |
| PSOLID | 1 |
| SPC | 51 |
| TABLEM1 | 3 |
+----------+----------+
*** 20:33:59 ***
Nastran Deck Successfully Written
[JOURNAL] Opening simulation: c:\Users\antoi\Documents\Atomaste\Atomizer\tests\Bracket_sim1.sim
[JOURNAL] Checking for open parts...
[JOURNAL] Opening simulation fresh from disk...
[JOURNAL] STEP 1: Updating Bracket.prt geometry...
[JOURNAL] Rebuilding geometry with new expression values...
[JOURNAL] Bracket geometry updated (0 errors)
[JOURNAL] STEP 2: Opening Bracket_fem1.fem...
[JOURNAL] Updating FE Model...
[JOURNAL] FE Model updated with new geometry!
[JOURNAL] STEP 3: Switching back to sim part...
[JOURNAL] Switched back to sim part
[JOURNAL] Starting solve...
[JOURNAL] Solve submitted!
[JOURNAL] Solutions solved: -1779619210
[JOURNAL] Solutions failed: 32764
[JOURNAL] Solutions skipped: 1218183744
[JOURNAL] Saving simulation to ensure output files are written...
[JOURNAL] Save complete!
[JOURNAL ERRORS]
Journal execution results for c:\Users\antoi\Documents\Atomaste\Atomizer\tests\_temp_solve_journal.py...
Syntax errors:
Line 0: Traceback (most recent call last):
File "c:\Users\antoi\Documents\Atomaste\Atomizer\tests\_temp_solve_journal.py", line 247, in <module>
sys.exit(0 if success else 1)
[NX SOLVER] Waiting for solve to complete...
[NX SOLVER] Output files detected after 0.5s
[NX SOLVER] Complete in 4.3s
[NX SOLVER] Results: bracket_sim1-solution_1.op2
[Atomizer] Baseline simulation complete! OP2 file: bracket_sim1-solution_1.op2
================================================================================
STEP 3: OP2 INTROSPECTION
================================================================================
[Atomizer] Now I'll analyze the OP2 file to see what's actually in there...
DEBUG: op2.py:614 combine=True
DEBUG: op2.py:615 -------- reading op2 with read_mode=1 (array sizing) --------
INFO: op2_scalar.py:1960 op2_filename = 'tests\\bracket_sim1-solution_1.op2'
DEBUG: op2_reader.py:323 date = (11, 16, 25)
WARNING: version.py:88 nx version='2412' is not supported
DEBUG: op2_reader.py:403 mode='nx' version='2412'
DEBUG: op2_scalar.py:2173 table_name=b'IBULK' (explicit bulk data)
DEBUG: op2_scalar.py:2173 table_name=b'ICASE' (explicit case control)
DEBUG: op2_scalar.py:2173 table_name=b'CASECC' (case control)
DEBUG: op2_scalar.py:2173 table_name=b'PVT0' (PARAM cards)
DEBUG: op2_scalar.py:2173 table_name=b'GPL' (grid point list)
DEBUG: op2_scalar.py:2173 table_name=b'GPDT' (grid point locations)
DEBUG: op2_scalar.py:2173 table_name=b'EPT' (property cards)
DEBUG: op2_scalar.py:2173 table_name=b'MPT' (material cards)
DEBUG: op2_scalar.py:2173 table_name=b'GEOM2' (element cards)
DEBUG: op2_scalar.py:2173 table_name=b'GEOM3' (constraint cards)
DEBUG: op2_scalar.py:2173 table_name=b'GEOM4' (load cards)
DEBUG: op2_scalar.py:2173 table_name=b'GEOM1' (grid/coord cards)
DEBUG: op2_scalar.py:2173 table_name=b'BGPDT' (grid points in cid=0 frame)
DEBUG: op2_scalar.py:2173 table_name=b'DIT' (TABLEx cards)
DEBUG: op2_scalar.py:2173 table_name=b'EQEXIN' (internal/external ids)
DEBUG: op2_reader.py:672 eqexin idata=(101, 585, 0, 0, 0, 0, 0)
DEBUG: op2_scalar.py:2173 table_name=b'OQG1' (spc/mpc forces)
DEBUG: op2_scalar.py:2173 table_name=b'BOUGV1' (g-set U in cid=0 frame)
DEBUG: op2_scalar.py:2173 table_name=b'OES1' (linear stress)
DEBUG: oes.py:2840 numwide_real=193
DEBUG: oes.py:2840 numwide_real=151
DEBUG: op2.py:634 -------- reading op2 with read_mode=2 (array filling) --------
DEBUG: op2_reader.py:323 date = (11, 16, 25)
WARNING: version.py:88 nx version='2412' is not supported
DEBUG: op2_scalar.py:2173 table_name=b'IBULK' (explicit bulk data)
DEBUG: op2_scalar.py:2173 table_name=b'ICASE' (explicit case control)
DEBUG: op2_scalar.py:2173 table_name=b'CASECC' (case control)
DEBUG: op2_scalar.py:2173 table_name=b'PVT0' (PARAM cards)
DEBUG: op2_scalar.py:2173 table_name=b'GPL' (grid point list)
DEBUG: op2_scalar.py:2173 table_name=b'GPDT' (grid point locations)
DEBUG: op2_scalar.py:2173 table_name=b'EPT' (property cards)
DEBUG: op2_scalar.py:2173 table_name=b'MPT' (material cards)
DEBUG: op2_scalar.py:2173 table_name=b'GEOM2' (element cards)
DEBUG: op2_scalar.py:2173 table_name=b'GEOM3' (constraint cards)
DEBUG: op2_scalar.py:2173 table_name=b'GEOM4' (load cards)
DEBUG: op2_scalar.py:2173 table_name=b'GEOM1' (grid/coord cards)
DEBUG: op2_scalar.py:2173 table_name=b'BGPDT' (grid points in cid=0 frame)
DEBUG: op2_scalar.py:2173 table_name=b'DIT' (TABLEx cards)
DEBUG: op2_scalar.py:2173 table_name=b'EQEXIN' (internal/external ids)
DEBUG: op2_reader.py:672 eqexin idata=(101, 585, 0, 0, 0, 0, 0)
DEBUG: op2_scalar.py:2173 table_name=b'OQG1' (spc/mpc forces)
DEBUG: op2_scalar.py:2173 table_name=b'BOUGV1' (g-set U in cid=0 frame)
DEBUG: op2_scalar.py:2173 table_name=b'OES1' (linear stress)
DEBUG: oes.py:2840 numwide_real=193
DEBUG: oes.py:2840 numwide_real=151
DEBUG: op2.py:932 combine_results
DEBUG: op2.py:648 finished reading op2
[Atomizer] Here's what I found in your OP2 file:
- Element types with stress: CHEXA, CPENTA
- Available results: displacement, stress
- Number of elements: 0
- Number of nodes: 0
================================================================================
STEP 4: LLM-GUIDED CONFIGURATION
================================================================================
[Atomizer] Based on your goal and the OP2 contents, here's what I recommend:
[Atomizer]
[Atomizer] OBJECTIVE:
[Atomizer] - Maximize displacement (minimize negative displacement)
[Atomizer]
[Atomizer] EXTRACTIONS:
[Atomizer] - Extract displacement from OP2
[Atomizer] - Extract stress from CHEXA elements
[Atomizer] (I detected these element types in your model)
[Atomizer]
[Atomizer] CALCULATIONS:
[Atomizer] - Calculate safety factor: SF = 276 MPa / max_stress
[Atomizer] - Negate displacement for minimization
[Atomizer]
[Atomizer] CONSTRAINT:
[Atomizer] - Enforce SF >= 4.0 with penalty
[Atomizer]
[Atomizer] DESIGN VARIABLES:
[Atomizer] - tip_thickness: 24.0 mm (suggest range: 15-25 mm)
[Atomizer] - support_angle: 32.0 degrees (suggest range: 20-40 deg)
[User] That looks good! Let's use those ranges.
================================================================================
STEP 5: PIPELINE VALIDATION (DRY RUN)
================================================================================
[Atomizer] Before running 20-30 optimization trials, let me validate that
[Atomizer] EVERYTHING works correctly with your baseline OP2 file...
[Atomizer]
[Atomizer] Running dry-run validation...
DEBUG: op2.py:614 combine=True
DEBUG: op2.py:615 -------- reading op2 with read_mode=1 (array sizing) --------
INFO: op2_scalar.py:1960 op2_filename = 'tests\\bracket_sim1-solution_1.op2'
DEBUG: op2_reader.py:323 date = (11, 16, 25)
WARNING: version.py:88 nx version='2412' is not supported
DEBUG: op2_reader.py:403 mode='nx' version='2412'
DEBUG: op2_scalar.py:2173 table_name=b'IBULK' (explicit bulk data)
DEBUG: op2_scalar.py:2173 table_name=b'ICASE' (explicit case control)
DEBUG: op2_scalar.py:2173 table_name=b'CASECC' (case control)
DEBUG: op2_scalar.py:2173 table_name=b'PVT0' (PARAM cards)
DEBUG: op2_scalar.py:2173 table_name=b'GPL' (grid point list)
DEBUG: op2_scalar.py:2173 table_name=b'GPDT' (grid point locations)
DEBUG: op2_scalar.py:2173 table_name=b'EPT' (property cards)
DEBUG: op2_scalar.py:2173 table_name=b'MPT' (material cards)
DEBUG: op2_scalar.py:2173 table_name=b'GEOM2' (element cards)
DEBUG: op2_scalar.py:2173 table_name=b'GEOM3' (constraint cards)
DEBUG: op2_scalar.py:2173 table_name=b'GEOM4' (load cards)
DEBUG: op2_scalar.py:2173 table_name=b'GEOM1' (grid/coord cards)
DEBUG: op2_scalar.py:2173 table_name=b'BGPDT' (grid points in cid=0 frame)
DEBUG: op2_scalar.py:2173 table_name=b'DIT' (TABLEx cards)
DEBUG: op2_scalar.py:2173 table_name=b'EQEXIN' (internal/external ids)
DEBUG: op2_reader.py:672 eqexin idata=(101, 585, 0, 0, 0, 0, 0)
DEBUG: op2_scalar.py:2173 table_name=b'OQG1' (spc/mpc forces)
DEBUG: op2_scalar.py:2173 table_name=b'BOUGV1' (g-set U in cid=0 frame)
DEBUG: op2_scalar.py:2173 table_name=b'OES1' (linear stress)
DEBUG: oes.py:2840 numwide_real=193
DEBUG: oes.py:2840 numwide_real=151
DEBUG: op2.py:634 -------- reading op2 with read_mode=2 (array filling) --------
DEBUG: op2_reader.py:323 date = (11, 16, 25)
WARNING: version.py:88 nx version='2412' is not supported
DEBUG: op2_scalar.py:2173 table_name=b'IBULK' (explicit bulk data)
DEBUG: op2_scalar.py:2173 table_name=b'ICASE' (explicit case control)
DEBUG: op2_scalar.py:2173 table_name=b'CASECC' (case control)
DEBUG: op2_scalar.py:2173 table_name=b'PVT0' (PARAM cards)
DEBUG: op2_scalar.py:2173 table_name=b'GPL' (grid point list)
DEBUG: op2_scalar.py:2173 table_name=b'GPDT' (grid point locations)
DEBUG: op2_scalar.py:2173 table_name=b'EPT' (property cards)
DEBUG: op2_scalar.py:2173 table_name=b'MPT' (material cards)
DEBUG: op2_scalar.py:2173 table_name=b'GEOM2' (element cards)
DEBUG: op2_scalar.py:2173 table_name=b'GEOM3' (constraint cards)
DEBUG: op2_scalar.py:2173 table_name=b'GEOM4' (load cards)
DEBUG: op2_scalar.py:2173 table_name=b'GEOM1' (grid/coord cards)
DEBUG: op2_scalar.py:2173 table_name=b'BGPDT' (grid points in cid=0 frame)
DEBUG: op2_scalar.py:2173 table_name=b'DIT' (TABLEx cards)
DEBUG: op2_scalar.py:2173 table_name=b'EQEXIN' (internal/external ids)
DEBUG: op2_reader.py:672 eqexin idata=(101, 585, 0, 0, 0, 0, 0)
DEBUG: op2_scalar.py:2173 table_name=b'OQG1' (spc/mpc forces)
DEBUG: op2_scalar.py:2173 table_name=b'BOUGV1' (g-set U in cid=0 frame)
DEBUG: op2_scalar.py:2173 table_name=b'OES1' (linear stress)
DEBUG: oes.py:2840 numwide_real=193
DEBUG: oes.py:2840 numwide_real=151
DEBUG: op2.py:932 combine_results
DEBUG: op2.py:648 finished reading op2
DEBUG: op2.py:614 combine=True
DEBUG: op2.py:615 -------- reading op2 with read_mode=1 (array sizing) --------
INFO: op2_scalar.py:1960 op2_filename = 'tests\\bracket_sim1-solution_1.op2'
DEBUG: op2_reader.py:323 date = (11, 16, 25)
Extraction failed: extract_solid_stress - No ctetra stress results in OP2
\u274c extract_solid_stress: No ctetra stress results in OP2
\u274c calculate_safety_factor: name 'max_von_mises' is not defined
Required input 'min_force' not found in context
Hook 'ratio_hook' failed: Missing required input: min_force
Traceback (most recent call last):
File "c:\Users\antoi\Documents\Atomaste\Atomizer\optimization_engine\plugins\hooks.py", line 72, in execute
result = self.function(context)
^^^^^^^^^^^^^^^^^^^^^^
File "c:\Users\antoi\Documents\Atomaste\Atomizer\optimization_engine\plugins\post_calculation\min_to_avg_ratio_hook.py", line 38, in ratio_hook
raise ValueError(f"Missing required input: min_force")
ValueError: Missing required input: min_force
Hook 'ratio_hook' failed: Missing required input: min_force
Required input 'max_stress' not found in context
Hook 'safety_factor_hook' failed: Missing required input: max_stress
Traceback (most recent call last):
File "c:\Users\antoi\Documents\Atomaste\Atomizer\optimization_engine\plugins\hooks.py", line 72, in execute
result = self.function(context)
^^^^^^^^^^^^^^^^^^^^^^
File "c:\Users\antoi\Documents\Atomaste\Atomizer\optimization_engine\plugins\post_calculation\safety_factor_hook.py", line 38, in safety_factor_hook
raise ValueError(f"Missing required input: max_stress")
ValueError: Missing required input: max_stress
Hook 'safety_factor_hook' failed: Missing required input: max_stress
Required input 'norm_stress' not found in context
Hook 'weighted_objective_hook' failed: Missing required input: norm_stress
Traceback (most recent call last):
File "c:\Users\antoi\Documents\Atomaste\Atomizer\optimization_engine\plugins\hooks.py", line 72, in execute
result = self.function(context)
^^^^^^^^^^^^^^^^^^^^^^
File "c:\Users\antoi\Documents\Atomaste\Atomizer\optimization_engine\plugins\post_calculation\weighted_objective_test.py", line 38, in weighted_objective_hook
raise ValueError(f"Missing required input: norm_stress")
ValueError: Missing required input: norm_stress
Hook 'weighted_objective_hook' failed: Missing required input: norm_stress
\u26a0\ufe0f No explicit objective, using: max_displacement
WARNING: version.py:88 nx version='2412' is not supported
DEBUG: op2_reader.py:403 mode='nx' version='2412'
DEBUG: op2_scalar.py:2173 table_name=b'IBULK' (explicit bulk data)
DEBUG: op2_scalar.py:2173 table_name=b'ICASE' (explicit case control)
DEBUG: op2_scalar.py:2173 table_name=b'CASECC' (case control)
DEBUG: op2_scalar.py:2173 table_name=b'PVT0' (PARAM cards)
DEBUG: op2_scalar.py:2173 table_name=b'GPL' (grid point list)
DEBUG: op2_scalar.py:2173 table_name=b'GPDT' (grid point locations)
DEBUG: op2_scalar.py:2173 table_name=b'EPT' (property cards)
DEBUG: op2_scalar.py:2173 table_name=b'MPT' (material cards)
DEBUG: op2_scalar.py:2173 table_name=b'GEOM2' (element cards)
DEBUG: op2_scalar.py:2173 table_name=b'GEOM3' (constraint cards)
DEBUG: op2_scalar.py:2173 table_name=b'GEOM4' (load cards)
DEBUG: op2_scalar.py:2173 table_name=b'GEOM1' (grid/coord cards)
DEBUG: op2_scalar.py:2173 table_name=b'BGPDT' (grid points in cid=0 frame)
DEBUG: op2_scalar.py:2173 table_name=b'DIT' (TABLEx cards)
DEBUG: op2_scalar.py:2173 table_name=b'EQEXIN' (internal/external ids)
DEBUG: op2_reader.py:672 eqexin idata=(101, 585, 0, 0, 0, 0, 0)
DEBUG: op2_scalar.py:2173 table_name=b'OQG1' (spc/mpc forces)
DEBUG: op2_scalar.py:2173 table_name=b'BOUGV1' (g-set U in cid=0 frame)
DEBUG: op2_scalar.py:2173 table_name=b'OES1' (linear stress)
DEBUG: oes.py:2840 numwide_real=193
DEBUG: oes.py:2840 numwide_real=151
DEBUG: op2.py:634 -------- reading op2 with read_mode=2 (array filling) --------
DEBUG: op2_reader.py:323 date = (11, 16, 25)
WARNING: version.py:88 nx version='2412' is not supported
DEBUG: op2_scalar.py:2173 table_name=b'IBULK' (explicit bulk data)
DEBUG: op2_scalar.py:2173 table_name=b'ICASE' (explicit case control)
DEBUG: op2_scalar.py:2173 table_name=b'CASECC' (case control)
DEBUG: op2_scalar.py:2173 table_name=b'PVT0' (PARAM cards)
DEBUG: op2_scalar.py:2173 table_name=b'GPL' (grid point list)
DEBUG: op2_scalar.py:2173 table_name=b'GPDT' (grid point locations)
DEBUG: op2_scalar.py:2173 table_name=b'EPT' (property cards)
DEBUG: op2_scalar.py:2173 table_name=b'MPT' (material cards)
DEBUG: op2_scalar.py:2173 table_name=b'GEOM2' (element cards)
DEBUG: op2_scalar.py:2173 table_name=b'GEOM3' (constraint cards)
DEBUG: op2_scalar.py:2173 table_name=b'GEOM4' (load cards)
DEBUG: op2_scalar.py:2173 table_name=b'GEOM1' (grid/coord cards)
DEBUG: op2_scalar.py:2173 table_name=b'BGPDT' (grid points in cid=0 frame)
DEBUG: op2_scalar.py:2173 table_name=b'DIT' (TABLEx cards)
DEBUG: op2_scalar.py:2173 table_name=b'EQEXIN' (internal/external ids)
DEBUG: op2_reader.py:672 eqexin idata=(101, 585, 0, 0, 0, 0, 0)
DEBUG: op2_scalar.py:2173 table_name=b'OQG1' (spc/mpc forces)
DEBUG: op2_scalar.py:2173 table_name=b'BOUGV1' (g-set U in cid=0 frame)
DEBUG: op2_scalar.py:2173 table_name=b'OES1' (linear stress)
DEBUG: oes.py:2840 numwide_real=193
DEBUG: oes.py:2840 numwide_real=151
DEBUG: op2.py:932 combine_results
DEBUG: op2.py:648 finished reading op2
[Wizard] VALIDATION RESULTS:
[Wizard] [OK] extractor: ['max_displacement', 'max_disp_node', 'max_disp_x', 'max_disp_y', 'max_disp_z']
[Wizard] [FAIL] extractor: No ctetra stress results in OP2
[Wizard] [FAIL] calculation: name 'max_von_mises' is not defined
[Wizard] [OK] calculation: Created ['neg_displacement']
[Wizard] [OK] hook: 3 results
[Wizard] [OK] objective: 0.36178338527679443
================================================================================
VALIDATION FAILED!
================================================================================
[Atomizer] The validation found issues that need to be fixed:
Traceback (most recent call last):
File "c:\Users\antoi\Documents\Atomaste\Atomizer\tests\interactive_optimization_setup.py", line 324, in <module>
main()
File "c:\Users\antoi\Documents\Atomaste\Atomizer\tests\interactive_optimization_setup.py", line 316, in main
print(f" [ERROR] {result.message}")
File "C:\Users\antoi\anaconda3\envs\test_env\Lib\encodings\cp1252.py", line 19, in encode
return codecs.charmap_encode(input,self.errors,encoding_table)[0]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
UnicodeEncodeError: 'charmap' codec can't encode character '\u274c' in position 19: character maps to <undefined>

File diff suppressed because it is too large Load Diff

View File

@@ -1,122 +0,0 @@
fatal: not a git repository (or any of the parent directories): .git
================================================================================
HYBRID MODE - AUTOMATED STUDY CREATION
================================================================================
[1/5] Creating study structure...
[OK] Study directory: circular_plate_frequency_tuning
[2/5] Copying model files...
[OK] Copied 4 files
[3/5] Installing workflow configuration...
[OK] Workflow: circular_plate_frequency_tuning
[OK] Variables: 2
[OK] Objectives: 1
[4/5] Running benchmarking (validating simulation setup)...
Running INTELLIGENT benchmarking...
- Solving ALL solutions in .sim file
- Discovering all available results
- Matching objectives to results
================================================================================
INTELLIGENT SETUP - COMPLETE ANALYSIS
================================================================================
[Phase 1/4] Extracting ALL expressions from model...
[NX] Exporting expressions from Circular_Plate.prt to .exp format...
[OK] Expressions exported to: c:\Users\antoi\Documents\Atomaste\Atomizer\studies\circular_plate_frequency_tuning\1_setup\model\Circular_Plate_expressions.exp
[OK] Found 4 expressions
- inner_diameter: 130.24581665835925 MilliMeter
- p0: None MilliMeter
- p1: 0.0 MilliMeter
- plate_thickness: 5.190705791851906 MilliMeter
[Phase 2/4] Solving ALL solutions in .sim file...
[OK] Solved 0 solutions
[Phase 3/4] Analyzing ALL result files...
DEBUG: op2.py:614 combine=True
DEBUG: op2.py:615 -------- reading op2 with read_mode=1 (array sizing) --------
INFO: op2_scalar.py:1960 op2_filename = 'c:\\Users\\antoi\\Documents\\Atomaste\\Atomizer\\studies\\circular_plate_frequency_tuning\\1_setup\\model\\circular_plate_sim1-solution_1.op2'
DEBUG: op2_reader.py:323 date = (11, 18, 25)
WARNING: version.py:88 nx version='2412' is not supported
DEBUG: op2_reader.py:403 mode='nx' version='2412'
DEBUG: op2_scalar.py:2173 table_name=b'IBULK' (explicit bulk data)
DEBUG: op2_scalar.py:2173 table_name=b'ICASE' (explicit case control)
DEBUG: op2_scalar.py:2173 table_name=b'CASECC' (case control)
DEBUG: op2_scalar.py:2173 table_name=b'PVT0' (PARAM cards)
DEBUG: op2_scalar.py:2173 table_name=b'GPL' (grid point list)
DEBUG: op2_scalar.py:2173 table_name=b'GPDT' (grid point locations)
DEBUG: op2_scalar.py:2173 table_name=b'EPT' (property cards)
DEBUG: op2_scalar.py:2173 table_name=b'MPT' (material cards)
DEBUG: op2_scalar.py:2173 table_name=b'GEOM2' (element cards)
DEBUG: op2_scalar.py:2173 table_name=b'GEOM4' (load cards)
DEBUG: op2_scalar.py:2173 table_name=b'GEOM1' (grid/coord cards)
DEBUG: op2_scalar.py:2173 table_name=b'BGPDT' (grid points in cid=0 frame)
DEBUG: op2_scalar.py:2173 table_name=b'EQEXIN' (internal/external ids)
DEBUG: op2_reader.py:672 eqexin idata=(101, 613, 0, 0, 0, 0, 0)
DEBUG: op2_scalar.py:2173 table_name=b'OQG1' (spc/mpc forces)
DEBUG: op2_scalar.py:2173 table_name=b'BOUGV1' (g-set U in cid=0 frame)
DEBUG: op2_scalar.py:2173 table_name=b'OES1' (linear stress)
DEBUG: op2.py:634 -------- reading op2 with read_mode=2 (array filling) --------
DEBUG: op2_reader.py:323 date = (11, 18, 25)
WARNING: version.py:88 nx version='2412' is not supported
DEBUG: op2_scalar.py:2173 table_name=b'IBULK' (explicit bulk data)
DEBUG: op2_scalar.py:2173 table_name=b'ICASE' (explicit case control)
DEBUG: op2_scalar.py:2173 table_name=b'CASECC' (case control)
DEBUG: op2_scalar.py:2173 table_name=b'PVT0' (PARAM cards)
DEBUG: op2_scalar.py:2173 table_name=b'GPL' (grid point list)
DEBUG: op2_scalar.py:2173 table_name=b'GPDT' (grid point locations)
DEBUG: op2_scalar.py:2173 table_name=b'EPT' (property cards)
DEBUG: op2_scalar.py:2173 table_name=b'MPT' (material cards)
DEBUG: op2_scalar.py:2173 table_name=b'GEOM2' (element cards)
DEBUG: op2_scalar.py:2173 table_name=b'GEOM4' (load cards)
DEBUG: op2_scalar.py:2173 table_name=b'GEOM1' (grid/coord cards)
DEBUG: op2_scalar.py:2173 table_name=b'BGPDT' (grid points in cid=0 frame)
DEBUG: op2_scalar.py:2173 table_name=b'EQEXIN' (internal/external ids)
DEBUG: op2_reader.py:672 eqexin idata=(101, 613, 0, 0, 0, 0, 0)
DEBUG: op2_scalar.py:2173 table_name=b'OQG1' (spc/mpc forces)
DEBUG: op2_scalar.py:2173 table_name=b'BOUGV1' (g-set U in cid=0 frame)
DEBUG: op2_scalar.py:2173 table_name=b'OES1' (linear stress)
DEBUG: op2.py:932 combine_results
DEBUG: op2.py:648 finished reading op2
[OK] Found 1 result files
- displacements: 613 entries in circular_plate_sim1-solution_1.op2
[Phase 4/4] Matching objectives to available results...
[OK] Objective mapping complete
- frequency_error
Solution: NONE
Result type: eigenvalues
Extractor: extract_first_frequency
================================================================================
ANALYSIS COMPLETE
================================================================================
[OK] Expressions found: 4
[OK] Solutions found: 4
[OK] Results discovered: 1
[OK] Objectives matched: 1
- frequency_error: eigenvalues from 'NONE' (ERROR confidence)
[OK] Simulation validated
[OK] Extracted 0 results
[4.5/5] Generating configuration report...
Traceback (most recent call last):
File "c:\Users\antoi\Documents\Atomaste\Atomizer\create_circular_plate_study.py", line 70, in <module>
main()
File "c:\Users\antoi\Documents\Atomaste\Atomizer\create_circular_plate_study.py", line 52, in main
study_dir = creator.create_from_workflow(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "c:\Users\antoi\Documents\Atomaste\Atomizer\optimization_engine\hybrid_study_creator.py", line 100, in create_from_workflow
self._generate_configuration_report(study_dir, workflow, benchmark_results)
File "c:\Users\antoi\Documents\Atomaste\Atomizer\optimization_engine\hybrid_study_creator.py", line 757, in _generate_configuration_report
f.write(content)
File "C:\Users\antoi\anaconda3\envs\test_env\Lib\encodings\cp1252.py", line 19, in encode
return codecs.charmap_encode(input,self.errors,encoding_table)[0]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
UnicodeEncodeError: 'charmap' codec can't encode characters in position 1535-1536: character maps to <undefined>

View File

@@ -1,19 +0,0 @@
{
"stats": {
"total_time": 3.4194347858428955,
"avg_trial_time_ms": 0.25935888290405273,
"trials_per_second": 584.8919851550838,
"extrapolation_count": 1757,
"extrapolation_pct": 87.85
},
"pareto_summary": {
"total": 407,
"confident": 0,
"needs_fea": 407
},
"top_designs": [
{
"mass": 717.7724576426426,
"frequency": 15.794277791999079,
"uncertainty": 0.3945587883026621,
"needs_fea":