| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- """Metric key definitions - single source of truth for the Web backend.
- This MUST stay in sync with:
- - src/solver_core.py METRIC_DEFINITIONS (local solver)
- - scripts/robust_motorcad.py METRIC_DEFINITIONS (robust solver)
- When adding a new metric, update all three locations.
- """
- # All known metric keys produced by Motor-CAD result parsing.
- METRIC_KEYS = frozenset({
- # Torque
- "tavg_nm", # Average torque (virtual work) [Nm]
- "tmax_nm", # Max torque [Nm]
- "tmin_nm", # Min torque [Nm]
- "ripple_pct", # Torque ripple [%]
- "ripple_nm", # Torque ripple [Nm]
- "ripple_abs_nm", # Absolute torque ripple [Nm]
- "shaft_torque_nm", # Shaft torque [Nm]
- "stall_torque_nm", # Stall torque [Nm]
- "torque_constant", # Torque constant Kt [Nm/A]
- # Efficiency / power
- "efficiency_pct", # System efficiency [%]
- "input_power_w", # Input power [W]
- "output_power_w", # Output power [W]
- "em_power_w", # Electromagnetic power [W]
- "power_factor", # Power factor
- # Losses
- "total_losses_w", # Total losses [W]
- "copper_loss_w", # DC copper loss [W]
- "iron_loss_w", # Stator iron loss [W]
- "magnet_loss_w", # Magnet loss [W]
- # Electrical
- "back_emf_v", # Back EMF line-line rms [V]
- "back_emf_thd_pct", # Back EMF THD [%]
- "phase_current_peak_a", # Phase current peak [A]
- "line_current_rms_a", # Line current rms [A]
- # Speed
- "shaft_speed_rpm", # Shaft speed [rpm]
- "no_load_speed_rpm", # No-load speed [rpm]
- # Thermal
- "winding_temp_c", # Winding temperature [C]
- })
- # Metrics that are always required for a valid result.
- REQUIRED_METRICS = frozenset({
- "tavg_nm",
- "ripple_pct",
- "efficiency_pct",
- "total_losses_w",
- })
- # Human-friendly labels for display.
- METRIC_LABELS = {
- "tavg_nm": "Average Torque [Nm]",
- "tmax_nm": "Max Torque [Nm]",
- "tmin_nm": "Min Torque [Nm]",
- "ripple_pct": "Torque Ripple [%]",
- "ripple_nm": "Torque Ripple [Nm]",
- "ripple_abs_nm": "Torque Ripple (abs) [Nm]",
- "shaft_torque_nm": "Shaft Torque [Nm]",
- "stall_torque_nm": "Stall Torque [Nm]",
- "torque_constant": "Torque Constant [Nm/A]",
- "efficiency_pct": "Efficiency [%]",
- "input_power_w": "Input Power [W]",
- "output_power_w": "Output Power [W]",
- "em_power_w": "EM Power [W]",
- "power_factor": "Power Factor",
- "total_losses_w": "Total Losses [W]",
- "copper_loss_w": "Copper Loss [W]",
- "iron_loss_w": "Iron Loss [W]",
- "magnet_loss_w": "Magnet Loss [W]",
- "back_emf_v": "Back EMF [V]",
- "back_emf_thd_pct": "Back EMF THD [%]",
- "phase_current_peak_a": "Phase Current (peak) [A]",
- "line_current_rms_a": "Line Current (rms) [A]",
- "shaft_speed_rpm": "Shaft Speed [rpm]",
- "no_load_speed_rpm": "No-load Speed [rpm]",
- "winding_temp_c": "Winding Temp [C]",
- }
- # Metric optimization direction: "higher" is better, "lower" is better.
- # Used by result_analyst for target comparison and best-point selection (C1 fix).
- METRIC_DIRECTIONS = {
- "tavg_nm": "higher",
- "tmax_nm": "higher",
- "tmin_nm": "higher",
- "stall_torque_nm": "higher",
- "torque_constant": "higher",
- "efficiency_pct": "higher",
- "output_power_w": "higher",
- "em_power_w": "higher",
- "power_factor": "higher",
- "shaft_speed_rpm": "higher",
- "no_load_speed_rpm": "higher",
- "ripple_pct": "lower",
- "ripple_nm": "lower",
- "ripple_abs_nm": "lower",
- "total_losses_w": "lower",
- "copper_loss_w": "lower",
- "iron_loss_w": "lower",
- "magnet_loss_w": "lower",
- "back_emf_thd_pct": "lower",
- "winding_temp_c": "lower",
- # Neutral / informational (no optimization direction)
- "shaft_torque_nm": "higher",
- "input_power_w": "neutral",
- "back_emf_v": "neutral",
- "phase_current_peak_a": "neutral",
- "line_current_rms_a": "neutral",
- }
|