"""
heatpumps
"""
from __future__ import division
from math import floor, log
__author__ = "Thuy-An Nguyen"
__copyright__ = "Copyright 2015, Architecture and Building Systems - ETH Zurich"
__credits__ = ["Thuy-An Nguyen", "Tim Vollrath", "Jimeno A. Fonseca"]
__license__ = "MIT"
__version__ = "0.1"
__maintainer__ = "Daren Thomas"
__email__ = "cea@arch.ethz.ch"
__status__ = "Production"
#============================
#operation costs
#============================
[docs]def calc_Cop_GHP(mdot, tsup, tret, tground, gV):
"""
For the operation of a Geothermal heat pump (GSHP) supplying DHN.
:type mdot : float
:param mdot: supply mass flow rate to the DHN
:type tsup : float
:param tsup: supply temperature to the DHN (hot)
:type tret : float
:param tret: return temeprature from the DHN (cold)
:type tground : float
:param tground: ground temperature
:param gV: globalvar.py
:rtype wdot_el : float
:returns wdot_el: total electric power requirement for compressor and auxiliary el.
:rtype qcolddot : float
:returns qcolddot: cold power requirement
:rtype qhotdot_missing : float
:returns qhotdot_missing: deficit heating energy from GSHP
:rtype tsup2 :
:returns tsup2: supply temperature after HP (to DHN)
..[O. Ozgener et al., 2005] O. Ozgener, A. Hepbasli (2005). Experimental performance analysis of a solar assisted
ground-source heat pump greenhouse heating system, Energy Build.
..[C. Montagud et al., 2014] C. Montagud, J.M. Corberan, A. Montero (2014). In situ optimization methodology for
the water circulation pump frequency of ground source heat pump systems. Energy and Buildings
"""
tsup2 = tsup # tsup2 = tsup, if all load can be provided by the HP
# calculate condenser temperature
tcond = tsup + gV.HP_deltaT_cond
if tcond > gV.HP_maxT_cond:
#raise ModelError
tcond = gV.HP_maxT_cond
tsup2 = tcond - gV.HP_deltaT_cond # lower the supply temp if necessary, tsup2 < tsup if max load is not enough
# calculate evaporator temperature
tevap = tground - gV.HP_deltaT_evap
COP = gV.GHP_etaex / (1- tevap/tcond) # [O. Ozgener et al., 2005]_
qhotdot = mdot * gV.cp * (tsup2 - tret)
qhotdot_missing = mdot * gV.cp * (tsup - tsup2) #calculate the missing energy if tsup2 < tsup
wdot = qhotdot / COP
wdot_el = wdot / gV.GHP_Auxratio # compressor power [C. Montagud et al., 2014]_
qcolddot = qhotdot - wdot
#if qcolddot > gV.GHP_CmaxSize:
# raise ModelError
return wdot_el, qcolddot, qhotdot_missing, tsup2
[docs]def GHP_op_cost(mdot, tsup, tret, gV, COP):
"""
Operation cost of GSHP supplying DHN
:type mdot : float
:param mdot: supply mass flow rate to the DHN
:type tsup : float
:param tsup: supply temperature to the DHN (hot)
:type tret : float
:param tret: return temeprature from the DHN (cold)
:type COP: float
:param COP: coefficient of performance of GSHP
:param gV: globalvar.py
:rtype C_GHP_el: float
:returns C_GHP_el: electricity cost of GSHP operation
:rtype wdot: float
:returns wdot: electricty required for GSHP operation
:rtype qcoldot: float
:returns qcoldot: cold power requirement
:rtype q_therm: float
:returns q_therm: thermal energy supplied to DHN
"""
q_therm = mdot * gV.cp *( tsup - tret) # Thermal Energy generated
qcoldot = q_therm * ( 1 - ( 1 / COP ) )
wdot = q_therm / COP
C_GHP_el = wdot * gV.ELEC_PRICE
return C_GHP_el, wdot, qcoldot, q_therm
[docs]def GHP_Op_max(tsup, tground, nProbes, gV):
"""
For the operation of a Geothermal heat pump (GSHP) at maximum capacity supplying DHN.
:type tsup : float
:param tsup: supply temperature to the DHN (hot)
:type tground : float
:param tground: ground temperature
:type nProbes: float
:param nProbes: bumber of probes
:param gV: globalvar.py
:rtype qhotdot: float
:returns qhotdot: heating energy provided from GHSP
:rtype COP: float
:returns COP: coefficient of performance of GSHP
"""
qcoldot = nProbes * gV.GHP_Cmax_Size_th # maximum capacity from all probes
COP = gV.HP_etaex * ( tsup + gV.HP_deltaT_cond ) / ( ( tsup + gV.HP_deltaT_cond ) - tground)
qhotdot = qcoldot /( 1 - ( 1 / COP ) )
return qhotdot, COP
[docs]def HPLake_op_cost(mdot, tsup, tret, tlake, gV):
"""
For the operation of lake heat pump supplying DHN
:type mdot : float
:param mdot: supply mass flow rate to the DHN
:type tsup : float
:param tsup: supply temperature to the DHN (hot)
:type tret : float
:param tret: return temeprature from the DHN (cold)
:type tlake : float
:param tlake: lake temperature
:param gV: globalvar.py
:rtype C_HPL_el: float
:returns C_HPL_el: electricity cost of Lake HP operation
:rtype wdot: float
:returns wdot: electricty required for Lake HP operation
:rtype Q_cold_primary: float
:returns Q_cold_primary: cold power requirement
:rtype Q_therm: float
:returns Q_therm: thermal energy supplied to DHN
"""
wdot, qcolddot = HPLake_Op(mdot, tsup, tret, tlake, gV)
Q_therm = mdot * gV.cp *(tsup - tret)
C_HPL_el = wdot * gV.ELEC_PRICE
Q_cold_primary = qcolddot
return C_HPL_el, wdot, Q_cold_primary, Q_therm
[docs]def HPLake_Op(mdot, tsup, tret, tlake, gV):
"""
For the operation of a Heat pump between a district heating network and a lake
:type mdot : float
:param mdot: supply mass flow rate to the DHN
:type tsup : float
:param tsup: supply temperature to the DHN (hot)
:type tret : float
:param tret: return temeprature from the DHN (cold)
:type tlake : float
:param tlake: lake temperature
:param gV: globalvar.py
:rtype wdot_el : float
:returns wdot_el: total electric power requirement for compressor and auxiliary el.
:rtype qcolddot : float
:returns qcolddot: cold power requirement
..[L. Girardin et al., 2010] L. Girardin, F. Marechal, M. Dubuis, N. Calame-Darbellay, D. Favrat (2010). EnerGis:
a geographical information based system for the evaluation of integrated energy conversion systems in urban areas,
Energy.
..[C. Montagud et al., 2014] C. Montagud, J.M. Corberan, A. Montero (2014). In situ optimization methodology for
the water circulation pump frequency of ground source heat pump systems. Energy and Buildings
"""
# calculate condenser temperature
tcond = tsup + gV.HP_deltaT_cond
print tcond
if tcond > gV.HP_maxT_cond:
raise ModelError
# calculate evaporator temperature
tevap = tlake - gV.HP_deltaT_evap
COP = gV.HP_etaex / (1- tevap/tcond) # [L. Girardin et al., 2010]_
qhotdot = mdot * gV.cp * (tsup - tret)
if qhotdot > gV.HP_maxSize:
print "Qhot above max size on the market !"
wdot = qhotdot / COP
wdot_el = wdot / gV.HP_Auxratio # compressor power [C. Montagud et al., 2014]_
qcolddot = qhotdot - wdot
return wdot_el, qcolddot
[docs]def HPSew_op_cost(mdot, tsup, tret, tsupsew, gV):
"""
Operation cost of sewage water HP supplying DHN
:type mdot : float
:param mdot: supply mass flow rate to the DHN
:type tsup : float
:param tsup: supply temperature to the DHN (hot)
:type tret : float
:param tret: return temeprature from the DHN (cold)
:type tsupsew : float
:param tsupsew: sewage supply temperature
:param gV: globalvar.py
:rtype C_HPSew_el_pure: float
:returns C_HPSew_el_pure: electricity cost of sewage water HP operation
:rtype C_HPSew_per_kWh_th_pure: float
:returns C_HPSew_per_kWh_th_pure: electricity cost per kWh thermal energy produced from sewage water HP
:rtype qcoldot: float
:returns qcoldot: cold power requirement
:rtype q_therm: float
:returns q_therm: thermal energy supplied to DHN
:rtype wdot: float
:returns wdot: electricty required for sewage water HP operation
..[L. Girardin et al., 2010] L. Girardin, F. Marechal, M. Dubuis, N. Calame-Darbellay, D. Favrat (2010). EnerGis:
a geographical information based system for the evaluation of integrated energy conversion systems in urban areas,
Energy.
"""
COP = gV.HP_etaex * ( tsup + gV.HP_deltaT_cond) / ( ( tsup + gV.HP_deltaT_cond ) - tsupsew )
q_therm = mdot * gV.cp *(tsup - tret)
qcoldot = q_therm*( 1 - ( 1 / COP ) )
wdot = q_therm / COP
C_HPSew_el_pure = wdot * gV.ELEC_PRICE
C_HPSew_per_kWh_th_pure = C_HPSew_el_pure / (q_therm)
return C_HPSew_el_pure, C_HPSew_per_kWh_th_pure, qcoldot, q_therm, wdot
# investment and maintenance costs
[docs]def calc_Cinv_GHP(GHP_Size, gV):
"""
Calculates the annualized investment costs for the geothermal heat pump
:type GHP_Size : float
:param GHP_Size: Design electrical size of the heat pump in [Wel]
:type InvCa : float
:returns InvCa: annualized investment costs in [EUROS/a]
..[D. Bochatay et al., 2005] D. Bochatay, I. Blanc, O. Jolliet, F. Marechal, T. Manasse-Ratmandresy (2005). Project
PACOGEN Evaluation economique et environmentale de systemes energetiques a usage residentiel., EPFL.
"""
nProbe = floor(GHP_Size / gV.GHP_WmaxSize)
roundProbe = GHP_Size / gV.GHP_WmaxSize - nProbe
# calculate investment cost of GSHP and Boreholes
InvC_HP = 0
InvC_BH = 0
InvC_HP += nProbe * 5247.5 * (gV.GHP_WmaxSize * 1E-3) ** 0.49
InvC_BH += nProbe * 7100 * (gV.GHP_WmaxSize * 1E-3) ** 0.74
InvC_HP += 5247.5 * (roundProbe * gV.GHP_WmaxSize * 1E-3) ** 0.49
InvC_BH += 7100 * (roundProbe * gV.GHP_WmaxSize * 1E-3) ** 0.74
InvCa = InvC_HP * gV.GHP_i * (1+ gV.GHP_i) ** gV.GHP_nHP / \
((1+gV.GHP_i) ** gV.GHP_nHP - 1) + \
InvC_BH * gV.GHP_i * (1+ gV.GHP_i) ** gV.GHP_nBH / \
((1+gV.GHP_i) ** gV.GHP_nBH - 1)
return InvCa
[docs]def calc_Cinv_HP(HP_Size, gV):
"""
Calculates the annualized investment costs for the heat pump
:type HP_Size : float
:param HP_Size: Design thermal size of the heat pump in [W]
:rtype InvCa : float
:returns InvCa: annualized investment costs in [CHF/a]
..[C. Weber, 2008] C.Weber, Multi-objective design and optimization of district energy systems including
polygeneration energy conversion technologies., PhD Thesis, EPFL
"""
if HP_Size > 0:
InvC = (-493.53 * log(HP_Size * 1E-3) + 5484) * (HP_Size * 1E-3)
InvCa = InvC * gV.HP_i * (1+ gV.HP_i) ** gV.HP_n / \
((1+gV.HP_i) ** gV.HP_n - 1)
else:
InvCa = 0
return InvCa
[docs]def GHP_InvCost(GHP_Size, gV):
"""
Calculates the annualized investment costs for the geothermal heat pump
:type GHP_Size : float
:param GHP_Size: Design electrical size of the heat pump in [Wel]
InvCa : float
annualized investment costs in EUROS/a
"""
InvC_HP = 5247.5 * (GHP_Size * 1E-3) ** 0.49
InvC_BH = 7100 * (GHP_Size * 1E-3) ** 0.74
InvCa = InvC_HP * gV.GHP_i * (1+ gV.GHP_i) ** gV.GHP_nHP / \
((1+gV.GHP_i) ** gV.GHP_nHP - 1) + \
InvC_BH * gV.GHP_i * (1+ gV.GHP_i) ** gV.GHP_nBH / \
((1+gV.GHP_i) ** gV.GHP_nBH - 1)
return InvCa