@sh.add_function(dsp, outputs=['gear_box_torques_in<0>'])
def calculate_gear_box_torques_in(
gear_box_torques, gear_box_speeds_in, gear_box_speeds_out,
gear_box_temperatures, gear_box_efficiency_parameters_cold_hot,
gear_box_temperature_references, min_engine_on_speed):
"""
Calculates torque required according to the temperature profile [N*m].
:param gear_box_torques:
Torque gear box vector [N*m].
:type gear_box_torques: numpy.array
:param gear_box_speeds_in:
Engine speed vector [RPM].
:type gear_box_speeds_in: numpy.array
:param gear_box_speeds_out:
Wheel speed vector [RPM].
:type gear_box_speeds_out: numpy.array
:param gear_box_temperatures:
Temperature vector [°C].
:type gear_box_temperatures: numpy.array
:param gear_box_efficiency_parameters_cold_hot:
Parameters of gear box efficiency model for cold/hot phases:
- 'hot': `gbp00`, `gbp10`, `gbp01`
- 'cold': `gbp00`, `gbp10`, `gbp01`
:type gear_box_efficiency_parameters_cold_hot: dict
:param gear_box_temperature_references:
Cold and hot reference temperatures [°C].
:type gear_box_temperature_references: tuple
:param min_engine_on_speed:
Minimum engine speed to consider the engine to be on [RPM].
:type min_engine_on_speed: float
:return:
Torque required vector according to the temperature profile [N*m].
:rtype: numpy.array
"""
par = gear_box_efficiency_parameters_cold_hot
T_cold, T_hot = gear_box_temperature_references
t_out, e_s, gb_s = gear_box_torques, gear_box_speeds_in, gear_box_speeds_out
fun = functools.partial(_gear_box_torques_in, min_engine_on_speed)
t = fun(t_out, e_s, gb_s, par['hot'])
if not T_cold == T_hot:
gbt = gear_box_temperatures
b = gbt <= T_hot
t_cold = fun(t_out[b], e_s[b], gb_s[b], par['cold'])
t[b] += (T_hot - gbt[b]) / (T_hot - T_cold) * (t_cold - t[b])
return t