xref: /libCEED/examples/fluids/postprocess/vortexshedding.py (revision d6734f858a228bb0b062034d4973ed793798943c)
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
30ca69d878SAdeleke O. Bankolesns.lineplot(data=df, x="Time", y="Drag Coefficient", ax=ax_drag, color=palette[0])
31ca69d878SAdeleke O. Bankolesns.lineplot(data=df, x="Time", y="Lift Coefficient", ax=ax_lift, color=palette[1])
32ca69d878SAdeleke O. Bankoleax_drag.set_title(f"Shedding period {period}")
33*d6734f85SAdeleke O. Bankoleax_drag.set_ylim(0.41, 0.49)
34ca69d878SAdeleke O. Bankoleax_drag.tick_params(axis="y", colors=palette[0])
35ca69d878SAdeleke O. Bankoleax_drag.yaxis.label.set_color(palette[0])
36ca69d878SAdeleke O. Bankoleax_lift.tick_params(axis="y", colors=palette[1])
37ca69d878SAdeleke O. Bankoleax_lift.yaxis.label.set_color(palette[1])
38ca69d878SAdeleke O. Bankole
39ca69d878SAdeleke O. Bankole# plt.savefig("vortexshedding.svg")
40ca69d878SAdeleke O. Bankoleplt.show()
41