1.增加Unittest

2.考虑利用实际地闪密度和雷电流曲线。
3.版本号v1.2.0
This commit is contained in:
n3040
2022-01-21 15:50:59 +08:00
parent ee2d6477ee
commit 791f7c281f
4 changed files with 91 additions and 34 deletions

26
core.py
View File

@@ -21,6 +21,9 @@ class Parameter:
altitude: int # 海拔,单位米
max_i: float # 最大尝试电流单位kA
rated_voltage: float # 额定电压
ng: float # 地闪密度 次/(每平方公里·每年)
Ip_a: float # 概率密度曲线系数a
Ip_b: float # 概率密度曲线系数b
para = Parameter()
@@ -186,7 +189,7 @@ def solve_circle_line_intersection(
def min_i(string_len, u_ph):
# 海拔修正
altitude = para.altitude
k_a = math.exp((altitude-1000) / 8150) # 气隙海拔修正
k_a = math.exp((altitude - 1000) / 8150) # 气隙海拔修正
u_50 = 1 / k_a * (530 * string_len + 35) # 50045 上附录的公式,实际应该用负极性电压的公式
z_0 = 300 # 雷电波阻抗
z_c = 251 # 导线波阻抗
@@ -195,13 +198,20 @@ def min_i(string_len, u_ph):
return r
def thunder_density(i): # l雷电流幅值密度函数
td = para.td
def thunder_density(i, td, ip_a, ip_b): # 雷电流幅值密度函数
# td = para.td
r = None
if td == 20:
r = -(10 ** (-i / 44)) * math.log(10) * (-1 / 44) # 雷暴日20d
if td == 40:
r = -(10 ** (-i / 88)) * math.log(10) * (-1 / 88) # 雷暴日40d
# ip_a = para.Ip_a
# ip_b = para.Ip_b
if ip_a > 0 and ip_b > 0:
r = -(
-ip_b / ip_a / ((1 + (i / ip_a) ** ip_b) ** 2) * ((i / ip_a) ** (ip_b - 1))
)
else:
if td == 20:
r = -(10 ** (-i / 44)) * math.log(10) * (-1 / 44) # 雷暴日20d
if td == 40:
r = -(10 ** (-i / 88)) * math.log(10) * (-1 / 88) # 雷暴日40d
return r
@@ -433,7 +443,7 @@ def tangent_line_k(line_x, line_y, center_x, center_y, radius, init_k=10.0):
return np.array(k_candidate)[np.max(k_angle) == k_angle].tolist()[-1]
def func_ng(td): # 地闪密度
def func_ng(td): # 地闪密度,通过雷暴日计算
return 0.023 * (td ** 1.3)