//--------------------------------------------------------------------------------- void GribReader::readGribFileContent() { fileSize = zu_filesize(file); readAllGribRecords(); createListDates(); // hoursBetweenRecords = computeHoursBeetweenGribRecords(); //----------------------------------------------------- // Are dewpoint data in file ? // If no, compute it with Magnus-Tetens formula, if possible. //----------------------------------------------------- dewpointDataStatus = DATA_IN_FILE; if (getNumberOfGribRecords(GRB_DEWPOINT, LV_ABOV_GND, 2) == 0) { dewpointDataStatus = NO_DATA_IN_FILE; if ( getNumberOfGribRecords(GRB_HUMID_REL, LV_ABOV_GND, 2) > 0 && getNumberOfGribRecords(GRB_TEMP, LV_ABOV_GND, 2) > 0) { dewpointDataStatus = COMPUTED_DATA; std::set<time_t>::iterator iter; for (iter=setAllDates.begin(); iter!=setAllDates.end(); iter++) { time_t date = *iter; GribRecord *recModel = getGribRecord(GRB_TEMP,LV_ABOV_GND,2,date); if (recModel != NULL) { // Crée un GribRecord avec les dewpoints calculés GribRecord *recDewpoint = new GribRecord(*recModel); if (recDewpoint != NULL) { recDewpoint->setDataType(GRB_DEWPOINT); for (zuint i=0; i<(zuint)recModel->getNi(); i++) for (zuint j=0; j<(zuint)recModel->getNj(); j++) { double x = recModel->getX(i); double y = recModel->getY(j); double dp = computeDewPoint(x, y, date); recDewpoint->setValue(i, j, dp); } storeRecordInMap(recDewpoint); } } } } } //----------------------------------------------------- }
float DHT::getDewPoint() { return computeDewPoint(readTemperature(), readHumidity()); }