Textbook in PDF format
The ongoing era of high-performance computing is filled with enormous potential for scientific simulation, but also with daunting challenges. Architectures for high-performance computing may have thousands of processors and complex memory hierarchies paired with a relatively poor interconnecting network performance. Due to the advances being made in computational science and engineering, the applications that run on these machines involve complex multiscale or multiphase physics, adaptive meshes and/or sophisticated numerical methods. A key challenge for scientific computing is obtaining high performance for these advanced applications on such complicated computers and, thus, to enable scientific simulations on a scale heretofore impossible. A typical model in computational science is expressed using the language of continuous mathematics, such as partial differential equations and linear algebra, but techniques from discrete or combinatorial mathematics also play an important role in solving these models efficiently. Several discrete combinatorial problems and data structures, such as graph and hypergraph partitioning, supernodes and elimination trees, vertex and edge reordering, vertex and edge coloring, and bipartite graph matching, arise in these contexts. As an example, parallel partitioning tools can be used to ease the task of distributing the computational workload across the processors. The computation of such problems can be represented as a composition of graphs and multilevel graph problems that have to be mapped to different microprocessors. The aim of this book on Combinatorial Scientific Computing is to address these challenges by setting the stage for accelerated development and deployment of fundamental enabling technologies in high performance scientific computing. Special focus is put on load balancing and parallelization on high-performance computers, large-scale optimization, algorithmic (also: automatic) differentiation of numerical simulation code, sparse matrix software tools, and combinatorial challenges and applications in large-scale social networks. These seemingly disparate areas are unified by a common set of abstractions and algorithms based on combinatorics, graphs, and hypergraphs that represent the main focus of this book. Combinatorial Scientific Computing: Past Successes, Current Opportunities, Future Challenges Combinatorial Problems in Solving Linear Systems Combinatorial Preconditioners A Scalable Hybrid Linear Solver Based on Combinatorial Algorithms Combinatorial Problems in Algorithmic Differentiation Combinatorial Problems in OpenAD Getting Started with ADOL-C Algorithmic Differentiation and Nonlinear Optimization for an Inverse Medium Problem Combinatorial Aspects/Algorithms in Computational Fluid Dynamics Unstructured Mesh Generation 3D Delaunay Mesh Generation Two-Dimensional Approaches to Sparse Matrix Partitioning Parallel Partitioning, Coloring, and Ordering in Scientific Computing Scotch and PT-Scotch Graph Partitioning Software: An Overview Massively Parallel Graph Partitioning: A Case in Human Bone Simulations Algorithmic and Statistical Perspectives on Large-Scale Data Analysis Computational Challenges in Emerging Combinatorial Scientific Computing Applications Spectral Graph Theory Algorithms for Visualizing Large Networks