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