Skip to content

Commit b1cb161

Browse files
committed
Fix division-by-zero in transformer.simple_efficiency
1 parent b3a3782 commit b1cb161

File tree

2 files changed

+24
-1
lines changed

2 files changed

+24
-1
lines changed

pvlib/transformer.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,8 @@ def simple_efficiency(
111111
b = 1
112112
c = no_load_loss - input_power_normalized
113113

114-
output_power_normalized = (-b + (b**2 - 4*a*c)**0.5) / (2 * a)
114+
disc = (b*b - 4*a*c)**0.5
115+
output_power_normalized = 2*c / (-b - disc)
115116

116117
output_power = output_power_normalized * transformer_rating
117118
return output_power

tests/test_transformer.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import pandas as pd
2+
import pytest
23

34
from numpy.testing import assert_allclose
45

@@ -58,3 +59,24 @@ def test_simple_efficiency_known_values():
5859
*args),
5960
rating,
6061
)
62+
63+
64+
@pytest.mark.parametrize(
65+
"input_power, no_load_loss, load_loss, transformer_rating, expected",
66+
[
67+
(1000.0, 0.01, 0.0, 1000.0, 990.0),
68+
],
69+
)
70+
def test_simple_efficiency_zero_load_loss(
71+
input_power, no_load_loss, load_loss, transformer_rating, expected
72+
):
73+
# for load_loss = 0, the model reduces to:
74+
# P_out = P_in - L_no_load * P_nom
75+
result = transformer.simple_efficiency(
76+
input_power=input_power,
77+
no_load_loss=no_load_loss,
78+
load_loss=load_loss,
79+
transformer_rating=transformer_rating,
80+
)
81+
82+
assert_allclose(result, expected)

0 commit comments

Comments
 (0)