Source code for eureca_building.window

"""
This module includes classes and functions to solve the window system
"""


__author__ = "Enrico Prataviera"
__credits__ = ["Enrico Prataviera"]
__license__ = "MIT"
__version__ = "0.1"
__maintainer__ = "Enrico Prataviera"

import pandas as pd
import numpy as np
from scipy.interpolate import splrep

from eureca_building.exceptions import MaterialPropertyOutsideBoundaries
from eureca_building.units import units, window_material_limits


#%% Simple Window class: refer to EnergyPlus reference


[docs]class SimpleWindow(object): """Defines the simple window model with all its characteristics and apply the simple glazing model to estimates the curve of SHGC(theta) """
[docs] def __init__( self, name: str, u_value: float, solar_heat_gain_coef: float, visible_transmittance: float = 0.9, frame_factor: float = 0.9, shading_coef_int: float = 0.05, shading_coef_ext: float = 0.05, ): """init method. Stores the data and checks them Parameters ---------- name : str name. u_value : float u_value [W/(m2 K)]. solar_heat_gain_coef : float [-]. visible_transmittance : float, default 0.9 [-]. The default is 0.9. frame_factor : float, default 0.9 [-]. The default is 0.9. shading_coef_int : float, default 0.05 [-]. The default is 0.05. shading_coef_ext : float, default 0.05 [-]. The default is 0.05. """ self.name = name self.u_value = u_value self.solar_heat_gain_coef = solar_heat_gain_coef self.visible_transmittance = visible_transmittance self.frame_factor = frame_factor self.shading_coef_int = shading_coef_int self.shading_coef_ext = shading_coef_ext # Runs the simpleGlazingModel self.simpleGlazingModel()
@property def u_value(self) -> float: return self._u_value @u_value.setter def u_value(self, value: float): try: value = float(value) except ValueError: raise TypeError(f"Material {self.name}, u_value is not a float: {value}") if ( value < window_material_limits["window_u_value"][0] or value > window_material_limits["window_u_value"][1] ): # Value in [m]. Take a look to units # Check if thickenss is outside raise MaterialPropertyOutsideBoundaries( self.name, "U_value", lim=window_material_limits["window_u_value"], unit=units["U_value"], value=value, ) self._u_value = value @property def solar_heat_gain_coef(self) -> float: return self._solar_heat_gain_coef @solar_heat_gain_coef.setter def solar_heat_gain_coef(self, value: float): try: value = float(value) except ValueError: raise TypeError( f"Material {self.name}, solar_heat_gain_coef is not a float: {value}" ) if ( value < window_material_limits["solar_heat_gain_coefficient"][0] or value > window_material_limits["solar_heat_gain_coefficient"][1] ): # Value in [m]. Take a look to units # Check if thickenss is outside raise MaterialPropertyOutsideBoundaries( self.name, "solar_heat_gain_coefficient", lim=window_material_limits["solar_heat_gain_coefficient"], unit=units["solar_heat_gain_coefficient"], value=value, ) self._solar_heat_gain_coef = value @property def visible_transmittance(self) -> float: return self._visible_transmittance @visible_transmittance.setter def visible_transmittance(self, value: float): try: value = float(value) except ValueError: raise TypeError( f"Material {self.name}, visible_transmittance is not a float: {value}" ) if ( value < window_material_limits["non_dimensional_coefficient"][0] or value > window_material_limits["non_dimensional_coefficient"][1] ): # Value in [m]. Take a look to units # Check if thickenss is outside raise MaterialPropertyOutsideBoundaries( self.name, "visible_transiƬmittance", lim=window_material_limits["non_dimensional_coefficient"], unit=units["non_dimensional_coefficient"], value=value, ) self._visible_transmittance = value @property def frame_factor(self) -> float: return self._frame_factor @frame_factor.setter def frame_factor(self, value: float): try: value = float(value) except ValueError: raise TypeError( f"Material {self.name}, frame_factor is not a float: {value}" ) if ( value < window_material_limits["non_dimensional_coefficient"][0] or value > window_material_limits["non_dimensional_coefficient"][1] ): # Value in [m]. Take a look to units # Check if thickenss is outside raise MaterialPropertyOutsideBoundaries( self.name, "frame_factor", lim=window_material_limits["non_dimensional_coefficient"], unit=units["non_dimensional_coefficient"], value=value, ) self._frame_factor = value @property def shading_coef_int(self) -> float: return self._shading_coef_int @shading_coef_int.setter def shading_coef_int(self, value: float): try: value = float(value) except ValueError: raise TypeError( f"Material {self.name}, shading_coef_int is not a float: {value}" ) if ( value < window_material_limits["non_dimensional_coefficient"][0] or value > window_material_limits["non_dimensional_coefficient"][1] ): # Value in [m]. Take a look to units # Check if thickenss is outside raise MaterialPropertyOutsideBoundaries( self.name, "shading_coef_int", lim=window_material_limits["non_dimensional_coefficient"], unit=units["non_dimensional_coefficient"], value=value, ) self._shading_coef_int = value @property def shading_coef_ext(self) -> float: return self._shading_coef_int @shading_coef_ext.setter def shading_coef_ext(self, value: float): try: value = float(value) except ValueError: raise TypeError( f"Material {self.name}, shading_coef_ext is not a float: {value}" ) if ( value < window_material_limits["non_dimensional_coefficient"][0] or value > window_material_limits["non_dimensional_coefficient"][1] ): # Value in [m]. Take a look to units # Check if thickenss is outside raise MaterialPropertyOutsideBoundaries( self.name, "shading_coef_ext", lim=window_material_limits["non_dimensional_coefficient"], unit=units["non_dimensional_coefficient"], value=value, ) self._shading_coef_ext = value
[docs] def simpleGlazingModel(self): """Description: This function implement the simplified model for glazing that is used in energy plus The output variables are: - 4 vectors containing solar transmittance, reflectance, absorptance, SHGC in function of the incident angle from 0 to 90, with a 10 step - the solar transmittance, reflectance and absorption at normal incident; - the equivalent conductivity [W/m K] of the glazing material; - the equivalent thickness [m] of the glazing layer; - the visible reflectance on the front side and back side; - the inward flowing fraction; ---------ATTENTION----------- For some combinations of variable SHGC and U the curves are not physically possible,(reflectance > 1). For this reason it is necessary to manipulate the final reflectance and transmittance vectors to manage the curves. It is also necessary to force the absolute reflectance to be 1 and the absolute transmittance to be 0 for the perpendicular incidence. Controlling input variable """ if self.u_value < 0: print("Negative window U-value. Simulation won" "t proceed.") return if self.u_value > 7: print( "U-value may be to high, the model could evaluate un-proper output variable." ) if self.solar_heat_gain_coef < 0 or self.solar_heat_gain_coef > 1: print("Solar gain of the window not allowed. Simulation won" "t proceed.") return # Calculation of thermal resistances W/m^2 K if self.u_value < 5.85: self.Ri_w = 1 / (0.359073 * np.log(self.u_value) + 6.949915) else: self.Ri_w = 1 / (1.788041 * self.u_value - 2.886625) self.Ro_w = 1 / (0.025342 * self.u_value + 29.163853) self.Rl_w = 1 / self.u_value - self.Ro_w - self.Ri_w if 1 / self.Rl_w > 7: # Thickness d of the equivalent layer, m self.d = 0.002 else: self.d = 0.05914 - 0.00714 / self.Rl_w self.Keff = ( self.d / self.Rl_w ) # Thermal conductivity of the representative layer, W/m K # Calculation of solar transmittance for normal incident if self.u_value > 4.5: if self.solar_heat_gain_coef < 0.7206: self.Ts = (0.939998 * self.solar_heat_gain_coef ** 2) + ( 0.20332 * self.solar_heat_gain_coef ) else: self.Ts = (1.30415 * self.solar_heat_gain_coef) - 0.30515 elif self.u_value < 3.4: if self.solar_heat_gain_coef <= 0.15: self.Ts = 0.41040 * self.solar_heat_gain_coef else: self.Ts = ( (0.085775 * self.solar_heat_gain_coef ** 2) + (0.963954 * self.solar_heat_gain_coef) - 0.084958 ) else: if self.solar_heat_gain_coef <= 0.15: self.Ts_1 = (0.939998 * self.solar_heat_gain_coef ** 2) + ( 0.20332 * self.solar_heat_gain_coef ) self.Ts_2 = 0.41040 * self.solar_heat_gain_coef self.Ts = self.Ts_2 + (self.Ts_1 - self.Ts_2) / (4.5 - 3.4) * ( self.u_value - 3.4 ) elif ( self.solar_heat_gain_coef > 0.15 and self.solar_heat_gain_coef < 0.7206 ): self.Ts_1 = (0.939998 * self.solar_heat_gain_coef ** 2) + ( 0.20332 * self.solar_heat_gain_coef ) self.Ts_2 = ( (0.085775 * self.solar_heat_gain_coef ** 2) + (0.963954 * self.solar_heat_gain_coef) - 0.084958 ) self.Ts = self.Ts_2 + (self.Ts_1 - self.Ts_2) / (4.5 - 3.4) * ( self.u_value - 3.4 ) else: self.Ts_1 = (1.30415 * self.solar_heat_gain_coef) - 0.30515 self.Ts_2 = ( (0.085775 * self.solar_heat_gain_coef ** 2) + (0.963954 * self.solar_heat_gain_coef) - 0.084958 ) self.Ts = self.Ts_2 + (self.Ts_1 - self.Ts_2) / (4.5 - 3.4) * ( self.u_value - 3.4 ) # Calculation of inside and outside film resistances in summer condition self.x = self.solar_heat_gain_coef - self.Ts if self.u_value > 4.5: self.Ri_s = 1 / ( (29.436546 * self.x ** 3) - (21.943415 * self.x ** 2) + (9.945872 * self.x) + 7.426151 ) self.Ro_s = 1 / ((2.225824 * self.x) + 20.577080) elif self.u_value < 3.4: self.Ri_s = 1 / ( (199.8208128 * self.x ** 3) - (90.639733 * self.x ** 2) + (19.737055 * self.x) + 6.766575 ) self.Ro_s = 1 / ((4.475553 * self.x) + 20.674424) else: self.Ri_s_1 = 1 / ( (29.436546 * self.x ** 3) - (21.943415 * self.x ** 2) + (9.945872 * self.x) + 7.426151 ) self.Ri_s_2 = 1 / ( (199.8208128 * self.x ** 3) - (90.639733 * self.x ** 2) + (19.737055 * self.x) + 6.766575 ) self.Ri_s = self.Ri_s_2 + (self.Ri_s_1 - self.Ri_s_2) / (4.5 - 3.4) * ( self.u_value - 3.4 ) self.Ro_s_1 = 1 / ((2.225824 * self.x) + 20.577080) self.Ro_s_2 = 1 / ((4.475553 * self.x) + 20.674424) self.Ro_s = self.Ro_s_2 + (self.Ro_s_1 - self.Ro_s_2) / (4.5 - 3.4) * ( self.u_value - 3.4 ) # Inward flowing fraction self.Rl = self.Rl_w self.N = (self.Ro_s + 0.5 * self.Rl) / (self.Ro_s + self.Rl + self.Ri_s) self.As = self.x / self.N self.Rs_f = 1 - self.Ts - self.As self.Rs_b = self.Rs_f # Evaluating the visible proprties of the equivalent layer self.Rv_f = ( -0.0622 * self.visible_transmittance ** 3 + 0.4277 * self.visible_transmittance ** 2 - 0.4169 * self.visible_transmittance + 0.2399 ) self.Rv_b = ( -0.7409 * self.visible_transmittance ** 3 + 1.6531 * self.visible_transmittance ** 2 - 1.2299 * self.visible_transmittance + 0.4545 ) # Definition of the polinomials # Loading polynomial coefficients TransCoef = [ [0.014700000, 1.486000000, -3.852000000, 3.355000000, -0.001474000], [0.554600000, 0.035630000, -2.416000000, 2.831000000, -0.002037000], [0.770900000, -0.638300000, -1.576000000, 2.448000000, -0.002042000], [0.346200000, 0.396300000, -2.582000000, 2.845000000, -0.000280400], [2.883000000, -5.873000000, 2.489000000, 1.510000000, -0.002577000], [3.025000000, -6.366000000, 3.137000000, 1.213000000, -0.001367000], [3.229000000, -6.844000000, 3.535000000, 1.088000000, -0.002891000], [3.334000000, -7.131000000, 3.829000000, 0.976600000, -0.002952000], [3.146000000, -6.855000000, 3.931000000, 0.786000000, -0.002934000], [3.744000000, -8.836000000, 6.018000000, 0.084070000, 0.000482500], ] RefCoef = [ [16.320000, -57.820000, 79.240000, -50.080000, 13.340000], [40.480000, -119.300000, 134.800000, -70.970000, 16.110000], [57.490000, -164.500000, 178.000000, -88.750000, 18.840000], [5.714000, -16.670000, 18.630000, -9.756000, 3.074000], [-0.548800, -6.498000, 21.200000, -20.970000, 7.814000], [4.290000, -12.670000, 14.660000, -8.153000, 2.871000], [21.740000, -64.440000, 74.890000, -41.790000, 10.620000], [4.341000, -12.800000, 14.780000, -8.203000, 2.879000], [41.360000, -117.800000, 127.600000, -64.370000, 14.260000], [4.490000, -12.660000, 13.970000, -7.501000, 2.693000], ] # Defining the 10 correlations Ts_A = ( lambda Cos: TransCoef[0][0] * Cos ** 4 + TransCoef[0][1] * Cos ** 3 + TransCoef[0][2] * Cos ** 2 + TransCoef[0][3] * Cos + TransCoef[0][4] ) Ts_B = ( lambda Cos: TransCoef[1][0] * Cos ** 4 + TransCoef[1][1] * Cos ** 3 + TransCoef[1][2] * Cos ** 2 + TransCoef[1][3] * Cos + TransCoef[1][4] ) Ts_C = ( lambda Cos: TransCoef[2][0] * Cos ** 4 + TransCoef[2][1] * Cos ** 3 + TransCoef[2][2] * Cos ** 2 + TransCoef[2][3] * Cos + TransCoef[2][4] ) Ts_D = ( lambda Cos: TransCoef[3][0] * Cos ** 4 + TransCoef[3][1] * Cos ** 3 + TransCoef[3][2] * Cos ** 2 + TransCoef[3][3] * Cos + TransCoef[3][4] ) Ts_E = ( lambda Cos: TransCoef[4][0] * Cos ** 4 + TransCoef[4][1] * Cos ** 3 + TransCoef[4][2] * Cos ** 2 + TransCoef[4][3] * Cos + TransCoef[4][4] ) Ts_F = ( lambda Cos: TransCoef[5][0] * Cos ** 4 + TransCoef[5][1] * Cos ** 3 + TransCoef[5][2] * Cos ** 2 + TransCoef[5][3] * Cos + TransCoef[5][4] ) Ts_G = ( lambda Cos: TransCoef[6][0] * Cos ** 4 + TransCoef[6][1] * Cos ** 3 + TransCoef[6][2] * Cos ** 2 + TransCoef[6][3] * Cos + TransCoef[6][4] ) Ts_H = ( lambda Cos: TransCoef[7][0] * Cos ** 4 + TransCoef[7][1] * Cos ** 3 + TransCoef[7][2] * Cos ** 2 + TransCoef[7][3] * Cos + TransCoef[7][4] ) Ts_I = ( lambda Cos: TransCoef[8][0] * Cos ** 4 + TransCoef[8][1] * Cos ** 3 + TransCoef[8][2] * Cos ** 2 + TransCoef[8][3] * Cos + TransCoef[8][4] ) Ts_J = ( lambda Cos: TransCoef[9][0] * Cos ** 4 + TransCoef[9][1] * Cos ** 3 + TransCoef[9][2] * Cos ** 2 + TransCoef[9][3] * Cos + TransCoef[9][4] ) Rs_A = ( lambda Cos: RefCoef[0][0] * Cos ** 4 + RefCoef[0][1] * Cos ** 3 + RefCoef[0][2] * Cos ** 2 + RefCoef[0][3] * Cos + RefCoef[0][4] ) Rs_B = ( lambda Cos: RefCoef[1][0] * Cos ** 4 + RefCoef[1][1] * Cos ** 3 + RefCoef[1][2] * Cos ** 2 + RefCoef[1][3] * Cos + RefCoef[1][4] ) Rs_C = ( lambda Cos: RefCoef[2][0] * Cos ** 4 + RefCoef[2][1] * Cos ** 3 + RefCoef[2][2] * Cos ** 2 + RefCoef[2][3] * Cos + RefCoef[2][4] ) Rs_D = ( lambda Cos: RefCoef[3][0] * Cos ** 4 + RefCoef[3][1] * Cos ** 3 + RefCoef[3][2] * Cos ** 2 + RefCoef[3][3] * Cos + RefCoef[3][4] ) Rs_E = ( lambda Cos: RefCoef[4][0] * Cos ** 4 + RefCoef[4][1] * Cos ** 3 + RefCoef[4][2] * Cos ** 2 + RefCoef[4][3] * Cos + RefCoef[4][4] ) Rs_F = ( lambda Cos: RefCoef[5][0] * Cos ** 4 + RefCoef[5][1] * Cos ** 3 + RefCoef[5][2] * Cos ** 2 + RefCoef[5][3] * Cos + RefCoef[5][4] ) Rs_G = ( lambda Cos: RefCoef[6][0] * Cos ** 4 + RefCoef[6][1] * Cos ** 3 + RefCoef[6][2] * Cos ** 2 + RefCoef[6][3] * Cos + RefCoef[6][4] ) Rs_H = ( lambda Cos: RefCoef[7][0] * Cos ** 4 + RefCoef[7][1] * Cos ** 3 + RefCoef[7][2] * Cos ** 2 + RefCoef[7][3] * Cos + RefCoef[7][4] ) Rs_I = ( lambda Cos: RefCoef[8][0] * Cos ** 4 + RefCoef[8][1] * Cos ** 3 + RefCoef[8][2] * Cos ** 2 + RefCoef[8][3] * Cos + RefCoef[8][4] ) Rs_J = ( lambda Cos: RefCoef[9][0] * Cos ** 4 + RefCoef[9][1] * Cos ** 3 + RefCoef[9][2] * Cos ** 2 + RefCoef[9][3] * Cos + RefCoef[9][4] ) # Evaluating curves for each zone alpha = np.linspace(10, 90, 9) Cosalpha = np.cos(np.deg2rad(alpha)) if self.u_value <= 1.42 and self.solar_heat_gain_coef > 0.45: # Zone 1 Ts_alpha = Ts_E(Cosalpha) Rs_alpha = Rs_E(Cosalpha) Ts_abs_alpha = self.Ts * np.concatenate(([1], Ts_alpha)) Rs_abs_alpha = self.Rs_f * np.concatenate(([1], Rs_alpha)) elif ( self.u_value <= 1.42 and self.solar_heat_gain_coef <= 0.45 and self.solar_heat_gain_coef > 0.35 ): # Zone 2 linear interpolation Ts1 = Ts_J(Cosalpha) Rs1 = Rs_J(Cosalpha) Ts2 = Ts_E(Cosalpha) Rs2 = Rs_E(Cosalpha) Ts_alpha = Ts1 + (Ts2 - Ts1) * (self.solar_heat_gain_coef - 0.35) / ( 0.45 - 0.35 ) Rs_alpha = Rs1 + (Rs2 - Rs1) * (self.solar_heat_gain_coef - 0.35) / ( 0.45 - 0.35 ) Ts_abs_alpha = self.Ts * np.concatenate(([1], Ts_alpha)) Rs_abs_alpha = self.Rs_f * np.concatenate(([1], Rs_alpha)) elif self.u_value <= 1.42 and self.solar_heat_gain_coef <= 0.35: # Zone 3 Ts_alpha = Ts_J(Cosalpha) Rs_alpha = Rs_J(Cosalpha) Ts_abs_alpha = self.Ts * np.concatenate(([1], Ts_alpha)) Rs_abs_alpha = self.Rs_f * np.concatenate(([1], Rs_alpha)) elif ( self.u_value > 1.42 and self.u_value <= 1.7 and self.solar_heat_gain_coef > 0.55 ): # Zone 4 linear interpolation Ts1 = Ts_E(Cosalpha) Rs1 = Rs_E(Cosalpha) Ts2 = Ts_E(Cosalpha) Rs2 = Rs_E(Cosalpha) Ts_alpha = Ts1 + (Ts2 - Ts1) * (self.u_value - 1.42) / (1.7 - 1.42) Rs_alpha = Rs1 + (Rs2 - Rs1) * (self.u_value - 1.42) / (1.7 - 1.42) Ts_abs_alpha = self.Ts * np.concatenate(([1], Ts_alpha)) Rs_abs_alpha = self.Rs_f * np.concatenate(([1], Rs_alpha)) elif ( self.u_value > 1.42 and self.u_value <= 1.7 and self.solar_heat_gain_coef <= 0.55 and self.solar_heat_gain_coef > 0.5 ): # Zone 5 bilinear interpolation Ts11 = Ts_E(Cosalpha) Rs11 = Rs_E(Cosalpha) Ts12 = Ts_E(Cosalpha) Rs12 = Rs_E(Cosalpha) Ts21 = np.mean( [Ts_F(Cosalpha), Ts_G(Cosalpha), Ts_H(Cosalpha), Ts_I(Cosalpha)], axis=0 ) Rs21 = np.mean( [Rs_F(Cosalpha), Rs_G(Cosalpha), Rs_H(Cosalpha), Rs_I(Cosalpha)], axis=0 ) Ts22 = Ts_E(Cosalpha) Rs22 = Rs_E(Cosalpha) Ts_alpha = ( Ts11 * (0.55 - self.solar_heat_gain_coef) * (1.7 - self.u_value) + Ts21 * (self.solar_heat_gain_coef - 0.5) * (1.7 - self.u_value) + Ts12 * (0.55 - self.solar_heat_gain_coef) * (self.u_value - 1.42) + Ts22 * (self.solar_heat_gain_coef - 0.5) * (self.u_value - 1.42) ) / ((0.55 - 0.5) * (1.7 - 1.42)) Rs_alpha = ( Rs11 * (0.55 - self.solar_heat_gain_coef) * (1.7 - self.u_value) + Rs21 * (self.solar_heat_gain_coef - 0.5) * (1.7 - self.u_value) + Rs12 * (0.55 - self.solar_heat_gain_coef) * (self.u_value - 1.42) + Rs22 * (self.solar_heat_gain_coef - 0.5) * (self.u_value - 1.42) ) / ((0.55 - 0.5) * (1.7 - 1.42)) Ts_abs_alpha = self.Ts * np.concatenate(([1], Ts_alpha)) Rs_abs_alpha = self.Rs_f * np.concatenate(([1], Rs_alpha)) elif ( self.u_value > 1.42 and self.u_value <= 1.7 and self.solar_heat_gain_coef <= 0.5 and self.solar_heat_gain_coef > 0.45 ): # Zone 6 linear interpolation Ts1 = Ts_E(Cosalpha) Rs1 = Rs_E(Cosalpha) Ts2 = np.mean( [Ts_F(Cosalpha), Ts_G(Cosalpha), Ts_H(Cosalpha), Ts_I(Cosalpha)], axis=0 ) Rs2 = np.mean( [Rs_F(Cosalpha), Rs_G(Cosalpha), Rs_H(Cosalpha), Rs_I(Cosalpha)], axis=0 ) Ts_alpha = Ts1 + (Ts2 - Ts1) * (self.u_value - 1.42) / (1.7 - 1.42) Rs_alpha = Rs1 + (Rs2 - Rs1) * (self.u_value - 1.42) / (1.7 - 1.42) Ts_abs_alpha = self.Ts * np.concatenate(([1], Ts_alpha)) Rs_abs_alpha = self.Rs_f * np.concatenate(([1], Rs_alpha)) elif ( self.u_value > 1.42 and self.u_value <= 1.7 and self.solar_heat_gain_coef <= 0.45 and self.solar_heat_gain_coef > 0.35 ): # Zone 7 bilinear interpolation Ts11 = Ts_J(Cosalpha) Rs11 = Rs_J(Cosalpha) Ts12 = Ts_E(Cosalpha) Rs12 = Rs_E(Cosalpha) Ts21 = np.mean( [Ts_F(Cosalpha), Ts_G(Cosalpha), Ts_H(Cosalpha), Ts_I(Cosalpha)], axis=0 ) Rs21 = np.mean( [Rs_F(Cosalpha), Rs_G(Cosalpha), Rs_H(Cosalpha), Rs_I(Cosalpha)], axis=0 ) Ts22 = np.mean( [Ts_F(Cosalpha), Ts_G(Cosalpha), Ts_H(Cosalpha), Ts_I(Cosalpha)], axis=0 ) Rs22 = np.mean( [Rs_F(Cosalpha), Rs_G(Cosalpha), Rs_H(Cosalpha), Rs_I(Cosalpha)], axis=0 ) Ts_alpha = ( Ts11 * (0.45 - self.solar_heat_gain_coef) * (1.7 - self.u_value) + Ts21 * (self.solar_heat_gain_coef - 0.35) * (1.7 - self.u_value) + Ts12 * (0.45 - self.solar_heat_gain_coef) * (self.u_value - 1.42) + Ts22 * (self.solar_heat_gain_coef - 0.35) * (self.u_value - 1.42) ) / ((0.45 - 0.35) * (1.7 - 1.42)) Rs_alpha = ( Rs11 * (0.45 - self.solar_heat_gain_coef) * (1.7 - self.u_value) + Rs21 * (self.solar_heat_gain_coef - 0.35) * (1.7 - self.u_value) + Rs12 * (0.45 - self.solar_heat_gain_coef) * (self.u_value - 1.42) + Rs22 * (self.solar_heat_gain_coef - 0.35) * (self.u_value - 1.42) ) / ((0.45 - 0.35) * (1.7 - 1.42)) Ts_abs_alpha = self.Ts * np.concatenate(([1], Ts_alpha)) Rs_abs_alpha = self.Rs_f * np.concatenate(([1], Rs_alpha)) elif ( self.u_value > 1.42 and self.u_value <= 1.7 and self.solar_heat_gain_coef <= 0.35 and self.solar_heat_gain_coef > 0.3 ): # Zone 8 linear interpolation Ts1 = Ts_J(Cosalpha) Rs1 = Rs_J(Cosalpha) Ts2 = np.mean( [Ts_F(Cosalpha), Ts_G(Cosalpha), Ts_H(Cosalpha), Ts_I(Cosalpha)], axis=0 ) Rs2 = np.mean( [Rs_F(Cosalpha), Rs_G(Cosalpha), Rs_H(Cosalpha), Rs_I(Cosalpha)], axis=0 ) Ts_alpha = Ts1 + (Ts2 - Ts1) * (self.u_value - 1.42) / (1.7 - 1.42) Rs_alpha = Rs1 + (Rs2 - Rs1) * (self.u_value - 1.42) / (1.7 - 1.42) Ts_abs_alpha = self.Ts * np.concatenate(([1], Ts_alpha)) Rs_abs_alpha = self.Rs_f * np.concatenate(([1], Rs_alpha)) elif ( self.u_value > 1.42 and self.u_value <= 1.7 and self.solar_heat_gain_coef <= 0.3 and self.solar_heat_gain_coef > 0.25 ): # Zone 9 bilinear interpolation Ts11 = Ts_J(Cosalpha) Rs11 = Rs_J(Cosalpha) Ts12 = Ts_J(Cosalpha) Rs12 = Rs_J(Cosalpha) Ts21 = np.mean([Ts_F(Cosalpha), Ts_H(Cosalpha)], axis=0) Rs21 = np.mean([Rs_F(Cosalpha), Rs_H(Cosalpha)], axis=0) Ts22 = np.mean( [Ts_F(Cosalpha), Ts_G(Cosalpha), Ts_H(Cosalpha), Ts_I(Cosalpha)], axis=0 ) Rs22 = np.mean( [Rs_F(Cosalpha), Rs_G(Cosalpha), Rs_H(Cosalpha), Rs_I(Cosalpha)], axis=0 ) Ts_alpha = ( Ts11 * (0.30 - self.solar_heat_gain_coef) * (1.7 - self.u_value) + Ts21 * (self.solar_heat_gain_coef - 0.25) * (1.7 - self.u_value) + Ts12 * (0.30 - self.solar_heat_gain_coef) * (self.u_value - 1.42) + Ts22 * (self.solar_heat_gain_coef - 0.25) * (self.u_value - 1.42) ) / ((0.30 - 0.25) * (1.7 - 1.42)) Rs_alpha = ( Rs11 * (0.30 - self.solar_heat_gain_coef) * (1.7 - self.u_value) + Rs21 * (self.solar_heat_gain_coef - 0.25) * (1.7 - self.u_value) + Rs12 * (0.30 - self.solar_heat_gain_coef) * (self.u_value - 1.42) + Rs22 * (self.solar_heat_gain_coef - 0.25) * (self.u_value - 1.42) ) / ((0.30 - 0.25) * (1.7 - 1.42)) Ts_abs_alpha = self.Ts * np.concatenate(([1], Ts_alpha)) Rs_abs_alpha = self.Rs_f * np.concatenate(([1], Rs_alpha)) elif ( self.u_value > 1.42 and self.u_value <= 1.7 and self.solar_heat_gain_coef <= 0.25 ): # Zone 10 linear interpolation Ts1 = Ts_J(Cosalpha) Rs1 = Rs_J(Cosalpha) Ts2 = np.mean([Ts_F(Cosalpha), Ts_H(Cosalpha)], axis=0) Rs2 = np.mean([Rs_F(Cosalpha), Rs_H(Cosalpha)], axis=0) Ts_alpha = Ts1 + (Ts2 - Ts1) * (self.u_value - 1.42) / (1.7 - 1.42) Rs_alpha = Rs1 + (Rs2 - Rs1) * (self.u_value - 1.42) / (1.7 - 1.42) Ts_abs_alpha = self.Ts * np.concatenate(([1], Ts_alpha)) Rs_abs_alpha = self.Rs_f * np.concatenate(([1], Rs_alpha)) elif ( self.u_value <= 3.41 and self.u_value > 1.7 and self.solar_heat_gain_coef > 0.55 ): # Zone 11 Ts_alpha = Ts_E(Cosalpha) Rs_alpha = Rs_E(Cosalpha) Ts_abs_alpha = self.Ts * np.concatenate(([1], Ts_alpha)) Rs_abs_alpha = self.Rs_f * np.concatenate(([1], Rs_alpha)) elif ( self.u_value <= 3.41 and self.u_value > 1.7 and self.solar_heat_gain_coef <= 0.55 and self.solar_heat_gain_coef > 0.5 ): # Zone 12 Ts1 = np.mean( [Ts_F(Cosalpha), Ts_G(Cosalpha), Ts_H(Cosalpha), Ts_I(Cosalpha)], axis=0 ) Rs1 = np.mean( [Rs_F(Cosalpha), Rs_G(Cosalpha), Rs_H(Cosalpha), Rs_I(Cosalpha)], axis=0 ) Ts2 = Ts_E(Cosalpha) Rs2 = Rs_E(Cosalpha) Ts_alpha = Ts1 + (Ts2 - Ts1) * (self.solar_heat_gain_coef - 0.5) / ( 0.55 - 0.5 ) Rs_alpha = Rs1 + (Rs2 - Rs1) * (self.solar_heat_gain_coef - 0.5) / ( 0.55 - 0.5 ) Ts_abs_alpha = self.Ts * np.concatenate(([1], Ts_alpha)) Rs_abs_alpha = self.Rs_f * np.concatenate(([1], Rs_alpha)) elif ( self.u_value <= 3.41 and self.u_value > 1.7 and self.solar_heat_gain_coef <= 0.5 and self.solar_heat_gain_coef > 0.3 ): # Zone 13 Ts_alpha = np.mean( [Ts_F(Cosalpha), Ts_G(Cosalpha), Ts_H(Cosalpha), Ts_I(Cosalpha)], axis=0 ) Rs_alpha = np.mean( [Rs_F(Cosalpha), Rs_G(Cosalpha), Rs_H(Cosalpha), Rs_I(Cosalpha)], axis=0 ) Ts_abs_alpha = self.Ts * np.concatenate(([1], Ts_alpha)) Rs_abs_alpha = self.Rs_f * np.concatenate(([1], Rs_alpha)) elif ( self.u_value <= 3.41 and self.u_value > 1.7 and self.solar_heat_gain_coef <= 0.3 and self.solar_heat_gain_coef > 0.25 ): # Zone 14 Ts1 = np.mean([Ts_F(Cosalpha), Ts_H(Cosalpha)], axis=0) Rs1 = np.mean([Rs_F(Cosalpha), Rs_H(Cosalpha)], axis=0) Ts2 = np.mean( [Ts_F(Cosalpha), Ts_G(Cosalpha), Ts_H(Cosalpha), Ts_I(Cosalpha)], axis=0 ) Rs2 = np.mean( [Rs_F(Cosalpha), Rs_G(Cosalpha), Rs_H(Cosalpha), Rs_I(Cosalpha)], axis=0 ) Ts_alpha = Ts1 + (Ts2 - Ts1) * (self.solar_heat_gain_coef - 0.25) / ( 0.3 - 0.25 ) Rs_alpha = Rs1 + (Rs2 - Rs1) * (self.solar_heat_gain_coef - 0.25) / ( 0.3 - 0.25 ) Ts_abs_alpha = self.Ts * np.concatenate(([1], Ts_alpha)) Rs_abs_alpha = self.Rs_f * np.concatenate(([1], Rs_alpha)) elif ( self.u_value <= 3.41 and self.u_value > 1.7 and self.solar_heat_gain_coef <= 0.25 ): # Zone 15 Ts_alpha = np.mean([Ts_F(Cosalpha), Ts_H(Cosalpha)], axis=0) Rs_alpha = np.mean([Rs_F(Cosalpha), Rs_H(Cosalpha)], axis=0) Ts_abs_alpha = self.Ts * np.concatenate(([1], Ts_alpha)) Rs_abs_alpha = self.Rs_f * np.concatenate(([1], Rs_alpha)) elif ( self.u_value > 3.41 and self.u_value <= 4.54 and self.solar_heat_gain_coef > 0.65 ): # Zone 16 linear interpolation Ts1 = Ts_E(Cosalpha) Rs1 = Rs_E(Cosalpha) Ts2 = Ts_A(Cosalpha) Rs2 = Rs_A(Cosalpha) Ts_alpha = Ts1 + (Ts2 - Ts1) * (self.u_value - 3.41) / (4.54 - 3.41) Rs_alpha = Rs1 + (Rs2 - Rs1) * (self.u_value - 3.41) / (4.54 - 3.41) Ts_abs_alpha = self.Ts * np.concatenate(([1], Ts_alpha)) Rs_abs_alpha = self.Rs_f * np.concatenate(([1], Rs_alpha)) elif ( self.u_value > 3.41 and self.u_value <= 4.54 and self.solar_heat_gain_coef <= 0.65 and self.solar_heat_gain_coef > 0.6 ): # Zone 17 bilinear interpolation Ts11 = Ts_E(Cosalpha) Rs11 = Rs_E(Cosalpha) Ts12 = Ts_E(Cosalpha) Rs12 = Rs_E(Cosalpha) Ts21 = np.mean( [Ts_B(Cosalpha), Ts_D(Cosalpha), Ts_C(Cosalpha), Ts_D(Cosalpha)], axis=0 ) Rs21 = np.mean( [Rs_B(Cosalpha), Rs_D(Cosalpha), Rs_C(Cosalpha), Rs_D(Cosalpha)], axis=0 ) Ts22 = Ts_A(Cosalpha) Rs22 = Rs_A(Cosalpha) Ts_alpha = ( Ts11 * (0.65 - self.solar_heat_gain_coef) * (4.54 - self.u_value) + Ts21 * (self.solar_heat_gain_coef - 0.6) * (4.54 - self.u_value) + Ts12 * (0.65 - self.solar_heat_gain_coef) * (self.u_value - 3.41) + Ts22 * (self.solar_heat_gain_coef - 0.6) * (self.u_value - 3.41) ) / ((0.65 - 0.6) * (4.54 - 3.41)) Rs_alpha = ( Rs11 * (0.65 - self.solar_heat_gain_coef) * (4.54 - self.u_value) + Rs21 * (self.solar_heat_gain_coef - 0.6) * (4.54 - self.u_value) + Rs12 * (0.65 - self.solar_heat_gain_coef) * (self.u_value - 3.41) + Rs22 * (self.solar_heat_gain_coef - 0.6) * (self.u_value - 3.41) ) / ((0.65 - 0.6) * (4.54 - 3.41)) Ts_abs_alpha = self.Ts * np.concatenate(([1], Ts_alpha)) Rs_abs_alpha = self.Rs_f * np.concatenate(([1], Rs_alpha)) elif ( self.u_value > 3.41 and self.u_value <= 4.54 and self.solar_heat_gain_coef <= 0.6 and self.solar_heat_gain_coef > 0.55 ): # Zone 18 linear interpolation Ts1 = Ts_E(Cosalpha) Rs1 = Rs_E(Cosalpha) Ts2 = np.mean( [Ts_B(Cosalpha), Ts_D(Cosalpha), Ts_C(Cosalpha), Ts_D(Cosalpha)], axis=0 ) Rs2 = np.mean( [Rs_B(Cosalpha), Rs_D(Cosalpha), Rs_C(Cosalpha), Rs_D(Cosalpha)], axis=0 ) Ts_alpha = Ts1 + (Ts2 - Ts1) * (self.u_value - 3.41) / (4.54 - 3.41) Rs_alpha = Rs1 + (Rs2 - Rs1) * (self.u_value - 3.41) / (4.54 - 3.41) Ts_abs_alpha = self.Ts * np.concatenate(([1], Ts_alpha)) Rs_abs_alpha = self.Rs_f * np.concatenate(([1], Rs_alpha)) elif ( self.u_value > 3.41 and self.u_value <= 4.54 and self.solar_heat_gain_coef <= 0.55 and self.solar_heat_gain_coef > 0.5 ): # Zone 19 bilinear interpolation Ts11 = np.mean( [Ts_F(Cosalpha), Ts_G(Cosalpha), Ts_H(Cosalpha), Ts_I(Cosalpha)], axis=0 ) Rs11 = np.mean( [Rs_F(Cosalpha), Rs_G(Cosalpha), Rs_H(Cosalpha), Rs_I(Cosalpha)], axis=0 ) Ts12 = Ts_E(Cosalpha) Rs12 = Rs_E(Cosalpha) Ts21 = np.mean( [Ts_B(Cosalpha), Ts_D(Cosalpha), Ts_C(Cosalpha), Ts_D(Cosalpha)], axis=0 ) Rs21 = np.mean( [Rs_B(Cosalpha), Rs_D(Cosalpha), Rs_C(Cosalpha), Rs_D(Cosalpha)], axis=0 ) Ts22 = np.mean( [Ts_B(Cosalpha), Ts_D(Cosalpha), Ts_C(Cosalpha), Ts_D(Cosalpha)], axis=0 ) Rs22 = np.mean( [Rs_B(Cosalpha), Rs_D(Cosalpha), Rs_C(Cosalpha), Rs_D(Cosalpha)], axis=0 ) Ts_alpha = ( Ts11 * (0.55 - self.solar_heat_gain_coef) * (4.54 - self.u_value) + Ts21 * (self.solar_heat_gain_coef - 0.5) * (4.54 - self.u_value) + Ts12 * (0.55 - self.solar_heat_gain_coef) * (self.u_value - 3.41) + Ts22 * (self.solar_heat_gain_coef - 0.5) * (self.u_value - 3.41) ) / ((0.55 - 0.5) * (4.54 - 3.41)) Rs_alpha = ( Rs11 * (0.55 - self.solar_heat_gain_coef) * (4.54 - self.u_value) + Rs21 * (self.solar_heat_gain_coef - 0.5) * (4.54 - self.u_value) + Rs12 * (0.55 - self.solar_heat_gain_coef) * (self.u_value - 3.41) + Rs22 * (self.solar_heat_gain_coef - 0.5) * (self.u_value - 3.41) ) / ((0.55 - 0.5) * (4.54 - 3.41)) Ts_abs_alpha = self.Ts * np.concatenate(([1], Ts_alpha)) Rs_abs_alpha = self.Rs_f * np.concatenate(([1], Rs_alpha)) elif ( self.u_value > 3.41 and self.u_value <= 4.54 and self.solar_heat_gain_coef <= 0.5 and self.solar_heat_gain_coef > 0.45 ): # Zone 20 linear interpolation Ts1 = np.mean( [Ts_F(Cosalpha), Ts_G(Cosalpha), Ts_H(Cosalpha), Ts_I(Cosalpha)], axis=0 ) Rs1 = np.mean( [Rs_F(Cosalpha), Rs_G(Cosalpha), Rs_H(Cosalpha), Rs_I(Cosalpha)], axis=0 ) Ts2 = np.mean( [Ts_B(Cosalpha), Ts_D(Cosalpha), Ts_C(Cosalpha), Ts_D(Cosalpha)], axis=0 ) Rs2 = np.mean( [Rs_B(Cosalpha), Rs_D(Cosalpha), Rs_C(Cosalpha), Rs_D(Cosalpha)], axis=0 ) Ts_alpha = Ts1 + (Ts2 - Ts1) * (self.u_value - 3.41) / (4.54 - 3.41) Rs_alpha = Rs1 + (Rs2 - Rs1) * (self.u_value - 3.41) / (4.54 - 3.41) Ts_abs_alpha = self.Ts * np.concatenate(([1], Ts_alpha)) Rs_abs_alpha = self.Rs_f * np.concatenate(([1], Rs_alpha)) elif ( self.u_value > 3.41 and self.u_value <= 4.54 and self.solar_heat_gain_coef <= 0.45 and self.solar_heat_gain_coef > 0.3 ): # Zone 21 bilinear interpolation Ts11 = np.mean( [Ts_F(Cosalpha), Ts_G(Cosalpha), Ts_H(Cosalpha), Ts_I(Cosalpha)], axis=0 ) Rs11 = np.mean( [Rs_F(Cosalpha), Rs_G(Cosalpha), Rs_H(Cosalpha), Rs_I(Cosalpha)], axis=0 ) Ts12 = np.mean( [Ts_F(Cosalpha), Ts_G(Cosalpha), Ts_H(Cosalpha), Ts_I(Cosalpha)], axis=0 ) Rs12 = np.mean( [Rs_F(Cosalpha), Rs_G(Cosalpha), Rs_H(Cosalpha), Rs_I(Cosalpha)], axis=0 ) Ts21 = Ts_D(Cosalpha) Rs21 = Rs_D(Cosalpha) Ts22 = np.mean( [Ts_B(Cosalpha), Ts_D(Cosalpha), Ts_C(Cosalpha), Ts_D(Cosalpha)], axis=0 ) Rs22 = np.mean( [Rs_B(Cosalpha), Rs_D(Cosalpha), Rs_C(Cosalpha), Rs_D(Cosalpha)], axis=0 ) Ts_alpha = ( Ts11 * (0.45 - self.solar_heat_gain_coef) * (4.54 - self.u_value) + Ts21 * (self.solar_heat_gain_coef - 0.3) * (4.54 - self.u_value) + Ts12 * (0.45 - self.solar_heat_gain_coef) * (self.u_value - 3.41) + Ts22 * (self.solar_heat_gain_coef - 0.3) * (self.u_value - 3.41) ) / ((0.45 - 0.3) * (4.54 - 3.41)) Rs_alpha = ( Rs11 * (0.45 - self.solar_heat_gain_coef) * (4.54 - self.u_value) + Rs21 * (self.solar_heat_gain_coef - 0.3) * (4.54 - self.u_value) + Rs12 * (0.45 - self.solar_heat_gain_coef) * (self.u_value - 3.41) + Rs22 * (self.solar_heat_gain_coef - 0.3) * (self.u_value - 3.41) ) / ((0.45 - 0.3) * (4.54 - 3.41)) Ts_abs_alpha = self.Ts * np.concatenate(([1], Ts_alpha)) Rs_abs_alpha = self.Rs_f * np.concatenate(([1], Rs_alpha)) elif ( self.u_value > 3.41 and self.u_value <= 4.54 and self.solar_heat_gain_coef <= 0.3 and self.solar_heat_gain_coef > 0.25 ): # Zone 22 bilinear interpolationm Ts11 = np.mean([Ts_F(Cosalpha), Ts_H(Cosalpha)], axis=0) Rs11 = np.mean([Rs_F(Cosalpha), Rs_H(Cosalpha)], axis=0) Ts12 = np.mean( [Ts_F(Cosalpha), Ts_G(Cosalpha), Ts_H(Cosalpha), Ts_I(Cosalpha)], axis=0 ) Rs12 = np.mean( [Rs_F(Cosalpha), Rs_G(Cosalpha), Rs_H(Cosalpha), Rs_I(Cosalpha)], axis=0 ) Ts21 = Ts_D(Cosalpha) Rs21 = Rs_D(Cosalpha) Ts22 = Ts_D(Cosalpha) Rs22 = Rs_D(Cosalpha) Ts_alpha = ( Ts11 * (0.3 - self.solar_heat_gain_coef) * (4.54 - self.u_value) + Ts21 * (self.solar_heat_gain_coef - 0.25) * (4.54 - self.u_value) + Ts12 * (0.3 - self.solar_heat_gain_coef) * (self.u_value - 3.41) + Ts22 * (self.solar_heat_gain_coef - 0.25) * (self.u_value - 3.41) ) / ((0.3 - 0.25) * (4.54 - 3.41)) Rs_alpha = ( Rs11 * (0.3 - self.solar_heat_gain_coef) * (4.54 - self.u_value) + Rs21 * (self.solar_heat_gain_coef - 0.25) * (4.54 - self.u_value) + Rs12 * (0.3 - self.solar_heat_gain_coef) * (self.u_value - 3.41) + Rs22 * (self.solar_heat_gain_coef - 0.25) * (self.u_value - 3.41) ) / ((0.3 - 0.25) * (4.54 - 3.41)) Ts_abs_alpha = self.Ts * np.concatenate(([1], Ts_alpha)) Rs_abs_alpha = self.Rs_f * np.concatenate(([1], Rs_alpha)) elif ( self.u_value > 3.41 and self.u_value <= 4.54 and self.solar_heat_gain_coef <= 0.25 ): # Zone 23 linear interpolation Ts1 = np.mean([Ts_F(Cosalpha), Ts_H(Cosalpha)], axis=0) Rs1 = np.mean([Rs_F(Cosalpha), Rs_H(Cosalpha)], axis=0) Ts2 = Ts_D(Cosalpha) Rs2 = Rs_D(Cosalpha) Ts_alpha = Ts1 + (Ts2 - Ts1) * (self.u_value - 3.41) / (4.54 - 3.41) Rs_alpha = Rs1 + (Rs2 - Rs1) * (self.u_value - 3.41) / (4.54 - 3.41) Ts_abs_alpha = self.Ts * np.concatenate(([1], Ts_alpha)) Rs_abs_alpha = self.Rs_f * np.concatenate(([1], Rs_alpha)) elif self.u_value > 4.5 and self.solar_heat_gain_coef > 0.65: # Zone 24 Ts_alpha = Ts_A(Cosalpha) Rs_alpha = Rs_A(Cosalpha) Ts_abs_alpha = self.Ts * np.concatenate(([1], Ts_alpha)) Rs_abs_alpha = self.Rs_f * np.concatenate(([1], Rs_alpha)) elif ( self.u_value > 4.5 and self.solar_heat_gain_coef > 0.6 and self.solar_heat_gain_coef <= 0.65 ): # Zone 25 linear interpolation Ts1 = np.mean( [Ts_B(Cosalpha), Ts_D(Cosalpha), Ts_C(Cosalpha), Ts_D(Cosalpha)], axis=0 ) Rs1 = np.mean( [Rs_B(Cosalpha), Rs_D(Cosalpha), Rs_C(Cosalpha), Rs_D(Cosalpha)], axis=0 ) Ts2 = Ts_A(Cosalpha) Rs2 = Rs_A(Cosalpha) Ts_alpha = Ts1 + (Ts2 - Ts1) * (self.solar_heat_gain_coef - 0.6) / ( 0.65 - 0.6 ) Rs_alpha = Rs1 + (Rs2 - Rs1) * (self.solar_heat_gain_coef - 0.6) / ( 0.65 - 0.6 ) Ts_abs_alpha = self.Ts * np.concatenate(([1], Ts_alpha)) Rs_abs_alpha = self.Rs_f * np.concatenate(([1], Rs_alpha)) elif ( self.u_value > 4.5 and self.solar_heat_gain_coef > 0.45 and self.solar_heat_gain_coef <= 0.6 ): # Zone 26 Ts_alpha = np.mean( [Ts_B(Cosalpha), Ts_D(Cosalpha), Ts_C(Cosalpha), Ts_D(Cosalpha)], axis=0 ) Rs_alpha = np.mean( [Rs_B(Cosalpha), Rs_D(Cosalpha), Rs_C(Cosalpha), Rs_D(Cosalpha)], axis=0 ) Ts_abs_alpha = self.Ts * np.concatenate(([1], Ts_alpha)) Rs_abs_alpha = self.Rs_f * np.concatenate(([1], Rs_alpha)) elif ( self.u_value > 4.5 and self.solar_heat_gain_coef > 0.3 and self.solar_heat_gain_coef <= 0.45 ): # Zone 27 linear interpolation Ts1 = Ts_D(Cosalpha) Rs1 = Rs_D(Cosalpha) Ts2 = np.mean( [Ts_B(Cosalpha), Ts_D(Cosalpha), Ts_C(Cosalpha), Ts_D(Cosalpha)], axis=0 ) Rs2 = np.mean( [Rs_B(Cosalpha), Rs_D(Cosalpha), Rs_C(Cosalpha), Rs_D(Cosalpha)], axis=0 ) Ts_alpha = Ts1 + (Ts2 - Ts1) * (self.solar_heat_gain_coef - 0.3) / ( 0.45 - 0.3 ) Rs_alpha = Rs1 + (Rs2 - Rs1) * (self.solar_heat_gain_coef - 0.3) / ( 0.45 - 0.3 ) Ts_abs_alpha = self.Ts * np.concatenate(([1], Ts_alpha)) Rs_abs_alpha = self.Rs_f * np.concatenate(([1], Rs_alpha)) elif self.u_value > 4.5 and self.solar_heat_gain_coef <= 0.3: # Zone 28 Ts_alpha = Ts_D(Cosalpha) Rs_alpha = Rs_D(Cosalpha) Ts_abs_alpha = self.Ts * np.concatenate(([1], Ts_alpha)) Rs_abs_alpha = self.Rs_f * np.concatenate(([1], Rs_alpha)) else: print("Error in the Function. Check the Curve definition and areas") # Controlling the two vectors Ts_abs_alpha[9] = 0 Rs_abs_alpha_2 = np.zeros(10) Rs_abs_alpha_2[0] = Rs_abs_alpha[0] if max(Rs_abs_alpha) > 1: for i in range(1, 10): Rs_abs_alpha_2[i] = Rs_abs_alpha[0] + ( Rs_abs_alpha[i] - Rs_abs_alpha[0] ) * (1 - Rs_abs_alpha[0]) / (max(Rs_abs_alpha) - Rs_abs_alpha[0]) Rs_abs_alpha = Rs_abs_alpha_2 else: Rs_abs_alpha[9] = 1 for i in range(10): if Rs_abs_alpha[i] + Ts_abs_alpha[i] > 1: Rs_abs_alpha[i] = 1 - Ts_abs_alpha[i] self.Rs_abs_alpha = Rs_abs_alpha self.Ts_abs_alpha = Ts_abs_alpha self.As_abs_alpha = 1 - self.Rs_abs_alpha - self.Ts_abs_alpha self.solar_heat_gain_coef_abs_alpha = ( self.Ts_abs_alpha + self.N * self.As_abs_alpha ) self.alpha2 = np.linspace(0, 90, 10) self.solar_heat_gain_coef_profile = splrep( self.alpha2, self.solar_heat_gain_coef_abs_alpha, s=0 ) self.solar_heat_gain_coef_profile_conv = splrep( self.alpha2, self.N * self.As_abs_alpha, s=0 ) self.solar_heat_gain_coef_profile_rad = splrep( self.alpha2, self.Ts_abs_alpha, s=0 )
def __str__(self): """Just a beauty print of the properties Returns ---------- str """ return f""" SimpleWindow: {self.name} U-value: {self.u_value} {units["U_value"]} Solar Heat Gain Coef.: {self.solar_heat_gain_coef} {units["solar_heat_gain_coefficient"]}"""