Skip to content
Snippets Groups Projects
Commit 3a569f97 authored by Tor-Einar Skog's avatar Tor-Einar Skog
Browse files

Merge branch 'allowholesinTJM' into 'main'

fix:the models run even if there are holes in the soil temperature data series

See merge request !15
parents 54c8879a 888192e3
Branches
Tags
2 merge requests!16Main,!15fix:the models run even if there are holes in the soil temperature data series
Pipeline #6063 passed
...@@ -1351,6 +1351,7 @@ public class RoughageNutritionModelImpl implements CostFunction { ...@@ -1351,6 +1351,7 @@ public class RoughageNutritionModelImpl implements CostFunction {
WeatherObservation eldsteDoegnverdi; WeatherObservation eldsteDoegnverdi;
WeatherObservation forrigeDoegnverdi = null; WeatherObservation forrigeDoegnverdi = null;
Calendar cal = Calendar.getInstance(this.timeZone); Calendar cal = Calendar.getInstance(this.timeZone);
// Må ha minst sju jordtemperaturverdier // Må ha minst sju jordtemperaturverdier
Iterator<WeatherObservation> ji = (jordTemperatur != null && jordTemperatur.size() >= 7) ? jordTemperatur.iterator() : null; Iterator<WeatherObservation> ji = (jordTemperatur != null && jordTemperatur.size() >= 7) ? jordTemperatur.iterator() : null;
for (Iterator<WeatherObservation> i = dognMiddelLuftTemperatur.iterator(); i.hasNext();) { for (Iterator<WeatherObservation> i = dognMiddelLuftTemperatur.iterator(); i.hasNext();) {
...@@ -1568,6 +1569,7 @@ public class RoughageNutritionModelImpl implements CostFunction { ...@@ -1568,6 +1569,7 @@ public class RoughageNutritionModelImpl implements CostFunction {
} }
Date forrigeDato = null; Date forrigeDato = null;
int hulljordTemp = 0;
boolean first = true; boolean first = true;
int counter = 0; int counter = 0;
Calendar cal = Calendar.getInstance(this.timeZone); Calendar cal = Calendar.getInstance(this.timeZone);
...@@ -1578,7 +1580,7 @@ public class RoughageNutritionModelImpl implements CostFunction { ...@@ -1578,7 +1580,7 @@ public class RoughageNutritionModelImpl implements CostFunction {
WeatherObservation potFord = potFordI.next(); WeatherObservation potFord = potFordI.next();
WeatherObservation straaling = straalingI.next(); WeatherObservation straaling = straalingI.next();
WeatherObservation jordTemperatur = (jordTempI != null && jordTempI.hasNext()) ? jordTempI.next() : null; WeatherObservation jordTemperatur = (jordTempI != null && jordTempI.hasNext()) ? jordTempI.next() : null;
Date dagensDato = luftTemperatur.getTimeMeasured(); Date dagensDato = luftTemperatur.getTimeMeasured();
if (first) { if (first) {
...@@ -1601,14 +1603,19 @@ public class RoughageNutritionModelImpl implements CostFunction { ...@@ -1601,14 +1603,19 @@ public class RoughageNutritionModelImpl implements CostFunction {
+ "<ul><li>Temperaturlinjas dato er " + dagensDato.toString() + "</li><li>Nedb&oslash;rlinjas dato er " + nedboer.getTimeMeasured().toString() + "<ul><li>Temperaturlinjas dato er " + dagensDato.toString() + "</li><li>Nedb&oslash;rlinjas dato er " + nedboer.getTimeMeasured().toString()
+ "</li><li>Potensiell fordampinglinjas dato er " + potFord.getTimeMeasured().toString() + "</li><li>Globalstr&aring;lingslinjas dato er " + straaling.getTimeMeasured().toString() + "</li></ul>"); + "</li><li>Potensiell fordampinglinjas dato er " + potFord.getTimeMeasured().toString() + "</li><li>Globalstr&aring;lingslinjas dato er " + straaling.getTimeMeasured().toString() + "</li></ul>");
} }
if (jordTemperatur != null && dagensDato.compareTo(jordTemperatur.getTimeMeasured()) != 0) { if (jordTemperatur != null && dagensDato.compareTo(jordTemperatur.getTimeMeasured()) == 0) {
throw new ModelExcecutionException("Feil ved klimadata: Jordemperatur har hull i datasettet, omkring dato " + dagensDato); hulljordTemp = counter;
//throw new ModelExcecutionException("Feil ved klimadata: Jordemperatur har hull i datasettet, omkring dato " + dagensDato);
} }
forrigeDato = dagensDato; forrigeDato = dagensDato;
counter++; counter++;
} }
// jordTemperatur holder bare verdier frem til et evt hull i serien. Serien kan derfor være kortere enn seriene for temperatur, nedbør, fordamping og stråling
this.jordTemperaturVerdier = this.jordTemperaturVerdier.subList(0, hulljordTemp);
sisteDato = forrigeDato; sisteDato = forrigeDato;
if (counter < 10 || foersteDato == null || sisteDato == null) { if (counter < 10 || foersteDato == null || sisteDato == null) {
throw new ModelExcecutionException("Feil ved klimadata: For få klimadata."); throw new ModelExcecutionException("Feil ved klimadata: For få klimadata.");
......
...@@ -114,8 +114,47 @@ public class RoughageNutritionModelTest { ...@@ -114,8 +114,47 @@ public class RoughageNutritionModelTest {
} }
} }
/**
@Test
public void testGetResultMissingTJM() throws Exception {
System.out.println("getResultMissingTJM");
try
{
ModelConfiguration config = this.getConfiguration("/weatherdata_kvithamar_holes_2016.json");
Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("Europe/Oslo"));
cal.set(2016, Calendar.JUNE, 1, 0, 0, 0);
cal.set(Calendar.MILLISECOND,0);
config.setConfigParameter("timeZone","Europe/Oslo");
config.setConfigParameter("firstHarvest", cal.getTime());
cal.set(Calendar.MONTH, Calendar.APRIL);
cal.set(Calendar.DATE, 15);
config.setConfigParameter("firstPossibleGrowthStartDate", cal.getTime());
config.setConfigParameter("soilType", RoughageNutritionModel.JORDTYPE_SAND);
config.setConfigParameter("cloverShare", RoughageNutritionModel.ENGSAMMENSETNING_KLOEVERANDEL_LITEN);
String[] optimizationInfoLines = {"2016-06-02,2,3,,,,"};
List<String> optimizationInfo = Arrays.asList(optimizationInfoLines);
config.setConfigParameter("optimizationInfo", optimizationInfo);
RoughageNutritionModel instance = new RoughageNutritionModel();
instance.setConfiguration(config);
//List<Result> expResult = null;
List<Result> result = instance.getResult();
//assertEquals(expResult, result);
assertNotNull(result);
Collections.sort(result);
//System.out.println("Number of result objects: " + result.size());
//for(Result r:result)
//{
// System.out.println(r);
//}
}
catch(ConfigValidationException | ModelExcecutionException ex)
{
ex.printStackTrace();
fail(ex.getMessage());
}
}
/** /**
* Test of getModelId method, of class RoughageNutritionModel. * Test of getModelId method, of class RoughageNutritionModel.
......
This diff is collapsed.
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment