Methods and Practice of Scientific Computing
NERS* 570 (ENGR 570)
MW 4:00 – 5:30 p.m. Room G906 COOL
F Lab. 9:00 – 11:00 a.m. 2517 GGBL
4 credits
Prerequisites: Graduate standing. Some programming skills and linear algebra are strongly recommended as background
* NERS students are able to take this class as a cognate by signing up to ENGR 570
This course is designed for graduate students who are developing the methods, and using the tools, of scientific computing in their research. With the increased power and availability of computers to do massively scaled simulations, computational science and engineering as a whole has become an integral part of research that complements experiment and theory. This course will teach students the necessary skills to be effective computational scientists and how to produce work that adheres to the scientific method. A broad range of topics will be covered including: software engineering best practices, computer architectures, computational performance, common algorithms in engineering, solvers, software libraries for scientific computing, uncertainty quantification, verification and validation, and how to use all the various tools to accomplish these things. The class will have lecture twice a week and have an accompanying lab component. Students will be graded on homework, lab assignments, and a course project.
Syllabus (Subject to Change)
M/W Lecture 1.5 hr and Friday lab 2 hr
Lecture |
Topic |
1 | Course Overview |
2 | Introduction to Linux |
3 | Intermediate Linux: Bash Scripting |
4 | Introduction to Python |
5 | Tools of the Trade: Version Control Tools, Text Editors, Development Environments |
6 | Elements of Development: Configuring, Compiling, Debugging, Testing, Documentation |
7 | Algorithms for Linear Algebra |
8 | Scientific Computing Libraries: BLAS, LAPACK, PETSc, Trilinos |
9 | Software Engineering Practices & Development Workflows |
10 | Object-Oriented Programming Concepts, Design Patterns,
Unified Modeling Language, |
11 | Estimating Software Development |
12 | Software Verification, Validation & Uncertainty Quantification |
13 | Serial and Parallel Computing Architecture |
14 | Defining Computing Performance |
15 | Serial Optimization Techniques |
16 | Parallel Programming Models |
17 | The Message Passing Interface |
18 | OpenMP |
19 | Parallel Debugging & Optimization Tools |
20 | Data Format Libraries: HDF5, NetCDF, SILO |
21 | Mesh Libraries: Libmesh, Exodus, others |
22 | Visualization Tools |
23 | Simulation Workflows and Tools |
24 | Heterogeneous Architectures and Programming Models |
25 | Project Presentations |
26 |