# coding=utf-8
"""Energy flux data type."""
from __future__ import division
from .base import DataTypeBase
from .energyintensity import EnergyIntensity, Radiation, GlobalHorizontalRadiation, \
DirectNormalRadiation, DiffuseHorizontalRadiation, DirectHorizontalRadiation
[docs]class EnergyFlux(DataTypeBase):
"""Energy Flux
"""
_units = ('W/m2', 'Btu/h-ft2', 'kW/m2', 'kBtu/h-ft2', 'W/ft2', 'met')
_si_units = ('W/m2', 'kW/m2')
_ip_units = ('Btu/h-ft2', 'kBtu/h-ft2')
_abbreviation = 'J'
_point_in_time = False
_time_aggregated_type = EnergyIntensity
_time_aggregated_factor = 0.001
def _W_m2_to_Btu_hft2(self, value):
return value / 3.15459075
def _W_m2_to_kW_m2(self, value):
return value / 1000.
def _W_m2_to_kBtu_hft2(self, value):
return value / 3154.59075
def _W_m2_to_W_ft2(self, value):
return value / 10.7639
def _W_m2_to_met(self, value):
return value / 58.2
def _Btu_hft2_to_W_m2(self, value):
return value * 3.15459075
def _kW_m2_to_W_m2(self, value):
return value * 1000.
def _kBtu_hft2_to_W_m2(self, value):
return value * 3154.59075
def _W_ft2_to_W_m2(self, value):
return value * 10.7639
def _met_to_W_m2(self, value):
return value * 58.2
[docs] def to_unit(self, values, unit, from_unit):
"""Return values converted to the unit given the input from_unit."""
return self._to_unit_base('W/m2', values, unit, from_unit)
[docs] def to_ip(self, values, from_unit):
"""Return values in IP and the units to which the values have been converted."""
if from_unit in self.ip_units or from_unit == 'met':
return values, from_unit
elif from_unit == 'kW/m2':
return self.to_unit(values, 'kBtu/h-ft2', from_unit), 'kBtu/h-ft2'
else:
return self.to_unit(values, 'Btu/h-ft2', from_unit), 'Btu/h-ft2'
[docs] def to_si(self, values, from_unit):
"""Return values in SI and the units to which the values have been converted."""
if from_unit in self.si_units or from_unit == 'met':
return values, from_unit
elif from_unit == 'kBtu/h-ft2':
return self.to_unit(values, 'kW/m2', from_unit), 'kW/m2'
else:
return self.to_unit(values, 'W/m2', from_unit), 'W/m2'
[docs]class EffectiveRadiantField(EnergyFlux):
_abbreviation = 'ERF'
[docs]class Irradiance(EnergyFlux):
_min = 0
_abbreviation = 'Qsolar'
_time_aggregated_type = Radiation
[docs]class GlobalHorizontalIrradiance(Irradiance):
_abbreviation = 'GHIr'
_time_aggregated_type = GlobalHorizontalRadiation
[docs]class DirectNormalIrradiance(Irradiance):
_abbreviation = 'DNIr'
_time_aggregated_type = DirectNormalRadiation
[docs]class DiffuseHorizontalIrradiance(Irradiance):
_abbreviation = 'DHIr'
_time_aggregated_type = DiffuseHorizontalRadiation
[docs]class DirectHorizontalIrradiance(Irradiance):
_abbreviation = 'DHIr'
_time_aggregated_type = DirectHorizontalRadiation
[docs]class HorizontalInfraredRadiationIntensity(Irradiance):
_abbreviation = 'HIr'
_point_in_time = True