''' wake center trajectory ''' z[case] = 1 - z[case] # 使x,y,z三个矩阵维数一致,并将拟合范围缩小至以轮毂中心左右1D范围,以排除大气低速气团的影响 x[case] = x[case][:-1, :-1] y[case] = y[case][:-1, :-1] x[case] = x[case][126:379, 378:] y[case] = y[case][126:379, 378:] z[case] = z[case][126:379, 378:] # 过滤版wake center import fitting as ft wc = np.array(zeros((x[case][0].shape[0], 2))) for j in range(x[case][0].shape[0]): p = y[case][:, j] vd = z[case][:, j] cp = ft.fit_gs((0, 30), p, vd)[0] wc[j, 0] = x[case][0, j] wc[j, 1] = cp # 时均版wake center wcx = [ 30., 60., 90., 120., 150., 180., 210., 240., 270., 300., 330., 360., 390., 420., 450., 480., 510., 540., 570., 600., 630., 660., 690., 720., 750., 780., 810., 840., 870., 900., 930., 960., 990., 1020., 1050., 1080., 1110., 1140., 1170., 1200., 1230., 1260., 1290., 1320., 1350., 1380., 1410., 1440., 1470., 1500. ] wc0 = [ -2.2130883, -2.15952668, -2.08443188, -1.8727173, -1.8331203, -1.79625799, -1.95649934, -1.88879547, -1.79534621, -1.96818774, -2.17196474, -2.55167703, -2.94661827, -2.66513258, -2.18496007, -1.88406583, -1.73906791, -1.51700212, -0.69452023, 0.03032263, 0.23989504, 0.40922311,
x[tt] = x[tt][:-1, :-1] y[tt] = y[tt][:-1, :-1] x[tt] = x[tt][79:174, :] y[tt] = y[tt][79:174, :] z[tt] = z[tt][79:174, :] import fitting as ft wc = {} for tt in [0, 1, 2, 3]: wc[tt] = np.array(zeros((y[tt][0].shape[0], 2))) for j in range(y[tt][0].shape[0]): p = x[tt][:, j] vd = z[tt][:, j] vd = 1 - vd cp = ft.fit_gs((400, 20), p, vd)[0] wc[tt][j, 0] = y[tt][0, j] wc[tt][j, 1] = cp # 检测fit_gs函数的正确性, 顺便也能做某截面的拟合图像 # p = x[2][:,252] # vd = z[2][:,252] # vd = 1 - vd/11.4 # cp = ft.fit_gs((400,20),p,vd) # xx = p # yy = vd # delta = (np.max(xx) - np.min(xx)) / (np.shape(xx)[0] - 1) # S = sum(yy)*delta - 0.5*(yy[np.where(xx==np.min(xx))] + yy[np.where(xx==np.max(xx))]) # yyp = ft.func_gs(cp,xx)*S # plt.figure(figsize = (8, 4)) # plt.plot(xx, yy, 'ro-', linewidth = 1, label='velocity deficit')
prbData_ft[cn][i, :] = tM.trs(probeData[cn][prb][timeList[cn][i]])[:, 3] for j in range(prbData_ft[cn].shape[1]): prbData_ft[cn][:, j] = flt_seq(prbData_ft[cn][:, j], 75) p = tM.trs(probeData[cn][prb]['18240.0'])[:, 1] for cn in range(3): wc[cn] = np.zeros((tNum[cn], 2)) wc[cn][:, 0] = np.linspace(float(timeList[cn][0]), float(timeList[cn][-1]), tNum[cn]) for i in range(prbData_ft[cn].shape[0]): vd = 1 - prbData_ft[cn][i, :] / 11.4 vd[where(vd < 0)] = 0 # 拟合之前先要尽量排除尾流外的大气结构的影响! # fitting cp = ft.fit_gs((0, 30), p[7:45], vd[7:45])[0] - wd[cn] wc[cn][i, 1] = cp plt.figure(figsize=(10, 6)) plt.plot(wc[0][:, 0] - 18000, wc[0][:, 1] / 63, 'r-', linewidth=1, label='yaw 0') plt.plot(wc[1][:, 0] - 18000, wc[1][:, 1] / 63, 'b-', linewidth=1, label='yaw 30') plt.plot(wc[2][:, 0] - 18000, wc[2][:, 1] / 63,
dx, dy = 1, 1 x[cn], y[cn] = np.mgrid[slice(-252, 252 + dx, dx), slice(0, 378 + dy, dy)] x[cn] = x[cn].T y[cn] = y[cn].T # 向网格里填值 u[cn] = np.array(zeros(shape(x[cn]))) for row in secdata.meshData: i = int(row[0,2]/dx) # i是行,对应于z坐标 j = int(row[0,1]/dy) # j是列,对应于y坐标 u[cn][i,j+int(252/dy)] = row[0,3] # i和j是矩阵坐标,而不是计算与坐标,需要换算 xx = x[cn][90,63:252+189+1] yy = u[cn][90,63:252+189+1] yy = 1 - yy/11.4 miu, sgm = ft.fit_gs((0,30),xx,yy) # delta = (np.max(xx) - np.min(xx)) / (np.shape(xx)[0] - 1) # S = sum(yy)*delta - 0.5*(yy[np.where(xx==np.min(xx))] + yy[np.where(xx==np.max(xx))]) # yyp = ft.func_gs((miu,sgm),xx)*S # plt.figure(figsize = (4, 9)) # plt.plot(yy, xx, 'ro:', linewidth = 1, label='velocity deficit') # plt.plot(yyp, xx, 'k-', linewidth = 1, label='gaussian fitting curve') # plt.grid() # plt.show() mdrsh[n] = miu xx = y[cn][:90+189+1,252] yy = u[cn][:,252] / u0_org yy = (1 - yy)[:90+189+1] miu, sgm = ft.fit_gs((90,30),xx,yy) # delta = (np.max(xx) - np.min(xx)) / (np.shape(xx)[0] - 1)
plt.colorbar() ''' wake center trajectory ''' z[case] = 1 - z[case] # 使x,y,z三个矩阵维数一致,并将拟合范围缩小至以轮毂中心左右1D范围,以排除大气低速气团的影响 x[case] = x[case][:-1, :-1] y[case] = y[case][:-1, :-1] x[case] = x[case][126:379, 378:] y[case] = y[case][126:379, 378:] z[case] = z[case][126:379, 378:] import fitting as ft wc = np.array(zeros((x[case][0].shape[0], 3))) for j in range(x[case][0].shape[0]): p = y[case][:, j] vd = z[case][:, j] miu, sgm = ft.fit_gs((0, 30), p, vd) wc[j, 0] = x[case][0, j] wc[j, 1] = miu wc[j, 2] = sgm plt.plot(wc[::, 0][251:], wc[::, 1][251:], 'k-', linewidth=2) plt.plot(wc[::, 0][251:], wc[::, 1][251:] + 1.665 * wc[::, 2][251:], 'k--', linewidth=2) plt.plot(wc[::, 0][251:], wc[::, 1][251:] - 1.665 * wc[::, 2][251:], 'k--', linewidth=2) # plt.plot(wcx, wc2, 'k--', linewidth=3)
wc_ave_org[cn] = pickle.load(f) # all wake information of the case f.close() wc_ave[cn] = {} for i in range(2,13): wc_ave[cn][prbs[i-2]] = wc_ave_org[cn][i*126-1,1] # 根据具体情况调整 wcb[cn] = {} for prb in prbs: wcb[cn][prb] = np.zeros((tNum[cn],3)) wcb[cn][prb][:,0] = np.linspace(float(timeList[cn][0]), float(timeList[cn][-1]), tNum[cn]) for i in range(tNum[cn]): # prbData_ft[cn][prb].shape[0] vd = 1 - prbData_ft[cn][prb][i,:]/11.4 vd[where(vd<0)] = 0 # 拟合之前先要尽量排除尾流外的大气结构的影响! # fitting miu, sgm = ft.fit_gs((0,30),p[7:45],vd[7:45]) wcb[cn][prb][i,1] = miu - wc_ave[cn][prb] wcb[cn][prb][i,2] = sgm ''' save wcb into a file with pickle ''' import pickle f = open(projDir + 'postProcessing_all/data.processed/' + case[cn] + '_wcb.nz', 'wb') pickle.dump(wcb[cn], f) f.close() # # 读取 wcb # f = open(projDir + 'postProcessing_all/data.processed/' + case[cn] + '_wcb.nz', 'rb') # wcb[cn] = pickle.load(f) # all wake information of the case # f.close() ''' meandering幅度均方根分布 ny '''