[MUSIC] Hello, my name is Orestis Malaspinas and I would like to welcome you to the MOOC entitled Simulation and Modeling of Natural Processes. This week course intends to make an introduction to programming in general, and in particular we would like to introduce you to the programming with Python three which will be the main language use throughout this course. Before going into details, we will first make an introduction to high performance computing for modeling which is a very important thing to know when we are doing modeling. Before going into the concepts of high performance computing, we want first to understand why we need programming in this course. The aim of this course is to represent nature. To represent nature we want to translate nature into a mathematical model, which is, first, a complex task, and then gives also complex mathematical models. Usually these models are not tractable, analytically, or even when we find an analytical solution, there is no fast enough way to compute the solution. So what can we do? The first step is to use a numerical method to approximate our mathematical model. These allow us to transform a very complex system into something that is still complex, but is really only a system when we need to do a large amount of computations. This is exactly what computers are good at. We can give the computer a huge amount of computations to do and it can do it very fast. So, what should we do when we do a good model? First, we should be accurate enough. So our model should really represent the natural phenomenon of interest. Second, and this is what we are going to talk in more detail in this module, we have to produce a result in a reasonable amount of time. We cannot wait for an unknown long time to have a result. It would not be usable in practice. So how can a computer model become faster? One possibility Is just to wait for the computers to become faster. As we have been accustomed to for the last 50 years or so, computers are increasing their performance in a really fast way, an exponential, actually, way. This is starting to slow down a bit. But anyway it is not a good way to think, to just wait. Another way to do it is to optimize the algorithm of our computer model, to make an algorithm that performs the same task with less computations. Finally, and this is exactly what we are going to talk about, that you can also write your algorithm as a computer program in an efficient way. In computer science, there are many different ways to give orders to your computer. The way you are going to give them can influence the performance of the computer program. Okay. So this ends the first module on Introduction to High Performance Computing, and our next module is on concepts of code optimization. Thank you for your attention. [MUSIC]