If the reader has exhausted their way through this post and this post, it should be fairly clear that I'm building a case. I wish to discourage thinking that what follows is meant to be a simulation. It is not. From the point of view of meteorology, what follows is utterly ridiculous. But I am not attempting to convey science or reality. I'm wishing to take a set of facts and use them as a guideline to produce credible results that may reasonably be mistaken for 'local weather.' That is all.
What weather actually does, or how weather actually works, is immaterial. I have performed exhaustive research to get to this point, so I am well aware of how weather works - educating me on this point would be a waste of everyone's time.
Beyond this point, the only thing that matters is the structure we want to create.
I've covered some of this before, but let's recap: we want to produce a series of weather tables that are consistent with our position on the planet and the season that it is, along with whether it is day or night, so that the temperature, rain, wind direction, wind strength, amount of precipitation and even the cloud structure is known - and from those principles, we hope to eventually produce further embellishments that will allow for idiosyncrasies like tornadoes, hurricanes, ice storms and so on.
Oh, and if we could have it all on one table, that would be nice.
Our data will be coming from worldwide weather stations included in the WorldClimate.com website. Here is the data from the website that we will be using:
- average minimum temperature for each month
- average maximum temperature for each month
- station latitude
- station longitude
- station elevation
- rainfall in millimeters for each month
- 24hr average temperature for each month (when average min/max is not available)
That's it. That's the whole data we will be using. Before going forward (and the reader should be asking "Whhaaaaa-?" at this point), consider: it means that for your world, the world that has no relation whatsoever to our world, you need to invent very little data of your own to make your weather system work.
That is a plus.
Step 1: Temperature
Because my players are near Palmyra, that being the nearest data station to their location, I have decided to begin with Palmyra station. The time of the year is February - and for Palmyra, I have two numbers: Average minimum: 38.2F. Average max: 58.7F. We can presume that the minimum is the average temperature at night and the maximum is the average temperature during the day. What we want is a random number for night-time temperature and a random number for day-time.
Very well, the mean for these two temperatures is 48.5F (rounded). This is the 24hr average temperature for Palmyra in February. From this, let's perform a simple calculation.
The average minimum, or low, or night time temperature, is not quite 10.3 degrees below the mean. Let's subtract that number from the average minimum to get a minimum low (not an average) that drifts all the way down to 28.0F. This puts 38.2F exactly halfway between the very bottom temperature and the 24hr temperature. Are you with me so far? No? Well, let's make a little chart.
All this average minimum & maximum/24hr nonsense is getting confusing. So let's get rid of it. Let's call the very bottom temperature, the coldest we expect it to get in Palmyra in February, the Minimum. Not the 'average' minimum, just the plain, simple, minimum. That's 27.9F.
Let's call the 'average minimum,' the number we get from the climate site, the Low. That's 38.2F.
The Mean is the middle number. That's 48.5F.
The 'average maximum' is the daily high, so let's call it the High. That's 58.7F.
Then, if we add that same 10.3 degree difference between the mean and the daily high, we get the Maximum. That's 68.9F.
Now we can construct an average night time temperature (we won't worry about the day for this post). It won't be any fun if the spread is between the Minimum and the Mean, so let's produce an average number between the Minimum and the High. Yes, that will mean that the "Low" is no longer the average low, but f* all that. We're creating here.
So, night-time temperature will be a number between 28 and 58.7. We want that to be a bell curve. This is really easy on excel; the way I've done it is to create two random numbers between 28 and 58.7, then divide both by 2 and add them together. The bell curve peaks around 43.4F.
This gives us our temperature. In excel, this gets run through a bunch of if statements that determines what the 'temperature code' is - but that's not important just now. Let's move on.
Now we want to create something called "Drift." Drift is the difference (expressed as an integer) between the randomly generated temperature and the Mean. Therefore, if the random number for our night time temperature turned out to be 35F, the drift would be -14. This exact number will matter later.
If the Drift is less than the Mean, then we can say something about the local air mass over Palmyra that night. We call call it a "Low." This is weather parlance and shouldn't be confused with the nightly Low temperature. Here we are speaking of an air mass that is cold and dense, therefore having a tendency to move downwards in the atmosphere. For ease, we can shorten 'air mass' to simply Mass.
If the Drift is higher than the Mean, then the Mass is a High - a warm air mass that is less dense and has a tendency to move upwards. If the Drift equals the Mean, the Mass is stable and not moving. The movement of warm and cold masses fits with ordinary atmospheric mechanics.
So now we know two things about Palmyra. We know what the temperature is and we know the nature of the air mass surrounding the station. We're ready to move on.
I'm going to post this and keep writing.