Metodi computazionali della fisica

A.A. 2024/2025
6
Crediti massimi
62
Ore totali
SSD
FIS/02
Lingua
Italiano
Obiettivi formativi
L'insegnamento si propone di presentare una serie di tecniche moderne
utilizzate in Fisica, teorica e sperimentale,per lo sviluppo di modelli e per la predizione di osservabili di interesse fisico.
Il corso intende sviluppare negli studenti una capacita' di analisi dei problemi e di progettazione del codice necessario per la loro soluzione.
Si intende sviluppare codice originale, limitando al massimo l'utilizzo di pacchetti e librerie esterne, in modo da stimolare l'analisi dell'efficienza e dei punti critici del codice sviluppato
dagli studenti.
Le moderne tecniche di programmazione permettono di interfacciare diversi ambienti e linguaggi, combinandone i rispettivi pregi. Il corso si propone di esporre gli studenti a questa molteplicita' di approcci.
Risultati apprendimento attesi
Lo studente al termine dell'insegnamento avrà
appreso un linguaggio moderno di programmazione (Mathematica, CUDA, C++, Python).
La realizzazione di un package o di una libreria originali permettera' di sviluppare delle capacita' di organizzazione logica e algoritmica del pensiero e inoltre delle competenze pratiche di soluzione esplicita dei problemi affrontati, sia di alto che di basso livello.
I risultati delle simulazioni verranno presentati in una relazione finale, in cui lo studente dovra' dimostrare una capacita' di analisi critica rispetto alla bonta' dei risultati e alla validita' delle soluzioni adottate.
Corso singolo

Questo insegnamento può essere seguito come corso singolo.

Programma e organizzazione didattica

Edizione unica

Responsabile
Periodo
Secondo semestre

Programma
Sviluppo di un progetto, utilizzando tecniche avanzate di programmazione,
in uno dei seguenti ambiti.
-Mathematica. Realizzazione da zero di un package che sfrutti le possibilità di manipolazione a livello simbolico (p.es. generazione di grafi e di ampiezze di scattering secondo la tecnica dei diagrammi di Feynman, oppure simulazione del problema delle Sand Piles per lo studio di un fenomeno critico in Meccanica Statistica, oppure implementazione di un codice gestito da Mathematica che utilizzi una GPU programmata in CUDA per svolgere calcoli onerosi ).
-elettronica digitale: verrà introdotto il linguaggio di programmazione delle FPGA e verrà sviluppato un progetto che utilizza questo tipo di schede.
-Block-chain. Introduzione alle tecniche crittografiche di block-chain. Sviluppo di un ambiente che permetta la formulazione di smart-contracts. Applicazione di queste metodologie a problemi reali.
Prerequisiti
Conoscenza di base di almeno un linguaggio di programmazione (C/C++/Fortran).
Capacità di base di analizzare un problema in termini algoritmici.
Metodi didattici
L'insegnamento è organizzato in tre parti.
La prima parte prevede una serie di lezioni introduttive su alcuni linguaggi e metodi moderni di programmazione. Le lezioni hanno carattere generale e sono utili per affrontare i diversi problemi che possono presentarsi nello sviluppo dei progetti finali. Queste lezioni prevedono che tutti gli studenti abbiano un computer a disposizione per riprodurre immediatamente gli esempi proposti sullo schermo principale.
Nella seconda parte, gli studenti si dividono in gruppi, scegliendo di approfondire un particolare linguaggio di programmazione. I gruppi procedono in parallelo.
In ciascun gruppo vengono trattati, in una seconda serie di lezioni, argomenti specifici del linguaggio e/o della modalità di programmazione che si intendono applicare nello sviluppo del progetto.
Nella terza parte di questo insegnamento vengono proposti i problemi che gli studenti potranno sviluppare in forma di progetto. Ogni studente inizia individualmente lo sviluppo del codice di computer necessario per risolvere il problema scelto, con l'assistenza del docente. Negli incontri successivi, la pianificazione del codice, il suo sviluppo, la soluzione di eventuali problemi di programmazione o di logica del programma vengono affrontati e risolti con il docente.
Il risultato finale è un codice o una libreria di routines, il cui utilizzo permette di calcolare i risultati, numerici o simbolici, che verranno presentati nella relazione finale.
Modalità di verifica dell’apprendimento e criteri di valutazione
Durante le lezioni verranno proposti diversi argomenti di approfondimento.
Ciascuno studente dovrà scegliere uno di questi temi e svilupparlo nella forma di un progetto.
L'esame consisterà nella presentazione di una relazione scritta e nella sua discussione orale alla lavagna. La relazione deve descrivere la problematica affrontata, la metodologia di calcolo e/o simulazione adottata, i risultati ottenuti e la loro affidabilità, le prospettive di estensione dell'approccio adottato a problemi di maggiore complessità, nello stesso ambito computazionale.
La valutazione finale si basa su diversi fattori:
la completezza dello svolgimento del progetto assegnato dal docente, nelle sue parti obbligatorie e facoltative;
il rigore metodologico con cui i risultati presentati sono stati verificati;
la chiarezza espositiva nella presentazione della relazione.
FIS/02 - FISICA TEORICA, MODELLI E METODI MATEMATICI - CFU: 6
Laboratori: 48 ore
Lezioni: 14 ore
Docente/i
Ricevimento:
Su appuntamento
Edificio LITA; II piano
Ricevimento:
Tutti i giorni, dopo le 14.30
DC-1-5