8000 coefficient estimation method following DeSoto(2006) by tylunel · Pull Request #784 · pvlib/pvlib-python · GitHub
[go: up one dir, main page]

Skip to content

coefficient estimation method following DeSoto(2006) #784

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 50 commits into from
Oct 31, 2019
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
50 commits
Select commit Hold shift + click to select a range
c5287ea
function getparams_desoto added to pvsystem module. This commit is ju…
tylunel Aug 21, 2019
5a39fea
getparams_desoto moved from pvsystem to singlediode.
tylunel Aug 21, 2019
7b24201
- Modification of getparams_from_specs so as it follows better the pr…
tylunel Aug 22, 2019
c16f1d0
- Bug corrected in DeSoto(2006) procedure
tylunel Aug 22, 2019
e7ef571
- test_getparams_from_specs_desoto() finished
tylunel Aug 23, 2019
cdb2a73
Not sure of all changes brought by this commit because of holidays.
tylunel Sep 9, 2019
0cfe13f
- function '_parse_raw_sam_df' modified. The parser engine is now def…
tylunel Sep 10, 2019
0c27829
- ModelChain attribute 'diode_params' transformed from tuple containi…
tylunel Sep 11, 2019
d8653cd
- singlediode.get_params_from_specs_desoto() output changed. 'a_ref' …
tylunel Sep 12, 2019
bbb4580
read_epw changed. A line has been added to convert the precipitable w…
tylunel Sep 23, 2019
6b8fadf
- read_epw changed. If condition added to make the conversion only in…
tylunel Sep 30, 2019
121cb06
* Pull and Merge done with upstream pvlib/pvlib-python: fork up to date
tylunel Oct 2, 2019
47e1be4
- argument diode_params changed from tuple to pd.DataFrame
tylunel Oct 2, 2019
c1b62c4
- get_params_from_specs_desoto removed from singlediode.py
tylunel Oct 2, 2019
4e62d1a
- function fit_sdm_desoto added. Still need to be formatted
tylunel Oct 2, 2019
747ed48
- change on type of self.diode_params removed. Go check on branch dio…
tylunel Oct 2, 2019
9ea2ed8
- Function 'fit_sdm_desoto' cleaned and variables names named as in '…
tylunel Oct 2, 2019
bd39dbd
- all changes made on other files than ivtools.py removed (cleaning f…
tylunel Oct 2, 2019
ae5c8be
- other differences cleaned
tylunel Oct 2, 2019
2d4f8f3
- renaming of one variable and minor documentation modifications
tylunel Oct 2, 2019
485dae6
- Beginning of writting of test_fit_sdm_desoto. Coverage around 90-95…
tylunel Oct 4, 2019
77d88a2
-minor format changes
tylunel Oct 4, 2019
6fcafc7
- changes made according to feedbacks of markcampanelli
tylunel Oct 4, 2019
2d53d5d
- some cleaning on fit_sdm_desoto to make it more readable
tylunel Oct 4, 2019
fdbf5ec
- minor code cleaning
tylunel Oct 4, 2019
0e1b4b3
- check on importation of scipy removed
tylunel Oct 7, 2019
d2d8c45
- minor cleaning
tylunel Oct 7, 2019
a70debb
- attempt to reach 100% coverage
tylunel Oct 8, 2019
e01f262
- description added in docs/sphinx/source/whatsnew/v0.7.0.rst
tylunel Oct 8, 2019
17f8617
- changes made according to cwhanse review. Except alpha_sc and beta_…
tylunel Oct 10, 2019
e14ad40
- minor correction and adaptation of test
tylunel Oct 10, 2019
32049b0
- sign correction on 3rd equation
tylunel Oct 11, 2019
bfe3994
- changes on units of alpha_sc and beta_voc inputs. Now in A/K and V/…
tylunel Oct 16, 2019
7ff8a96
- other line of test added for better coverage
tylunel Oct 16, 2019
7f08d80
- some changes to try feedbacks of cwhanse and markcampanelli, not fi…
tylunel Oct 17, 2019
27ab961
-OptimizeResult added in output
tylunel Oct 18, 2019
79ef920
- includes all feedbacks made on the 21/10, except moving of pv_fct()…
tylunel Oct 21, 2019
5e9cf8d
- pv_fct moved out of the fit_sdm_desoto function and renamed in _sys…
tylunel Oct 21, 2019
c02e74f
- minor modification: Boltzmann k given in specs to avoid import of s…
tylunel Oct 22, 2019
fa41eb8
- cleaning and minor modifications to docstring
tylunel Oct 22, 2019
753d312
- references added to docstring in _system_of_equations
tylunel Oct 22, 2019
b1b405c
- modification for removing last lint error
tylunel Oct 22, 2019
22d613c
- modification for removing last lint error
tylunel Oct 22, 2019
ae19a68
- modification for removing lint error
tylunel Oct 22, 2019
6913a52
- modif for removing of lint error
tylunel Oct 22, 2019
05051e1
- integration of adriesse suggestions
tylunel Oct 28, 2019
d4772c6
Merge branch 'master' into fit_sdm_desoto
cwhanse Oct 29, 2019
d821494
- adding of tylunel to the list of contributors
tylunel Oct 29, 2019
9d23552
Merge branch 'fit_sdm_desoto' of https://github.com/tylunel/pvlib-pyt…
tylunel Oct 29, 2019
5037da6
- adding of mark requires_scipy
tylunel Oct 29, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
- changes on units of alpha_sc and beta_voc inputs. Now in A/K and V/…
…K rather than %/K.

- 'celltype' input replaced by EgRef and dEgdT, with values of Si as default
  • Loading branch information
tylunel committed Oct 16, 2019
commit bfe3994343423a9e41ce5715441a29ad41a9b4aa
41 changes: 11 additions & 30 deletions pvlib/ivtools.py
Original file line number Diff line number Diff line change
Expand Up @@ -264,9 +264,9 @@ def fit_sde_sandia(voltage, current, v_oc=None, i_sc=None, v_mp_i_mp=None,
v_oc)


def fit_sdm_desoto(celltype, v_mp, i_mp, v_oc, i_sc, alpha_sc, beta_voc,
cells_in_series, temp_ref=25, irrad_ref=1000,
solver_method='lm'):
def fit_sdm_desoto(v_mp, i_mp, v_oc, i_sc, alpha_sc, beta_voc,
cells_in_series, EgRef=1.121, dEgdT=-0.0002677,
temp_ref=25, irrad_ref=1000, solver_method='lm'):
"""
Calculates the parameters for the De Soto single diode model using the
procedure described in [1]. This procedure has the
Expand All @@ -278,12 +278,7 @@ def fit_sdm_desoto(celltype, v_mp, i_mp, v_oc, i_sc, alpha_sc, beta_voc,

Parameters
----------
celltype: str, case insensitive
Value is one of 'monosi', 'multisi', 'polysi', 'mono-c-si',
'multi-c-si'.
Others like 'cis', 'cigs', 'cdte', 'amorphous', 'thin film', 'gaas'
are not implemented yet.
v_mp: float
v_mp: float
Module voltage at the maximum-power point at reference conditions [V].
i_mp: float
Module current at the maximum-power point at reference conditions [A].
Expand All @@ -293,16 +288,16 @@ def fit_sdm_desoto(celltype, v_mp, i_mp, v_oc, i_sc, alpha_sc, beta_voc,
Short-circuit current at reference conditions [A].
alpha_sc: float
The short-circuit current (i_sc) temperature coefficient of the
module [%/K].
It is converted in A/K for the computing
process.
module [A/K].
beta_voc: float
The open-circuit voltage (v_oc) temperature coefficient of the
module [%/K].
It is converted in V/K for the computing
process.
module [V/K].
cells_in_series: float
Number of cell in the module.
EgRef: float, default 1.121 eV - value for silicon
Energy of bandgap of semi-conductor used [eV]
dEgdT: float, default -0.0002677 - value for silicon
Variation of bandgap according to temperature [eV/K]
temp_ref: float, default 25
Reference temperature condition [C]
irrad_ref: float, default 1000
Expand Down Expand Up @@ -334,7 +329,7 @@ def fit_sdm_desoto(celltype, v_mp, i_mp, v_oc, i_sc, alpha_sc, beta_voc,
The short-circuit current (i_sc) temperature coefficient of the
module [A/K].
* EgRef: float
Energy of bandgap of semi-conductor used (depending on celltype) [eV]
Energy of bandgap of semi-conductor used [eV]
* dEgdT: float
Variation of bandgap according to temperature [eV/K]
* irrad_ref: float
Expand All @@ -353,22 +348,8 @@ def fit_sdm_desoto(celltype, v_mp, i_mp, v_oc, i_sc, alpha_sc, beta_voc,
"""
# Constants
k = constants.value('Boltzmann constant in eV/K')

Tref = temp_ref + 273.15 # [K]

if celltype.lower() in ['monosi', 'polysi', 'multisi',
'mono-c-si', 'multi-c-si']:
dEgdT = -0.0002677 # [eV/K]
EgRef = 1.121 # [eV]
elif celltype.lower() in ['cis', 'cigs', 'cdte', 'amorphous', 'thin film']:
raise NotImplementedError
else:
raise ValueError('Unknown cell type.')

# Conversion from %/K to A/K & V/K
alpha_sc = alpha_sc*i_sc/100
beta_voc = beta_voc*v_oc/100

def pv_fct(params, specs):
"""Evaluates the systems of equations used to solve for the single
diode equation parameters.
Expand Down
15 changes: 2 additions & 13 deletions pvlib/test/test_ivtools.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ def get_cec_params_cansol_cs5p_220p():
def get_test_specs_params():
"""Specifications of module Kyocera KU270-6MCA"""
return {'v_mp': 31.0, 'i_mp': 8.71, 'v_oc': 38.3,
'i_sc': 9.43, 'alpha_sc': 0.06, 'beta_voc': -0.36}
'i_sc': 9.43, 'alpha_sc': 0.005658, 'beta_voc': -0.13788}


@requires_scipy
Expand Down Expand Up @@ -111,7 +111,7 @@ def test_fit_sdm_cec_sam(get_cec_params_cansol_cs5p_220p):

@requires_scipy
def test_fit_sdm_desoto(get_test_specs_params):
result = ivtools.fit_sdm_desoto(celltype='polysi', cells_in_series=60,
result = ivtools.fit_sdm_desoto(cells_in_series=60,
Copy link
Contributor
@markcampanelli markcampanelli Oct 21, 2019

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

move cells_in_series to the get_test_specs_params fixture.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

cells_in_series is not in the get_test_specs_params fixture because it changes at line 129 of the test in order to cause the RuntimeError. I feel like it would be more complicated to add it the fixture and to change it later to have the RuntimeError. What do you think ?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd prefer to see it added to the fixture and then modified in the function that causes the RuntimeError. That way the fixture returns a complete, consistent specification.

**get_test_specs_params)
result_expected = {'I_L_ref': 9.452324509050774,
'I_o_ref': 3.2246097466679494e-10,
Expand All @@ -125,17 +125,6 @@ def test_fit_sdm_desoto(get_test_specs_params):
'temp_ref': 25}
assert np.allclose(pd.Series(result), pd.Series(result_expected),
rtol=1e-4)
with pytest.raises(NotImplementedError):
ivtools.fit_sdm_desoto(celltype='CDTE', cells_in_series=60,
**get_test_specs_params)
with pytest.raises(ValueError):
ivtools.fit_sdm_desoto(celltype='apple', cells_in_series=60,
**get_test_specs_params)
with pytest.raises(RuntimeError):
ivtools.fit_sdm_desoto(celltype='polysi', cells_in_series=10,
v_mp=31.0, i_mp=8.71, v_oc=38.3,
i_sc=9.43, alpha_sc=0.06,
beta_voc=-0.36)


@pytest.fixture
Expand Down
0