Mercurial > dive4elements > river
diff artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/tkhcalculation/TkhCalculator.java @ 8978:b5600453bb8f
SINFO Calculations: do not produce result rows if some input data has missing values.
Also check for years of waterlevels in flow depth development calculation.
author | gernotbelger |
---|---|
date | Thu, 05 Apr 2018 11:57:54 +0200 |
parents | 45f1ad66560e |
children | d5802f22e4f5 |
line wrap: on
line diff
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/tkhcalculation/TkhCalculator.java Tue Apr 03 17:23:51 2018 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/tkhcalculation/TkhCalculator.java Thu Apr 05 11:57:54 2018 +0200 @@ -108,7 +108,7 @@ return this.bedMeasurementsFinder.findD50(km); } - public void calculateTkh(final double km, final SInfoResultRow row) { + public boolean calculateTkh(final double km, final SInfoResultRow row) { row.putValue(SInfoResultType.station, km); @@ -117,37 +117,53 @@ final double wst = this.waterlevelProvider.getWaterlevel(km); row.putValue(SInfoResultType.waterlevel, wst); + if (Double.isNaN(wst)) + return false; final double meanBedHeight = this.bedHeightsProvider.getMeanBedHeight(km); row.putValue(SInfoResultType.meanBedHeight, meanBedHeight); + if (Double.isNaN(meanBedHeight)) + return false; final double flowDepth = wst - meanBedHeight; row.putValue(SInfoResultType.flowdepth, flowDepth); + if (Double.isNaN(flowDepth)) + return false; final double discharge = this.dischargeProvider.getDischarge(km); row.putValue(SInfoResultType.discharge, discharge); - if (Double.isNaN(discharge)) - return; if (!this.hasTkh()) - return; + return true; + + // Missing discharge or kind is only a problem if we want to calculate tkh + if (Double.isNaN(discharge)) + return false; + if (kind == null) + return false; final double d50 = getBedMeasurement(km); + row.putValue(SInfoResultType.d50, d50); if (Double.isNaN(d50)) - return; - row.putValue(SInfoResultType.d50, d50); + return false; if (!this.flowVelocitiesFinder.findKmQValues(km, discharge)) - return; + return false; final double velocity = this.flowVelocitiesFinder.getFindVmainFound(); row.putValue(SInfoResultType.velocity, velocity); + if (Double.isNaN(velocity)) + return false; final double tau = this.flowVelocitiesFinder.getFindTauFound(); row.putValue(SInfoResultType.tau, tau); + if (Double.isNaN(tau)) + return false; final double tkh = calculateTkh(wst - meanBedHeight, velocity, d50, tau); row.putValue(SInfoResultType.tkh, tkh); + if (Double.isNaN(tkh)) + return false; switch (kind) { case starr: @@ -164,6 +180,8 @@ final double flowDepthTkh = calculateFlowDepthTkh(tkh, kind, wst, meanBedHeight); row.putValue(SInfoResultType.flowdepthtkh, flowDepthTkh); + + return true; } /** @@ -202,9 +220,6 @@ private double calculateFlowDepthTkh(final double tkhValue, final SoilKind tkhKind, final double wst, final double meanBedHeight) { - if (Double.isNaN(tkhValue) || tkhKind == null) - return Double.NaN; - switch (tkhKind) { case starr: return wst - (meanBedHeight + tkhValue / 100);