{
  "study_name": "frequency_tuning_optimization",
  "description": "Natural Frequency Tuning - Adjust structural dynamics to avoid resonance",
  "engineering_context": "Modal optimization for avoiding resonance with excitation sources (motors, rotors, vibration). Tune natural frequencies away from operating frequencies while minimizing mass.",
  "template_info": {
    "category": "dynamics",
    "analysis_type": "modal",
    "typical_applications": ["motor mounts", "drone arms", "rotating equipment supports", "vibration isolation"],
    "required_nx_expressions": ["section_width", "section_height", "arm_length"],
    "notes": "Requires modal analysis (SOL 103) solution in NX"
  },

  "optimization_settings": {
    "protocol": "protocol_11_multi_objective",
    "n_trials": 60,
    "sampler": "NSGAIISampler",
    "pruner": null,
    "timeout_per_trial": 500
  },

  "design_variables": [
    {
      "parameter": "section_width",
      "bounds": [10, 40],
      "description": "Cross-section width (mm) - affects stiffness",
      "units": "mm"
    },
    {
      "parameter": "section_height",
      "bounds": [10, 60],
      "description": "Cross-section height (mm) - affects stiffness in bending plane",
      "units": "mm"
    },
    {
      "parameter": "arm_length",
      "bounds": [80, 200],
      "description": "Arm/cantilever length (mm) - strongly affects frequency",
      "units": "mm"
    },
    {
      "parameter": "wall_thickness",
      "bounds": [1, 5],
      "description": "Wall thickness for hollow sections (mm)",
      "units": "mm"
    }
  ],

  "objectives": [
    {
      "name": "mass",
      "goal": "minimize",
      "weight": 1.0,
      "description": "Total mass (grams) - minimize for weight savings",
      "target": 50,
      "extraction": {
        "action": "extract_mass",
        "domain": "result_extraction",
        "params": {
          "result_type": "mass",
          "metric": "total"
        }
      }
    },
    {
      "name": "first_frequency",
      "goal": "maximize",
      "weight": 1.0,
      "description": "First natural frequency (Hz) - push away from excitation",
      "target": 200,
      "extraction": {
        "action": "extract_frequency",
        "domain": "result_extraction",
        "params": {
          "result_type": "frequency",
          "mode_number": 1
        }
      }
    }
  ],

  "constraints": [
    {
      "name": "min_frequency_limit",
      "type": "greater_than",
      "threshold": 120,
      "description": "First natural frequency > 120 Hz (above rotor harmonics)",
      "extraction": {
        "action": "extract_frequency",
        "domain": "result_extraction",
        "params": {
          "result_type": "frequency",
          "mode_number": 1
        }
      }
    },
    {
      "name": "max_stress_limit",
      "type": "less_than",
      "threshold": 150,
      "description": "Maximum stress < 150 MPa under static load",
      "extraction": {
        "action": "extract_stress",
        "domain": "result_extraction",
        "params": {
          "result_type": "stress",
          "metric": "max_von_mises"
        }
      }
    }
  ],

  "simulation": {
    "model_file": "Arm.prt",
    "sim_file": "Arm_sim1.sim",
    "fem_file": "Arm_fem1.fem",
    "solver": "nastran",
    "analysis_types": ["modal", "static"]
  },

  "reporting": {
    "generate_plots": true,
    "save_incremental": true,
    "llm_summary": false
  },

  "training_data_export": {
    "enabled": true,
    "export_dir": "atomizer_field_training_data/${study_name}",
    "export_every_n_trials": 1,
    "include_mesh": true,
    "compress": false
  }
}
