Trasforma il modello termico da 1D a 2D sulla sezione della fascetta

La lastra diventa una fascetta cilindrica (diametro, lunghezza, spessore)
di cui si simula la sezione rettangolare lunghezza x spessore, con origine
nel vertice in alto a sinistra: x = lunghezza, z = spessore, y = coordinata
circonferenziale non risolta (offset collassato in attenuazione gaussiana).

- Le sorgenti si muovono in direzione -x e producono un profilo di flusso
  q(x) su tutto il lato esterno; corretto il posizionamento del gruppo per
  velocita' negative
- Sensore a infrarossi con coordinata x e distanza dalla parete interna,
  misura la superficie interna senza contatto
- Volumi finiti 2D con Eulero implicito: matrice sparsa fattorizzata LU una
  volta per run (scipy.sparse.linalg.splu), a ogni passo solo i sistemi
  triangolari
- Convezione sui lati esterno/interno, bordi adiabatici in x
- Schema CSV invariato; metadata con geometria e griglia 2D

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-05 19:20:47 +02:00
parent b40ee49528
commit bb492c37a6
6 changed files with 189 additions and 147 deletions
+48 -29
View File
@@ -1,17 +1,25 @@
# Configurazione per il simulatore termico 1D attraverso lo spessore.
# Configurazione per il simulatore termico 2D della sezione di una fascetta.
#
# Modello fisico:
# - La piastra è ridotta a una dimensione: z = direzione dello spessore.
# - La sorgente di calore si trova sul lato caldo, z = 0.
# - Il sensore si trova sul lato opposto, z = spessore.
# - L'induttore si muove lungo x. Poiché il modello è 1D, il movimento è
# rappresentato come un flusso termico variabile nel tempo nel punto
# allineato con il sensore fisso.
# Geometria e modello fisico:
# - La fascetta è un anello cilindrico con diametro "diametro_mm", spessore
# "spessore_mm" e lunghezza "lunghezza_mm".
# - Il dominio simulato è la sezione rettangolare lunghezza × spessore.
# - Sistema di coordinate: origine (0, 0) nel vertice in alto a sinistra
# della sezione. x = direzione della lunghezza (da 0 a lunghezza),
# z = direzione dello spessore (0 = lato esterno, dove agiscono le
# sorgenti; spessore = lato interno, osservato dal sensore).
# - y è la coordinata circonferenziale: non è risolta spazialmente, l'offset
# y del percorso delle sorgenti è collassato in un'attenuazione gaussiana
# del flusso.
# - Le sorgenti a induzione si muovono in direzione -x sul lato esterno.
# - Il riscaldamento a induzione è approssimato come riscaldamento volumetrico
# che decade esponenzialmente con la profondità secondo un parametro skin depth.
# che decade esponenzialmente con la profondità z secondo la skin depth.
# - Il sensore è un pirometro a infrarossi posto all'interno della fascetta,
# a distanza "distanza_parete_mm" dalla parete interna: misura senza
# contatto la temperatura della superficie interna nel punto x = "x_mm".
#
# Unità di misura:
# - lunghezza: m
# - lunghezza: m (mm dove indicato dal suffisso)
# - tempo: s
# - temperatura: °C
# - flusso termico: W/m²
@@ -39,13 +47,22 @@ SIMULAZIONE = {
"cartella_output": "dataset",
}
PIASTRA = {
# Spessore della piastra [mm].
FASCETTA = {
# Diametro della fascetta [mm].
"diametro_mm": 70.0,
# Lunghezza della fascetta lungo x [mm].
"lunghezza_mm": 100.0,
# Spessore della parete [mm].
"spessore_mm": 0.12,
# Numero di celle del volume finito attraverso lo spessore.
# Numero di celle del volume finito lungo x (lunghezza).
"n_nodi_x": 100,
# Numero di celle del volume finito lungo z (spessore).
# Più nodi = maggiore risoluzione spaziale, simulazione più lenta.
"n_nodi": 61,
"n_nodi_z": 15,
# Temperatura iniziale uniforme.
"temperatura_iniziale_C": 25.0,
@@ -58,11 +75,11 @@ ARIA = {
# Temperatura dell'aria ambiente.
"temperatura_ambiente_C": 25.0,
# Coefficiente di convezione sul lato caldo (sorgente).
"h_caldo_W_m2K": 12.0,
# Coefficiente di convezione sul lato esterno (z = 0, lato sorgenti).
"h_esterno_W_m2K": 12.0,
# Coefficiente di convezione sul lato freddo (sensore).
"h_freddo_W_m2K": 8.0,
# Coefficiente di convezione sul lato interno (z = spessore, lato sensore).
"h_interno_W_m2K": 8.0,
}
SORGENTE = {
@@ -74,16 +91,13 @@ SORGENTE = {
# gruppo più lontana dal sensore (quella che lo supera per ultima).
"x_fine_m": 5.0,
# Coordinata laterale fissa della proiezione del sensore sul lato caldo.
# L'effetto della sorgente è massimo quando x_sorgente == x_sensore e offset_y_m == 0.
"x_sensore_m": 0.0,
# Offset laterale tra il percorso della sorgente e la linea del sensore.
# Se diverso da zero, la sorgente passa a lato del sensore, riducendo il picco.
# Offset circonferenziale (y) tra il percorso delle sorgenti e il punto
# osservato dal sensore. Se diverso da zero, la sorgente passa a lato,
# riducendo il picco.
"offset_y_percorso_m": 0.0,
# Velocità della sorgente lungo x.
"velocita_m_s": 2.0,
# Velocità delle sorgenti lungo x. Il segno indica il verso di marcia.
"velocita_m_s": -2.0,
# Numero di sorgenti equidistanti che si muovono insieme come un gruppo
# rigido (stessa velocità, sigma, flusso ed efficienza).
@@ -98,7 +112,7 @@ SORGENTE = {
# Flusso termico incidente massimo prima della correzione per efficienza.
"flusso_termico_picco_W_m2": 5500000.0,
# Frazione del flusso incidente che diventa effettivamente calore nella piastra.
# Frazione del flusso incidente che diventa effettivamente calore nella fascetta.
"efficienza_riscaldamento": 0.35,
# Frequenza di induzione usata per stimare la skin depth se skin_depth_fissa_m è None.
@@ -113,8 +127,13 @@ SORGENTE = {
}
SENSORE = {
# Il sensore si trova sul lato freddo della piastra.
"posizione": "lato_freddo",
# Coordinata x del punto della superficie interna osservato dal sensore [mm].
"x_mm": 50.0,
# Distanza del sensore dalla parete interna lungo z [mm].
# Il sensore è a infrarossi: la distanza non influenza la misura,
# è registrata solo come geometria del setup.
"distanza_parete_mm": 10.0,
# Inerzia del sensore del primo ordine.
# Valore più alto = risposta del sensore più lenta.