Skip to content

Commit

Permalink
chore: update tests
Browse files Browse the repository at this point in the history
  • Loading branch information
olelod committed Feb 19, 2025
1 parent 3d2eeb8 commit 2c69515
Showing 1 changed file with 87 additions and 60 deletions.
147 changes: 87 additions & 60 deletions tests/libecalc/core/models/test_pump.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
from libecalc.core.models.chart import SingleSpeedChart, VariableSpeedChart
from libecalc.core.models.pump import PumpSingleSpeed, PumpVariableSpeed
from libecalc.core.models.pump.pump import _adjust_for_head_margin
from libecalc.core.models.results.pump import PumpFailureStatus


def test_adjust_for_head_margin():
Expand Down Expand Up @@ -49,6 +50,11 @@ def test_pump_single_speed(single_speed_pump_chart):
)

np.testing.assert_allclose(result.energy_usage, [0, 1.719326, 13.010634], rtol=0.001)
np.testing.assert_equal(result.is_valid, [True, True, False])
np.testing.assert_equal(
result.failure_status,
[PumpFailureStatus.NO_FAILURE, PumpFailureStatus.NO_FAILURE, PumpFailureStatus.REQUIRED_HEAD_ABOVE_ACTUAL_HEAD],
)
np.testing.assert_allclose(result.suction_pressure, suction_pressure)
np.testing.assert_allclose(result.discharge_pressure, discharge_pressure, rtol=0.001)

Expand All @@ -57,29 +63,42 @@ def test_pump_single_speed_above_maximum_head(single_speed_pump_chart):
pump = PumpSingleSpeed(pump_chart=single_speed_pump_chart)

# Head above maximum head - invalid but is reported
assert pump.evaluate_rate_ps_pd_density(
result = pump.evaluate_rate_ps_pd_density(
rate=np.asarray([6648.0]),
suction_pressures=np.asarray([1.0]),
discharge_pressures=np.asarray([108.0]),
fluid_density=np.asarray([1021.0]),
).energy_usage[0] == pytest.approx(1.719326, abs=0.001)
)
assert result.energy_usage[0] == pytest.approx(1.719326, abs=0.001)
assert result.is_valid[0] == False
assert result.failure_status[0] == PumpFailureStatus.REQUIRED_HEAD_ABOVE_ACTUAL_HEAD

pump_with_head_margin = PumpSingleSpeed(
pump_chart=single_speed_pump_chart,
head_margin=98.1, # joule / kg
)
assert pump_with_head_margin.evaluate_rate_ps_pd_density(

# Head above maximum but within head margin
result = pump_with_head_margin.evaluate_rate_ps_pd_density(
rate=np.asarray([6648.0]),
suction_pressures=np.asarray([1.0]),
discharge_pressures=np.asarray([108.0]),
fluid_density=np.asarray([1021.0]),
).energy_usage[0] == pytest.approx(1.7193256025478039)
assert pump_with_head_margin.evaluate_rate_ps_pd_density(
)
assert result.energy_usage[0] == pytest.approx(1.719326)
assert result.is_valid[0] == True
assert result.failure_status[0] == PumpFailureStatus.NO_FAILURE

# Head above maximum and outside head margin
result = pump_with_head_margin.evaluate_rate_ps_pd_density(
rate=np.asarray([6648.0]),
suction_pressures=np.asarray([1.0]),
discharge_pressures=np.asarray([109.0]),
fluid_density=np.asarray([1021.0]),
).energy_usage[0] == pytest.approx(1.7193256025478039)
)
assert result.energy_usage[0] == pytest.approx(1.719326)
assert result.is_valid[0] == False
assert result.failure_status[0] == PumpFailureStatus.REQUIRED_HEAD_ABOVE_ACTUAL_HEAD


def test_single_speed_pump_adjustent_factors(single_speed_pump_chart):
Expand Down Expand Up @@ -140,20 +159,26 @@ def test_single_speed_pump_adjustent_factors(single_speed_pump_chart):
).energy_usage[0] == pytest.approx(2.43325027)

# Rate too large - but still report value
assert pump.evaluate_rate_ps_pd_density(
result = pump.evaluate_rate_ps_pd_density(
rate=np.asarray([24000.0]),
suction_pressures=np.asarray([1.0]),
discharge_pressures=np.asarray([90]),
discharge_pressures=np.asarray([70]),
fluid_density=fluid_density,
).energy_usage[0] == pytest.approx(3.12252, abs=0.001)
)
assert result.energy_usage[0] == pytest.approx(3.12252, abs=0.001)
assert result.is_valid[0] == False
assert result.failure_status[0] == PumpFailureStatus.ABOVE_MAXIMUM_PUMP_RATE

# Head too large
assert pump.evaluate_rate_ps_pd_density(
result = pump.evaluate_rate_ps_pd_density(
rate=np.asarray([14400.0]),
suction_pressures=np.asarray([1.0]),
discharge_pressures=np.asarray([101]),
fluid_density=fluid_density,
).energy_usage[0] == pytest.approx(2.43325, abs=0.001)
)
assert result.energy_usage[0] == pytest.approx(2.43325, abs=0.001)
assert result.is_valid[0] == False
assert result.failure_status[0] == PumpFailureStatus.REQUIRED_HEAD_ABOVE_ACTUAL_HEAD


@pytest.fixture
Expand Down Expand Up @@ -229,6 +254,15 @@ def test_variable_speed_pump(vsd_pump_test_variable_speed_chart_curves):
)

np.testing.assert_allclose(result.energy_usage, [0, 1.719326, 2208.3245], rtol=0.001)
np.testing.assert_equal(result.is_valid, [True, True, False])
np.testing.assert_equal(
result.failure_status,
[
PumpFailureStatus.NO_FAILURE,
PumpFailureStatus.ABOVE_MAXIMUM_PUMP_RATE_AND_MAXIMUM_HEAD_AT_RATE,
PumpFailureStatus.ABOVE_MAXIMUM_PUMP_RATE_AND_MAXIMUM_HEAD_AT_RATE,
],
)
np.testing.assert_allclose(result.suction_pressure, suction_pressure)
np.testing.assert_allclose(result.discharge_pressure, discharge_pressure, rtol=0.001)

Expand All @@ -237,7 +271,7 @@ def test_variable_speed_pump_pt2(vsd_pump_test_variable_speed_chart_curves, capl
pump = PumpVariableSpeed(pump_chart=vsd_pump_test_variable_speed_chart_curves)

# Along minimum speed line
# pumpchar unit rate: 277, head: 1061.7
# pumpchart unit rate: 277, head: 1061.7
rate = np.asarray([6648.0])
suction_pressure = np.asarray([1.0])
discharge_pressure = np.asarray([107.30993])
Expand All @@ -248,40 +282,33 @@ def test_variable_speed_pump_pt2(vsd_pump_test_variable_speed_chart_curves, capl
suction_pressures=suction_pressure,
discharge_pressures=discharge_pressure,
fluid_density=fluid_density,
).energy_usage[0]
assert result == pytest.approx(1.7193256025478039)

np.testing.assert_allclose(
pump.evaluate_rate_ps_pd_density(
rate=np.asarray([6648.0]),
suction_pressures=np.asarray([1.0]),
discharge_pressures=np.asarray([107.30993]),
fluid_density=np.asarray([1021]),
).energy_usage[0],
1.7193256025478039,
rtol=0.001,
)
assert pump.evaluate_rate_ps_pd_density(
rate=np.asarray([6648.0]),
suction_pressures=np.asarray([1.0]),
assert result.energy_usage[0] == pytest.approx(1.7193256025478039)
assert result.is_valid[0] == True
assert result.failure_status[0] == PumpFailureStatus.NO_FAILURE

result_higher_discharge = pump.evaluate_rate_ps_pd_density(
rate=rate,
suction_pressures=suction_pressure,
discharge_pressures=np.asarray([180]),
fluid_density=np.asarray([1021]),
).energy_usage[0] == pytest.approx(3.541799, abs=0.001)
fluid_density=fluid_density,
)
assert result_higher_discharge.energy_usage[0] == pytest.approx(3.541799, abs=0.001)
assert result_higher_discharge.is_valid[0] == False
assert result_higher_discharge.failure_status[0] == PumpFailureStatus.ABOVE_MAXIMUM_HEAD_AT_RATE

pump_with_head_margin = PumpVariableSpeed(
pump_chart=vsd_pump_test_variable_speed_chart_curves,
head_margin=98.1,
)
np.testing.assert_allclose(
pump_with_head_margin.evaluate_rate_ps_pd_density(
rate=np.asarray([6648.0]),
suction_pressures=np.asarray([1.0]),
discharge_pressures=np.asarray([180]), # give head = 1787.14, max is 1778.7, margin 10 ok
fluid_density=np.asarray([1021]),
).energy_usage[0],
3.5250749461946147,
rtol=1e-3,
result_higher_discharge_with_head_margin = pump_with_head_margin.evaluate_rate_ps_pd_density(
rate=rate,
suction_pressures=suction_pressure,
discharge_pressures=np.asarray([180]), # give head = 1787.14, max is 1778.7, margin 10 ok
fluid_density=fluid_density,
)
assert result_higher_discharge_with_head_margin.energy_usage[0] == pytest.approx(3.525075, abs=1e-3)
assert result_higher_discharge_with_head_margin.is_valid[0] == True

# With adjustment
constant = 10
Expand All @@ -292,39 +319,33 @@ def test_variable_speed_pump_pt2(vsd_pump_test_variable_speed_chart_curves, capl
energy_usage_adjustment_constant=constant,
energy_usage_adjustment_factor=factor,
)
assert pump_adjusted.evaluate_rate_ps_pd_density(
rate=np.asarray([6648.0]),
suction_pressures=np.asarray([1.0]),
discharge_pressures=np.asarray([107.30993]),
fluid_density=fluid_density,
).energy_usage[0] == pytest.approx(constant + factor * result)

assert pump.evaluate_rate_ps_pd_density(
rate=np.asarray([22248.0]),
suction_pressures=np.asarray([1.0]),
discharge_pressures=np.asarray([78.654126]),
result_pump_adjusted = pump_adjusted.evaluate_rate_ps_pd_density(
rate=rate,
suction_pressures=suction_pressure,
discharge_pressures=discharge_pressure,
fluid_density=fluid_density,
).energy_usage[0] == pytest.approx(2.89460588)
)
assert result_pump_adjusted.energy_usage[0] == pytest.approx(constant + factor * result.energy_usage[0])
assert result_pump_adjusted.is_valid[0] == True

# Along maximum speed line
assert pump.evaluate_rate_ps_pd_density(
rate=np.asarray([8064.0]),
suction_pressures=np.asarray([1.0]),
suction_pressures=suction_pressure,
discharge_pressures=np.asarray([179.15476]),
fluid_density=fluid_density,
).energy_usage[0] == pytest.approx(3.52507465)

assert pump.evaluate_rate_ps_pd_density(
rate=np.asarray([24672.0]),
suction_pressures=np.asarray([1.0]),
suction_pressures=suction_pressure,
discharge_pressures=np.asarray([147.293842]),
fluid_density=fluid_density,
).energy_usage[0] == pytest.approx(5.80773243)

# Points inside envelope
assert pump.evaluate_rate_ps_pd_density(
rate=np.asarray([15408.0]),
suction_pressures=np.asarray([1.0]),
suction_pressures=suction_pressure,
discharge_pressures=np.asarray([128.10]),
fluid_density=fluid_density,
).energy_usage[0] == pytest.approx(3.411238640)
Expand Down Expand Up @@ -362,28 +383,34 @@ def test_variable_speed_pump_pt2(vsd_pump_test_variable_speed_chart_curves, capl
).energy_usage[0] == pytest.approx(3.52037671)

# Rate too large - invalid but reported
assert pump.evaluate_rate_ps_pd_density(
result_rate_too_high = pump.evaluate_rate_ps_pd_density(
rate=np.asarray([27600.0]),
suction_pressures=np.asarray([1.0]),
discharge_pressures=np.asarray([61.0]),
fluid_density=fluid_density,
).energy_usage[0] == pytest.approx(6.52506, abs=0.001)
)
assert result_rate_too_high.energy_usage[0] == pytest.approx(6.52506, abs=0.001)
assert result_rate_too_high.is_valid[0] == False

# Head too large - invalid but reported
assert pump.evaluate_rate_ps_pd_density(
result_head_too_high = pump.evaluate_rate_ps_pd_density(
rate=np.asarray([22800.0]),
suction_pressures=np.asarray([1.0]),
discharge_pressures=np.asarray([161.0]),
fluid_density=fluid_density,
).energy_usage[0] == pytest.approx(5.9640, abs=0.001)
)
assert result_head_too_high.energy_usage[0] == pytest.approx(5.9640, abs=0.001)
assert result_head_too_high.is_valid[0] == False

# Head too large - invalid but reported
assert pump.evaluate_rate_ps_pd_density(
result_head_too_high = pump.evaluate_rate_ps_pd_density(
rate=np.asarray([4800]),
suction_pressures=np.asarray([1.0]),
discharge_pressures=np.asarray([201]),
fluid_density=fluid_density,
).energy_usage[0] == pytest.approx(3.9573, abs=0.001)
)
assert result_head_too_high.energy_usage[0] == pytest.approx(3.9573, abs=0.001)
assert result_head_too_high.is_valid[0] == False


def test_chart_curve_data(single_speed_pump_chart, caplog):
Expand Down

0 comments on commit 2c69515

Please sign in to comment.