monatlicher Belastungsgrad
This commit is contained in:
@@ -6,11 +6,11 @@
|
||||
|
||||
import { BerechnungMonatlicherBelastungsgradT9 } from "#lib/Berechnungen/BedarfsausweisWohnen/BerechnungMonatlicherBelastungsgradT9.js";
|
||||
|
||||
let interpolatedValuesZeitkonstante90: any
|
||||
let interpolatedValues: { month: string, interpolatedValue: number }[] = [];
|
||||
|
||||
$: {
|
||||
const result = BerechnungMonatlicherBelastungsgradT9(ausweis, gebaeude_aufnahme)
|
||||
interpolatedValuesZeitkonstante90 = result.interpolatedValuesZeitkonstante90
|
||||
const result = BerechnungMonatlicherBelastungsgradT9();
|
||||
interpolatedValues = result;
|
||||
}
|
||||
</script>
|
||||
|
||||
@@ -63,10 +63,10 @@
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class="border border-gray-300 px-2 py-1 bg-gray-100">31</td>
|
||||
<td class="border border-gray-300 px-2 py-1 bg-blue-100"></td>
|
||||
<td class="border border-gray-300 px-2 py-1 bg-blue-100">{interpolatedValues[1]?.month}</td>
|
||||
<td class="border border-gray-300 px-2 py-1 bg-gray-100">1,0</td>
|
||||
<td class="border border-gray-300 px-2 py-1 bg-blue-100">
|
||||
{Math.round(interpolatedValuesZeitkonstante90[0].interpolatedValue*1000)/1000}
|
||||
{interpolatedValues[1]?.interpolatedValue}
|
||||
</td>
|
||||
<td class="border-2 border-gray-600 px-2 py-1"></td>
|
||||
<td class="border border-gray-300 px-2 py-1 bg-yellow-100"></td>
|
||||
@@ -82,7 +82,7 @@
|
||||
<td class="border border-gray-300 px-2 py-1 bg-blue-100"></td>
|
||||
<td class="border border-gray-300 px-2 py-1 bg-gray-100">1,9</td>
|
||||
<td class="border border-gray-300 px-2 py-1 bg-blue-100">
|
||||
{Math.round(interpolatedValuesZeitkonstante90[1].interpolatedValue*1000)/1000}
|
||||
|
||||
</td>
|
||||
<td class="border-2 border-gray-600 px-2 py-1"></td>
|
||||
<td class="border border-gray-300 px-2 py-1 bg-yellow-100"></td>
|
||||
@@ -98,7 +98,7 @@
|
||||
<td class="border border-gray-300 px-2 py-1 bg-blue-100"></td>
|
||||
<td class="border border-gray-300 px-2 py-1 bg-gray-100">4,7</td>
|
||||
<td class="border border-gray-300 px-2 py-1 bg-blue-100">
|
||||
{Math.round(interpolatedValuesZeitkonstante90[2].interpolatedValue*1000)/1000}
|
||||
|
||||
</td>
|
||||
<td class="border-2 border-gray-600 px-2 py-1"></td>
|
||||
<td class="border border-gray-300 px-2 py-1 bg-yellow-100"></td>
|
||||
@@ -114,7 +114,7 @@
|
||||
<td class="border border-gray-300 px-2 py-1 bg-blue-100"></td>
|
||||
<td class="border border-gray-300 px-2 py-1 bg-gray-100">9,2</td>
|
||||
<td class="border border-gray-300 px-2 py-1 bg-blue-100">
|
||||
{Math.round(interpolatedValuesZeitkonstante90[3].interpolatedValue*1000)/1000}
|
||||
|
||||
</td>
|
||||
<td class="border-2 border-gray-600 px-2 py-1"></td>
|
||||
<td class="border border-gray-300 px-2 py-1 bg-yellow-100"></td>
|
||||
@@ -130,7 +130,7 @@
|
||||
<td class="border border-gray-300 px-2 py-1 bg-blue-100"></td>
|
||||
<td class="border border-gray-300 px-2 py-1 bg-gray-100">14,1</td>
|
||||
<td class="border border-gray-300 px-2 py-1 bg-blue-100">
|
||||
{Math.round(interpolatedValuesZeitkonstante90[4].interpolatedValue*1000)/1000}
|
||||
|
||||
</td>
|
||||
<td class="border-2 border-gray-600 px-2 py-1"></td>
|
||||
<td class="border border-gray-300 px-2 py-1 bg-yellow-100"></td>
|
||||
@@ -146,7 +146,7 @@
|
||||
<td class="border border-gray-300 px-2 py-1 bg-blue-100"></td>
|
||||
<td class="border border-gray-300 px-2 py-1 bg-gray-100">16,7</td>
|
||||
<td class="border border-gray-300 px-2 py-1 bg-blue-100">
|
||||
{Math.round(interpolatedValuesZeitkonstante90[5].interpolatedValue*1000)/1000}
|
||||
|
||||
</td>
|
||||
<td class="border-2 border-gray-600 px-2 py-1"></td>
|
||||
<td class="border border-gray-300 px-2 py-1 bg-yellow-100"></td>
|
||||
@@ -162,7 +162,7 @@
|
||||
<td class="border border-gray-300 px-2 py-1 bg-blue-100"></td>
|
||||
<td class="border border-gray-300 px-2 py-1 bg-gray-100">19,0</td>
|
||||
<td class="border border-gray-300 px-2 py-1 bg-blue-100">
|
||||
{Math.round(interpolatedValuesZeitkonstante90[6].interpolatedValue*1000)/1000}
|
||||
|
||||
</td>
|
||||
<td class="border-2 border-gray-600 px-2 py-1"></td>
|
||||
<td class="border border-gray-300 px-2 py-1 bg-yellow-100"></td>
|
||||
@@ -178,7 +178,7 @@
|
||||
<td class="border border-gray-300 px-2 py-1 bg-blue-100"></td>
|
||||
<td class="border border-gray-300 px-2 py-1 bg-gray-100">18,6</td>
|
||||
<td class="border border-gray-300 px-2 py-1 bg-blue-100">
|
||||
{Math.round(interpolatedValuesZeitkonstante90[7].interpolatedValue*1000)/1000}
|
||||
|
||||
</td>
|
||||
<td class="border-2 border-gray-600 px-2 py-1"></td>
|
||||
<td class="border border-gray-300 px-2 py-1 bg-yellow-100"></td>
|
||||
@@ -194,7 +194,7 @@
|
||||
<td class="border border-gray-300 px-2 py-1 bg-blue-100"></td>
|
||||
<td class="border border-gray-300 px-2 py-1 bg-gray-100">14,3</td>
|
||||
<td class="border border-gray-300 px-2 py-1 bg-blue-100">
|
||||
{Math.round(interpolatedValuesZeitkonstante90[8].interpolatedValue*1000)/1000}
|
||||
|
||||
</td>
|
||||
<td class="border-2 border-gray-600 px-2 py-1"></td>
|
||||
<td class="border border-gray-300 px-2 py-1 bg-yellow-100"></td>
|
||||
@@ -210,7 +210,7 @@
|
||||
<td class="border border-gray-300 px-2 py-1 bg-blue-100"></td>
|
||||
<td class="border border-gray-300 px-2 py-1 bg-gray-100">9,4</td>
|
||||
<td class="border border-gray-300 px-2 py-1 bg-blue-100">
|
||||
{Math.round(interpolatedValuesZeitkonstante90[9].interpolatedValue*1000)/1000}
|
||||
|
||||
</td>
|
||||
<td class="border-2 border-gray-600 px-2 py-1"></td>
|
||||
<td class="border border-gray-300 px-2 py-1 bg-yellow-100"></td>
|
||||
@@ -226,7 +226,7 @@
|
||||
<td class="border border-gray-300 px-2 py-1 bg-blue-100"></td>
|
||||
<td class="border border-gray-300 px-2 py-1 bg-gray-100">4,1</td>
|
||||
<td class="border border-gray-300 px-2 py-1 bg-blue-100">
|
||||
{Math.round(interpolatedValuesZeitkonstante90[10].interpolatedValue*1000)/1000}
|
||||
|
||||
</td>
|
||||
<td class="border-2 border-gray-600 px-2 py-1"></td>
|
||||
<td class="border border-gray-300 px-2 py-1 bg-yellow-100"></td>
|
||||
@@ -242,7 +242,7 @@
|
||||
<td class="border border-gray-300 px-2 py-1 bg-blue-100"></td>
|
||||
<td class="border border-gray-300 px-2 py-1 bg-gray-100">0,9</td>
|
||||
<td class="border border-gray-300 px-2 py-1 bg-blue-100">
|
||||
{Math.round(interpolatedValuesZeitkonstante90[11].interpolatedValue*1000)/1000}
|
||||
|
||||
</td>
|
||||
<td class="border-2 border-gray-600 px-2 py-1"></td>
|
||||
<td class="border border-gray-300 px-2 py-1 bg-yellow-100"></td>
|
||||
|
||||
@@ -1,19 +1,15 @@
|
||||
import { BedarfsausweisWohnenClient, GebaeudeAufnahmeClient } from "#components/Ausweis/types.js";
|
||||
|
||||
/**
|
||||
// Berechnung des monatlichen Belastungsgrades aus Tabelle 9 EFH (Zeitkonstante 90,130)
|
||||
* Berechnung des monatlichen Belastungsgrades aus Tabelle 9 EFH (Zeitkonstante 90,130)
|
||||
* @see 18599-Tabellenverfahren-Wohngebaeude.pdf
|
||||
* @export
|
||||
* @param {BedarfsausweisWohnenClient} ausweis
|
||||
* @param {GebaeudeAufnahmeClient} gebaeude_aufnahme
|
||||
*/
|
||||
|
||||
export function BerechnungMonatlicherBelastungsgradT9(ausweis: BedarfsausweisWohnenClient, gebaeude_aufnahme: GebaeudeAufnahmeClient) {
|
||||
|
||||
let bezugsflaeche = gebaeude_aufnahme.nutzflaeche ?? 0;
|
||||
let heizlastGebaeude = 2000 / bezugsflaeche;
|
||||
|
||||
//let heizlastGebaeude = 17.5
|
||||
export function BerechnungMonatlicherBelastungsgradT9() {
|
||||
let Zeitkonstante = 40;
|
||||
let heizlastGebaeude = 5;
|
||||
|
||||
type MonthData = {
|
||||
month: string;
|
||||
@@ -21,7 +17,6 @@ type MonthData = {
|
||||
};
|
||||
|
||||
// Zeitkonstante bis 50
|
||||
|
||||
const datasetZeitkonstante50: MonthData[] = [
|
||||
{ month: "Januar", values: [0.557, 0.554, 0.550, 0.543, 0.536, 0.533, 0.531, 0.530] },
|
||||
{ month: "Februar", values: [0.531, 0.527, 0.524, 0.517, 0.510, 0.507, 0.505, 0.504] },
|
||||
@@ -38,7 +33,6 @@ const datasetZeitkonstante50: MonthData[] = [
|
||||
];
|
||||
|
||||
// Zeitkonstante 90
|
||||
|
||||
const datasetZeitkonstante90: MonthData[] = [
|
||||
{ month: "Januar", values: [0.562, 0.559, 0.555, 0.548, 0.541, 0.538, 0.536, 0.535] },
|
||||
{ month: "Februar", values: [0.536, 0.532, 0.529, 0.522, 0.515, 0.512, 0.510, 0.510] },
|
||||
@@ -47,7 +41,7 @@ const datasetZeitkonstante90: MonthData[] = [
|
||||
{ month: "Mai", values: [0.175, 0.173, 0.172, 0.170, 0.168, 0.167, 0.166, 0.166] },
|
||||
{ month: "Juni", values: [0.098, 0.097, 0.096, 0.095, 0.094, 0.093, 0.093, 0.093] },
|
||||
{ month: "Juli", values: [0.030, 0.029, 0.029, 0.029, 0.028, 0.028, 0.028, 0.028] },
|
||||
{ month: "August", values: [0.041, 0.041, 0.041, 0.040, 0.040, 0.040, 0.039, 0.039] },
|
||||
{ month: "August", values: [0.041, 0.041, 0.041, 0.040, 0.040, 0.040, 0.040, 0.040] },
|
||||
{ month: "September", values: [0.169, 0.168, 0.167, 0.164, 0.162, 0.161, 0.161, 0.161] },
|
||||
{ month: "Oktober", values: [0.311, 0.309, 0.307, 0.303, 0.299, 0.297, 0.296, 0.296] },
|
||||
{ month: "November", values: [0.471, 0.467, 0.465, 0.459, 0.453, 0.450, 0.448, 0.448] },
|
||||
@@ -55,7 +49,6 @@ const datasetZeitkonstante90: MonthData[] = [
|
||||
];
|
||||
|
||||
// Zeitkonstante größer oder gleich 130
|
||||
|
||||
const datasetZeitkonstante130: MonthData[] = [
|
||||
{ month: "Januar", values: [0.567, 0.563, 0.560, 0.553, 0.545, 0.542, 0.540, 0.539, 0.539] },
|
||||
{ month: "Februar", values: [0.540, 0.537, 0.533, 0.526, 0.520, 0.516, 0.515, 0.514, 0.513] },
|
||||
@@ -76,52 +69,64 @@ const HeizLastTabelle = [0, 5, 10, 25, 50, 75, 100, 125, 150];
|
||||
|
||||
/**
|
||||
* Linearly interpolates a value for the given x.
|
||||
* @param heizlastGebaeude The heating load value (e.g., 82).
|
||||
* @param values The array of y-values corresponding to heating loads.
|
||||
* @param loads The array of heating load values (x-axis).
|
||||
* @param x The x value to interpolate.
|
||||
* @param xValues The array of x-values.
|
||||
* @param yValues The array of y-values corresponding to x-values.
|
||||
* @returns The interpolated value.
|
||||
*/
|
||||
function interpolate(heizlastGebaeude: number, values: number[], loads: number[]): number {
|
||||
if (heizlastGebaeude <= loads[0]) return values[0];
|
||||
if (heizlastGebaeude >= loads[loads.length - 1]) return values[values.length - 1];
|
||||
function interpolate(x: number, xValues: number[], yValues: number[]): number {
|
||||
if (x <= xValues[0]) return yValues[0];
|
||||
if (x >= xValues[xValues.length - 1]) return yValues[yValues.length - 1];
|
||||
|
||||
for (let i = 0; i < loads.length - 1; i++) {
|
||||
if (heizlastGebaeude >= loads[i] && heizlastGebaeude <= loads[i + 1]) {
|
||||
const x1 = loads[i];
|
||||
const x2 = loads[i + 1];
|
||||
const y1 = values[i];
|
||||
const y2 = values[i + 1];
|
||||
|
||||
return y1 + ((heizlastGebaeude - x1) * (y2 - y1)) / (x2 - x1);
|
||||
for (let i = 0; i < xValues.length - 1; i++) {
|
||||
if (x >= xValues[i] && x <= xValues[i + 1]) {
|
||||
const x1 = xValues[i];
|
||||
const x2 = xValues[i + 1];
|
||||
const y1 = yValues[i];
|
||||
const y2 = yValues[i + 1];
|
||||
return y1 + ((x - x1) * (y2 - y1)) / (x2 - x1);
|
||||
}
|
||||
}
|
||||
throw new Error("Interpolation error: Value is out of bounds.");
|
||||
}
|
||||
|
||||
// Zeitkonstante bis 50
|
||||
let interpolatedValues: { month: string, interpolatedValue: number }[] = [];
|
||||
|
||||
const interpolatedValuesZeitkonstante1 = datasetZeitkonstante50.map(data => ({
|
||||
if (Zeitkonstante < 50) {
|
||||
interpolatedValues = datasetZeitkonstante50.map(data => ({
|
||||
month: data.month,
|
||||
interpolatedValue: interpolate(heizlastGebaeude, data.values, HeizLastTabelle)
|
||||
interpolatedValue: interpolate(heizlastGebaeude, HeizLastTabelle, data.values)
|
||||
}));
|
||||
|
||||
// Zeitkonstante 90
|
||||
|
||||
const interpolatedValuesZeitkonstante2 = datasetZeitkonstante90.map(data => ({
|
||||
month: data.month,
|
||||
interpolatedValue: interpolate(heizlastGebaeude, data.values, HeizLastTabelle)
|
||||
}));
|
||||
|
||||
// Zeitkonstante größer oder gleich 130
|
||||
|
||||
const interpolatedValuesZeitkonstante3 = datasetZeitkonstante130.map(data => ({
|
||||
month: data.month,
|
||||
interpolatedValue: interpolate(heizlastGebaeude, data.values, HeizLastTabelle)
|
||||
}));
|
||||
|
||||
|
||||
} else if (Zeitkonstante < 90) {
|
||||
interpolatedValues = datasetZeitkonstante50.map((data, index) => {
|
||||
if (datasetZeitkonstante90[index] && datasetZeitkonstante90[index].values) {
|
||||
const interpolatedValue = interpolate(Zeitkonstante, [50, 90], [datasetZeitkonstante50[index].values[0], datasetZeitkonstante90[index].values[0]]);
|
||||
return {
|
||||
interpolatedValuesZeitkonstante1
|
||||
month: data.month,
|
||||
interpolatedValue: interpolate(heizlastGebaeude, HeizLastTabelle, [data.values[0], interpolatedValue])
|
||||
};
|
||||
} else {
|
||||
throw new Error(`Data for index ${index} is undefined in datasetZeitkonstante90.`);
|
||||
}
|
||||
});
|
||||
} else if (Zeitkonstante < 130) {
|
||||
interpolatedValues = datasetZeitkonstante90.map((data, index) => {
|
||||
if (datasetZeitkonstante130[index] && datasetZeitkonstante130[index].values) {
|
||||
const interpolatedValue = interpolate(Zeitkonstante, [90, 130], [datasetZeitkonstante90[index].values[0], datasetZeitkonstante130[index].values[0]]);
|
||||
return {
|
||||
month: data.month,
|
||||
interpolatedValue: interpolate(heizlastGebaeude, HeizLastTabelle, [data.values[0], interpolatedValue])
|
||||
};
|
||||
} else {
|
||||
throw new Error(`Data for index ${index} is undefined in datasetZeitkonstante130.`);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
interpolatedValues = datasetZeitkonstante130.map(data => ({
|
||||
month: data.month,
|
||||
interpolatedValue: interpolate(heizlastGebaeude, HeizLastTabelle, data.values)
|
||||
}));
|
||||
}
|
||||
|
||||
return interpolatedValues;
|
||||
}
|
||||
Reference in New Issue
Block a user