Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
celltemp = pvlib.pvsystem.sapm_celltemp(poa, wind, temperature)
# Compute absolute airmass
airmass_relative = pvlib.atmosphere.get_relative_airmass(solarposition['zenith'])
airmass_absolute = pvlib.atmosphere.get_absolute_airmass(airmass_relative)
# Compute aoi
aoi = pvlib.irradiance.aoi(location['Latitude'], 180, solarposition['zenith'],
solarposition['azimuth'])
# Compute effective irradiance
Ee = pvlib.pvsystem.sapm_effective_irradiance(poa, poa_diffuse, airmass_absolute,
aoi, sapm_parameters)
# Run SAPM
sapm_model = pvlib.pvsystem.sapm(Ee, celltemp['temp_cell'], sapm_parameters)
# Compute the relative error between observed and predicted DC Power.
# Add the composite signal and run a range test
modeled_dcpower = sapm_model['p_mp']*sapm_parameters['Ns']*sapm_parameters['Np']
dc_power_relative_error = np.abs(dcpower - modeled_dcpower)/dcpower
pm.add_dataframe(dc_power_relative_error.to_frame('DC Power Relative Error'))
pm.check_range([0,0.1], 'DC Power Relative Error')
# Compute normalized efficiency, add the composite signal, and run a range test
P_ref = sapm_parameters['Vmpo']*sapm_parameters['Impo']* \
sapm_parameters['Ns']*sapm_parameters['Np'] # DC Power rating
NE = pecos.pv.normalized_efficiency(dcpower, poa, P_ref)
pm.add_dataframe(NE.to_frame('Normalized Efficiency'))
pm.check_range([0.8, 1.2], 'Normalized Efficiency')
# Compute energy
data = pd.concat([data, pvlib.pvsystem.sapm_celltemp(
poa_global=data['poa_global'],
wind_speed=data['v_wind'],
temp_air=data['temp_air_celsius'],
model='Open_rack_cell_polymerback')], axis=1, join='inner')
# Retrieve the module data object
module_data = self.fetch_module_data(**kwargs)
data['effective_irradiance'] = pvlib.pvsystem.sapm_effective_irradiance(
poa_direct=data['poa_direct'], poa_diffuse=data['poa_diffuse'],
airmass_absolute=data['airmass'], aoi=data['aoi'],
module=module_data)
# Apply the Sandia PV Array Performance Model (SAPM) to get a
data = pd.concat([data, pvlib.pvsystem.sapm(
effective_irradiance=data['effective_irradiance'],
temp_cell=data['temp_cell'],
module=module_data)], axis=1, join='inner')
# Set NaN values to zero
data['p_mp'][
pd.isnull(data['p_mp'])] = 0
return data
def pvmodule_detail(request, pvmodule_id):
pvmod = get_object_or_404(PVModule, pk=pvmodule_id)
fieldnames = PVModule._meta.get_fields()
pvmod_dict = {k.name: getattr(pvmod, k.name) for k in fieldnames}
for k in ['IXO', 'IXXO', 'C4', 'C5', 'C6', 'C7']:
if pvmod_dict[k] is None:
pvmod_dict[k] = 0.
celltemps = np.linspace(0, 100, 5)
effirrad, celltemp = np.meshgrid(np.linspace(0.1, 1, 10), celltemps)
results = sapm(effirrad, celltemp, pvmod_dict)
eff = results['p_mp'] / effirrad / pvmod.Area * 100 / 1000
fig = figure(
x_axis_label='effective irradiance, Ee [suns]',
y_axis_label='efficiency [%]',
title=pvmod.Name,
plot_width=800, plot_height=600, sizing_mode='scale_width'
)
r = fig.multi_line(
effirrad.tolist(), eff.tolist(), color=cmap, line_width=4)
legend = Legend(items=[
LegendItem(label='{:d} [C]'.format(int(ct)), renderers=[r], index=n)
for n, ct in enumerate(celltemps)])
fig.add_layout(legend)
plot_script, plot_div = components(fig)
return render(
request, 'pvmodule_detail.html', {