77 lines
2.1 KiB
Python
77 lines
2.1 KiB
Python
import argparse, numpy as np, os, math
|
|
import matplotlib.pyplot as plt
|
|
from multiprocessing import Pool, cpu_count
|
|
|
|
from squish import Simulation, ordered
|
|
from squish.common import OUTPUT_DIR
|
|
from script_tools import RC_SETTINGS
|
|
|
|
NAME = "DefectScatter"
|
|
|
|
|
|
def main():
|
|
parser = argparse.ArgumentParser(description="Graphs scatter of VEE and defects.")
|
|
parser.add_argument(
|
|
"sims_path", metavar="sim_dir", help="simulation to make scatter plot of"
|
|
)
|
|
|
|
args = parser.parse_args()
|
|
|
|
sim, frames = Simulation.load(args.sims_path)
|
|
defects, energy = [], []
|
|
e_hex = ordered.e_hex(sim.domain)
|
|
for frame in frames:
|
|
defects.append(np.count_nonzero(frame["stats"]["site_edge_count"] != 6))
|
|
energy.append(frame["energy"] / sim.domain.n - e_hex)
|
|
|
|
defects = np.array(defects)
|
|
energy = 100 * np.array(energy)
|
|
|
|
counts = {}
|
|
for i in range(70):
|
|
counts[i] = np.count_nonzero(defects == i)
|
|
print(counts)
|
|
for k, v in counts.items():
|
|
if k % 2 == 1 and v > 0:
|
|
print(k, v)
|
|
|
|
plt.rcParams.update(RC_SETTINGS)
|
|
fig = plt.figure(figsize=(15, 15))
|
|
gs = fig.add_gridspec(1, 1)
|
|
ax = fig.add_subplot(gs[0])
|
|
|
|
m, b = np.polyfit(defects, energy, 1)
|
|
ax.scatter(defects, energy, color="C0", marker="*", s=70, zorder=2)
|
|
ax.plot(np.arange(0, 65), np.arange(0, 65) * m + b, zorder=3, color="C1")
|
|
|
|
ax.scatter(0, b, color="C2", s=500, marker="*", zorder=50)
|
|
|
|
ax.annotate(
|
|
r"$\zeta_0$",
|
|
xy=(0, b),
|
|
xytext=(10, -50),
|
|
textcoords="offset points",
|
|
# arrowprops={"arrowstyle": "->", "color": "black"},
|
|
)
|
|
|
|
ax.set_xlim(0, 64)
|
|
ax.set_xticks(np.arange(0, 65, 8))
|
|
|
|
ax.set_ylim(0, 3.7)
|
|
ax.set_yticks(np.arange(0, 3.6, 0.5))
|
|
|
|
ax.set_xlabel("$\mathrm{D}$")
|
|
ax.set_ylabel(r"VEE $\left[\times 10^{2}\right]$")
|
|
ax.grid(zorder=0)
|
|
|
|
fig.savefig(OUTPUT_DIR / (NAME + ".png"))
|
|
print(f"Wrote to {OUTPUT_DIR / (NAME + '.png')}")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
os.environ["QT_log10GING_RULES"] = "*=false"
|
|
try:
|
|
main()
|
|
except KeyboardInterrupt:
|
|
print("Program terminated by user.")
|