Course program
ORDINARY DIFFERENTIAL EQUATIONS MODULE (30 hours)
Integration of differential equations with initial conditions. Euler method. Local error and global error. Harmonic oscillator. Euler-Cromer method. Study of the integration error.
The prototype of the main function and the command line arguments. Input / output management: stdin, stdout, stderr. Input and output redirection from the command line.
Remote file transfer between machines. Use of gnuplot to generate data graphs.
Stability: the case of oscillations and exponential growth / decrease. Stability properties of Euler and Euler-Cromer methods. The role of characteristic time scales.
Integration methods: Reversibility in the Euler-Cromer method and Verlet method.
Conservation laws along the approximate trajectories of the harmonic oscillator.
Simple pendulum. Measurement of the period and study of small oscillations. Oscillations with linear damping. Estimation of the decay rate and critical damping.
Use of precompiler macros for conditional compilation: #if, #elif, #else, #endif, #ifdef. The -D option of the gcc compiler. Conditional compilation and macro functions.
Insights on the use of gnuplot: graphs in a bilogarithmic scale ("set log"), definition of functions of an independent variable, adjust the parameters of the functions with gnuplot ("fit via").
Runge-Kutta methods of order II and IV.
C: struct structures, struct pointers.
Forced pendulum. Elements of chaos. Poincaré section. Basins of attraction. Bifurcation diagrams.
Motion in a plane. Coupled equations. Motion of planets around a fixed star. Astronomical units of measurement. Calculation of the period of a closed orbit in the phase space.
Considerations on the precision of the floating-point calculation in the choice of the integration step.
Three-dimensional graphics with gnuplot.
Stability due to oscillations and relative error in the energy calculation with Runge-Kutta methods.
RANDOM WALKS MODULE (20 hours)
Dynamical memory allocation: malloc (), calloc (), realloc (), free (), sizeof ().
Brownian motion. Random Walk in one dimension.
Generation of pseudo-random numbers with the linear congruence method.
Generation of random numbers with any distribution: inversion of the cumulative, "accept or reject" method and Box-Müller transformation.
Notable generators (for good or for bad) and commonly used ones: Minimal Standard, Randu, purely multiplicative of the Ecuyer.
C library functions: rand (), lrand48 (), drand48 ()
Building the histogram of the values of a one-dimensional random walk at fixed time. Binning of a histogram. Random walk in multiple spatial dimensions. Probability of return.
Review of positional numerical systems. Hex system. Representation of integers on the calculator. Bitwise operators "&", "|", "^", "~". Bit shift operators "", "
Prerequisites
Basic knowledge of unix, bash and the syntax of C
Books
L.Barone, E. Marinari, G. Organtini, F. Ricci Tersenghi,
"Scientific programming: C-language, algorithms and models in science",
World Scientific, Singapore (2013)
Teaching mode
Approximately 30 hours of teaching in class and 10 practical
experiences in the lab
(https://elearning.uniroma1.it/course/view.php?id=2315)
Frequency
Attending the numerical lab is mandatory.
Exam mode
Complete informations are on the Moodle site and in Italian below.
More info: https://elearning.uniroma1.it/course/view.php?id=2315
The exam is a practical test in the laboratory about the most relevant
topics discussed during the course. The successful student will be
able to write/correct codes in C language, will know the basic bash
commands and how to use gnuplot. The student will be asked to apply
the methods learned during the practice and in the class. The
evaluation takes into account:
- attitude in problem solving (methods and results).
- correctness and completeness of the implemented algorithms;
- analytical development skills of the theory illustrated in class;
- clarity and rigor of the code;
LABORATORIO DI FISICA COMPUTAZIONALE 1
STRUTTURA DEGLI ESAMI DI PROFITTO
Il corso di Laboratorio di Fisica Computazionale 1 (primo semestre del secondo anno della Laurea Triennale in Fisica) è un corso teorico e pratico, che prevede la frequenza obbligatoria di esercitazioni di laboratorio computazionale. Il corso prevede in totale circa trenta ore di lezione cattedratica e circa trenta ore di frequenza del laboratorio computazionale. Una proficua partecipazione alle esercitazioni di laboratorio è obbligatoria: eventuali assenze non evitabili possono essere recuperate in accordo con i docenti del corso. Il lavoro in laboratorio si svolge in gruppi, ognuno composto da due studenti, ma è naturalmente cruciale che entrambi i componenti del gruppo contribuiscano in modo fattivo al lavoro comune.
Le caratteristiche del corso richiedono una valutazione in forma articolata, diversa dalla valutazione dei corsi che si svolgono solo in aula. Gli ingredienti fondamentali sono le valutazioni delle due prove in itinere, entrambe obbligatorie, e la valutazione del lavoro fatto in laboratorio, sia durante le esercitazioni che nella sua forma finale, con valutazione dei codici e dei risultati prodotti in laboratorio.
La prima prova in itinere viene di solito proposta intorno alla metà del corso (primi di novembre) e viene svolta a casa: c'è a disposizione per svolgerla circa una settimana, e si richiede di analizzare un problema di fisica non banale (del livello atteso per uno studente che comincia il secondo anno della Laurea Triennale in Fisica) con l’ausilio degli strumenti di programmazioni insegnati nel corso. Bisogna scrivere un codice, verificarlo, ed utilizzarlo per analizzare e comprendere i comportamenti fisici del sistema sotto esame. Oltre al codice viene richiesto di consegnare una relazione che descriva i principali risultati. La prova è individuale, e sia lo sviluppo del codice che la preparazione della relazione vanno svolti dallo studente in modo completamente autonomo. Non è previsto il recupero di questa prova, a meno di ritardi causati da dimostrata forza maggiore, che verranno discussi caso per caso.
La seconda prova in itinere si svolge di solito la settimana successiva all'ultima esercitazione di laboratorio. Si tratta di una prova individuale da sostenere al computer, nei nostri laboratori computazionali, e serve a dimostrare le competenze acquisite durante il corso di laboratorio. La parte principale della prova ha di solito a che fare con la correzione di una codice e/o con la scrittura di frammenti di codice o di brevi codici interi, ed infine con la produzione di grafici, fit ed istogrammi. In casi di forza maggiore che devono essere certificati, come malattia o impegni assolutamente irrinunciabili, lo studente può accedere a una prova di recupero.
In entrambe le prove in itinere possono essere contenute domande "teoriche" relative esclusivamente al materiale discusso durante le lezioni cattedratiche ed incluso nel programma.
I codici prodotti in laboratorio vengono valutati, sia durante le singole esercitazioni che alla fine del corso nella forma definitiva in cui vengono ufficialmente consegnati. Viene valutata la correttezza, la completezza e la pulizia dei codici, la loro efficienza, così come vengono valutate le conclusioni raggiunte con quei codici (figure e dati). In questo caso non sono richieste né previste relazioni esplicative.
Il voto finale di "esonero dal laboratorio" viene composto attraverso una combinazione dei voti discussi nei paragrafi precedenti, con pesi diversi, che possono variare a seconda della effettiva difficoltà delle prove presentate (tipicamente, come ordine di grandezza, la prima prova e la seconda prova avranno rispettivamente un peso vicino a 0.3 per la prima e a 0.4 per la seconda, e le valutazioni fatte in laboratorio avranno un peso totale vicino a 0.3). Essere esonerati dal laboratorio con un voto sufficiente certifica che il laboratorio è stato seguito con profitto, ed è condizione necessaria per poter sorpassare l'esame. Chi non ottiene la dichiarazione di esonero dal laboratorio non ha avuto un profitto tale da consentirgli di sorpassare l'esame, e dovrà seguire nuovamente le esercitazioni in laboratorio in un futuro anno accademico.
Le prove in itinere del corso sono obbligatorie proprio perché sono lo strumento principale di valutazione, il cui scopo è quello di certificare l’apprendimento reale dello studente durante il laboratorio. Come già detto, coloro che sono stati assenti per gravi motivi possono recuperarle immediatamente dopo la data delle prove stesse. Tuttavia le prove non possono essere ripetute in altri periodi dell’anno perché sono prove in itinere e sono parte integrante del laboratorio, che si conclude con la fine del corso.
Nella gran parte dei casi il voto finale di "esonero dal laboratorio" viene proposto agli studenti, che possono accettarlo, come voto finale. Per gli studenti che accettano il voto quest’ultimo viene verbalizzato al primo appello utile, senza ulteriori verifiche delle conoscenze acquisite. Solo in alcuni casi, in cui i risultati delle prove in itinere, pur potenzialmente sufficienti, non forniscano un’evidenza chiara del livello di conoscenze e competenze raggiunto dallo studente, viene richiesto di sostenere una prova finale, orale-pratica. Questi casi vengono motivati in dettaglio singolarmente.
Nel caso in cui sia necessario sostenere un'ulteriore prova orale-pratica, o nel caso in cui lo studente decida di non accettare il voto proposto come voto finale da verbalizzare, è possibile sostenere la prova orale-pratica in tutti gli appelli previsti dai regolamenti e fissati dai docenti. In questi casi il voto di "esonero dal laboratorio", che resterà invariato e valido per l'intero anno accademico, verrà mediato con il risultato dell'esame orale-pratico, e per essere promossi sarà necessario che questa media raggiunga la sufficienza.
La prova-orale pratica verte sia sugli argomenti teorici contenuti nel programma e illustrati durante le lezioni cattedratiche, sia sulle pratiche di programmazione e debugging che potranno essere svolte al computer durante l'esame orale-pratico.
Bibliography
“Numerical Recipes in C”, Press, Teukolsky, …
Lesson mode
Approximately 30 hours of teaching in class and 10 practical
experiences in the lab
(https://elearning.uniroma1.it/course/view.php?id=2315)