xref: /libCEED/examples/fluids/postprocess/vortexshedding.py (revision 25878d731ec1d76dfcb265836bbb0ff82e7138ef)
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