def gammag(lK, Rg, beta, delta, omegat): alpha = 0.5 * np.pi - beta cb = np.cos(beta) sb = np.sin(beta) cot = np.cos(np.radians(omegat)) sot = np.sin(np.radians(omegat)) cotd = np.cos(np.radians(omegat) + delta) sotd = np.sin(np.radians(omegat) + delta) ltx = np.cos(alpha) * cotd + cb * lK - cot * Rg lty = sotd - sot * Rg ltz = -np.sin(alpha) * cotd + sb * lK Rwx = cot * Rg Rwy = sot * Rg Rwz = 0 lt = np.sqrt(ltx * ltx + lty * lty + ltz * ltz) return np.degrees(np.arccos((Rwx * lty - Rwy * ltx) / (lt * Rg)))
def gammak2(lK, Rg, beta, delta, omegat): alpha = 0.5 * np.pi - beta cb = np.cos(beta) sb = np.sin(beta) cot = np.cos(np.radians(omegat)) sot = np.sin(np.radians(omegat)) cotd = np.cos(np.radians(omegat) + delta) sotd = np.sin(np.radians(omegat) + delta) cotdt = np.cos(np.radians(omegat + 90) + delta) sotdt = np.sin(np.radians(omegat + 90) + delta) ltx = np.cos(alpha) * cotd + cb * lK - cot * Rg lty = sotd - sot * Rg ltz = -np.sin(alpha) * cotd + sb * lK eyrx = np.cos(alpha) * cotdt eyry = sotdt eyrz = -np.sin(alpha) * cotdt lt = np.sqrt(ltx * ltx + lty * lty + ltz * ltz) return np.degrees(np.arccos((eyrx * ltx + eyry * lty + eyrz * ltz) / lt))
def gammak(lK, Rg, beta, delta, omegat): alpha = 0.5 * np.pi - beta cb = np.cos(beta) sb = np.sin(beta) ca = np.cos(alpha) sa = np.sin(alpha) cot = np.cos(np.radians(omegat)) sot = np.sin(np.radians(omegat)) cotd = np.cos(np.radians(omegat) + delta) sotd = np.sin(np.radians(omegat) + delta) Rax = ca * cotd Ray = sotd Raz = -sa * cotd ltx = Rax + cb * lK - cot * Rg lty = Ray - sot * Rg ltz = Raz + sb * lK lt = np.sqrt(ltx * ltx + lty * lty + ltz * ltz) return np.degrees( np.arccos((sa * (Ray * ltz - Raz * lty) + ca * (Rax * lty - Ray * ltx)) / lt))
vMarzmean = np.vectorize(Marzmean) vMarzmean0 = np.vectorize(Marzmean0) f, (ax1, ax2) = plt.subplots(1, 2) alpha = np.radians(60) # 90 - beta | 62.3608549873 betas = np.radians(0) # 4.38381787735 lK = 2 Rg = 1 N = 4 delta = np.arange(0, 181, 1) beta = np.radians(30) a, b, Ma, Mg = vMarzmean(lK, Rg, alpha, betas, beta, np.radians(delta)) ax1.plot(delta, np.degrees(a), 'r', label=r"\$\alpha\$") ax1.plot(delta, np.degrees(b), 'b', label=r"\$\betas\$") ax2.plot(delta, Ma, 'r', label=r"\$\Mamean/(\Rk\Fakz)\$") #ax2.plot(delta, vMarzmean0(lK, Rg, alpha, betas, beta, np.radians(delta)), 'b--') beta = np.radians(45) a, b, Ma, Mg = vMarzmean(lK, Rg, alpha, betas, beta, np.radians(delta)) ax1.plot(delta, np.degrees(a), 'r') ax1.plot(delta, np.degrees(b), 'b--') ax2.plot(delta, Ma, 'r') #ax2.plot(delta, vMarzmean0(lK, Rg, alpha, betas, beta, np.radians(delta)), 'b--') beta = np.radians(60) a, b, Ma, Mg = vMarzmean(lK, Rg, alpha, betas, beta, np.radians(delta)) ax1.plot(delta, np.degrees(a), 'r') ax1.plot(delta, np.degrees(b), 'b--')
marker='o', s=80, linewidth=1.2, edgecolor='k', facecolor='w') plt.xlim(1.0, 5.0) plt.ylim(0.0, 3.0) plt.xticks(np.arange(1.0, 5.01, 1.0)) plt.yticks(np.arange(0.0, 3.01, 1.0)) minorLocator = MultipleLocator(0.5) ax.xaxis.set_minor_locator(minorLocator) ax.yaxis.set_minor_locator(minorLocator) plt.xlabel(r"Relative distance between rotor centers \$\lK/\Rk\, [-]\$", labelpad=10) plt.ylabel(r"Rotor size ratio \$\Rg/\Rk\, [-]\$", labelpad=10) # Test to compare with Fig. 17 a, Ma, f = vMarzmean(5.0, 1.25, alpha, betas, beta, delta) print "Ma = ", Ma, " alpha = ", np.degrees(a), " betas = ", np.degrees( betas), "Rko/Rk = ", lK * np.sin(beta) / np.sin(a) # Save as SVG file plt.subplots_adjust(left=0.07, bottom=None, right=0.93, top=None, wspace=None, hspace=None) plt.savefig("fig18_diagram.svg") plt.show()
vMarzmean = np.vectorize(Marzmean) f, (ax1, ax2) = plt.subplots(1, 2) alpha = np.radians(60) betas = np.radians(0) beta = np.radians(30) delta = np.radians(45) #lK = 1./np.tan(beta) lK = 2.6 Rg = np.arange(2.6, 3.0, 0.01) N = 4 a, b, Ma, Mg, Ftau = vMarzmean(lK, Rg, alpha, betas, beta, delta) Mam = np.ma.masked_where(Ftau > 10., Ma) ax1.plot(Rg, np.degrees(a), 'r') ax1.plot(Rg, np.degrees(b), 'b') ax1.plot([0.0, 3.0], [60.0, 60.0], 'k', label="positive ground clearance") ax2.plot(Rg, Mam, 'r') ax2.plot(Rg, Ftau, 'g') print "lK = ", lK, " Rg = ", Rg[np.argmax(Ftau > 10.) - 1], " Mam = ", Mam[np.argmax(Ftau > 10.) - 1] ax1.set_xlim(0.0, 3.0) ax1.set_ylim(0.0, 90.0) ax2.set_xlim(0.0, 3.0) ax2.set_ylim(0.0, 2.0) ax2.yaxis.tick_right() ax2.yaxis.set_ticks_position('both')
return fmin(fopt(Ftrminmax, lK, Rg, alpha, betas, beta, delta, omegat, pos), guess, xtol=0.00001, ftol=0.00001, maxiter=100) f, (ax1, ax2) = plt.subplots(1, 2) beta = np.radians(30) alpha = np.radians(60) # 90 - beta | 62.3608549873 betas = np.radians(0) # 4.38381787735 delta = np.radians(30) # 30 lK = 2 Rg = 1 N = 4 pos = np.array([ 0, 0.5*np.pi, np.pi, 1.5*np.pi ]) omegat = np.arange(0, 360, 1) a, b = orientation(lK, Rg, alpha, betas, beta, delta, omegat, pos) print "alpha = ", np.degrees(a), " betas = ",np.degrees(b) alpha = a betas = b ax1.plot(omegat, Ftrxsum(lK, Rg, alpha, betas, beta, delta, omegat, pos), 'r', label=r"\$\Fakx/\Fakz\$") ax1.plot(omegat, Ftrysum(lK, Rg, alpha, betas, beta, delta, omegat, pos), 'b', label=r"\$\Faky/\Fakz\$") ax1.plot(omegat, Marxsum(lK, Rg, alpha, betas, beta, delta, omegat, pos), 'k') ax1.plot(omegat, Marysum(lK, Rg, alpha, betas, beta, delta, omegat, pos), 'r--') ax1.set_xlim(0,360) ax1.set_ylim(-0.01,0.01) ax1.set_xticks(np.arange(0,361,90)) #ax1.set_yticks(np.arange(-1,1.1,0.5)) ax2.plot(omegat, Marzsum(lK, Rg, alpha, betas, beta, delta, omegat, pos), 'r', label=r"\$\Ma/(\Rk\Fakz)\$") ax2.plot(omegat, Mgrzsum(lK, Rg, alpha, betas, beta, delta, omegat, pos), 'b', label=r"\$\Mgz/(\Rk\Fakz)\$")
omegat = np.arange(0, 360, 1) return np.amax(lt(lK, Rg, beta, delta, omegat)) vltfreemin = np.vectorize(ltfreemin) vltfreemax = np.vectorize(ltfreemax) vltmin = np.vectorize(ltmin) vltmax = np.vectorize(ltmax) f, (ax1, ax2) = plt.subplots(1, 2) lK = 2 Rg = 1 beta = np.radians(np.arange(0, 91, 1)) delta = np.radians(0) ax1.plot(np.degrees(beta), vltmax(lK, Rg, beta, delta), 'r') ax1.plot(np.degrees(beta), vltmin(lK, Rg, beta, delta), 'b') #print 'ltmin & ltmax ', ltmin(lK, Rg, np.radians(30), delta), ltmax(lK, Rg, np.radians(30), delta) delta = np.radians(30) ax1.plot(np.degrees(beta), vltmax(lK, Rg, beta, delta), 'r') ax1.plot(np.degrees(beta), vltmin(lK, Rg, beta, delta), 'b') delta = np.radians(60) ax1.plot(np.degrees(beta), vltmax(lK, Rg, beta, delta), 'r') ax1.plot(np.degrees(beta), vltmin(lK, Rg, beta, delta), 'b') delta = np.radians(90) ax1.plot(np.degrees(beta), vltmax(lK, Rg, beta, delta), 'r') ax1.plot(np.degrees(beta), vltmin(lK, Rg, beta, delta), 'b') delta = np.radians(120) #ax1.plot(np.degrees(beta), vltmax(lK, Rg, beta, delta), 'r') #ax1.plot(np.degrees(beta), vltmin(lK, Rg, beta, delta), 'b') delta = np.radians(150)
CM = 2 * Ma / (rho * Rko * S * vw * vw) Cp = lam * CM aeff = np.arccos(cb * ca) Ftrxam = Ftrxminmax(lKRk, RgRk, alpha, betas, beta, delta) Ftryam = Ftryminmax(lKRk, RgRk, alpha, betas, beta, delta) h = np.sin(beta) * lK - sa * Rko print "Pnom : ", Pnom print "lK/Rk : ", lKRk print "Rg/Rk : ", RgRk print "vtip : ", vtip print "lambda: ", lam print "Ma : ", Ma print "S : ", S print "alpha : ", np.degrees(alpha) print "betas : ", np.degrees(betas) print "MaRF : ", MaRF print "Fakz : ", Fakz print "Ftiz : ", Fakz / N print "test : ", Ma / (Rk * Fakz) print "L : ", L print "D : ", D print "LoD : ", LoD print "CL : ", CL print "CD : ", CD print "CM : ", CM print "Cp : ", Cp print "aeff : ", np.degrees(aeff) print "Ftrx : ", Ftrxam print "Ftry : ", Ftryam
# vector base rotating reference frame e = le * eb(ot0) ebx = e[:, 0] ax.plot([0, ebx[0]], [0, ebx[1]], [0, ebx[2]], linewidth=3, color='b') eby = e[:, 1] ax.plot([0, eby[0]], [0, eby[1]], [0, eby[2]], linewidth=3, color='b') ebz = e[:, 2] #ax.plot([0, ebz[0]], [0, ebz[1]], [0, ebz[2]], linewidth=2, color='b') # elevation angle r0 = np.array([0, 0, 0]) R = 32 e = ewx n = -ewy r = arc(r0, R, e, n, np.degrees(beta), omegat) ax.plot(r[0, :], r[1, :], r[2, :], zorder=20, linewidth=2, color='r') # rotor spinning R = 20 e = ewx n = ewz r = arc(r0, R, e, n, ot0, omegat) ax.plot(r[0, :], r[1, :], r[2, :], zorder=20, linewidth=2, color='r') # Flying rotor r = rA(lK, Rk, alpha, betas, beta, delta, omegat) ax.plot(r[0], r[1], r[2], zorder=-10, linewidth=1.2, color='#00ff00') r = rA(lK, Rk, alpha, betas, beta, delta, ot0 + ot[0]) ax.scatter(r[0], r[1],