SCR截面速度、氨氮比等标准及相对标准偏差计算。
程序用来处理fluent通过xyplot导出的数据,导出可以选择多个平面,可计算标准偏差SD、相对标准偏差RSD,平均速度,适用于求解多个平面
python"># -*- coding: utf-8 -*-
"""
Created on Wed Sep 20 20:40:30 2023
该程序用来处理fluent通过xyplot导出的数据,导出可以选择多个平面,可计算标准偏差SD、相对标准偏差RSD,平均速度,适用于求解多个平面
联系QQ:3123575367,专业SCR脱硝仿真。
@author: PS
"""import chardet #识别文件的编码格式#确定文件编码格式
def check_code(text):#detect函数只需要一个 非unicode字符串参数,返回一个字典。该字典包括判断到的编码格式及判断的置信度。with open(text, 'rb') as f: adchar = chardet.detect(f.read()) # adchar = chardet.detect(text)# 由于windows系统的编码有可能是Windows-1254,打印出来后还是乱码,所以不直接用adchar['encoding']编码if adchar['encoding'] == 'gbk' or adchar['encoding'] == 'GBK' or adchar['encoding'] == 'GB2312':return 'GB2312'else:return 'utf-8'# lists_dict ={}# for i in range(num_lists):# lists_dict[f"list_{i}"] = []# print(lists_dict)# lists_dict[list_0]#读取文件并进行计算
def read_file_text(file_url):# num_lists = eval(input("请输入要面的数量:"))with open(file_url, 'r',encoding=check_code(file_url)) as f0:row_nul = 2for i in range(row_nul):next(f0)#跳行,跳过前两行f0_word = f0.readlines() #读取每一行plane_name = []# for i in range(array.shape[0]):ls = []#将文本数据按照行整理到列表中for line in f0_word:line = line.strip('\n')#将每段的回车替换为空格line = line.replace(')','')words = line.split()#将字符串以空格分开# if ls !=""# point_numls.append(words)ls = list(filter(None,ls))#删除空列表 # print(ls) sub_lists=[] #将非字符替换成002100for j in range(len(ls)):try:sub_lists.append(float(ls[j][1])) #保存每一行的第1列except:print(ls[j][1])plane_name.append(ls[j][1]) #保存名字sub_lists.append("002100") #将名字所在的位置替换成002100print("跳出")# breakcontinue#通过特定字符分割列表# 要分割的元素split_element = '002100'# 初始化结果列表result = []temp_list = []# 遍历原始列表for item in sub_lists:if item == split_element:# 如果遇到分割元素,将临时列表添加到结果列表,并重置临时列表if temp_list:result.append(temp_list)temp_list = []else:# 否则,将当前元素添加到临时列表temp_list.append(item)# 添加最后一个子列表到结果列表if temp_list:result.append(temp_list)res_rec_cv ={}#储存相对标准偏差(RSD)%res_rec_vec ={}#储存速度for i in range(len(plane_name)):print("===========================")print(plane_name[i])y = result[i]#计算#计算含0的数据mean = sum(y)/len(y)qh =[]for num in y:qh.append(pow(num-mean,2))qv = pow(sum(qh)/(len(qh)-1),0.5) #标准偏差 cv = qv/mean #相对标准偏差print('+++++++未操作数据 +++++++')print(f'平均值为:{round(mean,4)}')print(f'标准偏差(SD)为:{round(qv*100,4)} %\n相对标准偏差(RSD)为:{round(cv*100,4)} %')#计算去除0后的数据y_no_zero = [i for i in y if i!= 0] #去除0元素mean_no_zero = sum(y_no_zero)/len(y_no_zero)qh_no_zero = [pow(num-mean_no_zero,2) for num in y_no_zero]qv_no_zero = pow(sum(qh_no_zero)/(len(qh_no_zero)-1),0.5)cv_no_zero = qv_no_zero/mean_no_zero# res_rec_cv[plane_name[i]] = cv_no_zero*100#填充字典# res_rec_vec[plane_name[i]] = mean_no_zero#填充字典print('------------去除 0 数据------------')print(f'平均值为:{round(mean_no_zero,4)}')print(f'标准偏差(SD)为:{round(qv_no_zero*100,4)} %\n相对标准偏差(RSD)为:{round(cv_no_zero*100,4)} %')#计算去除指定后的数据y_no_dz = [i for i in y if i> 20] #由于近壁面效应,考虑除去改数值mean_no_dz = sum(y_no_dz)/len(y_no_dz)qh_no_dz = [pow(num-mean_no_dz,2) for num in y_no_dz]qv_no_dz = pow(sum(qh_no_dz)/(len(qh_no_dz)-1),0.5)cv_no_dz = qv_no_dz/mean_no_dzres_rec_cv[plane_name[i]] = cv_no_dz*100#填充字典res_rec_vec[plane_name[i]] = mean_no_dz#填充字典print('------------去除 0 数据------------')print(f'平均值为:{round(mean_no_zero,4)}')print(f'标准偏差(SD)为:{round(qv_no_zero*100,4)} %\n相对标准偏差(RSD)为:{round(cv_no_zero*100,4)} %') print("<><><><><><><><><>><><><><><")print("相对标准偏差(RSD)%")for key,value in res_rec_cv.items():print(key,value,"%")print("<><><><><><><><><>><><><><><") print("速度平均值 m/s ")for key,value in res_rec_vec.items():print(key,value,"m/s")read_file_text(r'D:\20241014-lc\CASE6-BOT\2\MODEL.xy') #只需要更改此处
#
计算结果如图: