1ca69d878SAdeleke O. Bankoleimport pandas 2ca69d878SAdeleke O. Bankoleimport matplotlib.pyplot as plt 3ca69d878SAdeleke O. Bankoleimport seaborn as sns 4ca69d878SAdeleke O. Bankoleimport numpy as np 5ca69d878SAdeleke O. Bankoleimport scipy.signal as sig 6ca69d878SAdeleke O. Bankole 7ca69d878SAdeleke O. Bankole 8ca69d878SAdeleke O. Bankoledef coeff(force, rho=1, u=1, D=1, zspan=0.2): 9ca69d878SAdeleke O. Bankole S = np.pi * D * zspan # surface area 10ca69d878SAdeleke O. Bankole return 2 * force / (rho * u**2 * S) 11ca69d878SAdeleke O. Bankole 12ca69d878SAdeleke O. Bankole 13ca69d878SAdeleke O. Bankoledef shedding_period(df): 14ca69d878SAdeleke O. Bankole sample = df[df["Time"] > 70] # once the initial transient has passed 15ca69d878SAdeleke O. Bankole peaks, _ = sig.find_peaks(sample["ForceY"]) 16ca69d878SAdeleke O. Bankole period = np.diff(sample["Time"].iloc[peaks]) 17ca69d878SAdeleke O. Bankole return period.mean() 18ca69d878SAdeleke O. Bankole 19ca69d878SAdeleke O. Bankole 20ca69d878SAdeleke O. Bankoledf = pandas.read_csv("force.csv") 21ca69d878SAdeleke O. Bankoledf["Drag Coefficient"] = coeff(df["ForceX"]) 22ca69d878SAdeleke O. Bankoledf["Lift Coefficient"] = coeff(df["ForceY"]) 23ca69d878SAdeleke O. Bankoleperiod = shedding_period(df) 24ca69d878SAdeleke O. Bankole 25ca69d878SAdeleke O. Bankolesns.set_theme(style="ticks") 26ca69d878SAdeleke O. Bankolepalette = sns.color_palette() 27ca69d878SAdeleke O. Bankolefig, ax_drag = plt.subplots() 28ca69d878SAdeleke O. Bankoleax_lift = ax_drag.twinx() 29ca69d878SAdeleke O. Bankole 30*5cd6c1fbSSebastian Grimbergsns.lineplot( 31*5cd6c1fbSSebastian Grimberg data=df, 32*5cd6c1fbSSebastian Grimberg x="Time", 33*5cd6c1fbSSebastian Grimberg y="Drag Coefficient", 34*5cd6c1fbSSebastian Grimberg ax=ax_drag, 35*5cd6c1fbSSebastian Grimberg color=palette[0]) 36*5cd6c1fbSSebastian Grimbergsns.lineplot( 37*5cd6c1fbSSebastian Grimberg data=df, 38*5cd6c1fbSSebastian Grimberg x="Time", 39*5cd6c1fbSSebastian Grimberg y="Lift Coefficient", 40*5cd6c1fbSSebastian Grimberg ax=ax_lift, 41*5cd6c1fbSSebastian Grimberg color=palette[1]) 42ca69d878SAdeleke O. Bankoleax_drag.set_title(f"Shedding period {period}") 43d6734f85SAdeleke O. Bankoleax_drag.set_ylim(0.41, 0.49) 44ca69d878SAdeleke O. Bankoleax_drag.tick_params(axis="y", colors=palette[0]) 45ca69d878SAdeleke O. Bankoleax_drag.yaxis.label.set_color(palette[0]) 46ca69d878SAdeleke O. Bankoleax_lift.tick_params(axis="y", colors=palette[1]) 47ca69d878SAdeleke O. Bankoleax_lift.yaxis.label.set_color(palette[1]) 48ca69d878SAdeleke O. Bankole 49ca69d878SAdeleke O. Bankole# plt.savefig("vortexshedding.svg") 50ca69d878SAdeleke O. Bankoleplt.show() 51