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