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;
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) {
......
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