Source code for pvfactors.irradiance.base

"""Module with Base classes for irradiance models"""
import numpy as np


[docs]class BaseModel(object): """Base class for irradiance models""" params = None cats = None irradiance_comp = None def fit(self, *args, **kwargs): """Not implemented""" raise NotImplementedError def transform(self, *args, **kwargs): """Not implemented""" raise NotImplementedError def get_full_modeling_vectors(self, *args, **kwargs): """Not implemented""" raise NotImplementedError @property def gnd_shaded(self): """Not implemented""" raise NotImplementedError @property def gnd_illum(self): """Not implemented""" raise NotImplementedError @property def pvrow_shaded(self): """Not implemented""" raise NotImplementedError @property def pvrow_illum(self): """Not implemented""" raise NotImplementedError @property def sky_luminance(self): """Not implemented""" raise NotImplementedError def get_ts_modeling_vectors(self, pvarray): """Get matrices of summed up irradiance values from a PV array, as well as the inverse reflectivity values (the latter need to be named "inv_rho"), and the total perez irradiance values. Parameters ---------- pvarray : PV array object PV array with the irradiance and reflectivity values Returns ------- irradiance_mat : list Matrix of summed up non-reflective irradiance values for all timeseries surfaces. Dimension = [n_surfaces, n_timesteps] rho_mat : list Matrix of reflectivity values for all timeseries surfaces Dimension = [n_surfaces, n_timesteps] invrho_mat : list List of inverse reflectivity for all timeseries surfaces Dimension = [n_surfaces, n_timesteps] total_perez_mat : list List of total perez transposed irradiance values for all timeseries surfaces Dimension = [n_surfaces, n_timesteps] """ # TODO: this can probably be speeded up irradiance_mat = [] rho_mat = [] invrho_mat = [] total_perez_mat = [] # In principle, the list all ts surfaces should be ordered # with the ts surfaces' indices. ie first element has index 0, etc for ts_surface in pvarray.all_ts_surfaces: value = np.zeros(pvarray.n_states, dtype=float) for component in self.irradiance_comp: value += ts_surface.get_param(component) irradiance_mat.append(value) invrho_mat.append(ts_surface.get_param('inv_rho')) rho_mat.append(ts_surface.get_param('rho')) total_perez_mat.append(ts_surface.get_param('total_perez')) return irradiance_mat, rho_mat, invrho_mat, total_perez_mat def get_summed_components(self, pvarray, absorbed=True): """Get sum of irradiance components for irradiance model, either absorbed or only incident. Parameters ---------- pvarray : PV array object PV array with the irradiance and reflectivity values absorbed : bool, optional Flag to decide whether to use the absorbed components are not (default = True) Returns ------- irradiance_mat : list Matrix of summed up non-reflective irradiance values for all timeseries surfaces. Dimension = [n_surfaces, n_timesteps]""" # Initialize list_components = (self.irradiance_comp_absorbed if absorbed else self.irradiance_comp) # Build list irradiance_mat = [] for ts_surface in pvarray.all_ts_surfaces: value = np.zeros(pvarray.n_states, dtype=float) for component in list_components: value += ts_surface.get_param(component) irradiance_mat.append(value) return np.array(irradiance_mat) def update_ts_surface_sky_term(self, ts_surface, name_sky_term='sky_term'): """Update the 'sky_term' parameter of a timeseries surface. Parameters ---------- ts_surface : :py:class:`~pvfactors.geometry.timeseries.TsSurface` Timeseries surface whose 'sky_term' parameter value we want to update name_sky_term : str, optional Name of the sky term parameter (Default = 'sky_term') """ value = 0. for component in self.irradiance_comp: value += ts_surface.get_param(component) ts_surface.update_params({name_sky_term: value}) def initialize_rho(self, rho_scalar, rho_calculated, default_value): """Initialize reflectivity value: - if a scalar value is passed, use it - otherwise try to use calculated value - else use default value Parameters ---------- rho_scalar : float Global average reflectivity value that is supposed to be used rho_calculated : float Reflectivity value calculated default_value : float Default value to use if everything fails Returns ------- rho_scalar : float Global average reflectivity """ if np.isscalar(rho_scalar): rho_scalar = rho_scalar elif np.isscalar(rho_calculated): rho_scalar = rho_calculated else: rho_scalar = default_value return rho_scalar