Il progetto conteneva due discretizzazioni indipendenti della stessa fisica: i volumi finiti sulla sezione x-z di simulate.py (con generazione del dataset CSV e le sue animazioni 2D/3D) e gli elementi finiti sulla mesh shell di fem.py. Resta solo il secondo, che risolve la circonferenza invece di collassarla in un'attenuazione gaussiana. Eliminati simulate.py, plot_csv.py, plot_animazione.py e plot_animazione_3d.py. Il FEM dipendeva da simulate.py per la cinematica del gruppo di sorgenti e per la configurazione del run, quindi fem.py assorbe _x_riferimento_iniziale_m, _x_riferimento_finale_m, _intervallo_attivo e configurazione_randomizzata; la lettura del sensore (inerzia, rumore, quantizzazione) è ora applicata dentro simula_campo_fem e la skin depth resta calcolata dalla frequenza dell'induttore come sola grandezza diagnostica, dato che nel modello shell lo spessore è collassato. config.py perde i parametri che servivano solo ai volumi finiti (griglia n_nodi_x/n_nodi_z, campionamento e cartella del dataset, numero di processi) e guadagna FEM["durata_s"], FEM["seed"] e USCITA["cartella"]: le immagini e le animazioni vanno in output/ invece che in dataset/. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
54 lines
1.3 KiB
Python
54 lines
1.3 KiB
Python
# Punto di ingresso unico del progetto: seleziona da riga di comando quale
|
|
# azione eseguire.
|
|
#
|
|
# python main.py mesh # disegna la sola mesh a elementi shell
|
|
# python main.py fem # animazione 3D del campo FEM sulla mesh shell
|
|
#
|
|
# Senza argomenti stampa l'elenco delle azioni disponibili.
|
|
|
|
import argparse
|
|
import sys
|
|
|
|
|
|
def _azione_mesh() -> None:
|
|
import plot_mesh
|
|
|
|
plot_mesh.main()
|
|
|
|
|
|
def _azione_fem() -> None:
|
|
import plot_animazione_fem
|
|
|
|
plot_animazione_fem.main()
|
|
|
|
|
|
# Chiave da riga di comando -> (funzione, descrizione mostrata nell'help).
|
|
AZIONI = {
|
|
"mesh": (_azione_mesh, "Disegna la mesh a elementi shell della fascetta"),
|
|
"fem": (_azione_fem, "Animazione 3D del campo FEM sulla mesh a elementi shell"),
|
|
}
|
|
|
|
|
|
def main() -> None:
|
|
parser = argparse.ArgumentParser(
|
|
description="Analisi termica FEM della fascetta riscaldata a induzione.",
|
|
formatter_class=argparse.RawTextHelpFormatter,
|
|
)
|
|
parser.add_argument(
|
|
"azione",
|
|
nargs="?",
|
|
choices=list(AZIONI),
|
|
help="\n".join(f"{nome}: {descrizione}" for nome, (_, descrizione) in AZIONI.items()),
|
|
)
|
|
argomenti = parser.parse_args()
|
|
|
|
if argomenti.azione is None:
|
|
parser.print_help()
|
|
sys.exit(1)
|
|
|
|
AZIONI[argomenti.azione][0]()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|