Skip to content

Commit 8471c67

Browse files
committed
refactor!: remove ADJUSTMENT from FACILITY_INPUTS
ADJUSTMENT in FACILITY_INPUTS has been of little usage, and it is easy to manipulate data oneself, instead of ecalc providing this functionality. Refs: equinor/ecalc-internal#1425
1 parent ecbacfa commit 8471c67

File tree

24 files changed

+140
-315
lines changed

24 files changed

+140
-315
lines changed
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
---
2+
title: v12.0 to v13.0
3+
description: v12.0 to v13.0 migration
4+
sidebar_position: -16
5+
---
6+
7+
# v12.0 to v13.0
8+
9+
### Migration overview
10+
11+
#### Migrate ADJUSTMENT section for FACILITY_INPUTS
12+
13+
If you have been using [ADJUSTMENT](../references/ADJUSTMENT) section for `FACILITY_INPUTS`, you will need to adjust your input data accordingly, as this section has been removed in v13.0).
14+
15+
- **a.** If you have only loaded the file being used with `ADJUSTMENT` once, you can simply modify the original data file to include the adjustments directly. This can e.g. be done by copying data into Excel and apply the `Ax+b` formula directly to the data (ie. `data_value * factor + constant`), and save the file/overwrite the data in-place.
16+
- **b.** If you have loaded the file more than once, or used different `ADJUSTMENT` settings for different instances, you will need to create separate data files for each instance, with the adjustments applied directly to the data in each file. Make sure that you
17+
rerun your file after you have applied and saved the adjustments to the file, compare with original data, and see that there are no differences in the results.
18+

docs/docs/about/references/ADJUSTMENT.md

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,15 @@
1-
# ADJUSTMENT
1+
# ADJUSTMENT (removed in v13.0)
22
[eCalc Model](index.md)
33
/ [FACILITY_INPUTS](FACILITY_INPUTS)
44
/ [ADJUSTMENT](ADJUSTMENT)
55

6-
| Required | Child of | Children/Options |
7-
|----------|-----------------|------------------|
8-
| No | FACILITY_INPUTS | CONSTANT <br /> FACTOR |
6+
| Required | Child of | Children/Options | Removed |
7+
|----------|-----------------|------------------|------------------|
8+
| No | FACILITY_INPUTS | CONSTANT <br /> FACTOR | Removed in v13.0 |
9+
10+
:::warning
11+
`ADJUSTMENT` has been removed in v13.0. See [Migration Guide](../migration_guides/v12.0_to_v13.0.md) on how to adjust your input data accordingly in >= v13.0
12+
:::
913

1014
## Description
1115
For various reasons (degenerated equipment, liquid pumps, etc.), the predicted energy usage from

docs/drafts/next.draft.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,12 @@ sidebar_position: -59
1414

1515
## Breaking changes
1616

17+
### Facility Inputs Adjustments
18+
19+
`ADJUSTMENT` section for `FACILITY_INPUTS` has been removed. This section was rarely used and was of limited usefulness. The original data was adjusted early in the process,
20+
and users would not get any extra functionality from using this section, rather than being able to reuse the same original data with different adjustments, or to make it easy to adjust
21+
data on-the-fly, to e.g. reflect deterioration over time. See migration guide for how to adjust data now.
22+
1723
### CLI
1824

1925
- `--csv` will no longer disable the csv file, `--no-csv` should be used instead.

src/libecalc/domain/infrastructure/energy_components/generator_set/generator_set_model.py

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import numpy as np
22

33
from libecalc.common.interpolation import setup_interpolator_1d
4-
from libecalc.common.list.adjustment import transform_linear
54
from libecalc.common.string.string_utils import generate_id
65
from libecalc.domain.infrastructure.energy_components.generator_set.generator_set_validator import GeneratorSetValidator
76
from libecalc.domain.resource import Resource
@@ -21,25 +20,16 @@ def __init__(
2120
self,
2221
name: str,
2322
resource: Resource,
24-
energy_usage_adjustment_constant: float,
25-
energy_usage_adjustment_factor: float,
2623
):
2724
self._name = name
2825
self._id = generate_id(self._name)
2926
self.resource = resource
30-
self.energy_usage_adjustment_constant = energy_usage_adjustment_constant
31-
self.energy_usage_adjustment_factor = energy_usage_adjustment_factor
3227
self.validator = GeneratorSetValidator(resource=self.resource)
3328
self.validator.validate()
3429

3530
# Initialize the generator model
3631
fuel_values = self.electricity2fuel_fuel_axis
3732
power_values = self.electricity2fuel_power_axis
38-
fuel_values = transform_linear(
39-
np.array(fuel_values),
40-
constant=energy_usage_adjustment_constant,
41-
factor=energy_usage_adjustment_factor,
42-
)
4333
self._func = setup_interpolator_1d(
4434
variable=np.array(power_values),
4535
function_values=np.array(fuel_values),

src/libecalc/domain/infrastructure/energy_components/legacy_consumer/tabulated/tabular_consumer_function.py

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,6 @@ def __init__(
4242
self,
4343
headers: list[str],
4444
data: list[list[float]],
45-
energy_usage_adjustment_constant: float,
46-
energy_usage_adjustment_factor: float,
4745
variables: list[TimeSeriesVariable],
4846
power_loss_factor: TimeSeriesPowerLossFactor | None = None,
4947
):
@@ -53,8 +51,6 @@ def __init__(
5351
self._tabular_energy_function = TabularEnergyFunction(
5452
headers=headers,
5553
data=data,
56-
energy_usage_adjustment_constant=energy_usage_adjustment_constant,
57-
energy_usage_adjustment_factor=energy_usage_adjustment_factor,
5854
)
5955
self._variables = variables
6056

src/libecalc/domain/infrastructure/energy_components/legacy_consumer/tabulated/tabular_energy_function.py

Lines changed: 3 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
from libecalc.common.energy_usage_type import EnergyUsageType
88
from libecalc.common.errors.exceptions import InvalidColumnException
99
from libecalc.common.interpolation import setup_interpolator_1d, setup_interpolator_n_dimensional
10-
from libecalc.common.list.adjustment import transform_linear
1110
from libecalc.domain.component_validation_error import (
1211
ProcessEqualLengthValidationException,
1312
ProcessHeaderValidationException,
@@ -40,31 +39,19 @@ def __init__(
4039
self,
4140
headers: list[str],
4241
data: list[list[float]],
43-
energy_usage_adjustment_constant: float,
44-
energy_usage_adjustment_factor: float,
4542
):
4643
self.headers = headers
4744
self.data = data
48-
self.energy_usage_adjustment_constant = energy_usage_adjustment_constant
49-
self.energy_usage_adjustment_factor = energy_usage_adjustment_factor
5045
self.validate_headers()
5146
self.validate_data()
5247

5348
"""Tabular consumer energy function [MW] or [Sm3/day]."""
54-
function_values = self.get_function_values()
49+
function_values = np.asarray(self.get_function_values(), dtype=np.float64)
5550
variables = [Variable(name=name, values=values) for name, values in self.get_variables().items()]
5651

5752
self.required_variables = [variable.name for variable in variables]
58-
function_values_adjusted = transform_linear(
59-
values=np.reshape(np.asarray(function_values), -1),
60-
constant=self.energy_usage_adjustment_constant,
61-
factor=self.energy_usage_adjustment_factor,
62-
)
63-
# If function_values_adjusted can be a float, convert it to a 0-dim array:
64-
if isinstance(function_values_adjusted, float):
65-
function_values_adjusted = np.array([function_values_adjusted])
66-
67-
self._func = self._setup_interpolator(variables, function_values_adjusted)
53+
54+
self._func = self._setup_interpolator(variables, function_values)
6855
self.energy_usage_type = self.get_energy_usage_type()
6956

7057
def interpolate(self, variables_array: np.ndarray) -> np.ndarray:

src/libecalc/domain/process/compressor/core/sampled/compressor_model_sampled.py

Lines changed: 11 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
from libecalc.common.decorators.feature_flags import Feature
1010
from libecalc.common.energy_usage_type import EnergyUsageType
1111
from libecalc.common.errors.exceptions import InvalidColumnException
12-
from libecalc.common.list.adjustment import transform_linear
1312
from libecalc.common.list.list_utils import array_to_list
1413
from libecalc.common.logger import logger
1514
from libecalc.common.units import Unit
@@ -55,8 +54,6 @@ class CompressorModelSampled:
5554

5655
def __init__(
5756
self,
58-
energy_usage_adjustment_constant: float,
59-
energy_usage_adjustment_factor: float,
6057
energy_usage_type: EnergyUsageType,
6158
energy_usage_values: list[float],
6259
rate_values: list[float] | None = None,
@@ -83,21 +80,12 @@ def __init__(
8380
self.validate_equal_list_lengths()
8481
self.validate_non_negative_values()
8582

86-
function_values_adjusted: NDArray[np.float64] = transform_linear(
87-
values=np.reshape(np.array(energy_usage_values).astype(float), -1),
88-
constant=energy_usage_adjustment_constant,
89-
factor=energy_usage_adjustment_factor,
90-
)
83+
function_values = np.asarray(energy_usage_values, dtype=np.float64)
84+
85+
self.fuel_values: NDArray[np.float64] | None = None
9186

92-
self.fuel_values_adjusted: NDArray[np.float64] | None = None
93-
self.power_interpolation_values_adjusted: NDArray[np.float64] | None = None
9487
if not self.function_values_are_power and self.power_interpolation_values:
95-
self.fuel_values_adjusted = function_values_adjusted
96-
self.power_interpolation_values_adjusted = transform_linear(
97-
values=np.reshape(self.power_interpolation_values, -1),
98-
constant=energy_usage_adjustment_constant,
99-
factor=energy_usage_adjustment_factor,
100-
)
88+
self.fuel_values = np.asarray(energy_usage_values, dtype=np.float64)
10189

10290
variables: dict[str, list[float]] = {}
10391
if rate_values is not None:
@@ -110,7 +98,7 @@ def __init__(
11098
self.required_variables = list(variables.keys())
11199

112100
function_value_header = "ENERGY_USAGE"
113-
sampled_data = pd.DataFrame(np.asarray(list(variables.values()) + [list(function_values_adjusted)]).transpose())
101+
sampled_data = pd.DataFrame(np.asarray(list(variables.values()) + [list(function_values)]).transpose())
114102
sampled_data.columns = list(variables.keys()) + [function_value_header]
115103

116104
apparent_dimension: int = len(self.required_variables)
@@ -258,7 +246,12 @@ def evaluate(
258246
discharge_pressure=pd_to_evaluate,
259247
)
260248

261-
turbine = self.Turbine(self.fuel_values_adjusted, self.power_interpolation_values_adjusted)
249+
turbine = self.Turbine(
250+
fuel_values=self.fuel_values,
251+
power_values=np.asarray(self.power_interpolation_values, dtype=np.float64)
252+
if self.power_interpolation_values is not None
253+
else None,
254+
)
262255
turbine_result = turbine.calculate_turbine_power_usage(interpolated_consumer_values)
263256
turbine_energy_result = turbine_result.get_energy_result() if turbine_result is not None else None
264257
turbine_power = turbine_energy_result.power.values if turbine_energy_result is not None else None

src/libecalc/domain/process/pump/pump.py

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,22 +20,16 @@ class PumpModel:
2020
pump_chart (ChartData): Data for pump chart with speed, head, rate and efficiency
2121
head_margin (float, optional): Margin for accepting head values above maximum head from pump chart.
2222
Values above within margin will be set to maximum. Defaults to 0.0.
23-
energy_usage_adjustment_constant (float, optional): Constant to be added to the computed power. Defaults to 0.0.
24-
energy_usage_adjustment_factor (float, optional): Factor to be multiplied to computed power. Defaults to 1.0.
2523
"""
2624

2725
def __init__(
2826
self,
2927
pump_chart: ChartData,
3028
head_margin: float = 0.0,
31-
energy_usage_adjustment_constant: float = 0.0,
32-
energy_usage_adjustment_factor: float = 1.0,
3329
):
3430
assert isinstance(pump_chart, ChartData)
3531
self._pump_chart = Chart(pump_chart)
3632
self._head_margin = head_margin
37-
self._energy_usage_adjustment_constant = energy_usage_adjustment_constant
38-
self._energy_usage_adjustment_factor = energy_usage_adjustment_factor
3933

4034
def get_max_standard_rates(
4135
self,
@@ -199,7 +193,7 @@ def simulate(
199193
:return: power [MW], head [J/kg], failure status
200194
"""
201195
if rate <= 0:
202-
return self._energy_usage_adjustment_constant, 0.0, PumpFailureStatus.NO_FAILURE
196+
return 0.0, 0.0, PumpFailureStatus.NO_FAILURE
203197

204198
# Reservoir rates: m3/day, pumpchart rates: m3/h
205199
rate_m3_per_hour = rate / UnitConstants.HOURS_PER_DAY
@@ -257,7 +251,7 @@ def simulate(
257251
)
258252
power = power_before_efficiency_is_applied / efficiency[0]
259253

260-
power_out = power * self._energy_usage_adjustment_factor + self._energy_usage_adjustment_constant
254+
power_out = power
261255

262256
return power_out, operational_head, failure_status
263257

src/libecalc/fixtures/cases/all_energy_usage_models/data/all_energy_usage_models.yaml

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,6 @@ FACILITY_INPUTS:
3232
EFFICIENCY: FRACTION
3333
HEAD: M
3434
RATE: AM3_PER_HOUR
35-
ADJUSTMENT:
36-
CONSTANT: 1.0
37-
FACTOR: 0.8
3835
- NAME: compressor_sampled_1d
3936
FILE: einput/compressor_sampled_1d.csv
4037
TYPE: COMPRESSOR_TABULAR

src/libecalc/presentation/yaml/mappers/component_mapper.py

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,6 @@
4747
ConsumerFunctionMapper,
4848
InvalidEnergyUsageModelException,
4949
)
50-
from libecalc.presentation.yaml.mappers.facility_input import _get_adjustment_constant, _get_adjustment_factor
5150
from libecalc.presentation.yaml.mappers.yaml_mapping_context import MappingContext
5251
from libecalc.presentation.yaml.mappers.yaml_path import YamlPath
5352
from libecalc.presentation.yaml.model_validation_exception import ModelValidationException
@@ -255,15 +254,11 @@ def _resolve_fuel(
255254
def _create_generator_set_model(self, reference: str) -> GeneratorSetModel:
256255
model = self._references.get_generator_set_model(reference)
257256
resource = self._get_resource(model.file, reference)
258-
adjustment_constant = _get_adjustment_constant(model)
259-
adjustment_factor = _get_adjustment_factor(model)
260257

261258
try:
262259
return GeneratorSetModel(
263260
name=model.name,
264261
resource=resource,
265-
energy_usage_adjustment_constant=adjustment_constant,
266-
energy_usage_adjustment_factor=adjustment_factor,
267262
)
268263
except DomainValidationException as e:
269264
raise ModelValidationException(

0 commit comments

Comments
 (0)