Scientific Computing for Physics Students¶
This page serves as a central hub for all homework assignments (tasks) given throughout the course. Each task can be accessed from the Task Section below, or from the navigation bar at the top-left of the webpage, beneath the course title. Within each task, you will find multiple pages dedicated to different sub-tasks.
Homework / Task Overview ¶
Below are links to the tasks (micro-projects) completed throughout the course:
- Task 1:
- Task 2:
- Task 3:
- Task 4:
- Task 5:
- Task 6:
- Task 7:
- Task 8:
- Task 9:
Syllabus¶
Target Skills and Knowledge¶
Upon successful completion of this course, students will be able to:
- Effectively handle and combine scientific computing tools.
- Independently research and gather necessary information for coding projects.
- Design and develop code tailored to specific research needs.
- Critically evaluate and efficiently use the most suitable tools for given tasks, balancing ease of use and optimization.
- Demonstrate a fundamental understanding of computer science concepts, enabling autonomous further learning as needed.
- Apply programming skills specifically oriented towards scientific applications.
- Analyze and solve complex scientific problems using computational methods.
- Articulate the trade-offs between different computational approaches in scientific contexts.
Examination Methods¶
An oral examination where students present and defend multiple micro-projects developed throughout the course, demonstrating their understanding and application of key concepts.
Assessment Criteria¶
Critically analyze and evaluate coding micro-projects presented during the course, identifying potential pitfalls and proposing effective design strategies to overcome them.
Course Unit Contents¶
Coding forms the core of scientific computing, embodying a dual nature: one deeply rooted in established practices, and another driven by constant innovation. Throughout this course, we will strive to strike a balance between these two aspects.
Topics¶
-
Linux as a Development Environment
- Introducing CloudVeneto
- Setting Up the Development Environment (in CloudVeneto)
- Managing distros (apt and yum)
- Shell scripting in Bash
- Remote development (SSH)
-
Overview of Hardware Architecture
- CPU, memory, and storage
- Data representation (binary, hexadecimal)
- Processes, threads, and multitasking
- Floating-point representations
-
Introduction to Programming Concepts
- Procedural vs. interpreted languages
- Basics of compiling vs. interpreting
- Object-Oriented Programming
-
Data Structures
- Arrays, matrices, lists, stacks, queues, trees, heaps, hashing, graphs
- Saving data (txt, binary, HDF5, etc.)
-
Numerical Methods and Algorithms
- Big-O notation
- Matrix inversion (SVD, Cholesky)
- Root finding, interpolation, numerical integration, ODE, autodiff
- Libraries for numerical computing
-
Software Engineering for Scientists
- Version control (Git and GitHub)
- Debugging and compilation flags
- Using AI tools (ChatGPT, GitHub Copilot)
- Data visualization (Matplotlib, Plotly, gnuplot)
- Documentation and CI principles
-
Fast Fourier Transforms (FFTs)
- Discrete Fourier Transform
- FFT algorithm
-
Introduction to Monte Carlo Techniques
- Random number generators
- Monte Carlo integration and simulation
-
Introduction to Machine Learning for Physicists
- ML concepts and libraries
- Building a simple neural network
-
Optimization Techniques
- Compiler optimizations, memory layout
- Benchmarking and profiling -
Parallel and High-Performance Computing
- MPI, OpenMP, and cluster environments (SLURM, HTCondor)
- HPC software (Spark, modules) -
GPU Programming
- GPU architecture and rationale
- Writing your first GPU kernel
- Effective use of GPU libraries
Additional Notes about Suggested Reading¶
- We will provide reputable resources throughout the course, ranging from foundational materials to current literature.
- You can find recommended books and references for both C/C++ and Python programming, HPC, and AI below.
Programming with C (including parallel computing)
- Effective C (2nd Edition)
- CompSciForPhys
- ParProgForPhys
- SciCompHPC
Programming with Python
- Learn Python
- Introduction to Python for Scientists
Miscellaneous
- CloudVeneto UserGuide
- Julia Book: Practical Julia
- Quantum computing (book)