Skip to content

Commit

Permalink
Merge commit '2799ddd0d57bfe3ee30f3c6dc5c65bce3fb24df6'
Browse files Browse the repository at this point in the history
  • Loading branch information
ftomei committed Dec 6, 2023
2 parents 1389efa + 2799ddd commit e442452
Showing 1 changed file with 71 additions and 27 deletions.
98 changes: 71 additions & 27 deletions agrolib/pragaProject/pragaProject.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1928,7 +1928,6 @@ bool PragaProject::interpolationOutputPointsPeriod(QDate firstDate, QDate lastDa
// check variables
bool isDaily = false;
bool isHourly = false;
QList<meteoVariable> varToSave;
meteoVariable myVar;

foreach (myVar, variables)
Expand All @@ -1944,14 +1943,6 @@ bool PragaProject::interpolationOutputPointsPeriod(QDate firstDate, QDate lastDa
isHourly = true;
else if (freq == daily)
isDaily = true;

varToSave.push_back(myVar);

// save two variables for vector wind
if (myVar == windVectorIntensity)
varToSave.push_back(windVectorDirection);
else if (myVar == windVectorDirection)
varToSave.push_back(windVectorIntensity);
}

// initialize maps
Expand Down Expand Up @@ -1980,17 +1971,27 @@ bool PragaProject::interpolationOutputPointsPeriod(QDate firstDate, QDate lastDa
return false;
}

// initialize data list
QVector<QList<QString>> dailyDataList;
QVector<QList<QString>> hourlyDataList;
if (isDaily)
{
dailyDataList.resize(outputPoints.size());
}
if (isHourly)
{
hourlyDataList.resize(outputPoints.size());
}

int nrDays = firstDate.daysTo(lastDate) + 1;
int nrDaysLoading = std::min(nrDays, 30);
int countDaysSaving = 0;
QDate lastLoadingDate;
bool isOk;

QDate myDate = firstDate;
QDate lastLoadingDate = firstDate.addDays(nrDaysLoading - 1);
while (myDate <= lastDate)
{
countDaysSaving++;

// check if load needed
// load data
if (myDate == firstDate || myDate > lastLoadingDate)
{
lastLoadingDate = myDate.addDays(nrDaysLoading - 1);
Expand All @@ -2012,16 +2013,21 @@ bool PragaProject::interpolationOutputPointsPeriod(QDate firstDate, QDate lastDa

for (int hour = 1; hour <= 24; hour++)
{
logInfoGUI("Interpolating hourly variables for " + myDate.toString("yyyy-MM-dd") + " " + QString::number(hour) + ":00");
QDateTime myDateTime;
myDateTime.setDate(myDate);
myDateTime.setTime(QTime(hour, 0, 0, 0));
QString dateTimeStr = myDateTime.toString("yyyy-MM-dd hh:mm:ss");

logInfoGUI("Interpolating hourly variables for " + dateTimeStr);

foreach (myVar, variables)
{
if (getVarFrequency(myVar) == hourly)
{
setComputeOnlyPoints(true);

// TODO other special variables
// TODO special variables

bool isOk;
if (myVar == airRelHumidity && interpolationSettings.getUseDewPoint())
{
if (interpolationSettings.getUseInterpolatedTForRH())
Expand All @@ -2045,17 +2051,25 @@ bool PragaProject::interpolationOutputPointsPeriod(QDate firstDate, QDate lastDa

if (! isOk)
return false;

int varId = meteoPointsDbHandler->getIdfromMeteoVar(myVar);
for (int i = 0; i < outputPoints.size(); i++)
{
float value = outputPoints[i].currentValue;
hourlyDataList[i].push_back(QString("('%1',%2,%3)").arg(dateTimeStr).arg(varId).arg(value));
}
}
}
}
}

if (isDaily)
{
logInfoGUI("Interpolating daily variables for " + myDate.toString("yyyy-MM-dd"));

// initialize
pragaDailyMaps->initialize();
QString dateStr = myDate.toString("yyyy-MM-dd");

logInfoGUI("Interpolating daily variables for " + dateStr);

foreach (myVar, variables)
{
Expand All @@ -2065,29 +2079,58 @@ bool PragaProject::interpolationOutputPointsPeriod(QDate firstDate, QDate lastDa

// TODO special variables

bool isOk = interpolationDemMain(myVar, getCrit3DTime(myDate, 0), getPragaMapFromVar(myVar));
isOk = interpolationDemMain(myVar, getCrit3DTime(myDate, 0), getPragaMapFromVar(myVar));

setComputeOnlyPoints(false);

if (! isOk)
return false;

// fix daily temperatures consistency
if (myVar == dailyAirTemperatureMax || myVar == dailyAirTemperatureMin)
int varId = meteoPointsDbHandler->getIdfromMeteoVar(myVar);
for (int i = 0; i < outputPoints.size(); i++)
{
if (! pragaDailyMaps->fixDailyThermalConsistency())
return false;
float value = outputPoints[i].currentValue;
dailyDataList[i].push_back(QString("('%1',%2,%3)").arg(dateStr).arg(varId).arg(value));
}
}
}
}

if (myDate == lastLoadingDate)
{
// save and clear datalist
for (int i = 0; i < outputPoints.size(); i++)
{
if (isDaily)
{
QString logStr = "";
QString pointCode = QString::fromStdString(outputPoints[i].id);
outputMeteoPointsDbHandler->writeDailyDataList(pointCode, dailyDataList[i], logStr);
if (! logStr.isEmpty())
{
logInfo(logStr);
}
dailyDataList[i].clear();
}
if (isHourly)
{
QString logStr = "";
QString pointCode = QString::fromStdString(outputPoints[i].id);
outputMeteoPointsDbHandler->writeHourlyDataList(pointCode, hourlyDataList[i], logStr);
if (! logStr.isEmpty())
{
logInfo(logStr);
}
hourlyDataList[i].clear();
}
}
}

myDate = myDate.addDays(1);
}

closeLogInfo();
errorString = "TODO save data";
return false;
return true;
}


Expand Down Expand Up @@ -3314,7 +3357,7 @@ bool PragaProject::computeDroughtIndexPoint(droughtIndex index, int timescale, i

QDate firstDate = meteoPointsDbHandler->getFirstDate(daily).date();
QDate lastDate = meteoPointsDbHandler->getLastDate(daily).date();
QDate myDate = firstDate;
QDate myDate;
bool loadHourly = false;
bool loadDaily = true;
bool showInfo = true;
Expand Down Expand Up @@ -3360,6 +3403,7 @@ bool PragaProject::computeDroughtIndexPoint(droughtIndex index, int timescale, i

for (int i=0; i < nrMeteoPoints; i++)
{
myDate = firstDate;
if (showInfo && (i % step) == 0)
{
updateProgressBar(i);
Expand Down

0 comments on commit e442452

Please sign in to comment.