In [1]:
import dependencies
import numpy as np

from IPython.display import display, HTML

from hvac.components import Radiator
from hvac.process import Room
from nummath import graphing

%matplotlib inline

DE RADIATOR | DEEL I

1. Invloed van het volumedebiet verwarmingswater op de warmteafgifte van een radiator (wateraanvoertemperatuur constant)

De warmteafgifte van een radiator is functie van 3 variabelen:

  • het volumedebiet verwarmingswater dat door de radiator stroomt
  • de aanvoertemperatuur van het verwarmingswater aan de ingang van de radiator
  • de ruimtetemperatuur

1.1 Bepaling van het vereist volumedebiet verwarmingswater onder ontwerpcondities

We beschouwen een ruimte met een berekend warmteverlies van 5000 W onder de volgende ontwerpcondities:

  • minimale buitentemperatuur -10 °C
  • gewenste ruimtetemperatuur 22 °C.

We selecteren uit een catalogus twee identieke radiatoren met de volgende nominale specificaties:

  • warmteafgifte Qe_nom = 2514 W
  • aanvoertemperatuur Twe_nom = 75 °C
  • retourtemperatuur Twl_nom = 65 °C
  • kamertemperatuur Tr_nom = 20 °C
  • radiatorexponent n= 1.3473

Om de verwarmingsinstallatie te dimensioneren, moeten we weten welk volumedebiet verwarmingswater naar elke radiator is vereist onder de hierboven genoemde ontwerpcondities.

STAP 1: Definitie en configuratie van de radiator
De eerste stap behelst het aanmaken en configureren van de geselecteerde radiatoren in het computerprogramma:

In [2]:
radiator = Radiator(
    Qe_nom=2514.0,
    Twe_nom=75.0,
    Twl_nom=65.0,
    Tr_nom=20.0,
    n=1.3473
)

STAP 2: Keuze van de wateraanvoertemperatuur en doorgeven aan het programma van de gewenste ruimtetemperatuur onder ontwerpcondities
De waarde van de wateraanvoertemperatuur is een ontwerpkeuze. We kiezen dezelfde temperatuur die is opgegeven in de catalogus van de geselecteerde radiatoren. De ontwerpwaarde van de ruimtetemperatuur is een opgelegd gegeven. In casu wordt gevraagd dat bij de mogelijke minimale buitentemperatuur de verwarmingsinstallatie in staat moet zijn om een ruimtetemperatuur van 22 °C te handhaven. Dat is 2 °C meer dan er is opgegeven in de nominale specificaties van de radiatoren.

In [3]:
Twe_d = 75.0  # aanvoertemperatuur verwarmingswater onder ontwerpcondities
Tr_d = 22.0   # gevraagde ruimtetemperatuur te handhaven onder ontwerpcondities

STAP 3: Berekening door het programma van het vereist volumedebiet verwarmingswater per radiator onder ontwerpcondities
Noot: de vereiste warmteafgifte van 1 radiator is gelijk aan de helft van de ontwerpbelasting.

In [4]:
Vw_d = radiator.calc_Vw(Qe=2500.0, Twe=Twe_d, Tr=Tr_d)

display(HTML(
    f"Het vereist volumedebiet onder ontwerpcondities naar de radiator bedraagt <b>{Vw_d * 1000 * 60:.3f}</b> L/min."
))
Het vereist volumedebiet onder ontwerpcondities naar de radiator bedraagt 5.358 L/min.

1.2 Bepaling van het vereist volumedebiet verwarmingswater onder deelbelasting

Het vereist volumedebiet verwarmingswater onder ontwerpcondities dat het programma hierboven heeft berekend, zal alleen nodig zijn op dagen dat de aangenomen minimale buitentemperatuur zich voordoet. Bij hogere buitentemperaturen en dezelfde gewenste ruimtetemperatuur zal het warmteverlies kleiner zijn dan het berekende warmteverlies onder ontwerpcondities. In hetgeen volgt willen we bepalen welk volumedebiet verwarmingswater er vereist is bij hogere buitentemperaturen dan de minimale buitentemperatuur, waarbij de wateraanvoertemperatuur ongewijzigd blijft.

STAP 1: Berekening van de globale warmtedoorgangscoëfficiënt van de ruimte
Om het vereist volumedebiet onder deelbelasting te kunnen bepalen, moeten we vooreerst beschikken over de globale thermische weerstand of de globale warmtedoorgangscoëfficënt van de ruimte. Deze kunnen uit de warmteverliesberekening van de ruimte afgeleid worden.

In [5]:
Qe_d = 5000.0              # ontwerpbelasting van de ruimte cf. warmteverliesberekening [W]
To_d = -10.0               # de minimale buitentemperatuur onder ontwerpcondities [°C] 
R = (Tr_d - To_d) / Qe_d   # globale thermische weerstand van de ruimte [K/W]
K = 1.0 / R                # globale warmtedoorgangscoëfficiënt van de ruimte [W/K]

STAP 2: Berekening van de vereiste warmteafgifte van 1 radiator i.f.v. de buitentemperatuur
We stellen een reeks buitentemperaturen op die gelegen zijn tussen de minimale waarde onder ontwerpcondities en de gewenste ruimtetemperatuur. Mits het buiten beschouwing laten van interne warmtewinsten, zal het warmteverlies en derhalve de vereiste warmteafgifte van de radiatoren nul worden, wanneer de buitentemperatuur gelijk is geworden aan de gewenste ruimtetemperatuur. Voor elke buitentemperatuur in de reeks bepalen we m.b.v. de globale warmtedoorgangscoëfficiënt van de ruimte het warmteverlies bij die buitentemperatuur. Dit warmteverlies is dan tevens de vereiste warmteafgifte van de radiatoren.

In [6]:
# Definieer een reeks buitentemperaturen tussen de ontwerpwaarde en de gewenste ruimtetemperatuur
To_array = np.linspace(To_d, Tr_d, endpoint=True)

# Bereken de vereiste warmteafgifte van 1 radiator bij de gegeven buitentemperaturen (noot: vandaar de deling door 2)
Qe_array = K * (Tr_d - To_array) / 2.0  

Het resultaat is een functie die we in een grafiek kunnen voorstellen. De x-as is de buitentemperatuur. Op de y-as lezen we de vereiste warmteafgifte van de radiator af bij de corresponderende buitentemperatuur op de x-as.

In [7]:
graph_Qe = graphing.Graph(fig_size=[8, 8], dpi=96)
graph_Qe.add_data_set('Qe', To_array, Qe_array)
graph_Qe.set_axis_titles('To (°C)', 'Qe (W)')
graph_Qe.turn_grid_on()
graph_Qe.draw_graph()
graph_Qe.show_graph()

De grafiek toont ons dat het warmteverlies en daarmee de vereiste warmteafgifte per radiator lineair afneemt met toenemende buitentemperatuur.

STAP 3: Berekening van het vereist volumedebiet verwarmingswater door 1 radiator i.f.v. de buitentemperatuur
Nu de vereiste warmteafgifte per radiator i.f.v. de buitentemperatuur gekend is, kan het daartoe benodigd overeenkomstig volumedebiet verwarmingswater door de radiator worden berekend. De wateraanvoertemperatuur blijft gelijk aan de ontwerpwaarde Twe_den de ruimtetemperatuur blijft ook gelijk aan de gewenste ontwerpwaarde Tr_d.

Voor elke Qe in de array Qe_array berekenen we het vereiste volumedebiet. Het resultaat is de array Vw_array_1.

In [8]:
Vw_array_1 = np.array([radiator.calc_Vw(Qe=Qe_i, Twe=Twe_d, Tr=Tr_d) for Qe_i in Qe_array])

We kunnen nu het vereist volumedebiet i.f.v. de buitentemperatuur door het programma in een grafiek laten tekenen.

In [9]:
graph_Vw = graphing.Graph(fig_size=[8, 8], dpi=96)
graph_Vw.add_data_set('Vw', To_array, Vw_array_1 * 1000.0 * 60.0)
graph_Vw.set_axis_titles('To (°C)', 'Vw (L/min)')
graph_Vw.turn_grid_on()
graph_Vw.draw_graph()
graph_Vw.show_graph()

Deze grafiek leert ons dat, in tegenstelling tot de warmetafgifte van de radiator, het vereist volumedebiet verwarmingswater door de radiator veeleer exponentieel afneemt met toenemende buitentemperatuur.

2. Verloop van de ruimtetemperatuur i.f.v. het volumedebiet verwarmingswater bij een gegeven buitentemperatuur (wateraanvoertemperatuur constant)

De vraag kan ook worden gesteld welke ruimtetemperatuur zich in stationair regime zou instellen bij een gegeven buitentemperatuur en een zeker volumedebiet verwarmingswater door de radiator.

Met de onderstaande code wordt voor een reeks volumedebieten tussen (bijna) 0% en 100% van het volumedebiet onder ontwerpcondities en een gegeven buitentemperatuur To berekend welke ruimtetemperatuur zich zou instellen in stationair regime zonder enige tussenkomst van een temperatuurregeling.

In [10]:
# definieer de ruimte met de gegeven radiator
room = Room(radiator=radiator)
# de minimale buitentemperatuur onder ontwerpcondities:
room.To_des = -10.0
# globale thermische weerstand van de ruimte t.a.v. 1 radiator! (er zijn 2 radiatoren in de ruimte)
room.R = 2.0 * R

# definieer een reeks volumedebieten waarvoor de overeenkomstige ruimtetemperaturen zullen berekend worden
Vw_array_pod = np.linspace(1.0e-12, 100.0, endpoint=True)  # _pod = 'percent of design value'
# array van volumedebieten tussen 0 en 100 % van het ontwerpdebiet
Vw_array_2 = (Vw_array_pod / 100.0) * Vw_d

# ingave van de buitentemperatuur waarvoor het verloop van de ruimtetemperatuur zal berekend worden
To = 10.0  

# berekening van de ruimtetemperaturen bij de gegeven volumedebieten en de opgegeven buitentemperatuur
Tr_array = np.array([room.calc_static_Tr(Vw_i, Twe_d, To) for Vw_i in Vw_array_2])

Het resultaat kan in een grafiek getekend worden. In de grafiek wordt het volumedebiet verwarmingswater doorheen de radiator langs de x-as uitgedrukt in procenten van het ontwerpvolumedebiet. Op de y-as leest men de ruimtetemperatuur af die zich zal instellen bij een zeker volumedebiet.

In [11]:
graph_Tr = graphing.Graph(fig_size=[8, 8], dpi=96)
graph_Tr.add_data_set(f'To = {To:.1f} °C', Vw_array_pod, Tr_array)
graph_Tr.add_legend()
graph_Tr.set_axis_titles('Vw (%)', 'Tr (°C)')
graph_Tr.scale_x_axis(lim_min=0, lim_max=100, tick_step=10)
graph_Tr.turn_grid_on()
graph_Tr.draw_graph()
graph_Tr.show_graph()

De grafiek toont ons dat bij de gegeven buitentemperatuur (in casu 10 °C) en bij ongewijzigde aanvoertemperatuur van het verwarmingswater de gewenste ruimtetemperatuur reeds wordt bereikt wanneer het volumedebiet nauwelijks 10% bedraagt van het vereiste volumedebiet onder ontwerpcondities.

De maximale ruimtetemperatuur die zich bij de gegeven buitentemperatuur (10 °C) zou instellen, indien het volumedebiet verwarmingswater door de radiator gelijk zou blijven aan het ontwerpvolumedebiet Vw(%) = 100% (radiatorventiel volledig open), bedraagt:

In [12]:
display(HTML(f'Maximale ruimtetemperatuur = <b>{Tr_array[-1]:.1f}</b> °C (bij ontwerpvolumedebiet en buitentemperatuur {To:.1f} °C)'))
Maximale ruimtetemperatuur = 33.3 °C (bij ontwerpvolumedebiet en buitentemperatuur 10.0 °C)
In [ ]: