From eec1177849d598624c96000030ba88c07836d4b4 Mon Sep 17 00:00:00 2001 From: Tor-Einar Skog <tor-einar.skog@nibio.no> Date: Tue, 26 Sep 2023 10:46:51 +0200 Subject: [PATCH] feat: Set April 1st as start date for MSC heat sum calculation --- .../RoughageNutritionModelImpl.java | 33 ++++++++++++++++--- 1 file changed, 29 insertions(+), 4 deletions(-) diff --git a/src/main/java/no/bioforsk/vips/model/roughagenutritionmodel/RoughageNutritionModelImpl.java b/src/main/java/no/bioforsk/vips/model/roughagenutritionmodel/RoughageNutritionModelImpl.java index c2730bc..8f18501 100755 --- a/src/main/java/no/bioforsk/vips/model/roughagenutritionmodel/RoughageNutritionModelImpl.java +++ b/src/main/java/no/bioforsk/vips/model/roughagenutritionmodel/RoughageNutritionModelImpl.java @@ -36,6 +36,7 @@ import java.util.logging.Logger; import java.util.stream.Collectors; import no.nibio.vips.entity.WeatherObservation; import no.nibio.vips.model.ModelExcecutionException; +import no.nibio.vips.util.WeatherUtil; // Using Commons math and Nelder-Mead for parameter optimization import org.apache.commons.math.ConvergenceException; @@ -736,6 +737,24 @@ public class RoughageNutritionModelImpl implements CostFunction { //System.out.println("m=" + m); return m; } + + /** + * @return + * @throws ModelExcecutionException + */ + private Date getForsteApril() throws ModelExcecutionException + { + // Calculating start and end date of weather data retrieval + // Start is April 1st + Calendar cal = Calendar.getInstance(timeZone); + cal.setTime(this.getVekstStart()); + cal.set(Calendar.MONTH, Calendar.APRIL); + cal.set(Calendar.DATE, 1); + + WeatherUtil wUtil = new WeatherUtil(); + return wUtil.normalizeToExactDate(cal.getTime(), timeZone); + + } /** * Løper gjennom eksisterende klimadatasett og beregner utvikling @@ -751,6 +770,7 @@ public class RoughageNutritionModelImpl implements CostFunction { } boolean first = true; + boolean firstTemperaturSum = true; Date forrigeDato = null; List<WeatherObservation> tempCopy = new ArrayList<>(this.luftTemperaturVerdier); for (Iterator<WeatherObservation> tempI = tempCopy.iterator(); tempI.hasNext();) { @@ -758,10 +778,15 @@ public class RoughageNutritionModelImpl implements CostFunction { temperatur = tempI.next(); //Setter Ts1 - if (first) { - this.AIBakgrunnsdataMatrise.setParamDoubleValueForDate(temperatur.getTimeMeasured(), AIDataMatrix.TS1, temperatur.getValue()); - } else { - this.AIBakgrunnsdataMatrise.setParamDoubleValueForDate(temperatur.getTimeMeasured(), AIDataMatrix.TS1, temperatur.getValue() + this.AIBakgrunnsdataMatrise.getParamDoubleValueForDate(forrigeDato, AIDataMatrix.TS1)); + // At første april (og ikke f.eks. vekststart) er grense her, er pr. 2023-09 til vurdering av Anne Kjersti Bakken + if (temperatur.getTimeMeasured().compareTo(this.getForsteApril()) >= 0) + { + if (firstTemperaturSum) { + this.AIBakgrunnsdataMatrise.setParamDoubleValueForDate(temperatur.getTimeMeasured(), AIDataMatrix.TS1, temperatur.getValue()); + firstTemperaturSum = false; + } else { + this.AIBakgrunnsdataMatrise.setParamDoubleValueForDate(temperatur.getTimeMeasured(), AIDataMatrix.TS1, temperatur.getValue() + this.AIBakgrunnsdataMatrise.getParamDoubleValueForDate(forrigeDato, AIDataMatrix.TS1)); + } } // Beregner DVR -- GitLab