2026-03-05 15:34:41 +00:00
{
"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" : {
2026-03-05 15:34:55 +00:00
"nx_install_path" : "C:\\Program Files\\Siemens\\DesigncenterNX2512" ,
2026-03-05 15:34:41 +00:00
"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" }
]
}
}