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



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