• Credits: 4

Overview of the tools used in the development of scientific software, such as the Linux user environment and its utilities for source code management. Programing basics using the Python programming language: integer and floating- point arithmetic, control structures, modular programming, and data structures including vectors and complex numbers. Introduction to the C++ language, including the concepts of compiled computer code, explicit memory management using pointers, and the use of software libraries. Overview of the Fortran programming language and its standard libraries of mathematical functions. Interfacing multiple programming languages. Examples used in the course are designed to outline strategies for combining the portability of abstract methods with computational efficiency. There will be supervised programming assignments. The majority of the grade is determined by a mid-term and a final exam, both including a combination of questionnaires and supervised programming assignments.

  • Credits: 3

This course will provide theory and hands-on experience programming high performance computers for the solution of scientific modeling problems. This includes in particular problems arising from the discretizations of differential equations. Topics covered include domain decomposition and mesh partitioning, quantifying the computation and communication cost, communication avoidance methods, Monte Carlo methods, multithreading, benchmarking and optimization of the parallel computations.

Prerequisites: Math 5061 and Math 5063, or permission of the instructor.

  • Credits: 4

The course covers various technological aspects relevant to high-performance computing (HPC), providing the foundations to efficiently perform calculations on clusters and supercomputers for the most common numerical problems encountered in science and engineering. Topics covered include: basic concepts relating to the role of the operating systems kernel (Linux) and its various sub- system such as memory, networking, and storage; a selection of daemons and services that are commonly used in Linux and HPC environments, their setup and configuration; HPC-specific tools such as deployment systems, application software management tools, remote-management infrastructure and batch management systems; crucial HPC technologies such as high-speed networks (e.g. InfiniBand), and the process of profiling and benchmarking applications. There will be computer lab exercises, consisting of the implementation (using virtual- machine technology) of specific tasks selected among those commonly required in scientific computing applications. The majority of the grade is determined by a mid-term and a final exam, both including a combination of questionnaires and identification of the most efficient solution to common numerical problems.

Co-requisite: Math 5061.

  • Credits: 3

This course presents mathematical methods for the solution of a variety of discrete and algebraic problems which are at the core of many scientific and engineering applications. The methods covered are especially tailored for high performance computing. Topics include large matrix computations, graphs and networks, fast Fourier transforms, geometric and algebraic multi- grid methods, and constrained optimization.

Prerequisites: Math 5061 and Math 5063, or permission of the instructor.

  • Credits: 3

This course will cover the basic concepts of structural bioinformatics and molecular modeling. A broad qualitative overview of macromolecular structure and protein folding will be provided which includes sequence alignment, secondary structure calculation, and tertiary structure prediction. An introduction to programming languages, data mining and algorithms used in Bioinformatics will be covered to provide competence in handling large and complex biological data. The course also offers practical training on the application of computational modelling in aspects of drug discovery.