def calculate_phases_willans_factors(
params, engine_fuel_lower_heating_value, engine_stroke, engine_capacity,
min_engine_on_speed, fmep_model, times, phases_indices,
engine_speeds_out, engine_powers_out, velocities, accelerations,
motive_powers, engine_coolant_temperatures, missing_powers,
angle_slopes):
"""
Calculates the Willans factors for each phase.
:param params:
CO2 emission model parameters (a2, b2, a, b, c, l, l2, t, trg).
The missing parameters are set equal to zero.
:type params: lmfit.Parameters
:param engine_fuel_lower_heating_value:
Fuel lower heating value [kJ/kg].
:type engine_fuel_lower_heating_value: float
:param engine_stroke:
Engine stroke [mm].
:type engine_stroke: float
:param engine_capacity:
Engine capacity [cm3].
:type engine_capacity: float
:param min_engine_on_speed:
Minimum engine speed to consider the engine to be on [RPM].
:type min_engine_on_speed: float
:param fmep_model:
Engine FMEP model.
:type fmep_model: FMEP
:param times:
Time vector [s].
:type times: numpy.array
:param phases_indices:
Indices of the cycle phases [-].
:type phases_indices: numpy.array
:param engine_speeds_out:
Engine speed vector [RPM].
:type engine_speeds_out: numpy.array
:param engine_powers_out:
Engine power vector [kW].
:type engine_powers_out: numpy.array
:param velocities:
Velocity vector [km/h].
:type velocities: numpy.array
:param accelerations:
Acceleration vector [m/s2].
:type accelerations: numpy.array
:param motive_powers:
Motive power [kW].
:type motive_powers: numpy.array
:param engine_coolant_temperatures:
Engine coolant temperature vector [°C].
:type engine_coolant_temperatures: numpy.array
:param missing_powers:
Missing engine power [kW].
:type missing_powers: numpy.array
:param angle_slopes:
Angle slope vector [rad].
:type angle_slopes: numpy.array
:return:
Willans factors:
- av_velocities [km/h]
- av_slope [rad]
- distance [km]
- init_temp [°C]
- av_temp [°C]
- end_temp [°C]
- av_vel_pos_mov_pow [kw/h]
- av_pos_motive_powers [kW]
- sec_pos_mov_pow [s]
- av_neg_motive_powers [kW]
- sec_neg_mov_pow [s]
- av_pos_accelerations [m/s2]
- av_engine_speeds_out_pos_pow [RPM]
- av_pos_engine_powers_out [kW]
- engine_bmep_pos_pow [bar]
- mean_piston_speed_pos_pow [m/s]
- fuel_mep_pos_pow [bar]
- fuel_consumption_pos_pow [g/sec]
- willans_a [g/kWh]
- willans_b [g/h]
- specific_fuel_consumption [g/kWh]
- indicated_efficiency [-]
- willans_efficiency [-]
:rtype: dict
"""
factors = []
for i, j in phases_indices:
factors.append(calculate_willans_factors(
params, engine_fuel_lower_heating_value, engine_stroke,
engine_capacity, min_engine_on_speed, fmep_model,
engine_speeds_out[i:j], engine_powers_out[i:j], times[i:j],
velocities[i:j], accelerations[i:j], motive_powers[i:j],
engine_coolant_temperatures[i:j], missing_powers[i:j],
angle_slopes[i:j]
))
return factors