Welcome to this nine-week course on computers, waves, and simulations.

In the background, you see a nice scenery, descriptive of nature.

I'm an Earth scientist.

So, we would like to understand how the earth works.

There are many phenomena like climate, weather, earthquakes, oceans,

oceans how they circulate,

and so forth that, if you want to understand them,

they require simulation technology.

Now, what is simulation technology?

It's the application of numerical methods to

the partial differential equations that

describe the phenomena that you're interested in.

Now, this course will be - I call it a practical introduction to

these numerical methods by taking the simplest possible equation that is time-dependent,

the wave equation, that's used in many fields, important for many phenomena,

and by taking that equation,

we compare how we can solve it with different numerical methods.

These methods are the finite difference method, the pseudospectral method,

the finite element method,

and a slight modification of the finite-element method called the spectral-element method.

Now, who could you be?

You might be a student who is interested in getting

a practical introduction to numerical methods,

and also learning a little bit how this is implemented using a programming language.

For that, we actually use Python,

which is a very popular language, extremely useful.

Also, we make use of so-called Jupyter Notebooks that is

also a fantastic concept where you can combine basically

a document with graphs and

interactive programming parts that you can run and get your results.

You might also be a researcher that's interested in using

a community code that simulates a physical or some other phenomenon,

and it might be parallel and it runs on a large supercomputer.

So, we'd like to know what's under the hood just

like opening the hood of a car to look inside the engine,

what's the element that makes the car work.

So, that's very important to understand

the benefits and the traps of these simulation codes,

and that's basically what we would like to convey in this course.

The fact that if you want to simulate real phenomenon,

you need very big computers,

means also we will talk at least a little bit

about what's the architecture of modern computers, parallel computers,

parallel computing, and what are the programming paradigms that exist

to bring realistic simulations onto a computer.

We'll be relatively brief, but again,

that's very important to understand the fundamental concepts

on how realistic problems can be solved.

I'd also like to show you what this course is not.

While the course is quite mathematical,

this is not a mathematics course.

I'm not a mathematician, I'm an Earth scientist.

I like to teach you or train these techniques from a practical point of view

as mentioned before in the sense that

we'll basically take the partial differential equations,

we'll show how you can turn them into a discrete approximate version,

then you can turn it into a computer code and run it.

We're not going to spend much time in proving that these concepts are correct,

but we will show concepts how to ensure that what you

simulate on the computer actually produces an accurate result.

So, those are the fundamental concepts,

and now let's get started in

the first week with introducing some of the main concepts that

are necessary before starting

applying numerical methods to partial differential equations.

If you're interested in a little more detail than what's covered here in this course,

you're welcome to look at this textbook that

has recently been published at Oxford University Press.

So, what will be covered in this first week?

We first talk about discretization.

If we want to simulate something,

usually there are spatial scales and there are temporal scales involved,

and we want to understand the concept of wavelength.

That also implies that we need

computational meshes on which to solve a partial differential equation.

So, we will briefly talk about computational meshes and grids.

Furthermore, we need to distribute these meshes on computers,

and if these meshes are very big,

you need a computer that's actually parallel.

So, we will also cover some very fundamental aspects of parallel computing.

Then, we'll give a short introduction to

the Python language and the Jupyter Notebooks we use,

and of course this will be interactive.

You will also be able to make use of

these simulation codes that we will develop within the course and play around with them.

So, in addition with some fundamental concepts will be week one,

and then in the second week,

we'll actually start learning about the first numerical method,

the finite difference method and apply it to the wave equation.

Now, let's get started.