Пример #1
0
''' 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,
Пример #4
0
    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)
Пример #6
0
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 '''