@sh.add_function(dsp, outputs=['gear_box_torques'])
def calculate_gear_box_torques(
gear_box_powers_out, gear_box_speeds_out, gear_box_speeds_in,
min_engine_on_speed):
"""
Calculates torque entering the gear box [N*m].
:param gear_box_powers_out:
Gear box power vector [kW].
:type gear_box_powers_out: numpy.array | float
:param gear_box_speeds_in:
Engine speed vector [RPM].
:type gear_box_speeds_in: numpy.array | float
:param gear_box_speeds_out:
Wheel speed vector [RPM].
:type gear_box_speeds_out: numpy.array | float
:param min_engine_on_speed:
Minimum engine speed to consider the engine to be on [RPM].
:type min_engine_on_speed: float
:return:
Torque gear box vector [N*m].
:rtype: numpy.array | float
.. note:: Torque entering the gearbox can be from engine side
(power mode or from wheels in motoring mode)
"""
if isinstance(gear_box_speeds_in, float):
if gear_box_powers_out > 0:
x = gear_box_speeds_in
else:
x = gear_box_speeds_out
if x <= min_engine_on_speed:
return 0
return gear_box_powers_out / x * 30000.0 / math.pi
else:
x = np.where(
gear_box_powers_out > 0, gear_box_speeds_in, gear_box_speeds_out
)
with np.errstate(divide='ignore', invalid='ignore'):
y = gear_box_powers_out / x
y *= 30000.0 / math.pi
return np.where(x <= min_engine_on_speed, 0, y)