1.增加Unittest
2.考虑利用实际地闪密度和雷电流曲线。 3.版本号v1.2.0
This commit is contained in:
68
main.py
68
main.py
@@ -8,30 +8,29 @@ import timeit
|
||||
|
||||
|
||||
# 打印参数
|
||||
def parameter_display(para: Parameter):
|
||||
logger.info(f"额定电压 kV {para.rated_voltage}")
|
||||
logger.info(f"导线弧垂 m {para.h_c_sag}")
|
||||
logger.info(f"地线弧垂 m {para.h_g_sag}")
|
||||
logger.info(f"全塔高 m {para.h_arm[0]}")
|
||||
logger.info(f"串绝缘距离 m {para.insulator_c_len}")
|
||||
logger.info(f"导线串长 m {para.string_c_len}")
|
||||
logger.info(f"地线串长 m {para.string_g_len}")
|
||||
logger.info(f"挂点垂直坐标 m {para.h_arm}")
|
||||
logger.info(f"挂点水平坐标 m {para.gc_x}")
|
||||
logger.info(f"地面倾角 ° {[an*180/math.pi for an in para.ground_angels]}")
|
||||
logger.info(f"海拔高度 m {para.altitude}")
|
||||
logger.info(f"雷暴日 d {para.td}")
|
||||
|
||||
|
||||
def egm():
|
||||
if len(sys.argv) < 2:
|
||||
toml_file_path = r"article.toml"
|
||||
def parameter_display(para_dis: Parameter):
|
||||
logger.info(f"额定电压 kV {para_dis.rated_voltage}")
|
||||
logger.info(f"导线弧垂 m {para_dis.h_c_sag}")
|
||||
logger.info(f"地线弧垂 m {para_dis.h_g_sag}")
|
||||
logger.info(f"全塔高 m {para_dis.h_arm[0]}")
|
||||
logger.info(f"串绝缘距离 m {para_dis.insulator_c_len}")
|
||||
logger.info(f"导线串长 m {para_dis.string_c_len}")
|
||||
logger.info(f"地线串长 m {para_dis.string_g_len}")
|
||||
logger.info(f"挂点垂直坐标 m {para_dis.h_arm}")
|
||||
logger.info(f"挂点水平坐标 m {para_dis.gc_x}")
|
||||
logger.info(f"地面倾角 ° {[an * 180 / math.pi for an in para_dis.ground_angels]}")
|
||||
logger.info(f"海拔高度 m {para_dis.altitude}")
|
||||
if para_dis.ng > 0:
|
||||
logger.info("不采用雷暴日计算地闪密度和雷电流密度")
|
||||
logger.info(f"地闪密度 次/(每平方公里·每年) {para_dis.ng}")
|
||||
logger.info(f"概率密度曲线系数a {para_dis.Ip_a}")
|
||||
logger.info(f"概率密度曲线系数b {para_dis.Ip_b}")
|
||||
pass
|
||||
else:
|
||||
toml_file_path = sys.argv[1]
|
||||
if not os.path.exists(toml_file_path):
|
||||
logger.info(f'无法找到数据文件{toml_file_path},程序退出。')
|
||||
sys.exit(0)
|
||||
logger.info(f"读取文件{toml_file_path}")
|
||||
logger.info(f"雷暴日 d {para_dis.td}")
|
||||
|
||||
|
||||
def read_parameter(toml_file_path):
|
||||
with open(toml_file_path, "rb") as toml_fs:
|
||||
toml_dict = tomli.load(toml_fs)
|
||||
toml_parameter = toml_dict["parameter"]
|
||||
@@ -49,9 +48,25 @@ def egm():
|
||||
para.h_arm = toml_parameter["h_arm"]
|
||||
para.altitude = toml_parameter["altitude"]
|
||||
para.rated_voltage = toml_parameter["rated_voltage"]
|
||||
toml_advance = toml_dict["advance"]
|
||||
para.ng = toml_advance["ng"] # 地闪密度
|
||||
para.Ip_a = toml_advance["Ip_a"] # 概率密度曲线系数a
|
||||
para.Ip_b = toml_advance["Ip_b"] # 概率密度曲线系数b
|
||||
toml_optional = toml_dict["optional"]
|
||||
para.voltage_n = toml_optional["voltage_n"] # 工作电压分成多少份来计算
|
||||
para.max_i = toml_optional["max_i"]
|
||||
|
||||
|
||||
def egm():
|
||||
if len(sys.argv) < 2:
|
||||
toml_file_path = r"default.toml"
|
||||
else:
|
||||
toml_file_path = sys.argv[1]
|
||||
if not os.path.exists(toml_file_path):
|
||||
logger.info(f"无法找到数据文件{toml_file_path},程序退出。")
|
||||
sys.exit(0)
|
||||
logger.info(f"读取文件{toml_file_path}")
|
||||
read_parameter(toml_file_path)
|
||||
#########################################################
|
||||
# 以上是需要设置的参数
|
||||
parameter_display(para)
|
||||
@@ -223,7 +238,7 @@ def egm():
|
||||
** 0.5
|
||||
)
|
||||
if distance > rc:
|
||||
logger.info("暴露弧已经完全被屏蔽")
|
||||
logger.info(f"电流为{i_bar}kV时,暴露弧已经完全被屏蔽")
|
||||
exposed_curve_shielded = True
|
||||
break
|
||||
# if phase_conductor_foo == 2:
|
||||
@@ -273,6 +288,9 @@ def egm():
|
||||
i_min, i_max, curt_segment_n + 1, retstep=True
|
||||
)
|
||||
bd_area_vec = np.vectorize(bd_area)
|
||||
td = para.td
|
||||
ip_a = para.Ip_a
|
||||
ip_b = para.Ip_b
|
||||
cal_bd_np = (
|
||||
bd_area_vec(
|
||||
i_curt_samples,
|
||||
@@ -286,7 +304,7 @@ def egm():
|
||||
ground_angel,
|
||||
rg_type,
|
||||
)
|
||||
* thunder_density(i_curt_samples)
|
||||
* thunder_density(i_curt_samples, td, ip_a, ip_b)
|
||||
)
|
||||
calculus = np.sum(cal_bd_np[:-1] + cal_bd_np[1:]) / 2 * d_curt
|
||||
# for i_curt in i_curt_samples[:-1]:
|
||||
|
||||
Reference in New Issue
Block a user