Computational Statistical Mechanics

Course objectives

The course of Computational Statistical Mechanics aims to provide the necessary knowledge to understand and implement classical molecular dynamics and Monte Carlo techniques. The methods, that allow us to generate trajectories in phase space for sampling distinct statistical ensembles, will be studied. Some techniques which offer the possibility to calculate the free energy will be also discussed and it will be shown how the use of such results can provide a description of the atoms and molecules phase diagrams. At the end of the course, students will develop the ability of a quantitative reasoning and numerical skills useful for studying, modeling and understanding a large class of atomic and molecular systems as well as supramolecular aggregates. In addition, the student will be able to utilize the most common simulation packages which are available for a numerical study of complex systems, such as colloidal and bio-molecular systems, due to the acquired full knowledge of algorithms and numerical techniques on which these programs are built. Particular emphasis will be given to object-oriented and generic programming in the implementation of a computer simulation code. In particular, the modern C++ programming language will be introduced and discussed in the context of atomistic simulations. It will be also illustrated the use of the Python language, through the NumPy and MatPlotLib libraries, to analyze and visualize the data produced by computer simulations. During the course there will be also hands-on lectures, so that students will be able to put into practice the acquired knowledge through the implementation of their own simulation code. Students will be also stimulated to present the results obtained from the simulations, so as to test their ability to communicate clearly and effectively such results. The development of a numerical simulation code will be an opportunity for the students to design and develop their own project. This way they will be able to show their learning level and ability to apply independently the theoretical concepts acquired in the course. OBJECTIVES A - Knowledge and understanding OF 1) Know common techniques to carry out computer simulations OF 2) Know object oriented programming for scientific computations. OF 3) Know common methods for analyzing data obtained from computer simulations. OF 4) Understand data produced by computer simulations. B - Application skills OF 5) Ability to implement a simulation code. OF 6) Ability to exploit simulations to obtain information about the physical properties of investigated systems. OF 7) Be able to develop computer codes for analyzing data produced by computer simulations. C - Autonomy of judgment OF 8) Be able to critically analyze the results of “numerical experiments”. OF 9) Be able to integrate autonomously the acquired knowledge in order to face new problems that require additional numeric techniques. OF 10) Be able to identify the best technique to solve and study a physical problem numerically. D - Communication skills OF 11) Know how to communicate clearly to specialists and non-specialists, through manuscripts and presentations, the results obtained. OF 12) Know how to clearly discuss a scientific topic. OF 13) Know how to reproduce calculations related to a given scientific topic in a critical and informed manner. E - Ability to learn OF 14) Have the ability to learn new algorithms and numerical techniques by exploiting the scientific literature. OF 15) Be able to conceive and develop their own project consisting of writing a simulation code or implementing a numerical technique. OF 16) Be able to overcome difficulties and setbacks in the implementation of numerical techniques through original ideas and solutions.

Channel 1
CRISTIANO DE MICHELE Lecturers' profile

Program - Frequency - Exams

Course program
The course is devoted to the study of classical many-body systems through numerical simulation techniques. All the founding methods of Molecular Dynamics (MD) and Monte Carlo (MC) simulations of atomic and molecular systems will be discussed within the framework of a object-oriented programming paradigm focusing on C++. The topics proposed during the course include the following ones: - object-oriented paradigm: encapsulation, inheritance, overloading and generic programming - introduction to C++ programming language - implementation of a simulation in C++ - Python: an effective tool to analyze data from computer simulations - review of classical statistical mechanics - interaction potentials - symplectic algorithms to solve the equations of motion - multiple time-steps integration - algorithms for constant temperature and/or pressure - algorithms for holonomic constraints - rigid body dynamics - brownian dynamics - Monte Carlo methods - numerical methods to evaluate the free-energy - umbrella Sampling and rare events
Prerequisites
It will be useful to have a basic knowledge of programming languages, such as C or Python.
Books
Theory --------- - Understanding Molecular Simulation, D. Frenkel and B. Smit, Academic Press - Computer Simulation of Liquids, M. P. Allen and D. J. Tildesley, Clarendon Press - Oxford - The Art of Molecular Dynamics Simulation, D. C. Rapapaport, Cambridge University Press - Statistical Mechanics: Theory and Molecular Simulation, Mark Tuckerman, Oxford Graduate Press - Oxford - Theory of Simple Liquids, J.-P. Hansen and I. R. McDonald, Academic Press C++ books ------------- - C++ How to program (5th edition), H. Deitel and P. Deitel, Prentice Hall [Introductory book, suitable for C++ beginners] - The C++ Programming Language (4th edition), Bjarne Stroustrup, Addison-Wesley Professional [Reference book, it is the equivalent of Kernighan-Ritchie book for the C programming language] - Effective Modern C++, Scott Meyers, O'Reilly Media [Aimed at C++ programmers for making the transition from C++03 to modern C++, i.e. to C++11 and C++14 standards]
Frequency
Lectures and practical classes are not mandatory
Exam mode
The final evaluation consists of an oral exam on at least one topic among the ones discussed during the course (even if the student did not work on a final project, see below) and which will be chosen by the student. The list of possible topics will be provided by the teacher before the exams. Of course, the students are also allowed to have an exam on all topics treated during the course. If you prepare just one topic your final grade for the oral exam will be at most 27/30. To pass the exam, the student has to illustrate a subject or work out a calculation illustrated during the course. In addition he has to prove his/her ability to apply the methods learned in situations similar to those already discussed. In particular, the evaluation will take into account: - correctness of the concepts presented; - clarity and rigor in answering the questions; - ability to develop analytically the theory; - aptitude in problem solving (method and results). The students are also encouraged to work on a project involving the development of a simulation code and to prepare a term paper (say not more than 10 pages). The simulation code will be developed with the help of the teacher during the practical classes. The term paper will earn you a bonus up to 4 points. To receive honors (30 cum laude), you must achieve a grade greater than or equal to 32. For example, if you will obtain a grade of 28 for the final oral examination and your term paper will be evaluated with a grade of 4 (i.e. the maximum), your final grade for the exam will be 32 (=28+4)=30 cum laude.
Lesson mode
In addition to standard lectures, a number (10-11) of practical (hands-on) classes will also take place, during which student will work together with the teacher on simple exercises in C++ and will be helped in the development of their simulation code in C++. The goal of these practical classes is twofold: on one side students will have a chance to learn C++ by practice, on the other one they can implement some of the algorithms discussed in the standard lectures.
CRISTIANO DE MICHELE Lecturers' profile

Program - Frequency - Exams

Course program
The course is devoted to the study of classical many-body systems through numerical simulation techniques. All the founding methods of Molecular Dynamics (MD) and Monte Carlo (MC) simulations of atomic and molecular systems will be discussed within the framework of a object-oriented programming paradigm focusing on C++. The topics proposed during the course include the following ones: - object-oriented paradigm: encapsulation, inheritance, overloading and generic programming - introduction to C++ programming language - implementation of a simulation in C++ - Python: an effective tool to analyze data from computer simulations - review of classical statistical mechanics - interaction potentials - symplectic algorithms to solve the equations of motion - multiple time-steps integration - algorithms for constant temperature and/or pressure - algorithms for holonomic constraints - rigid body dynamics - brownian dynamics - Monte Carlo methods - numerical methods to evaluate the free-energy - umbrella Sampling and rare events
Prerequisites
It will be useful to have a basic knowledge of programming languages, such as C or Python.
Books
Theory --------- - Understanding Molecular Simulation, D. Frenkel and B. Smit, Academic Press - Computer Simulation of Liquids, M. P. Allen and D. J. Tildesley, Clarendon Press - Oxford - The Art of Molecular Dynamics Simulation, D. C. Rapapaport, Cambridge University Press - Statistical Mechanics: Theory and Molecular Simulation, Mark Tuckerman, Oxford Graduate Press - Oxford - Theory of Simple Liquids, J.-P. Hansen and I. R. McDonald, Academic Press C++ books ------------- - C++ How to program (5th edition), H. Deitel and P. Deitel, Prentice Hall [Introductory book, suitable for C++ beginners] - The C++ Programming Language (4th edition), Bjarne Stroustrup, Addison-Wesley Professional [Reference book, it is the equivalent of Kernighan-Ritchie book for the C programming language] - Effective Modern C++, Scott Meyers, O'Reilly Media [Aimed at C++ programmers for making the transition from C++03 to modern C++, i.e. to C++11 and C++14 standards]
Frequency
Lectures and practical classes are not mandatory
Exam mode
The final evaluation consists of an oral exam on at least one topic among the ones discussed during the course (even if the student did not work on a final project, see below) and which will be chosen by the student. The list of possible topics will be provided by the teacher before the exams. Of course, the students are also allowed to have an exam on all topics treated during the course. If you prepare just one topic your final grade for the oral exam will be at most 27/30. To pass the exam, the student has to illustrate a subject or work out a calculation illustrated during the course. In addition he has to prove his/her ability to apply the methods learned in situations similar to those already discussed. In particular, the evaluation will take into account: - correctness of the concepts presented; - clarity and rigor in answering the questions; - ability to develop analytically the theory; - aptitude in problem solving (method and results). The students are also encouraged to work on a project involving the development of a simulation code and to prepare a term paper (say not more than 10 pages). The simulation code will be developed with the help of the teacher during the practical classes. The term paper will earn you a bonus up to 4 points. To receive honors (30 cum laude), you must achieve a grade greater than or equal to 32. For example, if you will obtain a grade of 28 for the final oral examination and your term paper will be evaluated with a grade of 4 (i.e. the maximum), your final grade for the exam will be 32 (=28+4)=30 cum laude.
Lesson mode
In addition to standard lectures, a number (10-11) of practical (hands-on) classes will also take place, during which student will work together with the teacher on simple exercises in C++ and will be helped in the development of their simulation code in C++. The goal of these practical classes is twofold: on one side students will have a chance to learn C++ by practice, on the other one they can implement some of the algorithms discussed in the standard lectures.
  • Lesson code10616466
  • Academic year2025/2026
  • CoursePhysics
  • CurriculumPhysics of Biological Systems
  • Year1st year
  • Semester1st semester
  • SSDFIS/03
  • CFU6