PK~BHbin/__init__.pyPK!NCH"pbin/epbdcalc.py#!/usr/bin/env python # encoding: utf-8 # # Copyright (c) 2015 Ministerio de Fomento # Instituto de Ciencias de la Construcción Eduardo Torroja (IETcc-CSIC) # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. """Cálculo de la eficiencia energética de los edificios según ISO/DIS 52000-1:2005""" import os, sys import warnings import argparse import sys if not hasattr(sys, 'frozen'): currpath = os.path.abspath(os.path.dirname(__file__)) upperpath = os.path.abspath(os.path.join(currpath, '..')) sys.path.append(upperpath) else: currpath, upperpath = None, None warnings.simplefilter('ignore') from pyepbd import cli if __name__ == '__main__': cli.main() PKDHOnnpyepbd/__main__.py#!/usr/bin/env python # encoding: utf-8 # # Copyright (c) 2015 Ministerio de Fomento # Instituto de Ciencias de la Construcción Eduardo Torroja (IETcc-CSIC) # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. """Cálculo de la eficiencia energética de los edificios según ISO/DIS 52000-1:2005""" from .cli import main if __name__ == '__main__': main() PKDH:n pyepbd/settings.py#!/usr/bin/python # -*- coding: utf-8 -*- # # Copyright (c) 2015 Ministerio de Fomento # Instituto de Ciencias de la Construcción Eduardo Torroja (IETcc-CSIC) # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. """Default values for energy efficiency calculation These are aimed towards energy efficiency evaluation in the spanish building code regulations (Código Técnico de la Edificación CTE). """ import pandas as pd # These are all provisional values subject to change K_EXP = 1.0 K_RDEL = 1.0 FACTORESDEPASOOFICIALES = pd.DataFrame( [ ['ELECTRICIDAD', 'grid', 'input', 'A', 0.341, 2.082], ['ELECTRICIDADBALEARES', 'grid', 'input', 'A', 0.094, 3.060], ['ELECTRICIDADCANARIAS', 'grid', 'input', 'A', 0.059, 3.058], ['ELECTRICIDADCEUTAMELILLA', 'grid', 'input', 'A', 0.066, 2.759], ['ELECTRICIDAD', 'INSITU', 'input', 'A', 1.0, 0.0], ['ELECTRICIDAD', 'INSITU', 'to_grid', 'A', 1.0, 0.0], ['ELECTRICIDAD', 'INSITU', 'to_nEPB', 'A', 1.0, 0.0], ['ELECTRICIDAD', 'INSITU', 'to_grid', 'B', 0.5, 2.0], ['ELECTRICIDAD', 'INSITU', 'to_nEPB', 'B', 0.5, 2.0], ['GASOLEO', 'grid', 'input', 'A', 0.003, 1.179], ['GLP', 'grid', 'input', 'A', 0.03, 1.201], ['GASNATURAL', 'grid', 'input', 'A', 0.005, 1.190], ['CARBON', 'grid', 'input', 'A', 0.002, 1.082], # BIOCARBURANTE == BIOMASA DENSIFICADA (PELLETS) ['BIOCARBURANTE', 'grid', 'input', 'A', 1.028, 0.085], ['MEDIOAMBIENTE', 'INSITU', 'input', 'A', 1.0, 0.0], ['ELECTRICIDAD', 'COGENERACION', 'input', 'A', 0.0, 0.0], ['ELECTRICIDAD', 'COGENERACION', 'to_grid', 'A', 1.0, 0.0], ['ELECTRICIDAD', 'COGENERACION', 'to_nEPB', 'A', 1.0, 0.0], ['ELECTRICIDAD', 'COGENERACION', 'to_grid', 'B', 0.5, 2.0], ['ELECTRICIDAD', 'COGENERACION', 'to_nEPB', 'B', 0.5, 2.0] ], columns=['vector', 'fuente', 'uso', 'factor', 'ren', 'nren']) PKDH7BLFFpyepbd/inputoutput.py#!/usr/bin/python # -*- coding: utf-8 -*- # # Copyright (c) 2015 Ministerio de Fomento # Instituto de Ciencias de la Construcción Eduardo Torroja (IETcc-CSIC) # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. """Input and output utilities for energy efficiency data handling""" import numpy as np import pandas as pd def readenergyfile(filename): """Read input data from filename and return data structure Returns dict of array of values indexed by carrier, ctype and originoruse data[carrier][ctype][originoruse] -> values as np.array with length=numsteps * carrier is an energy carrier * ctype is either 'PRODUCCION' or 'SUMINISTRO' por produced or used energy * originoruse defines: - the energy origin for produced energy (INSITU or COGENERACION) - the energy end use (EPB or NEPB) for used energy * values """ with open(filename, 'r') as datafile: lines = datafile.readlines() # Find number of calculation steps used numsteps = len(lines[1].split(',')[3:]) data = {} for ii, line in enumerate(lines[1:]): fields = line.strip().split(',') carrier, ctype, originoruse = fields[0:3] values = np.array(fields[3:]).astype(np.float) # Checks #TODO: handle Exceptions in CLI if len(values) != numsteps: raise ValueError, ("All input must have the same number of timesteps. " "Problem found in line %i of %s\n\t%s" % (ii+2, filename, line)) if ctype not in ('PRODUCCION', 'SUMINISTRO'): raise ValueError, "Carrier type is not 'SUMINISTRO' or 'PRODUCCION' in line %i\n\t%s" % (ii+2, line) if originoruse not in ('EPB', 'NEPB', 'INSITU', 'COGENERACION'): raise ValueError, ("Origin or end use is not 'EPB', 'NEPB', 'INSITU' or 'COGENERACION'" " in line %i\n\t%s" % (ii+2, line)) if carrier not in data: data[carrier] = {'SUMINISTRO': {'EPB': np.zeros(numsteps), 'NEPB': np.zeros(numsteps)}, 'PRODUCCION': {'INSITU': np.zeros(numsteps), 'COGENERACION': np.zeros(numsteps)}} data[carrier][ctype][originoruse] = data[carrier][ctype][originoruse] + values return data def readfactors(filename): """Read energy weighting factors data from file""" # TODO: check valid sources return pd.read_csv(filename, skipinitialspace=True, comment='#', skip_blank_lines=True) def formatIndicators(EP): """Format energy efficiency indicators as string from primary energy data In the context of the CTE regulations, this refers to primary energy values. """ epren, epnren = EP.EP['ren'], EP.EP['nren'] eparen, epanren = EP.EPpasoA['ren'], EP.EPpasoA['nren'] total = epren + epnren totala = eparen + epanren txt = ("EP(step A) , ren ={:>8.1f}, nren={:>8.1f}, tot ={:>8.1f}, RER ={:>8.2f}\n" "EP(step A+B), ren ={:>8.1f}, nren={:>8.1f}, tot ={:>8.1f}, RER ={:>8.2f}\n" ).format(eparen, epanren, totala, eparen / totala, epren, epnren, total, epren / total) return txt PKDHH?[! pyepbd/cli.py#!/usr/bin/env python # encoding: utf-8 # # Copyright (c) 2015 Ministerio de Fomento # Instituto de Ciencias de la Construcción Eduardo Torroja (IETcc-CSIC) # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. """Cálculo de la eficiencia energética de los edificios según ISO/DIS 52000-1:2005""" import argparse import sys from .settings import K_EXP, K_RDEL, FACTORESDEPASOOFICIALES from .energycalculations import weighted_energy from .inputoutput import readenergyfile, readfactors, formatIndicators def main(): from .__init__ import __version__ COPY = u"""\tversión: %s \t(c) 2015-2016 Ministerio de Fomento \t 2015-2016 Instituto de Ciencias de la Construcción Eduardo Torroja (IETcc-CSIC) \tAutores: Daniel Jiménez González \t Rafael Villar Burke """ % __version__ parser = argparse.ArgumentParser(description=u'Cálculo de la eficiencia energética según ISO/DIS 52000-1:2015 y CTE DB-HE', usage=u"%(prog)s [-h] [-f [FPFILE]] [--krdel [KRDEL]] [--kexp [KEXP]] vecfile\n\n" + COPY, formatter_class=argparse.RawTextHelpFormatter) parser.add_argument(dest='vecfile', nargs='?', type=argparse.FileType('r'), help=u'archivo de datos de los vectores energéticos') parser.add_argument('-f', '--factores', dest='fpfile', nargs='?', type=argparse.FileType('r'), default=None, help=u'archivo de definición de los factores de paso') parser.add_argument('--krdel', nargs='?', default=None, type=float, help=u'factor de resuministro (k_rdel)') parser.add_argument('--kexp', nargs='?', default=None, type=float, help=u'factor de exportacion (k_exp)') parser.add_argument('-o', '--outfile', dest='outputfile', nargs='?', type=argparse.FileType('w'), default=None, help=u'archivo de salida de resultados') args = parser.parse_args() if not args.vecfile: parser.print_help() sys.exit(2) if args.krdel is None: print u'Usando factor de resuministro (k_rdel) predeterminado' k_rdel = K_RDEL if args.krdel is None else args.krdel if args.kexp is None: print u'Usando factor de exportación (k_exp) predeterminado' k_exp = K_EXP if args.kexp is None else args.kexp if args.fpfile: fpdatafile = args.fpfile print u'Archivo de factores de paso: ', fpdatafile.name, '\n' else: fpdatafile = None print u'Usando factores de paso predeterminados' fP = (FACTORESDEPASOOFICIALES if args.fpfile is None else readfactors(args.fpfile)) data = readenergyfile(args.vecfile.name) EP = weighted_energy(data, k_rdel, fP, k_exp) cadenasalida = ['%s\n' % args.vecfile.name, formatIndicators(EP)] print ''.join(cadenasalida) if args.outputfile: print 'Guardando resultados en el archivo:', args.outputfile.name args.outputfile.writelines(cadenasalida) if __name__ == '__main__': main() PKDHx*66pyepbd/energycalculations.py#!/usr/bin/python # -*- coding: utf-8 -*- # # Copyright (c) 2015 Ministerio de Fomento # Instituto de Ciencias de la Construcción Eduardo Torroja (IETcc-CSIC) # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. """ Calcula la eficiencia energética como balance entre la energía usada y la ahorrada a la red. El proceso de calculo de la eficiencia energética se calcula en dos pasos: - En un primer paso se consideran las producciones y consumos de cada combustible, que se equilibran mediante el suministro de la red correspondiente. - Después se aplican los pasos A, de importación, y B, de exportación y ahorro, para obtener la eficiencia energética del caso considerado. La red proporciona la cantidad suficiente de cada tipo de combustible para equilibrar el balance entre producción y consumo. Además, es necesario obtener qué parte de la demanda energética no ha podido ser satisfecha instantáneamente pero podría serlo con la energía producida en otros pasos de cálculo. Esto se regula mediante el parámetro normativo de resuministro ($k_{rdel}$). Realizado el calculo del balance, los valores energéticos se agrupan en unos pocos conceptos con valores anuales de los que se obtendrá el indicador de eficiencia energética según indica la norma \textit{ISO/DIS 52000-1:2015} aplicando los pasos A y B. Estos indicadores tienen una parte renovable y otra no renovable, lo que permite calcular el valor de consumo energético total, además del porcentaje de uso de energías renovables. Las funciones devuelven un diccionario con la parte renovable y no renovable de los indicadores, que aportan en base anual, aunque el cálculo se realice en pasos temporales menores. El cálculo está organizado por: - vectores energéticos - fuentes de energía - destino o uso de la energía. """ import numpy as np import pandas as pd # origin for produced energy must be either 'INSITU' or 'COGENERACION' VALIDORIGINS = ['INSITU', 'COGENERACION'] def components_t_forcarrier(vdata, k_rdel): """Calculate energy components for each time step from energy carrier data This follows the EN15603 procedure for calculation of delivered and exported energy components. """ # Energy used by technical systems for EPB services, for each time step E_EPus_t = vdata['SUMINISTRO']['EPB'] # Energy used by technical systems for non-EPB services, for each time step E_nEPus_t = vdata['SUMINISTRO']['NEPB'] numsteps = E_EPus_t.size # (Electricity) produced on-site and inside the assessment boundary, by origin E_pr_t_byorigin = vdata['PRODUCCION'] # (Electric) energy produced on-site and inside the assessment boundary, for each time step (formula 23) E_pr_t = np.sum(E_pr_t_byorigin[origin] for origin in VALIDORIGINS) # Produced energy from all origins for EPB services for each time step (formula 24) E_pr_used_EPus_t = np.minimum(E_EPus_t, E_pr_t) ## Exported energy for each time step (produced energy not consumed in EPB uses) (formula 25) E_exp_t = E_pr_t - E_pr_used_EPus_t # Exported energy by production origin for each time step, weigthing done by produced energy hasprod = (E_pr_t != 0) F_exp_t = np.zeros(numsteps) F_exp_t[hasprod] = E_exp_t[hasprod] / E_pr_t[hasprod] E_exp_t_byorigin = {origin: E_pr_t_byorigin[origin] * F_exp_t for origin in VALIDORIGINS} # Exported (electric) energy used for non-EPB uses for each time step (formula 26) E_exp_used_nEPus_t = np.minimum(E_exp_t, E_nEPus_t) # Exported energy used for non-EPB services for each time step, by origin, weighting done by exported energy hasexported = (E_exp_t != 0) F_exp_used_nEPus_t = np.zeros(numsteps) F_exp_used_nEPus_t[hasexported] = E_exp_used_nEPus_t[hasexported] / E_exp_t[hasexported] E_exp_used_nEPus_t_byorigin = {origin: E_exp_t_byorigin[origin] * F_exp_used_nEPus_t for origin in VALIDORIGINS} # Exported energy not used for any service for each time step (formula 27) # Note: this is later affected by k_rdel for redelivery and k_exp for exporting E_exp_nused_t = E_exp_t - E_exp_used_nEPus_t # Exported energy not used for any service for each time step, by origin, weighting done by exported energy F_exp_nused_t = np.zeros(numsteps) F_exp_nused_t[hasexported] = E_exp_nused_t[hasexported] / E_exp_t[hasexported] E_exp_nused_t_byorigin = {origin: E_exp_t_byorigin[origin] * F_exp_nused_t for origin in VALIDORIGINS} # Annual exported energy not used for any service (formula 28) E_exp_nused_an = np.sum(E_exp_nused_t) # Delivered (electric) energy for each time step (formula 29) E_del_t = E_EPus_t - E_pr_used_EPus_t # Annual delivered (electric) energy for EPB uses (formula 30) E_del_an = np.sum(E_del_t) # Annual temporary exported (electric) energy (formula 31) E_exp_tmp_an = np.minimum(E_exp_nused_an, E_del_an) # Temporary exported energy for each time step (formula 32) # E_exp_tmp_t = np.zeros(numsteps) if (E_exp_nused_an == 0) else E_exp_tmp_an * E_exp_nused_t / E_exp_nused_an # not used # Redelivered energy for each time step (formula 33) E_del_rdel_t = np.zeros(numsteps) if (E_del_an == 0) else E_exp_tmp_an * E_del_t / E_del_an # Annual redelivered energy # E_del_rdel_an = np.sum(E_del_rdel_t) # not used # Exported (electric) energy to the grid for each time step (formula 34) # E_exp_grid_t = E_exp_nused_t - E_exp_tmp_t # not used # Annual exported (electric) energy to the grid (formula 35) E_exp_grid_an = E_exp_nused_an - E_exp_tmp_an # Energy exported to grid, by origin, weighting done by exported and not used energy F_exp_grid_an = E_exp_grid_an / E_exp_nused_an if E_exp_nused_an != 0 else 0 E_exp_grid_t_byorigin = {origin: E_exp_nused_t_byorigin[origin] * F_exp_grid_an for origin in VALIDORIGINS} # (Electric) energy delivered by the grid for each time step (formula 36) # E_del_grid_t = E_del_t - E_del_rdel_t # not used # Annual (electric) energy delivered by the grid (formula 37) # E_del_grid_an = E_del_an - E_del_rdel_an # not used # Corrected delivered energy for each time step (formula 38) E_del_t_corr = E_del_t - k_rdel * E_del_rdel_t # Corrected temporary exported energy (formula 39) # E_exp_tmp_t_corr = E_exp_tmp_t * (1 - k_rdel) # not used components_t = {'grid': {'input': sum(E_del_t_corr)}} components_t.update({origin: {'input': E_pr_t_byorigin[origin], 'to_nEPB': E_exp_used_nEPus_t_byorigin[origin], 'to_grid': E_exp_grid_t_byorigin[origin]} for origin in VALIDORIGINS}) return components_t def components_an_forcarrier(components_t): """Calculate annual energy composition by carrier from time step components""" components_an = {} for origin in components_t: # This is grid + VALIDORIGINS components_an[origin] = {} components_t_byorigin = components_t[origin] for use in components_t_byorigin: sumforuse = components_t_byorigin[use].sum() # TODO we need to know numsteps to make this shortcut work # TODO some input data doesn't have timestep data and this fails # try: # components_an[origin][use] = sumforuse if abs(sumforuse) > 0.1 else np.zeros(numsteps) # except: # print origin, use, sumforuse, components_an if abs(sumforuse) > 0.1: components_an[origin][use] = sumforuse return components_an def energycomponents(energydata, k_rdel): "Calculate timestep and annual energy composition by carrier from input data" components = {} for carrier in energydata: bal_t = components_t_forcarrier(energydata[carrier], k_rdel) bal_an = components_an_forcarrier(bal_t) components[carrier] = {'temporal': bal_t, 'anual': bal_an} return components #################################################### def delivered_weighted_energy_stepA(components, fp): """Total delivered (or produced) weighted energy entering the assessment boundary in step A Energy is weighted depending on its origin (by source or grid). This function returns a data structure with keys 'ren' and 'nren' corresponding to the renewable and not renewable share of this weighted energy (step A). """ delivered_wenergy_stepA = pd.Series({'ren': 0.0, 'nren': 0.0}) fpA = fp[(fp.uso=='input') & (fp.factor=='A')] for source in components: origins = components[source] if 'input' in origins: factor_paso_A = fpA[(fpA.fuente==source)][['ren', 'nren']].iloc[0] delivered_wenergy_stepA = delivered_wenergy_stepA + factor_paso_A * origins['input'] return delivered_wenergy_stepA def exported_weighted_energy_stepA(components, fpA): """Total exported weighted energy going outside the assessment boundary in step A Energy is weighted depending on its destination (non-EPB uses or grid). This function returns a data structure with keys 'ren' and 'nren' corresponding to the renewable and not renewable share of this weighted energy (step A). """ to_nEPB = pd.Series({'ren': 0.0, 'nren': 0.0}) to_grid = pd.Series({'ren': 0.0, 'nren': 0.0}) fpAnEPB = fpA[(fpA.uso=='to_nEPB')] fpAgrid = fpA[(fpA.uso=='to_nEPB')] for source in components: destinations = components[source] if 'to_nEPB' in destinations: fp_tmp = fpAnEPB[fpAnEPB.fuente==source][['ren', 'nren']].iloc[0] to_nEPB = to_nEPB + fp_tmp * destinations['to_nEPB'] if 'to_grid' in destinations: fp_tmp = fpAgrid[fpAgrid.fuente== source][['ren', 'nren']].iloc[0] to_grid = to_grid + fp_tmp * destinations['to_grid'] exported_energy_stepA = to_nEPB + to_grid return exported_energy_stepA def gridsavings_stepB(components, fp, k_exp): """Avoided weighted energy resources in the grid due to exported electricity The computation is done for a single energy carrier, considering the exported energy used for non-EPB uses (to_nEPB) and the energy exported to the grid (to_grid), each with its own weigting factors and k_exp. This function returns a data structure with keys 'ren' and 'nren' corresponding to the renewable and not renewable share of this weighted energy (step B). """ to_nEPB = pd.Series({'ren': 0.0, 'nren': 0.0}) to_grid = pd.Series({'ren': 0.0, 'nren': 0.0}) fpA = fp[fp.factor=='A'] fpB = fp[fp.factor=='B'] fpAnEPB,fpAgrid = fpA[fpA.uso=='to_nEPB'], fpA[fpA.uso=='to_grid'] fpBnEPB,fpBgrid = fpB[fpB.uso=='to_nEPB'], fpB[fpB.uso=='to_grid'] for source in components: destinations = components[source] if 'to_nEPB' in destinations: fpA_tmp= fpAnEPB[fpAnEPB.fuente==source][['ren','nren']].iloc[0] fpB_tmp= fpBnEPB[fpBnEPB.fuente==source][['ren','nren']].iloc[0] to_nEPB = to_nEPB + (fpB_tmp - fpA_tmp) * destinations['to_nEPB'] if 'to_grid' in destinations: fpA_tmp= fpAgrid[fpAgrid.fuente==source][['ren','nren']].iloc[0] fpB_tmp= fpBgrid[fpBgrid.fuente==source][['ren','nren']].iloc[0] to_grid = to_grid + (fpB_tmp - fpA_tmp) * destinations['to_grid'] gridsavings = k_exp * (to_nEPB + to_grid) return gridsavings def weighted_energy(data, k_rdel, fp, k_exp): """Total weighted energy (step A + B) = used energy (step A) - saved energy (step B) The energy saved to the grid due to exportation (step B) is substracted from the the energy balance in the asessment boundary AB (step A). This is computed for all energy carrier and all energy sources. This function returns a data structure with keys 'ren' and 'nren' corresponding to the renewable and not renewable parts of the balance. In the context of the CTE regulation weighted energy corresponds to primary energy. """ components = energycomponents(data, k_rdel) EP = pd.DataFrame({'EP': {'ren': 0.0, 'nren': 0.0}, 'EPpasoA': {'ren': 0.0, 'nren': 0.0}}) for carrier in components: fp_cr = fp[fp.vector==carrier] components_cr_an = components[carrier]['anual'] delivered_wenergy_stepA = delivered_weighted_energy_stepA(components_cr_an, fp_cr) exported_wenergy_stepA = exported_weighted_energy_stepA(components_cr_an, fp_cr) balance_stepA = delivered_wenergy_stepA - exported_wenergy_stepA gsavings_stepB = gridsavings_stepB(components_cr_an, fp_cr, k_exp) weighted_energy_stepAB = balance_stepA - gsavings_stepB EP_carrier = pd.DataFrame({'EP': weighted_energy_stepAB, 'EPpasoA': balance_stepA}) EP = EP + EP_carrier return EP PKDH Zpyepbd/__init__.py#!/usr/bin/python # -*- coding: utf-8 -*- # # Copyright (c) 2015 Ministerio de Fomento # Instituto de Ciencias de la Construcción Eduardo Torroja (IETcc-CSIC) # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. from .energycalculations import weighted_energy from .inputoutput import formatIndicators, readenergyfile, readfactors from .settings import * import cli __version__ = '1.0' PKDH=Rpyepbd/test/test_pyepbd.py#!/usr/bin/python # -*- coding: utf-8 -*- # # Copyright (c) 2015 Ministerio de Fomento # Instituto de Ciencias de la Construcción Eduardo Torroja (IETcc-CSIC) # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. import os, sys import pandas as pd currpath = os.path.abspath(os.path.dirname(__file__)) sys.path.append(os.path.join(currpath, '..')) from pyepbd import (FACTORESDEPASOOFICIALES, weighted_energy, readenergyfile, formatIndicators, readfactors) def check(EPB, res): """Check that result is within valid range""" res = EPB.EP - pd.Series({'ren': res[0], 'nren': res[1]}) if abs(res.sum()) > 2.0: print 'Resultado no coincidente: ', res.sum() print formatIndicators(EPB) print '#####################################################' print '--------------------' return False else: return True def epfromfile(filename, krdel, kexp, fp): """Compute primary energy (weighted energy) from data in filename""" datafile = os.path.join(currpath, filename) data = readenergyfile(datafile) return weighted_energy(data, krdel, fp, kexp) TESTFP = readfactors(os.path.join(currpath, '../examples/factores_paso_test.csv')) CTEFP = readfactors(os.path.join(currpath, '../examples/factores_paso_20140203.csv')) TESTKRDEL = 1.0 TESTKEXP = 1.0 def test_ejemplo1base(): EP = epfromfile('../examples/ejemplo1base.csv', TESTKRDEL, TESTKEXP, TESTFP) assert check(EP, [50.0, 200.0]) == True def test_ejemplo1base_fail(): EP = epfromfile('../examples/ejemplo1base.csv', TESTKRDEL, TESTKEXP, TESTFP) assert check(EP, [53.0, 200.0]) == False def test_ejemplo1base_normativo(): EP = epfromfile('../examples/ejemplo1base.csv', TESTKRDEL, TESTKEXP, CTEFP) assert check(EP, [34.1, 208.20]) == True def test_ejemplo1PV(): EP = epfromfile('../examples/ejemplo1PV.csv', TESTKRDEL, TESTKEXP, TESTFP) assert check(EP, [75.0, 100.0]) == True def test_ejemplo1PV_normativo(): EP = epfromfile('../examples/ejemplo1PV.csv', TESTKRDEL, TESTKEXP, CTEFP) assert check(EP, [67.1, 104.1]) == True def test_ejemplo1xPV(): EP = epfromfile('../examples/ejemplo1xPV.csv', TESTKRDEL, TESTKEXP, TESTFP) assert check(EP, [120.0, -80.0]) == True def test_ejemplo1xPV_normativo(): EP = epfromfile('../examples/ejemplo1xPV.csv', TESTKRDEL, TESTKEXP, CTEFP) assert check(EP, [120.0, -80.0]) == True def test_ejemplo1xPVk0(): EP = epfromfile('../examples/ejemplo1xPV.csv', TESTKRDEL, 0.0, TESTFP) assert check(EP, [100.0, 0.0]) == True def test_ejemplo1xPVk0_normativo(): EP = epfromfile('../examples/ejemplo1xPV.csv', TESTKRDEL, 0.0, CTEFP) assert check(EP, [100.0, 0.0]) == True def test_ejemplo2xPVgas(): EP = epfromfile('../examples/ejemplo2xPVgas.csv', TESTKRDEL, TESTKEXP, TESTFP) assert check(EP, [30.0, 169.0]) == True def test_ejemplo2xPVgas_normativo(): EP = epfromfile('../examples/ejemplo2xPVgas.csv', TESTKRDEL, TESTKEXP, CTEFP) assert check(EP, [30.9, 186.1]) == True def test_ejemplo3PVBdC(): EP = epfromfile('../examples/ejemplo3PVBdC.csv', TESTKRDEL, TESTKEXP, TESTFP) assert check(EP, [180.0, 38.0]) == True def test_ejemplo3PVBdC_normativo(): EP = epfromfile('../examples/ejemplo3PVBdC.csv', TESTKRDEL, TESTKEXP, CTEFP) assert check(EP, [177.5, 39.6]) == True def test_ejemplo4cgnfosil(): EP = epfromfile('../examples/ejemplo4cgnfosil.csv', TESTKRDEL, TESTKEXP, TESTFP) assert check(EP, [-14.0, 227.0]) == True def test_ejemplo4cgnfosil_normativo(): EP = epfromfile('../examples/ejemplo4cgnfosil.csv', TESTKRDEL, TESTKEXP, CTEFP) assert check(EP, [-12.7, 251]) == True def test_ejemplo5cgnbiogas(): EP = epfromfile('../examples/ejemplo5cgnbiogas.csv', TESTKRDEL, TESTKEXP, TESTFP) assert check(EP, [159.0, 69.0]) == True def test_ejemplo5cgnbiogas_normativo(): EP = epfromfile('../examples/ejemplo5cgnbiogas.csv', TESTKRDEL, TESTKEXP, CTEFP) assert check(EP, [148.9, 76.4]) == True def test_ejemplo6K3(): EP = epfromfile('../examples/ejemplo6K3.csv', TESTKRDEL, TESTKEXP, TESTFP) assert check(EP, [1385.5, -662]) == True def test_ejemplo6K3_normativo(): EP = epfromfile('../examples/ejemplo6K3.csv', TESTKRDEL, TESTKEXP, CTEFP) assert check(EP, [1385.5, -662]) == True PK{BHi'pyepbd/test/.coveragerc[run] branch = True PKDHpyepbd/test/__init__.pyPKDH#P)pyepbd/examples/ejemplo2xPVgas_salida.csvejemplo2xPVgas.csv EP(step A) , ren = 20.0, nren= 209.0, tot = 229.0, RER = 0.09 EP(step A+B), ren = 30.0, nren= 169.0, tot = 199.0, RER = 0.15 PKDH~DPPpyepbd/examples/ejemplo6K3.csvvector,tipo,src_dst ELECTRICIDAD,SUMINISTRO,EPB,200.00,160.00,100.00,90.00,50.00,60.00,80.00,70.00,50.00,80.00,120.00,160.00 ELECTRICIDAD,SUMINISTRO,NEPB,30.00,30.00,30.00,30.00,30.00,30.00,30.00,30.00,30.00,30.00,30.00,30.00 ELECTRICIDAD,PRODUCCION,INSITU,44.00,55.00,77.00,110.00,187.00,209.00,220.00,198.00,176.00,132.00,88.00,55.00 PKDH l 'pyepbd/examples/ejemplo1base_salida.csvejemplo1base.csv EP(step A) , ren = 50.0, nren= 200.0, tot = 250.0, RER = 0.20 EP(step A+B), ren = 50.0, nren= 200.0, tot = 250.0, RER = 0.20 PKDH˱)##*pyepbd/examples/factores_paso_20140203.csvvector, fuente, uso, factor, ren,nren #valores de la propuesta del documento reconocido del IDAE de 03/02/2014, página 14 ELECTRICIDAD, grid, input, A, 0.341, 2.082 ELECTRICIDADBALEARES, grid, input, A, 0.094, 3.060 ELECTRICIDADCANARIAS, grid, input, A, 0.059, 3.058 ELECTRICIDADCEUTAMELILLA, grid, input, A, 0.066, 2.759 ELECTRICIDAD, INSITU, input, A, 1.0, 0.0 ELECTRICIDAD, INSITU, to_grid, A, 1.0, 0.0 ELECTRICIDAD, INSITU, to_nEPB, A, 1.0, 0.0 ELECTRICIDAD, INSITU, to_grid, B, 0.5, 2.0 ELECTRICIDAD, INSITU, to_nEPB, B, 0.5, 2.0 GASOLEO, grid, input, A, 0.003, 1.179 GLP, grid, input, A, 0.03, 1.201 GASNATURAL, grid, input,A, 0.005, 1.190 CARBON, grid, input, A, 0.002, 1.082 BIOCARBURANTE, grid, input, A, 1.028, 0.085 #BIOMASA DENSIFICADA (PELLETS) MEDIOAMBIENTE, INSITU, input, A, 1.0, 0.0 ELECTRICIDAD, COGENERACION, input, A, 0.0, 0.0 ELECTRICIDAD, COGENERACION, to_grid, A, 1.0, 0.0 ELECTRICIDAD, COGENERACION, to_nEPB, A, 1.0, 0.0 ELECTRICIDAD, COGENERACION, to_grid, B, 0.5, 2.0 ELECTRICIDAD, COGENERACION, to_nEPB, B, 0.5, 2.0 PKDH&&"pyepbd/examples/ejemplo2xPVgas.csvvector,tipo,src_dst ELECTRICIDAD,SUMINISTRO,EPB,3.28,2.62,1.64,1.48,0.82,0.98,1.31,1.15,0.82,1.31,1.97,2.62 ELECTRICIDAD,PRODUCCION,INSITU,1.13,1.42,1.99,2.84,4.82,5.39,5.67,5.11,4.54,3.40,2.27,1.42 GASNATURAL,SUMINISTRO,EPB,31.15,24.92,15.57,14.02,7.79,9.34,12.46,10.90,7.79,12.46,18.69,24.92 PKDHyA%pyepbd/examples/ejemplo1PV_salida.csvejemplo1PV.csv EP(step A) , ren = 75.0, nren= 100.0, tot = 175.0, RER = 0.43 EP(step A+B), ren = 75.0, nren= 100.0, tot = 175.0, RER = 0.43 PKDHwpyepbd/examples/ejemplo1PV.csvvector,tipo,src_dst ELECTRICIDAD,SUMINISTRO,EPB,16.39,13.11,8.20,7.38,4.10,4.92,6.56,5.74,4.10,6.56,9.84,13.11 ELECTRICIDAD,PRODUCCION,INSITU,8.20,6.56,4.10,3.69,2.05,2.46,3.28,2.87,2.05,3.28,4.92,6.56 PKDHAsoo pyepbd/examples/ejemplo1base.csvvector,tipo,src_dst ELECTRICIDAD,SUMINISTRO,EPB,16.39,13.11,8.20,7.38,4.10,4.92,6.56,5.74,4.10,6.56,9.84,13.11 PKDH;%pyepbd/examples/ejemplo6K3_salida.csvejemplo6K3.csv EP(step A) , ren = 1220.0, nren= 0.0, tot = 1220.0, RER = 1.00 EP(step A+B), ren = 1385.5, nren= -662.0, tot = 723.5, RER = 1.91 PKDHDyy!pyepbd/examples/ejemplo2PVgas.csvvector,tipo,origendestino ELECTRICIDAD,SUMINISTRO,EPB,20 ELECTRICIDAD,PRODUCCION,INSITU,40 GASNATURAL,SUMINISTRO,EPB,190 PKDH{&pyepbd/examples/factores_paso_test.csvvector, fuente, uso, factor, ren,nren#esto es un comentario, se pueden hacer comentarios aquí #también se pueden hacer comentarios aquí ELECTRICIDAD, grid, input, A, 0.5, 2.0 ELECTRICIDAD, INSITU, input, A, 1.0, 0.0 ELECTRICIDAD, INSITU, to_grid, A, 1.0, 0.0 ELECTRICIDAD, INSITU, to_nEPB, A, 1.0, 0.0 ELECTRICIDAD, INSITU, to_grid, B, 0.5, 2.0 ELECTRICIDAD, INSITU, to_nEPB, B, 0.5, 2.0 GASNATURAL, grid, input,A, 0.0, 1.1 BIOCARBURANTE, grid, input, A, 1.1, 0.1 MEDIOAMBIENTE, INSITU, input, A, 1.0, 0.0 ELECTRICIDAD, COGENERACION, input, A, 0.0, 0.0 ELECTRICIDAD, COGENERACION, to_grid, A, 1.0, 0.0 ELECTRICIDAD, COGENERACION, to_nEPB, A, 1.0, 0.0 ELECTRICIDAD, COGENERACION, to_grid, B, 0.5, 2.0 ELECTRICIDAD, COGENERACION, to_nEPB, B, 0.5, 2.0 PKDHQh&pyepbd/examples/ejemplo1xPV_salida.csvejemplo1xPV.csv EP(step A) , ren = 100.0, nren= 0.0, tot = 100.0, RER = 1.00 EP(step A+B), ren = 120.0, nren= -80.0, tot = 40.0, RER = 3.00 PKDHꗧΤ(pyepbd/examples/ejemplo2PVgas_salida.csvejemplo2PVgas.csv EP(step A) , ren = 20.0, nren= 209.0, tot = 229.0, RER = 0.09 EP(step A+B), ren = 30.0, nren= 169.0, tot = 199.0, RER = 0.15 PKDHuݦ!pyepbd/examples/ejemplo3PVBdC.csvvector,tipo,src_dst ELECTRICIDAD,SUMINISTRO,EPB,9.67,7.74,4.84,4.35,2.42,2.90,3.87,3.39,2.42,3.87,5.80,7.74 ELECTRICIDAD,PRODUCCION,INSITU,1.13,1.42,1.99,2.84,4.82,5.39,5.67,5.11,4.54,3.40,2.27,1.42 MEDIOAMBIENTE,SUMINISTRO,EPB,21.48,17.18,10.74,9.66,5.37,6.44,8.59,7.52,5.37,8.59,12.89,17.18 MEDIOAMBIENTE,PRODUCCION,INSITU,21.48,17.18,10.74,9.66,5.37,6.44,8.59,7.52,5.37,8.59,12.89,17.18 PKDH!y+pyepbd/examples/ejemplo4cgnfosil_salida.csvejemplo4cgnfosil.csv EP(step A) , ren = -28.0, nren= 283.8, tot = 255.8, RER = -0.11 EP(step A+B), ren = -14.0, nren= 227.8, tot = 213.8, RER = -0.07 PKDHEuQ(pyepbd/examples/ejemplo3PVBdC_salida.csvejemplo3PVBdC.csv EP(step A) , ren = 180.5, nren= 38.0, tot = 218.5, RER = 0.83 EP(step A+B), ren = 180.5, nren= 38.0, tot = 218.5, RER = 0.83 PKDHQS,pyepbd/examples/ejemplo5cgnbiogas_salida.csvejemplo5cgnbiogas.csv EP(step A) , ren = 145.8, nren= 125.8, tot = 271.6, RER = 0.54 EP(step A+B), ren = 159.8, nren= 69.8, tot = 229.6, RER = 0.70 PKDH{Rz,,$pyepbd/examples/ejemplo4cgnfosil.csvvector,tipo,src_dst GASNATURAL,SUMINISTRO,EPB,16.39,13.11,8.20,7.38,4.10,4.92,6.56,5.74,4.10,6.56,9.84,13.11 GASNATURAL,SUMINISTRO,EPB,25.90,20.72,12.95,11.66,6.48,7.77,10.36,9.07,6.48,10.36,15.54,20.72 ELECTRICIDAD,PRODUCCION,COGENERACION,0.79,0.99,1.39,1.99,3.38,3.77,3.97,3.57,3.18,2.38,1.59,0.99 PKDHfpyepbd/examples/ejemplo1xPV.csvvector,tipo,src_dst ELECTRICIDAD,SUMINISTRO,EPB,16.39,13.11,8.20,7.38,4.10,4.92,6.56,5.74,4.10,6.56,9.84,13.11 ELECTRICIDAD,PRODUCCION,INSITU,22.95,18.36,11.48,10.33,5.74,6.89,9.18,8.03,5.74,9.18,13.77,18.36 PKDH%-//%pyepbd/examples/ejemplo5cgnbiogas.csvvector,tipo,src_dst GASNATURAL,SUMINISTRO,EPB,16.39,13.11,8.20,7.38,4.10,4.92,6.56,5.74,4.10,6.56,9.84,13.11 BIOCARBURANTE,SUMINISTRO,EPB,25.90,20.72,12.95,11.66,6.48,7.77,10.36,9.07,6.48,10.36,15.54,20.72 ELECTRICIDAD,PRODUCCION,COGENERACION,0.79,0.99,1.39,1.99,3.38,3.77,3.97,3.57,3.18,2.38,1.59,0.99 PK${EHŒ$pyepbd-1.0.dist-info/DESCRIPTION.rstepbdcalc - Cálculo de la eficiencia energética según ISO/DIS 52000-1:2015 ========================================================================= Descripción y uso ----------------- **epbdcalc** es un programa para el cálculo de la eficiencia energética siguiendo la metodología de la norma ISO/DIS 52000-1:2015 (anterior CEN prEN15603). La ejecución del programa solamente requiere la indicación de un archivo de datos de entrada cuyo formato se detalla en el manual en formato PDF que se distribuye con la aplicación. $ epbdcalc ./pyepbd/examples/ejemplo1_base.csv Para información más detallada de uso consulte el *Manual de uso* en formato PDF que se encuentra en el directorio de instalación. **epbdcalc** is an application to calculate energy efficiency indicators following the ISO/DIS 52000-1:2015 standard (former CEN prEN 15603). Instalación y código fuente --------------------------- La herramienta funciona en sistemas GNU/Linux y MS-Windows. En la página del proyecto se proporciona un instalador para sistemas MS-Windows, así como un manual de usuario. Créditos y licencia ------------------- Copyright (c) 2015 Ministerio de Fomento, Instituto de Ciencias de la Construcción Eduardo Torroja (IETcc-CSIC) *epbdcalc* es un programa desarrollado por Daniel Jiménez González y Rafael Villar Burke, del Instituto Eduardo Torroja de Ciencias de la Construcción (IETcc-CSIC) en el ámbito del convenio de colaboración entre el CSIC y el Ministerio de Fomento para el desarrollo de tareas relacionadas con el Código Técnico de la Edificación y se publica bajo una licencia libre. Se puede consultar la licencia completa en el archivo `LICENSE_ES.txt` y `LICENSE.txt` distribuidos con el código fuente. *epbdcalc* se distribuye con la esperanza de que resulte útil, pero SIN NINGUNA GARANTÍA, ni garantía MERCANTIL implícita ni la CONVENIENCIA PARA UN PROPÓSITO PARTICULAR. .. Archivo de Novedades con las notas de cada versión News ==== 1.0 --- *Release date: 4-feb-2016* * Move to standard versioning scheme * Full refactoring with english documentation 10.2015 ------- *Release date: 9-oct-2015* * Initial version PK${EHu..%pyepbd-1.0.dist-info/entry_points.txt[console_scripts] epbdcalc = pyepbd.cli:main PK${EH  "pyepbd-1.0.dist-info/metadata.json{"classifiers": ["Development Status :: 5 - Production/Stable", "Intended Audience :: Science/Research", "Topic :: Scientific/Engineering", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 2", "Programming Language :: Python :: Implementation :: CPython", "Environment :: Console", "Operating System :: OS Independent"], "extensions": {"python.commands": {"wrap_console": {"epbdcalc": "pyepbd.cli:main"}}, "python.details": {"contacts": [{"email": "pachi@ietcc.csic.es", "name": "Rafael Villar Burke, Daniel Jim\u00e9nez Gonz\u00e1lez", "role": "author"}], "document_names": {"description": "DESCRIPTION.rst"}, "project_urls": {"Home": "https://github.com/pachi/epbdcalc"}}, "python.exports": {"console_scripts": {"epbdcalc": "pyepbd.cli:main"}}}, "extras": ["test"], "generator": "bdist_wheel (0.26.0)", "keywords": ["energ\u00eda", "edificaci\u00f3n", "CTE", "energy", "buildings"], "license": "MIT", "metadata_version": "2.0", "name": "pyepbd", "run_requires": [{"requires": ["numpy (>=1.7)", "pandas (>=0.15)"]}, {"extra": "test", "requires": ["pytest-cov", "pytest"]}], "summary": "C\u00e1lculo de la eficiencia energ\u00e9tica seg\u00fan ISO/DIS 52000-1:2015", "test_requires": [{"requires": ["pytest", "pytest-cov"]}], "version": "1.0"}PK${EH!{ "pyepbd-1.0.dist-info/top_level.txtbin pyepbd PK${EH''\\pyepbd-1.0.dist-info/WHEELWheel-Version: 1.0 Generator: bdist_wheel (0.26.0) Root-Is-Purelib: true Tag: py2-none-any PK${EH=1.7) Requires-Dist: pandas (>=0.15) Provides-Extra: test Requires-Dist: pytest; extra == 'test' Requires-Dist: pytest-cov; extra == 'test' epbdcalc - Cálculo de la eficiencia energética según ISO/DIS 52000-1:2015 ========================================================================= Descripción y uso ----------------- **epbdcalc** es un programa para el cálculo de la eficiencia energética siguiendo la metodología de la norma ISO/DIS 52000-1:2015 (anterior CEN prEN15603). La ejecución del programa solamente requiere la indicación de un archivo de datos de entrada cuyo formato se detalla en el manual en formato PDF que se distribuye con la aplicación. $ epbdcalc ./pyepbd/examples/ejemplo1_base.csv Para información más detallada de uso consulte el *Manual de uso* en formato PDF que se encuentra en el directorio de instalación. **epbdcalc** is an application to calculate energy efficiency indicators following the ISO/DIS 52000-1:2015 standard (former CEN prEN 15603). Instalación y código fuente --------------------------- La herramienta funciona en sistemas GNU/Linux y MS-Windows. En la página del proyecto se proporciona un instalador para sistemas MS-Windows, así como un manual de usuario. Créditos y licencia ------------------- Copyright (c) 2015 Ministerio de Fomento, Instituto de Ciencias de la Construcción Eduardo Torroja (IETcc-CSIC) *epbdcalc* es un programa desarrollado por Daniel Jiménez González y Rafael Villar Burke, del Instituto Eduardo Torroja de Ciencias de la Construcción (IETcc-CSIC) en el ámbito del convenio de colaboración entre el CSIC y el Ministerio de Fomento para el desarrollo de tareas relacionadas con el Código Técnico de la Edificación y se publica bajo una licencia libre. Se puede consultar la licencia completa en el archivo `LICENSE_ES.txt` y `LICENSE.txt` distribuidos con el código fuente. *epbdcalc* se distribuye con la esperanza de que resulte útil, pero SIN NINGUNA GARANTÍA, ni garantía MERCANTIL implícita ni la CONVENIENCIA PARA UN PROPÓSITO PARTICULAR. .. Archivo de Novedades con las notas de cada versión News ==== 1.0 --- *Release date: 4-feb-2016* * Move to standard versioning scheme * Full refactoring with english documentation 10.2015 ------- *Release date: 9-oct-2015* * Initial version PK${EHa pyepbd-1.0.dist-info/RECORDbin/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 bin/epbdcalc.py,sha256=KVKD_J4rDro-i9YHbN-Ta6y15Fb7o9M3IA23s5xbovs,1717 pyepbd/__init__.py,sha256=UyApbn80vuavWGaRAQ4inPKntL4mqI4vRg5dBwb2VMM,1416 pyepbd/__main__.py,sha256=g-EU1kZyyOsmYEq86Fe-tjWXbR4HQL2RYysAeo3XJew,1390 pyepbd/cli.py,sha256=2M3q13GasaEKafwrpxus9CAo2LKTk_o1RcuMdgmGTcU,4232 pyepbd/energycalculations.py,sha256=z-OTW4sTomKWVRVjMnalI8VnMS00KBxGO_JPluW1dzE,14019 pyepbd/inputoutput.py,sha256=oKyMKM6uySBBNBGG105vQmXqFCoxiQQL0n-iPOQm3u4,4422 pyepbd/settings.py,sha256=X4dt94P3zLjsI4rGrdm9yNz4esTaA0FVZLWIU84a78o,2984 pyepbd/examples/ejemplo1PV.csv,sha256=_wjzMXGQKQRqqZYXzBIORMNjx8Wm8R5OrzqOr6nSwP8,202 pyepbd/examples/ejemplo1PV_salida.csv,sha256=wts3--gOYhCyaO3dhdFafhR8GZ2447hnMflnVfWPX-k,161 pyepbd/examples/ejemplo1base.csv,sha256=c4bQ_sZmnWIzl4BjZaLru598tZxo6CNjowWG9Vf5kzo,111 pyepbd/examples/ejemplo1base_salida.csv,sha256=ir-GENMfWitOdXFQXtxXcW2ITNExysxw4eNnEoQ0W2c,163 pyepbd/examples/ejemplo1xPV.csv,sha256=lIczG50f2ZZx3mzcAXI6PMoQ0Uo9WljcnEBW98TR5EM,208 pyepbd/examples/ejemplo1xPV_salida.csv,sha256=kG3kzRtxdB8hzvu-hO1PnXQQlSESUCaSYYqBsA0f_i8,162 pyepbd/examples/ejemplo2PVgas.csv,sha256=nfXxMAs83abh8kY1624a_A_gQp2lYhGK8SJnQk7gaHM,121 pyepbd/examples/ejemplo2PVgas_salida.csv,sha256=6_n6XQRyA7_YNe0B-nYpIW_bGGamrn1XfuHjrINYhV4,164 pyepbd/examples/ejemplo2xPVgas.csv,sha256=uNJC-T8qqnnnErcxzFQtONd3PS8HIFX-4w8qAu1YkIg,294 pyepbd/examples/ejemplo2xPVgas_salida.csv,sha256=ITV3jZm6Jcre9DYSCqa9O8v-w9qqUVtNdotehNt0US4,165 pyepbd/examples/ejemplo3PVBdC.csv,sha256=pcQrnlj2e6a0HxPj7NQKhXZ5h2hx1GLlJvDU0KI5-mE,390 pyepbd/examples/ejemplo3PVBdC_salida.csv,sha256=Q9P67H_8PktyW2zmLVgIYug1tusxcZTCBbtTOpwTSSQ,164 pyepbd/examples/ejemplo4cgnfosil.csv,sha256=1p1p31Gjgvw3X6FjKzdxkDhOoLRj44OZeysQnXf-5Gw,300 pyepbd/examples/ejemplo4cgnfosil_salida.csv,sha256=WP6_HDvHgva53wtaxLBbrwYORqrnMgou5oDpP92rrlk,167 pyepbd/examples/ejemplo5cgnbiogas.csv,sha256=-ynN3aX6WdWcmQeb4S124ML8XIzzvEmuUxvW1d1Shqw,303 pyepbd/examples/ejemplo5cgnbiogas_salida.csv,sha256=yuoJBCm49bCeOM3z4guksQ6oBV6hMeru-pelbjvEj0U,168 pyepbd/examples/ejemplo6K3.csv,sha256=yacgxFgUgi9QFuefhPLezcXBu0PKLcTMuq79f0elfu0,336 pyepbd/examples/ejemplo6K3_salida.csv,sha256=z_GM6gIgOyAb9giww9D7VfS_2Q5az7ygFKQvMEQ3mr0,161 pyepbd/examples/factores_paso_20140203.csv,sha256=Ox-2KpGjcLg6qppd2gSIfkvCQU-faLNDq4fhq5R5aoE,1059 pyepbd/examples/factores_paso_test.csv,sha256=IpBcVPSdNmIceUQhEfItBWuds_rrFzXvGUH1K_w9BG4,765 pyepbd/test/.coveragerc,sha256=SiH_JVKFeJVNCP4fBk230hbdrGBzY1m9jGkcOB7Zepg,20 pyepbd/test/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 pyepbd/test/test_pyepbd.py,sha256=ZLki7wuAZzD1qlbPFFlUrB6NTgfrRQ5HPCnaTpEnZ1c,5383 pyepbd-1.0.dist-info/DESCRIPTION.rst,sha256=uCgDG0EJQjeXFzGxcLO-YSP30GElN6EqNNkZFXuczas,2188 pyepbd-1.0.dist-info/METADATA,sha256=oVVHE3bi9ST93UKR5IFvw5nDeCUqD66_EqhbtkkTVOE,3096 pyepbd-1.0.dist-info/RECORD,, pyepbd-1.0.dist-info/WHEEL,sha256=JTb7YztR8fkPg6aSjc571Q4eiVHCwmUDlX8PhuuqIIE,92 pyepbd-1.0.dist-info/entry_points.txt,sha256=L9A1clj1T3JmIds0HbZOBzxVzKTtTcS-tsO-Rit6zZE,46 pyepbd-1.0.dist-info/metadata.json,sha256=64I7OhaKZWjTrA4zTe5fI1sGNaopCyQ42SOH-Xvnens,1271 pyepbd-1.0.dist-info/top_level.txt,sha256=m8CrSrifhiML3dNDMkXQGdDrF5_llw-2vpAuMNjfVtk,11 PK~BHbin/__init__.pyPK!NCH"p-bin/epbdcalc.pyPKDHOnnpyepbd/__main__.pyPKDH:n  pyepbd/settings.pyPKDH7BLFFpyepbd/inputoutput.pyPKDHH?[! )pyepbd/cli.pyPKDHx*66:pyepbd/energycalculations.pyPKDH Zqpyepbd/__init__.pyPKDH=Rfwpyepbd/test/test_pyepbd.pyPK{BHi'pyepbd/test/.coveragercPKDHpyepbd/test/__init__.pyPKDH#P)#pyepbd/examples/ejemplo2xPVgas_salida.csvPKDH~DPPpyepbd/examples/ejemplo6K3.csvPKDH l 'pyepbd/examples/ejemplo1base_salida.csvPKDH˱)##*pyepbd/examples/factores_paso_20140203.csvPKDH&&"pyepbd/examples/ejemplo2xPVgas.csvPKDHyA%Tpyepbd/examples/ejemplo1PV_salida.csvPKDHw8pyepbd/examples/ejemplo1PV.csvPKDHAsoo >pyepbd/examples/ejemplo1base.csvPKDH;%pyepbd/examples/ejemplo6K3_salida.csvPKDHDyy!ϙpyepbd/examples/ejemplo2PVgas.csvPKDH{&pyepbd/examples/factores_paso_test.csvPKDHQh&ȝpyepbd/examples/ejemplo1xPV_salida.csvPKDHꗧΤ(pyepbd/examples/ejemplo2PVgas_salida.csvPKDHuݦ!pyepbd/examples/ejemplo3PVBdC.csvPKDH!y+]pyepbd/examples/ejemplo4cgnfosil_salida.csvPKDHEuQ(Mpyepbd/examples/ejemplo3PVBdC_salida.csvPKDHQS,7pyepbd/examples/ejemplo5cgnbiogas_salida.csvPKDH{Rz,,$)pyepbd/examples/ejemplo4cgnfosil.csvPKDHfpyepbd/examples/ejemplo1xPV.csvPKDH%-//%pyepbd/examples/ejemplo5cgnbiogas.csvPK${EHŒ$pyepbd-1.0.dist-info/DESCRIPTION.rstPK${EHu..%pyepbd-1.0.dist-info/entry_points.txtPK${EH  "Upyepbd-1.0.dist-info/metadata.jsonPK${EH!{ "pyepbd-1.0.dist-info/top_level.txtPK${EH''\\׶pyepbd-1.0.dist-info/WHEELPK${EH