-
Notifications
You must be signed in to change notification settings - Fork 0
Fuel Consumption Model
stefanosts edited this page Aug 6, 2016
·
1 revision
The Fuel Consumption Model of the Parametric CO2MPAS is based on the Extended Willans Lines Model and is physically represented as follows:
, where:
Sources:
- Indicative Sources: L. Guzzela et al. Introduction to modelling and control of internal combustion engines, Second Edition, Springer
- A. Urlaub, Verbrennungsmotoren, Springer-Verlag, Berlin, Germany, 1994
- X. Wei, Modeling and control of a hybrid electric drivetrain for optimum fuel economy performance and driveability, PhD dissertation, Ohio State university, 2004
- Yuan Zou et al., Optimal Sizing and Control Strategy Design for Heavy Hybrid Electric Truck, Mathematical Problems in Engineering, Volume 2012, Article ID 404073
Name | Units | Source / Comments | Parameter |
---|
CO2 Emissions [g/sec] / co2_emissions
Bellow the main raw python function is provided.
def calculate_co2_emissions(
engine_speeds_out, engine_powers_out, mean_piston_speeds,
brake_mean_effective_pressures, engine_coolant_temperatures, on_engine,
engine_fuel_lower_heating_value, idle_engine_speed, engine_stroke,
engine_capacity, engine_idle_fuel_consumption, fuel_carbon_content,
params, sub_values=None):
p = params.valuesdict()
if sub_values is None:
sub_values = np.ones_like(mean_piston_speeds, dtype=bool)
# namespace shortcuts
n_speeds = mean_piston_speeds[sub_values]
n_powers = brake_mean_effective_pressures[sub_values]
lhv = engine_fuel_lower_heating_value
e_speeds = engine_speeds_out[sub_values]
e_powers = engine_powers_out[sub_values]
e_temp = engine_coolant_temperatures[sub_values]
e_off = np.logical_not(on_engine[sub_values])
fc = np.zeros_like(e_powers)
# Idle fc correction for temperature
b = (e_speeds < idle_engine_speed[0] + MIN_ENGINE_SPEED)
if p['t'] == 0:
n_temp = np.ones_like(e_powers)
fc[b] = engine_idle_fuel_consumption
else:
n_temp = calculate_normalized_engine_coolant_temperatures(e_temp, p['trg'])
fc[b] = engine_idle_fuel_consumption * np.power(n_temp[b], -p['t'])
FMEP = partial(_calculate_fuel_mean_effective_pressure, p)
b = np.logical_not(b)
fc[b] = FMEP(n_speeds[b], n_powers[b], n_temp[b])[0] # FMEP [bar]
fc[b] *= e_speeds[b] * (engine_capacity / (lhv * 1200)) # [g/sec]
ec_p0 = calculate_p0(
p, engine_capacity, engine_stroke, sum(idle_engine_speed), lhv
)
b = (e_powers <= ec_p0) & (e_speeds > sum(idle_engine_speed))
fc[b | (e_speeds < MIN_ENGINE_SPEED) | (fc < 0)] = 0
co2 = fc * fuel_carbon_content
return np.nan_to_num(co2)