"""Original four-digit thickness calculation; writes opaque PNG to cwd.""" from pathlib import Path import numpy as np import matplotlib.pyplot as plt def half_thickness(x, eta=.12, rear=.1015): return 5 * eta * (.2969*np.sqrt(x) - .1260*x - .3516*x*x + .2843*x**3 - rear*x**4) def main(): np.testing.assert_allclose(2*half_thickness(1.), .00252, atol=1e-14) np.testing.assert_allclose(half_thickness(1., rear=.1036), 0, atol=1e-14) assert np.isclose(1.1019 * .12**2 * .2 * 1000, 3.173472) assert np.isclose(2 * half_thickness(1.) * .2 * 1000, .504) x = (1-np.cos(np.linspace(0, np.pi, 1001)))/2 fig, axes = plt.subplots(1, 2, figsize=(10, 3.6), dpi=100, facecolor='white', gridspec_kw={'width_ratios':[1.35, 1]}) for ax in axes: y = half_thickness(x) ax.fill_between(x, -y, y, color='#deedf7') for sign in (-1, 1): ax.plot(x, sign*y, color='#2475ad', label='Finite trailing edge' if sign==1 else None) ax.plot(x, sign*half_thickness(x, rear=.1036), color='#da812a', ls='--', label='Closed-edge variant' if sign==1 else None) ax.axhline(0, color='#777777', lw=.7) ax.set(xlabel='Chordwise coordinate x/c', ylabel='Surface height y/c') ax.grid(alpha=.2) axes[0].set(xlim=(-.03, 1.03), ylim=(-.1,.12), title='Full symmetric profile (thickness ratio 0.12)') axes[0].annotate('Leading edge', xy=(0,0), xytext=(.1,.09), arrowprops=dict(arrowstyle='->'), fontsize=10) axes[0].annotate('Trailing edge', xy=(1,0), xytext=(.66,.09), arrowprops=dict(arrowstyle='->'), fontsize=10) axes[0].set_aspect('equal', adjustable='box') handles, labels = axes[0].get_legend_handles_labels() fig.legend(handles, labels, loc='lower center', ncol=2, fontsize=9) axes[1].set(xlim=(.96,1.006), ylim=(-.007,.007), title='Rear detail: terminal gap = 0.00252 c') axes[1].annotate('', xy=(1,.00126), xytext=(1,-.00126), arrowprops=dict(arrowstyle='<->', color='#a33232')) fig.tight_layout(rect=(0, .10, 1, 1)) fig.savefig(Path.cwd()/(Path(__file__).stem+'.png'),facecolor='white') plt.close(fig) if __name__=='__main__': main()