Saturday, April 16, 2016

What is Computational Science?

I have been in the Department of Scientific Computing at Florida State University for close to a decade now. Since computational science or scientific computing is a relatively new "department", I often have to explain, what it is exactly that we, computational scientists do.

My usual answer runs something like this: computational science is a relatively new discipline that sits at the intersection of computer science, mathematics, and science and engineering.

Traditionally, computer science deals with the design and analysis of data-structures, operating systems, compilers, networks, computer architectures and algorithms.

Similarly, mathematics, especially applied math, deals with application of math to science and engineering. Folks in applied math like to prove theorems about the existence and uniqueness of solutions, and the convergence of numerical schemes. Sometimes, they might not even need computers, and even when they do, they might not necessarily need big computers.

Science and engineering might include various traditional disciplines such as geology, mechanical engineering, biology, materials science, physics, etc. People in traditional science and engineering departments use a combination of theory, experiments, and models. Some of these models may be complicated enough to require computers.

Loosely, we may describe computational scientists as people who, develop algorithms that use computers to advance science.

While there is a lot of diversity among computational scientists, a typical workflow may look like:

1. Develop a mathematical model of a science or engineering problem. For example, this may be a continuous partial differential equation description of fluid flow.
2. Express it in a form suitable for computers to understand. This may involve discretizing the domain into a mesh, and rewriting the differential equations as a set of discrete linear or non-linear equations.
3. Build algorithms that are fast, and accurate to solve the systems of equations
4. Assemble computer software by integrating available libraries with new code
5. Analyze and visualize results. Use them to predict or to gain insights.
6. If needed iterate. Go back to step 1, and improve the model, the discretization, the algorithm, or the computer code.