diff --git a/src/libecalc/core/models/generator.py b/src/libecalc/core/models/generator.py index fcb8d087c..12a3daa58 100644 --- a/src/libecalc/core/models/generator.py +++ b/src/libecalc/core/models/generator.py @@ -3,6 +3,7 @@ from scipy.interpolate import interp1d from libecalc import dto +from libecalc.common.list.adjustment import transform_linear class GeneratorModelSampled: @@ -10,10 +11,16 @@ def __init__( self, data_transfer_object: dto.GeneratorSetSampled, ): + fuel_values = transform_linear( + np.array(data_transfer_object.fuel_values), + constant=data_transfer_object.energy_usage_adjustment_constant, + factor=data_transfer_object.energy_usage_adjustment_factor, + ) + self._func = interp1d( data_transfer_object.power_values, - data_transfer_object.fuel_values, - fill_value=(min(data_transfer_object.fuel_values), max(data_transfer_object.fuel_values)), + fuel_values.tolist(), + fill_value=(min(fuel_values), max(fuel_values)), bounds_error=False, ) diff --git a/src/tests/libecalc/core/models/test_generator_model.py b/src/tests/libecalc/core/models/test_generator_model.py index 9c5eeb682..81eec821c 100644 --- a/src/tests/libecalc/core/models/test_generator_model.py +++ b/src/tests/libecalc/core/models/test_generator_model.py @@ -50,3 +50,24 @@ def test_capacity_margin(self): ) capacity_margin = el2fuel_function.evaluate_power_capacity_margin(np.array([0, 1, 2, 3, 4, 5])) np.testing.assert_allclose(capacity_margin, np.asarray([3, 2, 1, 0, -1, -2])) + + def test_energy_adjustment(self): + # Testing adjustment of energy usage according to factor and constant specified in facility input. + + fuel_values = [1, 2, 3] + power_values = [1, 2, 3] + adjustment_factor = 1.5 + adjustment_constant = 0.5 + + el2fuel = GeneratorModelSampled( + data_transfer_object=dto.GeneratorSetSampled( + data=[fuel_values, power_values], + headers=["FUEL", "POWER"], + energy_usage_adjustment_factor=adjustment_factor, + energy_usage_adjustment_constant=adjustment_constant, + ) + ) + + expected_adjusted_fuel = list(np.array(fuel_values) * adjustment_factor + adjustment_constant) + + assert el2fuel.evaluate(np.asarray(power_values)).tolist() == expected_adjusted_fuel