@sh.add_function(dsp, outputs=['gear_box_efficiencies'])
def calculate_gear_box_efficiencies(
gear_box_powers_out, gear_box_speeds_in, gear_box_torques,
gear_box_torques_in, min_engine_on_speed):
"""
Calculates gear box efficiency [-].
:param gear_box_powers_out:
Power at wheels vector [kW].
:type gear_box_powers_out: numpy.array
:param gear_box_speeds_in:
Engine speed vector [RPM].
:type gear_box_speeds_in: numpy.array
:param gear_box_torques:
Torque gear_box vector [N*m].
:type gear_box_torques: numpy.array
:param gear_box_torques_in:
Torque required vector [N*m].
:type gear_box_torques_in: numpy.array
:param min_engine_on_speed:
Minimum engine speed to consider the engine to be on [RPM].
:type min_engine_on_speed: float
:return:
Gear box efficiency vector [-].
:rtype: numpy.array
"""
wp = gear_box_powers_out
tgb = gear_box_torques
tr = gear_box_torques_in
es = gear_box_speeds_in
eff = np.zeros_like(wp)
b0 = tr * tgb >= 0
b1 = b0 & (wp >= 0) & (es > min_engine_on_speed) & (tr != 0)
b = ((b0 & (wp < 0)) | b1)
eff[b] = es[b] * tr[b] / wp[b] * (math.pi / 30000)
eff[b1] = 1 / eff[b1]
return np.nan_to_num(eff)