NCL Website header
NCL Home> Application examples> Data sets || Data files for some examples

Example pages containing: tips | resources | functions/procedures

GOES: Geostationary Operational Environmental Satellites

The National Weather Service (NWS) uses the GOES system for its United States weather monitoring and forecasting operations, and scientific researchers use the data to better understand land, atmosphere, ocean, and climate interactions. The GOES system uses geosynchronous satellites which—since the launch of SMS-1 in 1974—have been a basic element of U.S. weather monitoring and forecasting.

GOES satellites are currently available for operational use:

    1) GOES-12 is designated GOES-South, currently located at 60°W 
    2) GOES-13 is designated GOES-East, currently located at 75°W. 
       It provides most of the U.S. weather information.
       In 12/2017 GOES-13 will be placed in a storage (graveyard) orbit at 60 degrees west longitude.
    3) GOES 14 was placed in orbit on 7 July 2009, underwent Post-Launch Testing
       until December 2009 and then was placed in on-orbit storage at 105° W.
    4) GOES 15 is designated GOES-West, currently located at 135°W over the Pacific Ocean.
    5) GOES 16 replaces GOES-13 (12/2017) and is designated GOES-East (75.2°W).
    6) GOES-17 will be designated GOES-S upon reaching geostationary orbit.

FYI: The GOES-East position was chosen primarily because it offers full coverage of the continental United States and provides optimal viewing of the states and cities in the plains, mid-west and east most impacted by severe weather events including Atlantic Hurricanes, thunderstorms and tornadoes, major winter storms, and flooding.

goes_1.ncl: Plotting data from GOES-11.
goes_2.ncl: A GOES-12 plot. The script handles bogus values by assigning outliers to an _FillValue attribute. Since the lat/lon have missing values, you must set res@trGridType to "TriangularMesh".

The file has issues. Specifically, the lat and lon have bogus values:

(0)    min(lat)=-79.7354   max(lat)=2.14329e+09  <===
(0)    min(lon)=-156.169   max(lon)=2.14329e+09  <===

%> ncdump -v lat,lon | less

        float data(time, yc, xc) ;
                data:long_name = "0-255 Brightness Temperature" ;
                data:type = "VISR" ;
                data:coordinates = "lon lat" ;
        float lat(yc, xc) ;
                lat:long_name = "lat" ;
                lat:units = "degrees_north" ;
        float lon(yc, xc) ;
                lon:long_name = "lon" ;
                lon:units = "degrees_east" ;
There is no indication of a '_FillValue' or' missing_value' attribute for lat, lon or data. The data variable should have (we think):
        data@_FillValue = 255 
goes_3.ncl: Plotting data from GOES-15t. The lat/lon data has the same issues as the GOES-12 plot above.

Additionally, the longitude values cross the dateline, so we fix these values by adding 360. Finally, to speed up plotting, we only plot every 10th value.

goes_4.ncl: Another GOES-12 plot for a very small region.

goes_5.ncl: Plotting data from GOES-13.

goes_6.ncl: Plotting data from GOES-16. This script requires goesYXtoLatLon.ncl, which contains the function for calculating lat/lon values.

As with previous GOES data, the lat/lon can contain missing values, so you must plot this data setting res@trGridType to "TriangularMesh".

The 2D data is 1500 x 2500. Out of curiosity, timimgs were inserted in the script to keep track of how long the script takes for various sections:

  =====> CPU Elapsed Time: getting data: 1.06084 seconds <=====
  =====> CPU Elapsed Time: graphics: 20.7621 seconds <=====
  =====> CPU Elapsed Time: full script: 21.9095 seconds <=====