-
Notifications
You must be signed in to change notification settings - Fork 1.1k
Add a simple transformer effficiency model to pvlib #2053
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from all commits
Commits
Show all changes
55 commits
Select commit
Hold shift + click to select a range
43234fc
wrote a simple transformer efficiency model
kurt-rhee f18ef77
edited documentation to include latex, unsure if it will compile corr…
kurt-rhee aafebe8
removed "if __main__"
kurt-rhee ee4210e
removed "if __main__"
kurt-rhee f688078
changed whatsnew rst
kurt-rhee 907efd3
updated to be in compliance with Flake8
kurt-rhee a80bd7f
Update pvlib/transformer.py
kurt-rhee 1072053
Update pvlib/transformer.py
kurt-rhee d8381fe
Update pvlib/transformer.py
kurt-rhee 349604f
+ added transformer to index.rst
kurt-rhee af63760
Update docs/sphinx/source/reference/transformer.rst
kurt-rhee 3bb1364
Update pvlib/transformer.py
kurt-rhee 1571fdd
updated names of loss values and changed to [unitless]
kurt-rhee 77efdde
Update pvlib/transformer.py
kurt-rhee b029b9e
Update pvlib/transformer.py
kurt-rhee 06efabe
Update pvlib/transformer.py
kurt-rhee 9361419
Update pvlib/transformer.py
kurt-rhee aeeb23b
Update pvlib/transformer.py
kurt-rhee 3e0751c
Update pvlib/transformer.py
kurt-rhee 0b18c43
Update pvlib/transformer.py
kurt-rhee 8ab1001
Update pvlib/transformer.py
kurt-rhee aa31498
forgot to update arguments in test function
kurt-rhee 865bfdf
updated formatting of docstring
kurt-rhee eb70aeb
Update pvlib/transformer.py
kurt-rhee 35f122f
Update pvlib/transformer.py
kurt-rhee 5592bc2
Update pvlib/transformer.py
kurt-rhee 63649c8
Update pvlib/transformer.py
kurt-rhee d49fee5
Update pvlib/transformer.py
kurt-rhee 7539402
adding space between equations in docstring
kurt-rhee d5a862c
fixing flake8 linting
kurt-rhee 9fe05f8
removing whitespace
kurt-rhee 99ab409
Update docs/sphinx/source/reference/transformer.rst
kurt-rhee feb2c30
Update pvlib/transformer.py
kurt-rhee e1522be
Update pvlib/transformer.py
kurt-rhee ae378c9
Update pvlib/transformer.py
kurt-rhee 84ddbf2
Update pvlib/transformer.py
kurt-rhee 9a7dbc6
Update pvlib/transformer.py
kurt-rhee 288161b
Update docs/sphinx/source/whatsnew/v0.11.0.rst
kurt-rhee d080cc0
Update pvlib/transformer.py
kurt-rhee 53934ec
Update pvlib/tests/test_transformer.py
kurt-rhee 32b1aa0
Update pvlib/transformer.py
kurt-rhee 477699d
Update pvlib/transformer.py
kurt-rhee d488cda
Update pvlib/transformer.py
kurt-rhee 0318bfa
Merge branch 'main' into main
kurt-rhee 8ed3c65
Update docs/sphinx/source/whatsnew/v0.11.0.rst
kurt-rhee 90d3a61
Merge branch 'main' into main
cwhanse 482e3b4
Update pvlib/transformer.py
kurt-rhee 59657b8
Update pvlib/transformer.py
kurt-rhee c8ebe38
clean up derivation and docstring
kandersolar 9164c67
change code calculations to match docstring
kandersolar 816fe2a
test recovery of no-load and full-load values
kandersolar be62da6
bit more cleanup
kandersolar 21abcde
typo
kandersolar db18c42
Apply suggestions from code review
kandersolar 52a2593
Apply suggestions from code review
kandersolar File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -20,3 +20,4 @@ API reference | |
bifacial | ||
scaling | ||
location | ||
transformer |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
.. currentmodule:: pvlib | ||
|
||
Transformer losses | ||
================== | ||
|
||
Methods to account for losses in transformers | ||
|
||
.. autosummary:: | ||
:toctree: generated/ | ||
|
||
transformer.simple_efficiency |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,60 @@ | ||
import pandas as pd | ||
|
||
from numpy.testing import assert_allclose | ||
|
||
from pvlib import transformer | ||
|
||
|
||
def test_simple_efficiency(): | ||
|
||
# define test inputs | ||
input_power = pd.Series([ | ||
-800.0, | ||
436016.609823837, | ||
1511820.16603752, | ||
1580687.44677249, | ||
1616441.79660171 | ||
]) | ||
no_load_loss = 0.002 | ||
load_loss = 0.007 | ||
transformer_rating = 2750000 | ||
|
||
# define expected test results | ||
expected_output_power = pd.Series([ | ||
-6300.10103234071, | ||
430045.854892526, | ||
1500588.39919874, | ||
1568921.77089526, | ||
1604389.62839879 | ||
]) | ||
|
||
# run test function with test inputs | ||
calculated_output_power = transformer.simple_efficiency( | ||
input_power=input_power, | ||
no_load_loss=no_load_loss, | ||
load_loss=load_loss, | ||
transformer_rating=transformer_rating | ||
) | ||
|
||
# determine if expected results are obtained | ||
assert_allclose(calculated_output_power, expected_output_power) | ||
|
||
|
||
def test_simple_efficiency_known_values(): | ||
no_load_loss = 0.005 | ||
load_loss = 0.01 | ||
rating = 1000 | ||
args = (no_load_loss, load_loss, rating) | ||
|
||
# verify correct behavior at no-load condition | ||
assert_allclose( | ||
transformer.simple_efficiency(no_load_loss*rating, *args), | ||
0.0 | ||
) | ||
|
||
# verify correct behavior at rated condition | ||
assert_allclose( | ||
transformer.simple_efficiency(rating*(1 + no_load_loss + load_loss), | ||
*args), | ||
rating, | ||
) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,117 @@ | ||
""" | ||
This module contains functions for transformer modeling. | ||
|
||
Transformer models calculate AC power output and losses at a given input power. | ||
""" | ||
|
||
|
||
def simple_efficiency( | ||
input_power, no_load_loss, load_loss, transformer_rating | ||
): | ||
r''' | ||
Calculate the power at the output terminal of the transformer | ||
after taking into account efficiency using a simple calculation. | ||
|
||
The equation used in this function can be derived from [1]_. | ||
|
||
For a zero input power, the output power will be negative. | ||
This means the transformer will consume energy from the grid at night if | ||
it stays connected (due to the parallel impedance in the equivalent | ||
circuit). | ||
If the input power is negative, the output power will be even more | ||
negative; so the model can be used bidirectionally when drawing | ||
energy from the grid. | ||
|
||
Parameters | ||
---------- | ||
input_power : numeric | ||
The real AC power input to the transformer. [W] | ||
|
||
no_load_loss : numeric | ||
The constant losses experienced by a transformer, even | ||
when the transformer is not under load. Fraction of transformer rating, | ||
value from 0 to 1. [unitless] | ||
|
||
load_loss: numeric | ||
The load dependent losses experienced by the transformer. | ||
Fraction of transformer rating, value from 0 to 1. [unitless] | ||
|
||
transformer_rating: numeric | ||
The nominal output power of the transformer. [VA] | ||
|
||
Returns | ||
------- | ||
output_power : numeric | ||
Real AC power output. [W] | ||
|
||
Notes | ||
------- | ||
First, assume that the load loss :math:`L_{load}` (as a fraction of rated power | ||
:math:`P_{nom}`) is proportional to the square of output power: | ||
|
||
.. math:: | ||
|
||
L_{load}(P_{out}) &= L_{load}(P_{rated}) \times (P_{out} / P_{nom})^2 | ||
|
||
&= L_{full, load} \times (P_{out} / P_{nom})^2 | ||
|
||
Total loss is the constant no-load loss plus the variable load loss: | ||
|
||
.. math:: | ||
|
||
L_{total}(P_{out}) &= L_{no, load} + L_{load}(P_{out}) | ||
|
||
&= L_{no, load} + L_{full, load} \times (P_{out} / P_{nom})^2 | ||
|
||
|
||
By conservation of energy, total loss is the difference between input and | ||
output power: | ||
|
||
.. math:: | ||
|
||
\frac{P_{in}}{P_{nom}} &= \frac{P_{out}}{P_{nom}} + L_{total}(P_{out}) | ||
|
||
&= \frac{P_{out}}{P_{nom}} + L_{no, load} + L_{full, load} \times (P_{out} / P_{nom})^2 | ||
|
||
Now use the quadratic formula to solve for :math:`P_{out}` as a function of | ||
:math:`P_{in}`. | ||
|
||
.. math:: | ||
|
||
\frac{P_{out}}{P_{nom}} &= \frac{-b \pm \sqrt{b^2 - 4ac}}{2a} | ||
|
||
a &= L_{full, load} | ||
|
||
b &= 1 | ||
|
||
c &= L_{no, load} - P_{in} / P_{nom} | ||
|
||
Therefore: | ||
|
||
.. math:: | ||
|
||
P_{out} = P_{nom} \frac{-1 \pm \sqrt{1 - 4 L_{full, load} | ||
|
||
\times (L_{no, load} - P_{in}/P_{nom})}}{2 L_{full, load}} | ||
|
||
The positive root should be chosen, so that the output power is | ||
positive. | ||
|
||
|
||
References | ||
---------- | ||
.. [1] Central Station Engineers of the Westinghouse Electric Corporation, | ||
"Electrical Transmission and Distribution Reference Book" 4th Edition. | ||
pg. 101. | ||
''' # noqa: E501 | ||
|
||
input_power_normalized = input_power / transformer_rating | ||
|
||
a = load_loss | ||
b = 1 | ||
c = no_load_loss - input_power_normalized | ||
|
||
output_power_normalized = (-b + (b**2 - 4*a*c)**0.5) / (2 * a) | ||
|
||
output_power = output_power_normalized * transformer_rating | ||
return output_power |
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.