# 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 simula # genera il dataset di run # python main.py grafico # grafici del primo run generato # python main.py anima # animazione 2D della sezione # python main.py anima3d # animazione 3D isometrica del barattolo # 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_simula() -> None: import simulate simulate.main() def _azione_grafico() -> None: import plot_csv plot_csv.main() def _azione_anima() -> None: import plot_animazione plot_animazione.main() def _azione_anima3d() -> None: import plot_animazione_3d plot_animazione_3d.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"), "simula": (_azione_simula, "Genera il dataset di run nella cartella di output"), "grafico": (_azione_grafico, "Grafici temperatura e flusso del primo run"), "anima": (_azione_anima, "Animazione 2D del campo di temperatura nella sezione"), "anima3d": (_azione_anima3d, "Animazione 3D isometrica del barattolo"), "fem": (_azione_fem, "Animazione 3D del campo FEM sulla mesh a elementi shell"), } def main() -> None: parser = argparse.ArgumentParser( description="Simulatore termico 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()