@sh.add_function(dsp, inputs_kwargs=True, outputs=_o, weight=40)
@sh.add_function(dsp, outputs=_o, weight=90)
def calculate_gear_box_efficiencies_torques_temperatures(
gear_box_loss_model, times, gear_box_powers_out, gear_box_speeds_in,
gear_box_speeds_out, gear_box_torques, engine_thermostat_temperature,
gears=None):
"""
Calculates gear box efficiency [-], torque in [N*m], and temperature [°C].
:param gear_box_loss_model:
Gear box loss model.
:type gear_box_loss_model: GearBoxLosses
:param times:
Time vector [s].
:type times: numpy.array
: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_speeds_out:
Wheel speed vector [RPM].
:type gear_box_speeds_out: numpy.array
:param gear_box_torques:
Torque gear_box vector [N*m].
:type gear_box_torques: numpy.array
:param engine_thermostat_temperature:
Engine thermostat temperature [°C].
:type engine_thermostat_temperature: float
:param gears:
Gear vector [-].
:type gears: numpy.array, optional
:return:
Gear box efficiency [-], torque in [N*m], and temperature [°C] vectors.
:rtype: (numpy.array, numpy.array, numpy.array)
.. note:: Torque entering the gearbox can be from engine side
(power mode or from wheels in motoring mode).
"""
temp, to_in, eff = List(), List(), List()
func = gear_box_loss_model.init_losses(
temp, times, gear_box_powers_out, gear_box_speeds_out,
gear_box_speeds_in, gears, gear_box_torques
)
for i in range(times.shape[0]):
temp[i + 1], to_in[i], eff[i] = func(i)
temp = np.minimum(engine_thermostat_temperature - 5, temp[:-1].toarray())
return temp, to_in.toarray(), eff.toarray()