@sh.add_function(dsp, outputs=['clutch_tc_efficiencies'])
def calculate_clutch_tc_efficiencies(
clutch_tc_speeds_delta, k_factor_curve, gear_box_speeds_in,
engine_speeds_out):
"""
Calculates the efficiency of the clutch or torque converter [-].
:param clutch_tc_speeds_delta:
Engine speed delta due to the clutch or torque converter [RPM].
:type clutch_tc_speeds_delta: numpy.array
:param k_factor_curve:
k factor curve.
:type k_factor_curve: callable
:param gear_box_speeds_in:
Gear box speed vector [RPM].
:type gear_box_speeds_in: numpy.array
:param engine_speeds_out:
Engine speed [RPM].
:type engine_speeds_out: numpy.array
:return:
Clutch or torque converter efficiency [-].
:rtype: numpy.array
"""
is_not_eng2gb = gear_box_speeds_in >= engine_speeds_out
speed_out = np.where(is_not_eng2gb, engine_speeds_out, gear_box_speeds_in)
speed_in = np.where(is_not_eng2gb, gear_box_speeds_in, engine_speeds_out)
ratios = np.ones_like(clutch_tc_speeds_delta, dtype=float)
b = (speed_in > 0) & ~np.isclose(clutch_tc_speeds_delta, 0)
ratios[b] = speed_out[b] / speed_in[b]
return k_factor_curve(ratios) * ratios