CS 791/891 Spring 2006 Combinatorial Scientific Computing: Algorithms in the Real World: T, Th 3:00 -- 4:15 P.M. (tentative) ECS 2120 Alex Pothen How does Google search for web pages when you type in a query? How do bioinformatics companies mine large biological networks to identify a protein as a drug target? How do semiconductor researchers create computational simulations of nanomaterials for the future processors? What common computational tools are used by scientists and engineers working in such diverse fields as fusion energy, automobile design, aircraft design and financial optimization? A common ingredient in modeling these problems on a computer is scientific computing algorithms. In this graduate course, we will discuss some of the combinatorial and algebraic algorithms employed by these computational applications. A knowledge of these algorithms should give students the background needed to work on these emerging applications at a DOE national laboratory or in industry. Students who wish to take this course will find knowledge of algorithms and linear algebra at the undergraduate level essential. They should also be comfortable with programming in a modern programming language or an environment such as Matlab. Students will also work with a state of the art software package, OBLIO, designed and implemented by Florin Dobrian, a member of our research team at Old Dominion University. Florin Dobrian will give some of the lectures in the course. Our plan is to write a text book on combinatorial scientific computing based on these lectures. Currently there is no book discussing these modern algorithms in combinatorial scientific computing, which have been developed in the last twenty years. Some lectures will also be given by Assefaw Gebremedhin. Grades will be based on regular homework assignments, which will include analytical and computational problems. Students will also have the opportunity to complete a computational project implementing some of the algorithms discussed in class. A tentative syllabus for the course follows: I: Overview Modern scientific computing algorithms Matrix factorizations II: Simple graph models for scientific computing Matrix-vector multiplication, triangular solution Sparse matrix computations in Matlab III: Solution of Positive Definite Systems: A first look Sparse Cholesky factorization Graph models, chordal graphs Data structures: elimination tree, symbolic factors Factorization Algorithms: left-looking, and right-looking algorithms The design of OBLIO IV: Solution of Positive Definite Systems: A second look High performance algorithms via blocking: Supernodes and supernodal algorithms The multifrontal algorithm Ordering algorithms: minimum degree and nested dissection Quotient graphs Graph partitioning algorithms V: Solution of Symmetric Indefinite Systems The need for numerical pivoting and 2 by 2 pivots Delaying columns in numerical factorization Modifications for an indefinite factorization VI: Solution of Unsymmetric Systems of Equations Directed graph model Directed Acyclic Graphs and graph reductions Factorization algorithms VII: Matchings Weighted matchings for ``heavy'' diagonals Fast approximation algorithms for weighted matchings Block triangular form of a sparse matrix VIII: Graph Coloring Computing derivative matrices and coloring Jacobian computation and distance-2 coloring Hessian computation and star coloring Automatic differentiation ---------------------------------------