-
Notifications
You must be signed in to change notification settings - Fork 1k
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
bishop88_v_from_i does not always converge #1757
Comments
The "fail to converge" appears to be intrinsic whenever the reverse bias term is activated ( The reason is that including the reverse bias term changes the IV curve at negative voltage, from being defined for all voltage, to having a vertical asymptote at -Vbr ( Attempts to get the optimization to work by optimizing on a transformed voltage have so far been fruitless. I've tried, for example, mapping V from the interval (Vbr, Voc) to all reals with inverse logit, and optimizing on the transformed voltage. The transformation removes the problem caused by the asymptote. For Newton's method, once the solution hits the middle "flat" part of the objective function, the iteration shoots far to the left, and then crawls slowly back towards the zero, but so slowly that the method exceeds the default iterations (100). I haven't been able to come up with a 1:1 transformation that preserves the zero, is defined for all reals, and transforms the 1/x behavior near the asymptote to something that would rapidly direct the iteration back close to the zero. We want a vectorized numerical method to solve these reverse bias curves, for use in the proposed A proposed solution: sacrifice some performance for reliability and use the Golden mean search (from the LambertW functions) to solve in |
Could change the breakdown approximation to something non-vertical? |
I considered adding a second reverse bias model:
With the current code, the 'clip' model would first ignore the user direction to include the reverse bias term (choice is indicated by Maybe instead of:
Something like this:
We'd also need to let users know that |
Instead of clipping, could you perhaps drop the (no longer significant) exponential and solve remaining terms explicitly where needed (V<0)? |
Even pvmismatch only solves the “current given voltage” or “voltage given current” problem in forward bias only and excludes reverse breakdown: The reason for this is that the reverse bias portion of the curve is closed form so solving for current or voltage is trivial. The point of using Bishop is that you solve for many points along the entire curve simultaneously from the breakdown voltage to some arbitrary forward bias, then add up the curves in series or parallel, and then find the operating point on the system IV curve. This point will ALWAYS be in forward bias. |
Dropping the insignificant forward diode current wouldn't help at negative voltage; the challenge to the iteration is the asymptotic behavior of the reverse diode current. |
Yes it does but I don't understand how it all works. https://github.com/SunPower/PVMismatch/blob/b391a98c5ded478a73b3c6a08e8de89024be5156/pvmismatch/pvmismatch_lib/pvcell.py#L238 I'm guessing the use of EPS is equivalent to clipping the voltage, somehow. |
Hi Cliff, sorry I was mistaken and I revised my comment. No, PVMismatch ignores reverse bias when solving I from V or the reverse. You are correct. See my revised comment above. |
Aha. So the reverse bias current is accounted for when solving an individual IV curve without specified I or V values - when newton isn't needed. When doing "V from I" or "I from V", reverse bias current is ignored. |
Reverse bias is included in the full IV curves that are added together in pvmismatch. It’s just not included when searching for specific points on the IV curve. tbh I don’t recall what that EPS but is for, the comment says it avoids numpy “divide by zero” warnings. This is very old code from before numpy version 1. |
I meant: solve without reverse breakdown first, as you previously suggested. Then rework the negative voltages using the model with reverse breakdown added and exponential removed (hopefully without iteration) rather than a hard clip. |
Most things go out of style at some point. |
Describe the bug
bishop88_v_from_i
does not converge to a voltage solution when current is greater than short-circuit, and the reverse bias term is active.To Reproduce
Expected behavior
Converge to a voltage on the reverse bias voltage portion of the I, V curve.
Versions:
pvlib.__version__
: 0.9.5The text was updated successfully, but these errors were encountered: