diff --git a/local_test_converge.py b/local_test_converge.py new file mode 100644 index 0000000..0d95203 --- /dev/null +++ b/local_test_converge.py @@ -0,0 +1,57 @@ +# -*- coding: utf-8 -*- +""" +Created on Wed Jan 8 14:43:04 2020 + +@author: cwhanse +""" + +import numpy as np +import matplotlib.pyplot as plt + +rsh = 600 +rs = 0.25 +iph = 9.7 +io = 2.3e-11 +a = 1.5 + + +def g1(v, i, iph, io, rsh, rs, a): + X = (v + i * rs)/ a + c1 = rsh / (rsh + rs) + a1 = (v + iph * rs + io * rs) / a + a2 = io * rs / a + return c1 * (a1 - a2 * np.exp(X)) + + +def dg1(v, i, iph, io, rsh, rs, a): + X = (v + i * rs)/ a + c1 = rsh / (rsh + rs) + a2 = io * rs / a + return - a2 / c1 * np.exp(X) + + +def g2(v, i, iph, io, rsh, rs, a): + X = (v + i * rs)/ a + c1 = 1 + rs / rsh + a1 = (v + iph * rs + io * rs) / a + a2 = io * rs / a + return np.log(a1 - c1 * X) - np.log(a2) + + +def dg2(v, i, iph, io, rsh, rs, a): + X = (v + i * rs)/ a + c1 = 1 + rs / rsh + a1 = (v + iph * rs + io * rs) / a + return -c1 / (a1 - c1 * X) + + +y1 = g1(Vmod, Imod, iph, io, rsh, rs, a) +y2 = g2(Vmod, Imod, iph, io, rsh, rs, a) + +dy1 = dg1(Vmod, Imod, iph, io, rsh, rs, a) +dy2 = dg2(Vmod, Imod, iph, io, rsh, rs, a) + +plt.plot(Vmod, y1, Vmod, y2) +plt.show() +plt.plot(Vmod, dy1, Vmod, dy2) +plt.show() diff --git a/notebooks/basic_iv_curves.ipynb b/notebooks/basic_iv_curves.ipynb new file mode 100644 index 0000000..e5001a0 --- /dev/null +++ b/notebooks/basic_iv_curves.ipynb @@ -0,0 +1,559 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "C:\\Users\\cwhanse\\AppData\\Local\\Continuum\\Anaconda3\\lib\\site-packages\\pandas\\compat\\_optional.py:106: UserWarning: Pandas requires version '1.2.1' or newer of 'bottleneck' (version '1.1.0' currently installed).\n", + " warnings.warn(msg, UserWarning)\n" + ] + } + ], + "source": [ + "# add capability to import from parent directory\n", + "import sys, os\n", + "sys.path.insert(1, os.path.join(os.path.abspath('.'), '..'))\n", + "\n", + "import pvmismatch as pvm\n", + "import pvlib\n", + "import numpy as np\n", + "import pandas as pd\n", + "\n", + "import matplotlib.pyplot as plt" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "# Setting PV system layout cell and module parameters\n", + "str_len = 6 # number of modules in a string\n", + "str_num = 3 # number of (parallel connected) strings in the array\n", + "v_bypass = np.float64(-0.5) # [V] trigger voltage of bypass diode\n", + "cell_area = np.float64(246.49) # [cm^2] cell area\n", + "Isc0_T0 = 9.68 # [A] reference short circuit current\n", + "ncols_per_substr=[2]*3 # 3 bypass diodes with 2 series connected cell-columns\n", + "nrows=10 # number of cell rows in the module\n", + "\n", + "# Building PV modules and system\n", + "pv_mod_pattern = pvm.pvmodule.standard_cellpos_pat(nrows=nrows,\n", + " ncols_per_substr=ncols_per_substr)\n", + "pv_mod = pvm.pvmodule.PVmodule(cell_pos=pv_mod_pattern, pvcells=None,\n", + " pvconst=None, Vbypass=v_bypass, cellArea=cell_area)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "pv_cells = pv_mod.pvcells\n", + "for c in pv_cells:\n", + " c.update(diode_model = 'pvsyst', aRBD=0.0, bRBD=0.0, Isc0_T0 = Isc0_T0) # updating short circuit currents\n", + "\n", + "pv_mod.setSuns(cells=list(range(0, len(pv_cells))), Ee=[1]*len(pv_cells))\n", + "\n", + "pv_str = pvm.pvstring.PVstring(numberMods=str_len, pvmods=[pv_mod]*str_len)\n", + "\n", + "pv_sys = pvm.pvsystem.PVsystem(numberStrs=str_num, pvstrs=[pv_str]*str_num,\n", + " numberMods=[str_len]*str_num,\n", + " pvmods=[pv_mod]*str_len)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "(9.684125625749223, 2.28618816125344e-11, 0.004267236774264931, 10.01226369025448, 0.025692570400413114)\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "pv_cells[0].plot()\n", + "\n", + "print(pv_mod.pvcells[0])\n", + "\n", + "(photocurrent, saturation_current, resistance_series, resistance_shunt, nVth) = \\\n", + " pv_mod.pvcells[0].Aph * pv_mod.pvcells[0].Isc, pv_mod.pvcells[0].Isat1, \\\n", + " pv_mod.pvcells[0].Rs, pv_mod.pvcells[0].Rsh, \\\n", + " pv_mod.pvcells[0].N1 * pv_mod.pvcells[0].Vt\n", + "\n", + "print((photocurrent, saturation_current, resistance_series, resistance_shunt, nVth))\n", + "\n", + "(V_pvm, I_pvm) = pv_mod.pvcells[0].Vcell, pv_mod.pvcells[0].Icell\n", + "u = (V_pvm>=0.) & (I_pvm>=0.)\n", + "I_pvm = I_pvm[u]\n", + "V_pvm = V_pvm[u]\n", + "\n", + "plt.figure()\n", + "plt.plot(V_pvm, I_pvm)\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Difference between pvlib and PVMismatch IV curves\n", + "brentq : 1.763750812067144e-10\n", + "newton : 4.048317236993171e-12\n", + "lambertw : 1.5987211554602254e-14\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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O+9k/PjxlJeXc8stt8TOO2rUKG688UbGjh3LtddeS319PRUVFVx55ZXccccd3H333QB84xvf4IILLgDg2Wef5aqrrgrrbRGRLgrr+7RdnqTNzD4GvOPubmYTiHyY7AH2ASPNrAx4C5gJfKGr1wP40dofsXXv1kycKuaUY07hOxO+k9a+paWlPPbYYxx11FG8++67nHnmmUyfPh2AHTt2sHTpUubPn8/48eN56KGHWLVqFcuWLeO2226LTbW8ceNG1qxZw4cffsgZZ5zB5z73OTZt2sT27dtZu3Yt7s706dNZsWIFw4cPZ9u2bSxatIh7770XgKVLl8Ymh1uzZg0//vGPmT17NlVVVRw6dIiGhgZWrVoVmxtIRHLH5l3vc9fT27jvi5X07hX+qPp2E7+ZLQHOAwabWQ1wC1AC4O7zgEuBG8ysEagHZnpkHohGM/s68DRQDCx0983d8ipC5u5897vfZcWKFRQVFfHWW2/FpksuKyuLzcczevRopk6dipkxZswYqqurY+eYMWMGffv2pW/fvpx//vmsXbuWVatW8cc//pEzzjgDiPxlsX37doYPH86JJ54Ym/cn0bhx41i3bh379++nT58+jB07lqqqqtgcQCKSW77z241seusDtv79A8qHHh369dtN/O5+RTvbfwb8LMW2J4EnOxdaaun2zLvL4sWLqa2tZd26dZSUlDBixAgOHjwIHDmFclFRUex5UVERjY2NsW3x0y5Hn7s7N998M1/96leP2FZdXU3//v1TxhONYdGiRZx99tmUl5fz/PPP8+qrr2pOHpEcZMEt0GxNlaZv7nbC+++/z3HHHUdJSQnPP/88r7/+eofP8cQTT3Dw4EH27NnD8uXLGT9+PBdddBELFy6krq4OgLfeeovdu3cnPb6kpISGhobY8ylTpnDXXXcxZcqU2FoAFRUVrT5gRCT7ov9bZmuKzPxciCXLrrzySi6++GIqKyupqKjglFNO6fA5JkyYwOc+9zneeOMNvve973H88cdz/PHH88orr3DWWWcBkeGjv/rVryguLm51/KxZsygvL2fs2LEsXryYyZMn88Mf/pCzzjqL/v37U1paqvq+SI6KdseisyOH3T/TtMwFSO+lSHbNuOcvbHhzH4/eeDZjhw/iyp+v4S879vCraydyzkhNyywi0uO09Pizc30lfhGRkLWUdrKT+fMq8edi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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# Analysis with cell-level IV curves\n", + "\n", + "v_pvl = V_pvm\n", + "\n", + "# pvlib has three numerical methods to solve the single diode equation. Let's find which method gives the best agreement\n", + "# with PVMismatch, and which has the smallest error.\n", + "methods = ['brentq', 'newton', 'lambertw']\n", + "i_pvl = pd.DataFrame(index=methods, columns=['current'])\n", + "\n", + "for method in methods:\n", + " res = pvlib.pvsystem.i_from_v(resistance_shunt, resistance_series, nVth, V_pvm, saturation_current, photocurrent,\n", + " method=method)\n", + " i_pvl['current'][method] = res\n", + "\n", + "plt.figure()\n", + "for method in methods:\n", + " plt.plot(v_pvl, i_pvl['current'][method])\n", + "plt.legend(methods)\n", + "\n", + "plt.figure()\n", + "for method in methods:\n", + " plt.plot(v_pvl, np.abs(i_pvl['current'][method] - I_pvm))\n", + "plt.legend(methods)\n", + "\n", + "print(\"Difference between pvlib and PVMismatch IV curves\")\n", + "for method in methods:\n", + " print(method, ': ', np.max(np.abs(i_pvl['current'][method] - I_pvm)))\n" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "brentq : 4.49089099241462e-10\n", + "newton : 7.028155835087091e-12\n", + "lambertw : 2.7977620220553945e-14\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "def sde_resid(v, i, iph, io, rs, rsh, nNsVth):\n", + " \"\"\"\n", + " Calculate the residual for current for a single diode equation at (v, i).\n", + " \"\"\"\n", + " return iph - io * np.expm1((v + i * rs) / nNsVth) - (v + i * rs) / rsh - i\n", + "\n", + "i_resid = pd.DataFrame(index=methods, columns=['current'])\n", + "for method in methods:\n", + " i_resid['current'][method] = sde_resid(v_pvl, i_pvl['current'][method], iph=photocurrent,\n", + " io=saturation_current, rs=resistance_series,\n", + " rsh=resistance_shunt, nNsVth=nVth)\n", + "\n", + "plt.figure()\n", + "for method in methods:\n", + " plt.plot(v_pvl, i_resid['current'][method])\n", + "plt.ylabel('Error in current')\n", + "plt.xlabel('Voltage')\n", + "\n", + "for method in methods:\n", + " print(method, ':', np.max(np.abs(i_resid['current'][method])))\n" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[4.18332036e-13 4.18332036e-13 1.41179329e+01 2.65394398e+01\n", + " 2.94990578e+01 3.05834944e+01 3.12530092e+01 3.17322097e+01\n", + " 3.21092076e+01 3.24247031e+01 3.26963363e+01 3.29342441e+01\n", + " 3.31462463e+01 3.33383632e+01 3.35152204e+01 3.36803625e+01\n", + " 3.38364987e+01 3.39785595e+01 3.41150955e+01 3.42476392e+01\n", + " 3.43689905e+01 3.44888708e+01 3.46027584e+01 3.47126789e+01\n", + " 3.48201046e+01 3.49223410e+01 3.50240373e+01 3.51203865e+01\n", + " 3.52170039e+01 3.53088833e+01 3.54010016e+01 3.54895269e+01\n", + " 3.55776646e+01 3.56637130e+01 3.57483355e+01 3.58325946e+01\n", + " 3.59141211e+01 3.59971290e+01 3.60759388e+01 3.61566613e+01\n", + " 3.62345531e+01 3.63128457e+01 3.63906054e+01 3.64667898e+01\n", + " 3.65446380e+01 3.66190089e+01 3.66951847e+01 3.67699424e+01\n", + " 3.68445385e+01 3.69199690e+01 3.69932423e+01 3.70682938e+01\n", + " 3.71416084e+01 3.72155496e+01 3.72899139e+01 3.73629731e+01\n", + " 3.74378053e+01 3.75107997e+01 3.75849482e+01 3.76592460e+01\n", + " 3.77329181e+01 3.78083780e+01 3.78819070e+01 3.79570806e+01\n", + " 3.80320990e+01 3.81071785e+01 3.81836733e+01 3.82588434e+01\n", + " 3.83358378e+01 3.84122458e+01 3.84895155e+01 3.85675577e+01\n", + " 3.86452798e+01 3.87248880e+01 3.88033015e+01 3.88835501e+01\n", + " 3.89637571e+01 3.90448195e+01 3.91268299e+01 3.92088771e+01\n", + " 3.92927108e+01 3.93759123e+01 3.94611330e+01 3.95468213e+01\n", + " 3.96331252e+01 3.97202963e+01 3.98083651e+01 3.98973641e+01\n", + " 3.99873263e+01 4.00782783e+01 4.01702493e+01 4.02632846e+01\n", + " 4.03574151e+01 4.04526655e+01 4.05490819e+01 4.06466908e+01\n", + " 4.07455389e+01 4.08456524e+01 4.09470789e+01 4.10498294e+01\n", + " 4.11539730e+01 4.12595411e+01]\n", + "[9.68 9.68 9.65650784 9.63244556 9.60779931 9.58255493\n", + " 9.5566979 9.53021335 9.50308605 9.47530041 9.44684045 9.4176898\n", + " 9.38783169 9.35724897 9.32592405 9.2938389 9.26097509 9.22731372\n", + " 9.19283542 9.15752039 9.12134829 9.08429835 9.04634925 9.00747917\n", + " 8.96766577 8.92688614 8.88511684 8.84233385 8.79851258 8.75362781\n", + " 8.70765375 8.66056395 8.61233134 8.56292819 8.51232608 8.46049593\n", + " 8.40740792 8.35303153 8.29733549 8.24028778 8.18185559 8.12200532\n", + " 8.06070256 7.99791206 7.93359772 7.86772254 7.80024866 7.73113726\n", + " 7.66034862 7.58784203 7.51357579 7.4375072 7.35959253 7.27978695\n", + " 7.1980446 7.11431846 7.0285604 6.94072109 6.85075003 6.75859548\n", + " 6.66420446 6.56752268 6.46849456 6.36706314 6.26317012 6.15675573\n", + " 6.04775881 5.93611666 5.82176509 5.70463836 5.5846691 5.46178834\n", + " 5.33592542 5.20700796 5.07496183 4.93971111 4.80117802 4.6592829\n", + " 4.51394416 4.36507824 4.21259952 4.05642033 3.89645087 3.73259915\n", + " 3.56477095 3.39286976 3.21679675 3.03645067 2.85172781 2.66252195\n", + " 2.4687243 2.27022343 2.06690518 1.85865265 1.6453461 1.42686285\n", + " 1.20307729 0.97386073 0.73908137 0.49860421 0.25229096 0. ]\n" + ] + }, + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# Analysis with module-level IV curves\n", + "\n", + "Vmod = pv_mod.Vmod\n", + "Imod = pv_mod.Imod\n", + "\n", + "plt.figure()\n", + "plt.plot(Vmod, Imod)\n", + "\n", + "# remove negative voltage and current\n", + "\n", + "u = (Vmod>=0.) & (Imod>=0.)\n", + "Imod = Imod[u]\n", + "Vmod = Vmod[u]\n", + "\n", + "print(Vmod)\n", + "print(Imod)\n", + "\n", + "plt.plot(Vmod, Imod)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Difference between pvlib and PVMismatch IV curves\n", + "brentq : 0.0015364870781562345\n", + "newton : 0.0015364870781704454\n", + "lambertw : 0.0015364870781695572\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "Ns = 60\n", + "\n", + "i_pvl_mod = pd.DataFrame(index=methods, columns=['current'])\n", + "\n", + "for method in methods:\n", + " i_pvl_mod['current'][method] = pvlib.pvsystem.i_from_v(resistance_shunt=Ns*resistance_shunt,\n", + " resistance_series=Ns*resistance_series,\n", + " nNsVth=Ns*nVth, voltage=Vmod,\n", + " saturation_current=saturation_current,\n", + " photocurrent=photocurrent, method=method)\n", + "\n", + "plt.figure()\n", + "for method in methods:\n", + " plt.plot(Vmod, i_pvl_mod['current'][method])\n", + "plt.legend(methods)\n", + "\n", + "print(\"Difference between pvlib and PVMismatch IV curves\")\n", + "for method in methods:\n", + " print(method, ': ', np.max(np.abs(i_pvl_mod['current'][method] - Imod)))" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "brentq : 4.9432680171435095e-12\n", + "newton : 5.062616992290714e-14\n", + "lambertw : 2.7533531010703882e-14\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "i_pvl_resid = pd.DataFrame(index=methods, columns=['current'])\n", + "\n", + "for method in methods:\n", + " i_pvl_resid['current'][method] = sde_resid(v=Vmod, i=i_pvl_mod['current'][method],\n", + " iph=photocurrent, io=saturation_current,\n", + " rs=resistance_series*Ns, rsh=resistance_shunt*Ns,\n", + " nNsVth=nVth*Ns)\n", + "\n", + " \n", + "plt.figure()\n", + "for method in methods:\n", + " plt.plot(Vmod, i_pvl_resid['current'][method])\n", + "plt.ylabel('Error in current')\n", + "plt.xlabel('Voltage')\n", + "\n", + "for method in methods:\n", + " print(method, ':', np.max(np.abs(i_pvl_resid['current'][method])))" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "# The analysis above identifies 'lambertw' as having lowest discrepancy between pvlib and PVMismatch, and curves\n", + "# calculated with 'lambertw' as having smallest residual" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "9.680000 0.000000e+00\n", + "9.680000 0.000000e+00\n", + "9.656508 0.000000e+00\n", + "9.632448 -1.776357e-15\n", + "9.607871 0.000000e+00\n", + " ... \n", + "0.973900 -4.773959e-15\n", + "0.739109 NaN\n", + "0.498667 4.107825e-15\n", + "0.252367 1.276756e-15\n", + "0.000085 -1.456905e-14\n", + "Length: 102, dtype: float64\n", + "4.440892098500626e-16\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# converge IV curves to remove small errors in current\n", + "\n", + "from scipy.optimize import newton\n", + "\n", + "def _fi(i, v, iph, io, rs, rsh, nNsVth):\n", + " return iph - io * np.expm1((v + i * rs) / nNsVth) - (v + i * rs) / rsh - i\n", + "\n", + "def _dfdi(i, v, iph, io, rs, rsh, nNsVth):\n", + " return -io * rs / nNsVth * np.exp((v + i * rs) / nNsVth) - rs / rsh - 1\n", + "\n", + "method = 'lambertw'\n", + "i_converged = pd.Series(index=i_pvl_mod['current'][method], data=np.nan)\n", + "for (v, i) in zip(Vmod, i_pvl_mod['current'][method]):\n", + " try:\n", + " i_converged[i] = newton(func=_fi, x0=i, fprime=_dfdi, args=(v, photocurrent, saturation_current, resistance_series*Ns,\n", + " resistance_shunt*Ns, nVth*Ns), tol=1e-16)\n", + " except:\n", + " pass\n", + "\n", + "print(i_converged - i_pvl_mod['current'][method])\n", + "\n", + "plt.figure()\n", + "plt.plot(Vmod, i_converged - i_pvl_mod['current'][method])\n", + "\n", + "after = sde_resid(v=Vmod, i=i_converged, iph=photocurrent, io=saturation_current,\n", + " rs=resistance_series*Ns, rsh=resistance_shunt*Ns, nNsVth=nVth*Ns)\n", + "print(np.max(np.abs(after)))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.8" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/notebooks/check_mismatch_ivcurve_with_pvlib.py b/notebooks/check_mismatch_ivcurve_with_pvlib.py new file mode 100644 index 0000000..d96e62a --- /dev/null +++ b/notebooks/check_mismatch_ivcurve_with_pvlib.py @@ -0,0 +1,156 @@ +# -*- coding: utf-8 -*- +""" +Created on Wed Mar 11 14:16:42 2020 + +@author: cwhanse +""" + +# add capability to import from parent directory +import sys, os +sys.path.insert(1, os.path.join(os.path.abspath('.'), '..')) + +import pvmismatch as pvm +import numpy as np +import pvlib +import matplotlib.pyplot as plt + +from scipy.interpolate import interp1d + +# Setting PV system layout cell and module parameters +v_bypass = np.float64(-0.5) # [V] trigger voltage of bypass diode +cell_area = np.float64(246.49) # [cm^2] cell area +Isc0_T0 = 9.68 # [A] reference short circuit current +# set columns per substring, ncol, and number of substrings, nsub, as [ncol]*nsub +ncols_per_substr=[2]*3 +nrows=10 # number of cell rows in the module +# total number of series-connected cells in a substring is nrows * +# [ncol]*nsub is nsub bypass diodes each in parallel with ncol*nrow series-connected cells +VBYPASS = np.float64(-0.5) +MODULE_BYPASS = None + +num_substrings = len(ncols_per_substr) +cells_per_substring = [[k + p*nrows*s for k in range(nrows * s)] for p, s in + enumerate(ncols_per_substr)] + +pvconst = pvm.pvconstants.PVconstants(npts=1000) + +# Building PV modules and system +pv_mod_pattern = pvm.pvmodule.standard_cellpos_pat(nrows=nrows, + ncols_per_substr=ncols_per_substr) +pv_mod = pvm.pvmodule.PVmodule(cell_pos=pv_mod_pattern, pvcells=None, + pvconst=pvconst, Vbypass=v_bypass, cellArea=cell_area) + +for c in pv_mod.pvcells: + c.update(diode_model = 'pvsyst', aRBD=0.0, bRBD=0.0, Isc0_T0 = Isc0_T0) # updating short circuit currents + + +# Set mismatch by different irradiance conditions +# one cell at bottom row of each substring is shaded +low_irrad_cells = [9, 29, 49] +low_irrad = [0.7, 0.5, 0.3] + +hi_irrad_cells = list(range(0, len(pv_mod.pvcells))) +for c in low_irrad_cells: + hi_irrad_cells.remove(c) + +pv_mod.setSuns(cells=hi_irrad_cells, Ee=[1]*len(hi_irrad_cells)) +pv_mod.setSuns(cells=low_irrad_cells, Ee=low_irrad) + + +idxs = [r['idx'] for c in pv_mod.cell_pos[0] for r in c] + +Icells = [] +Vcells = [] +for idx in idxs: + Icells.append(pv_mod.pvcells[idx].Icell) + Vcells.append(pv_mod.pvcells[idx].Vcell) +Icells = np.asarray(Icells).squeeze() +Vcells = np.asarray(Vcells).squeeze() + + +# parallel calculation using pvlib +# first verify IV curves for each cell +tol = 5e-14 + +result = {} + +cells_to_check = low_irrad_cells.copy() +cells_to_check.append(hi_irrad_cells[0]) +for i in cells_to_check: + icell = pvlib.pvsystem.i_from_v(resistance_shunt=pv_mod.pvcells[i].Rsh, + resistance_series=pv_mod.pvcells[i].Rs, + nNsVth=pv_mod.pvcells[i].N1*pv_mod.pvcells[i].Vt, + voltage=pv_mod.pvcells[i].Vcell.flatten(), + saturation_current=pv_mod.pvcells[i].Isat1, + photocurrent=pv_mod.pvcells[i].Igen) + # save that for later + result[i] = (pv_mod.pvcells[i].Vcell.flatten(), icell) + if np.max(np.abs(icell - pv_mod.pvcells[i].Icell.flatten())) < tol: + print('Cell {} current matches'.format(i)) + else: + print('Cell {} current does not match'.format(i)) + +for i in cells_to_check: + plt.figure() + plt.plot(result[i][0], result[i][1], 'k.') + plt.title('IV curve for cell {}'.format(c)) + plt.show() + +# now create the substring IV curves + +full_sun_v = result[0][0] +full_sun_i = result[0][1] + +substring_result = {} +for s, cell_list in enumerate(cells_per_substring): + all_i = np.array(full_sun_i) + for idx in cell_list: + if idx in low_irrad_cells: + all_i = np.append(all_i, result[idx][1]) + all_i = np.flipud(np.sort(all_i)) + all_v = np.zeros_like(all_i) + for idx in cell_list: + if idx in low_irrad_cells: + i = result[idx][1] + v = result[idx][0] + else: + i = full_sun_i + v = full_sun_v + f_interp = interp1d(np.flipud(i), np.flipud(v), kind='linear', + fill_value='extrapolate') + all_v += f_interp(all_i) + if VBYPASS: + all_v = all_v.clip(min=VBYPASS) + substring_result[s] = (all_v, all_i) + +for s in substring_result: + plt.figure() + plt.plot(substring_result[s][0], substring_result[s][1], 'r.') + plt.plot(pv_mod.Vsubstr[s], pv_mod.Isubstr[s], 'k.') + plt.title('IV curve for substring {}'.format(s)) + plt.legend(['pvlib', 'PVMismatch']) + plt.show() + +# assemble module IV curve + +module_i = np.array([]) +for s in substring_result.keys(): + module_i = np.append(module_i, substring_result[s][1]) +module_i = np.flipud(np.sort(module_i)) + +module_v = np.zeros_like(module_i) +for s in substring_result: + f_interp = interp1d(np.flipud(substring_result[s][1]), + np.flipud(substring_result[s][0]), kind='linear', + fill_value='extrapolate') + module_v += f_interp(module_i) + +if MODULE_BYPASS: + module_v = module_v.clip(min=VBYPASS) + +plt.figure() +plt.plot(module_v, module_i, 'r.') +plt.plot(pv_mod.Vmod, pv_mod.Imod, 'k.') +plt.title('IV curve for module') +plt.legend(['pvlib', 'PVMismatch']) +plt.show() diff --git a/notebooks/irradiance_mismatch_iv_curves.ipynb b/notebooks/irradiance_mismatch_iv_curves.ipynb new file mode 100644 index 0000000..6aed54b --- /dev/null +++ b/notebooks/irradiance_mismatch_iv_curves.ipynb @@ -0,0 +1,250 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "C:\\Users\\cwhanse\\AppData\\Local\\Continuum\\Anaconda3\\lib\\site-packages\\pandas\\compat\\_optional.py:106: UserWarning: Pandas requires version '1.2.1' or newer of 'bottleneck' (version '1.1.0' currently installed).\n", + " warnings.warn(msg, UserWarning)\n" + ] + } + ], + "source": [ + "# add capability to import from parent directory\n", + "import sys, os\n", + "sys.path.insert(1, os.path.join(os.path.abspath('.'), '..'))\n", + "\n", + "import pvmismatch as pvm\n", + "import pvlib\n", + "import numpy as np\n", + "import pandas as pd\n", + "\n", + "import matplotlib.pyplot as plt" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [], + "source": [ + "# Setting PV system layout cell and module parameters\n", + "v_bypass = np.float64(-0.5) # [V] trigger voltage of bypass diode\n", + "cell_area = np.float64(246.49) # [cm^2] cell area\n", + "Isc0_T0 = 9.68 # [A] reference short circuit current\n", + "ncols_per_substr=[2]*3 # 3 bypass diodes each in parallel with 2 series connected cell-columns\n", + "nrows=10 # number of cell rows in the module\n", + "\n", + "pvconst = pvm.pvconstants.PVconstants(npts=1000)\n", + "\n", + "# Building PV modules and system\n", + "pv_mod_pattern = pvm.pvmodule.standard_cellpos_pat(nrows=nrows,\n", + " ncols_per_substr=ncols_per_substr)\n", + "pv_mod = pvm.pvmodule.PVmodule(cell_pos=pv_mod_pattern, pvcells=None,\n", + " pvconst=pvconst, Vbypass=v_bypass, cellArea=cell_area)\n", + "\n", + "for c in pv_mod.pvcells:\n", + " c.update(diode_model = 'pvsyst', aRBD=0.0, bRBD=0.0, Isc0_T0 = Isc0_T0) # updating short circuit currents\n" + ] + }, + { + "cell_type": "code", + "execution_count": 74, + "metadata": {}, + "outputs": [], + "source": [ + "# Set mismatch by different irradiance conditions\n", + "\n", + "# bottom 2 rows of cells are shaded\n", + "low_irrad = 0.5\n", + "\n", + "low_irrad_cells = [8, 9, 19, 18]\n", + "hi_irrad_cells = list(range(0, len(pv_cells)))\n", + "for c in low_irrad_cells:\n", + " hi_irrad_cells.remove(c)\n", + "\n", + "pv_mod.setSuns(cells=hi_irrad_cells, Ee=[1]*len(hi_irrad_cells))\n", + "pv_mod.setSuns(cells=low_irrad_cells, Ee=[low_irrad]*len(low_irrad_cells))\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 75, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# remove negative voltage and current\n", + "\n", + "u = (pv_mod.Vmod>=0.) & (pv_mod.Imod>=0.)\n", + "\n", + "plt.plot(pv_mod.Vmod[u], pv_mod.Imod[u], 'r.')\n", + "plt.show()\n", + "\n", + "uu = (pv_mod.Vmod > 30) & (pv_mod.Imod>=0.) # focus on segment towards Voc\n", + "\n", + "plt.plot(pv_mod.Vmod[uu], pv_mod.Imod[uu], 'b.')\n", + "plt.show()\n", + "\n", + "# plot IV curve for string with shaded cells\n", + "plt.plot(pv_mod.Vsubstr[0], pv_mod.Isubstr[0], 'k.')\n", + "plt.show()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 76, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "\n", + "for idx in range(0, 59):\n", + " v = (pv_mod.pvcells[idx].Vcell>=0.) & (pv_mod.pvcells[idx].Icell>=0.)\n", + " plt.plot(pv_mod.pvcells[idx].Vcell[v], pv_mod.pvcells[idx].Icell[v])\n", + "plt.show()\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 79, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 79, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "idxs = [r['idx'] for c in pv_mod.cell_pos[0] for r in c]\n", + "\n", + "Icells = []\n", + "Vcells = []\n", + "for idx in idxs:\n", + " Icells.append(pv_mod.pvcells[idx].Icell)\n", + " Vcells.append(pv_mod.pvcells[idx].Vcell)\n", + "Icells = np.asarray(Icells).squeeze()\n", + "Vcells = np.asarray(Vcells).squeeze()\n", + "\n", + "Imod, Vmod = pvconst.calcSeries(Icells, Vcells, pv_mod.Isc[idxs].mean(), Isub.max())\n", + "\n", + "u = (Vmod>=0.) & (Imod>=0.)\n", + "plt.plot(Vmod[u], Imod[u], '.')\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.8" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/pvmismatch/pvmismatch_lib/pvcell.py b/pvmismatch/pvmismatch_lib/pvcell.py index 5f6442b..db8f552 100644 --- a/pvmismatch/pvmismatch_lib/pvcell.py +++ b/pvmismatch/pvmismatch_lib/pvcell.py @@ -13,17 +13,24 @@ from scipy.optimize import newton # Defaults +MODEL = '2diode' RS = 0.004267236774264931 # [ohm] series resistance -RSH = 10.01226369025448 # [ohm] shunt resistance +RSH_STC = 10.01226369025448 # [ohm] shunt resistance at STC +RSH_0 = RSH_STC / 10 # [ohm] shunt resistance at 0 irradiance (pvsyst model) +RSH_EXP = -5.5 # [unitless] exponent relating Rsh to irradiance (pvsyst model) ISAT1_T0 = 2.286188161253440E-11 # [A] diode one saturation current ISAT2_T0 = 1.117455042372326E-6 # [A] diode two saturation current +N1_0 = 1.0 # [unitless] diode one ideality factor +N2_0 = 2.0 # [unitless] diode two ideality factor +MU_GAMMA = 0.0003 # [1/K] temperature coefficient of N1 (pvsyst model) ISC0_T0 = 6.3056 # [A] reference short circuit current TCELL = 298.15 # [K] cell temperature ARBD = 1.036748445065697E-4 # reverse breakdown coefficient 1 BRBD = 0. # reverse breakdown coefficient 2 VRBD_ = -5.527260068445654 # [V] reverse breakdown voltage NRBD = 3.284628553041425 # reverse breakdown exponent -EG = 1.1 # [eV] band gap of cSi +EG_0 = 1.1 # [eV] band gap of cSi +DEG_DT = -0.0002677 # [eV/K] temperature coefficient of EG (desoto model) ALPHA_ISC = 0.0003551 # [1/K] short circuit current temperature coefficient EPS = np.finfo(np.float64).eps @@ -31,8 +38,11 @@ class PVcell(object): """ Class for PV cells. + :param diode_model: name of diode model (str) '2diode', 'desoto', 'pvsyst' :param Rs: series resistance [ohms] - :param Rsh: shunt resistance [ohms] + :param Rsh_STC: shunt resistance at STC condition [ohms] + :param Rsh_0: shunt resistance at 0 irradiance (pvsyst) [ohms] + :param Rsh_exp: exponent relating Rsh to irradiance (pvsyst) [unitless] :param Isat1_T0: first saturation diode current at ref temp [A] :param Isat2_T0: second saturation diode current [A] :param Isc0_T0: short circuit current at ref temp [A] @@ -40,7 +50,11 @@ class PVcell(object): :param bRBD: reverse breakdown coefficient 2 :param VRBD: reverse breakdown voltage [V] :param nRBD: reverse breakdown exponent - :param Eg: band gap [eV] + :param Eg_0: band gap at STC [eV] + :param dEg_dT: temperature dependence of band gap [eV/K] + :param N1_0: diode one ideality factor [unitless] + :param N2_0: diode two ideality factor [unitless] + :param mu_gamma: temperature coeff for diode one ideality factor [1/K] :param alpha_Isc: short circuit current temp coeff [1/K] :param Tcell: cell temperature [K] :param Ee: incident effective irradiance [suns] @@ -50,13 +64,23 @@ class PVcell(object): _calc_now = False #: if True ``calcCells()`` is called in ``__setattr__`` - def __init__(self, Rs=RS, Rsh=RSH, Isat1_T0=ISAT1_T0, Isat2_T0=ISAT2_T0, - Isc0_T0=ISC0_T0, aRBD=ARBD, bRBD=BRBD, VRBD=VRBD_, - nRBD=NRBD, Eg=EG, alpha_Isc=ALPHA_ISC, + def __init__(self, diode_model=MODEL, Rs=RS, Rsh_STC=RSH_STC, Rsh_0=RSH_0, + Rsh_exp=RSH_EXP, Isat1_T0=ISAT1_T0, Isat2_T0=ISAT2_T0, + Isc0_T0=ISC0_T0, aRBD=ARBD, bRBD=BRBD, VRBD=VRBD_, nRBD=NRBD, + Eg_0=EG_0, dEg_dT=DEG_DT, N1_0=N1_0, N2_0=N2_0, + mu_gamma=MU_GAMMA, alpha_Isc=ALPHA_ISC, Tcell=TCELL, Ee=1., pvconst=PVconstants()): # user inputs + if diode_model in ['2diode', 'desoto', 'pvsyst']: + self.diode_model = diode_model + else: + raise ValueError('diode_model must be one of ''2diode'',' + ' ''desoto'' or ''pvsyst'';' + '% provided'.format(diode_model)) self.Rs = Rs #: [ohm] series resistance - self.Rsh = Rsh #: [ohm] shunt resistance + self.Rsh_STC = Rsh_STC #: [ohm] shunt resistance at STC + self.Rsh_0 = Rsh_0 #: [ohm] shunt resistance at 0 irradiance (pvsyst) + self.Rsh_exp = Rsh_exp #: [unitless] exponent for _Rsh (pvsyst) self.Isat1_T0 = Isat1_T0 #: [A] diode one sat. current at T0 self.Isat2_T0 = Isat2_T0 #: [A] diode two saturation current self.Isc0_T0 = Isc0_T0 #: [A] short circuit current at T0 @@ -64,7 +88,11 @@ def __init__(self, Rs=RS, Rsh=RSH, Isat1_T0=ISAT1_T0, Isat2_T0=ISAT2_T0, self.bRBD = bRBD #: reverse breakdown coefficient 2 self.VRBD = VRBD #: [V] reverse breakdown voltage self.nRBD = nRBD #: reverse breakdown exponent - self.Eg = Eg #: [eV] band gap of cSi + self.Eg_0 = Eg_0 #: [eV] band gap at STC + self.dEg_dT = dEg_dT #: [eV/K] temperature coeff of band gap + self.N1_0 = N1_0 #: [unitless] diode one ideality factor at T0 + self.N2_0 = N2_0 #: [unitless] diode two ideality factor + self.mu_gamma = mu_gamma #: [1/K] temp. coeff for diode one ideality self.alpha_Isc = alpha_Isc #: [1/K] short circuit temp. coeff. self.Tcell = Tcell #: [K] cell temperature self.Ee = Ee #: [suns] incident effective irradiance on cell @@ -118,6 +146,34 @@ def Vt(self): def Isc(self): return self.Ee * self.Isc0 + @property + def N1(self): + if self.diode_model == 'pvsyst': + return self.N1_0 + self.mu_gamma * (self.Tcell - self.pvconst.T0) + return self.N1_0 + + @property + def N2(self): + return self.N2_0 + + @property + def Eg(self): + if self.diode_model == 'desoto': + return self.Eg_0 + self.dEg_dT * (self.Tcell - self.pvconst.T0) + return self.Eg_0 + + @property + def Rsh(self): + if self.diode_model == 'desoto': + return self.Rsh_STC / self.Ee + elif self.diode_model == 'desoto': + rsh_tmp = self.Rsh_STC - self.Rsh_0 * np.exp(self.Rsh_exp) / \ + (1. - np.exp(self.Rsh_exp)) + rsh_base = np.maximum(0.0, rsh_tmp) + return rsh_base + (self.Rsh_0 - rsh_base) * \ + np.exp(self.Rsh_exp * self.Ee) + return self.Rsh_STC + @property def Aph(self): """ @@ -127,11 +183,14 @@ def Aph(self): if self.Isc == 0: return np.nan # short current (SC) conditions (Vcell = 0) Vdiode_sc = self.Isc * self.Rs # diode voltage at SC - Idiode1_sc = self.Isat1 * (np.exp(Vdiode_sc / self.Vt) - 1.) - Idiode2_sc = self.Isat2 * (np.exp(Vdiode_sc / 2. / self.Vt) - 1.) + Idiode1_sc = self.Isat1 * (np.expm1(Vdiode_sc / self.N1 / self.Vt)) + Idiode2_sc = self.Isat2 * (np.expm1(Vdiode_sc / self.N2 / self.Vt)) Ishunt_sc = Vdiode_sc / self.Rsh # diode voltage at SC # photogenerated current coefficient - return 1. + (Idiode1_sc + Idiode2_sc + Ishunt_sc) / self.Isc + if self.diode_model=='2diode': + return 1. + (Idiode1_sc + Idiode2_sc + Ishunt_sc) / self.Isc + else: + return 1. + (Idiode1_sc + Ishunt_sc) / self.Isc @property def Isat1(self): @@ -140,9 +199,20 @@ def Isat1(self): """ _Tstar = self.Tcell ** 3. / self.pvconst.T0 ** 3. # scaled temperature _inv_delta_T = 1. / self.pvconst.T0 - 1. / self.Tcell # [1/K] - _expTstar = np.exp( - self.Eg * self.pvconst.q / self.pvconst.k * _inv_delta_T - ) + k_b = self.pvconst.k / self.pvconst.q + if self.diode_model == 'pvsyst': # include diode factor + _expTstar = np.exp( + self.Eg / k_b / self.N1 * _inv_delta_T + ) + elif self.diode_model == 'desoto': + + _expTstar = np.exp( + self.Eg_0 / k_b / self.pvconst.T0 - self.Eg / k_b / self.Tcell + ) + else: + _expTstar = np.exp( + self.Eg / k_b /self.N1 * _inv_delta_T + ) return self.Isat1_T0 * _Tstar * _expTstar # [A] Isat1(Tcell) @property @@ -150,13 +220,14 @@ def Isat2(self): """ Diode two saturation current at Tcell in amps. """ - _Tstar = self.Tcell ** 3. / self.pvconst.T0 ** 3. # scaled temperature - _inv_delta_T = 1. / self.pvconst.T0 - 1. / self.Tcell # [1/K] - _expTstar = np.exp( - self.Eg * self.pvconst.q / (2.0 * self.pvconst.k) * _inv_delta_T - ) - return self.Isat2_T0 * _Tstar * _expTstar # [A] Isat2(Tcell) - + if self.diode_model=='2diode': + _Tstar = self.Tcell ** 3. / self.pvconst.T0 ** 3. # scaled temperature + _inv_delta_T = 1. / self.pvconst.T0 - 1. / self.Tcell # [1/K] + _expTstar = np.exp(self.Eg * self.pvconst.q / self.pvconst.k / + self.N2 * _inv_delta_T) + return self.Isat2_T0 * _Tstar * _expTstar # [A] Isat2(Tcell) + return 0.0 + @property def Isc0(self): """ @@ -171,11 +242,15 @@ def Voc(self): Estimate open circuit voltage of cells. Returns Voc : numpy.ndarray of float, estimated open circuit voltage """ - C = self.Aph * self.Isc + self.Isat1 + self.Isat2 - delta = self.Isat2 ** 2. + 4. * self.Isat1 * C - return self.Vt * np.log( - ((-self.Isat2 + np.sqrt(delta)) / 2. / self.Isat1) ** 2. - ) + if self.diode_model == '2diode': # does not use ideality factors + C = self.Aph * self.Isc + self.Isat1 + self.Isat2 + delta = self.Isat2 ** 2. + 4. * self.Isat1 * C + return self.Vt * np.log( + ((-self.Isat2 + np.sqrt(delta)) / 2. / self.Isat1) ** 2. + ) + else: + C = self.Aph * self.Isc / self.Isat1 + return self.N1 * self.Vt * np.log(1. + C) def _VocSTC(self): """ @@ -183,17 +258,23 @@ def _VocSTC(self): Returns Voc : numpy.ndarray of float, estimated open circuit voltage """ Vdiode_sc = self.Isc0_T0 * self.Rs # diode voltage at SC - Idiode1_sc = self.Isat1_T0 * (np.exp(Vdiode_sc / self.Vt) - 1.) - Idiode2_sc = self.Isat2_T0 * (np.exp(Vdiode_sc / 2. / self.Vt) - 1.) - Ishunt_sc = Vdiode_sc / self.Rsh # diode voltage at SC - # photogenerated current coefficient - Aph = 1. + (Idiode1_sc + Idiode2_sc + Ishunt_sc) / self.Isc0_T0 - # estimated Voc at STC - C = Aph * self.Isc0_T0 + self.Isat1_T0 + self.Isat2_T0 - delta = self.Isat2_T0 ** 2. + 4. * self.Isat1_T0 * C - return self.Vt * np.log( - ((-self.Isat2_T0 + np.sqrt(delta)) / 2. / self.Isat1_T0) ** 2. - ) + Vt_sc = self.pvconst.k * self.pvconst.T0 / self.pvconst.q + if self.diode_model == '2diode': + Idiode1_sc = self.Isat1_T0 * (np.exp(Vdiode_sc / Vt_sc) - 1.) + Idiode2_sc = self.Isat2_T0 * (np.exp(Vdiode_sc / 2. / Vt_sc) - 1.) + Ishunt_sc = Vdiode_sc / self.Rsh # diode voltage at SC + # photogenerated current coefficient + Aph = 1. + (Idiode1_sc + Idiode2_sc + Ishunt_sc) / self.Isc0_T0 + # estimated Voc at STC + C = Aph * self.Isc0_T0 + self.Isat1_T0 + self.Isat2_T0 + delta = self.Isat2_T0 ** 2. + 4. * self.Isat1_T0 * C + return Vt_sc * np.log( + ((-self.Isat2_T0 + np.sqrt(delta)) / 2. / self.Isat1_T0) ** 2. + ) + else: + Isat = self.Isat1_T0 * ( + np.exp(Vdiode_sc / Vt_sc / self.N1_0) - 1.) + return self.N1_0 * Vt_sc * np.log(1. + self.Isc0_T0 / Isat) @property def Igen(self): @@ -228,15 +309,15 @@ def calcCell(self): Vquad4 = Vff + delta_Voc * self.pvconst.Vmod_q4pts Vforward = Vff * self.pvconst.pts Vdiode = np.concatenate((Vreverse, Vforward, Vquad4), axis=0) - Idiode1 = self.Isat1 * (np.exp(Vdiode / self.Vt) - 1.) - Idiode2 = self.Isat2 * (np.exp(Vdiode / 2. / self.Vt) - 1.) + Idiode1 = self.Isat1 * (np.exp(Vdiode / self.N1 / self.Vt) - 1.) + Idiode2 = self.Isat2 * (np.exp(Vdiode / self.N2 / self.Vt) - 1.) Ishunt = Vdiode / self.Rsh fRBD = 1. - Vdiode / self.VRBD # use epsilon = 2.2204460492503131e-16 to avoid "divide by zero" fRBD[fRBD == 0] = EPS Vdiode_norm = Vdiode / self.Rsh / self.Isc0_T0 fRBD = self.Isc0_T0 * fRBD ** (-self.nRBD) - IRBD = (self.aRBD * Vdiode_norm + self.bRBD * Vdiode_norm ** 2) * fRBD + IRBD = (self.aRBD * Vdiode_norm + self.bRBD * Vdiode_norm ** 2) * fRBD Icell = self.Igen - Idiode1 - Idiode2 - Ishunt - IRBD Vcell = Vdiode - Icell * self.Rs Pcell = Icell * Vcell @@ -255,7 +336,7 @@ def calcCell(self): # http://en.wikipedia.org/wiki/William_Shockley @staticmethod - def f_Icell(Icell, Vcell, Igen, Rs, Vt, Isat1, Isat2, Rsh): + def f_Icell(Icell, Vcell, Igen, Rs, Vt, Isat1, Isat2, Rsh, N1, N2): """ Objective function for Icell. :param Icell: cell current [A] @@ -270,8 +351,8 @@ def f_Icell(Icell, Vcell, Igen, Rs, Vt, Isat1, Isat2, Rsh): """ # arbitrary current condition Vdiode = Vcell + Icell * Rs # diode voltage - Idiode1 = Isat1 * (np.exp(Vdiode / Vt) - 1.) # diode current - Idiode2 = Isat2 * (np.exp(Vdiode / 2. / Vt) - 1.) # diode current + Idiode1 = Isat1 * (np.exp(Vdiode / N1 / Vt) - 1.) # diode current + Idiode2 = Isat2 * (np.exp(Vdiode / N2 / Vt) - 1.) # diode current Ishunt = Vdiode / Rsh # shunt current return Igen - Idiode1 - Idiode2 - Ishunt - Icell @@ -282,12 +363,13 @@ def calcIcell(self, Vcell): :return: Icell """ args = (np.float64(Vcell), self.Igen, self.Rs, self.Vt, - self.Isat1, self.Isat2, self.Rsh) + self.Isat1, self.Isat2, self.Rsh, self.N1, self.N2) return newton(self.f_Icell, x0=self.Isc, args=args) @staticmethod - def f_Vcell(Vcell, Icell, Igen, Rs, Vt, Isat1, Isat2, Rsh): - return PVcell.f_Icell(Icell, Vcell, Igen, Rs, Vt, Isat1, Isat2, Rsh) + def f_Vcell(Vcell, Icell, Igen, Rs, Vt, Isat1, Isat2, Rsh, N1, N2): + return PVcell.f_Icell(Icell, Vcell, Igen, Rs, Vt, Isat1, Isat2, Rsh, + N1, N2) def calcVcell(self, Icell): """ @@ -296,7 +378,7 @@ def calcVcell(self, Icell): :return: Vcell """ args = (np.float64(Icell), self.Igen, self.Rs, self.Vt, - self.Isat1, self.Isat2, self.Rsh) + self.Isat1, self.Isat2, self.Rsh, self.N1, self.N2) return newton(self.f_Vcell, x0=self.Voc, args=args) def plot(self):