Skip to content

Single Diode Model error when low effective irradiance (pvlib==0.10.2) #1993

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

Open
OnairSandra opened this issue Mar 13, 2024 · 3 comments
Open

Comments

@OnairSandra
Copy link

pvlib usage questions can be asked on Stack Overflow and tagged with the pvlib tag.

The pvlib-python google group is used for discussing various topics of interest to the pvlib-python community. We also make new version announcements on the google group.

I get a ValueError when using single diode model with lambertw method.
p_mp, v_mp = _golden_sect_DataFrame(params, 0., v_oc * 1.14, _pwr_optfcn)
raise ValueError('upper >= lower is required')

I've seen some issues that may be related, because newton method doesn't raise any error, and I've some very low irradiance values:
#1673
#1843

Debugging lambertw method, I found the following:
#Set small elements <0 in v_oc to 0
if isinstance(v_oc, np.ndarray):
v_oc[(v_oc < 0) & (v_oc > -1e-12)] = 0.

In my case, there are some v_oc values under 0, but no so close to zero as -1e-12
v_oc[(v_oc < 0)] = array([-0.00024414, -0.00097656, -0.00195312, -0.00390625, -0.00390625])

#Questions:
Is there any reason to not filter every negative value in v_oc?
May I use newton method to avoid this error?

#Environment:
Python version: 3.10
pvlib version: 0.10.2

@cwhanse
Copy link
Member

cwhanse commented Mar 13, 2024

@OnairSandra when we've looked at similar reports, the root cause has been very low (e.g. 1e-9) values for effective irradiance. The solution has been to filter the effective irradiance before calling the calc_params and singlediode functions.

To know for certain you would need to provide code and some data.

Or you can try singlediode(...., method='newton'...) which finds the maximum power point with a different method.

@OnairSandra
Copy link
Author

Thanks for answering, @cwhanse!
By the moment I'll use newton method.
So, can I assume that there is a reason for not filtering every negative value in v_oc estimation before using golden_sect_DataFrame?

@cwhanse
Copy link
Member

cwhanse commented Mar 13, 2024

If we have a reason to not filter, it's to avoid covering up numerical bugs by replacing bad values with 0.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants