/* This routine reads version-5 RSS AMSR-J daily files You must UNZIP FILES before reading them CHANGE filename with path in form satname_yyyymmdd_v5 where satname = name of satellite (amsr ob ADEOS-II) yyyy = year mm = month dd = day of month DATA amsrj.data (a 2x6x720x1440 array of data) the 6 elements of amsrj.data correspond to: 1:time time of measurement in fractional hours GMT 2:sst sea surface temperature in deg Celcius 3:wind 10m surface wind 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 8/2014 n.picard */ #include #include #include #include #include #include #include #include "dataset.h" #include "amsrj_daily.h" using namespace std; AMSRJdaily::AMSRJdaily(char * _filename, int _missing) { filename = _filename; missing = _missing; } AMSRJdaily::AMSRJdaily(char * filename) { AMSRJdaily(filename, 0); } AMSRJdaily::AMSRJdaily() { AMSRJdaily(""); } std::vector AMSRJdaily::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 AMSRJdaily::get_dimensions() { vector temp; temp.push_back(2); temp.push_back(6); temp.push_back(720); temp.push_back(1440); return temp; } std::vector AMSRJdaily::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 AMSRJdaily::get_variables() { std::vector m; m.push_back("time"); 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 AMSRJdaily::get_index(std::string var) { if (var == "time") return 0; if (var == "sst") return 1; if (var == "wind") return 2; if (var == "vapor") return 3; if (var == "cloud") return 4; if (var == "rain") return 5; } float AMSRJdaily::get_scale(std::string var) { if (var == "time") return 0.1f; 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 AMSRJdaily::get_offset(std::string var) { if (var == "sst") return -3.0f; return 0; } std::string AMSRJdaily::get_long_name(std::string var) { if (var == "time") return "Time of Day UTC"; 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 AMSRJdaily::get_units(std::string var) { if (var == "time") return "fractional hours UTC"; 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 AMSRJdaily::get_valid_min(std::string var) { if (var == "time") return 0.0; 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 AMSRJdaily::get_valid_max(std::string var) { if (var == "time") return 24.0; 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; } DailyVerify::DailyVerify() {} DailyVerify::DailyVerify(Dataset &dataset) { ilon1 = 169; ilon2 = 174; ilat1 = 273; ilat2 = 277; iasc = 0; variables.push_back("time"); variables.push_back("sst"); variables.push_back("wind"); variables.push_back("vapor"); variables.push_back("cloud"); variables.push_back("rain"); checkVerify(dataset); }