59 lines
2.3 KiB
Python
Executable File
59 lines
2.3 KiB
Python
Executable File
import glob
|
|
|
|
import matplotlib.pyplot as plt
|
|
import pandas as pd
|
|
import numpy as np
|
|
|
|
|
|
def make_figure(length_index, length, forces, integrators, computes):
|
|
fig, axs = plt.subplots(nrows=len(forces), ncols=len(computes), figsize=(40, 24))
|
|
fig.suptitle(length, fontsize=30)
|
|
for index_compute, compute in enumerate(computes):
|
|
for index_forces, force in enumerate(forces):
|
|
print("Reading file")
|
|
legend = []
|
|
plt.sca(axs[index_forces][index_compute])
|
|
for index_integrator, integrator in enumerate(integrators):
|
|
for filename in glob.glob(f'data/out/*{force}*{integrator}*L{length_index}*_{compute}.dat'):
|
|
file = pd.read_csv(filename, delimiter=',')
|
|
file.dropna("columns")
|
|
ax = plt.plot(file["time"], file["val"])
|
|
#ax.fill_between(file["time"], y1=file["val"] - file["std"], y2=file["val"] + file["std"], alpha=.5)
|
|
plt.ylabel(compute)
|
|
legend.append(integrator)
|
|
|
|
if index_integrator == 0 and not np.any(file["target"].isnull()):
|
|
plt.plot(file["time"], file["target"])
|
|
legend.append("analytisch")
|
|
|
|
plt.legend(title='iterators', labels=legend)
|
|
for ax1 in axs:
|
|
for ax in ax1:
|
|
ax.axvline(1.0)
|
|
pad = 5 # in points
|
|
|
|
for ax, col in zip(axs[0], computes):
|
|
ax.annotate(col, xy=(0.5, 1), xytext=(0, pad),
|
|
xycoords='axes fraction', textcoords='offset points',
|
|
size='large', ha='center', va='baseline', fontsize=25)
|
|
|
|
for ax, row in zip(axs[:, 0], forces):
|
|
ax.annotate(row, xy=(0, 0.5), xytext=(-ax.yaxis.labelpad - pad, 0),
|
|
xycoords=ax.yaxis.label, textcoords='offset points',
|
|
size='large', ha='right', va='center', fontsize=25)
|
|
|
|
fig.tight_layout()
|
|
fig.savefig(f"fig{length_index}.png")
|
|
plt.show()
|
|
|
|
def main():
|
|
forces = ["harmonic"]
|
|
integrators = ["Euler", "Heun", "Exact", "BDAS", "MBD"]
|
|
computes = ["msd", "oaf", "empxx", "empyy", "x", "x_squared"]
|
|
for l_i, l in enumerate(["sphere"]): #["sphere", "L = 1.5", "L = 2.0"]
|
|
make_figure(length=l, length_index=l_i, forces=forces, computes=computes, integrators=integrators)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|