Minor Program in Computational Science Competency/Topic Overview
As part of the creation of an interdisciplinary undergraduate minor program in computational science put into place at a number of Ohio institutions, we formulated a set of competencies to serve as guidance in the creation of courses and course materials in computational science. The competencybased approach allows institutions to design their curriculum in a flexible way by integrating portions of the computational science materials into existing courses, by creating new courses focused on computational science, or doing a combination of the two.
The competencies were created by the participating faculty and then reviewed by a business advisory committee that offered some advice on topic emphasis and breadth. Since that time, a number of courses and instructional modules have been put into place and tested in a variety of instructional formats. In addition, there have been significant changes in computing technology with the advent of multicore and manycore computational resources. The competencies below reflect the competencies based on these experiences.
Area 1: Simulation and Modeling

Explain the role of modeling in science and engineering:
 Discuss the importance of modeling to science and engineering
 Discuss the history and need for modeling
 Discuss the cost effectiveness of modeling
 Discuss the timeeffect of modeling (e.g. the ability to predict the weather)
 Define the terms associated with modeling to science and engineering
 List questions that would check/validate model results
 Describe future trends and issues in science and engineering
 Identify specific industry related examples of modeling in engineering (e.g., Battelle; P&G, material science, manufacturing, bioscience, etc.)
 Discuss application across various industries (e.g., economics, health, etc.)

Analyze modeling and simulation in computational science:
 Identify different types of models and simulations
 Describe a model in terms of iterative process, linking physical and virtual worlds and the science of prediction
 Explain the use of models and simulation in hypothesis testing (e.g. scientific method)

Create a conceptual model:
 Illustrate a conceptual modeling process through examples
 Identify the key parameters of the model
 Estimate model outcomes
 Utilize modeling software and/or spreadsheets to implement model algebraic equations (e.g. Vensim, Excel, MATLAB, Mathematica)
 Construct a simple computer visualization of the model results (e.g. infectious disease model, traffic flow, etc.)
 Validate the model with data
 Discuss model quality and the sources of errors

Examine various mathematical representations of functions:
 Describe linear functions
 Define nonlinear functions (e.g., polynomials, exponential, periodic, parameterized, etc.)
 Visualize functions utilizing software (e.g. Excel, Function flyer, etc.)
 Determine appropriate functional form to fit the data
 Demonstrate essential mathematical concepts related to modeling and simulation

Analyze issues in accuracy and precision:
 Describe various types of numerical and experimental errors
 Explain the concept of systematic errors
 Explain the concept of data dependent errors
 Illustrate calculation and measurement accuracy
 Identify sources of errors in modeling and approaches to checking whether model results are reasonable

Understand discrete and differencebased computer models:
 Explain the transition of a continuous function to its discrete computer representation
 Represent "rate of change" using finite differences
 Cite examples of finite differences
 Explain derivatives and how they relate to model implementation on a computer
 Write pseudocode for finite difference modeling

Demonstrate computational programming utilizing a higher level language or modeling tool (e.g.
Maple, MATLABTM, Mathematica, other):
 Describe the system syntax (e.g., menus, toolbars, etc.)
 Define elementary representations, functions, matrices and arrays, script files, etc.
 Explain programming and scripting processes (e.g., relational operations, logical operations, condition statements, loops, debugging programs, etc.)
 Create tabular and visual outputs (e.g., 2D and 3D subplots)
 Translate the conceptual models to run with this system and assess the model results (e.g. traffic flow and/or "spread of infectious disease")
 Illustrate other people's models utilizing the modeling program

Assess computational models:
 Assess problems with algorithms and computer accuracy
 Discuss techniques and standards for reviewing models
 Verify and validate the model
 Discuss the differences between the predicted outcomes of the model and the computed outcomes and relevance to the problem
 Discuss the suitability and limits of the model to address the problem for which the model was designed

Verification, Validation, and Accreditation:
 Understand the differences among verification, validation, and accreditation
 Define the typical VVA process for a model
 Describe specific approaches to model verification
 Describe validation of a model and its connection to experimental data

Complete a teambased, realworld model project:
 Identify a problem, create mathematical model and translate to computational modeling
 Organize and present project proposal
 Document model development and implementation
 Collaborate with team members to complete the project

Demonstrate technical communication:
 Demonstrate technical writing skills in the comprehensive report
 Demonstrate verbal communication skills in an oral presentation
 Create and present visual representation of model and results
 Address all components of a comprehensive technical report
 Respond to peer review
Area 2: Programming and Algorithms

Describe the fundamentals of problem solving
 Understand TopDown thinking and program design Discuss breaking up a problem into its component tasks Understand how tasks acquire data
 Describe how tasks should be ordered
 Represent tasks in a flowchart style format
 Understand the difference between highlevel languages (for example Mathematica, Maple or MATLAB), medium level languages (for example FORTRAN or C) and lowlevel languages (assembler) and when each should be used

Understand and write Pseudo code:
 List the basic programming elements of Pseudo code
 Explain the logic behind an if/then/else statement
 Understand the iterative behavior of loops
 Describe the difference between several looping constructs
 Write Pseudo code to solve basic problems
 Understand how to represent data flow in and out of subprograms

Use subprograms in program design:
 Describe how logical tasks can be implemented as subprograms
 Understand the logical distinction between functions and subroutines
 Explain the control flow when a function is called
 Define dummy and actual arguments
 Discuss the different relationships dummy and actual arguments
 Explain how function output is used
 Understand how languages handle passed data into functions and subprograms, especially one and twodimensional arrays

Write code in a Programming language:
 Understand the concept of syntax in a programming language
 Describe the syntax of the programming language constructs
 List the type of subprograms available in the language
 Explain the concepts of argument passbyvalue and passbyreference
 Understand what a compiler and linker do
 Understand the difference between a compiled and interpreted language
 Understand the difference between a typed and an untyped language
 Understand the difference between a source file and an executable file
 Write and run basic programs in the language of choice
 Understand how to debug code and how to "sanity check" code
 Understand the importance of userinterfaces: clear input instructions including physical units if needed and clearly formatted and labeled output
 Understand the numerical limits of various data types and the implications for numerical accuracy of results

Use different approaches to data I/O in a program:
 Explain the advantages and disadvantages of file I/O
 Describe the syntax for file I/O in your programming language
 Compare binary and ASCII file I/O
 Write code using file I/O and keyboard/monitor I/O

Understanding and use of fundamental programming Algorithms:
 Explain an algorithm as an ordered series of solution steps
 Describe an algorithm for a simple programming problem
 Learn and use "classic" programming algorithms from a field of interest to the student. If possible, these should be algorithms used in the student's discipline.
 Describe what a software library is
 Understand how library functions implement algorithms
 Write code to implement your own version of "classic" algorithm
 Compare with code using a library function
 Understand data flow into library functions and implications of selecting any "tuning parameters" or options that may be required

Explain various approaches to Program Design:
 Describe Functional decomposition (Topdown Problem Solving)
 Be familiar with different programming styles (e.g. function, procedural, rule based)
 Understand how to modularize code
 Understand the benefits of code reuse
 Explain the operation of a BossWorker design
 Compare designs based on Global Variables vs. selfcontained functions
 Define ObjectOriented Programming (OOP)
 Contrast OOP with functional decomposition
 Explain the power of Inheritance in OOP
 Understand how to document code
 Understand how to write and when to use stubs and drivers

Possible Additions  Understand basic concepts of parallel programming:
 Identify independent operations or tasks in a computational problem
 Understand how to represent a computational problem as a task graph
 Explain the difference between a process and a thread
 Become familiar with a threadparallel programming model such as OpenMP
 Write a threadparallel program using OpenMP or language constructs
 Understand the difference between shared and local data
 Understand data dependencies and race conditions
 Use synchronization primitives to eliminate race conditions in a threadparallel program
Area 3: Differential Equations and Discrete Dynamical Systems

Describe the solution methodology for first order linear differential and difference equations:
 Analyze modeling problems with first order differential equations and present their solution methodology (e.g. linear, homogeneous, exact)
 Analyze modeling problems with first order difference equations and present their solution methodology (e.g. homogeneous, nonhomogeneous). Analyze long term behavior

Describe the solution methodology for systems of linear first order differential and difference
equations:
 Describe modeling problems with systems of first order differential equations and present their solution methodology (e.g., homogeneous with constant coefficients, variation of parameters)
 Describe modeling problems with systems of first order difference equations and their solution methodology (e.g., homogeneous with constant coefficients)

Describe the solution methodology for higher order differential and difference equations:
 Describe modeling problems with higher order differential equations analyze their solution methodology (e.g., homogeneous, nonhomogeneous, undetermined coefficients, variation of parameters)
 Describe modeling problems with higher order difference equations analyze their solution methodology (e.g., homogeneous, nonhomogeneous). Analyze the longterm behavior.

Describe the solution methodology for differential equations using the Laplace Transforms:
 Discuss the Laplace transformation of (e.g., continuous, discontinuous, delta and convolution) functions
 Describe modeling problems with differential equations and present their solution methodology using Laplace transformations (use of CAS, Maple, Mathematica)

Describe the solution methodology for nonlinear differential equations:
 Describe the concept of an equilibrium point
 Model with nonlinear differential equations and present the phaseportrait analysis Understand and demonstrate how chaos is generated in the solution process of nonlinear differential equations

Describe the solution methodology for nonlinear difference equations:
 Describe the method of linearization
 Describe the concepts of Logistic and Henon Maps
 Model with nonlinear difference equations and demonstrate understanding of fundamental concepts from Bifurcation theory (e.g., fixed, periodic points, chaos)
 Describe techniques for controlling chaos
 Understand concepts of numerical accuracy applied to each solution approach
Area 4: Numerical Methods

Understand number representation and computer errors:
 Understand the pros and cons of floating point and integer arithmetic
 Describe various kinds of computing errors (e.g., roundoff, chopping)
 Describe absolute, relative error and percent error
 Discuss error propagation
 Describe loss of significance  methods to avoid loss of significance

Analyze methods for solving nonlinear equations:
 Discuss and contrast fixed point methods (e.g., bisection, secant, Newton's) for a single equation
 Describe a fixed point method for a system of equations (e.g., Newton's)

Describe techniques for solving systems of linear equations:
 Describe the naive Gauss elimination and the partial pivoting method
 Understand the concepts of condition number and illconditioning problems
 Discuss and contrast factorization methods (e.g., LU, QR, Cholesky, SVD)
 Discuss and contrast iterative methods (e.g., Jacobi, Gauss Siedel)
 Describe convergence and stopping criteria of iterative methods

Analyze techniques for computing eigenvalues/eigenvectors (Optional):
 Describe and give examples of eigenvalue/eigenvector problems using specific, applied examples and their significance
 Describe canonical forms of matrices
 Describe and contrast direct methods for computing eigenvalues (e.g., power method, inverse power method)
 Describe and contrast transformation methods (e.g., QR algorithm)

Describe interpolation and approximation methods:
 Describe and contrast interpolation methods (e.g., Lagrange, Chebyshev, FFT)
 Describe interpolation with spline functions (e.g., piecewise linear, quadratic, natural cubic)
 Discuss approximation using the method of least squares (linear vs. nonlinear)

Describe numerical methods for Ordinary Differential Equations:
 Describe and compare basic methods for IVPs (e.g., Euler, Taylor, RungeKutta)
 Describe and compare predictorcorrector methods
 Describe and compare multistep methods
 Discuss and contrast numerical methods for BVPs (e.g., shooting method, finite difference method)
 Compare the accuracy, memory requirements, and precision of each of the approaches

Describe numerical methods for Partial Differential Equations:
 Describe and compare numerical methods for parabolic PDEs (e.g., finite difference, CrankNicolson)
 Describe numerical methods for hyperbolic PDEs
 Describe numerical methods for elliptic PDEs (e.g. finite difference, Gauss Seidel)
 Discuss the finite element method for solving PDEs
 Describe Monte Carlo Methods
 Describe applications of Monte Carlo models with examples Discuss algorithms for Monte Carlo methods
Area 5: Optimization

Describe and use Optimization techniques:
 Describe and contrast unconstrained optimization methods (e.g., Golden section search, Steepest descent, Newton's method, conjugate gradient, simulated annealing, genetic algorithms)
 Describe and contrast constrained optimization methods (e.g., Lagrange multiplier, quasiNewton, penalty function method

Implement linear and nonlinear programs:
 Analyze linear programming methods (e.g., simplex method)
 Describe nonlinear programming methods (e.g., interior, exterior, mixed methods)
 Demonstrate ability to correctly use software systems (e.g., Matlab, IMSL, NAG) to solve practical optimization problems
Area 6: Parallel Programming

Describe the fundamental concepts of parallel programming and related architectures:
 Describe the differences between distributed and shared memory architectures
 Describe the difference between domain and functional decomposition in parallel
 Describe a parallel programming approach to an introductory problem
 Compare parallel, distributed, and grid computing concepts

Demonstrate parallel programming concepts using MPI:
 Describe the MPI programming model
 Create, compile, and run an MPI parallel program
 Create MPI programs that utilize pointtopoint communications
 Create an MPI program that uses pointtopoint blocking communications
 Create an MPI program that uses pointtopoint nonblocking communications
 Create an MPI program that uses collective communications
 Create an MPI programs that use parallel I/O
 Create MPI programs that use derived data types
 Create MPI programs that use vector derived data type
 Create MPI programs that use structure derived data type

Demonstrate knowledge of parallel scalability:
 Use mathematical formulas to determine speedup and efficiency metrics for a parallel algorithm
 Demonstrate the use of graphical systems such as MATLAB to display speedup and efficiency graphs

Demonstrate knowledge of parallel programming libraries and tools:
 Demonstrate the use of performance tools for profiling programs (e.g., GNU GPROF or MATLAB profiler)
 Create parallel programs with calls to parallel libraries (e.g. BLAS, BLACS, ScaLAPACK or FFTW)
 Demonstrate the use of MPI tracing tools (e.g., VAMPIR) to determine parallel performance bottlenecks
Area 7: Scientific Visualization

Define SciVis needs; relationships to human visualization; basic techniques:
 Define Scientific Visualization (Sci Vis)
 Discuss needs of SciVis (in the framework of a large variety of possible application areas)
 Survey different platforms for Visualization (e.g. AVS, VTK, OpenGL, VRLM)
 Discuss the different techniques and visualization methods used in SciVis
 Explain the human visualization system capabilities and perceptions
 Explain the different steps in the visualization pipeline
 Discuss different sources of data for SciVis and explain the terms applied to data types (i.e. scalar, vector, normal, tensor)
 Discuss different types of grids (e.g., regular vs. irregular grids)
 Discuss the different methods used to gather data
 Describe and explore the use of different file formats for sharing data (netCDF, XML, TIFF, GIF, JPEG, Wavefront OBJ)
 Discuss limitations of different methods
 Discuss future applications in emerging fields
 Metadata needs for graphics libraries

Overview of computer graphic concepts:
 Overview of SciVis concepts (pixels, rgb colors, 3D coordinate system, mapping 3D data to a 2Dscreen, continuous vs. discrete)
 Discuss polygonal representation
 Discuss lighting/shading
 Overview of classification/segmentation and transfer functions
 Discuss concept of rendering pipeline (no details about matrices)
 Discuss hardware rendering (mainly for polygonal models, few specialized volumetric hardware cards)
 Identify terms used in virtual space and in graphics elements
 Navigate in virtual space and manipulate primitive objects
 Explore colormaps and examine conceptual definitions for different color maps (pertaining to color spaces HSV, RGB, etc.) as related to representing data and relationships to perception

Describe approaches to visualization for different scientific problems:
 Examine different computational solutions to scientific problems
 Explain the different techniques used in visualization (i.e. glyphs, isocontours, streamlines, image processing, volumedata)
 Examine the application of problems to visualization techniques
 Utilize software tools to implement visual image of a solution
 Discuss the use of time in animation

Utilize software to implement grid representations of data:
 Identify the various cell representations (i.e. points, polygons, 3d geometries)
 Discuss the application to different grid types (i.e. structured, unstructured, random)
 Discuss raycasting methods and texture mapping
 Examine the details of raycasting sampling FAT (lowresolution sampling), interpolation techniques)
 Examine algorithms: Direct Composite, SFP, use of transparency
 Identify the grid representation and data (color reps.) (regular grids, 1, 8, 24 and 32 bit color information)
 Discuss algorithms for manipulating images, distortion, fft's, enhancement, restoration, and frequency domains
 Utilize software to implement different grid types
 Discuss limitations of grids

Use visualization software to display an isosurface:
 Discuss different data types used: scalar vs. vector data
 Discuss the different grid types
 Discuss the different algorithms (Marching Cubes, etc.)
 Introduce details of the system being used in a course (e.g., VTK, AVS, etc.)
 Apply the system to extract and display an isosurface of some data set (could be tailored towards the teacher's and student's interests/application areas)
 Discuss limitations of these methods

Use visualization software to complete a volumetric rendering:
 Discuss direct volumetric rendering (raycasting and texture mapping) and its advantages/disadvantages vs. surface rendering
 Discuss segmentation/classification and transfer functions
 Discuss and illustrate how to use a system (VTK, AVS, etc.) to do volumetric rendering)
 Using the system, visualize a data set using raycasting
 Using the system, visualize a data set using texture mapping
 Discuss limitations of this method

Utilize visualization software to visualize a vector dataset:
 Discuss vector data
 Discuss different methods for vector visualizing (particles, stream ribbons, vector glyphs, etc.)
 Discuss the use of structured grid types: (ir)regular, cylindrical, spherical Discuss application areas for vector visualization (air flow, etc.)
 Using a system (VTK, AVS, etc.), visualize a vector data set
 Discuss limitations of this method

Explore examples of image processing:
 Discuss basic steps and goals in image processing
 Discuss variety of data sources of images and how they can be represented
 Discuss algorithms used for image processing
 Explore examples of image processing (e.g., noise reduction, image enhancement, feature extraction etc)
 Discuss challenges and limitations in image processing

Use advanced techniques applied to a real problem:

To be chosen by instructor based on instructor/student interest. Among suggested topics are:
 visualizing an irregular grid
 visualizing a data set specific to the area of interest (see 3.2 and 3.3 for specific examples)
 writing a segmentation tool
 implementing a visualization algorithm from scratch (such as marching cubes or raycasting)

To be chosen by instructor based on instructor/student interest. Among suggested topics are:

Examine SciVis problems for Biological Sciences "OMICS" applications:
 Examine different problems existing in OMICS sciences that require visualization solution (overview)
 Discuss challenges of representing biomedical/biological data (i.e., representing protein structure or genomic sequence with all their attributes as a visual metaphor)
 Discuss challenges associated with visualization of scattered data such as text information and bioinformatics data (e.g., phylogenetic information)

Gene finding in genomic sequences
 Examine different components of a gene structure
 Visualize genomic structure of an individual gene

Build a comparison between genomic features from several genomes
 Visualize (and examine) similarities and differences
 Discuss goaldependent options of parsing the results to be explored elsewhere (e.g., as plain text, XMLmarked)

Protein folding and protein structure prediction
 Discuss the differences between protein folding and protein structure prediction
 Explore different methods used in protein folding and structure prediction
 Apply different methods of protein structure prediction and compare the results
 Construct, visualize and examine structurebased protein alignment
 Biological networks (e.g., proteinprotein or proteinDNA interaction networks)
 Visualization of various types of expression data
 Discuss and contrast different types of expression data e.g., microarray gene expression data, protein expression data
 Discuss different visualization (and analyses) techniques used for expression data
 Apply (and compare outcomes) hierarchical clustering and k means clustering to the same gene microarray expression data
 Discuss pros and cons of different clustering methods, their shortcomings, and ways to access the quality of clusters
 Discuss potential applications of SciVis techniques in biomedical and drug design fields
 Utilize MATLAB to implement/solve the above problems

Explore SciVis techniques in BioMedical applications:
 Explore a variety of biomedical applications of SciVis to explore large datasets such as MRI and confocal microscopy data
 Overview of volume visualization techniques in biomedical problems
 Examine and different ways MRI (Magnetic Resonance Imaging) data can be visualized (e.g., 2D image versus isocontour slices)
 Discuss potential applications (interpretation) of each of the techniques
 Utilize software tools (MATLAB, VTK) to apply the techniques above