Files
Atomizer/studies/bracket_stiffness_optimization/workflow_config.json

132 lines
3.4 KiB
JSON
Raw Normal View History

{
"workflow_name": "bracket_stiffness_workflow",
"description": "End-to-end workflow for bracket stiffness optimization",
"version": "1.0",
"workflow_steps": [
{
"step": 1,
"name": "update_design_variables",
"description": "Update NX model expressions with trial parameters",
"action": "nx_update_expressions",
"inputs": {
"model_file": "1_setup/model/Bracket.prt",
"expressions": {
"support_angle": "{{support_angle}}",
"tip_thickness": "{{tip_thickness}}"
}
},
"outputs": ["updated_model"],
"on_failure": "abort_trial"
},
{
"step": 2,
"name": "solve_simulation",
"description": "Run NX Nastran SOL 101 linear static analysis",
"action": "nx_solve",
"inputs": {
"sim_file": "1_setup/model/Bracket_sim1.sim",
"solver": "NX_Nastran",
"solution": "SOL101"
},
"outputs": ["op2_file", "f06_file"],
"on_failure": "abort_trial",
"timeout": 600
},
{
"step": 3,
"name": "export_displacement_field",
"description": "Export z-displacement field from results",
"action": "nx_journal",
"inputs": {
"journal_file": "1_setup/model/export_displacement_field.py",
"sim_file": "1_setup/model/Bracket_sim1.sim"
},
"outputs": ["field_file"],
"on_failure": "abort_trial"
},
{
"step": 4,
"name": "extract_results",
"description": "Extract stiffness and mass from FEA results",
"action": "python_extractor",
"inputs": {
"extractor_script": "bracket_stiffness_extractor.py",
"field_file": "1_setup/model/export_field_dz.fld",
"op2_file": "1_setup/model/Bracket_sim1.op2"
},
"outputs": {
"stiffness": "objectives.stiffness",
"mass": "objectives.mass",
"displacement": "displacement",
"force": "force"
},
"on_failure": "abort_trial"
},
{
"step": 5,
"name": "evaluate_constraints",
"description": "Check mass constraint (≤ 0.2 kg) - mark as infeasible but keep for surrogate",
"action": "constraint_check",
"inputs": {
"mass": "{{mass}}",
"max_mass": 0.2
},
"outputs": ["constraint_satisfied"],
"on_failure": "continue"
},
{
"step": 6,
"name": "report_results",
"description": "Send results to optimization engine and dashboard",
"action": "report",
"inputs": {
"trial_number": "{{trial_number}}",
"objectives": {
"stiffness": "{{stiffness}}",
"mass": "{{mass}}"
},
"design_variables": {
"support_angle": "{{support_angle}}",
"tip_thickness": "{{tip_thickness}}"
},
"metadata": {
"displacement": "{{displacement}}",
"force": "{{force}}"
}
},
"outputs": ["trial_complete"],
"on_failure": "log_error"
}
],
"error_handling": {
"max_retries": 2,
"retry_delay": 5,
"fallback_action": "skip_trial",
"log_errors": true,
"error_log_file": "2_results/errors.log"
},
"cleanup": {
"delete_intermediate_files": false,
"archive_results": true,
"compress_op2": false
},
"logging": {
"level": "INFO",
"log_file": "2_results/workflow.log",
"console_output": true,
"log_rotation": {
"max_size_mb": 50,
"backup_count": 3
}
}
}