[Python-modules-commits] [python-pysolar] 14/42: More progress on REST2 model

Wolfgang Borgert debacle at moszumanska.debian.org
Fri Oct 3 23:37:00 UTC 2014


This is an automated email from the git hooks/post-receive script.

debacle pushed a commit to tag 0.6
in repository python-pysolar.

commit 94d728d9c35d09b1450d283b84eb5f85c1541438
Author: Brandon Stafford <brandon at pingswept.org>
Date:   Thu Mar 27 13:58:37 2014 -0400

    More progress on REST2 model
---
 Pysolar/rest.py | 52 +++++++++++++++++++++++++++++++++++++++++-----------
 1 file changed, 41 insertions(+), 11 deletions(-)

diff --git a/Pysolar/rest.py b/Pysolar/rest.py
index cc0d8dc..54f095d 100644
--- a/Pysolar/rest.py
+++ b/Pysolar/rest.py
@@ -4,17 +4,17 @@ nestable_dict = lambda: defaultdict(nestable_dict)
 
 transmittance = nestable_dict()
 
-transmittance["rayleigh"]["high-frequency"] = lambda m: (1 + 1.8169 * m + 0.033454 * m)/(1 + 2.063 * m + 0.31978 * m ** 2)
+transmittance["rayleigh"]["high-frequency"] = lambda m: (1 + 1.8169 * m + 0.033454 * m ** 2)/(1 + 2.063 * m + 0.31978 * m ** 2)
 transmittance["rayleigh"]["low-frequency"] = lambda m: (1 - 0.010394 * m)/(1 - 0.00011042 * m ** 2)
 
-transmittance["gas"]["high-frequency"] = lambda x: 1 # fake
-transmittance["gas"]["low-frequency"] = lambda x: 1 # fake
+transmittance["gas"]["high-frequency"] = lambda m: (1 + 0.95885 * m + 0.012871 * m ** 2)/(1 + 0.96321 * m + 0.015455 * m ** 2)
+transmittance["gas"]["low-frequency"] = lambda m: (1 + 0.27284 * m - 0.00063699 * m ** 2)/(1 + 0.30306 * m)
 
-transmittance["ozone"]["high-frequency"] = lambda o, m: 1 # fake
-transmittance["ozone"]["low-frequency"] = lambda o, m: 1
+transmittance["ozone"]["high-frequency"] = lambda uo, m: 1 # fake
+transmittance["ozone"]["low-frequency"] = lambda uo, m: 1
 
-transmittance["nitrogen_dioxide"]["high-frequency"] = lambda n, m: 1 # fake
-transmittance["nitrogen_dioxide"]["low-frequency"] = lambda n, m: 1
+transmittance["nitrogen_dioxide"]["high-frequency"] = lambda un, m: 1 # fake
+transmittance["nitrogen_dioxide"]["low-frequency"] = lambda un, m: 1
 
 transmittance["water"]["high-frequency"] = lambda w, m: 1 # fake
 transmittance["water"]["low-frequency"] = lambda w, m: 1 # fake
@@ -33,8 +33,37 @@ optical_mass["aerosol"] = lambda p, m: m
 E0n = {"high-frequency": 635.4, # extra-atmospheric irradiance, 290-700 nm (UV and visible)
        "low-frequency":  709.7} # extra-atmospheric irradiance, 700-4000 nm (short infrared)
 
-def GetGlobalIrradiance(direct_normal_irradiance, altitude_deg, diffuse_irradiance):
-	return direct_normal_irradiance * math.cos(math.radians(90 - altitude_deg)) + diffuse_irradiance
+def GetAerosolForwardScatteranceFactor(altitude_deg):
+	Z = 90 - altitude_deg
+	return 1 - math.e ** (-0.6931 - 1.8326 * math.cos(math.radians(Z)))
+
+def GetRayleighExtinctionForwardScatteringFraction(air_mass, layer):
+	if layer == 1:
+		return 0.5 * (0.89013 - 0.049558 * air_mass + 0.000045721 * air_mass ** 2)
+	else
+		return 0.5
+
+def GetDiffuseIrradiance():
+	return GetDiffuseIrradianceByLayer(1) + GetDiffuseIrradianceByLayer(2)
+
+def GetDiffuseIrradianceByLayer(layer, air_mass=1.66):
+	Z = 90 - altitude_deg
+	To =
+	Tg =
+	Tn =
+	Tw =
+	Tr =
+	Ta =
+	Tas =
+	Br = GetRayleighExtinctionForwardScatteringFraction(air_mass, layer)
+	Ba = GetAerosolForwardScatteranceFactor(altitude_deg)
+	F =
+	Edp = To * Tg * Tn * Tw * (Br * (1 - Tr) * Ta ** 0.25 + Ba * F * Tr * (1 - Tas ** 0.25)) * E0n[layer] # E0n[layer] won't work yet
+	Edd = rhogi * rhosi * (Eb + Edp)/(1 - rhogi * rhosi)
+	return Edp + Edd
+
+def GetDirectNormalIrradiance(air_mass=1.66, pressure_millibars=1013.25, ozone_atm_cm=0.35, nitrogen_atm_cm=0.0002, precipitable_water_cm=5.0, turbidity_alpha=1.3, turbidity_beta=0.6):
+	return GetDirectNormalIrradianceByBand("high-frequency") + GetDirectNormalIrradianceByBand("low-frequency")
 
 def GetDirectNormalIrradianceByBand(band, air_mass=1.66, pressure_millibars=1013.25, ozone_atm_cm=0.35, nitrogen_atm_cm=0.0002, precipitable_water_cm=5.0, turbidity_alpha=1.3, turbidity_beta=0.6):
 
@@ -46,5 +75,6 @@ def GetDirectNormalIrradianceByBand(band, air_mass=1.66, pressure_millibars=1013
 	Ta = transmittance["aerosol"][band](turbidity_alpha, turbidity_beta, optical_mass["aerosol"](pressure_millibars, air_mass))
 	return E0n[band] * Tr * Tg * To * Tn * Tw * Ta
 
-def GetDirectNormalIrradiance(air_mass=1.66, pressure_millibars=1013.25, ozone_atm_cm=0.35, nitrogen_atm_cm=0.0002, precipitable_water_cm=5.0, turbidity_alpha=1.3, turbidity_beta=0.6):
-	return GetDirectNormalIrradianceByBand("high-frequency") + GetDirectNormalIrradianceByBand("low-frequency")
+def GetGlobalIrradiance(direct_normal_irradiance, altitude_deg, diffuse_irradiance):
+	Z = 90 - altitude_deg
+	return direct_normal_irradiance * math.cos(math.radians(Z)) + diffuse_irradiance

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/python-modules/packages/python-pysolar.git



More information about the Python-modules-commits mailing list