Files
Atomizer/projects/gigabit-m1-frame-stiffness/studies/01_sensitivity_method_d/atomizer_spec.json

198 lines
7.4 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"meta": {
"version": "2.0",
"created": "2026-03-04T12:00:00Z",
"modified": "2026-03-04T12:00:00Z",
"created_by": "mario",
"modified_by": "mario",
"study_name": "01_sensitivity_method_d",
"description": "Method D — Unit displacement sensitivity map. Apply +1 μm prescribed displacement at each unique interface point (3 points × 3 DOF = 9 runs), extract Zernike WFE sensitivity coefficients. Uses symmetry: V_left≡V_right, L_left≡L_right.",
"tags": ["mirror", "zernike", "sensitivity", "frame-stiffness", "parametric"]
},
"model": {
"sim": {
"path": "ASSY_M1_assyfem1_sim1.sim",
"solver": "nastran",
"_note": "UPDATE: Set correct .sim filename after model drop"
},
"nx_settings": {
"nx_install_path": "C:\\Program Files\\Siemens\\DesigncenterNX2512",
"simulation_timeout_s": 600,
"_note": "UPDATE: Adjust NX path for your machine if different"
}
},
"design_variables": [
{
"id": "dv_001",
"name": "dV1_X",
"expression_name": "dV1_X",
"type": "continuous",
"bounds": {"min": 0.0, "max": 0.001},
"baseline": 0.0,
"units": "mm",
"enabled": true,
"description": "V_top displacement in global X (0 = fixed, 0.001 = +1 μm)"
},
{
"id": "dv_002",
"name": "dV1_Y",
"expression_name": "dV1_Y",
"type": "continuous",
"bounds": {"min": 0.0, "max": 0.001},
"baseline": 0.0,
"units": "mm",
"enabled": true,
"description": "V_top displacement in global Y"
},
{
"id": "dv_003",
"name": "dV1_Z",
"expression_name": "dV1_Z",
"type": "continuous",
"bounds": {"min": 0.0, "max": 0.001},
"baseline": 0.0,
"units": "mm",
"enabled": true,
"description": "V_top displacement in global Z (optical axis)"
},
{
"id": "dv_004",
"name": "dV2_X",
"expression_name": "dV2_X",
"type": "continuous",
"bounds": {"min": 0.0, "max": 0.001},
"baseline": 0.0,
"units": "mm",
"enabled": true,
"description": "V_side (left) displacement in global X"
},
{
"id": "dv_005",
"name": "dV2_Y",
"expression_name": "dV2_Y",
"type": "continuous",
"bounds": {"min": 0.0, "max": 0.001},
"baseline": 0.0,
"units": "mm",
"enabled": true,
"description": "V_side (left) displacement in global Y"
},
{
"id": "dv_006",
"name": "dV2_Z",
"expression_name": "dV2_Z",
"type": "continuous",
"bounds": {"min": 0.0, "max": 0.001},
"baseline": 0.0,
"units": "mm",
"enabled": true,
"description": "V_side (left) displacement in global Z"
},
{
"id": "dv_007",
"name": "dL1_X",
"expression_name": "dL1_X",
"type": "continuous",
"bounds": {"min": 0.0, "max": 0.001},
"baseline": 0.0,
"units": "mm",
"enabled": true,
"description": "L_side (left) displacement in global X"
},
{
"id": "dv_008",
"name": "dL1_Y",
"expression_name": "dL1_Y",
"type": "continuous",
"bounds": {"min": 0.0, "max": 0.001},
"baseline": 0.0,
"units": "mm",
"enabled": true,
"description": "L_side (left) displacement in global Y"
},
{
"id": "dv_009",
"name": "dL1_Z",
"expression_name": "dL1_Z",
"type": "continuous",
"bounds": {"min": 0.0, "max": 0.001},
"baseline": 0.0,
"units": "mm",
"enabled": true,
"description": "L_side (left) displacement in global Z"
}
],
"extractors": [
{
"id": "ext_001",
"name": "Zernike Annular OPD — WFE Sensitivity",
"type": "zernike_opd",
"builtin": true,
"config": {
"inner_radius_mm": 135.75,
"outer_radius_mm": 500.0,
"n_modes": 50,
"filter_low_orders": 4,
"displacement_unit": "mm",
"reference_subcase": 2,
"_note": "J5+ filtered RMS. reference_subcase=2 is 20° elevation. Check subcase numbering in your model."
},
"outputs": [
{
"name": "rel_filtered_rms_40_vs_20",
"metric": "filtered_rms_nm"
},
{
"name": "rel_filtered_rms_60_vs_20",
"metric": "filtered_rms_nm"
}
]
}
],
"objectives": [
{
"id": "obj_001",
"name": "ΔWFE at 60° (primary — worst case)",
"direction": "minimize",
"weight": 1.0,
"source": {
"extractor_id": "ext_001",
"output_name": "rel_filtered_rms_60_vs_20"
},
"target": 1.0,
"units": "nm",
"_note": "This is a parametric study, not optimization. Objective is for tracking only."
}
],
"constraints": [],
"optimization": {
"algorithm": {
"type": "GridSampler",
"config": {
"_note": "GridSampler for deterministic parametric sweep. Each run is a specific point in the design matrix."
}
},
"budget": {
"max_trials": 12
},
"_run_matrix_note": "Override with explicit trial list below. Each trial activates exactly ONE displacement expression = 0.001, rest = 0."
},
"run_matrix": {
"_description": "Explicit trial definitions for Method D. Each row is one FEA run. Atomizer sets these expression values before solving.",
"trials": [
{"trial": 0, "label": "baseline_all_fixed", "dV1_X": 0, "dV1_Y": 0, "dV1_Z": 0, "dV2_X": 0, "dV2_Y": 0, "dV2_Z": 0, "dL1_X": 0, "dL1_Y": 0, "dL1_Z": 0, "elevation": "60"},
{"trial": 1, "label": "V_top_Z", "dV1_X": 0, "dV1_Y": 0, "dV1_Z": 0.001, "dV2_X": 0, "dV2_Y": 0, "dV2_Z": 0, "dL1_X": 0, "dL1_Y": 0, "dL1_Z": 0, "elevation": "60"},
{"trial": 2, "label": "V_top_X", "dV1_X": 0.001, "dV1_Y": 0, "dV1_Z": 0, "dV2_X": 0, "dV2_Y": 0, "dV2_Z": 0, "dL1_X": 0, "dL1_Y": 0, "dL1_Z": 0, "elevation": "60"},
{"trial": 3, "label": "V_top_Y", "dV1_X": 0, "dV1_Y": 0.001, "dV1_Z": 0, "dV2_X": 0, "dV2_Y": 0, "dV2_Z": 0, "dL1_X": 0, "dL1_Y": 0, "dL1_Z": 0, "elevation": "60"},
{"trial": 4, "label": "V_side_Z", "dV1_X": 0, "dV1_Y": 0, "dV1_Z": 0, "dV2_X": 0, "dV2_Y": 0, "dV2_Z": 0.001, "dL1_X": 0, "dL1_Y": 0, "dL1_Z": 0, "elevation": "60"},
{"trial": 5, "label": "V_side_X", "dV1_X": 0, "dV1_Y": 0, "dV1_Z": 0, "dV2_X": 0.001, "dV2_Y": 0, "dV2_Z": 0, "dL1_X": 0, "dL1_Y": 0, "dL1_Z": 0, "elevation": "60"},
{"trial": 6, "label": "V_side_Y", "dV1_X": 0, "dV1_Y": 0, "dV1_Z": 0, "dV2_X": 0, "dV2_Y": 0.001, "dV2_Z": 0, "dL1_X": 0, "dL1_Y": 0, "dL1_Z": 0, "elevation": "60"},
{"trial": 7, "label": "L_side_Z", "dV1_X": 0, "dV1_Y": 0, "dV1_Z": 0, "dV2_X": 0, "dV2_Y": 0, "dV2_Z": 0, "dL1_X": 0, "dL1_Y": 0, "dL1_Z": 0.001, "elevation": "60"},
{"trial": 8, "label": "L_side_X", "dV1_X": 0, "dV1_Y": 0, "dV1_Z": 0, "dV2_X": 0, "dV2_Y": 0, "dV2_Z": 0, "dL1_X": 0.001, "dL1_Y": 0, "dL1_Z": 0, "elevation": "60"},
{"trial": 9, "label": "L_side_Y", "dV1_X": 0, "dV1_Y": 0, "dV1_Z": 0, "dV2_X": 0, "dV2_Y": 0, "dV2_Z": 0, "dL1_X": 0, "dL1_Y": 0.001, "dL1_Z": 0, "elevation": "60"},
{"trial": 10, "label": "spot_check_40_top1", "dV1_X": 0, "dV1_Y": 0, "dV1_Z": 0.001, "dV2_X": 0, "dV2_Y": 0, "dV2_Z": 0, "dL1_X": 0, "dL1_Y": 0, "dL1_Z": 0, "elevation": "40", "_note": "Repeat top sensitive DOF at 40° — UPDATE label after ranking"},
{"trial": 11, "label": "spot_check_40_top2", "dV1_X": 0, "dV1_Y": 0, "dV1_Z": 0, "dV2_X": 0, "dV2_Y": 0, "dV2_Z": 0.001, "dL1_X": 0, "dL1_Y": 0, "dL1_Z": 0, "elevation": "40", "_note": "UPDATE after ranking"}
]
}
}