-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathFunction_saveData.py
More file actions
122 lines (93 loc) · 4.29 KB
/
Copy pathFunction_saveData.py
File metadata and controls
122 lines (93 loc) · 4.29 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
import pandas as pd
import os
import copy
def save_coldplate_result(cfd_data, raw_name="CFD_Raw_Data.csv", proc_name="CFD_Final_Result.csv"):
"""
自动保存 CFD 结果并进行智能计算。
:param cfd_data: (dict) 包含 Fluent 结果的字典
:param raw_name: (str, 可选) 原始数据文件名,默认为 "CFD_Raw_Data.csv"
:param proc_name: (str, 可选) 处理后数据文件名,默认为 "CFD_Final_Result.csv"
"""
# =======================================================
# 1. 自动定位路径 (永远保存在当前脚本旁边)
# =======================================================
# 获取当前脚本(.py)所在的文件夹绝对路径
base_dir = os.path.dirname(os.path.abspath(__file__))
# 拼接出完整的文件路径
raw_path = os.path.join(base_dir, raw_name)
proc_path = os.path.join(base_dir, proc_name)
# =======================================================
# 2. 保存原始数据 (Raw Data)
# =======================================================
# 将字典转为 DataFrame (一行)
df_raw = pd.DataFrame([cfd_data])
# 写入 CSV: 如果文件不存在就写表头,存在就追加
df_raw.to_csv(raw_path, mode='a', index=False, header=not os.path.exists(raw_path))
print(f" 💾 原始数据已追加至: {raw_name}")
# =======================================================
# 3. 智能计算模块 (Smart Calculation)
# =======================================================
# 复制一份数据进行处理,防止污染原始字典
proc_data = copy.deepcopy(cfd_data)
# --- A. 自动识别 Chip 并计算平均温度 ---
# 逻辑: 抓取所有以 "chip-" 开头的 key
chip_temps = [val for k, val in proc_data.items() if k.startswith("chip-")]
if chip_temps:
avg_chip = sum(chip_temps) / len(chip_temps)
proc_data["avg_chip_temp"] = avg_chip
# --- B. 自动识别成对的 In/Out 并计算平均温升 ---
# 逻辑: 找到 in-X,然后去找有没有 out-X
press_diffs = []
# 使用 list(keys) 避免在遍历时修改字典报错
for key in list(proc_data.keys()):
if key.startswith("in-"):
# 提取编号 (例如 "in-1" -> "1")
idx = key.split("-")[1]
out_key = f"out-{idx}"
# 如果这一对的出口数据也存在
if out_key in proc_data:
# 计算温差绝对值
diff = abs(proc_data[key]) - abs(proc_data[out_key])
press_diffs.append(diff)
if press_diffs:
avg_diff = sum(press_diffs) / len(press_diffs)
proc_data["avg_in_out_diff"] = avg_diff
# ================= Calcualte entropy ==================
T_chip = proc_data["avg_chip_temp"]
dP = proc_data["avg_in_out_diff"]
flow = proc_data["flowrate"]
flow = flow/998.2 # mass flow to volume flow
proc_data["entropy"] = 88*(T_chip-298)/298**2 + flow * dP/298
# =======================================================
# 4. 保存处理后数据 (Processed Data)
# =======================================================
df_proc = pd.DataFrame([proc_data])
# 写入 CSV
df_proc.to_csv(proc_path, mode='a', index=False, header=not os.path.exists(proc_path))
# 打印简报
print(f" 📊 proccesed data save at: {proc_name}")
if "avg_chip_temp" in proc_data:
print(f" -> {len(chip_temps)} chips detected,ave temperature: {proc_data['avg_chip_temp']:.2f}")
if "avg_in_out_diff" in proc_data:
print(f" -> {len(press_diffs)} channles detected,ave pressure drop: {proc_data['avg_in_out_diff']:.2f}")
return proc_data
if __name__ =="__main__":
data = { "Case_Width": 0.2, # 甚至可以把输入参数也加进去
"flowrate": 3.5}
result = {
"in-1": 550,
"in-2": 452,
"in-3": 361,
"out-1": 100,
"out-2": 100,
"out-3": 100,
"chip-1": 1,
"chip-2": 1,
"chip-3": 1,
"chip-4": 1
# ... 更多数据
}
data.update(result)
proc_data = save_coldplate_result(data, raw_name="CFD_raw_data.csv", proc_name="CFD_raw_data.csv")
proc_data = pd.DataFrame([proc_data])["entropy"]
print(proc_data)