3. SPM Airflow Analyzer
This analyzer is designed to determine how much supplemental axial airflow is needed to cool the rotor to a specified max_temp.
3.1. Model Background
The SPM rotor is modeled using the thermal resistance network described in SPM Rotor Thermal Analyzer. The implementation of the resistances and nodal locations can be found in the source code of the create_resistance_network method of SPM_RotorThemalAnalyzer. In this analyzer, the axial airflow is varied to increase the convection rate on the rotor in order to improve cooling.
The problem class for the AirflowAnalyzer contains the Rotor Thermal Analyzer which is used to calculate the magnet temperature as a function of the axial airflow. The AirflowAnalyzer solve a single objective minimization problem subject to a constraint that the magnet temperature is less than max_temp.
3.2. Inputs from User
The airflow analyzer utilizes the same mat_dict and losses dictionary as the SPM Rotor Thermal Analyzer (see here). In addition, the following inputs must be defined for the problem class. The location of these inputs are shown on this figure:
Variable/key_value name |
Description |
Units |
|---|---|---|
r_sh |
Shaft radius |
m |
d_m |
Magnet thickness |
m |
r_ro |
Rotor outer radius |
m |
d_sl |
Sleeve Thickness |
m |
l_st |
Stack length |
m |
l_hub |
Hub thickness |
m |
max_temp |
Maximum allowable Rotor Temperature |
C |
The following code demonstrates how the eMach thermal analyzer for the rotor can be used to calculate the required airflow to cool a rotor.
import numpy as np
from eMach.mach_eval.analyzers.mechanical.rotor_thermal import AirflowProblem,AirflowAnalyzer
# Example Machine Dimensions
r_sh=5E-3 # [m]
d_m=3E-3 # [m]
r_ro=12.5E-3 # [m]
d_ri=r_ro-r_sh - d_m # [m]
d_sl=1E-3 # [m]
l_st=50E-3 # [m]
l_hub=3E-3 # [m]
r_si=r_ro+d_sl+1E-3 # [m]
# Define Material Dictionary
mat_dict= {'shaft_therm_conductivity': 51.9, # W/m-k ,
'core_therm_conductivity': 28, # W/m-k
'magnet_therm_conductivity': 8.95, # W/m-k ,
'sleeve_therm_conductivity': 0.71, # W/m-k,
'air_therm_conductivity' :.02624, #W/m-K
'air_viscosity' :1.562E-5, #m^2/s
'air_cp' :1, #kJ/kg
'rotor_hub_therm_conductivity':205.0} #W/m-K}
# Operating Conditions
T_ref=25 # [C]
omega=120E3*2*np.pi/60 # [rad/s]
losses={'rotor_iron_loss':.001,'magnet_loss':135}
max_temp=80
# Create an AirflowProblem object
afp=AirflowProblem(r_sh, d_ri, r_ro, d_sl, r_si, l_st, l_hub, T_ref, losses,
omega, max_temp, mat_dict)
# Create an Airflow Analyzer
ana=AirflowAnalyzer()
3.3. Outputs to User
The AirflowAnalyzer returns a results object with the following keys:
Message: returns false if magnets exceed the specified maximum temperature.Magnet Temp: In CelsiusRequired Airflow: in m/s
The following code demonstrates how to use the airflow analyzer to solve the airflow problem.
# Analyze problem for required airflow
results=ana.analyze(afp)
print(results)
The results object returned by the analyzer for this example is shown below:
{'Message': True,
'Magnet Temp': array([73.43703021]),
'Required Airflow': array([1.23618711e-08])}