CS601: Software Development for Scientific Computing
Autumn 2021
Tuesdays (11:30AM - 12:30PM), Wednesdays (9:30AM to 10:30AM), and Thursdays (11:30AM to 12:30PM)
About the Course
Description:
This course focuses on software development skills in the context of dominant algorithmic patterns found in scientific computing. Topics include:
- Exploring tools that cross most disciplines (build tools, version control tools, compilers, debugging tools, profiling tools etc.)
- Dominant algorithmic patterns found in dense and sparse linear algebra, structured and unstructured grid methods, tree-based codes, particle methods, FFTs, and PDEs
- Selected topics in C++ Programming, Asymptotic analysis, perfomance tuning
Details:
The course syllabus discusses most of the details of the course, including a tentative schedule of topics, exam dates, and other administrative information. Announcements, assignment links, and discussion will be posted on the GitHub-Teams discussion page. If you have a question about a concept covered in lecture or about a detail of an assignment, check the discussion page first!
Instructor:
Nikhil Hegde
nikhilh 'at' iitdh 'dot' ac 'dot' in
Office hour (doubt clearing session): On demand online sessions based on the availability of student(s) and the instructor
TAs:
Gayatri Rayar
{gayatri 'dot' rayar} 'at' iitdh 'dot' ac 'dot' in,
Office hour (doubt clearing session): On demand online sessions based on the availability of student(s) and the TAs
Lecture Schedule and Notes
- Week 1 (2/8 - 5/8): Syllabus, Course Overview - Slides, Computational Thinking, CodeSamples
- Week 2 (10/8 - 12/8): Program Development Environment, C++ Getting Started, Structured Grids - Slides
- Week 3 (17/8 - 18/8): Structured Grids (contd..), Intermediate C++ (namespaces, information hiding, streams) - Slides, CodeSamples
- Week 4 (24/8 - 26/8): Tools (Git, Make), Intermediate C++ (OO concepts, Templates) - Slides, CodeSamples
- Week 5 (31/8 - 2/9): Intermediate C++ (template programming, elliptic PDEs) - Slides, CodeSamples
- Week 6 (7/9 - 9/9): Elliptic PDEs (contd..), Program representation - Slides, Notes(9/9)
- Week 7 (14/9 - 16/9): Unstructured Grids, Tools (GDB), Review (for midsem exam) - Slides, CodeSamples(gdbdemo)
- Week 8 : Midsem exams (no classes)
- Week 9 (28/9 - 30/9): Discussion (Midsem exam), Finite Element Method, Prof. Amar Gaonkar's lecture - Slides 30_9_Notes
- Week 10 (5/10 - 7/10): Finite Element Method (Prof. Amar Gaonkar's lectures) - 5_10_Notes, 6_10_Notes, 7_10_Notes
- Week 11 (12/10 - 14/10): Guest Lecture (Juthi Kiran Prasad - Mentor/Siemens, Hyderabad) Agile Methodologies, Particle Methods (N-Body Simulation) - Slides
- Week 12 (20/10 - 21/10): Particle Methods (Barnes-Hut, FMM) - Slides
- Week 13 (26/10 - 28/10): Particle Methods (FMM), Matrix Algebra - Slides, CodeSample (row-major vs. col-major)
- Week 14 (2/11 - 3/11): Matrix Algebra - Slides, Matrix Multiplication Loop Orderings (notes)
- Week 15 (9/11 - 10/11): Matrix Algebra and FFT - Slides
Homework Assignments and Exams
All homework assignments are due at 11:59PM unless otherwise announced. Assignment and exam details will be posted during the semester.
Instructions for getting familiar with test/development environment (Linux) are here
- Programming assignment 1: Environment setup - GitHub and Git overview, The error function (erf) implementation in C++ PA1 (corrected). Due: 31/8/2021
- Programming assignment 2: Structured grids and PDEs - implementation in C++ PA2. Due: 20/9/2021
- Midsem exam and Programming assignment 3: Floating point representation, Computational thinking, C++ programming, tools (GDB, Make, Git), Structured grids, and Unstructured grids (Delaunay triangulation) Midsem. On: 24/9/2021
- Bonus: ERF Function (accurate) PA1. Due: 6/10/2021
- Programming assignment 4: Unstructured grids and FEMs - implementation in C++ PA4. Due: 7/11/2021
- Sample Quizzes and solutions: 27/10, 14/10