@sh.add_function(dsp, outputs=[
'motor_p4_front_electric_powers', 'motor_p4_rear_electric_powers',
'motor_p3_front_electric_powers', 'motor_p3_rear_electric_powers',
'motor_p2_electric_powers', 'motor_p2_planetary_electric_powers',
'motor_p1_electric_powers', 'motor_p0_electric_powers'
])
def identify_motors_electric_powers(
hev_power_model, hybrid_modes, motive_powers, motors_maximums_powers,
motors_electric_powers):
"""
Identify motors electric power split [kW].
:param hev_power_model:
Hybrid Electric Vehicle power balance model.
:type hev_power_model: HEV
:param motive_powers:
Motive power [kW].
:type motive_powers: numpy.array
:param hybrid_modes:
Hybrid mode status (0: EV, 1: Parallel, 2: Serial).
:type hybrid_modes: numpy.array
:param motors_maximums_powers:
Maximum powers of electric motors [kW].
:type motors_maximums_powers: numpy.array
:param motors_electric_powers:
Cumulative motors electric power [kW].
:type motors_electric_powers: numpy.array
:return:
Motors electric powers [kW].
:rtype: tuple[numpy.array]
"""
hev, pb = hev_power_model, -motors_electric_powers[None, :]
return np.choose(hybrid_modes, [
func(motive_powers, motors_maximums_powers, 0)[-1](pb)
for func in (hev.ev, hev.parallel, hev.serial)
])