生活随笔
收集整理的這篇文章主要介紹了
地外水平/斜面的太阳理论辐照度计算及其python实现
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
地外水平/斜面的太陽理論輻照度計算及其python實現
引入
最近項目需要計算地外水平/斜面的太陽理論輻照度,為此搜集了資料,并在python中進行了實現,現將其分享于此。
水平理論輻照度
地球與太陽之間的相對運動,即地球自轉與公轉,會對理論輻照度產生影響。在忽略極移和地軸進動微小影響的條件下地球大氣層上界單位面積、單位時間接收的太陽輻射與日地距離的平方成反比。地球自轉對應太陽時角和太陽高度角的變化,公轉對應太陽赤緯和日地距離的變化。
水平太陽輻照度的計算公式為:
在計算某地太陽福射時采用的是當地的真太陽時,所以需要根據當地的區時和經度來求取對應的真太陽時和太陽時角,此求取過程分步完成:①根據當地經度對已知的當地區時進行修正得到當地的地方時;②根據真太陽時和平太陽時之間的時差對該地方時進行修正得到當地的真太陽時;③根據當地的真太陽時計算得到當地區時對應的太陽時角。
按照上式,可計算得到指定地點、指定日期的水平地外輻照度理論值,并繪制對應的地外輻照度理論值曲線。
任意斜面的太陽輻照度
代碼
python代碼如下,略長,主要牽扯到真太陽時轉換數組的賦值。
代碼最后有運行示例。
import pandas
as pd
import numpy
as np
import math
from datetime
import datetime
, timedelta
def calculate_sun_time(time_str
, latitude
, longitude
, tilt
, azimuth
, longitude_time
):"""從datetime類型的時間計算日出日落及白天時間"""cur_time
= datetime
.strptime
(time_str
, '%Y-%m-%d %H:%M:%S')day_year
= int(datetime
.strftime
(cur_time
, '%j')) delta
= 23.45 / 180 * math
.pi
* math
.sin
(2 * math
.pi
* (284 + day_year
) / 365) latitude
= latitude
/ 180 * math
.pi cos_omega
= - math
.sin
(delta
) * math
.sin
(latitude
) / (math
.cos
(delta
) * math
.cos
(latitude
))omega
= math
.acos
(cos_omega
) true_time_down
= (omega
* 180 / math
.pi
/ 15 + 12) * 60 true_time_up
= 60 * 24 - true_time_downtime_sun
= (true_time_down
- 12 * 60) * 2bias_time
= dif_true_solar_time
(day_year
).split
(':')if '-' in bias_time
[0]:pos_flag
= -1else:pos_flag
= 1bias_minute
= int(bias_time
[0])bias_second
= int(bias_time
[1])bias
= pos_flag
* (abs(bias_minute
) + bias_second
/ 60)minute_sun_down
= true_time_down
- bias
- 4 * (longitude
- longitude_time
)minute_sun_up
= true_time_up
- bias
- 4 * (longitude
- longitude_time
)return time_sun
, minute_sun_up
, minute_sun_down
def calculate_irradiance_base(day_year
, minute_day
, latitude
, longitude
, tilt
, azimuth
, longitude_time
):"""根據給定的日期與時間,計算當前位置的大氣外理論輻照度,只適用于南北回歸線之外的情況,假定電站方位角為0北緯為正,東經為正latitude:電站所在維度longitude:電站所在經度tilt:電站光伏板安裝角度azimuth:電站斜面方位角longitude_time:電站所采用時區的中心經度"""G_0
= 1368 k
= 1 + 0.034 * (math
.cos
(2 * math
.pi
/ 365 * day_year
)) delta
= 23.45 / 180 * math
.pi
* math
.sin
(2 * math
.pi
* (284 + day_year
) / 365) bias_time
= dif_true_solar_time
(day_year
).split
(':')if '-' in bias_time
[0]:pos_flag
= -1else:pos_flag
= 1bias_minute
= int(bias_time
[0])bias_second
= int(bias_time
[1])bias
= pos_flag
* (abs(bias_minute
) + bias_second
/ 60)true_time
= minute_day
+ 4 * (longitude
- longitude_time
) + bias omega
= (true_time
/ 60 - 12) * 15 / 180 * math
.pi latitude
= latitude
/ 180 * math
.pi cos_theta
= math
.sin
(delta
)*math
.sin
(latitude
) + math
.cos
(delta
)*math
.cos
(latitude
)*math
.cos
(omega
)h
= math
.pi
/ 2 - math
.acos
(cos_theta
) if tilt
!= 0:tilt
= tilt
/ 180 * math
.piazimuth
= azimuth
/ 180 * math
.picos_alpha
= (math
.sin
(h
) * math
.sin
(latitude
) - math
.sin
(delta
)) / (math
.cos
(h
) * math
.cos
(latitude
))alpha
= math
.acos
(cos_alpha
) if true_time
> 60 * 12: alpha
= -alphacos_i
= math
.cos
(tilt
) * math
.sin
(h
) + math
.sin
(tilt
) * math
.cos
(h
) * math
.cos
(alpha
- azimuth
)G
= k
* G_0
* cos_i
else:G
= k
* G_0
* cos_theta
if G
< 0:G
= 0return G
def calculate_irradiance(time_str
, latitude
, longitude
, tilt
, azimuth
, longitude_time
):"""從datetime類型的時間計算當前大氣外理論輻照度"""cur_time
= datetime
.strptime
(time_str
, '%Y-%m-%d %H:%M:%S')day_year
= int(datetime
.strftime
(cur_time
, '%j')) hour
= int(datetime
.strftime
(cur_time
, "%H"))minute
= int(datetime
.strftime
(cur_time
, "%M"))minute_day
= 60 * hour
+ minute
return calculate_irradiance_base
(day_year
, minute_day
, latitude
, longitude
, tilt
, azimuth
, longitude_time
)def dif_true_solar_time(day_year
):sun_array
= list(range(0, 366))sun_array
[0] = "-3:9"sun_array
[1] = "-3:38"sun_array
[2] = "-4:6"sun_array
[3] = "-4:33"sun_array
[4] = "-5:1"sun_array
[5] = "-5:27"sun_array
[6] = "-5:54"sun_array
[7] = "-6:20"sun_array
[8] = "-6:45"sun_array
[9] = "-7:10"sun_array
[10] = "-7:35"sun_array
[11] = "-7:59"sun_array
[12] = "-8:22"sun_array
[13] = "-8:45"sun_array
[14] = "-9:7"sun_array
[15] = "-9:28"sun_array
[16] = "-9:49"sun_array
[17] = "-10:9"sun_array
[18] = "-10:28"sun_array
[19] = "-10:47"sun_array
[20] = "-11:5"sun_array
[21] = "-11:22"sun_array
[22] = "-11:38"sun_array
[23] = "-11:54"sun_array
[24] = "-12:8"sun_array
[25] = "-12:22"sun_array
[26] = "-12:35"sun_array
[27] = "-12:59"sun_array
[28] = "-13:10"sun_array
[29] = "-13:19"sun_array
[30] = "-13:37"sun_array
[31] = "-13:44"sun_array
[32] = "-13:50"sun_array
[33] = "-13:56"sun_array
[34] = "-14:1"sun_array
[35] = "-14:5"sun_array
[36] = "-14:9"sun_array
[37] = "-14:11"sun_array
[38] = "-14:13"sun_array
[39] = "-14:14"sun_array
[40] = "-14:15"sun_array
[41] = "-14:14"sun_array
[42] = "-14:13"sun_array
[43] = "-14:11"sun_array
[44] = "-14:8"sun_array
[45] = "-14:5"sun_array
[46] = "-14:1"sun_array
[47] = "-13:56"sun_array
[48] = "-13:51"sun_array
[49] = "-13:44"sun_array
[50] = "-13:38"sun_array
[51] = "-13:30"sun_array
[52] = "-13:22"sun_array
[53] = "-13:13"sun_array
[54] = "-11:4"sun_array
[55] = "-12:54"sun_array
[56] = "-12:43"sun_array
[57] = "-12:32"sun_array
[58] = "-12:21"sun_array
[59] = "-12:8"sun_array
[60] = "-11:56"sun_array
[61] = "-11:43"sun_array
[62] = "-11:29"sun_array
[63] = "-11:15"sun_array
[64] = "-11:1"sun_array
[65] = "-10:47"sun_array
[66] = "-10:32"sun_array
[67] = "-10:16"sun_array
[68] = "-10:1"sun_array
[69] = "-9:45"sun_array
[70] = "-9:28"sun_array
[71] = "-9:12"sun_array
[72] = "-8:55"sun_array
[73] = "-8:38"sun_array
[74] = "-8:21"sun_array
[75] = "-8:4"sun_array
[76] = "-7:46"sun_array
[77] = "-7:29"sun_array
[78] = "-7:11"sun_array
[79] = "-6:53"sun_array
[80] = "-6:35"sun_array
[81] = "-6:17"sun_array
[82] = "-5:58"sun_array
[83] = "-5:40"sun_array
[84] = "-5:22"sun_array
[85] = "-5:4"sun_array
[86] = "-4:45"sun_array
[87] = "-4:27"sun_array
[88] = "-4:9"sun_array
[89] = "-3:51"sun_array
[90] = "-3:33"sun_array
[91] = "-3:16"sun_array
[92] = "-2:58"sun_array
[93] = "-2:41"sun_array
[94] = "-2:24"sun_array
[95] = "-2:7"sun_array
[96] = "-1:50"sun_array
[97] = "-1:33"sun_array
[98] = "-1:17"sun_array
[99] = "-1:1"sun_array
[100] = "0:46"sun_array
[101] = "0:30"sun_array
[102] = "0:16"sun_array
[103] = "0:1"sun_array
[104] = "0:13"sun_array
[105] = "0:27"sun_array
[106] = "0:41"sun_array
[107] = "0:54"sun_array
[108] = "1:6"sun_array
[109] = "1:19"sun_array
[110] = "1:31"sun_array
[111] = "1:42"sun_array
[112] = "1:53"sun_array
[113] = "2:4"sun_array
[114] = "2:14"sun_array
[115] = "2:23"sun_array
[116] = "2:33"sun_array
[117] = "2:41"sun_array
[118] = "2:49"sun_array
[119] = "2:57"sun_array
[120] = "3:4"sun_array
[121] = "1:10"sun_array
[122] = "3:16"sun_array
[123] = "3:21"sun_array
[124] = "3:26"sun_array
[125] = "3:30"sun_array
[126] = "3:37"sun_array
[127] = "3:36"sun_array
[128] = "3:39"sun_array
[129] = "3:40"sun_array
[130] = "3:42"sun_array
[131] = "3:42"sun_array
[132] = "3:42"sun_array
[133] = "3:42"sun_array
[134] = "3:41"sun_array
[135] = "3:39"sun_array
[136] = "3:37"sun_array
[137] = "3:34"sun_array
[138] = "3:31"sun_array
[139] = "3:27"sun_array
[140] = "3:23"sun_array
[141] = "3:18"sun_array
[142] = "3:13"sun_array
[143] = "3:7"sun_array
[144] = "3:1"sun_array
[145] = "2:54"sun_array
[146] = "2:47"sun_array
[147] = "2:39"sun_array
[148] = "2:31"sun_array
[149] = "2:22"sun_array
[150] = "2:13"sun_array
[151] = "2:4"sun_array
[152] = "1:54"sun_array
[153] = "1:44"sun_array
[154] = "1:34"sun_array
[155] = "1:23"sun_array
[156] = "1:12"sun_array
[157] = "1:0"sun_array
[158] = "0:48"sun_array
[159] = "0:36"sun_array
[160] = "0:24"sun_array
[161] = "0:12"sun_array
[162] = "0:1"sun_array
[163] = "0:14"sun_array
[164] = "0:39"sun_array
[165] = "0:52"sun_array
[166] = "1:5"sun_array
[167] = "1:18"sun_array
[168] = "1:31"sun_array
[169] = "1:45"sun_array
[170] = "1:57"sun_array
[171] = "2:10"sun_array
[172] = "2:23"sun_array
[173] = "2:36"sun_array
[174] = "2:48"sun_array
[175] = "3:1"sun_array
[176] = "3:13"sun_array
[177] = "3:25"sun_array
[178] = "3:37"sun_array
[179] = "3:49"sun_array
[180] = "4:0"sun_array
[181] = "4:11"sun_array
[182] = "4:22"sun_array
[183] = "4:33"sun_array
[184] = "4:43"sun_array
[185] = "4:53"sun_array
[186] = "5:2"sun_array
[187] = "5:11"sun_array
[188] = "5:20"sun_array
[189] = "5:28"sun_array
[190] = "5:36"sun_array
[191] = "5:43"sun_array
[192] = "5:50"sun_array
[193] = "5:56"sun_array
[194] = "6:2"sun_array
[195] = "6:8"sun_array
[196] = "6:12"sun_array
[197] = "6:16"sun_array
[198] = "6:20"sun_array
[199] = "6:23"sun_array
[200] = "6:25"sun_array
[201] = "6:27"sun_array
[202] = "6:29"sun_array
[203] = "6:29"sun_array
[204] = "6:29"sun_array
[205] = "6:29"sun_array
[206] = "6:28"sun_array
[207] = "6:26"sun_array
[208] = "6:24"sun_array
[209] = "6:21"sun_array
[210] = "6:17"sun_array
[211] = "6:13"sun_array
[212] = "6:8"sun_array
[213] = "6:3"sun_array
[214] = "5:57"sun_array
[215] = "5:51"sun_array
[216] = "5:44"sun_array
[217] = "5:36"sun_array
[218] = "5:28"sun_array
[219] = "5:19"sun_array
[220] = "5:10"sun_array
[221] = "5:0"sun_array
[222] = "4:50"sun_array
[223] = "4:39"sun_array
[224] = "4:27"sun_array
[225] = "4:15"sun_array
[226] = "4:2"sun_array
[227] = "3:49"sun_array
[228] = "3:36"sun_array
[229] = "3:21"sun_array
[230] = "3:7"sun_array
[231] = "2:51"sun_array
[232] = "2:36"sun_array
[233] = "2:20"sun_array
[234] = "2:3"sun_array
[235] = "1:47"sun_array
[236] = "1:29"sun_array
[237] = "1:12"sun_array
[238] = "0:54"sun_array
[239] = "0:35"sun_array
[240] = "0:17"sun_array
[241] = "0:2"sun_array
[242] = "0:21"sun_array
[243] = "0:41"sun_array
[244] = "1:0"sun_array
[245] = "1:20"sun_array
[246] = "1:40"sun_array
[247] = "2:1"sun_array
[248] = "2:21"sun_array
[249] = "2:42"sun_array
[250] = "3:3"sun_array
[251] = "3:3"sun_array
[252] = "3:24"sun_array
[253] = "3:45"sun_array
[254] = "4:6"sun_array
[255] = "4:27"sun_array
[256] = "4:48"sun_array
[257] = "5:10"sun_array
[258] = "5:31"sun_array
[259] = "5:53"sun_array
[260] = "6:14"sun_array
[261] = "6:35"sun_array
[262] = "6:57"sun_array
[263] = "7:18"sun_array
[264] = "7:39"sun_array
[265] = "8:0"sun_array
[266] = "8:21"sun_array
[267] = "8:42"sun_array
[268] = "9:2"sun_array
[269] = "9:22"sun_array
[270] = "9:42"sun_array
[271] = "10:2"sun_array
[272] = "10:21"sun_array
[273] = "10:40"sun_array
[274] = "+10:59"sun_array
[275] = "+11:18"sun_array
[276] = "+11:36"sun_array
[277] = "+11:36"sun_array
[278] = "+11:53"sun_array
[279] = "+12:11"sun_array
[280] = "+12:28"sun_array
[281] = "+12:44"sun_array
[282] = "+12:60"sun_array
[283] = "+13:16"sun_array
[284] = "+13:16"sun_array
[285] = "+13:31"sun_array
[286] = "+13:45"sun_array
[287] = "+13:59"sun_array
[288] = "+14:13"sun_array
[289] = "+14:26"sun_array
[290] = "+14:38"sun_array
[291] = "+14:50"sun_array
[292] = "+15:1"sun_array
[293] = "+15:12"sun_array
[294] = "+11:21"sun_array
[295] = "+15:31"sun_array
[296] = "+15:40"sun_array
[297] = "+15:48"sun_array
[298] = "+15:55"sun_array
[299] = "+16:1"sun_array
[300] = "+16:7"sun_array
[301] = "+16:12"sun_array
[302] = "+16:16"sun_array
[303] = "+16:20"sun_array
[304] = "+16:22"sun_array
[305] = "+16:24"sun_array
[306] = "+16:25"sun_array
[307] = "+16:25"sun_array
[308] = "+16:24"sun_array
[309] = "+16:23"sun_array
[310] = "+16:21"sun_array
[311] = "+16:17"sun_array
[312] = "+16:13"sun_array
[313] = "+16:9"sun_array
[314] = "+16:3"sun_array
[315] = "+15:56"sun_array
[316] = "+15:49"sun_array
[317] = "+15:41"sun_array
[318] = "+15:32"sun_array
[319] = "+15:22"sun_array
[320] = "+15:11"sun_array
[321] = "+14:60"sun_array
[322] = "+14:47"sun_array
[323] = "+14:34"sun_array
[324] = "+14:20"sun_array
[325] = "+14:6"sun_array
[326] = "+13:50"sun_array
[327] = "+13:34"sun_array
[328] = "+13:17"sun_array
[329] = "+12:59"sun_array
[330] = "+12:40"sun_array
[331] = "+12:21"sun_array
[332] = "+12:1"sun_array
[333] = "+11:40"sun_array
[334] = "+11:18"sun_array
[335] = "+10:56"sun_array
[336] = "+10:33"sun_array
[337] = "+10:9"sun_array
[338] = "+9:45"sun_array
[339] = "+9:21"sun_array
[340] = "+8:55"sun_array
[341] = "+8:29"sun_array
[342] = "+8:3"sun_array
[343] = "+7:36"sun_array
[344] = "+7:9"sun_array
[345] = "+6:42"sun_array
[346] = "+6:14"sun_array
[347] = "+5:46"sun_array
[348] = "+5:17"sun_array
[349] = "+4:48"sun_array
[350] = "+4:19"sun_array
[351] = "+3:50"sun_array
[352] = "+3:21"sun_array
[353] = "+2:51"sun_array
[354] = "+2:22"sun_array
[355] = "+1:52"sun_array
[356] = "+1:22"sun_array
[357] = "+0:52"sun_array
[358] = "+0:23"sun_array
[359] = "+0:7"sun_array
[360] = "+0:37"sun_array
[361] = "-1:6"sun_array
[362] = "-1:36"sun_array
[363] = "-2:5"sun_array
[364] = "-2:34"sun_array
[365] = "-3:3"return sun_array
[day_year
- 1]
tilt
= 20pd_data
= pd
.DataFrame
(np
.arange
(1, 60*24+1, 30), columns
=['minute_day'])
pd_data
['day_year'] = 142
pd_data
['G'] = pd_data
.apply(lambda x
: calculate_irradiance_base
(int(x
['day_year']), x
['minute_day'], 40, 110, 0, 0, 120), axis
=1)
pd_data
['tilt_G'] = pd_data
.apply(lambda x
: calculate_irradiance_base
(int(x
['day_year']), x
['minute_day'], 40, 110, tilt
, 0, 120), axis
=1)print(pd_data
)time_str
= '2008-06-23 14:35:22'
G
= calculate_irradiance
(time_str
, 30, 122, tilt
, 0, 120)
print(G
)[time_sun
, minute_sun_up
, minute_sun_down
] = calculate_sun_time
(time_str
, 30, 122, tilt
, 0, 120)
print(G
)
參考:
[1] https://wenku.baidu.com/view/0989752c3169a4517723a3d8.html
[2] https://www.pveducation.org/zh-hans/pvcdrom/%E4%BB%BB%E6%84%8F%E6%9C%9D%E5%90%91%E5%92%8C%E5%80%BE%E6%96%9C%E5%BA%A6
[3] 王飛, 并網型光伏電站發電功率預測方法與系統, 2013, 華北電力大學.
總結
以上是生活随笔為你收集整理的地外水平/斜面的太阳理论辐照度计算及其python实现的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。