Source code for cea.globalvar

# -*- coding: utf-8 -*-
"""
Global variables - this object contains context information and is expected to be refactored away in future.
"""
from __future__ import absolute_import

import cea.demand.demand_writers

__author__ = "Jimeno A. Fonseca"
__copyright__ = "Copyright 2015, Architecture and Building Systems - ETH Zurich"
__credits__ = ["Jimeno A. Fonseca", "Daren Thomas"]
__license__ = "MIT"
__version__ = "0.1"
__maintainer__ = "Daren Thomas"
__email__ = "cea@arch.ethz.ch"
__status__ = "Production"


[docs]class GlobalVariables(object): def __init__(self): self.scenario_reference = r'c:\reference-case-open\baseline' self.print_partial = 'hourly' # hourly or monthly for the demand script self.print_totals = True # print yearly values self.print_yearly_peak = True # print peak values self.simulate_building_list = None # fill it with a list of names of buildings in case not all the data set needs to be run self.date_start = '2016-01-01' # format: yyyy-mm-dd self.seasonhours = [3216, 6192] self.multiprocessing = False # use multiprocessing / parallel execution if possible self.Z = 3 # height of basement for every building in m self.Bf = 0.7 # it calculates the coefficient of reduction in transmittance for surfaces in contact with the ground according to values of SIA 380/1 self.his = 3.45 # heat transfer coefficient between air and the surfacein W/(m2K) self.hms = 9.1 # heat transfer coefficient between nodes m and s in W/m2K self.theta_ss = 10 # difference between surface of building and sky temperature in C. 10 for temperate climates self.F_f = 0.2 # Frame area faction coefficient self.Rse = 0.04 # thermal resistance of external surfaces according to ISO 6946 self.D = 20 # in mm the diameter of the pipe to calculate losses self.hf = 3 # average height per floor in m self.Pwater = 998.0 # water density kg/m3 self.PaCa = 1200 # Air constant J/m3K self.Cpw = 4.184 # heat capacity of water in kJ/kgK self.Flowtap = 0.036 # in m3/min == 12 l/min during 3 min every tap opening # constant values for HVAC self.nrec_N = 0.75 # possible recovery self.NACH_inf_non_occ = 0.2 # num air exchanges due to infiltration when no occupied self.NACH_inf_occ = 0.5 # num air exchanges due to infiltration when occupied self.C1 = 0.054 # assumed a flat plate heat exchanger (-) self.Vmax = 3 # maximum estimated flow in m3/s self.Pair = 1.2 # air density in kg/m3 self.Cpv = 1.859 # specific heat capacity of water vapor in KJ/kgK self.Cpa = 1.008 # specific heat capacity of air in KJ/kgK self.U_dhwtank = 0.225 # tank insulation heat transfer coefficient in W/m2-K, value taken from SIA 385 self.AR = 3.3 # tank height aspect ratio, H=(4*V*AR^2/pi)^(1/3), taken from commercial tank geometry (jenni.ch) self.lvapor = 2257 # latent heat of air kJ/kg self.Tww_setpoint = 60 # dhw tank set point temperature in C # constant variables for pumping operation self.hoursop = 5 # assuming around 2000 hours of operation per year. It is charged to the electrical system from 11 am to 4 pm self.gr = 9.81 # m/s2 gravity self.effi = 0.6 # efficiency of pumps self.deltaP_l = 0.1 # delta of pressure self.fsr = 0.3 # factor for pressure calculation # grey emissions self.fwratio = 1.5 # conversion component's area to floor area self.sl_materials = 60 # service life of standard building components and materials self.sl_services = 40 # service life of technical installations # constant variables for air conditioning fan self.Pfan = 0.55 # specific fan consumption in W/m3/h # ============================================================================================================== # optimization # ============================================================================================================== self.sensibilityStep = 2 # the more, the longer the sensibility analysis ########################### User inputs # Commands for the evolutionary algorithm self.initialInd = 4 # number of initial individuals self.NGEN = 5 # number of total generations self.fCheckPoint = 1 # frequency for the saving of checkpoints self.maxTime = 7 * 24 * 3600 # maximum computational time [seconds] # Set Flags for different system setup preferences # self.NetworkLengthZernez = 864.0 #meters network length of maximum network, \ # then scaled by number of costumers (Zernez Specific), from J.Fonseca's Pipes Data self.ZernezFlag = 0 self.FlagBioGasFromAgriculture = 0 # 1 = Biogas from Agriculture, 0 = Biogas normal self.HPSew_allowed = 1 self.HPLake_allowed = 1 self.GHP_allowed = 1 self.CC_allowed = 1 self.Furnace_allowed = 0 self.DiscGHPFlag = 1 # Is geothermal allowed in disconnected buildings? 0 = NO ; 1 = YES self.DiscBioGasFlag = 0 # 1 = use Biogas only in Disconnected Buildings, no Natural Gas; 0so = both possible # Values for the calculation of Delta P (from F. Muller network optimization code) # WARNING : current = values for Inducity SQ self.DeltaP_Coeff = 104.81 self.DeltaP_Origin = 59016 ########################### Model parameters # Date data self.DAYS_IN_YEAR = 365 self.HOURS_IN_DAY = 24 # Specific heat self.cp = 4185 # [J/kg K] self.rho_60 = 983.21 # [kg/m^3] density of Water @ 60°C self.Wh_to_J = 3600.0 # Low heating values self.LHV_NG = 45.4E6 # [J/kg] self.LHV_BG = 21.4E6 # [J/kg] # Losses and margins self.DCNetworkLoss = 0.05 # Cooling ntw losses (10% --> 0.1) self.DHNetworkLoss = 0.12 # Heating ntw losses self.Qmargin_ntw = 0.01 # Reliability margin for the system nominal capacity in the hub self.Qloss_Disc = 0.05 # Heat losses within a disconnected building self.Qmargin_Disc = 0.20 # Reliability margin for the system nominal capacity for decentralized systems self.QminShare = 0.10 # Minimum percentage for the installed capacity self.K_DH = 0.25 # linear heat loss coefficient district heating network twin pipes ground loss # pipes location properties self.Z0 = 1.5 # location of pipe underground in m self.Psl = 1600 # heat capacity of ground in kg/m3 => should be density? self.Csl = 1300 # heat capacity of ground in J/kg K self.Bsl = 1.5 # thermal conductivity of ground in W/m.K # Emission and Primary energy factors ######### Biogas to Agric. Bio Gas emissions self.NormalBGToAgriBG_CO2 = 0.127 / 0.754 # Values from Electricity used for comparison self.NormalBGToAgriBG_Eprim = 0.0431 / 0.101 # Values from Electricity used for comparison ######### CENTRAL HUB PLANT : factor with regard to FINAL ENERGY # normalized on their efficiency, including all CO2 emissions (Primary, grey, electricity etc. until exit of Hub) # usage : divide by system efficiency and Hub to building-efficiency self.ETA_FINAL_TO_USEFUL = 0.9 # assume 90% system efficiency in terms of CO2 emissions and overhead emissions (\ # after Heating systems in buildings %E2%80%94 Method for calculation of system\ # energy requirements and system efficiencies %E2%80%94 Part 4-5 Space heating \ # generation systems, the performance and quality) # using HP values, divide by COP and multiply by factor # susing other systems, divide final energy (what comes out of the pipe) by efficiency multiply by factor # Furnace: All emissions allocated to the thermal energy, get CO2 of electricity back! # Combined Cycle self.CC_sigma = 4 / 5 self.NG_CC_TO_CO2_STD = (0.0353 + 0.186) * 0.78 / self.ETA_FINAL_TO_USEFUL * ( 1 + self.CC_sigma) # kg_CO2 / MJ_useful self.NG_CC_TO_OIL_STD = (0.6 + 2.94) * 0.78 / self.ETA_FINAL_TO_USEFUL * ( 1 + self.CC_sigma) # MJ_oil / MJ_useful if self.FlagBioGasFromAgriculture == 1: self.BG_CC_TO_CO2_STD = (0.00592 + 0.0495) * 0.78 / self.ETA_FINAL_TO_USEFUL * ( 1 + self.CC_sigma) # kg_CO2 / MJ_useful self.BG_CC_TO_OIL_STD = (0.0703 + 0.156) * 0.78 / self.ETA_FINAL_TO_USEFUL * ( 1 + self.CC_sigma) # MJ_oil / MJ_useful else: self.BG_CC_TO_CO2_STD = (0.0223 + 0.114) * 0.78 / self.ETA_FINAL_TO_USEFUL * ( 1 + self.CC_sigma) # kg_CO2 / MJ_useful self.BG_CC_TO_OIL_STD = (0.214 + 0.851) * 0.78 / self.ETA_FINAL_TO_USEFUL * ( 1 + self.CC_sigma) # kg_CO2 / MJ_useful # Furnace self.FURNACE_TO_CO2_STD = (0.0104 + 0.0285) * 0.78 / self.ETA_FINAL_TO_USEFUL * ( 1 + self.CC_sigma) # kg_CO2 / MJ_useful self.FURNACE_TO_OIL_STD = (0.0956 + 0.141) * 0.78 / self.ETA_FINAL_TO_USEFUL * ( 1 + self.CC_sigma) # MJ_oil / MJ_useful # Boiler self.NG_BOILER_TO_CO2_STD = 0.0874 * 0.87 / self.ETA_FINAL_TO_USEFUL # kg_CO2 / MJ_useful self.NG_BOILER_TO_OIL_STD = 1.51 * 0.87 / self.ETA_FINAL_TO_USEFUL # MJ_oil / MJ_useful if self.FlagBioGasFromAgriculture == 1: self.BG_BOILER_TO_CO2_STD = 0.339 * 0.87 * self.NormalBGToAgriBG_CO2 / ( 1 + self.DHNetworkLoss) / self.ETA_FINAL_TO_USEFUL # MJ_oil / MJ_useful self.BG_BOILER_TO_OIL_STD = 0.04 * 0.87 * self.NormalBGToAgriBG_Eprim / ( 1 + self.DHNetworkLoss) / self.ETA_FINAL_TO_USEFUL # MJ_oil / MJ_useful else: self.BG_BOILER_TO_CO2_STD = self.NG_BOILER_TO_CO2_STD * 0.04 / 0.0691 # kg_CO2 / MJ_useful self.BG_BOILER_TO_OIL_STD = self.NG_BOILER_TO_OIL_STD * 0.339 / 1.16 # MJ_oil / MJ_useful # HP Lake self.LAKEHP_TO_CO2_STD = 0.0262 * 2.8 / self.ETA_FINAL_TO_USEFUL # kg_CO2 / MJ_useful self.LAKEHP_TO_OIL_STD = 1.22 * 2.8 / self.ETA_FINAL_TO_USEFUL # MJ_oil / MJ_useful # HP Sewage self.SEWAGEHP_TO_CO2_STD = 0.0192 * 3.4 / self.ETA_FINAL_TO_USEFUL # kg_CO2 / MJ_useful self.SEWAGEHP_TO_OIL_STD = 0.904 * 3.4 / self.ETA_FINAL_TO_USEFUL # MJ_oil / MJ_useful # GHP self.GHP_TO_CO2_STD = 0.0210 * 3.9 / self.ETA_FINAL_TO_USEFUL # kg_CO2 / MJ_useful self.GHP_TO_OIL_STD = 1.03 * 3.9 / self.ETA_FINAL_TO_USEFUL # MJ_oil / MJ_useful ######### LOCAL PLANT : factor with regard to USEFUL ENERGY self.NG_BACKUPBOILER_TO_CO2_STD = 0.0691 * 0.87 # kg_CO2 / MJ_useful self.BG_BACKUPBOILER_TO_CO2_STD = 0.04 * 0.87 # kg_CO2 / MJ_useful self.SMALL_GHP_TO_CO2_STD = 0.0153 * 3.9 # kg_CO2 / MJ_useful # self.SMALL_LAKEHP_TO_CO2_STD = 0.0211 * 2.8 # kg_CO2 / MJ_useful self.SOLARCOLLECTORS_TO_CO2 = 0.00911 # kg_CO2 / MJ_useful self.NG_BACKUPBOILER_TO_OIL_STD = 1.16 * 0.87 # MJ_oil / MJ_useful self.BG_BACKUPBOILER_TO_OIL_STD = 0.339 * 0.87 # MJ_oil / MJ_useful self.SMALL_GHP_TO_OIL_STD = 0.709 * 3.9 # MJ_oil / MJ_useful # self.SMALL_LAKEHP_TO_OIL_STD = 0.969 * 2.8 # MJ_oil / MJ_useful self.SOLARCOLLECTORS_TO_OIL = 0.201 # MJ_oil / MJ_useful ######### ELECTRICITY self.CC_EL_TO_TOTAL = 4 / 9 self.EL_TO_OIL_EQ = 2.69 # MJ_oil / MJ_final self.EL_TO_CO2 = 0.0385 # kg_CO2 / MJ_final - CH Verbrauchermix nach EcoBau self.EL_TO_OIL_EQ_GREEN = 0.0339 # MJ_oil / MJ_final self.EL_TO_CO2_GREEN = 0.00398 # kg_CO2 / MJ_final self.EL_NGCC_TO_OIL_EQ_STD = 2.94 * 0.78 * self.CC_EL_TO_TOTAL # MJ_oil / MJ_final self.EL_NGCC_TO_CO2_STD = 0.186 * 0.78 * self.CC_EL_TO_TOTAL # kg_CO2 / MJ_final if self.FlagBioGasFromAgriculture == 1: # Use Biogas from Agriculture self.EL_BGCC_TO_OIL_EQ_STD = 0.156 * 0.78 * self.CC_EL_TO_TOTAL # kg_CO2 / MJ_final self.EL_BGCC_TO_CO2_STD = 0.0495 * 0.78 * self.CC_EL_TO_TOTAL # kg_CO2 / MJ_final else: self.EL_BGCC_TO_OIL_EQ_STD = 0.851 * 0.78 * self.CC_EL_TO_TOTAL # kg_CO2 / MJ_final self.EL_BGCC_TO_CO2_STD = 0.114 * 0.78 * self.CC_EL_TO_TOTAL # kg_CO2 / MJ_final self.EL_FURNACE_TO_OIL_EQ_STD = 0.141 * 0.78 * self.CC_EL_TO_TOTAL # MJ_oil / MJ_final self.EL_FURNACE_TO_CO2_STD = 0.0285 * 0.78 * self.CC_EL_TO_TOTAL # kg_CO2 / MJ_final self.EL_PV_TO_OIL_EQ = 0.345 # MJ_oil / MJ_final self.EL_PV_TO_CO2 = 0.02640 # kg_CO2 / MJ_final # Financial Data self.EURO_TO_CHF = 1.2 self.CHF_TO_EURO = 1.0 / self.EURO_TO_CHF self.USD_TO_CHF = 0.96 self.MWST = 0.08 # 8% MWST assumed, used in A+W data # Resource prices self.ELEC_PRICE = 0.104 * self.EURO_TO_CHF / 1000.0 # = 15 Rp/kWh or 0.104 * EURO_TO_CHF / 1000.0 # [CHF / wh] # self.ELEC_PRICE_KEV = 1.5 * ELEC_PRICE # MAKE RESEARCH ABOUT A PROPER PRICE AND DOCUMENT THAT! # self.ELEC_PRICE_GREEN = 1.5 * ELEC_PRICE self.NG_PRICE = 0.057 * self.EURO_TO_CHF / 1000.0 # [CHF / wh] self.BG_PRICE = 0.078 * self.EURO_TO_CHF / 1000.0 # [CHF / wh] self.GasConnectionCost = 15.5 / 1000.0 # CHF / W, from Energie360 15.5 CHF / kW if self.ZernezFlag == 1: self.NG_PRICE = 0.0756 / 1000.0 # [CHF / wh] from Energie360 self.BG_PRICE = 0.162 / 1000.0 # [CHF / wh] from Energie360 # DCN self.TsupCool = 6 + 273 self.TretCoolMax = 12 + 273.0 # Substation data self.mdot_step_counter_heating = [0.05, 0.1, 0.15, 0.3, 0.4, 0.5, 0.6, 1] self.mdot_step_counter_cooling = [0, 0.2, 0.5, 0.8, 1] self.NetworkLengthReference = 1745.0 # meters of network length of max network. (Reference = Zug Case Study) , from J. Fonseca's Pipes Data self.PipeCostPerMeterInv = 660.0 # CHF /m self.PipeLifeTime = 40.0 # years, Data from A&W self.PipeInterestRate = 0.05 # 5% interest rate self.PipeCostPerMeterAnnual = self.PipeCostPerMeterInv / self.PipeLifeTime # Solar area to Wpeak self.eta_area_to_peak = 0.16 # Peak Capacity - Efficiency, how much kW per area there are, valid for PV and PVT (after Jimeno's J+) # Pressure losses # self.DeltaP_DCN = 1.0 #Pa - change # self.DeltaP_DHN = 84.8E3 / 10.0 #Pa - change self.cPump = self.ELEC_PRICE * 24. * 365. # coupled to electricity cost self.PumpEnergyShare = 0.01 # assume 1% of energy required for pumping, after 4DH self.PumpReliabilityMargin = 0.05 # assume 5% reliability margin # Circulating Pump self.etaPump = 0.8 # Heat Exchangers self.U_cool = 2500 # W/m2K self.U_heat = 2500 # W/m2K self.dT_heat = 5 # K - pinch delta at design conditions self.dT_cool = 1 # K - pinch delta at design conditions # Heat pump self.HP_maxSize = 20.0E6 # max thermal design size [Wth] self.HP_minSize = 1.0E6 # min thermal design size [Wth] self.HP_n = 20.0 # lifetime [years] self.HP_etaex = 0.6 # exergetic efficiency of WSHP [L. Girardin et al., 2010]_ self.HP_deltaT_cond = 2.0 # pinch for condenser [K] self.HP_deltaT_evap = 2.0 # pinch for evaporator [K] self.HP_maxT_cond = 140 + 273.0 # max temperature at condenser [K] self.HP_Auxratio = 0.83 # Wdot_comp / Wdot_total (circulating pumps) self.HP_i = 0.05 # interest rate # Sewage resource self.Sew_minT = 10 + 273.0 # minimum temperature at the sewage exit [K] # Lake resources self.DeltaU = 12500.0E6 # [Wh], maximum change in the lake energy content at the end of the year (positive or negative) self.TLake = 5 + 273.0 # K # Geothermal heat pump self.TGround = 6.5 + 273.0 self.COPScalingFactorGroundWater = 3.4 / 3.9 # Scaling factor according to EcoBau, take GroundWater Heat pump into account self.GHP_CmaxSize = 2E3 # max cooling design size [Wc] FOR ONE PROBE self.GHP_Cmax_Size_th = 2E3 # Wh/m per probe self.GHP_Cmax_Length = 40 # depth of exploration taken into account self.GHP_HmaxSize = 2E3 # max heating design size [Wth] FOR ONE PROBE self.GHP_WmaxSize = 1E3 # max electrical design size [Wel] FOR ONE PROBE self.GHP_nBH = 50.0 # [years] for a borehole self.GHP_nHP = 20.0 # for the geothermal heat pump self.GHP_etaex = 0.677 # exergetic efficiency [O. Ozgener et al., 2005]_ self.GHP_Auxratio = 0.83 # Wdot_comp / Wdot_total (circulating pumps) self.GHP_i = 0.06 # interest rate self.GHP_A = 25 # [m^2] area occupancy of one borehole Gultekin et al. 5 m separation at a penalty of 10% less efficeincy # Combined cycle self.CC_n = 25.0 # lifetime self.CC_i = 0.06 self.GT_maxSize = 50.00000001E6 # max electrical design size in W = 50MW (NOT THERMAL capacity) self.GT_minSize = 0.2E6 # min electrical design size in W = 0.2 MW (NOT THERMAL capacity) self.GT_minload = 0.1 * 0.999 # min load (part load regime) self.CC_exitT_NG = 986.0 # exit temperature of the gas turbine if NG self.CC_exitT_BG = 1053.0 # exit temperature of the gas turbine if BG self.CC_airratio = 2.0 # air to fuel mass ratio self.ST_deltaT = 4.0 # pinch for HRSG self.ST_deltaP = 5.0E5 # pressure loss between steam turbine and DHN self.CC_deltaT_DH = 5.0 # pinch for condenser self.STGen_eta = 0.9 # generator efficiency after steam turbine self.CC_Maintenance_per_kWhel = 0.03 * self.EURO_TO_CHF # 0.03 € / kWh_el after Weber 2008, used in Slave Cost Calculation # Boiler # Operating figures, quality parameters and investment costs for district heating systems (AFO) self.Boiler_n = 20.0 # lifetime, after A+W, confirmed by average of 15-25y range after http://www.elco.ch/pdf/Solutions/ \ # ELCO-Loesungsbeispiel-Huber.pdf self.Boiler_i = 0.05 # interest rate self.Boiler_C_fuel = 20.0 # € / MWh_therm_bought(for LHV), AFO self.Boiler_C_labour = 4.0 # [€ /MWh_therm_sold] self.Boiler_P_aux = 0.026 # 0.026 Wh/Wh_th_sold = 26 kWh_el / MWh_th_sold, bioenergy 2020 self.Boiler_min = 0.05 # minimum Part Load of Boiler self.Boiler_equ_ratio = 0.2 # 20% own capital required (equity ratio) self.Boiler_C_maintainance = 0.05 # 5 % of capital cost (3% boiler, 2% techn. facilities) by AFO, currently not used # Boiler_C_maintainance_fazNG = 3.5 /1E6 * EURO_TO_CHF # 3.5 Euro /MWh_th # Boiler_C_maintainance_fazBG = 10.4 /1E6 * EURO_TO_CHF # 10.4 Euro /MWh_th self.Boiler_C_maintainance_faz = 3.5 self.Boiler_eta_hp = 0.9 # Furnace self.Furn_FuelCost_wet = 0.057 * 1E-3 # CHF / Wh = 5.7 Rp / kWh for wet (50wt%) Wood Chips, after self.Furn_FuelCost_dry = 0.07 * 1E-3 # CHF / Wh = 7 Rp / kWh for dry (30wt%) Wood Chips, self.Furn_min_Load = 0.2 # Minimum load possible (does not affect Model itself!) self.Furn_min_electric = 0.3 # Minimum load for electricity generation in furnace plant # Substation Heat Exchangers self.Subst_n = 25.0 # Lifetime after A+W self.Subst_i = 0.05 # Fuel Cells self.FC_OP_HOURS_PER_YEAR = 4000.0 # hours / year self.FC_LIFETIME = 40000.0 # hours of operation self.FC_n = 10 # years of operation self.FC_i = 0.05 # interest rate self.FC_stack_cost = 55000.0 # CHF /kW_th for a Hexis 1000 N 1kWe/1.8kWth self.FC_overhead = 0.1 # 10 % higher cost due to final installation # Vapor compressor chiller self.VCC_maxSize = 3500.0E3 # maximum size [W] self.VCC_n = 25.0 # service life self.VCC_tcoolin = 30 + 273.0 # entering condenser water temperature [K] self.VCC_minload = 0.1 # min load for cooling power # Cooling tower self.CT_maxSize = 10.0E6 # cooling power desin size [W] self.CT_n = 20.0 self.CT_a = 0.15 # annuity factor # Storage self.T_storage_min = 10 + 273.0 # K - Minimum Storage Temperature self.StorageMaxUptakeLimitFlag = 1 # set a maximum for the HP Power for storage charging / decharging self.QtoStorageMax = 1e6 # 100kW maximum peak # Activation Order of Power Plants # solar sources are treated first self.act_first = 'HP' # accounts for all kind of HP's as only one will be in the system. self.act_second = 'CHP' # accounts for ORC and NG-RC (produce electricity!) self.act_third = 'BoilerBase' # all conventional boilers are considered to be backups. self.act_fourth = 'BoilerPeak' # additional Peak Boiler # Data for Evolutionary algorithm self.nHeat = 6 # number of heating self.nHR = 2 # number of heat recovery options self.nSolar = 3 # number of solar technologies self.PROBA = 0.5 self.SIGMAP = 0.2 self.epsMargin = 0.001 # Data for clustering self.nPeriodMin = 2 self.nPeriodMax = 15 self.gam = 0.2 self.threshErr = 0.2 # Heat Recovery # compressed Air recovery self.etaElToHeat = 0.75 # [-] self.TElToHeatSup = 80 + 273.0 # K self.TElToHeatRet = 70 + 273.0 # K # Server Waste Heat recovery self.etaServerToHeat = 0.8 # [-] self.TfromServer = 60 + 273.0 # K self.TtoServer = 55 + 273.0 # K # Solar Thermal: information of return temperature self.TsupplyPVT_35 = 35 + 273.0 # K self.TsupplySC_80 = 75 + 273.0 # K self.TsupplySC_ET50 = 50 + 273.0 # K self.TsupplySC_ET80 = 80 + 273.0 # K # solar PV and PVT self.nPV = 0.16 self.nPVT = 0.16 # ============================================================================================================== # solar thermal collector # ============================================================================================================== self.Tin = 75 # average temeperature self.module_lenght_SC = 2 # m # 1 for PV and 2 for solar collectors self.min_production = 0.75 # points are selected with at least a minimum production of this % from the maximum in the area. self.grid_side = 2 # in a rectangular grid of points, one side of the square. this cannot be changed if the solra potential was made with this. self.worst_hour = 8744 # first hour of sun on the solar solstice self.angle_north = 122.5 self.type_SCpanel = 1 # Flatplate collector # ============================================================================================================== # PV panel # ============================================================================================================== self.module_lenght_PV = 1 # m # 1 for PV and 2 for solar collectors self.min_production = 0.75 # points are selected with at least a minimum production of this % from the maximum in the area. self.type_PVpanel = 1 # monocrystalline self.misc_losses = 0.1 # cabling, resistances etc.. # ============================================================================================================== # sewage potential # ============================================================================================================== self.SW_ratio = 0.95 # ratio of waste water to fresh water production. self.width_HEX = 0.40 # in m self.Vel_flow = 3 # in m/s self.min_flow = 9 # in lps self.tmin = 8 # tmin of extraction self.h0 = 1.5 # kW/m2K # heat trasnfer coefficient/ self.AT_HEX = 5 self.ATmin = 2 # ============================================================================================================== # ventilation # ============================================================================================================== self.shielding_class = 2 # according to ISO 16798-7, 0 = open terrain, 1 = partly shielded from wind, # 2 = fully shielded from wind self.delta_p_dim = 5 # (Pa) dimensioning differential pressure for multi-storey building shielded from wind, # according to DIN 1946-6 # ============================================================================================================== # HVAC # ============================================================================================================== self.temp_sup_heat_hvac = 36 # (°C) self.temp_sup_cool_hvac = 16 # (°C) # ============================================================================================================== # Comfort # ============================================================================================================== self.temp_comf_max = 26 # (°C) TODO: include to building properties and get from building properties self.rhum_comf_max = 70 # (%) # ============================================================================================================== # Initial temperatures for demand calculation # ============================================================================================================== self.initial_temp_air_prev = 21 self.initial_temp_m_prev = 16 # ============================================================================================================== # TABS # ============================================================================================================== self.max_temperature_difference_tabs = 9 # (°C) from Koschenz & Lehmann "Thermoaktive Bauteilsysteme (TABS)" self.max_surface_temperature_tabs = 27 # (°C) from Koschenz & Lehmann "Thermoaktive Bauteilsysteme (TABS)" # ============================================================================================================== # Columns to write for the demand calculation # ============================================================================================================== self.demand_building_csv_columns = [ ['QEf', 'QHf', 'QCf', 'Ef', 'Qhsf', 'Qhs', 'Qhsf_lat', 'Qwwf', 'Qww', 'Qcsf', 'Qcs', 'Qcsf_lat', 'Qcdataf', 'Qcref', 'Qhprof', 'Edataf', 'Ealf', 'Eaf', 'Elf', 'Eref', 'Eauxf', 'Eauxf_ve', 'Eauxf_hs', 'Eauxf_cs', 'Eauxf_ww', 'Eauxf_fw', 'Eprof', 'Ecaf'], ['mcphsf', 'mcpcsf', 'mcpwwf', 'mcpdataf', 'mcpref'], ['Twwf_sup', 'Twwf_re', 'Thsf_sup', 'Thsf_re', 'Tcsf_sup', 'Tcsf_re', 'Tcdataf_re', 'Tcdataf_sup', 'Tcref_re', 'Tcref_sup']] # here is where we decide whether full excel reports of the calculations are generated self.testing = False # if true: reports are generated, if false: not self.demand_writer = cea.demand.demand_writers.HourlyDemandWriter(self)
[docs] def report(self, tsd, output_folder, basename): """Use vars to fill worksheets in an excel file $destination_template based on the template. The template references self.report_variables. The destination_template may contain date format codes that will be updated with the current datetime.""" if self.testing: from cea.utilities import reporting reporting.full_report_to_xls(tsd, output_folder, basename, self)
[docs] def log(self, msg, **kwargs): print msg % kwargs
[docs] def is_heating_season(self, timestep): if self.seasonhours[0] + 1 <= timestep < self.seasonhours[1]: return False else: return True