Created
May 31, 2023 13:50
-
-
Save kandersolar/4f488dee3e0b16c1aaa0ec5507eca6a4 to your computer and use it in GitHub Desktop.
a pvlib-based prototype I-V curve adder/mismatch calculator
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
| { | |
| "cells": [ | |
| { | |
| "cell_type": "markdown", | |
| "id": "2c010c67-efe3-4ae7-a2d8-dc3289fd6f91", | |
| "metadata": {}, | |
| "source": [ | |
| "# prototype I-V curve adder/mismatch calculator\n" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 1, | |
| "id": "8d395250-aa77-4488-8fbf-b9723ff20cf1", | |
| "metadata": { | |
| "tags": [] | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "import pvlib\n", | |
| "import numpy as np\n", | |
| "import pandas as pd\n", | |
| "from scipy.interpolate import interp1d\n", | |
| "import matplotlib.pyplot as plt\n", | |
| "import functools" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 2, | |
| "id": "d034d7aa-9a0d-47b7-b5c3-e4e678efc7fa", | |
| "metadata": { | |
| "tags": [] | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "def _balanced_linspace(start, stop, num, pivot=0):\n", | |
| " left = np.linspace(start, pivot, num//2, endpoint=False)\n", | |
| " right = np.linspace(pivot, stop, num//2)\n", | |
| " return np.concatenate([left, right])" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 3, | |
| "id": "a0cd2712-2be7-4a8d-8b0d-a9fe05c8c947", | |
| "metadata": { | |
| "tags": [] | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "class IVCurve:\n", | |
| " # TODO: make dataclass?\n", | |
| "\n", | |
| " def __init__(self, i, v):\n", | |
| " self.i = i\n", | |
| " self.v = v\n", | |
| "\n", | |
| " def get_voltage(self, i):\n", | |
| " f_interp = interp1d(np.flipud(self.i), np.flipud(self.v),\n", | |
| " kind='linear', fill_value='extrapolate')\n", | |
| " return f_interp(i)\n", | |
| "\n", | |
| " def get_current(self, v):\n", | |
| " f_interp = interp1d(self.v, self.i,\n", | |
| " kind='linear', fill_value='extrapolate')\n", | |
| " return f_interp(v)\n", | |
| "\n", | |
| " def combine(self, other, connection):\n", | |
| " if connection == 'series':\n", | |
| " isc_max = np.maximum(np.max(self.i[self.v > 0], axis=0),\n", | |
| " np.max(other.i[other.v > 0], axis=0))\n", | |
| " i = _balanced_linspace(np.minimum(np.min(self.i, axis=0), np.min(other.i, axis=0)),\n", | |
| " np.maximum(np.max(self.i, axis=0), np.max(other.i, axis=0)),\n", | |
| " 1000, pivot=isc_max)\n", | |
| " return IVCurve(i, self.get_voltage(i) + other.get_voltage(i))\n", | |
| " if connection == 'parallel':\n", | |
| " v = _balanced_linspace(np.minimum(np.min(self.v, axis=0), np.min(other.v, axis=0)),\n", | |
| " np.maximum(np.max(self.v, axis=0), np.max(other.v, axis=0)),\n", | |
| " num=1000, pivot=0)\n", | |
| " return IVCurve(self.get_current(v) + other.get_current(v), v)\n", | |
| "\n", | |
| " raise ValueError(\"connection must be one of 'series' or 'parallel', \"\n", | |
| " f\"got '{connection}'\")\n", | |
| "\n", | |
| " @property\n", | |
| " def p_mp(self):\n", | |
| " # TODO: delete this function?\n", | |
| " p = self.i * self.v\n", | |
| " return np.max(p)\n", | |
| "\n", | |
| " @property\n", | |
| " def mpp(self):\n", | |
| " # TODO: delete this function?\n", | |
| " p = self.i * self.v\n", | |
| " idx = np.argmax(p)\n", | |
| " return self.i[idx], self.v[idx]\n", | |
| "\n", | |
| " def plot(self):\n", | |
| " # TODO: delete this function\n", | |
| " plt.plot(self.v, self.i)\n", | |
| " imp, vmp = self.mpp\n", | |
| " plt.scatter([vmp], [imp], c='k')\n", | |
| " Isc = np.max(self.i[self.v > 0])\n", | |
| " plt.ylim(0, Isc*1.1)\n", | |
| " plt.ylabel('Current [A]')\n", | |
| " plt.xlabel('Voltage [V]')" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 4, | |
| "id": "ebb2eef3-5e76-4200-b9a2-2c0a06fa80d5", | |
| "metadata": { | |
| "tags": [] | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "class Circuit:\n", | |
| "\n", | |
| " def __init__(self, conditions, connection, diode_voltage=None):\n", | |
| " # \"conditions\" can be irradiance & temp, or a list of (sub-)Circuits\n", | |
| " self.conditions = conditions\n", | |
| " self.connection = connection\n", | |
| " self.diode_voltage = diode_voltage\n", | |
| "\n", | |
| " def apply(self, function):\n", | |
| " curves = []\n", | |
| " for condition in self.conditions:\n", | |
| " if isinstance(condition, dict):\n", | |
| " curves.append(function(**condition))\n", | |
| " else:\n", | |
| " curves.append(condition.apply(function))\n", | |
| "\n", | |
| " overall_curve = curves[0]\n", | |
| " for curve in curves[1:]:\n", | |
| " overall_curve = overall_curve.combine(curve, self.connection)\n", | |
| "\n", | |
| " Vd = self.diode_voltage\n", | |
| " if Vd is not None:\n", | |
| " overall_curve.v[overall_curve.v < -Vd] = -Vd\n", | |
| "\n", | |
| " return overall_curve\n" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 5, | |
| "id": "f06c4ece-d9c0-4779-9eb8-e0c89c4179cc", | |
| "metadata": { | |
| "tags": [] | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "def make_cell_curve_calculator(params, n_points=1000, use_cache=True):\n", | |
| " \"\"\"\n", | |
| " hacky function to use module-level CEC parameters to generate cell-level\n", | |
| " I-V curves. See the multiplication and division by 72 below.\n", | |
| " This can probably be done better.\n", | |
| " \"\"\"\n", | |
| " \n", | |
| " def get_curve(irradiance, temperature):\n", | |
| " \n", | |
| " sde_args = pvlib.pvsystem.calcparams_cec(\n", | |
| " np.array(irradiance),\n", | |
| " np.array(temperature),\n", | |
| " alpha_sc=params['alpha_sc'],\n", | |
| " a_ref=params['a_ref'],\n", | |
| " I_L_ref=params['I_L_ref'],\n", | |
| " I_o_ref=params['I_o_ref'],\n", | |
| " R_sh_ref=params['R_sh_ref'],\n", | |
| " R_s=params['R_s'],\n", | |
| " Adjust=params['Adjust'],\n", | |
| " EgRef=1.121,\n", | |
| " dEgdT=-0.0002677\n", | |
| " )\n", | |
| " kwargs = {\n", | |
| " 'breakdown_factor': 2e-3,\n", | |
| " 'breakdown_exp': 3,\n", | |
| " 'breakdown_voltage': -15*72,\n", | |
| " }\n", | |
| " v_oc = pvlib.singlediode.bishop88_v_from_i(\n", | |
| " 0.0, *sde_args, **kwargs\n", | |
| " )\n", | |
| " vd = np.linspace(0.99*kwargs['breakdown_voltage'], 1.01*v_oc, n_points)\n", | |
| "\n", | |
| " ivcurve_i, ivcurve_v, _ = pvlib.singlediode.bishop88(vd, *sde_args, **kwargs)\n", | |
| " return IVCurve(ivcurve_i, ivcurve_v/72)\n", | |
| "\n", | |
| " if use_cache:\n", | |
| " get_curve = functools.cache(get_curve)\n", | |
| "\n", | |
| " return get_curve" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 6, | |
| "id": "844181b5-43a1-4eeb-b6a4-b7e186cad09f", | |
| "metadata": { | |
| "tags": [] | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "cecmods = pvlib.pvsystem.retrieve_sam('cecmod')\n", | |
| "params = cecmods['Canadian_Solar_Inc__CS3W_400P']" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 7, | |
| "id": "1f3f3c84-b055-479a-a1fb-34e0254021dd", | |
| "metadata": { | |
| "tags": [] | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "Text(0.5, 0.5, 'loss: 75.5%')" | |
| ] | |
| }, | |
| "execution_count": 7, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| }, | |
| { | |
| "data": { | |
| "image/png": "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yMjgL0wc8DrHB69zfPA6xx6vcXx09zqfqkUmLKEHABsMBkyYMAFLlizpcHzJkiWYPHmyRlURERFRIknolhkAuOeee/Dd734XEydOxJlnnonnn38eVVVV+P73v691aURERJQAEj7MXHfddaivr8djjz2G6upqjBo1Cu+99x7Kysq0Lq1XjEYjHnnkkU5dYRRdvM7xwescH7zOscdrHB+xus6CkqzL/REREREhwcfMEBEREZ0KwwwRERElNYYZIiIiSmoMM0RERJTUGGbi6JlnnkFFRQVMJhMmTJiAVatWaV1S0vv4448xbdo0FBcXQxAELF68uMPjiqLg0UcfRXFxMcxmM6ZMmYJt27ZpU2ySmjt3Lk4//XTY7Xbk5+fjqquuwtdff93hHF7nvnv22Wdx2mmnRRYTO/PMM/H+++9HHuc1jr65c+dCEATMmTMncozXOToeffRRCILQ4VZYWBh5PNrXmWEmTt544w3MmTMHDz74IDZs2IBzzjkHl112GaqqqrQuLam1tbVhzJgxmD9/fpePP/nkk3jqqacwf/58rFmzBoWFhbjooovQ0tIS50qT18qVKzF79mx8/vnnWLJkCQKBAC6++GK0tbVFzuF17ruSkhI8/vjjWLt2LdauXYsLLrgA06dPj7zB8xpH15o1a/D888/jtNNO63Cc1zl6Ro4cierq6shty5Ytkceifp0ViotJkyYp3//+9zscGzZsmPKzn/1Mo4pSDwDl7bffjtyXZVkpLCxUHn/88cgxj8ejOBwO5a9//asGFaaGuro6BYCycuVKRVF4nWMpKytL+dvf/sZrHGUtLS3K4MGDlSVLlijnnXeecvfddyuKwp/laHrkkUeUMWPGdPlYLK4zW2biwOfzYd26dbj44os7HL/44ouxevVqjapKffv27UNNTU2H6240GnHeeefxuveB0+kEAGRnZwPgdY6FYDCI119/HW1tbTjzzDN5jaNs9uzZuOKKK3DhhRd2OM7rHF27du1CcXExKioqcP3112Pv3r0AYnOdE34F4FRw9OhRBIPBTptjFhQUdNpEk6InfG27uu6VlZValJT0FEXBPffcg7PPPhujRo0CwOscTVu2bMGZZ54Jj8cDm82Gt99+GyNGjIi8wfMa993rr7+O9evXY82aNZ0e489y9HzjG9/AK6+8giFDhqC2tha//vWvMXnyZGzbti0m15lhJo4EQehwX1GUTsco+njdo+euu+7C5s2b8cknn3R6jNe574YOHYqNGzeiqakJb731Fm666SasXLky8jivcd8cOHAAd999Nz788EOYTKYTnsfr3HeXXXZZ5PPRo0fjzDPPxMCBA/Hyyy/jjDPOABDd68xupjjIzc2FJEmdWmHq6uo6JVOKnvDIeV736PjhD3+Id999F8uXL0dJSUnkOK9z9BgMBgwaNAgTJ07E3LlzMWbMGDz99NO8xlGybt061NXVYcKECdDpdNDpdFi5ciX+9Kc/QafTRa4lr3P0Wa1WjB49Grt27YrJzzPDTBwYDAZMmDABS5Ys6XB8yZIlmDx5skZVpb6KigoUFhZ2uO4+nw8rV67kde8BRVFw1113YdGiRVi2bBkqKio6PM7rHDuKosDr9fIaR8nUqVOxZcsWbNy4MXKbOHEibrzxRmzcuBEDBgzgdY4Rr9eLHTt2oKioKDY/z70aNkw99vrrryt6vV75+9//rmzfvl2ZM2eOYrValf3792tdWlJraWlRNmzYoGzYsEEBoDz11FPKhg0blMrKSkVRFOXxxx9XHA6HsmjRImXLli3KDTfcoBQVFSnNzc0aV548fvCDHygOh0NZsWKFUl1dHbm5XK7IObzOfffAAw8oH3/8sbJv3z5l8+bNys9//nNFFEXlww8/VBSF1zhW2s9mUhRe52i59957lRUrVih79+5VPv/8c+XKK69U7HZ75N+8aF9nhpk4+stf/qKUlZUpBoNBGT9+fGRqK/Xe8uXLFQCdbjfddJOiKOoUwEceeUQpLCxUjEajcu655ypbtmzRtugk09X1BaAsWLAgcg6vc9/deuutkfeHvLw8ZerUqZEgoyi8xrFyfJjhdY6O6667TikqKlL0er1SXFyszJgxQ9m2bVvk8WhfZ0FRFKUPLUdEREREmuKYGSIiIkpqDDNERESU1BhmiIiIKKkxzBAREVFSY5ghIiKipMYwQ0REREmNYYaIiIiSGsMMERERJTWGGSKKm/LycsybN0/rMrq0f/9+CIIAQRAwduzYHj8//NzMzMyo10ZEJ8cwQ0SnNG3aNFx44YVdPvbZZ59BEASsX7++x68rCAIWL17cx+qi66OPPsLSpUsBqDuFDx48uMvzDh06BEmSsGjRIgBAdXV1wgY1olTHMENEpzRr1iwsW7YMlZWVnR578cUXMXbsWIwfP16DyqIvJycHOTk5ANTve/fu3Vi1alWn81566SXk5ORg2rRpAIDCwkI4HI641kpEKoYZIjqlK6+8Evn5+XjppZc6HHe5XHjjjTcwa9YsAMBbb72FkSNHwmg0ory8HH/4wx9O+Jrl5eUAgKuvvhqCIETu79mzB9OnT0dBQQFsNhtOP/10fPTRRx2eW11djSuuuAJmsxkVFRVYuHBhpy4sp9OJO+64A/n5+cjIyMAFF1yATZs29ej7Doe0F198sdNjL730EmbOnAm9Xt+j1ySi6GOYIaJT0ul0mDlzJl566SW035v2X//6F3w+H2688UasW7cO1157La6//nps2bIFjz76KH7xi190CkBha9asAQAsWLAA1dXVkfutra24/PLL8dFHH2HDhg245JJLMG3aNFRVVUWeO3PmTBw+fBgrVqzAW2+9heeffx51dXWRxxVFwRVXXIGamhq89957WLduHcaPH4+pU6eioaGhR9/7rFmz8K9//Qutra2RYytXrsTu3btx66239ui1iChG+rrNNxGlhx07digAlGXLlkWOnXvuucoNN9ygKIqifOc731EuuuiiDs+5//77lREjRkTul5WVKX/84x8j9wEob7/99im/9ogRI5Q///nPHepYs2ZN5PFdu3YpACKvvXTpUiUjI0PxeDwdXmfgwIHKc8891+XX2LdvnwJA2bBhQ4fjjY2NislkUl588cXIsZkzZypnnnlmp9dYsGCB4nA4Tvn9EFF0sWWGiLpl2LBhmDx5cqTLZc+ePVi1alWkdWLHjh0466yzOjznrLPOwq5duxAMBrv9ddra2vCTn/wEI0aMQGZmJmw2G7766qtIy8zXX38NnU7XYYzOoEGDkJWVFbm/bt06tLa2IicnBzabLXLbt28f9uzZ06PvOzMzEzNmzIh83y0tLXjrrbfYKkOUQHRaF0BEyWPWrFm466678Je//AULFixAWVkZpk6dCkDt2hEEocP5Srsuqe66//778cEHH+D3v/89Bg0aBLPZjGuuuQY+n++kr9n+uCzLKCoqwooVKzqd15up07NmzcLUqVOxa9curFy5EgBw3XXX9fh1iCg2GGaIqNuuvfZa3H333Vi4cCFefvll3H777ZEAM2LECHzyyScdzl+9ejWGDBkCSZK6fD29Xt+p1WbVqlW4+eabcfXVVwNQx9Ds378/8viwYcMQCASwYcMGTJgwAQCwe/duNDU1Rc4ZP348ampqoNPpIgOL++L888/HgAED8NJLL2H58uW49tprYbfb+/y6RBQd7GYiom6z2Wy47rrr8POf/xyHDx/GzTffHHns3nvvxdKlS/GrX/0KO3fuxMsvv4z58+fjvvvuO+HrlZeXY+nSpaipqUFjYyMAtcto0aJF2LhxIzZt2oTvfOc7kGU58pxhw4bhwgsvxB133IEvv/wSGzZswB133AGz2RwJVhdeeCHOPPNMXHXVVfjggw+wf/9+rF69Gg899BDWrl3b4+9bEATccsstePbZZ/HZZ59FZm8RUWJgmCGiHpk1axYaGxtx4YUXon///pHj48ePx5tvvonXX38do0aNwsMPP4zHHnusQ+A53h/+8AcsWbIEpaWlGDduHADgj3/8I7KysjB58mRMmzYNl1xySac1bF555RUUFBTg3HPPxdVXX43bb78ddrsdJpMJgBo+3nvvPZx77rm49dZbMWTIEFx//fXYv38/CgoKevV933zzzXA6nRg6dGinsUFEpC1B6U2nNhFRAjl48CBKS0vx0UcfRcbw9NT+/ftRUVGBDRs29Go7A0Bde2bOnDkduryIKPY4ZoaIks6yZcvQ2tqK0aNHo7q6Gj/5yU9QXl6Oc889t8+vPXnyZIwdOxarV6/u0fNsNhsCgUCkdYiI4odhhoiSjt/vx89//nPs3bsXdrsdkydPxmuvvdan1XhLSkqwa9cuAIDRaOzx8zdu3AgAJxzsTESxw24mIiIiSmocAExERERJjWGGiIiIkhrDDBERESU1hhkiIiJKagwzRERElNQYZoiIiCipMcwQERFRUmOYISIioqT2/wGt2TCp3C/SYAAAAABJRU5ErkJggg==", | |
| "text/plain": [ | |
| "<Figure size 640x480 with 1 Axes>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "# %% standard 72-cell module with 3 submodules, in portrait orientation\n", | |
| "\n", | |
| "cell_curve_calculator = make_cell_curve_calculator(params)\n", | |
| "\n", | |
| "# shadow across bottom of all submodules\n", | |
| "submodules = [\n", | |
| " Circuit([\n", | |
| " {'irradiance': 1000 if i > 0 else 200, 'temperature': 25} for i in range(24)\n", | |
| " ], connection='series', diode_voltage=0.5)\n", | |
| " for j in range(3)\n", | |
| "]\n", | |
| "\n", | |
| "module = Circuit(submodules, connection='series')\n", | |
| "\n", | |
| "for submodule in submodules:\n", | |
| " submodule_curve = submodule.apply(cell_curve_calculator)\n", | |
| " submodule_curve.plot()\n", | |
| "\n", | |
| "module_curve = module.apply(cell_curve_calculator)\n", | |
| "module_curve.plot()\n", | |
| "shaded_pmp = module_curve.p_mp\n", | |
| "\n", | |
| "# again, but no shadow\n", | |
| "\n", | |
| "submodules = [\n", | |
| " Circuit([\n", | |
| " {'irradiance': 1000, 'temperature': 25} for i in range(24)\n", | |
| " ], connection='series', diode_voltage=0.5)\n", | |
| " for j in range(3)\n", | |
| "]\n", | |
| "\n", | |
| "module = Circuit(submodules, connection='series')\n", | |
| "\n", | |
| "for submodule in submodules:\n", | |
| " submodule_curve = submodule.apply(cell_curve_calculator)\n", | |
| " submodule_curve.plot()\n", | |
| "\n", | |
| "module_curve = module.apply(cell_curve_calculator)\n", | |
| "module_curve.plot()\n", | |
| "unshaded_pmp = module_curve.p_mp\n", | |
| "\n", | |
| "ax = plt.gca()\n", | |
| "plt.text(0.5, 0.5, f\"loss: {100*(1 - shaded_pmp/unshaded_pmp):0.01f}%\", transform=ax.transAxes)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 8, | |
| "id": "8e6ffbd1-5c7e-4ca2-9a59-719b5fd20ce9", | |
| "metadata": { | |
| "tags": [] | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "Text(0.5, 0.5, 'loss: 14.9%')" | |
| ] | |
| }, | |
| "execution_count": 8, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| }, | |
| { | |
| "data": { | |
| "image/png": "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0WiUQCDAqlWrOPPMM7uzVpFeLdEyE/EDUEAztg1NQY2byTTBYJCvfvWrXH311fs894orruDQQw/d53nNzc2ccsopGIbBvHnzeOeddwgGg5x11llEo84vvocffpjFixfz3nvvcdVVV3HhhRcmtqFZv349f/rTn/jZz352YF+cJE32EZMBaImFmfwiH26vRTRsU7e9NZWl9TpdHjOzfv16iouLu6MWkYyWWDgvtgpwgdECoHEz3aC2tpZLL72UwsJCsrOzOe2001i9enXi+Y0bN3LWWWdRWFhITk4OhxxyCK+88kritRdffDEDBgwgKyuL0aNH8+ijj3bp8//4xz/mxhtvZNKkSXs976GHHqKuro6bb755n+/5zjvvsGHDBh577DEmTZrEpEmTePTRR/nggw8SLTArV67ky1/+MocccgjXXnstlZWVVFVVAXD11Vfzy1/+kvz8/C59LdJ9siY7YaZ1yVIADNNo20G7vDFldfVGnR4z095bb73FW2+9lWihae+RRx5JSmEimSYRZoJ1gNPNBGhGUze47LLLWL16NS+//DL5+fnceuutnH766axYsQK32821115LMBjk7bffJicnhxUrVpCb6/wS+eEPf8iKFSt49dVXKS4uZs2aNbS2tv2VPGPGDEaMGMFjjz12QDWuWLGCu+66i//85z+sW7dun+cHAgEMw8Dr9SaO+Xw+TNPk3//+NyeddBKHHXYYf/3rX2ltbeX111+npKSE4uJinnjiCXw+H+eee+4B1SzJlX3E4QD4P/mEaDCI6fFQVJrLtnX1VG9phqNSW19v0uUw8+Mf/5i77rqLI488kpKSEu2QLdJJ8TBT5a8jAmQRwE1YLTNJFg8x77zzDlOnTgXgb3/7G2VlZbz44ot89atfZdOmTXzlK19JtJy0X1Zi06ZNHHHEERx55JEAu0xsGDZsGCUlJQdUYyAQ4MILL+RXv/oVw4YN61SYOfbYY8nJyeHWW2/l5z//ObZtc+uttxKNRqmoqADg8ssv5+OPP2bChAkUFxfz97//ndraWu644w7mz5/PD37wA55++mkOOuggHnnkEYYOHXpAX4ccGPfw4Vj9+xOpqcH/yadkTz6C4qHO4nkaBNw1XQ4zf/jDH3jssce45JJLuqOeXZSXl3Prrbfy6quv0traypgxY/jzn//MlClTeuTziyRLf19/TMMkakep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+9FHH02co+t84C6//PLEz4cBAwbYM2fOTAQZ29Y17i47hxld5+T42te+ZpeUlNhut9seMmSIPWvWLPvTTz9NPJ/s62zYtm0fQMuRiIiISEppzIyIiIj0agozIiIi0qspzIiIiEivpjAjIiIivZrCjIiIiPRqCjMiIiLSqynMiIiISK+mMCMiIiK9msKMiPSYESNGcN9996W6jN3asGEDhmFgGAaHH354l18ff22/fv2SXpuI7J3CjIjs01lnncVJJ5202+fee+89DMNgyZIlXX5fwzB48cUXD7C65HrzzTd56623AGen8NGjR+/2vPLycizL4vnnnwegoqIibYOaSKZTmBGRfbriiiuYN28eGzdu3OW5Rx55hMMPP5zJkyenoLLkKyoqoqioCHC+7jVr1rBo0aJdznvssccoKirirLPOAmDw4MEUFBT0aK0i4lCYEZF9OvPMMxk4cCCPPfZYh+MtLS0888wzXHHFFQA899xzHHLIIXi9XkaMGMFvfvObPb7niBEjADj33HMxDCPxeO3atZx99tkMGjSI3NxcjjrqKN58880Or62oqOCMM84gKyuLkSNH8uSTT+7ShVVfX883v/lNBg4cSH5+Pl/84hf56KOPuvR1x0PaI488sstzjz32GJdeeilut7tL7ykiyacwIyL75HK5uPTSS3nsscdovzfts88+SzAY5OKLL2bx4sWcf/75XHDBBSxfvpw777yTH/7wh7sEoLgPPvgAgEcffZSKiorE46amJk4//XTefPNNli5dyqmnnspZZ53Fpk2bEq+99NJL2bp1KwsWLOC5557j4YcfprKyMvG8bducccYZbNu2jVdeeYXFixczefJkZs6cSU1NTZe+9iuuuIJnn32WpqamxLGFCxeyZs0aLr/88i69l4h0kwPd5ltE+oaVK1fagD1v3rzEsenTp9sXXnihbdu2fdFFF9knn3xyh9d897vftSdMmJB4PHz4cPvee+9NPAbsF154YZ+fe8KECfYDDzzQoY4PPvgg8fzq1attIPHeb731lp2fn2/7/f4O73PQQQfZf/zjH3f7OdavX28D9tKlSzscr62ttX0+n/3II48kjl166aX2cccdt8t7PProo3ZBQcE+vx4RSS61zIhIp4wbN46pU6cmulzWrl3LokWLEq0TK1eu5Pjjj+/wmuOPP57Vq1cTiUQ6/Xmam5u55ZZbmDBhAv369SM3N5fPPvss0TKzatUqXC5XhzE6Bx98MIWFhYnHixcvpqmpiaKiInJzcxO39evXs3bt2i593f369WPWrFmJr7uxsZHnnntOrTIiacSV6gJEpPe44ooruO666/jd737Ho48+yvDhw5k5cybgdO0YhtHhfLtdl1Rnffe73+X111/n17/+NQcffDBZWVmcd955BIPBvb5n++PRaJSSkhIWLFiwy3n7M3X6iiuuYObMmaxevZqFCxcC8LWvfa3L7yMi3UNhRkQ67fzzz+eGG27gySef5PHHH+eqq65KBJgJEybw73//u8P57777LmPGjMGyrN2+n9vt3qXVZtGiRVx22WWce+65gDOGZsOGDYnnx40bRzgcZunSpUyZMgWANWvWUFdXlzhn8uTJbNu2DZfLlRhYfCBOPPFERo0axWOPPcb8+fM5//zzycvLO+D3FZHkUDeTiHRabm4uX/va1/j+97/P1q1bueyyyxLPfec73+Gtt97iJz/5CZ9//jmPP/44Dz74IDfffPMe32/EiBG89dZbbNu2jdraWsDpMnr++edZtmwZH330ERdddBHRaDTxmnHjxnHSSSfxzW9+k//+978sXbqUb37zm2RlZSWC1UknncRxxx3HOeecw+uvv86GDRt49913+cEPfsCHH37Y5a/bMAy+8Y1v8NBDD/Hee+8lZm+JSHpQmBGRLrniiiuora3lpJNOYtiwYYnjkydP5u9//ztPP/00EydO5Ec/+hF33XVXh8Czs9/85jfMnTuXsrIyjjjiCADuvfdeCgsLmTp1KmeddRannnrqLmvY/OUvf2HQoEFMnz6dc889l6uuuoq8vDx8Ph/ghI9XXnmF6dOnc/nllzNmzBguuOACNmzYwKBBg/br677sssuor69n7Nixu4wNEpHUMuz96dQWEUkjW7ZsoaysjDfffDMxhqerNmzYwMiRI1m6dOl+bWcAztozs2fP7tDlJSLdT2NmRKTXmTdvHk1NTUyaNImKigpuueUWRowYwfTp0w/4vadOncrhhx/Ou+++26XX5ebmEg6HE61DItJzFGZEpNcJhUJ8//vfZ926deTl5TF16lT+9re/HdBqvKWlpaxevRoAr9fb5dcvW7YMYI+DnUWk+6ibSURERHo1DQAWERGRXk1hRkRERHo1hRkRERHp1RRmREREpFdTmBEREZFeTWFGREREejWFGREREenVFGZERESkV/v/HBn8nTFGyjkAAAAASUVORK5CYII=", | |
| "text/plain": [ | |
| "<Figure size 640x480 with 1 Axes>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "cell_curve_calculator = make_cell_curve_calculator(params)\n", | |
| "\n", | |
| "# %% uneven soiling\n", | |
| "\n", | |
| "submodules = [\n", | |
| " Circuit([\n", | |
| " {'irradiance': 1000 - j*100, 'temperature': 25} for i in range(24)\n", | |
| " ], connection='series', diode_voltage=0.5)\n", | |
| " for j in range(3)\n", | |
| "]\n", | |
| "\n", | |
| "module = Circuit(submodules, connection='series')\n", | |
| "\n", | |
| "for submodule in submodules:\n", | |
| " submodule_curve = submodule.apply(cell_curve_calculator)\n", | |
| " submodule_curve.plot()\n", | |
| "\n", | |
| "module_curve = module.apply(cell_curve_calculator)\n", | |
| "module_curve.plot()\n", | |
| "soiled_pmp = module_curve.p_mp\n", | |
| "\n", | |
| "# %% no soiling\n", | |
| "\n", | |
| "submodules = [\n", | |
| " Circuit([\n", | |
| " {'irradiance': 1000, 'temperature': 25} for i in range(24)\n", | |
| " ], connection='series', diode_voltage=0.5)\n", | |
| " for j in range(3)\n", | |
| "]\n", | |
| "\n", | |
| "module = Circuit(submodules, connection='series')\n", | |
| "module_curve = module.apply(cell_curve_calculator)\n", | |
| "module_curve.plot()\n", | |
| "unsoiled_pmp = module_curve.p_mp\n", | |
| "\n", | |
| "ax = plt.gca()\n", | |
| "plt.text(0.5, 0.5, f\"loss: {100*(1 - soiled_pmp/unsoiled_pmp):0.01f}%\", transform=ax.transAxes)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 9, | |
| "id": "42e230a6-0b5c-40c9-bffb-108671571b6c", | |
| "metadata": { | |
| "tags": [] | |
| }, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "submodule 0 voltage at module mpp: 12.975415675520853\n", | |
| "submodule 1 voltage at module mpp: 12.975415675520853\n", | |
| "submodule 2 voltage at module mpp: -0.5\n" | |
| ] | |
| }, | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "Text(0.7, 0.5, 'loss: 34.6%')" | |
| ] | |
| }, | |
| "execution_count": 9, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| }, | |
| { | |
| "data": { | |
| "image/png": "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FWPGjMH8+fP1LqXH4YaTXRdxy8zVV1+Nq6++GoIg4Pvf/37466uvvho33XQTli1bht///vfxrJUoZdiCYSZDdUNpo6WTUhdnNCXWd77zHfTp0wcWiwVFRUW45ZZbUN5OkKyqqkJJSQkEQUBtBPtnrVu3DhdeeCHsdjuysrIwdepUuN1uAFpvxS233AKn04khQ4ZgxYoVLV777LPP4u67725xLLThZHWFC4qsdOFPm74iDjOKokBRFPTp0weVlZXhrxVFgdfrxe7du3HFFVfEs1ailJGRmQsAEAUVjQ21+hZDCcVupsS64IIL8O9//xu7d+/G22+/jX379uH6669v89zZs2fjzDPPjOi669atw7e//W1Mnz4dX375JdavX4+77roLoqj9WH3ppZewYcMGrFu3DrfddhtmzJgR3hLowIEDePnll/HUU0+1uKYz1wKjWYISUFF73N2NP3X6iXrMzIEDB5CXlxePWojShsVqh1c1AgBcdSd1roYSyVis7Z6dLmGmpqYGM2fORHZ2Nmw2Gy699FLs2bMn/PyhQ4dw5ZVXIjs7G3a7HSNGjMD7778ffu3NN9+M/Px8WK1WDBo0CK+88kpU3/++++7DOeecg759+2LSpEl45JFH8Pnnn8Pv97c474UXXkBtbS1++tOfRnzde+65B4888ghGjBiBQYMG4frrr4fZbAYA7Nq1C9/5zncwYsQI3HnnnaisrMTJk9r/9dtvvx3PPPMMnE5ni2sKonBqB+0yznSMRsRjZppbvnw5li9fHm6haW7hwoUxKYwo1TUKNphRBzdbZtJKurXMzJo1C3v27MF7770Hp9OJhx9+GJdddhl27twJo9GIO++8Ez6fD5988gnsdjt27tyJjAztB/ovfvEL7Ny5Ex988AHy8vKwd+/ecDcOoI3P6devHxYtWhRRLdXV1fjnP/+JSZMmwWg0ho/v3LkTTz75JL744gvs37+/0+tUVlbiiy++wM0334xJkyZh3759GDp0KJ566imce+65AIDRo0fjH//4B9xuNz788EMUFRUhLy8Pr732GiwWC6655po2r51bkoFj++tQddQFnBXRH4vQhTDzy1/+Ek8++SQmTJiAoqIi7pBN1EVNgh25ah08DdV6l0IJFN7SoLISqs8HwWTSuaL4CYWYzz77DJMmTQIA/POf/0RpaSneffddfPe738Xhw4dx3XXXYdSoUQDQYomPw4cPY+zYsZgwYQIAtJpk0qdPHxQVFXVax8MPP4wFCxagqakJ55xzDv7zn/+En/N6vZgxYwZ++9vfok+fPhGFmdA5TzzxBH73u99hzJgxePXVVzFt2jRs374dgwYNwg9+8ANs3boVw4cPR15eHv7973+jpqYGjz/+OFauXImf//znWLJkCQYOHIiFCxeid+/eAIC83trieRwEHJ2ow8xf//pXLFq0CLfccks86mmlrKwMDz/8MD744AO43W4MHjwYf//73zF+/PiEfH+ieHFLGUAA8Llq9S6FEkjKzYVgMkH1+eCvrISppETvkuJm165dMBgM+Na3vhU+lpubiyFDhmDXrl0AgHvuuQe33347PvroI1x00UW47rrrwuNWbr/9dlx33XXYuHEjpk+fjquvvjocigDg1VdfjaiOBx98ELNnz8ahQ4fwy1/+EjNnzsR//vMfCIKAuXPnYtiwYfif//mfiP9coR6JH//4x7j11lsBAGPHjsXy5cuxcOFCzJs3D0ajEX/+859bvG7WrFm45557sHnzZrz77rvYsmULnn32Wdxzzz14++23tftToq1DxOnZ0Yl6zIzP52vxjymeampqMHnyZBiNRnzwwQfYuXMnfv/73yMrKysh358onryS1pTud9XoXAklkiCKMAZbE1J9RlNowGtbx0Ot+j/84Q+xf/9+3HLLLdi2bRsmTJiAP/3pTwCASy+9FIcOHcKcOXNQXl6OadOmRTympbm8vDwMHjwYF198MZYsWYL3338fn3/+OQBgxYoVePPNN2EwGGAwGDBt2rTwax5//PE2rxdqDRo+fHiL48OGDcPhw4fbfM2KFSuwc+dO3HXXXVi1ahUuu+wy2O123HDDDVi1alX4vNxgy4yr1gtPo7/Na1FrUYeZH/7wh3j99dfjUUsrzzzzDEpLS/HKK6/g7LPPRr9+/TBt2jQMHDgwId+fKJ78Ru03MLmpVt9CKOHSZY+m4cOHIxAI4Isvvggfq6qqwjfffINhw4aFj5WWluInP/kJli5digceeAB/+9vfws/l5+dj1qxZeO211zB//ny89NJL3aopFLC8Xi8A4O2338aWLVuwefNmbN68GS+//DIAYM2aNbjzzjvbvEa/fv1QXFyM3bt3tzj+zTffoG/fvq3O93g8uPPOO/Hiiy9CkiTIshwegOz3+1ss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/v37AcTnPif9CsCp4OTJk5BludXmmAUFBa020aTYCd3btu77oUOH9Cipx1NVFffffz/OPfdcjBw5EgDvcyxt27YNEydOhMfjQUZGBt555x0MHz48/AbPe9x9S5YswcaNG7F+/fpWz/Hfcux861vfwquvvorBgwfj+PHj+PWvf41JkyZhx44dcbnPDDMJJAhCi69VVW11jGKP9z127rrrLmzduhWffvppq+d4n7tvyJAh2Lx5M2pra/H222/j+9//PlavXh1+nve4e44cOYJ7770XH330ESwWS7vn8T5336WXXhp+PGrUKEycOBEDBw7E4sWLcc455wCI7X1mN1MC5OXlQZKkVq0wlZWVrZIpxU5o5Dzve2zcfffdeO+997By5UqUlJSEj/M+x47JZMIZZ5yBCRMmYN68eRg9ejT++Mc/8h7HyIYNG1BZWYnx48fDYDDAYDBg9erVeP7552EwGML3kvc59ux2O0aNGoU9e/bE5d8zw0wCmEwmjB8/HsuWLWtxfNmyZZg0aZJOVaW+/v37o7CwsMV99/l8WL16Ne97FFRVxV133YWlS5dixYoV6N+/f4vneZ/jR1VVeL1e3uMYmTZtGrZt24bNmzeHPyZMmICbb74ZmzdvxoABA3if48Tr9WLXrl0oKiqKz7/nLg0bpqgtWbJENRqN6t///nd1586d6pw5c1S73a4ePHhQ79J6tIaGBnXTpk3qpk2bVADqc889p27atEk9dOiQqqqq+vTTT6uZmZnq0qVL1W3btqkzZsxQi4qK1Pr6ep0r7zluv/12NTMzU121apVaUVER/mhqagqfw/vcfXPnzlU/+eQT9cCBA+rWrVvVn/3sZ6ooiupHH32kqirvcbw0n82kqrzPsfLAAw+oq1atUvfv369+/vnn6hVXXKE6HI7wz7xY32eGmQT685//rPbt21c1mUzquHHjwlNbqetWrlypAmj18f3vf19VVW0K4OOPP64WFhaqZrNZPe+889Rt27bpW3QP09b9BaC+8sor4XN4n7vvBz/4Qfj9IT8/X502bVo4yKgq73G8nB5meJ9j48Ybb1SLiopUo9GoFhcXq9dee626Y8eO8POxvs+CqqpqN1qOiIiIiHTFMTNERETUozHMEBERUY/GMENEREQ9GsMMERER9WgMM0RERNSjMcwQERFRj8YwQ0RERD0awwwRERH1aAwz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", | |
| "text/plain": [ | |
| "<Figure size 640x480 with 1 Axes>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "cell_curve_calculator = make_cell_curve_calculator(params)\n", | |
| "\n", | |
| "\n", | |
| "# %% shading on just one submodule\n", | |
| "\n", | |
| "submodules = [\n", | |
| " Circuit([\n", | |
| " {'irradiance': 1000, 'temperature': 25} for i in range(24)\n", | |
| " ], connection='series', diode_voltage=0.5)\n", | |
| " for j in range(2)\n", | |
| "] + [\n", | |
| " Circuit([\n", | |
| " {'irradiance': 200, 'temperature': 25} for i in range(24)\n", | |
| " ], connection='series', diode_voltage=0.5)\n", | |
| "]\n", | |
| "\n", | |
| "module = Circuit(submodules, connection='series')\n", | |
| "module_curve = module.apply(cell_curve_calculator)\n", | |
| "module_imp, module_vmp = module_curve.mpp\n", | |
| "\n", | |
| "for i, submodule in enumerate(submodules):\n", | |
| " submodule_curve = submodule.apply(cell_curve_calculator)\n", | |
| " submodule_curve.plot()\n", | |
| " print(f'submodule {i} voltage at module mpp:', submodule_curve.get_voltage(module_imp))\n", | |
| "\n", | |
| "module_curve.plot()\n", | |
| "shaded_pmp = module_curve.p_mp\n", | |
| "\n", | |
| "# %% no shading\n", | |
| "\n", | |
| "submodules = [\n", | |
| " Circuit([\n", | |
| " {'irradiance': 1000, 'temperature': 25} for i in range(24)\n", | |
| " ], connection='series', diode_voltage=0.5)\n", | |
| " for j in range(3)\n", | |
| "]\n", | |
| "\n", | |
| "module = Circuit(submodules, connection='series')\n", | |
| "module_curve = module.apply(cell_curve_calculator)\n", | |
| "module_curve.plot()\n", | |
| "unshaded_pmp = module_curve.p_mp\n", | |
| "\n", | |
| "ax = plt.gca()\n", | |
| "plt.text(0.7, 0.5, f\"loss: {100*(1 - shaded_pmp/unshaded_pmp):0.01f}%\", transform=ax.transAxes)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 10, | |
| "id": "21b89c1b-3fad-49f5-98e2-65ef834fffcb", | |
| "metadata": { | |
| "tags": [] | |
| }, | |
| "outputs": [ | |
| { | |
| "ename": "ValueError", | |
| "evalue": "x and y arrays must be equal in length along interpolation axis.", | |
| "output_type": "error", | |
| "traceback": [ | |
| "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", | |
| "\u001b[1;31mValueError\u001b[0m Traceback (most recent call last)", | |
| "Cell \u001b[1;32mIn[10], line 20\u001b[0m\n\u001b[0;32m 9\u001b[0m submodules \u001b[38;5;241m=\u001b[39m [\n\u001b[0;32m 10\u001b[0m Circuit([\n\u001b[0;32m 11\u001b[0m {\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mirradiance\u001b[39m\u001b[38;5;124m'\u001b[39m: pd\u001b[38;5;241m.\u001b[39mSeries(\u001b[38;5;241m1000\u001b[39m \u001b[38;5;241m-\u001b[39m np\u001b[38;5;241m.\u001b[39marange(\u001b[38;5;28mlen\u001b[39m(times))\u001b[38;5;241m*\u001b[39m\u001b[38;5;241m100\u001b[39m, index\u001b[38;5;241m=\u001b[39mtimes),\n\u001b[1;32m (...)\u001b[0m\n\u001b[0;32m 15\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m j \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mrange\u001b[39m(\u001b[38;5;241m3\u001b[39m)\n\u001b[0;32m 16\u001b[0m ]\n\u001b[0;32m 18\u001b[0m module \u001b[38;5;241m=\u001b[39m Circuit(submodules, connection\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mseries\u001b[39m\u001b[38;5;124m'\u001b[39m)\n\u001b[1;32m---> 20\u001b[0m curve \u001b[38;5;241m=\u001b[39m \u001b[43mmodule\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mapply\u001b[49m\u001b[43m(\u001b[49m\u001b[43mcell_curve_calculator\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 21\u001b[0m curve\u001b[38;5;241m.\u001b[39mplot()\n", | |
| "Cell \u001b[1;32mIn[4], line 15\u001b[0m, in \u001b[0;36mCircuit.apply\u001b[1;34m(self, function)\u001b[0m\n\u001b[0;32m 13\u001b[0m curves\u001b[38;5;241m.\u001b[39mappend(function(\u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mcondition))\n\u001b[0;32m 14\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m---> 15\u001b[0m curves\u001b[38;5;241m.\u001b[39mappend(\u001b[43mcondition\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mapply\u001b[49m\u001b[43m(\u001b[49m\u001b[43mfunction\u001b[49m\u001b[43m)\u001b[49m)\n\u001b[0;32m 17\u001b[0m overall_curve \u001b[38;5;241m=\u001b[39m curves[\u001b[38;5;241m0\u001b[39m]\n\u001b[0;32m 18\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m curve \u001b[38;5;129;01min\u001b[39;00m curves[\u001b[38;5;241m1\u001b[39m:]:\n", | |
| "Cell \u001b[1;32mIn[4], line 19\u001b[0m, in \u001b[0;36mCircuit.apply\u001b[1;34m(self, function)\u001b[0m\n\u001b[0;32m 17\u001b[0m overall_curve \u001b[38;5;241m=\u001b[39m curves[\u001b[38;5;241m0\u001b[39m]\n\u001b[0;32m 18\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m curve \u001b[38;5;129;01min\u001b[39;00m curves[\u001b[38;5;241m1\u001b[39m:]:\n\u001b[1;32m---> 19\u001b[0m overall_curve \u001b[38;5;241m=\u001b[39m \u001b[43moverall_curve\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcombine\u001b[49m\u001b[43m(\u001b[49m\u001b[43mcurve\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mconnection\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 21\u001b[0m Vd \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mdiode_voltage\n\u001b[0;32m 22\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m Vd \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n", | |
| "Cell \u001b[1;32mIn[3], line 25\u001b[0m, in \u001b[0;36mIVCurve.combine\u001b[1;34m(self, other, connection)\u001b[0m\n\u001b[0;32m 20\u001b[0m isc_max \u001b[38;5;241m=\u001b[39m np\u001b[38;5;241m.\u001b[39mmaximum(np\u001b[38;5;241m.\u001b[39mmax(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mi[\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mv \u001b[38;5;241m>\u001b[39m \u001b[38;5;241m0\u001b[39m], axis\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m0\u001b[39m),\n\u001b[0;32m 21\u001b[0m np\u001b[38;5;241m.\u001b[39mmax(other\u001b[38;5;241m.\u001b[39mi[other\u001b[38;5;241m.\u001b[39mv \u001b[38;5;241m>\u001b[39m \u001b[38;5;241m0\u001b[39m], axis\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m0\u001b[39m))\n\u001b[0;32m 22\u001b[0m i \u001b[38;5;241m=\u001b[39m _balanced_linspace(np\u001b[38;5;241m.\u001b[39mminimum(np\u001b[38;5;241m.\u001b[39mmin(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mi, axis\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m0\u001b[39m), np\u001b[38;5;241m.\u001b[39mmin(other\u001b[38;5;241m.\u001b[39mi, axis\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m0\u001b[39m)),\n\u001b[0;32m 23\u001b[0m np\u001b[38;5;241m.\u001b[39mmaximum(np\u001b[38;5;241m.\u001b[39mmax(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mi, axis\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m0\u001b[39m), np\u001b[38;5;241m.\u001b[39mmax(other\u001b[38;5;241m.\u001b[39mi, axis\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m0\u001b[39m)),\n\u001b[0;32m 24\u001b[0m \u001b[38;5;241m1000\u001b[39m, pivot\u001b[38;5;241m=\u001b[39misc_max)\n\u001b[1;32m---> 25\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m IVCurve(i, \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget_voltage\u001b[49m\u001b[43m(\u001b[49m\u001b[43mi\u001b[49m\u001b[43m)\u001b[49m \u001b[38;5;241m+\u001b[39m other\u001b[38;5;241m.\u001b[39mget_voltage(i))\n\u001b[0;32m 26\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m connection \u001b[38;5;241m==\u001b[39m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mparallel\u001b[39m\u001b[38;5;124m'\u001b[39m:\n\u001b[0;32m 27\u001b[0m v \u001b[38;5;241m=\u001b[39m _balanced_linspace(np\u001b[38;5;241m.\u001b[39mminimum(np\u001b[38;5;241m.\u001b[39mmin(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mv, axis\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m0\u001b[39m), np\u001b[38;5;241m.\u001b[39mmin(other\u001b[38;5;241m.\u001b[39mv, axis\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m0\u001b[39m)),\n\u001b[0;32m 28\u001b[0m np\u001b[38;5;241m.\u001b[39mmaximum(np\u001b[38;5;241m.\u001b[39mmax(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mv, axis\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m0\u001b[39m), np\u001b[38;5;241m.\u001b[39mmax(other\u001b[38;5;241m.\u001b[39mv, axis\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m0\u001b[39m)),\n\u001b[0;32m 29\u001b[0m num\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m1000\u001b[39m, pivot\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m0\u001b[39m)\n", | |
| "Cell \u001b[1;32mIn[3], line 9\u001b[0m, in \u001b[0;36mIVCurve.get_voltage\u001b[1;34m(self, i)\u001b[0m\n\u001b[0;32m 8\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mget_voltage\u001b[39m(\u001b[38;5;28mself\u001b[39m, i):\n\u001b[1;32m----> 9\u001b[0m f_interp \u001b[38;5;241m=\u001b[39m \u001b[43minterp1d\u001b[49m\u001b[43m(\u001b[49m\u001b[43mnp\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mflipud\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mi\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mnp\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mflipud\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mv\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 10\u001b[0m \u001b[43m \u001b[49m\u001b[43mkind\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mlinear\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mfill_value\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mextrapolate\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m)\u001b[49m\n\u001b[0;32m 11\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m f_interp(i)\n", | |
| "File \u001b[1;32m~\\software\\miniconda3\\envs\\dev\\lib\\site-packages\\scipy\\interpolate\\_interpolate.py:491\u001b[0m, in \u001b[0;36minterp1d.__init__\u001b[1;34m(self, x, y, kind, axis, copy, bounds_error, fill_value, assume_sorted)\u001b[0m\n\u001b[0;32m 487\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m__init__\u001b[39m(\u001b[38;5;28mself\u001b[39m, x, y, kind\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mlinear\u001b[39m\u001b[38;5;124m'\u001b[39m, axis\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m-\u001b[39m\u001b[38;5;241m1\u001b[39m,\n\u001b[0;32m 488\u001b[0m copy\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m, bounds_error\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, fill_value\u001b[38;5;241m=\u001b[39mnp\u001b[38;5;241m.\u001b[39mnan,\n\u001b[0;32m 489\u001b[0m assume_sorted\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mFalse\u001b[39;00m):\n\u001b[0;32m 490\u001b[0m \u001b[38;5;124;03m\"\"\" Initialize a 1-D linear interpolation class.\"\"\"\u001b[39;00m\n\u001b[1;32m--> 491\u001b[0m \u001b[43m_Interpolator1D\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[38;5;21;43m__init__\u001b[39;49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mx\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43my\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43maxis\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43maxis\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 493\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mbounds_error \u001b[38;5;241m=\u001b[39m bounds_error \u001b[38;5;66;03m# used by fill_value setter\u001b[39;00m\n\u001b[0;32m 494\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mcopy \u001b[38;5;241m=\u001b[39m copy\n", | |
| "File \u001b[1;32m~\\software\\miniconda3\\envs\\dev\\lib\\site-packages\\scipy\\interpolate\\_polyint.py:56\u001b[0m, in \u001b[0;36m_Interpolator1D.__init__\u001b[1;34m(self, xi, yi, axis)\u001b[0m\n\u001b[0;32m 54\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mdtype \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[0;32m 55\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m yi \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m---> 56\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_set_yi\u001b[49m\u001b[43m(\u001b[49m\u001b[43myi\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mxi\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mxi\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43maxis\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43maxis\u001b[49m\u001b[43m)\u001b[49m\n", | |
| "File \u001b[1;32m~\\software\\miniconda3\\envs\\dev\\lib\\site-packages\\scipy\\interpolate\\_polyint.py:126\u001b[0m, in \u001b[0;36m_Interpolator1D._set_yi\u001b[1;34m(self, yi, xi, axis)\u001b[0m\n\u001b[0;32m 124\u001b[0m shape \u001b[38;5;241m=\u001b[39m (\u001b[38;5;241m1\u001b[39m,)\n\u001b[0;32m 125\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m xi \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;129;01mand\u001b[39;00m shape[axis] \u001b[38;5;241m!=\u001b[39m \u001b[38;5;28mlen\u001b[39m(xi):\n\u001b[1;32m--> 126\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mx and y arrays must be equal in length along \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m 127\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124minterpolation axis.\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m 129\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_y_axis \u001b[38;5;241m=\u001b[39m (axis \u001b[38;5;241m%\u001b[39m yi\u001b[38;5;241m.\u001b[39mndim)\n\u001b[0;32m 130\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_y_extra_shape \u001b[38;5;241m=\u001b[39m yi\u001b[38;5;241m.\u001b[39mshape[:\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_y_axis]\u001b[38;5;241m+\u001b[39myi\u001b[38;5;241m.\u001b[39mshape[\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_y_axis\u001b[38;5;241m+\u001b[39m\u001b[38;5;241m1\u001b[39m:]\n", | |
| "\u001b[1;31mValueError\u001b[0m: x and y arrays must be equal in length along interpolation axis." | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "# %% time series\n", | |
| "\n", | |
| "# doesn't work yet since interpolator can't handle a time axis\n", | |
| "\n", | |
| "cell_curve_calculator = make_cell_curve_calculator(params, use_cache=False)\n", | |
| "\n", | |
| "times = pd.date_range('2019-01-01 10:00', '2019-01-01 15:00', freq='h', tz='Etc/GMT+5')\n", | |
| "\n", | |
| "submodules = [\n", | |
| " Circuit([\n", | |
| " {'irradiance': pd.Series(1000 - np.arange(len(times))*100, index=times),\n", | |
| " 'temperature': pd.Series(25, index=times)\n", | |
| " } for i in range(24)\n", | |
| " ], connection='series', diode_voltage=0.5)\n", | |
| " for j in range(3)\n", | |
| "]\n", | |
| "\n", | |
| "module = Circuit(submodules, connection='series')\n", | |
| "\n", | |
| "curve = module.apply(cell_curve_calculator)\n", | |
| "curve.plot()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "id": "bd76971d-567a-4867-b065-37186bb316c4", | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [] | |
| } | |
| ], | |
| "metadata": { | |
| "kernelspec": { | |
| "display_name": "Python 3 (ipykernel)", | |
| "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.10.10" | |
| } | |
| }, | |
| "nbformat": 4, | |
| "nbformat_minor": 5 | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment