Package: pvcz
Photovoltaic Climate Zones (PVCZ)This package provides the photovoltaic climate zones (PVCZ) and climate stressor data which describes the degree of environmental degradation expected on a PV module located in different locations on the world.Installpvcz can be installed with pippipinstallpvczAboutThe data is calcuated from the global land data accumulation service (GLDAS) at 0.25 degree resolution across the world.For a full description, see the file 'Karin2019 - Photovoltaic Degradation Climate Zones - PVSC' which describes the methods.Climate stressorsThis dataset is provided as a csv file and as a pickle file containing climate stressors specific to PV degradation.lat: latitude in fractional degrees.lon: longitude in fractional degrees.T_equiv_rack_1p1eV: Arrhenius-weighted module equivalent temperature calculated using open-rack polymer-back temperature model and activation energy 1.1 eV, in CT_equiv_roof_1p1eV: Arrhenius-weighted module equivalent temperature calculated using close-roof-mount glass-back temperature model and activation energy 1.1 eV, in
CsT_equiv_rack_XXXeV: Arrhenius-weighted module equivalent temperature calculated using open-rack polymer-back temperature model and activation energy XXX eV, in Cspecific_humidity_mean: Average specific humidity, in g/kg.specific_humidity_rms: Root-mean-squared specific humidity, in g/kg.T_velocity_rack: Average rate of change of module temperature using open-rack polymer-back temperature model, in C/hr.T_velocity_roof: Average rate of change of module temperature using roof-mount glass-back temperature model, in C/hr.GHI_mean: Mean global horizontal irradiance, in kWh/m2/day.wind_speed: ASCE wind speed with a mean recurrence interval of 25 years, in m/s.T_ambient_min: Minimum ambient temperature, in CT_ambient_max: Maximum ambient temperature, in CT_ambient_mean: Mean ambient temperature, in CKG_zone: Koppen Geiger zone, in textKG_numeric_zone: Koppen Geiger zone, as a number.T_equiv_rack_zone: Temperature zone for open-rack modules as a number 0 through 9, equivalent to temperature zones T1 through T10 respectively.T_equiv_roof_zone: Temperature zone for close- roof-mount modules as a number 0 through 9, equivalent to temperature zones T1 through T10 respectively.specific_humidity_mean_zone: Specific humid- ity zone, as a number 0 through 4, equivalent to temperature zones H1 through H5 respectively.wind_speed_zone: Wind speed zone as a number 0 through 4, equivalent to wind zones W1 through W5 respectively.pvcz: Photovoltaic climate zone, combined Temperature (rack) and humidity zones as a number 0 through 49, corresponding to temperature zones T1:H1, T2:H1, ... , T10:H5, see next variable as well.pvcz_labeled: Photovoltaic climate zone, combined Temperature (rack) and humidity zones as an alpha- numeric key, e.g. T5:H2.ExamplesThe following code snippet shows how to find the climate stressors and zones closest to a particular latitude and longitude.importpvcz# Note df is a flattened list of lat/lon values that only includes those over landdf=pvcz.get_pvcz_data()# Point of interest specified by lat/lon coordinates.lat_poi=32lon_poi=-95.23# Find the closest location on land to a point of interestclosest_index=pvcz.arg_closest_point(lat_poi,lon_poi,df['lat'],df['lon'])# Get the stressor data from this locationlocation_data=df.iloc[closest_index]print(location_data)The following code makes a map of a particular stressor.importnumpyasnpimportpvczfrommpl_toolkits.basemapimportBasemapimportmatplotlibmatplotlib.use('TkAgg')importmatplotlib.pyplotasplt# Get the data.# Note df is a flattened list of lat/lon values that only includes those over landdf=pvcz.get_pvcz_data()info=pvcz.get_pvcz_info()# For some uses (like making a map), it is convenient to have a 2D grid of lat/long valuesdata={}forvindf:data[v]=pvcz.convert_flat_to_grid(df[v],info['keepers'],info['lon_all'],info['lat_all'])# Make a plot# grid the lat/lon coordinates.xg,yg=np.meshgrid(info['lon_all'],info['lat_all'])# Set up the mapfig=plt.figure(0,figsize=(5.5,4.5))plt.clf()ax=fig.add_axes([0.1,0.1,0.8,0.8])m=Basemap(projection='cyl',llcrnrlat=-60,urcrnrlat=90,\llcrnrlon=-180,urcrnrlon=180,resolution='c')m.drawcoastlines(linewidth=0.5)m.drawcountries()# Draw the filled contour lines (the map).cs=m.contourf(xg,yg,data['T_equiv_rack'],levels=40,cmap="jet",latlon=True)cbar=m.colorbar(cs,location='bottom',pad="5%")cbar.set_label('Equivalent Temperature, Rack (C)')plt.show()Change Log0.2 Added multiple activation energies to equivalent temperature dataset.