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

CSV table with many intermediate values, for debugging

parent a2247488
This diff is collapsed.
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