/* This routine reads GMI time-averaged files including: 3-day (average of 3 days ending on file date) weekly (average of 7 days ending on Saturday of file date) monthly (average of all days in month) You must UNZIP FILES before reading them CHANGE filename format of file names are: 3-day fs_yyyymmddvN.N_d3d weekly fs_yyyymmddvN.N monthly fs_yyyymmvN.N where fs =file specifier for that satellite (f35 for GMI) yyyy =year mm =month dd =day of month DATA gmi.data (a 1x6x720x1440 array of data) the 5 elements of amsre.data correspond to time averages of: 1:sst sea surface temperature in deg Celcius 2:windLF 10m surface wind, low frequency, in meters/second 3:windMF 10m surface wind, medium frequency, in meters/second 4:vapor columnar water vapor in millimeters 5:cloud cloud liquid water in millimeters 6:rain rain rate in millimeters/hour Longitude is 0.25*xdim-0.125 degrees East Latitude is 0.25*ydim-90.125 Please read the data description on www.remss.com To contact RSS support: http://www.remss.com/support 6/2014 n.picard 7/2015 d.smith */ #include #include #include #include #include #include #include #include "dataset.h" #include "gmi_averaged.h" using namespace std; GMIaveraged::GMIaveraged(char * _filename, int _missing) { filename = _filename; missing = _missing; } GMIaveraged::GMIaveraged(char * filename) { GMIaveraged(filename, 0); } GMIaveraged::GMIaveraged() { GMIaveraged(""); } std::vector GMIaveraged::get_attributes() { std::vector m; m.push_back("coordinates"); m.push_back("long_name"); m.push_back("units"); m.push_back("valid_min"); m.push_back("valid_max"); return m; } vector GMIaveraged::get_dimensions() { vector temp; temp.push_back(1); temp.push_back(6); temp.push_back(720); temp.push_back(1440); return temp; } std::vector GMIaveraged::get_coordinates() { std::vector m; m.push_back("orbit_segment"); m.push_back("variable"); m.push_back("latitude"); m.push_back("longitude"); return m; } std::vector GMIaveraged::get_variables() { std::vector m; m.push_back("sst"); m.push_back("windLF"); m.push_back("windMF"); m.push_back("vapor"); m.push_back("cloud"); m.push_back("rain"); m.push_back("longitude"); m.push_back("latitude"); m.push_back("land"); m.push_back("ice"); m.push_back("nodata"); return m; } int GMIaveraged::get_index(std::string var) { if (var == "sst") return 0; if (var == "windLF") return 1; if (var == "windMF") return 2; if (var == "vapor") return 3; if (var == "cloud") return 4; if (var == "rain") return 5; } float GMIaveraged::get_scale(std::string var) { if (var == "sst") return 0.15f; if (var == "windLF") return 0.2f; if (var == "windMF") return 0.2f; if (var == "vapor") return 0.3f; if (var == "cloud") return 0.01f; if (var == "rain") return 0.1f; } float GMIaveraged::get_offset(std::string var) { if (var == "sst") return -3.0f; if (var == "cloud") return -0.05f; return 0; } std::string GMIaveraged::get_long_name(std::string var) { if (var == "sst") return "Sea Surface Temperature"; if (var == "windLF") return "10m Surface Wind Speed (low frequency)"; if (var == "windMF") return "10m Surface Wind Speed (medium frequency)"; if (var == "vapor") return "Columnar Water Vapor"; if (var == "cloud") return "Cloud Liquid Water"; if (var == "rain") return "Surface Rain Rate"; if (var == "longitude") return "Grid Cell Center Longitude"; if (var == "latitude") return "Grid Cell Center Latitude"; if (var == "land") return "Is this land?"; if (var == "ice") return "Is this ice?"; if (var == "nodata") return "Is there no data?"; } std::string GMIaveraged::get_units(std::string var) { if (var == "sst") return "deg Celsius"; if (var == "windLF") return "m/s"; if (var == "windMF") return "m/s"; if (var == "vapor") return "mm"; if (var == "cloud") return "mm"; if (var == "rain") return "mm/hr"; if (var == "longitude") return "degrees east"; if (var == "latitude") return "degrees north"; if (var == "land") return "True or False"; if (var == "ice") return "True or False"; if (var == "nodata") return "True or False"; } float GMIaveraged::get_valid_min(std::string var) { if (var == "sst") return -3.0; if (var == "windLF") return 0.0; if (var == "windMF") return 0.0; if (var == "vapor") return 0.0; if (var == "cloud") return -0.05f; if (var == "rain") return 0.0; if (var == "longitude") return 0.0; if (var == "latitude") return -90.0; if (var == "land") return 0.0; if (var == "ice") return 0.0; if (var == "nodata") return 0.0; } float GMIaveraged::get_valid_max(std::string var) { if (var == "sst") return 34.5; if (var == "windLF") return 50.0; if (var == "windMF") return 50.0; if (var == "vapor") return 75.0; if (var == "cloud") return 2.45f; if (var == "rain") return 25.0; if (var == "longitude") return 360.0; if (var == "latitude") return 90.0; if (var == "land") return 1.0; if (var == "ice") return 1.0; if (var == "nodata") return 1.0; } AveragedVerify::AveragedVerify() {} AveragedVerify::AveragedVerify(Dataset &dataset) { ilon1 = 169; ilon2 = 174; ilat1 = 273; ilat2 = 277; iasc = 0; variables.push_back("sst"); variables.push_back("windLF"); variables.push_back("windMF"); variables.push_back("vapor"); variables.push_back("cloud"); variables.push_back("rain"); checkVerify(dataset); }