Scientific Computing Core
(6 September draft)
There are four core courses: Scientific Computing I-II and Advanced
Scientific Computing I-II. The first sequence covers fundamental
algorithms applicable to modern high-performance computing systems for
discrete systems, linear and nonlinear systems, optimization, ordinary
and partial differential equations, and other applications. The
second sequence covers both algorithms and code development on modern
high-performance computing systems. It requires each student to
implement many of these ideas in a year-long project.
Scientific Computing I and II
This sequence covers fundamental algorithms applicable to modern
high-performance computing systems for discrete systems, linear and
nonlinear systems, optimization, ordinary and partial differential
equations, and other applications. Scientific Computing II can be
taken independent of Scientific Computing I provided the student has
an adequate background. Doctoral students must take both of these
courses while masters students need only take one.
Scientific Computing I (Fall Term)
This course presents fundamental techniques of and the use of
software packages in scientific computing. It will cover topics in
Monte Carlo simulations, linear and nonlinear systems, optimization,
and ordinary differential equations.
PREREQUISITES
- MAPL 460 or MAPL 466, or a knowledge of basic numerical methods
(linear and nonlinear equations, integration, interpolation)
with the permission of the instructor.
- some knowledge of C or Fortran.
SYLLABUS
- Monte Carlo Simulations
- random variables, distributions, mean, variance,
central limit theorem.
- basic Monte-Carlo simulation, Monte-Carlo integration,
convergence.
- pseudo-random-numbers, generation of nonuniformly
distributed numbers.
- variance reduction: stratified sampling, importance
sampling.
- Numerical Linear Algebra
- linear systems: estimation of errors, implementation
using Matlab, BLAS and block algorithms in LAPACK.
- brief overview of least squares problems, data fitting,
eigenvalue problems, singular value decompositions.
- Nonlinear Systems
- inverse function theorem, Newton and quasi-Newton methods.
- implicit fuction theorem, continuation methods,
bifurcations, predictor-corrector algorithms.
- Optimization
- unconstrained optimization, line searches, descent and
conjugate gradient methods, Newton and quasi-Newton methods,
Davidson-Flectcher-Powell method.
- constrained optimization, SQP.
- simulated annealing, Metropolis algorithms.
- Ordinary Differential Equations
- explicit and implicit methods,
basic facts about stability and convergence.
- GEAR packages, stiffness.
- applications: combustion.
Scientific Computing II (Spring Term)
This course presents fundamental techniques of and the use of
software packages in scientific computing. It will cover topics in
Fourier and wavelet transforms, elliptic partial differential
equations, sparse matrices, and time-dependent partial differential
equations. It can be taken independent of Scientific Computing I
provided the student has an adequate background.
PREREQUISITES
- MAPL 460 or MAPL 466, or a knowledge of basic numerical methods
(linear and nonlinear equations, integration, interpolation,
ordinary differential equations) with the permission of the
instructor.
- some knowledge of C or Fortran.
SYLLABUS
- tranform methods
- continuous and discrete Fourier transforms, Nyquist
frequency, sampling theorem, discrete cosine transform,
fast Fourier transform (FFT) algorithm.
- applications: discrete convolution and deconvolution,
Wiener filtering, approximation using truncated series,
trigonometric interpolation, Gibbs phenomenon, analysis
of time series, signal compression.
- continuous and discrete wavelet transforms, Haar and
Daubechies wavelets, approximation properties, fast
wavelet transform (FWT) algorithms.
- applications: filtering, signal compression.
- elliptic partial differential equations
- variational and weak formulations, smooth and nonsmooth
solutions.
- finite difference methods, convergence.
- finite element methods, finite element spaces, local
stiffness matrices and assembly of stiffness matrix,
convergence.
- adaptive refinement.
- sparse matrices
- direct methods: symmetric positive definite case:
RCM, min. degree reorderings, nested dissection;
description of Matlab's algorithms.
- iterative methods: Jacobi, SOR, conjugate gradient,
preconditioning (SSOR, IC, ILU), GMRES, BiCG, QMR.
- multigird methods.
- time-dependent partial differential equations
- well-posedness, dispersion analysis.
- time discretization with explicit and implicit methods,
basic facts about stability and convergence.
- method of lines for spatial discretization with finite
differences or finite elements.
- applications: diffusive, dispersive, and hyperbolic
equations.
Return to the top of
Scientific Computing I and II .
Advanced Scientific Computing I and II
This sequence presents fundamentals of code development on modern
high-performance computing systems with parallelism. It requires
students to implement many of these fundamentals in a project.
This year-long sequence should be team-taught by two instructors
with complimentary backgrounds, at least one of who should have a
strong computer science background.
Advanced Scientific Computing I (Fall Term)
This course presents fundamentals of code development on modern
high-performance computing systems with parallelism. It requires
doctoral students to implement many of these in a year-long project.
Masters students will do the same but for a term-long project. The
project includes the development of software designed to carry out a
computational scientific task, a written and oral proposal within one
month, and a written and oral progress or final report at the end of
the term.
PREREQUISITES
- Scientific Computing I or a comparable knowledge of
scientific computing,
- the permission of the instructor.
SYLLABUS
- Project Design Proposal (6 classes)
- by the end of one month each student must find a faculty
advisor and identify a suitable project that includes a
deliverable suite of software that is designed to carry
out a computational scientific task, propose appropriate
algorithms, languages, and platforms for the development of
this software, write a short project proposal that also
includes a scientific justification, and present the
proposal orally.
- Computational Environments (6 classes)
- high-performance computational and graphical platforms,
advanced architectures, high-speed networks, network
protocols, communication tools.
- Code Development (12 classes)
- compiled and interpreted languages, object-oriented
languages, memory management, local and global variables,
modularity, portability, debugging and timing tools,
interactive programming, snapshot and restart dump files,
history dump files, post-processing, scientific
visualization, documentation and version management.
- Parallel Computing (12 classes)
- vectorization, distributed computing and clusters,
types of parallel computers, parallel programming models,
distributed memory, local caches, message passing,
communication, synchronization, process spawning,
MPI/PVM software, granularity, data parallel programming,
parallel numerical linear algebra and ScaLAPACK,
High Performance Fortran, parallel algorithms for PDEs.
- Project Progress Report (6 classes)
- each student must give a written and oral report on the
state of his or her project, explain how the software has
been developed and tested, give his or her current vision
of the finished product, and detail how that vision has
evolved over the course of the project.
Advanced Scientific Computing II (Spring Term)
This course presents fundamentals of code development and
validation on modern high-performance computing systems. It requires
students to implement many of these in their year-long project. The
project includes a seminar lecture and a written final report.
PREREQUISITES
- Scientific Computing I and II or a comparable knowledge
of scientific computing,
- Advanced Scientific Computing I,
- the permission of the instructor.
SYLLABUS
- Code Development and Validation (10 classes)
- continuation of code development topics from the fall,
round-off sensitivity, performance analysis, tuning
algorithms to platforms, symmetry and stability studies,
analytical, experimental, and computational benchmark
comparisions, convergence studies, parametric sensitivity
studies, investigation of asymptotic regimes.
- Parallel Computing (10 classes)
- continuation of parallel computing topics from the fall,
more parallel algorithms for PDEs (for example, adaptive
mesh refinement, multi-grid, independent time-steps,
domain decomposition, and operator splitting), more
parallel algorithms for linear algebra, parallel
algorithms for solving systems, parallel algorithms for
unconstrained and constrained optimization.
- Computational Science Seminars (10 classes)
- local and visiting computational scientists representing
broad selection of scientific disciplines will explain the
computational aspects of their work, these aspects should
be reflected in the choice of topics covered above, each
student is expected to listen to these seminars critically.
- Project Final Report (12 classes)
- each student must give a one hour seminar and a complete
written report on his or her project, explain how the
software has been developed, tested and validated, document
how the software is used, show results of its use, detail
how his or her vision of the finished product has evolved
over the course of the project.
Return to the top of
Advanced Scientific Computing I and II .
Return to the top of
Scientific Computing I and II .