<jupyter_start><jupyter_text>**Programmabibliotheken in notebook laden...**<jupyter_code>import dependencies
import jupyter_addons as ja
ja.set_css()
import pandas as pd
from lib import Analyzer
import quantities as qty
from pypeflow.core.flow_coefficient import FlowCoefficient
from pypeflow.core.resistance_coefficient import ResistanceCoefficient
from pypeflow.core.fluids import Water
from pypeflow.core.pipe_schedules import PipeSchedule40
from pypeflow.utils.pump_curve import calculate_pump_curve, PumpCurve
from pypeflow.utils.system_curve import calculate_system_curves, draw_curves<jupyter_output><empty_output><jupyter_text>Analyse drinkwaterleidingnetwerk appartementsgebouw Om het principeschema van het leidingnetwerk te bekijken, klik op deze link. Het doel van deze notebook bestaat erin om m.b.v. de methode van Hardy Cross het werkpunt van de drukverhogingspomp te bepalen **onder condities die overeenstemmen met een "normaal" piekwaterverbruik bepaald op basis van de norm DIN 1988-300**. **Maateenheden instellen**<jupyter_code>Analyzer.set_units({
    'length': 'm',
    'diameter': 'mm',
    'flow_rate': 'L/s',
    'pressure': 'bar',
    'velocity': 'm/s'
})<jupyter_output><empty_output><jupyter_text>**Netwerkmodel initialiseren**<jupyter_code>Analyzer.create_network(
    start_node_id='n1',
    end_node_id='n0',
    fluid='water',
    fluid_temperature=10.0,
    pipe_schedule='pipe_schedule_40'
)<jupyter_output><empty_output><jupyter_text>**Netwerkmodel configureren**De configuratie van het netwerk gebeurt via een afzonderlijk [spreadsheetbestand](./input_files/hardy_gebouw.csv), opgeslagen in *csv*-opmaak. Het netwerkmodel omvat de drukverhogingspomp NOCCHI VLR 4-60 A M 50 (pompcoëfficiënten: zie rij 1, in leidingsectie *s01*) en de opvoerdruk vanuit het openbare net bedraagt **2 bar** (zie rij 4, sectie *s10*). **De sanitaire installaties in de appartementen op elke verdieping zijn gereduceerd tot één "equivalente" kraan met een weerstandscoëfficiënt van 23064, hetgeen overeenstemt met een openingsstand van de equivalente kranen die resulteert in een "normaal" piekdebiet op gebouwniveau van ca. 1,7 L/s (zie bepaling in de rekenota's bij het voorverslag).**<jupyter_code>Analyzer.configure_network('./input_files/hardy_gebouw.csv')<jupyter_output><empty_output><jupyter_text>**Netwerk oplossen: volumedebieten en stromingsverliezen in de takken berekenen**<jupyter_code>Analyzer.solve(error=1.0e-3, i_max=5000)<jupyter_output><empty_output><jupyter_text>**Resultaat ophalen**<jupyter_code>df = Analyzer.get_network()<jupyter_output><empty_output><jupyter_text>**Resultaat filteren: "verdiepingstakken" selecteren**In de onderstaande tabel kan men aflezen welk volumedebiet door de verdiepingstakken van het leidingnetwerk stroomt (kolom `flow_rate`).<jupyter_code>dff = df.iloc[[r for r in range(1,32,4)], :]
ja.display_table(dff)<jupyter_output><empty_output><jupyter_text>**Stroompaden in het netwerk analyseren**<jupyter_code>dfp = Analyzer.get_paths()
ja.display_table(dfp)<jupyter_output><empty_output><jupyter_text>>**Nota omtrent de energievergelijking toegepast op een stroompad**>De energievergelijking toegepast op een stroompad tussen het start- (subscript 1) en eindknooppunt (subscript 2) van een netwerk kan worden geschreven als:$$\left( {{p_1} + \rho \frac{{v_1^2}}{2} + \rho g{z_1}} \right) + \Delta {p_P} - \Delta {p_L} = \left( {{p_2} + \rho \frac{{v_2^2}}{2} + \rho g{z_2}} \right)$$>met:>- ${p_1}$ = statische druk in het startknooppunt>- ${\rho \frac{{v_1^2}}{2}}$ = kinetische druk (snelheidsdruk) in het startknooppunt>- ${\rho g{z_1}}$ = gravitatiedruk in het startknooppunt >- ${\Delta {p_P}}$ = mechanische energie, uitgedrukt in eenheid van druk, door een pomp toegevoerd aan het water tussen start- en eindknooppunt van het stroompad>- ${\Delta {p_L}}$ = mechanisch energieverlies, uitgedrukt in eenheid van druk, van het water tussen tussen start- en eindknooppunt van het stroompad te wijten aan wrijving en fittingen>> Deze vergelijking kan men ook uitwerken tot:$$\left( {{p_2} - {p_1}} \right) + \frac{\rho }{2}\left( {v_2^2 - v_1^2} \right) + \rho g\left( {{z_2} - {z_1}} \right) + \left( {\Delta {p_L} - \Delta {p_P}} \right) = 0$$>met:>- ${{p_2} - {p_1}}$ = statisch drukverschil van eindknooppunt t.o.v. startknooppunt (= `dp,stat`)>- ${\frac{\rho }{2}\left( {v_2^2 - v_1^2} \right)}$ = snelheidsdrukverschil van eindknooppunt t.o.v. startknooppunt (= `dp,vel`)>- ${\rho g\left( {{z_2} - {z_1}} \right)}$ = hoogtedrukverschil van eindknooppunt t.o.v. startknooppunt (= `dp, elev`)>- ${\left( {\Delta {p_L} - \Delta {p_P}} \right)}$ = netto mechanisch energieverlies tussen tussen start- en eindknooppunt (= `dp,loss (net)`)>>Het dient hier opgemerkt dat in het netto energieverlies de toegevoerde pompenergie is vervat. Een negatieve waarde duidt op winst i.p.v. verlies.>Men kan nagaan in de tabel hierboven dat de som van de kolomwaarden voor elk stroompad nul is.  Werkpunt van de pomp bepalen **Pompcurve-coëfficiënten van de pomp NOCCHI VLR 4-60 A M 50 bepalen (bij 2900 rpm @ 50 Hz)**<jupyter_code>pump_curve = PumpCurve(desired_units={'flow_rate': 'L/s', 'pressure': 'bar'})

# enter the measured points from the curve in the data sheet
pump_curve.add_measuring_points(
    points=[(0.0, 60.0), (2.4, 52.0), (4.2, 48.0), (6.0, 36.0)],
    units={'flow_rate': 'm^3/h', 'pressure': 'm'}
)

# get the pump coefficients, set the units for flow rate and pressure in which the 
# coefficients need to be expressed
a = pump_curve.get_coefficients()

ja.display_item(f'Pompcurve-coefficienten = <b>{a}</b> gerefereerd aan de eenheden <b>L/s</b> en <b>bar</b>')<jupyter_output><empty_output><jupyter_text>**Opvoerdruk van de pomp bepalen**Om de opvoerdruk van de pomp te kennen onder de opgegeven bedrijfscondities, moet men eerst het volumedebiet ophalen dat door de "pompsectie" stroomt (zie spreadsheetbestand, rij 1, leidingsectie *s12*). Dat is het volumedebiet dat in het leidingnetwerk binnenstroomt.<jupyter_code>V_pump = Analyzer.network.flow_rate('L/s')
ja.display_item(f'Volumedebiet door de drukverhogingspomp (in sectie <em>s12</em>) = <b>{V_pump:.3f}</b> L/s')<jupyter_output><empty_output><jupyter_text>Met de gekende pompcurve-coëfficiënten en het volumedebiet kan nu de opvoerdruk van de pomp berekend worden:<jupyter_code>dp_pump = a[0] + a[1] * V_pump + a[2] * V_pump ** 2
ja.display_item(f'Opvoerdruk van de pomp bij volumdebiet {V_pump:.3f} L/s = <b>{dp_pump:.3f}</b> bar')<jupyter_output><empty_output><jupyter_text>Bij deze is het werkpunt van de pomp volledig bepaald voor de **opgegeven bedrijfscondities**. **Pomp- en stroompadcurven tekenen**<jupyter_code>sys_curves = calculate_system_curves(
    flow_paths=Analyzer.network.paths,
    V_wp=Analyzer.network.flow_rate,
    dp_wp=qty.Pressure(dp_pump, 'bar'),
    unit_flow_rate='L/s',
    unit_pressure='bar',
    V_end=qty.VolumeFlowRate(3.0, 'L/s')
)
pump_curve = calculate_pump_curve(
    coeff_values=a, 
    coeff_units={'flow_rate': 'L/s', 'pressure': 'bar'},
    unit_flow_rate='L/s',
    unit_pressure='bar',
    V_end=qty.VolumeFlowRate(3.0, 'L/s')
)
graph = draw_curves(
    sys_curves=sys_curves,
    pump_curves=[pump_curve],
    units=('L/s', 'bar'),
    fig_size=(10, 6),
    dpi=96,
    V_max=3.0,
    V_step=0.1,
    p_max=6.0,
    p_step=0.5,
    working_point=(V_pump, dp_pump)
)
graph.show()<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.12837837837837837, 'fraction_numerical': 0.019324324324324325, 'mean_word_length': 5.821198156682027, 'pattern_counts': {'":': 0, '<': 61, '<?xml version=': 0, '>': 79, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '12', 'dir': 'jupyter-structured-clean-dedup', 'id': '399975', 'license': 'MIT', 'n_tokens_mistral': 2993, 'n_tokens_neox': 2894, 'n_words': 699, 'path': 'project/notebooks/gebouw.ipynb', 'repo_name': 'TomLXXVI/pipe-network-sim', 'size': '7400'}