Esporta in CSV la temperatura simulata e la lettura del sensore
Nuova azione `python main.py csv`: esporta_csv.py integra il campo FEM e scrive output/csv/run_XXXX.csv con la temperatura vera della parete nel punto osservato, la lettura del sensore reale e il massimo nodale istante per istante, più un metadata.csv con una riga per analisi. La cartella è ricreata a ogni esecuzione. Le righe sono campionate a FEM["frequenza_campionamento_hz"], indipendente dal passo di integrazione, e FEM["num_run"] analisi vengono esportate di seguito: con la randomizzazione abilitata ognuna ha parametri diversi ma riproducibili dallo stesso seed. simula_campo_fem accetta salva_campi=False, perché all'export servono solo le serie scalari e non i campi nodali di ogni campione, e restituisce anche la temperatura nodale massima per campione. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -387,12 +387,16 @@ def simula_campo_fem(
|
||||
durata_s: float | None = None,
|
||||
mesh_dati: dict | None = None,
|
||||
rng: random.Random | None = None,
|
||||
salva_campi: bool = True,
|
||||
) -> dict:
|
||||
"""Integra il campo FEM fino a durata_s, salvando un campo ogni dt_frame_s.
|
||||
"""Integra il campo FEM fino a durata_s, campionando ogni dt_frame_s.
|
||||
|
||||
Il campo nodale è la temperatura vera della parete; la lettura del sensore
|
||||
ne è la versione degradata: inerzia del primo ordine, rumore gaussiano e
|
||||
quantizzazione, questi ultimi due applicati a ogni campionamento.
|
||||
|
||||
Con `salva_campi = False` i campi nodali non vengono accumulati (utile per
|
||||
l'export CSV, che usa solo le serie scalari): `campi` resta una lista vuota.
|
||||
"""
|
||||
if rng is None:
|
||||
rng = random.Random(FEM["seed"])
|
||||
@@ -415,7 +419,7 @@ def simula_campo_fem(
|
||||
tau_sensore = max(sensore["costante_tempo_s"], 1e-9)
|
||||
|
||||
tempi, campi, x_riferimenti = [], [], []
|
||||
T_vere, T_lette = [], []
|
||||
T_vere, T_lette, T_massime = [], [], []
|
||||
|
||||
prossimo_frame_t = 0.0
|
||||
t = 0.0
|
||||
@@ -430,10 +434,12 @@ def simula_campo_fem(
|
||||
letta = quantizza(letta, sensore["quantizzazione_C"])
|
||||
|
||||
tempi.append(t)
|
||||
campi.append(T.copy())
|
||||
if salva_campi:
|
||||
campi.append(T.copy())
|
||||
x_riferimenti.append(x_rif)
|
||||
T_vere.append(float(T[indice_sensore]))
|
||||
T_lette.append(letta)
|
||||
T_massime.append(float(T.max()))
|
||||
prossimo_frame_t += dt_frame_s
|
||||
|
||||
t += dt
|
||||
@@ -446,6 +452,8 @@ def simula_campo_fem(
|
||||
"x_riferimenti": np.array(x_riferimenti),
|
||||
"T_vere": np.array(T_vere),
|
||||
"T_lette": np.array(T_lette),
|
||||
"T_massime": np.array(T_massime),
|
||||
"cfg": cfg,
|
||||
"sorgente": sorgente,
|
||||
"T_ambiente_C": stato["T_ambiente_C"],
|
||||
"skin_depth_m": stato["skin_depth_m"],
|
||||
|
||||
Reference in New Issue
Block a user