Saturday, February 2, 2019

Getting climactic

Climate modelling is notoriously one of the most complicated things you can try to do with a computer, so this is going to be drastically over-simplified. We want a climate model that will give us a reasonably believable distribution of climates, without being any more complex than strictly necessary.

So my approach is based around the following basic principles:

(1) Climate is basically about temperature and precipitation, both of which vary throughout the year.

(2) Temperature is mostly determined by elevation and latitude, while precipitation is mostly determined by wind.

(3) There are two kinds of wind:

(4) Prevailing winds, which blow more or less straight east or west (or neither) depending on latitude.

(5) Monsoons, which exist only in the tropics and blow from the sea inland during the summer and from the land out to sea in the winter.

(6) Winds pick up moisture over the sea and deposit it over the land in the form of precipitation.

(7) Where the land rises, more moisture is deposited.

(8) Precipitation that falls in the winter raises the temperature, and precipitation that falls in the summer lowers it.

That is more or less it. A proper climate model would track temperature and precipitation throughout the year, but we can get a rough approximation that's good enough for our purposes and much easier to do if we just take two measurements per year - one in January and one in July. (I assume Earthlike names for seasons, months, etc.) So we have some new arrays, each the same size as the heightmap, to store these values for each point.

Temperature is pretty straightforward, as it's basically a matter of latitude and elevation. Obviously we're doing this on a flat map rather than a proper sphere, so "latitude" is somewhat fictional, but still. However, using only latitude and elevation gives a somewhat too-regular temperature map, so we make yet another diamond-square fractal and combine that with the temperature map in order to add a little noise. Also, of course, we actually have two temperature maps, one for January and one for July. The further a point is from the equator, the greater the seasonal difference.

Here is the resulting temperature map (it shows the annual average temperatures):



And that looks fairly reasonable. Already seeing the colder temperatures on the mountain ranges makes them somehow seem a bit real!

Now we know the temperatures, we can also work out where the oceans freeze. This isn't quite as simple as assuming that any point of sea below a certain temperature is frozen, because sea ice is also affected by the proximity of land. Here's the extent of the polar ice at the time of writing:


That's from this very useful site (trying to find out about sea ice is generally very depressing as most of the information out there is about how there's hardly any left now). As you can see, the ice sheet tends to extend southwards towards the land, as if the land is shielding the polar sea from warmer water to the south.

I model this by drawing the boundaries between permanent sea ice, seasonal sea ice, and open sea, roughly corresponding to the appropriate temperature boundaries. I draw the boundaries with splines and then disrupt them a bit, just to make it look a bit more natural. Then I treat nearby land as if it's exercising a magnetic pull on the control points of the splines. The result looks something like this:



It's probably not tremendously scientifically accurate, but I think it looks believable enough.



No comments:

Post a Comment