/* This routine reads version-5 AMSR-J 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 satname_yyyymmddv5_d3d weekly satname_yyyymmddv5 monthly satname_yyyymmv5 where satname =name of satellite (amsr on ADEOS-II) yyyy =year mm =month dd =day of month DATA amsrj.data (a 1x5x720x1440 array of data) the 5 elements of amsrj.data correspond to time averages of: 1:sst sea surface temperature in deg Celcius 2:wind 10m surface wind in meters/second 3:vapor columnar water vapor in millimeters 4:cloud cloud liquid water in millimeters 5: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 8/2014 n.picard */ #include #include #include #include #include #include #include #include "dataset.h" #include "amsrj_averaged.h" using namespace std; AMSRJaveraged::AMSRJaveraged(char * _filename, int _missing) { filename = _filename; missing = _missing; } AMSRJaveraged::AMSRJaveraged(char * filename) { AMSRJaveraged(filename, 0); } AMSRJaveraged::AMSRJaveraged() { AMSRJaveraged(""); } std::vector AMSRJaveraged::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 AMSRJaveraged::get_dimensions() { vector temp; temp.push_back(1); temp.push_back(5); temp.push_back(720); temp.push_back(1440); return temp; } std::vector AMSRJaveraged::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 AMSRJaveraged::get_variables() { std::vector m; m.push_back("sst"); m.push_back("wind"); 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 AMSRJaveraged::get_index(std::string var) { if (var == "sst") return 0; if (var == "wind") return 1; if (var == "vapor") return 2; if (var == "cloud") return 3; if (var == "rain") return 4; } float AMSRJaveraged::get_scale(std::string var) { if (var == "sst") return 0.15f; if (var == "wind") return 0.2f; if (var == "vapor") return 0.3f; if (var == "cloud") return 0.01f; if (var == "rain") return 0.1f; } float AMSRJaveraged::get_offset(std::string var) { if (var == "sst") return -3.0f; return 0; } std::string AMSRJaveraged::get_long_name(std::string var) { if (var == "sst") return "Sea Surface Temperature"; if (var == "wind") return "10m Surface Wind Speed"; 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 AMSRJaveraged::get_units(std::string var) { if (var == "sst") return "deg Celsius"; if (var == "wind") 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 AMSRJaveraged::get_valid_min(std::string var) { if (var == "sst") return -3.0; if (var == "wind") 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 AMSRJaveraged::get_valid_max(std::string var) { if (var == "sst") return 34.5; if (var == "wind") 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("wind"); variables.push_back("vapor"); variables.push_back("cloud"); variables.push_back("rain"); checkVerify(dataset); }