diff --git a/hydrall/hydrall.h b/hydrall/hydrall.h index f2dac0cb..d88b8dc4 100644 --- a/hydrall/hydrall.h +++ b/hydrall/hydrall.h @@ -72,7 +72,7 @@ }; - struct Tsoil { + struct ThydrallSoil { int soilLayersNr; double soilTotalDepth; @@ -149,7 +149,7 @@ TenvironmentalVariable environmentalVariable; TparameterWangLeuning parameterWangLeuning; Tplant plant; - Tsoil soil; + ThydrallSoil soil; TlightExtinctionCoefficient directLightExtinctionCoefficient; TlightExtinctionCoefficient diffuseLightExtinctionCoefficient; diff --git a/interpolation/interpolation.cpp b/interpolation/interpolation.cpp index d12c4f13..39be0479 100644 --- a/interpolation/interpolation.cpp +++ b/interpolation/interpolation.cpp @@ -882,9 +882,11 @@ float shepardSearchNeighbour(vector &inputPoints, } float radius; + if (shepardNeighbourPoints.size() < SHEPARD_MIN_NRPOINTS) { int nrPoints = sortPointsByDistance(SHEPARD_MIN_NRPOINTS, inputPoints, outputPoints); + if (outputPoints.empty()) return NODATA; radius = outputPoints[nrPoints-1].distance + float(EPSILON); } else if (shepardNeighbourPoints.size() > SHEPARD_MAX_NRPOINTS) @@ -990,6 +992,9 @@ float modifiedShepardIdw(vector &myPoints, else validPoints = myPoints; + if (myPoints.empty()) + return NODATA; + weight.resize(validPoints.size()); t.resize(validPoints.size()); S.resize(validPoints.size()); diff --git a/mathFunctions/physics.cpp b/mathFunctions/physics.cpp index 9f54636b..03567b53 100644 --- a/mathFunctions/physics.cpp +++ b/mathFunctions/physics.cpp @@ -48,7 +48,7 @@ double pressureFromAltitude(double height) double pressureFromAltitude(double temperature, double height) { - return P0 * exp((- GRAVITY * M_AIR * height) / (R_GAS * temperature)); + return P0 * exp((- GRAVITY * M_AIR * height) / (R_GAS * (temperature + 273.15))); } /*! diff --git a/project/project.cpp b/project/project.cpp index 74618041..f2f8a1be 100644 --- a/project/project.cpp +++ b/project/project.cpp @@ -3052,6 +3052,8 @@ bool Project::interpolationDemGlocalDetrending(meteoVariable myVar, const Crit3D else myRaster->value[row][col] += interpolatedValue*areaCells[cellIndex+1]; } + else + return false; } } } @@ -3459,8 +3461,13 @@ bool Project::interpolationGrid(meteoVariable myVar, const Crit3DTime& myTime) proxyIndex++; } } - interpolatedValue = interpolate(subsetInterpolationPoints, &interpolationSettings, meteoSettings, myVar, myX, myY, myZ, proxyValues, true) + + double temp = interpolate(subsetInterpolationPoints, &interpolationSettings, meteoSettings, myVar, myX, myY, myZ, proxyValues, true); + if (! isEqual(temp, NODATA)) + interpolatedValue = interpolate(subsetInterpolationPoints, &interpolationSettings, meteoSettings, myVar, myX, myY, myZ, proxyValues, true) * areaCells[cellIndex + 1]; + else + return false; } if (freq == hourly) { diff --git a/proxyWidget/proxyWidget.cpp b/proxyWidget/proxyWidget.cpp index 53f4a917..18f77b9e 100644 --- a/proxyWidget/proxyWidget.cpp +++ b/proxyWidget/proxyWidget.cpp @@ -98,6 +98,8 @@ Crit3DProxyWidget::Crit3DProxyWidget(Crit3DInterpolationSettings* interpolationS selectionOptionBoxLayout->addWidget(&modelLR); selectionOptionBoxLayout->addWidget(&climatologicalLR); + if (macroAreaNumber != NODATA) modelLR.setEnabled(false); + selectionOptionEditLayout->addWidget(r2Label); selectionOptionEditLayout->addWidget(&r2); selectionOptionEditLayout->addStretch(150); @@ -585,7 +587,6 @@ void Crit3DProxyWidget::addMacroAreaLR() point_vector.append(point); } - macroAreaNumber = NODATA; chartView->drawModelLapseRate(point_vector); } return;