diff --git a/bifacialvf/bifacialvf.py b/bifacialvf/bifacialvf.py index 556d029..5dc8f54 100644 --- a/bifacialvf/bifacialvf.py +++ b/bifacialvf/bifacialvf.py @@ -355,13 +355,19 @@ def simulate(WeatherDF, meta, writefiletitle=None, tilt=0, sazm=180, noRows, noCols = WeatherDF.shape lat = meta['latitude'] lng = meta['longitude'] - tz = meta['TZ'] + if 'TZ' in meta: + tz = meta['TZ'] + if 'Time Zone' in meta: + tz = meta['Time Zone'] + meta['TZ'] = tz # TODO: Make this part of weatherfile reading/input needs - try: - name = meta['Name'] # TMY3 - except KeyError: - name = meta['city'] # EPW + if 'City' in meta: + name = meta['City'] + if 'Name' in meta: + name = meta['Name'] + if 'city' in meta: + name = meta['city'] # infer the data frequency in minutes dataInterval = (WeatherDF.index[1]-WeatherDF.index[0]).total_seconds()/60 @@ -790,13 +796,19 @@ def simulate2(WeatherDF, meta, writefiletitle=None, tilt=0, sazm=180, noRows, noCols = WeatherDF.shape lat = meta['latitude'] lng = meta['longitude'] - tz = meta['TZ'] + if 'TZ' in meta: + tz = meta['TZ'] + if 'Time Zone' in meta: + tz = meta['Time Zone'] + meta['TZ'] = tz # TODO: Make this part of weatherfile reading/input needs - try: - name = meta['Name'] # TMY3 - except KeyError: - name = meta['city'] # EPW + if 'City' in meta: + name = meta['City'] + if 'Name' in meta: + name = meta['Name'] + if 'city' in meta: + name = meta['city'] # infer the data frequency in minutes dataInterval = (WeatherDF.index[1]-WeatherDF.index[0]).total_seconds()/60 diff --git a/bifacialvf/vf.py b/bifacialvf/vf.py index afa2445..bb6528a 100644 --- a/bifacialvf/vf.py +++ b/bifacialvf/vf.py @@ -410,6 +410,115 @@ def getBackSurfaceIrradiances(rowType, maxShadow, PVbackSurface, beta, sazm, # End of GetBackSurfaceIrradiances +def divideAndAlignAlbedos(albedo, n_divisions, isOneAxisTracking, + horizontalLength, rowToRow, surface_rotation): + ''' + #(const std::vector& albedo /*-*/, size_t n_divisions /*-*/, + # bool isOneAxisTracking /*-*/, + #double horizontalLength /*m*/, double rowToRow /*m*/, double + # surface_rotation /*rad*/) + # Sil Note: size_t = 100 divisions.. + + Subdivide spatial albedos and if 1-axis tracking change reference from the + row midline to the front + ''' + + if (n_divisions % len(albedo)) == 0: + print("Functionality only works for even divisions, exiting.") + return + + # Upsample vector to n_divisions + # Sil Note: THIS IS WRONG. + albedo_aligned = [] + # C++: for (size_t i = 0; i < albedo.size(); i++) { + # for (size_t j = 0; j < n_divisions / albedo.size(); j++) { + # albedo_aligned.push_back(albedo.at(i)); + for i in range(0, len(albedo)): + for j in range(0, n_divisions / len(albedo)): + albedo_aligned.append(albedo[i]) + + if isOneAxisTracking: + # Flip the albedo array if tracking after solar noon (because the + # tilt range = [0, 90] degrees, therefore the tilt convention flips + # at solar noon) + if surface_rotation > 0: + np.reverse(albedo_aligned.begin(), albedo_aligned.end()) + #C++: reverse(albedo_aligned.begin(), albedo_aligned.end()); + + # Rotate the albedo vector so the first index is at (or overlapping) the front of the row instead of at center + L_division = rowToRow / n_divisions # length of a single albedo division + n = 0.5 * horizontalLength / L_division # fractional number of albedo + # segments between front of row and center of row + size_t leading_segments = n_divisions - np.ceil(n) # whole albedo + # segments between center of row and front of row behind + rotate(albedo_aligned.begin(), albedo_aligned.begin() + + leading_segments, albedo_aligned.end()) # move the leading + # segments to the back of the vector + + // 'Shift' the actual ground albedo locations to front of row by weighting-averaging adjacent divisions + double frac_div_extending = std::ceil(n) - n; // fraction of now first albedo division extending beyond front of row + double albedo_front_orig = albedo_aligned.front(); + for (size_t i = 0; i < n_divisions - 1; i++) { // do last segment separately + albedo_aligned.at(i) = albedo_aligned.at(i) * (1 - frac_div_extending) + albedo_aligned.at(i + 1) * frac_div_extending; + } + albedo_aligned.back() = albedo_aligned.back() * (1 - frac_div_extending) + albedo_front_orig * frac_div_extending; + } + + return albedo_aligned; +} + +def condenseAndAlignGroundIrrad(ground_irr, size_t, n_divisions, isOneAxisTraking, horizontalLength, rowToRow, surface_rotation) +#std::vector condenseAndAlignGroundIrrad(const std::vector& ground_irr /*W/m2*/, size_t n_divisions /*-*/, bool isOneAxisTracking /*-*/, +# double horizontalLength /*m*/, double rowToRow /*m*/, double surface_rotation /*rad*/) { + ''' + Condense spatial ground irradiances and if 1-axis tracking change reference from the row front to the midline + ''' + + if (len(ground_irr) % n_divisions) == 0: + print("Functionality only works for even divisions, exiting.") + return + + ground_aligned = ground_irr + + if (isOneAxisTracking) + #// Rotate the ground irradiance vector so the first index is at (or overlapping) the center of the row instead of at the midline + double L_division = rowToRow / ground_aligned.size(); # // length of a single ground division + double n = 0.5 * horizontalLength / L_division; # // fractional number of ground segments between front of row and center of row + size_t leading_segments = std::floor(n); # // whole ground segments between front of row and center of row + rotate(ground_aligned.begin(), ground_aligned.begin() + leading_segments, ground_aligned.end())# // move the leading segments to the back of the vector + + // 'Shift' the actual ground irradiance locations to center of row by weighting-averaging adjacent divisions + double frac_div_extending = n - std::floor(n); // fraction of now first ground division extending beyond center of row + double ground_front_orig = ground_aligned.front(); + for (size_t i = 0; i < ground_aligned.size() - 1; i++) { // do last segment separately + ground_aligned.at(i) = ground_aligned.at(i) * (1 - frac_div_extending) + ground_aligned.at(i + 1) * frac_div_extending; + } + ground_aligned.back() = ground_aligned.back() * (1 - frac_div_extending) + ground_front_orig * frac_div_extending; + + // Flip the ground irradiance if tracking after solar noon (because the tilt range = [0, 90] degrees, therefore the tilt convention flips at solar noon) + if (surface_rotation > 0.) { + std::reverse(ground_aligned.begin(), ground_aligned.end()); + } + } + + // Downsample vector to n_divisions + std::vector ground_condensed; + size_t num_to_avg = ground_aligned.size() / n_divisions; + size_t i = 0; + double sum = 0.; + while (i < ground_aligned.size()) { + sum += ground_aligned.at(i); + if ((i + 1) % num_to_avg == 0) { + ground_condensed.push_back(sum / num_to_avg); // add average to output + sum = 0.; + } + i++; + } + + return ground_condensed + + + def getFrontSurfaceIrradiances(rowType, maxShadow, PVfrontSurface, beta, sazm, dni, dhi, C, D, albedo, zen, azm, cellRows, pvFrontSH, frontGroundGHI): diff --git a/docs/tutorials/6s - bifacialVF Sky contributions.ipynb b/docs/tutorials/6s - bifacialVF Sky contributions.ipynb new file mode 100644 index 0000000..51e645b --- /dev/null +++ b/docs/tutorials/6s - bifacialVF Sky contributions.ipynb @@ -0,0 +1,1739 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 6* - BIFACIALvf Sky contributions\n", + "\n", + "Runs bifacialvf for a day, and compares to same day without DNI, without DHI, and without DNI no albedo, without DHI no albedo to capture the contributions of Ground Reflected vs other sources of DNI and DHI.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "testfolder = r'TEMP'\n", + "Resultsfolder = r'TEMP'\n", + "exampleflag = False\n", + "debugflag = False" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "import pandas as pd\n", + "import matplotlib.pyplot as plt\n", + "from matplotlib import style\n", + "import pvlib\n", + "import datetime\n", + "import pprint\n", + "import os" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 6.a: Run bifacialvf" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'0.1.7-dev1+32.g946cceb.dirty'" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import bifacialvf\n", + "\n", + "# Print bifacialvf Version:\n", + "bifacialvf.__version__" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "TMYtoread=os.path.join(testfolder,'SRRL_WeatherFile_TMY3_15.csv')\n", + "writefiletitle=os.path.join(Resultsfolder,'bifacialVF_Results_SRRLAlbedo_60min.csv')\n", + "\n", + "# Variables\n", + "tilt = 10 # PV tilt (deg)\n", + "sazm = 180 # PV Azimuth(deg) or tracker axis direction\n", + "albedo = None # Calculated in previous section from SRRL data. Value is 0.28 up to 11/18/19o\n", + "hub_height=1.5/2 #1.5m / 2m collector width\n", + "pitch = 2/0.35/2 # 1 / 0.35 where 0.35 is gcr --- row to row spacing in normalized panel lengths. \n", + "rowType = \"interior\" # RowType(first interior last single)\n", + "transFactor = 0 # TransmissionFactor(open area fraction)\n", + "sensorsy = 12 # sensorsy(# hor rows in panel) <--> THIS ASSUMES LANDSCAPE ORIENTATION \n", + "PVfrontSurface = \"glass\" # PVfrontSurface(glass or ARglass)\n", + "PVbackSurface = \"glass\" # PVbackSurface(glass or ARglass)\n", + "\n", + " # Calculate PV Output Through Various Methods \n", + "calculateBilInterpol = False # Only works with landscape at the moment.\n", + "calculatePVMismatch = False\n", + "portraitorlandscape='portrait' # portrait or landscape\n", + "cellsnum = 72\n", + "bififactor = 1.0\n", + "\n", + "# Tracking instructions\n", + "tracking=True\n", + "backtrack=True\n", + "limit_angle = 65\n", + "\n", + "# Using YEARLY Albedo:\n", + "myTMY3, meta = bifacialvf.bifacialvf.readInputTMY(TMYtoread)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Date (MM/DD/YYYY)Time (HH:MM)WspdDryBulbDHIDNIGHIAlb
2019-06-01 01:00:00-07:006/1/201901:002.18186711.8753330.00.1627160.00.0
2019-06-01 01:00:00-07:006/1/201901:151.49193311.6593330.00.0000000.00.0
2019-06-01 01:00:00-07:006/1/201901:301.96466711.0240000.00.5391310.00.0
2019-06-01 01:00:00-07:006/1/201901:452.12946710.6193330.00.0000000.00.0
2019-06-01 02:00:00-07:006/1/201902:001.84940010.5280000.00.0000000.00.0
\n", + "
" + ], + "text/plain": [ + " Date (MM/DD/YYYY) Time (HH:MM) Wspd DryBulb \\\n", + "2019-06-01 01:00:00-07:00 6/1/2019 01:00 2.181867 11.875333 \n", + "2019-06-01 01:00:00-07:00 6/1/2019 01:15 1.491933 11.659333 \n", + "2019-06-01 01:00:00-07:00 6/1/2019 01:30 1.964667 11.024000 \n", + "2019-06-01 01:00:00-07:00 6/1/2019 01:45 2.129467 10.619333 \n", + "2019-06-01 02:00:00-07:00 6/1/2019 02:00 1.849400 10.528000 \n", + "\n", + " DHI DNI GHI Alb \n", + "2019-06-01 01:00:00-07:00 0.0 0.162716 0.0 0.0 \n", + "2019-06-01 01:00:00-07:00 0.0 0.000000 0.0 0.0 \n", + "2019-06-01 01:00:00-07:00 0.0 0.539131 0.0 0.0 \n", + "2019-06-01 01:00:00-07:00 0.0 0.000000 0.0 0.0 \n", + "2019-06-01 02:00:00-07:00 0.0 0.000000 0.0 0.0 " + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "myTMY3.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [], + "source": [ + "myTMY3, meta = bifacialvf.bifacialvf.fixintervalTMY(myTMY3,meta)" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Date (MM/DD/YYYY)Time (HH:MM)WspdDryBulbDHIDNIGHIAlb
Datetime
2019-06-01 01:00:00-07:006/1/201901:002.18186711.8753330.00.1627160.00.0
2019-06-01 01:15:00-07:006/1/201901:151.49193311.6593330.00.0000000.00.0
2019-06-01 01:30:00-07:006/1/201901:301.96466711.0240000.00.5391310.00.0
2019-06-01 01:45:00-07:006/1/201901:452.12946710.6193330.00.0000000.00.0
2019-06-01 02:00:00-07:006/1/201902:001.84940010.5280000.00.0000000.00.0
\n", + "
" + ], + "text/plain": [ + " Date (MM/DD/YYYY) Time (HH:MM) Wspd DryBulb \\\n", + "Datetime \n", + "2019-06-01 01:00:00-07:00 6/1/2019 01:00 2.181867 11.875333 \n", + "2019-06-01 01:15:00-07:00 6/1/2019 01:15 1.491933 11.659333 \n", + "2019-06-01 01:30:00-07:00 6/1/2019 01:30 1.964667 11.024000 \n", + "2019-06-01 01:45:00-07:00 6/1/2019 01:45 2.129467 10.619333 \n", + "2019-06-01 02:00:00-07:00 6/1/2019 02:00 1.849400 10.528000 \n", + "\n", + " DHI DNI GHI Alb \n", + "Datetime \n", + "2019-06-01 01:00:00-07:00 0.0 0.162716 0.0 0.0 \n", + "2019-06-01 01:15:00-07:00 0.0 0.000000 0.0 0.0 \n", + "2019-06-01 01:30:00-07:00 0.0 0.539131 0.0 0.0 \n", + "2019-06-01 01:45:00-07:00 0.0 0.000000 0.0 0.0 \n", + "2019-06-01 02:00:00-07:00 0.0 0.000000 0.0 0.0 " + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "myTMY3.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Date (MM/DD/YYYY)Time (HH:MM)WspdDryBulbDHIDNIGHIAlb
Datetime
2020-02-02 01:00:00-07:002/2/202001:001.8852009.7926670.0000000.0000000.0000000.000000
2020-02-02 01:15:00-07:002/2/202001:152.15606710.3533330.0000000.0000000.0000000.000000
2020-02-02 01:30:00-07:002/2/202001:302.0977339.6566670.0000000.0000000.0000000.000000
2020-02-02 01:45:00-07:002/2/202001:452.1536679.1080000.0000000.0000000.0000000.000000
2020-02-02 02:00:00-07:002/2/202002:002.3710678.9540000.0000000.0000000.0000000.000000
2020-02-02 02:15:00-07:002/2/202002:152.2119339.1860000.0000000.0000000.0000000.000000
2020-02-02 02:30:00-07:002/2/202002:301.8702009.3853330.0000000.0000000.0000000.000000
2020-02-02 02:45:00-07:002/2/202002:452.0028009.7780000.0000000.0000000.0000000.000000
2020-02-02 03:00:00-07:002/2/202003:001.8044008.9946670.0000000.0000000.0000000.000000
2020-02-02 03:15:00-07:002/2/202003:151.5203339.3860000.0000000.0000000.0000000.000000
2020-02-02 03:30:00-07:002/2/202003:301.8110009.2253330.0000000.0000000.0000000.000000
2020-02-02 03:45:00-07:002/2/202003:452.3644679.3066670.0000000.0000000.0000000.000000
2020-02-02 04:00:00-07:002/2/202004:002.4553338.7846670.0000000.0000000.0000000.000000
2020-02-02 04:15:00-07:002/2/202004:152.3427339.3786670.0000000.0000000.0000000.000000
2020-02-02 04:30:00-07:002/2/202004:302.6286009.1000000.0000000.0000000.0000000.000000
2020-02-02 04:45:00-07:002/2/202004:452.53520010.0020000.0000000.0000000.0000000.000000
2020-02-02 05:00:00-07:002/2/202005:003.35526711.3826670.1619970.0000000.0000000.000000
2020-02-02 05:15:00-07:002/2/202005:153.12020012.0566670.0331670.0000000.0000000.000000
2020-02-02 05:30:00-07:002/2/202005:302.55773312.2853330.0000000.0000000.0000000.000000
2020-02-02 05:45:00-07:002/2/202005:452.66613311.5993330.0000000.0000000.0000000.000000
2020-02-02 06:00:00-07:002/2/202006:002.39360011.5420000.0000000.0000000.0000000.000000
2020-02-02 06:15:00-07:002/2/202006:152.56193311.8100000.0000000.0000000.0000000.000000
2020-02-02 06:30:00-07:002/2/202006:302.18966711.9246670.0000000.0000000.0000000.000000
2020-02-02 06:45:00-07:002/2/202006:452.24433311.8820000.9357250.0000000.0000000.000000
2020-02-02 07:00:00-07:002/2/202007:002.02240011.8113336.07408129.4181794.9223960.000000
2020-02-02 07:15:00-07:002/2/202007:152.56606711.91866713.555130340.19706726.5864400.329060
2020-02-02 07:30:00-07:002/2/202007:302.72086712.42066721.218840313.83785343.2360400.350993
2020-02-02 07:45:00-07:002/2/202007:453.07266712.87400028.246820612.300400100.2502870.336713
2020-02-02 08:00:00-07:002/2/202008:003.15853313.40866732.861320719.699333146.7897330.287513
2020-02-02 08:15:00-07:002/2/202008:151.20340013.78533336.493793784.711800192.7249330.255233
...........................
2020-02-02 16:30:00-07:002/2/202016:302.30186719.60200026.577380643.769200100.9363800.263747
2020-02-02 16:45:00-07:002/2/202016:452.16433318.79066719.807187333.81023946.7588530.137593
2020-02-02 17:00:00-07:002/2/202017:001.84686717.51133311.7082530.58381910.7656610.000000
2020-02-02 17:15:00-07:002/2/202017:151.56513316.6660004.5732690.3729173.7048290.000000
2020-02-02 17:30:00-07:002/2/202017:301.31513316.0640000.5013340.1511920.0000000.000000
2020-02-02 17:45:00-07:002/2/202017:450.73300015.0973330.0000000.0848500.0000000.000000
2020-02-02 18:00:00-07:002/2/202018:000.91313314.2886670.0000000.1061490.0000000.000000
2020-02-02 18:15:00-07:002/2/202018:151.10386713.5393330.0000000.0087290.0000000.000000
2020-02-02 18:30:00-07:002/2/202018:301.08786713.1353330.0000000.0000000.0000000.000000
2020-02-02 18:45:00-07:002/2/202018:451.38493312.8926670.0000000.0000000.0000000.000000
2020-02-02 19:00:00-07:002/2/202019:001.42753312.4706670.0000000.0000000.0000000.000000
2020-02-02 19:15:00-07:002/2/202019:151.13126712.3253330.0000000.0000000.0000000.000000
2020-02-02 19:30:00-07:002/2/202019:301.25720012.3693330.0000000.0000000.0000000.000000
2020-02-02 19:45:00-07:002/2/202019:451.20266711.9860000.0000000.0000000.0000000.000000
2020-02-02 20:00:00-07:002/2/202020:001.51326711.6786670.0000000.0000000.0000000.000000
2020-02-02 20:15:00-07:002/2/202020:151.49160012.1626670.0000000.0000000.0000000.000000
2020-02-02 20:30:00-07:002/2/202020:302.03440011.8873330.0000000.0000000.0000000.000000
2020-02-02 20:45:00-07:002/2/202020:452.22106711.3726670.0000000.0000000.0000000.000000
2020-02-02 21:00:00-07:002/2/202021:001.72020011.9380000.0000000.0000000.0000000.000000
2020-02-02 21:15:00-07:002/2/202021:152.70680011.7860000.0000000.0000000.0000000.000000
2020-02-02 21:30:00-07:002/2/202021:306.6308006.4645330.0000003.2410510.0000000.000000
2020-02-02 21:45:00-07:002/2/202021:455.5140002.9261330.0000001.1938310.0000000.000000
2020-02-02 22:00:00-07:002/2/202022:003.1427332.3619330.0000000.2789900.0000000.000000
2020-02-02 22:15:00-07:002/2/202022:153.4467332.1580670.0000000.1333850.0000000.000000
2020-02-02 22:30:00-07:002/2/202022:303.5584671.7006670.0000000.1801750.0000000.000000
2020-02-02 22:45:00-07:002/2/202022:454.0234001.2540000.0000000.2304570.0000000.000000
2020-02-02 23:00:00-07:002/2/202023:003.7432670.2826670.0000000.4218050.0000000.000000
2020-02-02 23:15:00-07:002/2/202023:153.148600-0.5593330.0000000.3826960.0000000.000000
2020-02-02 23:30:00-07:002/2/202023:302.792800-1.0050670.0000000.2028710.0000000.000000
2020-02-02 23:45:00-07:002/2/202023:453.824933-1.0770000.0039600.0000000.0000000.000000
\n", + "

92 rows × 8 columns

\n", + "
" + ], + "text/plain": [ + " Date (MM/DD/YYYY) Time (HH:MM) Wspd DryBulb \\\n", + "Datetime \n", + "2020-02-02 01:00:00-07:00 2/2/2020 01:00 1.885200 9.792667 \n", + "2020-02-02 01:15:00-07:00 2/2/2020 01:15 2.156067 10.353333 \n", + "2020-02-02 01:30:00-07:00 2/2/2020 01:30 2.097733 9.656667 \n", + "2020-02-02 01:45:00-07:00 2/2/2020 01:45 2.153667 9.108000 \n", + "2020-02-02 02:00:00-07:00 2/2/2020 02:00 2.371067 8.954000 \n", + "2020-02-02 02:15:00-07:00 2/2/2020 02:15 2.211933 9.186000 \n", + "2020-02-02 02:30:00-07:00 2/2/2020 02:30 1.870200 9.385333 \n", + "2020-02-02 02:45:00-07:00 2/2/2020 02:45 2.002800 9.778000 \n", + "2020-02-02 03:00:00-07:00 2/2/2020 03:00 1.804400 8.994667 \n", + "2020-02-02 03:15:00-07:00 2/2/2020 03:15 1.520333 9.386000 \n", + "2020-02-02 03:30:00-07:00 2/2/2020 03:30 1.811000 9.225333 \n", + "2020-02-02 03:45:00-07:00 2/2/2020 03:45 2.364467 9.306667 \n", + "2020-02-02 04:00:00-07:00 2/2/2020 04:00 2.455333 8.784667 \n", + "2020-02-02 04:15:00-07:00 2/2/2020 04:15 2.342733 9.378667 \n", + "2020-02-02 04:30:00-07:00 2/2/2020 04:30 2.628600 9.100000 \n", + "2020-02-02 04:45:00-07:00 2/2/2020 04:45 2.535200 10.002000 \n", + "2020-02-02 05:00:00-07:00 2/2/2020 05:00 3.355267 11.382667 \n", + "2020-02-02 05:15:00-07:00 2/2/2020 05:15 3.120200 12.056667 \n", + "2020-02-02 05:30:00-07:00 2/2/2020 05:30 2.557733 12.285333 \n", + "2020-02-02 05:45:00-07:00 2/2/2020 05:45 2.666133 11.599333 \n", + "2020-02-02 06:00:00-07:00 2/2/2020 06:00 2.393600 11.542000 \n", + "2020-02-02 06:15:00-07:00 2/2/2020 06:15 2.561933 11.810000 \n", + "2020-02-02 06:30:00-07:00 2/2/2020 06:30 2.189667 11.924667 \n", + "2020-02-02 06:45:00-07:00 2/2/2020 06:45 2.244333 11.882000 \n", + "2020-02-02 07:00:00-07:00 2/2/2020 07:00 2.022400 11.811333 \n", + "2020-02-02 07:15:00-07:00 2/2/2020 07:15 2.566067 11.918667 \n", + "2020-02-02 07:30:00-07:00 2/2/2020 07:30 2.720867 12.420667 \n", + "2020-02-02 07:45:00-07:00 2/2/2020 07:45 3.072667 12.874000 \n", + "2020-02-02 08:00:00-07:00 2/2/2020 08:00 3.158533 13.408667 \n", + "2020-02-02 08:15:00-07:00 2/2/2020 08:15 1.203400 13.785333 \n", + "... ... ... ... ... \n", + "2020-02-02 16:30:00-07:00 2/2/2020 16:30 2.301867 19.602000 \n", + "2020-02-02 16:45:00-07:00 2/2/2020 16:45 2.164333 18.790667 \n", + "2020-02-02 17:00:00-07:00 2/2/2020 17:00 1.846867 17.511333 \n", + "2020-02-02 17:15:00-07:00 2/2/2020 17:15 1.565133 16.666000 \n", + "2020-02-02 17:30:00-07:00 2/2/2020 17:30 1.315133 16.064000 \n", + "2020-02-02 17:45:00-07:00 2/2/2020 17:45 0.733000 15.097333 \n", + "2020-02-02 18:00:00-07:00 2/2/2020 18:00 0.913133 14.288667 \n", + "2020-02-02 18:15:00-07:00 2/2/2020 18:15 1.103867 13.539333 \n", + "2020-02-02 18:30:00-07:00 2/2/2020 18:30 1.087867 13.135333 \n", + "2020-02-02 18:45:00-07:00 2/2/2020 18:45 1.384933 12.892667 \n", + "2020-02-02 19:00:00-07:00 2/2/2020 19:00 1.427533 12.470667 \n", + "2020-02-02 19:15:00-07:00 2/2/2020 19:15 1.131267 12.325333 \n", + "2020-02-02 19:30:00-07:00 2/2/2020 19:30 1.257200 12.369333 \n", + "2020-02-02 19:45:00-07:00 2/2/2020 19:45 1.202667 11.986000 \n", + "2020-02-02 20:00:00-07:00 2/2/2020 20:00 1.513267 11.678667 \n", + "2020-02-02 20:15:00-07:00 2/2/2020 20:15 1.491600 12.162667 \n", + "2020-02-02 20:30:00-07:00 2/2/2020 20:30 2.034400 11.887333 \n", + "2020-02-02 20:45:00-07:00 2/2/2020 20:45 2.221067 11.372667 \n", + "2020-02-02 21:00:00-07:00 2/2/2020 21:00 1.720200 11.938000 \n", + "2020-02-02 21:15:00-07:00 2/2/2020 21:15 2.706800 11.786000 \n", + "2020-02-02 21:30:00-07:00 2/2/2020 21:30 6.630800 6.464533 \n", + "2020-02-02 21:45:00-07:00 2/2/2020 21:45 5.514000 2.926133 \n", + "2020-02-02 22:00:00-07:00 2/2/2020 22:00 3.142733 2.361933 \n", + "2020-02-02 22:15:00-07:00 2/2/2020 22:15 3.446733 2.158067 \n", + "2020-02-02 22:30:00-07:00 2/2/2020 22:30 3.558467 1.700667 \n", + "2020-02-02 22:45:00-07:00 2/2/2020 22:45 4.023400 1.254000 \n", + "2020-02-02 23:00:00-07:00 2/2/2020 23:00 3.743267 0.282667 \n", + "2020-02-02 23:15:00-07:00 2/2/2020 23:15 3.148600 -0.559333 \n", + "2020-02-02 23:30:00-07:00 2/2/2020 23:30 2.792800 -1.005067 \n", + "2020-02-02 23:45:00-07:00 2/2/2020 23:45 3.824933 -1.077000 \n", + "\n", + " DHI DNI GHI Alb \n", + "Datetime \n", + "2020-02-02 01:00:00-07:00 0.000000 0.000000 0.000000 0.000000 \n", + "2020-02-02 01:15:00-07:00 0.000000 0.000000 0.000000 0.000000 \n", + "2020-02-02 01:30:00-07:00 0.000000 0.000000 0.000000 0.000000 \n", + "2020-02-02 01:45:00-07:00 0.000000 0.000000 0.000000 0.000000 \n", + "2020-02-02 02:00:00-07:00 0.000000 0.000000 0.000000 0.000000 \n", + "2020-02-02 02:15:00-07:00 0.000000 0.000000 0.000000 0.000000 \n", + "2020-02-02 02:30:00-07:00 0.000000 0.000000 0.000000 0.000000 \n", + "2020-02-02 02:45:00-07:00 0.000000 0.000000 0.000000 0.000000 \n", + "2020-02-02 03:00:00-07:00 0.000000 0.000000 0.000000 0.000000 \n", + "2020-02-02 03:15:00-07:00 0.000000 0.000000 0.000000 0.000000 \n", + "2020-02-02 03:30:00-07:00 0.000000 0.000000 0.000000 0.000000 \n", + "2020-02-02 03:45:00-07:00 0.000000 0.000000 0.000000 0.000000 \n", + "2020-02-02 04:00:00-07:00 0.000000 0.000000 0.000000 0.000000 \n", + "2020-02-02 04:15:00-07:00 0.000000 0.000000 0.000000 0.000000 \n", + "2020-02-02 04:30:00-07:00 0.000000 0.000000 0.000000 0.000000 \n", + "2020-02-02 04:45:00-07:00 0.000000 0.000000 0.000000 0.000000 \n", + "2020-02-02 05:00:00-07:00 0.161997 0.000000 0.000000 0.000000 \n", + "2020-02-02 05:15:00-07:00 0.033167 0.000000 0.000000 0.000000 \n", + "2020-02-02 05:30:00-07:00 0.000000 0.000000 0.000000 0.000000 \n", + "2020-02-02 05:45:00-07:00 0.000000 0.000000 0.000000 0.000000 \n", + "2020-02-02 06:00:00-07:00 0.000000 0.000000 0.000000 0.000000 \n", + "2020-02-02 06:15:00-07:00 0.000000 0.000000 0.000000 0.000000 \n", + "2020-02-02 06:30:00-07:00 0.000000 0.000000 0.000000 0.000000 \n", + "2020-02-02 06:45:00-07:00 0.935725 0.000000 0.000000 0.000000 \n", + "2020-02-02 07:00:00-07:00 6.074081 29.418179 4.922396 0.000000 \n", + "2020-02-02 07:15:00-07:00 13.555130 340.197067 26.586440 0.329060 \n", + "2020-02-02 07:30:00-07:00 21.218840 313.837853 43.236040 0.350993 \n", + "2020-02-02 07:45:00-07:00 28.246820 612.300400 100.250287 0.336713 \n", + "2020-02-02 08:00:00-07:00 32.861320 719.699333 146.789733 0.287513 \n", + "2020-02-02 08:15:00-07:00 36.493793 784.711800 192.724933 0.255233 \n", + "... ... ... ... ... \n", + "2020-02-02 16:30:00-07:00 26.577380 643.769200 100.936380 0.263747 \n", + "2020-02-02 16:45:00-07:00 19.807187 333.810239 46.758853 0.137593 \n", + "2020-02-02 17:00:00-07:00 11.708253 0.583819 10.765661 0.000000 \n", + "2020-02-02 17:15:00-07:00 4.573269 0.372917 3.704829 0.000000 \n", + "2020-02-02 17:30:00-07:00 0.501334 0.151192 0.000000 0.000000 \n", + "2020-02-02 17:45:00-07:00 0.000000 0.084850 0.000000 0.000000 \n", + "2020-02-02 18:00:00-07:00 0.000000 0.106149 0.000000 0.000000 \n", + "2020-02-02 18:15:00-07:00 0.000000 0.008729 0.000000 0.000000 \n", + "2020-02-02 18:30:00-07:00 0.000000 0.000000 0.000000 0.000000 \n", + "2020-02-02 18:45:00-07:00 0.000000 0.000000 0.000000 0.000000 \n", + "2020-02-02 19:00:00-07:00 0.000000 0.000000 0.000000 0.000000 \n", + "2020-02-02 19:15:00-07:00 0.000000 0.000000 0.000000 0.000000 \n", + "2020-02-02 19:30:00-07:00 0.000000 0.000000 0.000000 0.000000 \n", + "2020-02-02 19:45:00-07:00 0.000000 0.000000 0.000000 0.000000 \n", + "2020-02-02 20:00:00-07:00 0.000000 0.000000 0.000000 0.000000 \n", + "2020-02-02 20:15:00-07:00 0.000000 0.000000 0.000000 0.000000 \n", + "2020-02-02 20:30:00-07:00 0.000000 0.000000 0.000000 0.000000 \n", + "2020-02-02 20:45:00-07:00 0.000000 0.000000 0.000000 0.000000 \n", + "2020-02-02 21:00:00-07:00 0.000000 0.000000 0.000000 0.000000 \n", + "2020-02-02 21:15:00-07:00 0.000000 0.000000 0.000000 0.000000 \n", + "2020-02-02 21:30:00-07:00 0.000000 3.241051 0.000000 0.000000 \n", + "2020-02-02 21:45:00-07:00 0.000000 1.193831 0.000000 0.000000 \n", + "2020-02-02 22:00:00-07:00 0.000000 0.278990 0.000000 0.000000 \n", + "2020-02-02 22:15:00-07:00 0.000000 0.133385 0.000000 0.000000 \n", + "2020-02-02 22:30:00-07:00 0.000000 0.180175 0.000000 0.000000 \n", + "2020-02-02 22:45:00-07:00 0.000000 0.230457 0.000000 0.000000 \n", + "2020-02-02 23:00:00-07:00 0.000000 0.421805 0.000000 0.000000 \n", + "2020-02-02 23:15:00-07:00 0.000000 0.382696 0.000000 0.000000 \n", + "2020-02-02 23:30:00-07:00 0.000000 0.202871 0.000000 0.000000 \n", + "2020-02-02 23:45:00-07:00 0.003960 0.000000 0.000000 0.000000 \n", + "\n", + "[92 rows x 8 columns]" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "filterdates = (myTMY3.index >= '2020-02-02 0:0:0 -7') & (myTMY3.index < '2020-02-03 0:0:0 -7')\n", + "myTMY3[filterdates]" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Interval in weather data is less than 1 hr, calculating Sun position with a delta of - 7\n", + "If you want no delta for sunposition, run simulation with input variable deltastyle='exact'\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "c:\\users\\sayala\\documents\\github\\bifacialvf\\bifacialvf\\bifacialvf.py:187: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", + " myTMY3['zenith'] = np.radians(solpos['zenith'])\n", + "c:\\users\\sayala\\documents\\github\\bifacialvf\\bifacialvf\\bifacialvf.py:188: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", + " myTMY3['azimuth'] = np.radians(solpos['azimuth'])\n", + "c:\\users\\sayala\\documents\\github\\bifacialvf\\bifacialvf\\bifacialvf.py:189: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", + " myTMY3['elevation']=np.radians(solpos['elevation'])\n", + "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\pvlib\\tracking.py:556: RuntimeWarning: invalid value encountered in remainder\n", + " surface_azimuth = surface_azimuth % 360\n", + "c:\\users\\sayala\\documents\\github\\bifacialvf\\bifacialvf\\bifacialvf.py:202: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", + " myTMY3['trackingdata_surface_tilt'] = trackingdata['surface_tilt']\n", + "c:\\users\\sayala\\documents\\github\\bifacialvf\\bifacialvf\\bifacialvf.py:203: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", + " myTMY3['trackingdata_surface_azimuth'] = trackingdata['surface_azimuth']\n", + "c:\\users\\sayala\\documents\\github\\bifacialvf\\bifacialvf\\bifacialvf.py:205: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", + " [myTMY3['C'], myTMY3['D']] = trackingBFvaluescalculator(myTMY3['trackingdata_surface_tilt'], hub_height, pitch)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Using albedo from TMY3 file.\n", + "Note that at the moment, no validation check is done in the albedo data, so we assume it's correct and valid.\n", + "\n", + " \n", + "********* \n", + "Running Simulation for TMY3: \n", + "Location: DENVER/CENTENNIAL [GOLDEN - NREL]\n", + "Lat: 39.742 Long: -105.179 Tz -7.0\n", + "Parameters: tilt: 0 Sazm: 180 Hub_Height : 0.75 Pitch: 2.857142857142857 Row type: interior Albedo: None\n", + "Saving into BEST_Sam_PVsyst_BR_BVF_Results\\bifacialVF_02_02.csv\n", + " \n", + " \n", + "Distance between rows for no shading on Dec 21 at 9 am solar time = 0.0\n", + "Actual distance between rows = 1.8571428571428572\n", + " \n", + " ***** IMPORTANT --> THIS SIMULATION Has Tracking Activated\n", + "Backtracking Option is set to: True\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 92/92 [00:01<00:00, 48.17it/s] \n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Finished\n" + ] + } + ], + "source": [ + "writefiletitle=os.path.join(Resultsfolder,'bifacialVF_02_02.csv')\n", + "\n", + "bifacialvf.simulate(myTMY3[filterdates], meta, writefiletitle=writefiletitle, \n", + " tilt=tilt, sazm=sazm, pitch=pitch, hub_height=hub_height, \n", + " rowType=rowType, transFactor=transFactor, sensorsy=sensorsy, \n", + " PVfrontSurface=PVfrontSurface, PVbackSurface=PVbackSurface, \n", + " albedo=albedo, tracking=tracking, backtrack=backtrack, \n", + " limit_angle=limit_angle, calculatePVMismatch=calculatePVMismatch,\n", + " cellsnum = cellsnum, bififactor=bififactor,\n", + " calculateBilInterpol=calculateBilInterpol,\n", + " portraitorlandscape=portraitorlandscape)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [], + "source": [ + "noDNI = myTMY3[filterdates].copy()\n", + "noDNI['DNI'] = 0" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "noDNI.iloc[40:50]" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": {}, + "outputs": [], + "source": [ + "noDHI = myTMY3[filterdates].copy()\n", + "noDHI['DHI'] = 0" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": {}, + "outputs": [], + "source": [ + "noDNInoAlb = myTMY3[filterdates].copy()\n", + "noDNInoAlb['DNI'] = 0\n", + "noDNInoAlb['Alb'] = 0.00000000000001\n" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": {}, + "outputs": [], + "source": [ + "noDHInoAlb = myTMY3[filterdates].copy()\n", + "noDHInoAlb['DHI'] = 0\n", + "noDHInoAlb['Alb'] = 0.00000000000001\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Interval in weather data is less than 1 hr, calculating Sun position with a delta of - 7\n", + "If you want no delta for sunposition, run simulation with input variable deltastyle='exact'\n", + "Using albedo from TMY3 file.\n", + "Note that at the moment, no validation check is done in the albedo data, so we assume it's correct and valid.\n", + "\n", + " \n", + "********* \n", + "Running Simulation for TMY3: \n", + "Location: DENVER/CENTENNIAL [GOLDEN - NREL]\n", + "Lat: 39.742 Long: -105.179 Tz -7.0\n", + "Parameters: tilt: 0 Sazm: 180 Hub_Height : 0.75 Pitch: 2.857142857142857 Row type: interior Albedo: None\n", + "Saving into bifacialVF_02_02_noDNI.csv\n", + " \n", + " \n", + "Distance between rows for no shading on Dec 21 at 9 am solar time = 0.0\n", + "Actual distance between rows = 1.8571428571428572\n", + " \n", + " ***** IMPORTANT --> THIS SIMULATION Has Tracking Activated\n", + "Backtracking Option is set to: True\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 92/92 [00:02<00:00, 37.59it/s] \n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Finished\n", + "Interval in weather data is less than 1 hr, calculating Sun position with a delta of - 7\n", + "If you want no delta for sunposition, run simulation with input variable deltastyle='exact'\n", + "Using albedo from TMY3 file.\n", + "Note that at the moment, no validation check is done in the albedo data, so we assume it's correct and valid.\n", + "\n", + " \n", + "********* \n", + "Running Simulation for TMY3: \n", + "Location: DENVER/CENTENNIAL [GOLDEN - NREL]\n", + "Lat: 39.742 Long: -105.179 Tz -7.0\n", + "Parameters: tilt: 0 Sazm: 180 Hub_Height : 0.75 Pitch: 2.857142857142857 Row type: interior Albedo: None\n", + "Saving into bifacialVF_02_02_noDHI.csv\n", + " \n", + " \n", + "Distance between rows for no shading on Dec 21 at 9 am solar time = 0.0\n", + "Actual distance between rows = 1.8571428571428572\n", + " \n", + " ***** IMPORTANT --> THIS SIMULATION Has Tracking Activated\n", + "Backtracking Option is set to: True\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 92/92 [00:01<00:00, 48.42it/s] \n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Finished\n", + "Interval in weather data is less than 1 hr, calculating Sun position with a delta of - 7\n", + "If you want no delta for sunposition, run simulation with input variable deltastyle='exact'\n", + "Using albedo from TMY3 file.\n", + "Note that at the moment, no validation check is done in the albedo data, so we assume it's correct and valid.\n", + "\n", + " \n", + "********* \n", + "Running Simulation for TMY3: \n", + "Location: DENVER/CENTENNIAL [GOLDEN - NREL]\n", + "Lat: 39.742 Long: -105.179 Tz -7.0\n", + "Parameters: tilt: 0 Sazm: 180 Hub_Height : 0.75 Pitch: 2.857142857142857 Row type: interior Albedo: None\n", + "Saving into bifacialVF_02_02_noDNInoAlb.csv\n", + " \n", + " \n", + "Distance between rows for no shading on Dec 21 at 9 am solar time = 0.0\n", + "Actual distance between rows = 1.8571428571428572\n", + " \n", + " ***** IMPORTANT --> THIS SIMULATION Has Tracking Activated\n", + "Backtracking Option is set to: True\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 92/92 [00:01<00:00, 46.74it/s] \n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Finished\n", + "Using albedo from TMY3 file.\n", + "Note that at the moment, no validation check is done in the albedo data, so we assume it's correct and valid.\n", + "\n", + " \n", + "********* \n", + "Running Simulation for TMY3: \n", + "Location: DENVER/CENTENNIAL [GOLDEN - NREL]\n", + "Lat: 39.742 Long: -105.179 Tz -7.0\n", + "Parameters: tilt: 0 Sazm: 180 Hub_Height : 0.75 Pitch: 2.857142857142857 Row type: interior Albedo: None\n", + "Saving into bifacialVF_02_02_noDHInoAlb.csv\n", + " \n", + " \n", + "Distance between rows for no shading on Dec 21 at 9 am solar time = 0.0\n", + "Actual distance between rows = 1.8571428571428572\n", + " \n", + " ***** IMPORTANT --> THIS SIMULATION Has Tracking Activated\n", + "Backtracking Option is set to: True\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 92/92 [00:02<00:00, 44.56it/s] \n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Finished\n" + ] + } + ], + "source": [ + "cases = [noDNI, noDHI, noDNInoAlb, noDHInoAlb]\n", + "titles = ['noDNI', 'noDHI', 'noDNInoAlb', 'noDHInoAlb']\n", + "\n", + "for i in range (0, len(cases)):\n", + " title = 'bifacialVF_02_02_'+titles[i]+'.csv'\n", + " case = cases[i]\n", + " \n", + " writefiletitle=os.path.join(Resultsfolder, title)\n", + "\n", + " bifacialvf.simulate(case, meta, writefiletitle=title, \n", + " tilt=tilt, sazm=sazm, pitch=pitch, hub_height=hub_height, \n", + " rowType=rowType, transFactor=transFactor, sensorsy=sensorsy, \n", + " PVfrontSurface=PVfrontSurface, PVbackSurface=PVbackSurface, \n", + " albedo=albedo, tracking=tracking, backtrack=backtrack, \n", + " limit_angle=limit_angle, calculatePVMismatch=calculatePVMismatch,\n", + " cellsnum = cellsnum, bififactor=bififactor,\n", + " calculateBilInterpol=calculateBilInterpol,\n", + " portraitorlandscape=portraitorlandscape)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 65, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:15: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame\n", + "\n", + "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", + " from ipykernel import kernelapp as app\n" + ] + } + ], + "source": [ + "# ANALYSE DATA\n", + "\n", + "titles = ['','_noDNI', '_noDHI', '_noDNInoAlb', '_noDHInoAlb']\n", + "\n", + "compiled_RearIrrad = []\n", + "\n", + "for i in range (0, len(titles)):\n", + " title = 'bifacialVF_02_02'+titles[i]+'.csv'\n", + " writefiletitle=os.path.join(Resultsfolder, title)\n", + " \n", + " data, meta = bifacialvf.loadVFresults(writefiletitle)\n", + " \n", + " filterAzm = (data['sazm'] == 270)\n", + " data['fixed_RowBackGTI_1'] = data['No_1_RowBackGTI'] \n", + " data['fixed_RowBackGTI_1'][filterAzm] = data['No_12_RowBackGTI'][filterAzm]\n", + " compiled_RearIrrad.append(data['fixed_RowBackGTI_1'].sum())\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 72, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[1460.4823156355387,\n", + " 310.6296315947487,\n", + " 1081.8597617385333,\n", + " 112.7044215585174,\n", + " 4.943156949814155e-11]" + ] + }, + "execution_count": 72, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "compiled_RearIrrad" + ] + }, + { + "cell_type": "code", + "execution_count": 88, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Full simulation rear irradiance 1460.4823156355387\n", + "Dni + DHI modeled separately 1392.489393333282\n", + "% from original 95.34448849025131\n" + ] + } + ], + "source": [ + "print(\"Full simulation rear irradiance\", compiled_RearIrrad[0])\n", + "print(\"Dni + DHI modeled separately\", compiled_RearIrrad[1]+compiled_RearIrrad[2])\n", + "print(\"% from original\", (compiled_RearIrrad[1]+compiled_RearIrrad[2])*100/compiled_RearIrrad[0])" + ] + }, + { + "cell_type": "code", + "execution_count": 89, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1392.489393333282" + ] + }, + "execution_count": 89, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#labels = 'noDNI', 'noDHI', '_noDNInoAlb', '_noDHInoAlb'\n", + "# labels aka DHI DNI DHI other sources DNI other sources\n", + "DHIonly = compiled_RearIrrad[1] \n", + "DNIonly = compiled_RearIrrad[2]\n", + "DHIotherSources = compiled_RearIrrad[3] \n", + "DNIotherSources = compiled_RearIrrad[4] \n", + "ground_reflected_DHI = DHIonly-DHIotherSources\n", + "ground_reflected_DNI = DNIonly - DNIotherSources\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 90, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYYAAADpCAYAAAAgVZDeAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjAsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+17YcXAAAgAElEQVR4nO3deXxcVd3H8c9vksnSNumSNN3SNIWWzgUHKFAWyw6yKMiqiCCgPCq7CD5YBQQ3FAFRAQVEnkZkE5S1YsvSskOBUgrtnS50T/c1aZo95/nj3rRJmyaTZXLmzvzer1dendy5y3eSdH5z7j3nXDHGoJRSSjUL2Q6glFIquWhhUEop1YoWBqWUUq1oYVBKKdWKFgallFKtaGFQSinVihYGpZRSrWhh6AEi0igis0Vkroh8IiLXiUjIf+5YEXlxl/Uni8i5/uMZInLIHvb7tIjs1cGxf9ricamIfNb9V5T8ROROETnedg6lUpEWhp5RbYw50BizH/Al4MvALd3ZoYjsB2QYYxZ3sOpPO3i+M8fM7Kl99cIx7gEm9dC+lFItaGHoYcaYdcD3gKtERLqxqwuA55q/EZHzReRTEflMRG73l/0WyPVbK4/6q2aIyF/91ss0Ecn1191bRP4rIh+JyJsiEvGXTxaR34vIdOD2lgFEZD8Rmenvf46IjPWXX+fn+ExErvWXtWqtiMiPRORW//EMEblNRF4HfiAiQ0TkGb919YmIfNFf78IWx3tARDL8r8n+sT4VkR/6P+dlQIGIDO3Gz1gp1YaEf0JMR8aYxf6ppCJ/0VEiMrvFKiXAi7tv2cpE4HEAERmO96Z9MLAZmCYiZxpjJonIVcaYA/31SoGxwPnGmO+KyD+Bc4B/AA8ClxljForIYcCfgeZTMfsAJxpjGnfJcBnwR2PMoyKShVd0Dga+DRwGCPC+/4a/uYPXM8AYc4yf80ngdWPMWSKSAfQTEQc4D5hojKkXkT/jFce5wAhjzBf8bQe02Ocs/+f0rw6OrZTqBC0MidOytfCmMea0HU+ITI5j+2HAev/xBGCGMWa9v/2jwNHAs21st8QY01yEPgJKRaQf8EXgqRaNmOwW2zzVRlEAeBe4UUSKgX/7ReVI4BljTJWf5d/AUcDzHbyeJ1s8Ph64CMA/7lYR+RZe4fvAz5gLrANeAPYSkXuAKcC0FvtZBwzv4LhKqU7SwpAA/gXjRrw3LqeLu6kGcpp32Yntals8bsR7gw0BW5pbFm2oamuhMeYxEXkf+AowVUT+p50sDbQ+NZmzy/NtHqMFAcqMMT/Z7QmRA4CTgSuBrwPfaXGM6g72q5TqJL3G0MNEZDBwP3Cv6d7UtS4wxn/8PnCMiBT6p17OB173n6sXkXB7OzLGVABLRORrfkbx32zb5Re4xcaYP+G1CPYH3gDOFJE+ItIXOAt4E1gLFIlIgYhkA6ftab/Aq8Dl/jEyRCTfX3auiBT5yweJyCgRKQRCxph/ATcDB7XYzz5AWvTCUqo3aYuhZ+T61xDCeJ+cHwF+3819TgGOBV4xxqwWkZ8A0/E+Wf/HGNN8YfpBYI6IzAJubGd/FwB/EZGb/JxPAJ90kOE84EIRqQfWAL8wxmzyT4XN9Nd5yBjzMYCI/AKviC0BYu3s9wfAgyJyKV6r5nJjzLt+tmn+9Zl6vBZCNfB//jKAn/jHCuMVzg87eA1KqU4SvR9DcvJ7E03Huxjb1vn/tCYiZwEHGWNutp1FqVSjp5KSlDGmGm8sxAjbWZJUJnCX7RBKpaKUbzGISCPwKTtP85QBfzDGNInIsXifyr9qjHnBX/9F4E5jzAwRmQH8yBiz2+kKEXkauKG9AWgi8lNjzG3+41LgxeZul6lMRO7EO931mu0sHSmdNEXwejaNxivCA/2vAf7XQCAP7+8n4/z5Ly+5yJ06Gu8UWAPexf5NwEZgwy7/rgeWOzG3owvvSiWVdLjGUN2in38R8BjQn50jk1finZt/Id4dSudGJd/W6cRtHzPTGNPQE/vqhWPcA/wVSJrCUDppSj5wIDAer6fYaP+rhNZdd9uV1Vifgdc9N17GjTjleNdc5u/y70on5qb2JzMVSOlQGHYwxqwTke/h9ZW/1V/8CRAWkS8ZY16Oc1e7jUrGKwICTDHG/LjlqGS8QVo34o9KxhtTUA6cYYypFpG9gfuAwcB24LvGmJh/kXcT3pvZLOD6FsfcD/g/IAvvlOA5/jiD69jZnfMhY8wfdm2tiMiPgH7GmFv9VtE7eAPFnheRf+D1qmqeo+lyY8w7InIhcI1/vPeBK/zn/wYcAhjgYWPM3caYZX7vpKHGmDVx/kx7TOmkKbnAEcCheL2YxgN707luvz1FgGL/68RdntviRpx3gbeBt4CZTszV7rfKurQqDNDmqGSAX/lf8RYGHZWcRKOSSydNyQQOx5un6ni8gpCV6OP2gAHAqf4XQL0bcWbhFYk3gVedmLvNVjiVvtKuMPhafXI0xrwpIohIvKcIdFSy5VHJpZOm9ANOxyuuXwLyE3WsXhTGK+qH4bUOa92IMwPv5/y8E3NXWMym0kjaFYZ2RiX/Gu90Tzzn2HVUcvMTvTgq2b9O8FXga8BJ7P46Uk023s/2ZOAeN+LMBJ4GnnZi7lKbwVRqS6vuqu2NSjbGTMPrgdLhiGB0VHKvjUounTRFSidNObl00pR/4bXSHsErDqleFHYleC2JO4AlbsR5zY0433AjThBOmamASYcWQ2dGJf+aFheV26GjkhM8Krl00pSheK2P/8HrPaRaO87/Wu9GnMnAg07MXWQ3kkoVKT+OIRF0VHL7ujMquXTSlInAD/FaBe22tmy4eN5/3vzGgtc60121txi87sEPAP92Yq7+XaouS4cWQ4/zu5g2j0pebjtPEur0qOTSSVNOwevym4xvukEgwAn+10I34twG/MOJuQkd+6JSkxaGLjLGTLWdIVkZY56KZz1/1PHZeKegDk5oqPQyFm+My81uxPkNUObE3HrLmVSApNXFZ5U8SidNORPv4vTTaFFIlL3wRqAvdCPO5XqhWsVLC4PqVWNvv3FC6aQpbwHPAPvazpMmRuENmlzgRpxzbIdRyU9PJaleES2LjgBuzx7C6Q0V0VrTmGc7UjoaBTztRpxXgGucmOvaDqSSk7YYVEJFy6LZ0bLoT/EmjrtAhPzc4r/rG5JdJwKfuBHnLjfiaIVWu9HCoBImWhb9EjAPb3xI3+blodwVE0PZqz63FkyB1xX4OrzTSxfZDqOSixYG1eOiZdGsaFn098BUds7SuoMIGbkjJ2/q/WSqDUOBMjfiTHUjTrHtMCo5aGFQPSpaFnXwRl7/kHbmkQqFKyZk5n06q9eCqY6cBHymrQcFWhhUD4qWRS/HmzU2nvmmyBn+z77Q1JTYVKoT+uO1Hp52I85A22GUPVoYVLdFy6KF0bLoc3hdInPj3U5C9eOyCl97J3HJVBedA8xxI84xtoMoO7QwqG7xLzDPwZvbqNOyCl8dg9Rt79lUqgcUA6+5Eae9yR9VitLCoLrEv8B8F94F5mFd3Y+IGZoz7OmZHa+pLAgBv3IjzpNuxOljO4zqPVoYVKdFy6L5wH/xujt2+z7KmflzJkjm1rXdDqYS5evAW27EGWk7iOodWhhUp0TLosPwbgh0XE/tU4S+ucV/X9hT+1MJMR740I04E20HUYmnhUHFLVoW3Qd4hzh7HXVGKKf8i6GcFVocklsR3nWHS20HUYmlhUHFJVoWPQx4GyhNxP5FCOWOLKtIxL5Vj8oCHnIjzi22g6jE0cKgOhQti34F7+5ghYk8Tihz28GZ+bM/SuQxVI+51Y04t9sOoRJDC4NqV7Qs+m3gWaBXeqXkDHs6H5r0tpTBcIMbce51I063OyCo5KKFQe1RtCx6E/AwvTg9u4QaxmYNflkHvQXHlcDDbsTJsB1E9RwtDKpN0bLobcAvbRw7q2BGhFDtNhvHVl1yCfCoG3H0/i4pQguD2k20LHoV3n2YrRAxg3OG/VOvNQTLecBjbsTR95QUoL9E1Uq0LHo28EfbOTLz5k6QzC2rbedQnfI1kuBvR3Vfh4VBRIaIyGMislhEPhKRd0XkrN4It0uOpSKyW68Yf/mnIjJHRF4XkVFx7OtrIuKKyHQROVZEXuxipmtFpFMXZfd0PH/5VhH5WETmi8gbInJai+dvFZEf7bLNjp+JiHT71Eu0LHok8ChJ8IFBhD65IyfrzXyC5yo34lhrbaqe0e4bgIgIXo+UN4wxexljDga+gTfB1q7r2jy/eJwxZn9gBnBTHOtfClxhjOnu6N1r6dneOm8aY8YbY8YB1wD3isgJPbj/PfLvo/A8kNMbx4tHKHvNF0O5y2K2c6hOu82NOBfbDqG6rqNPhscDdcaY+5sXGGOWGWPuARCRS0TkKRF5AZgmnjtE5DP/U/x5/nqtPiWLyL0icon/eKmI/FxEZvnbRPzlBSIyzf8E/QDxzcnzLjCixXEuFJGZIjJbRB4QkQwR+RlwJHC/iNzRcmMR6SsiD4vIB/5xz/CXZ4jInS1aJleLyDXAcGC6iEz31zvJb1HN8n8u/fzlp4hITETeAs6O43VgjJkN/AK4Kp71uyNaFh2ON/dRUs3BL0Iot/jv1bZzqC55yI04p9oOobqmo8KwH9DRXbaOAC42xhyP96Z3IN6UCScCd4hIPDNvbjDGHAT8BWg+XXIL8JYxZjzeJ9mSOPZzCl4LBxFx8C6ITTTGHAg0AhcYY34BfOg//t9dtr8ReM0YMwFvLqA7RKQv8D1gNDDeb5k8aoz5E7AKr7VynH9K5ybgRP+1fAhcJyI5wF+B04Gj8G6lGK9ZQKTF9z/0i9xsEZmNV5i6xZ8Q7yXi+/n2ulBm1fjM/h/q7KvBkwk85UacCbaDqM7r1LlkEblPRD4RkQ9aLH7ZGNN8/94jgceNMY3GmLXA60A8fxj/9v/9iJ1TLhwN/APAGDMF2NzO9tNFZB1eMXrMX3YCcDDwgf8megJt3H94FycBk/z1Z+CdVinx93u/MabBz9PW/YoPB/YF3va3vxgYhffGvsQYs9AYY5pfU5x2bSXdbYw5sPkLrzB1WbQsmgU8A+zfnf0kWs7QZwqhscF2DtVpfYFn3YgzxHYQ1TkdFYa5wEHN3xhjrsR7gx3cYp2qFo/3dLqnYZdj7Xoeu9b/t5HWg6lMB/maHYf3JjwX7/RLc5ayFm+k44wxt3awHwHOabFNiTHG9Zd3lEXwimTztvsaY5onG4v3dexqPOB2cdt4/BXvdGFSk1DjXtlFUzsc9FbxwbOseugKVv3tCtY//ztMQ12r52tWfMbqyT9g2e++SlXsrR3L6zeuZPXkH7Dq4auoLfd+3KapkbVP3EhTfU0Pv5q0Mxyv5aBjHAKko8LwGpAjIpe3WNbexdY3gPP8c/KD8T71zwSWAfuKSLaI9McrLh15A7gAQEROpYPz38aYaryLwReJyCDgVeBcESny9zEojh5LU4Gr/YvuiMh4f/k04LLmC+z+/gEqgTz/8XvARBEZ46/TR0T2AWLAaBHZ21/v/A5fubf9/sDNwH3xrN9Z0bLod4DA3Pg9POjNfQnV7HGSvYbKDVR89AJDL76b4Zf+GZqaqHLfaLVOZv5gCr58LX33bX3HysrZLzHgmEsYfOZPqJj5jLfs4//Qd7/jCYWT5lp8kB0F3Gk7hIpfu4XBP/VxJnCMiCwRkZlAGfDjPWzyDN5tHj/BKyo3GGPWGGNWAP/0n3sU+DiObD8HjhaRWXineJZ3tIExZjXwOHClMWYe3jn/aSIyB3iZju809ksgDMwRkc/YOfL3If/4c0TkE+Cb/vIHgZdEZLoxZj3eCNDH/eO9B0SMMTV41yim+Befl7Vz/KOau6viFYRrjDGvdvS6O8vvgXRPT+83kURMYe7wJ9q/3tXUiGmowzQ1Yhpqyeg3qNXTmf2HkFU0GqT1n71kZHrbNdRCKIOmmm1UL5pJ3y8kfWMqSH7gRpxzbIdQ8RHvvV+li2hZNAevFRe1naWzjKGm6vMbNpr6QSPaer7iw+fY8sYjSGYWOaPHM/j0XfsWeDZMuZvcvSfQN3IkAA0V69jw4u8xjfUUnHwV2z59hT5jDyenZPcf0cXz/vPmNxa8dlQPvqx0shU4yIm5i20HUe2zPpBJ9bq7CWBRABAhJ3fk5KVtPddYs43tC99nxGV/o/jKv2Pqa9k2d3pc+83ML2LoN3/LsG/dhYSzady2iXBBMRtevIv1z91O/abynnwZ6aw/8E834oRtB1Ht0wtCacS/r8JltnN0pHJOJasfWw1NMPDogQw+bWdfh1DWui9KeL677ulnnbo1iwjl5jH4jB9Tu3ohkpnN2iduRDLC9IkcSW25S5+9J7D+udsp+vov8C8dtWvLG48w4KgLqfjoBfrueyyZ/YvY8vZje2x9qE47GK9b+K2Wc6h2aIshTUTLooPweiElNdNkWPXIKkqvK2XMbWPY+v5Wasp39gwSQba7d+eFcvoy4vt/Jf+QM9g8YzKZ+YOpXfkZBaddT/+jv8W2T18hXDCSLe88Qf8jvh5XUahZ/ikZ/QYRHjQCU18LIiAh77HqST91I04gW63pQgtD+riPji++W1e9uJrsIdlkFWURygzR/7D+VH5c2Wqd7fO3FOcfVDAXoE/kSGqWfULWsH3IzBvM+n/9kk0v/QkRIWfUAdQsnkVT7XYAalcvYOV9F7N9/ltsmnofqx66Ysc+jTFsfedJ+k/0Oo3lHXAKW14vY/2zvyH/0LgGq6v4hdF7OCQ1PZWUBqJl0a/hzXGV9Oo31xMetPMUdObATKoXV++2Tt/IrPy6jV+vl1BGOJTdh6bqCgpP/xEbp96HhLMo/Mr1bJ7+NwaffSNh/1p19rB9KL6yrM3jighDvvGrHd+HC0cy7BKdKDSBDgGuB35nO4janbYYUpx/CunPtnPELZ5OcgZCmU0js4dM2TnoTYSsIXsx7KK7GHr+b2jYumZHd9X1z93OhhfupLGqvcHzyoKfuxFnH9sh1O60MKS+m4DdpitPVuFBYeo31e/4vmFzA+GB4TbXCQ98J2pM5dam2u2EcvJ2PN/ytNCWtx9jwJHfpO9+x1Hx0Qu99jpUXHKAv+k9o5OPFoYUFi2L7oV3T97AyB2dS+3aWurW19HU0MTW97eSNz6v1Tp5B+ax+a3NiDCodtlvV+WU7N/q4nLVZ6+Su/chZOT08y8ih0BELyInpyPx5hVTSUQLQ2r7DZBlO0RnSIYw/MLhLL1zKQt/spD8CfnkjMhh7b/XUvGxNyPGwKMH0ritkQU3LGDr+wsiA48/bcdkgk31NWz77FXyxn8FgPwJZ7L+mdvY8noZeeO/bOdFqY78yo04ubZDqJ105HOKipZFD8ObliPlNdUWvlu1+EdH9MaxdORzwtzoxNzbbIdQHm0xpK60mbQslL3hiIw+Cz+znUN1y4/diDO449VUb9DCkIKiZdEz8c7dpo3c4ke16Rts+cDPbIdQHi0MKSZaFs0Ebredo7dJRk00PPDttDh1lsK+70acsbZDKC0Mqej7QFr2Dc8eMmU47HJ3HhUkYbwOE8oyLQwpxL9/8y22c9gi0lSSPfSFd23nUN1ytg56s08LQ2q5jNa3XU074QHvH0CGDnEOMMGbKkNZpIUhRUTLoiECMKV2ookwIHfEo5/azqG65SI34hTZDpHOtDCkjlOB0bZDJIOMPouPCGWta+8Wqiq55QBX2Q6RzrQwpI4rOl4lPYgQzh05ebXtHKpbrnAjTh/bIdKVTrudAqJl0dHAKb15zJV/W0nl7Eoy8zMZ++vWPQw3vLSBNU+uIXJPhMy81n9i1cuqWfX3VTRVN0EIik4vov9h/QFYcf8KalbWkHdgHkPPHQrAuufWkTMyh/yD8juVL5S16fCMvvPnNFaN278bL1PZUwB8G+8+IqqXaYshNVxGL/8uBx45kNLrS3dbXrexjm1ztxEuaPu2vqHsEMXfLWbsbWMpvb6U1Y+tprGqkZoV3l3axv5qLNsXbKdxeyP1W+qpXlzd6aLQLHfEYxmgc74E2LU686odWhgCLloWzQa+09vH7TuuLxl9d78B15rH1zDk60P2uF320Gyyh2YDEB4YJjM/k4bKBsgAU28wTQbTYCAE6/69jqKzu34NUjJq9wsPelO7rwbXGOAY2yHSkRaG4PsaSXK/hYqPKwgPDJNbEt9EmdsXb8c0GLKKssgZnkN4UJjPb/mc/hP6U7fWG6eWO6p7k25mF/23BGnQ+baD69u2A6QjLQzBlxQXnZtqm1j/wnqKzorvE379lnpWPriSEZeOQELe2YJhFwxjzC/HUHhqoddaOKuIdc+vY/l9y9k0Y1OXcok0FWcPfVZbDcF1rhtx8jpeTfUkLQwBFi2LHgj0ynTTHalbV0fd+joW3byI+dfPp35zPZ/f8jn1W+p3W7exupFldy9jyNlD6DNm944nFbMqyB2dS1NtE7XltZRcWcKWd7bQVNvUpWzh/h+Ol4xtG7u0sbKtD3CO7RDpRgtDsF1iO0CznJE5OPc4jLtrHOPuGkd4YJi9f7434QGtL0I3NTSx/E/LGfDFAfQ/tP9u+zENho0vb6Tw1EKa6pq8cbAAxnuuK0Ton1P8yNwubaySwTdtB0g3WhiC7TRbB17xlxUs/tViatfUEvthjE2v7/lUT/WSasofLgegYmYFVQuq2PLWFhbdvIhFNy+ieln1jnU3vrqRARMHEMoOkTMyBwwsvGkhfcb2afNid7wycpd9MZS9ZkmXd6BsOt6NOHvu0aB6nN7BLaCiZdF9gPm2cwRJU/2AmVWLJh3anX3oHdysudqJuffaDpEutMUQXHoD404Khbccmtlv3mzbOVSXfMV2gHSihSG4TrUdIIhyRjyRrYPeAukYN+Lk2A6RLrQwBFC0LNoHHfjTJRKqc7IKZrxjO4fqtFz0b77XaGEIphOAbNshgipr8LS9kPrqjtdUSaZX5wNLZ1oYgkmvL3SDiBmWM+xfM23nUJ2mhaGXaGEIJr2+0E2Z+bMPksyK9bZzqE6JuBFnlO0Q6UALQ8BEy6L7Afqfo5tEyMstfsS1nUN12sm2A6QDLQzBo62FHhLKWTExlFO+yHYO1SlJMQVMqtPCEDz6H6OHiJCRW1y2xXYO1SmH2A6QDrQwBM942wFSSShccUhm3pxZtnOouDl6y8/E08IQINGyaH+g1HaOVJMz/Kl+0NS1qVtVb8sADrAdItVpYQiWA9k536jqIRKq3yer8FUd9BYcejopwbQwBIueRkqQrMLXxiC1VbZzqLgcbDtAqsu0HUDF7w8PNIyozOWNBSOEeSXSf8EIGVnZRwbZzpUKRMzQnOFPz6gpv+BY21lUh7QwJJgWhgAZvokjgcPHlRtOn+nNA9ckrKvMpXxFoVTOL0bmlcjARcNlVHW26O0QOykz79MJkrl1rWnor3P/J7eIG3EynJjbaDtIqtLCECzjdl0QMhT1305R/+WGLyyHc97xCkajUL6lL6uWF8n22EjJnDdSBi0ZSmldWHJ7PXVAiNA3t/jvs7YvvVoLQ3LLBIqBZbaDpCotDAHh38FqYLzrZxhGFGxjRME2w/jFXrEw0NQQYtnmPNYsHSLV7kjJdkfK4GVFjGrMkHAHu0wLoZzyiaGcFQuaakbuYzuLatcotDAkjBaG4Oj2NBgCoXATo4q2Mqpoq+HQBTsKRn19Jos25LN+8VCpm1ciObFiGVJeSIkRSasOCiKEckeWVVYtvMl2FNU+nRYmgbQwBMfQRO1YIJzVwJjhmxgzfJPhyHk7CkZ1bZhl6waw8fNh0jC3RPrML5bhawfKiERlSQahzG0HZ+Z//GFDxXjtFpm8tDAkkBaG4EhYYdgTgdyceiIl66FkveG4OTsKRmV1FstXD2LzwuHS6JZI3vxiKd6UJ0W9nTFRcob9a8C2igMaIZRhO4tqkxaGBNLCEBy9Xhj2RCCvTx377b0G9l5jOGWW30MKNlXlsGJVAVvnjxDmjZIBC4bLyG19JO5rI8lCQg1jsgZPe7Nu/SlH2c6i2lRqO0Aq08IQHElTGPYkBIPyahg0rhzGlRu+2qJLbUUuK1cOlsr5I8iYO0oGfj5MSpK9S21WweuRuo3HbaMpu5/tLGo3JbYDpDItDMER2C6UIUPRgO0UDVhm+MIyr0utAdMUYuWWvqxePli2uyMlc16JFCwZSml9piTFTd9FzOCc4U/OqFl50bG2s6jdBK4VGiRaGIIj6VsMnSEgGU0UF1RSXFDZqkttY0MGSzf1Y+2OLrUlUrR8MCU2utRm9pt3mGRuXm0aBg7r7WOrdvW3HSCVaWEIjkLbAXqDQEa4kdIhWykdstVwWBtdaj/3u9TOHylDywsYmcgutSLk5o4s+2j7kmu1MCSXLDfi5Dgxt8Z2kFSkhSE4sm0HsGnXLrVHte5Su3TdADYt8rrU9p0/UoatG9BzXWpD2WsmhnKXxZqqR0V6ap+qR+QDWhgSQAtDcOjvqg1+l1qnuUvt8Tu71FZsz2b5moFsXjhczLxRkjd/hBRvzpPBnT6GILnFf6+uWnhzj+dX3aLTuySIvtkEh/6uOkEgv28tX9hTl9ryArbOLxaZVyL5C0fIqG25MqC9/YUyq8Zn9v9wZq+EV/FKik4KqUjfbIJD5zLqAc1daiPlECk3nPH+ji61ayv67JilNmNuiQz8fLiMqsmSHV1Vc4Y+Uxji8BXWwqtdaWFIEC0MwaG/qwQKGYYMqGLIgCpDdBmc+/aOLrXlW/qyalmRbHdHNmWO2z6r1nZWtUNazePVm/TNJjj0d9XL/C61IwoqGVFQaTjocwNU2o6ldtIinSBacYNDC4NSrWmPpATRwhAcdbYDKJVktDAkiBaG4NhiO4BSSUYLQ4JoYQiOrbYDKJVktDAkiBaG4NDCoFRrWhgSRAtDcGhhUGqnOifmNtkOkaq0MASHFgaldlprO0Aq08IQHFoYlNpppe0AqUwLQ3BstB1AqSSihSGBtDAEh87Ro9RO5bYDpDItDMGx1HYApZKIthgSSAtDcCy1HUCpJKIthgTSwhAcSwFjO4RSSUJbDAmkhSEg/HvbLredQ6kk8bntAKlMC0OwLLAdQKkksM6Juatth0hlWhiCZb7tAEolgU9sB0h1WhiCRUcGhQQAAA11SURBVP9DKAWzbQdIdVoYguU92wGUSgL6ASnBtDAEyzz03pJKaYshwbQwBIg/m+SHtnMoZVENeq0t4bQwBM/7tgMoZdGnTsxtsB0i1WlhCB69zqDS2Ru2A6QDLQzBoy0Glc6m2w6QDrQwBIwTc9cAi2znUMqCRuBN2yHSgRaGYJpiO4BSFnzgxNwK2yHSgRaGYHrRdgClLJhqO0C60MIQTK+j4xlU+vmv7QDpQgtDADkxtx6YZjuHUr1oE/CB7RDpQgtDcOnpJJVOnnVibqPtEOlCC0Nw/Qe9cY9KH4/ZDpBOtDAElBNz1wHv2s6hVC9Yg45f6FVaGIKtzHYApXrBk/48YaqXaGEItieA7bZDKJVgj9sOkG60MASYP9jn37ZzKJVAnzsxV6eB6WVaGILvYdsBlEqgJ2wHSEdaGIJvBrDYdgilEqAR+KvtEOlIC0PAOTHXAJNt51AqAZ51Yu4y2yHSkRaG1DAZ0JuXqFTzB9sB0pUWhhTgxNwVwFO2cyjVgz50Yu5btkOkq0zbAVSPuQM433YI1T1L6mq5btWqHd+vrK/n6oJCZtdUs6SuDoDKxkbyMjJ4pnR0XNteNGgQd61fx5vbqojkZPPbYcMBeH7rVrY2NfKtgYN64ZV12h9tB0hnYozOqpAq3IjzCnCC7RyqZzQaw7GfL+KJUaWMCId3LL993VryQhlcUVgY17b5oRCXl6/kHyWj+N9Vq/huwSBKwllcXr6SB4tHEhbpjZfTGauBUf5kkcoCPZWUWn5jO4DqOe9t305JOKtVUTDGMLWyki/n58e9bUig3hiMMdSaJjIRHt60iQsHDEzGogBwnxYFu7QwpBAn5r6Kzp+UMv5TUbFbAfioupqCjExKs7Li3rZvKIOT+uVx9rKljAiHycvI4LOaak7Iy0tY9m7YANxjO0S608KQen5pO4DqvjpjmF61jZN3efOeUlHBl/Pbf0Nva9tLCwp4pnQ0Py4awp82rOeqwsE8vWULP1xVzv0bNyTkNXTRb/T2nfZpYUgxTsx9CW01BN6b27axb3Y2hZk7+4c0GMMr2yo5Na/900htbdtsXk0NAKVZWTxXsZW7h49gYW0tS/0L25atAO6zHUJpYUhV16H3agi0/1Tufhrp3e1VjM7KYmiLaw7xbtvsng3rubqwkAZjaPL/QkIINU1JMXnprU7MrbUdQmlhSElOzH0PnZEysKqbmninqoov9Wt9yuilNq45rGuo5/srV3S4LcArlZV8ISeXosww+RkZHJCbyxlLlgAQyclJwCvpFBedRj5paHfVFOVGnGJgPtDHdhal4nCOE3N1puAkoS2GFOXE3JXAnbZzKBWHd7QoJBctDKntd0C57RBKtaMBuNx2CNWaFoYU5sTcKuAntnMo1Y4/OjF3ju0QqjUtDCnOibmPANNs51CqDcuBW2yHULvTwpAeLgW22g6h1C6+77dqVZLRwpAG/AvR19rOoVQLjzgx97+2Q6i2aWFIE07MnQy8aDuHUsBa9INKUtPCkF6+B2yyHUKltSbgQifm6t9hEtPCkEacmLsauNp2DpXWbnNi7iu2Q6j2aWFIM07MfQzvHtFK9bY3gFtth1Ad08KQni4HPrIdQqWV9cD5TsxttB1EdUwLQxpyYm4NcDbeTVGUSjQDfMuJuas6XFMlBS0MacqJucuBbwD6CU4l2m+dmDvVdggVPy0Macy/FahOmaES6RngJtshVOfotNsKN+I8CXzddg6Vct4DjndibrXtIKpztMWgAC5BbweqetbnwFe1KASTthgUAG7EGQS8DURsZ1GBtxE4wom5C20HUV2jLQYFgD8S9WT0/g2qe2qAM7QoBJsWBrWD31PpRLw+50p1VgNwgRNz37YdRHWPFgbVihNzY8BJwBbbWVSg1APn6S06U4MWBrUbJ+bOBk5F7+Gg4lMHnKtFIXXoxWe1R27EORCYChTZzqKSVi1wjhNzp9gOonqOFgbVLjfijAVeBkbZzqKSTg1wlt5wJ/XoqSTVLr93yUTAtZ1FJZUqvHEKWhRSkBYG1SEn5pYDRwEf2M6iksIa4Bgn5r5sO4hKDC0MKi5OzN0IHI93Wkmlr7nA4U7M1WnbU5gWBhU3J+Zuw+utdIftLMqK/wITnZi7zHYQlVh68Vl1iRtxzgP+BvS1nUX1it8DN+iNdtKDFgbVZW7EieJNq7y37SwqYbYDVzgxt8x2ENV79FSS6jIn5n4KTABesp1FJcQnwCGdKQoiMkREHhORxSLykYi8KyJnJTDjnnIsFZHCPSz/VETmiMjrItJhN2wR+ZqIuCIyXUSOFZEXu5jpWhHp08lt2jyev3yriHwsIvNF5A0ROa3F87eKyHYRKWqxbFtbj9uihUF1ixNzNwOnATfijYBVwWeAPwCHOTE37m7KIiLAs8Abxpi9jDEH490lsLiNdTN7KmwXHGeM2R+YQXw3EboUuMIYc1w3j3st0KnC0IE3jTHjjTHjgGuAe0XkhBbPbwCu78qOtTCobnNibpMTc28DDgXm2M6jumUd8BUn5v7Qibm1ndz2eKDOGHN/8wJjzDJjzD0AInKJiDwlIi8A08Rzh4h85n+KP89fr9WnZBG5V0Qu8R8vFZGfi8gsf5uIv7xARKb5n6AfACSOvO8CI1oc50IRmSkis0XkARHJEJGfAUcC94tIq04XItJXRB4WkQ/8457hL88QkTtbtEyuFpFrgOHAdBGZ7q93kt+imuX/XPr5y08RkZiIvIV3b/YOGWNmA78Armqx+GHgPBEZFM8+WtLCoHqME3M/wTu19Gv0XtJBNBXY34m5XT01uB8wq4N1jgAuNsYcj/emdyBwAN6svneIyLA4jrPBGHMQ8BfgR/6yW4C3jDHjgeeBkjj2cwpeCwcRcYDzgInGmAPx/n4vMMb8AvjQf/y/u2x/I/CaMWYCcJyfvy/wPWA0MN5vmTxqjPkTsAqvtXKcf5rrJuBE/7V8CFwnIjnAX4HT8cYODY3jdTSbRev7qWzDKw4/6MQ+ALDZnFMpyIm5dcBNbsR5HihDb/wTBOvwehz16AVmEbkP79N2nf/mCfCyMWaT//hI4HFjTCOwVkRex/tgUdHBrpsn6/uInZ+oj25+bIyZIiKb29l+uogMwXvdzaeSTgAOBj7wzoiR6z/fnpOAr4pIc3HKwStIJwL3G2Ma/Dyb2tj2cGBf4G3/eFl4LZgIsMQYsxBARP6BV2ji0VYr6U/AbBG5K859ANpiUAnixNyZwHjgd3hTMqvk0wTcD0R6qCjMBQ5q/sYYcyXeG+7gFutUtXi8p9M9DbR+b8rZ5fnmU1yNtP5wG28Xy+Pw5v6ai3f6pTlLmTHmQP9rnDHm1g72I8A5LbYpMca4/vKOsghekWzedl9jzKWdfB27Gs8uU9cYY7YAjwFXdGZHWhhUwjgxt8aJuT8G9gem2c6jWvkIbwTz5X4Hgp7wGpAjIpe3WNbexdY38M6BZ4jIYLxP/TOBZcC+IpItIv3xiktH3gAuABCRU4GB7a1sjKnGuxh8kX8O/lXg3OZePCIyKI4eS1OBq/2L7ojIeH/5NOCy5gvsLc7xVwJ5/uP3gIkiMsZfp4+I7APEgNEi0twF/PwOX7m3/f7AzcB9bTz9e+D7dOIMkRYGlXBOzI05Mfdk4Axgge08aW4L3gXKQ52Y26NzXxlvUNSZwDEiskREZuKdTvzxHjZ5Bq+zwid4ReUGY8waY8wK4J/+c48CH8dx+J8DR4vILLxTPMvjyLsaeBy40hgzD++00jQRmYM39UtH1zt+CYSBOSLymf89wEP+8eeIyCfAN/3lDwIvich0Y8x64BLgcf947wERY0wN3qmjKf7F5/ZGmR/V3F0VryBcY4x5tY3XuQHvZ53dwevZQQe4qV7lRpwwcBnwM2C3fuYqYSrxzjff1YMtBJWitDAoK9yI0x+vt8Q1QIHlOKlsO3Av8Dt/IkSlOqSFQVnlRpzm7n3X06JPueq2GrwLy791Yu5a22FUsGhhUEnBjThZwEXADcBYy3GCbDNeP/g/OjF3le0wKpi0MKik4kacEHAu3nWIY4lvBKvyul7eAzzixNzttsOoYNPCoJKWG3H2Ar6N13tjt/l2FDXA08ADTsx9y3YYlTq0MKik57ciTgK+g9flNctuIqsa8CZ/ewp42om5bY2qVapbtDCoQHEjTgHebK6nASezc8BQKmvA6+f/FPCsE3M3WM6jUpwWBhVY/gXrY/CKxOl4E5elig14o3mn4BUDbRmoXqOFQaUMN+Lshzf185HARILV/XU98Lr/NQOY68Rc/c+prNDCoFKWG3FG4c3WOQE4BG+K507PTZ8Aa/B6Ec0FPgPedmLuPLuRlNpJC4NKK27EGYR3j+ox/tfeLf4tpGemom/Cm7K5HG8O/mXsLARz9bSQSnZaGJRqwY04/YABu3z1B/riTfPc0OLflo+34l0X2ABsdGKu3qhIBZYWBqWUUq3otNtKKaVa0cKglFKqFS0MSimlWtHCoJRSqhUtDEoppVrRwqCUUqoVLQxKKaVa0cKglFKqFS0MSimlWtHCoJRSqhUtDEoppVrRwqCUUqoVLQxKKaVa0cKglFKqFS0MSimlWtHCoJRSqpX/B+Csi/XH31wjAAAAAElFTkSuQmCC\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "labels = 'DHI (other sources)', 'DNI (other sources)', 'Ground Reflected DHI','Ground Reflected DNI'\n", + "sizes = [DHIotherSources, DNIotherSources, ground_reflected_DHI, ground_reflected_DNI]\n", + " \n", + "fig1, ax1 = plt.subplots()\n", + "ax1.pie(sizes, labels=labels, autopct='%1.1f%%', startangle=90)\n", + "ax1.axis('equal') # Equal aspect ratio ensures that pie is drawn as a circle.\n", + "\n", + "plt.show()\n" + ] + }, + { + "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.7.3" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/docs/tutorials/6s - bifacialVF Sky contributions.py b/docs/tutorials/6s - bifacialVF Sky contributions.py new file mode 100644 index 0000000..e03cddb --- /dev/null +++ b/docs/tutorials/6s - bifacialVF Sky contributions.py @@ -0,0 +1,254 @@ +#!/usr/bin/env python +# coding: utf-8 + +# ## 6* - BIFACIALvf Sky contributions +# +# Runs bifacialvf for a day, and compares to same day without DNI, without DHI, and without DNI no albedo, without DHI no albedo to capture the contributions of Ground Reflected vs other sources of DNI and DHI. +# + +# In[5]: + + +testfolder = r'TEMP' +Resultsfolder = r'TEMP' +exampleflag = False +debugflag = False + + +# In[6]: + + +import numpy as np +import pandas as pd +import matplotlib.pyplot as plt +from matplotlib import style +import pvlib +import datetime +import pprint +import os + + +# ## 6.a: Run bifacialvf + +# In[8]: + + +import bifacialvf + +# Print bifacialvf Version: +bifacialvf.__version__ + + +# In[9]: + + +TMYtoread=os.path.join(testfolder,'SRRL_WeatherFile_TMY3_15.csv') +writefiletitle=os.path.join(Resultsfolder,'bifacialVF_Results_SRRLAlbedo_60min.csv') + +# Variables +tilt = 10 # PV tilt (deg) +sazm = 180 # PV Azimuth(deg) or tracker axis direction +albedo = None # Calculated in previous section from SRRL data. Value is 0.28 up to 11/18/19o +hub_height=1.5/2 #1.5m / 2m collector width +pitch = 2/0.35/2 # 1 / 0.35 where 0.35 is gcr --- row to row spacing in normalized panel lengths. +rowType = "interior" # RowType(first interior last single) +transFactor = 0 # TransmissionFactor(open area fraction) +sensorsy = 12 # sensorsy(# hor rows in panel) <--> THIS ASSUMES LANDSCAPE ORIENTATION +PVfrontSurface = "glass" # PVfrontSurface(glass or ARglass) +PVbackSurface = "glass" # PVbackSurface(glass or ARglass) + + # Calculate PV Output Through Various Methods +calculateBilInterpol = False # Only works with landscape at the moment. +calculatePVMismatch = False +portraitorlandscape='portrait' # portrait or landscape +cellsnum = 72 +bififactor = 1.0 + +# Tracking instructions +tracking=True +backtrack=True +limit_angle = 65 + +# Using YEARLY Albedo: +myTMY3, meta = bifacialvf.bifacialvf.readInputTMY(TMYtoread) + + +# In[14]: + + +myTMY3.head() + + +# In[15]: + + +myTMY3, meta = bifacialvf.bifacialvf.fixintervalTMY(myTMY3,meta) + + +# In[16]: + + +myTMY3.head() + + +# In[19]: + + +filterdates = (myTMY3.index >= '2020-02-02 0:0:0 -7') & (myTMY3.index < '2020-02-03 0:0:0 -7') +myTMY3[filterdates] + + +# In[20]: + + +writefiletitle=os.path.join(Resultsfolder,'bifacialVF_02_02.csv') + +bifacialvf.simulate(myTMY3[filterdates], meta, writefiletitle=writefiletitle, + tilt=tilt, sazm=sazm, pitch=pitch, hub_height=hub_height, + rowType=rowType, transFactor=transFactor, sensorsy=sensorsy, + PVfrontSurface=PVfrontSurface, PVbackSurface=PVbackSurface, + albedo=albedo, tracking=tracking, backtrack=backtrack, + limit_angle=limit_angle, calculatePVMismatch=calculatePVMismatch, + cellsnum = cellsnum, bififactor=bififactor, + calculateBilInterpol=calculateBilInterpol, + portraitorlandscape=portraitorlandscape) + + +# In[23]: + + +noDNI = myTMY3[filterdates].copy() +noDNI['DNI'] = 0 + + +# In[ ]: + + +noDNI.iloc[40:50] + + +# In[33]: + + +noDHI = myTMY3[filterdates].copy() +noDHI['DHI'] = 0 + + +# In[35]: + + +noDNInoAlb = myTMY3[filterdates].copy() +noDNInoAlb['DNI'] = 0 +noDNInoAlb['Alb'] = 0.00000000000001 + + +# In[36]: + + +noDHInoAlb = myTMY3[filterdates].copy() +noDHInoAlb['DHI'] = 0 +noDHInoAlb['Alb'] = 0.00000000000001 + + +# In[ ]: + + + + + +# In[41]: + + +cases = [noDNI, noDHI, noDNInoAlb, noDHInoAlb] +titles = ['noDNI', 'noDHI', 'noDNInoAlb', 'noDHInoAlb'] + +for i in range (0, len(cases)): + title = 'bifacialVF_02_02_'+titles[i]+'.csv' + case = cases[i] + + writefiletitle=os.path.join(Resultsfolder, title) + + bifacialvf.simulate(case, meta, writefiletitle=title, + tilt=tilt, sazm=sazm, pitch=pitch, hub_height=hub_height, + rowType=rowType, transFactor=transFactor, sensorsy=sensorsy, + PVfrontSurface=PVfrontSurface, PVbackSurface=PVbackSurface, + albedo=albedo, tracking=tracking, backtrack=backtrack, + limit_angle=limit_angle, calculatePVMismatch=calculatePVMismatch, + cellsnum = cellsnum, bififactor=bififactor, + calculateBilInterpol=calculateBilInterpol, + portraitorlandscape=portraitorlandscape) + + +# In[65]: + + +# ANALYSE DATA + +titles = ['','_noDNI', '_noDHI', '_noDNInoAlb', '_noDHInoAlb'] + +compiled_RearIrrad = [] + +for i in range (0, len(titles)): + title = 'bifacialVF_02_02'+titles[i]+'.csv' + writefiletitle=os.path.join(Resultsfolder, title) + + data, meta = bifacialvf.loadVFresults(writefiletitle) + + filterAzm = (data['sazm'] == 270) + data['fixed_RowBackGTI_1'] = data['No_1_RowBackGTI'] + data['fixed_RowBackGTI_1'][filterAzm] = data['No_12_RowBackGTI'][filterAzm] + compiled_RearIrrad.append(data['fixed_RowBackGTI_1'].sum()) + + + +# In[72]: + + +compiled_RearIrrad + + +# In[88]: + + +print("Full simulation rear irradiance", compiled_RearIrrad[0]) +print("Dni + DHI modeled separately", compiled_RearIrrad[1]+compiled_RearIrrad[2]) +print("% from original", (compiled_RearIrrad[1]+compiled_RearIrrad[2])*100/compiled_RearIrrad[0]) + + +# In[89]: + + +#labels = 'noDNI', 'noDHI', '_noDNInoAlb', '_noDHInoAlb' +# labels aka DHI DNI DHI other sources DNI other sources +DHIonly = compiled_RearIrrad[1] +DNIonly = compiled_RearIrrad[2] +DHIotherSources = compiled_RearIrrad[3] +DNIotherSources = compiled_RearIrrad[4] +ground_reflected_DHI = DHIonly-DHIotherSources +ground_reflected_DNI = DNIonly - DNIotherSources + + +# In[ ]: + + + + + +# In[90]: + + +labels = 'DHI (other sources)', 'DNI (other sources)', 'Ground Reflected DHI','Ground Reflected DNI' +sizes = [DHIotherSources, DNIotherSources, ground_reflected_DHI, ground_reflected_DNI] + +fig1, ax1 = plt.subplots() +ax1.pie(sizes, labels=labels, autopct='%1.1f%%', startangle=90) +ax1.axis('equal') # Equal aspect ratio ensures that pie is drawn as a circle. + +plt.show() + + +# In[ ]: + + + +