Commit 5b161862 authored by Eric Duminil's avatar Eric Duminil
Browse files

CSV table with many intermediate values, for debugging

parent a2247488
This source diff could not be displayed because it is too large. You can view the blob instead.
package de.hft.stuttgart.water; package de.hft.stuttgart.water;
import java.io.BufferedWriter;
import java.io.IOException; import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files; import java.nio.file.Files;
import java.nio.file.Path; import java.nio.file.Path;
import java.nio.file.Paths; import java.nio.file.Paths;
import java.time.Duration; import java.time.Duration;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.Month; import java.time.format.DateTimeFormatter;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import com.opencsv.CSVReader; import com.opencsv.CSVReader;
import com.opencsv.exceptions.CsvException; import com.opencsv.exceptions.CsvException;
public class TreeWaterDemand {
public class TreeWaterDemand
{
/** /**
* Rs/Rso für Nacht = 0.5 * Rs/Rso für Nacht = 0.5
*
* @param args * @param args
* @throws IOException * @throws IOException
* @throws CsvException * @throws CsvException
...@@ -58,13 +62,13 @@ public class TreeWaterDemand { ...@@ -58,13 +62,13 @@ public class TreeWaterDemand {
double tr = 0.9; double tr = 0.9;
LocalDateTime startOfYear = LocalDateTime.of(2005, 1, 1, 0, 0); LocalDateTime startOfYear = LocalDateTime.of(2005, 1, 1, 0, 0);
LocalDateTime start = LocalDateTime.of(2005, 1, 1, 0, 0); LocalDateTime start = LocalDateTime.of(2005, 1, 1, 0, 0);
LocalDateTime end = LocalDateTime.of(2006, 1, 1, 0, 0); LocalDateTime end = LocalDateTime.of(2006, 1, 1, 0, 0);
// LocalDateTime start = LocalDateTime.of(2005, 4, 1, 0, 0); // LocalDateTime start = LocalDateTime.of(2005, 4, 1, 0, 0);
// LocalDateTime end = LocalDateTime.of(2005, 10, 1, 0, 0); // LocalDateTime end = LocalDateTime.of(2005, 10, 1, 0, 0);
List<Double> et0us = new ArrayList<>(); List<Double> et0us = new ArrayList<>();
List<Double> et0s = new ArrayList<>(); List<Double> et0s = new ArrayList<>();
List<Double> demands = new ArrayList<>(); List<Double> demands = new ArrayList<>();
...@@ -73,39 +77,57 @@ public class TreeWaterDemand { ...@@ -73,39 +77,57 @@ public class TreeWaterDemand {
System.out.println("Date,ETIa (L/m²/d),ET0 (L/m²/d)"); System.out.println("Date,ETIa (L/m²/d),ET0 (L/m²/d)");
int startHours = (int) Duration.between(startOfYear, start).toHours(); int startHours = (int) Duration.between(startOfYear, start).toHours();
int hours = (int) Duration.between(start, end).toHours(); int hours = (int) Duration.between(start, end).toHours();
for (int i = startHours; i < startHours + hours; i++) { DateTimeFormatter f = DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm");
String[] row = csvValues.get(i + 2); try (BufferedWriter bw = Files.newBufferedWriter(Paths.get("all_values.csv"), StandardCharsets.UTF_8)) {
double temp = Double.parseDouble(row[tempIndex]); bw.write("DateTime;Temperature;Humidity;GHI;WindSpeed;SaturationVaporPressure;ActualVaporPressure;ET0;ET0u\n");
double humidity = Double.parseDouble(row[humidityIndex]); bw.write("dd/mm/yyyy HH:MM;[°C];[%];[W/m²];[m/s];[?];[?];[l/h];[l/h]\n");
double incomingRadiation = Double.parseDouble(row[irrIndex]); for (int i = startHours; i < startHours + hours; i++) {
// convert to MJ/h - 1 W = 0.0036 MJ/h bw.write(String.format("%s;", counter.format(f)));
incomingRadiation *= 0.0036; String[] row = csvValues.get(i + 2);
double windSpeed = Double.parseDouble(row[windSpeedIndex]); double temp = Double.parseDouble(row[tempIndex]);
double saturationVaporPressure = e0(temp); double humidity = Double.parseDouble(row[humidityIndex]);
double actualVaporPressure = ea(saturationVaporPressure, humidity); double incomingRadiation = Double.parseDouble(row[irrIndex]);
int dayOfYear = counter.getDayOfYear();
double hourOfDay = counter.getHour() + 0.5; bw.write(String.format("%.1f;", temp));
double et0 = et0(temp, actualVaporPressure, incomingRadiation, height, windSpeed, humidity, dayOfYear, bw.write(String.format("%.0f;", humidity));
hourOfDay, lz, lm); bw.write(String.format("%.0f;", incomingRadiation));
double et0u = et0u(svf, advection, et0);
// convert to MJ/h - 1 W = 0.0036 MJ/h
et0s.add(et0); incomingRadiation *= 0.0036;
// System.out.println("et0: " + et0); double windSpeed = Double.parseDouble(row[windSpeedIndex]);
// System.out.println("etia: " + etia); double saturationVaporPressure = e0(temp);
et0us.add(et0u); double actualVaporPressure = ea(saturationVaporPressure, humidity);
counter = counter.plusHours(1); int dayOfYear = counter.getDayOfYear();
double hourOfDay = counter.getHour() + 0.5;
double et0 = et0(temp, actualVaporPressure, incomingRadiation, height, windSpeed, humidity, dayOfYear,
hourOfDay, lz, lm);
double et0u = et0u(svf, advection, et0);
bw.write(String.format("%.1f;", windSpeed));
bw.write(String.format("%.3f;", saturationVaporPressure));
bw.write(String.format("%.3f;", actualVaporPressure));
bw.write(String.format("%.3f;", et0));
bw.write(String.format("%.3f;", et0u));
et0s.add(et0);
// System.out.println("et0: " + et0);
// System.out.println("etia: " + etia);
et0us.add(et0u);
counter = counter.plusHours(1);
bw.write("\n");
}
} }
// System.out.println(rain.stream().collect(Collectors.summarizingDouble(Double::doubleValue))); // System.out.println(rain.stream().collect(Collectors.summarizingDouble(Double::doubleValue)));
Double et0Sum = et0s.stream().collect(Collectors.summingDouble(Double::doubleValue)); Double et0Sum = et0s.stream().collect(Collectors.summingDouble(Double::doubleValue));
System.out.println("Summe aller ET0: " + et0Sum); System.out.println("Summe aller ET0: " + et0Sum);
Double et0uSum = et0us.stream().collect(Collectors.summingDouble(Double::doubleValue)); Double et0uSum = et0us.stream().collect(Collectors.summingDouble(Double::doubleValue));
System.out.println("Summe aller ET0u: " + et0uSum); System.out.println("Summe aller ET0u: " + et0uSum);
double et0uFactor = (0.865 * Math.log10(1 / et0uSum) + 3.36); double et0uFactor = (0.865 * Math.log10(1 / et0uSum) + 3.36);
for (double et0u : et0us) { for (double et0u : et0us) {
double etia = 0; double etia = 0;
if (et0u > 0) { if (et0u > 0) {
...@@ -114,13 +136,14 @@ public class TreeWaterDemand { ...@@ -114,13 +136,14 @@ public class TreeWaterDemand {
demands.add(etia); demands.add(etia);
} }
System.out.println("Summe aller ETIa: " + demands.stream().collect(Collectors.summingDouble(Double::doubleValue))); System.out
.println("Summe aller ETIa: " + demands.stream().collect(Collectors.summingDouble(Double::doubleValue)));
// printHourly(start, et0s, demands);
// printHourly(start, et0s, demands); // printDaily(start, et0s, demands);
// printDaily(start, et0s, demands);
// test(); // test();
} }
private static void printHourly(LocalDateTime start, List<Double> et0s, List<Double> demands) { private static void printHourly(LocalDateTime start, List<Double> et0s, List<Double> demands) {
...@@ -165,9 +188,9 @@ public class TreeWaterDemand { ...@@ -165,9 +188,9 @@ public class TreeWaterDemand {
} }
private static double etia(double tr, double et0u, double et0uFactor) { private static double etia(double tr, double et0u, double et0uFactor) {
// return 1 * 1.6 * et0u; // return 1 * 1.6 * et0u;
return tr * 1.25 * et0u * et0uFactor; return tr * 1.25 * et0u * et0uFactor;
// return tr * (1.61 * Math.log10(800) - 3.39) * et0u * (0.865 * Math.log10(1 / et0u) + 3.36); // return tr * (1.61 * Math.log10(800) - 3.39) * et0u * (0.865 * Math.log10(1 / et0u) + 3.36);
} }
private static double et0u(double svf, double advection, double et0) { private static double et0u(double svf, double advection, double et0) {
...@@ -184,7 +207,7 @@ public class TreeWaterDemand { ...@@ -184,7 +207,7 @@ public class TreeWaterDemand {
double g = g(nominalRadiation, shortWaveRadiation > 0); double g = g(nominalRadiation, shortWaveRadiation > 0);
double n = 0.408 * delta * (nominalRadiation - g) double n = 0.408 * delta * (nominalRadiation - g)
+ gamma * (37 / (temperature + 273)) * windSpeed * (saturationVaporPressure - actualVaporPressure); + gamma * (37 / (temperature + 273)) * windSpeed * (saturationVaporPressure - actualVaporPressure);
return n / (delta + gamma * (1 + 0.34 * windSpeed)); return n / (delta + gamma * (1 + 0.34 * windSpeed));
} }
private static double ea(double saturationVaporPressure, double humidity) { private static double ea(double saturationVaporPressure, double humidity) {
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment