Ik ben bezig om de zonneschijnduur te berekenen uit de globale straling. Ik doe dat via het Schipper algoritme: https://cdn.knmi.nl/knmi/pdf/bibliotheek/knmipubTR/TR258.pdf
Op pagina 28 staat deze samenvatting:
Ik ben bezig een PHP script hiervoor te ontwikkelen. Daarin heb ik de variabelen hetzelfde genoemd als in de PDF. De globale straling (Ggem, Gmin en Gmax), haal ik uit een Davis Solar sensor via Meteobrigde. Meteobridge heeft tags om het gemiddelde over de laatste 5 minuten, en de max- en minwaardes over de laatste 5 minuten uit te lezen. Deze waardes geven ik samen met de datum/tijd door aan het PHP script.
Op basis van de datum/tijd en mijn GPS locatie, bepaal ik de hoogte h (hoek van de zon) op dat tijdstip. En op basis van de dag van het jaar bepaal ik ook G0. Dat is de Globale straling die op deze dag maximaal beschikbaar is. De zonneconstante is 1367 W/m2. Echter doordat de aarde in de zomer verder van de zon af staat en in de zomer dichterbij, is de Globale straling gedurende het jaar niet constant. Vandaag zou dat bijvoorbeeld 1322 W/m2 zijn.
Na het bepalen van deze waarden ga ik aan de hand van de formules op pagina 28 van de PDF verder rekenen. De zonneschijnduur fractie Fr geeft aan hoelang de zon heeft geschenen in de afgelopen tijdsperiode (bij mij 5 minuten).
In situaties a t/m c lijkt het goed te gaan, echter in situatie d (als de sinus van de hoek van de zon >= 0.3 is), zie ik onverklaarbare resultaten. Ik krijg daar vaak een negatieve zonneschijnduur/fractie en soms ook hoger dan 1.
Ik heb hieronder even wat debug output van een foutieve uitkomst neergezet. Op basis van deze waardes, komt het gedeelte boven de streep in de breuk bij situatie d uit op een negatief getal: (($Ggem / $G0) - (1.27 * $Gmin / $G0)) = -0.056948673486369
Daardoor wordt ook de fractie zonneschijn negatief. Ik zit zelf al dagen te kijken wat hier mis kan zijn of wat ik fout doe. Wat ik me kan voorstellen is dat ik alle waardes < 0 moet afromen naar 0 en alle waardes > 1 naar 1. Echter ik lees dat niet in de beschrijving van het algoritme. Maar het kan natuurlijk ook zijn dat ik ergens een denk- en/of rekenfout maak.
Wie ziet wat er hier fout gaat en waarom?
datum tijd: 22-07-13 10:33
Ggem: 279
Gmin: 279
Gmax: 640
dag vh jaar: 194
G0: 1322.7700557069
h: 43.1288203264
sin(h): 0.68364096585015
Ggrens: 1020.510626746
situatie d:
$Tl: 13.03
($Ggem / $G0): 0.21092101291248
(1.27 * $Gmin / $G0): 0.26786968639885
(($Ggem / $G0) - (1.27 * $Gmin / $G0)): -0.056948673486369
exp(-$Tl/(0.9+(9.4 * $sinh))): 0.16888417806724
Zonneschijnfractie Fr: -0.33720549869209
Met deze waardes op dit moment komt er wel een verwacht resultaat uit:
datum tijd: 22-07-13 11:39
Ggem: 531
Gmin: 302
Gmax: 531
dag vh jaar: 194
G0: 1322.7700557069
h: 51.99405008653
sin(h): 0.78794681563477
Ggrens: 1073.5969922861
situatie d:
$Tl: 13.03
($Ggem / $G0): 0.40143031489794
(1.27 * $Gmin / $G0): 0.2899521336647
(($Ggem / $G0) - (1.27 * $Gmin / $G0)): 0.11147818123324
exp(-$Tl/(0.9+(9.4 * $sinh))): 0.20833388385302
Zonneschijnfractie Fr: 0.53509385593698