metrics_constants.py 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. """Metric key definitions - single source of truth for the Web backend.
  2. This MUST stay in sync with:
  3. - src/solver_core.py METRIC_DEFINITIONS (local solver)
  4. - scripts/robust_motorcad.py METRIC_DEFINITIONS (robust solver)
  5. When adding a new metric, update all three locations.
  6. """
  7. # All known metric keys produced by Motor-CAD result parsing.
  8. METRIC_KEYS = frozenset({
  9. # Torque
  10. "tavg_nm", # Average torque (virtual work) [Nm]
  11. "tmax_nm", # Max torque [Nm]
  12. "tmin_nm", # Min torque [Nm]
  13. "ripple_pct", # Torque ripple [%]
  14. "ripple_nm", # Torque ripple [Nm]
  15. "ripple_abs_nm", # Absolute torque ripple [Nm]
  16. "shaft_torque_nm", # Shaft torque [Nm]
  17. "stall_torque_nm", # Stall torque [Nm]
  18. "torque_constant", # Torque constant Kt [Nm/A]
  19. # Efficiency / power
  20. "efficiency_pct", # System efficiency [%]
  21. "input_power_w", # Input power [W]
  22. "output_power_w", # Output power [W]
  23. "em_power_w", # Electromagnetic power [W]
  24. "power_factor", # Power factor
  25. # Losses
  26. "total_losses_w", # Total losses [W]
  27. "copper_loss_w", # DC copper loss [W]
  28. "iron_loss_w", # Stator iron loss [W]
  29. "magnet_loss_w", # Magnet loss [W]
  30. # Electrical
  31. "back_emf_v", # Back EMF line-line rms [V]
  32. "back_emf_thd_pct", # Back EMF THD [%]
  33. "phase_current_peak_a", # Phase current peak [A]
  34. "line_current_rms_a", # Line current rms [A]
  35. # Speed
  36. "shaft_speed_rpm", # Shaft speed [rpm]
  37. "no_load_speed_rpm", # No-load speed [rpm]
  38. # Thermal
  39. "winding_temp_c", # Winding temperature [C]
  40. })
  41. # Metrics that are always required for a valid result.
  42. REQUIRED_METRICS = frozenset({
  43. "tavg_nm",
  44. "ripple_pct",
  45. "efficiency_pct",
  46. "total_losses_w",
  47. })
  48. # Human-friendly labels for display.
  49. METRIC_LABELS = {
  50. "tavg_nm": "Average Torque [Nm]",
  51. "tmax_nm": "Max Torque [Nm]",
  52. "tmin_nm": "Min Torque [Nm]",
  53. "ripple_pct": "Torque Ripple [%]",
  54. "ripple_nm": "Torque Ripple [Nm]",
  55. "ripple_abs_nm": "Torque Ripple (abs) [Nm]",
  56. "shaft_torque_nm": "Shaft Torque [Nm]",
  57. "stall_torque_nm": "Stall Torque [Nm]",
  58. "torque_constant": "Torque Constant [Nm/A]",
  59. "efficiency_pct": "Efficiency [%]",
  60. "input_power_w": "Input Power [W]",
  61. "output_power_w": "Output Power [W]",
  62. "em_power_w": "EM Power [W]",
  63. "power_factor": "Power Factor",
  64. "total_losses_w": "Total Losses [W]",
  65. "copper_loss_w": "Copper Loss [W]",
  66. "iron_loss_w": "Iron Loss [W]",
  67. "magnet_loss_w": "Magnet Loss [W]",
  68. "back_emf_v": "Back EMF [V]",
  69. "back_emf_thd_pct": "Back EMF THD [%]",
  70. "phase_current_peak_a": "Phase Current (peak) [A]",
  71. "line_current_rms_a": "Line Current (rms) [A]",
  72. "shaft_speed_rpm": "Shaft Speed [rpm]",
  73. "no_load_speed_rpm": "No-load Speed [rpm]",
  74. "winding_temp_c": "Winding Temp [C]",
  75. }
  76. # Metric optimization direction: "higher" is better, "lower" is better.
  77. # Used by result_analyst for target comparison and best-point selection (C1 fix).
  78. METRIC_DIRECTIONS = {
  79. "tavg_nm": "higher",
  80. "tmax_nm": "higher",
  81. "tmin_nm": "higher",
  82. "stall_torque_nm": "higher",
  83. "torque_constant": "higher",
  84. "efficiency_pct": "higher",
  85. "output_power_w": "higher",
  86. "em_power_w": "higher",
  87. "power_factor": "higher",
  88. "shaft_speed_rpm": "higher",
  89. "no_load_speed_rpm": "higher",
  90. "ripple_pct": "lower",
  91. "ripple_nm": "lower",
  92. "ripple_abs_nm": "lower",
  93. "total_losses_w": "lower",
  94. "copper_loss_w": "lower",
  95. "iron_loss_w": "lower",
  96. "magnet_loss_w": "lower",
  97. "back_emf_thd_pct": "lower",
  98. "winding_temp_c": "lower",
  99. # Neutral / informational (no optimization direction)
  100. "shaft_torque_nm": "higher",
  101. "input_power_w": "neutral",
  102. "back_emf_v": "neutral",
  103. "phase_current_peak_a": "neutral",
  104. "line_current_rms_a": "neutral",
  105. }