Methods and Practice of Scientific Computing

NERS 590, Fall 2016
MW 4:30 – 6:00 p.m. Room G906 COOL
F Lab. 9:30 – 11:30 a.m. 2517 GGBL
4 credits
Prerequisites: Graduate standing.

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.


F16 Tentative Schedule (M/W Lecture 1.5 hr and Friday lab 2 hr)

Date Lecture Topic
9/7/2016 1 Course Overview
9/12/2016 2 Introduction to Linux
9/14/2016 3 Intermediate Linux: Bash Scripting
9/19/2016 4 Introduction to Python
9/21/2016 5 Tools of the Trade:
Version Control Tools, Text Editors, Development Environments
9/26/2016 6 Elements of Development: Configuring, Compiling, Debugging, Testing, Documentation
9/28/2016 7 Algorithms for Linear Algebra
10/3/2016 8 Scientific Computing Libraries: BLAS, LAPACK, PETSc, Trilinos
10/5/2016 9 Software Engineering Practices & Development Workflows
10/10/2016 10 Object-Oriented Programming Concepts, Design Patterns,

Unified Modeling Language,

10/12/2016 11 Estimating Software Development
10/19/2016 12 Software Verification, Validation & Uncertainty Quantification
10/24/2016 13 Serial and Parallel Computing Architecture
10/26/2016 14 Defining Computing Performance
10/31/2016 15 Serial Optimization Techniques
11/2/2016 16 Parallel Programming Models
11/7/2016 17 The Message Passing Interface
11/9/2016 18 OpenMP
11/14/2016 19 Parallel Debugging & Optimization Tools
11/16/2016 20 Data Format Libraries: HDF5, NetCDF, SILO
11/21/2016 21 Mesh Libraries: Libmesh, Exodus, others
11/28/2016 22 Visualization Tools
11/30/2016 23 Simulation Workflows and Tools
12/2/2016 24 Heterogeneous Architectures and Programming Models
12/7/2016 Project Presentations