def md_voldep(cutoff, wo_fit, vrange): """ md 計算の体積依存性を plot する """ path = "voldep/*/OSZICAR" dir_list = [os.path.dirname(x) for x in glob.glob(path)] average = [] sb_dark = seaborn.dark_palette("skyblue", 10, reverse=True) # sb_dark = seaborn.dark_palette("seagreen", 10, reverse=True) # sb_dark = seaborn.dark_palette("purple", 10, reverse=True) seaborn.set(palette=sb_dark) fig, axes = pylab.subplots(2, 1, figsize=(5, 10)) for dirc in dir_list: with open(os.path.join(dirc, 'OUTCAR')) as wfile: lines = wfile.readlines() meta = re.compile(r".*external pressure = \s*(.*)\s+kB.+") pressure = [] for line in lines: match = meta.match(line) if match: pressure.append(float(match.group(1))) with open(os.path.join(dirc, 'OSZICAR')) as wfile: lines = wfile.readlines() meta = re.compile(r".+T=\s*(.*)\s+E=\s*(.*)\s+F=.+") energy = [] for line in lines: match = meta.match(line) if match: energy.append(float(match.group(2))) data = [{'energy':e, 'pressure':p} for e, p in zip(energy, pressure)] dbox = DataBox(data) volume = float(dirc.split('_')[1]) press_ave = dbox['pressure'][cutoff:].mean() energy_ave = dbox['energy'][cutoff:].mean() average.append({'volume':volume, 'p': press_ave, 'e': energy_ave}) label = "V={0:.0f}".format(float(dirc.split("_")[-1])) seaborn.distplot(dbox['pressure'][cutoff:], label=label, ax=axes[0]) axes[0].legend(loc='upper left') axes[0].set_ylabel("Frequency") axes[0].set_xlabel("Pressuer (kbar)") average_data = DataBox(average) average_data.sorted('volume') if vrange != (0, 0): average_data = average_data.trim_data_within_range('volume', vrange) axes[1].plot(average_data['volume'], average_data['p'], 'p', color=sb_dark[-1]) axes[1].set_ylabel(r"Pressuer (kbar)") axes[1].set_xlabel(r"Volume ($\AA^3$)") fig.subplots_adjust(left=0.20) if not wo_fit: xi, yi = FitData.Stineman_interp_fit(average_data['volume'], average_data['p']) axes[1].plot(xi, yi) idx = np.abs(yi).argmin() print("v0: {0}, p0: {1}".format(xi[idx], yi[idx])) print("v0**(1/3): {0}".format(xi[idx]**(1/3))) axes[1].plot(xi[idx], yi[idx], 'o') pylab.savefig("pressure.eps")