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;
import java.io.BufferedWriter;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.time.Duration;
import java.time.LocalDateTime;
import java.time.Month;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import com.opencsv.CSVReader;
import com.opencsv.exceptions.CsvException;
public class TreeWaterDemand {
public class TreeWaterDemand
{
/**
* Rs/Rso für Nacht = 0.5
*
* @param args
* @throws IOException
* @throws CsvException
......@@ -58,13 +62,13 @@ public class TreeWaterDemand {
double tr = 0.9;
LocalDateTime startOfYear = 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 start = LocalDateTime.of(2005, 4, 1, 0, 0);
// LocalDateTime end = LocalDateTime.of(2005, 10, 1, 0, 0);
// LocalDateTime start = LocalDateTime.of(2005, 4, 1, 0, 0);
// LocalDateTime end = LocalDateTime.of(2005, 10, 1, 0, 0);
List<Double> et0us = new ArrayList<>();
List<Double> et0s = new ArrayList<>();
List<Double> demands = new ArrayList<>();
......@@ -73,39 +77,57 @@ public class TreeWaterDemand {
System.out.println("Date,ETIa (L/m²/d),ET0 (L/m²/d)");
int startHours = (int) Duration.between(startOfYear, start).toHours();
int hours = (int) Duration.between(start, end).toHours();
for (int i = startHours; i < startHours + hours; i++) {
String[] row = csvValues.get(i + 2);
double temp = Double.parseDouble(row[tempIndex]);
double humidity = Double.parseDouble(row[humidityIndex]);
double incomingRadiation = Double.parseDouble(row[irrIndex]);
// convert to MJ/h - 1 W = 0.0036 MJ/h
incomingRadiation *= 0.0036;
double windSpeed = Double.parseDouble(row[windSpeedIndex]);
double saturationVaporPressure = e0(temp);
double actualVaporPressure = ea(saturationVaporPressure, humidity);
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);
et0s.add(et0);
// System.out.println("et0: " + et0);
// System.out.println("etia: " + etia);
et0us.add(et0u);
counter = counter.plusHours(1);
DateTimeFormatter f = DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm");
try (BufferedWriter bw = Files.newBufferedWriter(Paths.get("all_values.csv"), StandardCharsets.UTF_8)) {
bw.write("DateTime;Temperature;Humidity;GHI;WindSpeed;SaturationVaporPressure;ActualVaporPressure;ET0;ET0u\n");
bw.write("dd/mm/yyyy HH:MM;[°C];[%];[W/m²];[m/s];[?];[?];[l/h];[l/h]\n");
for (int i = startHours; i < startHours + hours; i++) {
bw.write(String.format("%s;", counter.format(f)));
String[] row = csvValues.get(i + 2);
double temp = Double.parseDouble(row[tempIndex]);
double humidity = Double.parseDouble(row[humidityIndex]);
double incomingRadiation = Double.parseDouble(row[irrIndex]);
bw.write(String.format("%.1f;", temp));
bw.write(String.format("%.0f;", humidity));
bw.write(String.format("%.0f;", incomingRadiation));
// convert to MJ/h - 1 W = 0.0036 MJ/h
incomingRadiation *= 0.0036;
double windSpeed = Double.parseDouble(row[windSpeedIndex]);
double saturationVaporPressure = e0(temp);
double actualVaporPressure = ea(saturationVaporPressure, humidity);
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));
System.out.println("Summe aller ET0: " + et0Sum);
Double et0uSum = et0us.stream().collect(Collectors.summingDouble(Double::doubleValue));
System.out.println("Summe aller ET0u: " + et0uSum);
double et0uFactor = (0.865 * Math.log10(1 / et0uSum) + 3.36);
for (double et0u : et0us) {
double etia = 0;
if (et0u > 0) {
......@@ -114,13 +136,14 @@ public class TreeWaterDemand {
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) {
......@@ -165,9 +188,9 @@ public class TreeWaterDemand {
}
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.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) {
......@@ -184,7 +207,7 @@ public class TreeWaterDemand {
double g = g(nominalRadiation, shortWaveRadiation > 0);
double n = 0.408 * delta * (nominalRadiation - g)
+ 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) {
......
Markdown is supported
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