## CME 196: Practical Fortran

A five-week short course presenting the use of the Fortran programming language in science and engineering. Topics covered: basic language elements; good programming practices; testing and debugging; verification and validation; differences between Fortran-77 and Fortran-90 (95, 03, 08); calling numerical software libraries such as LAPACK; calling Fortran routines from C or C++; performance considerations. The course will be centered around solving ¿real¿ computational problems, emphasizing practice over theory. Programming proficiency in C/C++, or other modern compiled language, is required. Familiarity with the GNU development tools (compilers, debuggers, makefiles, etc.) is assumed. Prerequisites:
CME 211 or equivalent.

Instructors:
Petersson, A. (PI)

## CME 213B: Parallel Computing Projects

Students will discuss, devise and implement parallel applications for a discipline of mutual interest. The parallel implementation will focus on the use of MPI for clusters, OpenMP for multicore processors, and/or CUDA for GPU processors. Instructors will help guide students to relevant literature and resources. A short introduction to MPI, OpenMP, and CUDA will be given at the beginning of the quarter. Hardware will be available for the duration of the quarter including NVIDIA Jetson TK1 development kits, and the ICME GPU cluster. Prerequisites:
CME 211/212 or equivalent.

Instructors:
Darve, E. (PI)
;
Henderson, N. (PI)

## CME 211: Introduction to Programming for Scientists and Engineers (EARTHSCI 211)

Basic usage of the Python and C/C++ programming languages are introduced and used to solve representative computational problems from various science and engineering disciplines. Software design principles including time and space complexity analysis, data structures, object-oriented design, decomposition, encapsulation, and modularity are emphasized. Usage of campus wide Linux compute resources: login, file system navigation, editing files, compiling and linking, file transfer, etc. Versioning and revision control, software build utilities, and the LaTeX typesetting software are introduced and used to help complete individual programming assignments and a final project. Prerequisite: Some previous experience with programming (does not need to be a formal course in programming).

Instructors:
LeGresley, P. (PI)

## CME 212: Advanced Programming for Scientists and Engineers (ENERGY 212)

Advanced topics in software programming, debugging, and performance optimization are covered. The capabilities and usage of common libraries and frameworks such as BLAS, LAPACK, FFT, PETSc, and MKL/ACML are reviewed. Computer representation of integer and floating point numbers, and interoperability between C/C++ and Fortran is described. More advanced software engineering topics including: representing data in files, application checkpoint/restart, signals, unit and regression testing, and build automation. The use of debugging tools including static analysis, gdb, and Valgrind are introduced. An introduction to computer architecture covering processors, memory hierarchy, storage, and networking provides a foundation for understanding software performance. Profiles generated using gprof and perf are used to help guide the performance optimization process. Computational problems from various science and engineering disciplines will be used in individual and group assignments. Prerequisites:
CME 200/
ME 300A and
CME 211 or equivalent level of programming proficiency in Python and C/C++.

Instructors:
LeGresley, P. (PI)

## CME 336: Linear and Conic Optimization with Applications (MS&E 314)

Linear, semidefinite, conic, and convex nonlinear optimization problems as generalizations of classical linear programming. Algorithms include the interior-point, barrier function, and cutting plane methods. Related convex analysis, including the separating hyperplane theorem, Farkas lemma, dual cones, optimality conditions, and conic inequalities. Complexity and/or computation efficiency analysis. Applications to combinatorial optimization, sensor network localization, support vector machine, and graph realization. Prerequisite: MS&E 211 or equivalent.

Instructors:
Ye, Y. (PI)

## ENERGY 212: Advanced Programming for Scientists and Engineers (CME 212)

Advanced topics in software programming, debugging, and performance optimization are covered. The capabilities and usage of common libraries and frameworks such as BLAS, LAPACK, FFT, PETSc, and MKL/ACML are reviewed. Computer representation of integer and floating point numbers, and interoperability between C/C++ and Fortran is described. More advanced software engineering topics including: representing data in files, application checkpoint/restart, signals, unit and regression testing, and build automation. The use of debugging tools including static analysis, gdb, and Valgrind are introduced. An introduction to computer architecture covering processors, memory hierarchy, storage, and networking provides a foundation for understanding software performance. Profiles generated using gprof and perf are used to help guide the performance optimization process. Computational problems from various science and engineering disciplines will be used in individual and group assignments. Prerequisites:
CME 200/
ME 300A and
CME 211 or equivalent level of programming proficiency in Python and C/C++.

Instructors:
LeGresley, P. (PI)

## GEOPHYS 211: Environmental Soundings Image Estimation (GEOPHYS 187)

Imaging principles exemplified by means of imaging geophysical data of various uncomplicated types (bathymetry, altimetry, velocity, reflectivity). Adjoints, back projection, conjugate-gradient inversion, preconditioning, multidimensional autoregression and spectral factorization, the helical coordinate, and object-based programming. Common recurring issues such as limited aperture, missing data, signal/noise segregation, and nonstationary spectra. See
http://sep.stanford.edu/sep/prof/.

Instructors:
Claerbout, J. (PI)
;
Shen, Y. (TA)

## MS&E 211: Linear and Nonlinear Optimization

Optimization theory and modeling. The role of prices, duality, optimality conditions, and algorithms in finding and recognizing solutions. Perspectives: problem formulation, analytical theory, computational methods, and recent applications in engineering, finance, and economics. Theories: finite dimensional derivatives, convexity, optimality, duality, and sensitivity. Methods: simplex and interior-point, gradient, Newton, and barrier. Prerequisite:
CME 100 or
MATH 51.

Instructors:
Goel, A. (PI)

Filter Results: