import pandas import matplotlib.pyplot as plt import seaborn as sns import numpy as np import scipy.signal as sig def coeff(force, rho=1, u=1, D=1, zspan=0.2): S = np.pi * D * zspan # surface area return 2 * force / (rho * u**2 * S) def shedding_period(df): sample = df[df["Time"] > 70] # once the initial transient has passed peaks, _ = sig.find_peaks(sample["ForceY"]) period = np.diff(sample["Time"].iloc[peaks]) return period.mean() df = pandas.read_csv("force.csv") df["Drag Coefficient"] = coeff(df["ForceX"]) df["Lift Coefficient"] = coeff(df["ForceY"]) period = shedding_period(df) sns.set_theme(style="ticks") palette = sns.color_palette() fig, ax_drag = plt.subplots() ax_lift = ax_drag.twinx() sns.lineplot(data=df, x="Time", y="Drag Coefficient", ax=ax_drag, color=palette[0]) sns.lineplot(data=df, x="Time", y="Lift Coefficient", ax=ax_lift, color=palette[1]) ax_drag.set_title(f"Shedding period {period}") ax_drag.set_ylim(0.41, 0.48) ax_drag.tick_params(axis="y", colors=palette[0]) ax_drag.yaxis.label.set_color(palette[0]) ax_lift.tick_params(axis="y", colors=palette[1]) ax_lift.yaxis.label.set_color(palette[1]) # plt.savefig("vortexshedding.svg") plt.show()