Basically, we download GRIB-like data files from various weather models for the area we cover, extract information for spots of interest, summarize it by day, and present it.
To accomplish this, we download the GRIB-like files for the Global Forecast System (GFS) for primary wind forecasts, the North American Mesoscale Model (NAM) for short term high resolution wind forecasts, and the WAVEWATCH III for sea state forecasts, at regular intervals. While we aim to have the most current model run available, we are unsure of the exact time new data becomes available. The GFS model, for example, runs 4 times a day, or every 6 hours, at 0z 6z 12z 18z. Those are the times that they collect all the initialization data and begin the model run. But it takes several hours to run the program and then distribute the output to the servers, so currently we cheat a little and download new data for all three models every 3 hours. The models contain a parameter labeled “Forecast Reference Time” which we believe is the time of the initial conditions. We publish this time from the GFS at the top of the spot forecast table, along with a calculation of its age. Since it can take up to six hours to run the model and publish the results, the age may exceed six hours.
We take the wind data from the GFS and compute the mean wind speed and direction for each day, splitting the days at midnight local time. Since the GFS provides values every three hours, we have eight values in the average. There may be a more statistically appropriate method to summarize the values, such as median or some weighted average. In the future we hope to use the data from the NAM for the first 2 days and compute the averages over both day and night, probably splitting at 7am and 7pm local time. The NAM data is currently used for the hourly wind graph.
Determining the average wind speed and direction poses an intriguing challenge. Unlike other quantities, wind direction cannot be averaged by simply adding and dividing, as it is a 360° circle. To illustrate, consider the wind blowing at a consistent speed from 350° for half of the day and from 10° for the other half. While many might assume the average wind direction to be from the north (0°), the arithmetic mean is actually 180° (south). This issue is resolved by averaging the north/south vector and the east/west vector separately, and then combining them to produce a speed and direction. This also gives greater weight to the directions with the stronger winds. However, there are cases where this method fails. For instance, winds blowing at 10kts from the east for half of the day and from the west for the other half would result in a vector average of wind speed 0kts, with an undefined direction. In this situation, people would typically consider the average wind speed to be 10kts. Consequently, we determine the wind speed by averaging only the magnitudes and the wind direction by averaging the vectors.
The GFS and NAM models provide a wind gust parameter. Sailors are usually concerned with extreme conditions, so we report the maximum gust value expected over the period. Therefore, it is safe to assume that the maximum gust will be near the highest wind speed expected for the day. If the average wind speed is close to the maximum gust value, then it is likely that the wind will be blowing consistently throughout the day. However, if there is a greater spread between the average and maximum gust, it is safer to assume that there will be lighter winds for part of the day.
The sea state, obtained from the WW3 model, is treated similarly. The primary wave direction is determined by vector averaging, like the wind. Since wave height typically does not vary significantly within a day, we report the only minimum and maximum values of the significant height of combined wind waves and swell. However, if the difference between the minimum and maximum values is less than 1 foot, we report only one value. Typically, the wave period varies by only a few seconds unless the sea state changes from a long to a short period, or vice versa. Therefore, we report the mean of the primary wave period. If the difference between the minimum and maximum wave periods is greater than 4 seconds, we report the actual range.
We have not yet optimized our code for speed, so response times may be slow, especially if requesting everything everywhere all at once. We hope to pre-process or cache some of this data to improve speed in the future. Maybe we need to hire more programmers.
Overall, we hope this explanation helps you understand the presented data, its usefulness, and limitations. Following is an incomplete list of things we hope to improve, in no particular order.