Vai al contenuto

Dimensionamento della rete e idraulica

Una volta disegnata la topologia della rete e collegati gli edifici, due strumenti sequenziali la trasformano in un progetto dimensionato e con le pressioni risolte: Dimension pipes seleziona un diametro nominale per ciascun segmento in base alla portata di picco, e il solutore idraulico (eseguito come parte di Simulate network operation) calcola velocità, perdite di carico e prevalenze delle pompe.

Questa pagina illustra gli algoritmi alla base di entrambi i passaggi. Per i campi dati scritti su ciascuna tubazione e nodo, vedere Modello dati di reti e sorgenti di calore. Per ciò che la simulazione completa calcola oltre all'idraulica, vedere Perdite di calore e simulazione.

Dimensionamento delle tubazioni

Dalla potenza di picco alla portata

L'obiettivo del dimensionamento delle tubazioni è selezionare il diametro nominale (DN) più piccolo che mantenga la velocità del fluido e la perdita di carico all'interno dell'intervallo definito per quel DN nella tabella delle specifiche delle tubazioni della rete: una velocità minima per prevenire la sedimentazione, e limiti di velocità massima e di gradiente di pressione per controllare rumore, erosione e costi di pompaggio. Il punto di partenza è la portata volumetrica di picco in ciascun segmento di tubazione.

La portata di picco è derivata dalla potenza termica di picco che il segmento deve trasportare:

\[Q = \frac{P}{\rho \cdot c_p \cdot \Delta T}\]

dove P è la potenza di picco (W), ρ è la densità del fluido (kg/m³), c_p è la capacità termica specifica (J/kg·K) e ΔT = T_\text{supply} − T_\text{return} è il salto di temperatura. Sia ρ che c_p sono presi dal fluido di lavoro della rete alle sue temperature di esercizio.

Selezione del diametro nominale

Il dimensionamento è guidato dalla tabella delle specifiche delle tubazioni della rete: una tabella di consultazione modificabile, specifica per rete, indicizzata su DN e materiale, che riporta per ciascun DN il diametro interno e il suo intervallo di velocità e di gradiente di pressione (vedere Specifiche delle tubazioni). Per ciascun DN candidato il dimensionatore calcola la velocità e il gradiente di pressione risultanti e applica i limiti della tabella:

velocity = Q / A_inner          where A_inner = π (d_inner / 2)²
pressure_gradient = Darcy-Weisbach ΔP/L at that velocity

For each segment, walking DNs from largest to smallest:
  reject any DN where velocity > max_velocity_m_s        (hard limit)
  reject any DN where ΔP/L     > max_pressure_gradient_pa_m (hard limit)
  prefer the smallest surviving DN with velocity ≥ min_velocity_m_s
  if none reaches min velocity → use the smallest surviving DN
  if nothing survives the hard limits → use the largest DN (flagged below)

Sia la velocità minima e massima, sia il gradiente di pressione raccomandato e massimo, sono letti per riga DN dalla tabella delle specifiche: non esiste un'unica regola 1–4 m/s codificata rigidamente. I valori predefiniti per l'acciaio forniti usano un minimo di 0,5 m/s e un massimo di 1,5–3,0 m/s che aumenta con il diametro; altri materiali e tabelle modificate possono differire.

Una volta selezionato un DN, i seguenti campi vengono scritti sul segmento di tubazione:

flowchart LR P["━━ Pipe segment"] P --> DN["Nominal diameter<br/>(DN)"] P --> ID["inner_diameter_m"] P --> VEL["velocity_m_s"] P --> VOL["fluid_volume_m3"] P --> CAP["maximum_capacity_kw"] classDef pipe fill:#ffab91,stroke:#bf360c,stroke-width:2px,color:#bf360c classDef field fill:#fff3e0,stroke:#ED6000,stroke-width:1.5px,color:#bf360c class P pipe class DN,ID,VEL,VOL,CAP field

maximum_capacity_kw è la potenza termica che il segmento può trasportare alla velocità massima del suo DN: è un valore di margine di progetto, non un limite rigido imposto in fase di esecuzione.

Flag di validazione del dimensionamento

Dopo la scelta di un DN, ciascuna tubazione viene confrontata con la sua riga nella tabella delle specifiche e contrassegnata con due valori booleani:

Campo Significato
velocity_in_range min_velocity_m_s ≤ v ≤ max_velocity_m_s per il DN scelto.
pressure_gradient_ok ΔP/L ≤ max_pressure_gradient_pa_m per il DN scelto.

Un segmento la cui portata è troppo bassa per raggiungere la velocità minima anche al DN più piccolo, o il cui DN è al di fuori della tabella delle specifiche, viene contrassegnato con velocity_in_range = false. Questi flag compaiono nell'ispettore delle tubazioni, così da poter individuare i segmenti che operano al di fuori del loro intervallo, senza bloccare l'esecuzione.

Reti ad albero e reti ad anello

Il modo in cui le portate dei segmenti vengono determinate prima del dimensionamento dipende dalla topologia della rete.

Le reti ad albero (ramificate) hanno un unico percorso di flusso da ciascuna centrale energetica a ciascun edificio. La portata di picco in ciascun segmento è la somma dei fabbisogni di picco di tutte le sottostazioni degli edifici a valle di esso. Il dimensionamento procede segmento per segmento dalle foglie verso la centrale energetica.

flowchart LR EC["⚙️ Energy center"] EC -->|"Q₁+Q₂+Q₃"| J1["●"] J1 -->|"Q₁+Q₂"| J2["●"] J1 -->|"Q₃"| BS3["🔌 Substation C"] J2 -->|"Q₁"| BS1["🔌 Substation A"] J2 -->|"Q₂"| BS2["🔌 Substation B"] classDef ec fill:#ffccbc,stroke:#bf360c,stroke-width:2px,color:#bf360c classDef bs fill:#ffe0b2,stroke:#e65100,stroke-width:1.5px,color:#bf360c classDef cp fill:#ffffff,stroke:#bf360c,stroke-width:1.5px,color:#bf360c class EC ec class BS1,BS2,BS3 bs class J1,J2 cp

Le reti ad anello (magliate) hanno percorsi multipli tra le centrali energetiche e le sottostazioni, quindi le portate non sono univoche. TESSA usa un approccio pratico in due passaggi:

  1. Calcolare l'albero ricoprente minimo (MST) della topologia ad anello.
  2. Dimensionare l'MST come rete ad albero utilizzando la procedura sopra descritta.
  3. Per ciascuna connessione aggiuntiva che chiude un anello, costruire un MST forzato che includa quella connessione come arco obbligatorio e dimensionarlo in modo indipendente.
  4. Per ciascun segmento, il DN finale è il DN più grande selezionato tra tutti i passaggi MST che includono quel segmento.

Ciò garantisce che ogni corda dell'anello sia dimensionata per trasportare una portata di picco realizzabile, evitando al contempo la necessità di un solutore idraulico completo del flusso nella fase di dimensionamento.

Connessioni

I connettori degli edifici e i connettori delle centrali energetiche sono dimensionati in modo indipendente dalle altre tubazioni. La loro portata deriva dal proprio valore v_dot (la portata volumetrica alla sottostazione o alla centrale energetica collegata), e non dal fabbisogno aggregato a valle. Ciò riflette il fatto che le tubazioni di connessione servono una sola sottostazione.

Riesecuzione del dimensionamento

Il flag overwrite_diameters (predefinito: true) controlla se una nuova esecuzione del dimensionamento sostituisce i diametri esistenti. Impostarlo su false per preservare i segmenti in cui è stato inserito manualmente un DN — ad esempio, se si sa che un particolare segmento della dorsale deve essere almeno DN 150 per un'estensione futura — lasciando comunque che TESSA dimensioni i segmenti restanti.

Idraulica di Darcy-Weisbach

La risoluzione idraulica delle pressioni viene eseguita come parte di Simulate network operation e utilizza l'equazione di Darcy-Weisbach insieme alla correlazione del fattore d'attrito di Colebrook.

Numero di Reynolds e fattore d'attrito

Il numero di Reynolds per ciascun segmento di tubazione è:

\[\text{Re} = \frac{\rho \cdot v \cdot d}{\mu}\]

dove μ è la viscosità dinamica del fluido di lavoro. Il fattore d'attrito f viene poi calcolato:

  • Flusso laminare (Re < 2000): la soluzione esatta, f = 64 / Re.
  • Flusso turbolento (Re ≥ 2000): TESSA risolve iterativamente l'equazione implicita di Colebrook:
\[\frac{1}{\sqrt{f}} = -2 \log_{10}\!\left(\frac{\varepsilon}{3.7\,d} + \frac{2.51}{\text{Re}\,\sqrt{f}}\right)\]

dove ε è la rugosità della tubazione (m). La rugosità proviene dalla tabella delle specifiche delle tubazioni della rete — per riga DN quando impostata, altrimenti il valore di ripiego di rugosità valido per l'intera rete (il valore predefinito per l'acciaio è 0,045 mm). L'applicazione di un preset di materiale diverso, o la modifica della tabella delle specifiche, cambia la rugosità qui utilizzata. Vedere Specifiche delle tubazioni.

Perdita di carico per segmento

Determinato f, la perdita di carico di Darcy-Weisbach è:

\[\Delta p = f \cdot \frac{L}{d} \cdot \frac{\rho v^2}{2}\]

Una maggiorazione della perdita di carico (predefinita 20%) viene aggiunta alla perdita di Darcy-Weisbach calcolata per tenere conto delle perdite localizzate a curve, raccordi e valvole. Il fattore di maggiorazione è applicato in modo uniforme a tutti i segmenti e può essere regolato nelle impostazioni della rete.

La perdita di carico in metri di colonna di fluido è memorizzata insieme al valore in Pa:

\[h_{f,\text{DW}} = \frac{\Delta p}{\rho \cdot g}\]

Risultati scritti per tubazione dopo la risoluzione idraulica:

Campo Descrizione
m_dot_kg_s Portata massica (kg/s)
v_dot_m3_s Portata volumetrica (m³/s)
velocity_m_s Velocità media (m/s)
pressure_loss_pa Perdita di carico totale, maggiorazione inclusa (Pa)
h_f_dw_m Perdita di carico in metri di colonna di fluido
pressure_loss_pa_m Perdita di carico per metro di tubazione (Pa/m)

Perdite di carico alle sottostazioni

Le perdite di carico alle sottostazioni sono modellate come cadute fisse attraverso lo scambiatore di calore o le apparecchiature interne:

  • Sottostazione dell'edificio (scambiatore di calore): caduta di pressione predefinita 0,7 bar
  • Centrale energetica (apparecchiature interne e valvole): caduta di pressione predefinita 1,0 bar

Queste sono convertite in perdita di carico tramite h = ΔP / (ρ · g) e aggiunte al percorso idraulico nel sommare le perdite da una centrale energetica a una sottostazione.

Pressione statica e pressurizzazione della rete

Dopo aver risolto le perdite dinamiche, TESSA calcola le pressioni assolute in ciascun nodo. L'utente designa un nodo di riferimento — tipicamente l'ingresso della pompa in una centrale energetica — e imposta una pressione statica minima che deve essere mantenuta ovunque nella rete (per evitare che il fluido evapori in vapore o che aspiri aria attraverso i giunti).

Il passaggio di pressurizzazione propaga la pressione dinamica dal nodo di riferimento a ogni altro nodo lungo i percorsi di flusso risolti, poi verifica che nessun nodo scenda al di sotto del minimo. Se ciò accade, la pressione minima della rete viene aumentata finché il vincolo non è soddisfatto.

Risultati per nodo:

Campo Descrizione
pressure_dynamic_supply_pa Pressione assoluta sul lato mandata (Pa)
pressure_dynamic_return_pa Pressione assoluta sul lato ritorno (Pa)
flowchart LR EC["⚙️ Energy center<br/>(reference node)"] J1["● Junction"] J2["● Junction"] BS1["🔌 Substation A"] BS2["🔌 Substation B"] EC -->|"Δp₁"| J1 J1 -->|"Δp₂"| J2 J1 -->|"Δp₃"| BS1 J2 -->|"Δp₄"| BS2 EC -.p_ref.- REF["📍 p_min constraint"] classDef ec fill:#ffccbc,stroke:#bf360c,stroke-width:2px,color:#bf360c classDef bs fill:#ffe0b2,stroke:#e65100,stroke-width:1.5px,color:#bf360c classDef cp fill:#ffffff,stroke:#bf360c,stroke-width:1.5px,color:#bf360c classDef fluid fill:#bbdefb,stroke:#0d47a1,stroke-width:1.5px,color:#0d47a1 class EC ec class BS1,BS2 bs class J1,J2 cp class REF fluid

Dimensionamento delle pompe

Una volta note tutte le perdite di carico, TESSA dimensiona la pompa di circolazione di ciascuna centrale energetica.

La prevalenza richiesta alla pompa di una centrale energetica è la perdita di carico totale lungo il percorso critico — il percorso idraulico da quella centrale energetica alla sottostazione più distante (a maggiore resistenza):

\[H_\text{pump} = \sum_\text{critical path} h_{f,\text{segment}} + h_{f,\text{substations}}\]

La potenza della pompa è quindi:

\[P_\text{pump} = \frac{\dot{V} \cdot \rho \cdot g \cdot H_\text{pump}}{\eta_\text{pump}}\]

dove η_pump è il rendimento della pompa (un parametro regolabile dall'utente, predefinito 0,7). Il consumo elettrico della pompa è registrato ogni ora nella simulazione e aggiunto ai costi di esercizio e ai valori di CO₂ della rete.

flowchart TD CL["Critical path losses<br/>━━━━━━━━<br/>Σ pipe head losses<br/>+ substation drops"] CL --> H["Pump head H"] H --> PP["Pump power P<br/>(flow × head / efficiency)"] PP --> OPEX["Annual pump electricity<br/>→ operating cost<br/>→ CO₂ emissions"] classDef fluid fill:#bbdefb,stroke:#0d47a1,stroke-width:2px,color:#0d47a1 classDef field fill:#e3f2fd,stroke:#1565c0,stroke-width:1.5px,color:#0d47a1 class CL,H,PP fluid class OPEX field

Mettere insieme dimensionamento e idraulica

Il flusso di lavoro completo per un progetto di prima approssimazione è:

flowchart TD A["🏠 District with load curves<br/>and connected substations"] A --> B["▶ Dimension pipes<br/>(peak flow → DN selection)"] B --> C["▶ Simulate network operation<br/>step 1: heat distribution<br/>step 2: altitude fetch"] C --> D["▶ Hydraulic solve<br/>(Darcy-Weisbach + Colebrook)"] D --> E["▶ Pressurisation<br/>(static pressure check)"] E --> F["▶ Pump sizing<br/>(critical path → H, P)"] F --> G["✅ Pipe results: DN, v, Δp, h_f<br/>Node results: p_supply, p_return<br/>EC results: pump head, pump power"] classDef step fill:#fff3e0,stroke:#ED6000,stroke-width:1.5px,color:#bf360c classDef done fill:#ffab91,stroke:#bf360c,stroke-width:2px,color:#bf360c classDef input fill:#a5d6a7,stroke:#1b5e20,stroke-width:1.5px,color:#1b5e20 class A input class B,C,D,E,F step class G done

Dimension pipes deve essere eseguito prima della simulazione. Se si esegue la simulazione senza aver dimensionato la rete, le perdite di carico e i valori delle pompe saranno nulli o assenti.

Dove andare dopo