Exemple #1
0
def plot_system_temperature(dir):
    items = os.listdir(dir)
    log_files = []
    for name in items:
        if name[:13] == "log.boundary_":
            log_files.append(name)

    log_files = sorted(log_files)
    n_files = len(log_files)

    for file in log_files:
        with open(dir + file, "r") as infile:
            contents = infile.readlines()
            i = 0
            while i < len(contents):
                if "on 4 procs for 5000 steps with" in contents[i]:
                    words = contents[i].split(" ")
                    n_atoms = int(words[-2])
                    break
                i += 1

        log = lammps_logfile.File(dir + file)
        time = log.get("v_time")
        Ek = log.get("KinEng")
        T = log.get("Temp")
        std = np.std(T[int(1 / 5 * len(T)):])
        plt.plot(time,
                 T,
                 label=rf'# of atoms: {n_atoms}. $\sigma_T = {std:.4f}$')

    plt.legend()
    plt.xlabel(r"Time $[\tau]$")
    plt.ylabel(r"Temperature $[Tk_b/\epsilon]$")
    plt.show()
Exemple #2
0
def plot_pressure(dir):
    dir_files = os.listdir(dir)
    log_files = []
    for file in dir_files:
        if file[:6] == "log.T_":
            log_files.append(file)

    n_files = len(log_files)
    mean_temp = np.zeros(n_files)
    mean_press = np.zeros(n_files)

    for i, filename in enumerate(log_files):
        log = lammps_logfile.File(dir + filename)
        temp = log.get("Temp")
        press = log.get("Press")
        equil = int(len(temp) * 0.5)
        mean_temp[i] = np.mean(temp[equil:-1])
        mean_press[i] = np.mean(press[equil:-1])

    idx = np.argsort(mean_temp)

    plt.plot(mean_temp[idx], mean_press[idx], label='Simulation results')
    plt.plot(mean_temp[idx],
             idea_gas_law(mean_temp[idx]),
             label='Ideal gas law')
    plt.ylabel(r"Pressure $[P\sigma^3 / \epsilon]$")
    plt.xlabel(r"Temperature $[ Tk_b/\epsilon]$")
    plt.legend()
    plt.show()
Exemple #3
0
def plot_radial_distribution(dir,
                             n_time_steps=5000,
                             step_window=100,
                             n_bins=50,
                             n_info_lines=3):

    dir_files = os.listdir(dir)
    log_files = []

    for file in dir_files:
        if file[:7] == "log.rdf":
            log_files.append(file)

    # log_files = np.sort(log_files)
    log_files = natsort.natsorted(log_files)

    print(log_files)

    # T_init_vals = list(range(20, 300, 20))

    for i, file in enumerate(log_files):
        # T_init = float(file[10:])
        T = int(file[10:])
        # T = T_init_vals[i]
        log = lammps_logfile.File(dir + f"log.rdf_T_{T}")
        # T = log.get("Temp")
        # idx = len(T) / 2
        bins, radials = read_rdf_dump(dir, file)
        # T_mean = np.mean(T)
        plt.plot(bins, radials / radials[-1], label=f"T={T:d}")

    plt.legend(loc=1)
    plt.xlabel(r"$r$")
    plt.ylabel(r"$g(r)$")
    plt.show()
Exemple #4
0
def plot_radial_distribution(dir,
                             n_time_steps = 5000,
                             step_window = 100,
                             n_bins = 50,
                             n_info_lines = 3):

    dir_files = os.listdir(dir)
    log_files = []

    for file in dir_files:
        if file[:7] == "tmp.rdf":
            log_files.append(file)


    log_files = np.sort(log_files)
    # print(log_files)

    T_init_vals = [0.1, 1, 5]
    print(T_init_vals)

    for i, file in enumerate(log_files):
        T_init = float(file[10:])
        log = lammps_logfile.File(dir + f"log.rdf_T_{T_init_vals[i]}")
        T = log.get("Temp")
        idx = len(T) / 2
        bins, radials = read_rdf_dump(dir, file)
        T_mean = np.mean(T)
        plt.plot(bins, radials/radials[-1], label=f"T={T_mean:.2f}")

    plt.legend()
    plt.xlabel(r"$r$")
    plt.ylabel(r"$g(r)$")
    plt.show()
Exemple #5
0
def plot_thermostat(dir):


    log_be = lammps_logfile.File(dir + "log.berendsen")
    log_nh = lammps_logfile.File(dir + "log.nosehoover")

    T_be = log_be.get("Temp")
    T_nh = log_nh.get("Temp")
    t = np.linspace(0, len(T_be)*0.005, len(T_be))

    plt.plot(t, T_be, label='Berendsen')
    plt.plot(t, T_nh, label='Nosé-Hoover')
    plt.xlabel(r"t")
    plt.ylabel(r"T")
    plt.legend()
    plt.show()
Exemple #6
0
def plotTemp(dir, filename):

    log = lammps_logfile.File(dir + filename)
    time = log.get("v_time", run_num=2)
    temp = log.get("c_moving_temp", run_num=2)

    plt.plot(time, temp)
    plt.xlabel(r"$t/\tau$")
    plt.ylabel(r"$T/T_0$")
    plt.show()
Exemple #7
0
    def update_timings(self, t0):
        t1 = time.time()
        self.elapsed_time = t1 - t0

        try:
            log = lammps_logfile.File(
                os.path.join(self.path, self.outfile_name))
            remaining_time = log.get('CPULeft', run_num=-1)
        except:
            remaining_time = None
        if remaining_time is None:
            self.remaining_time = 0.0
        else:
            self.remaining_time = round(remaining_time[-1])
Exemple #8
0
def diffusion(dir, filename):
    log = lammps_logfile.File(dir + filename)
    dt = 0.005
    time = np.array(log.get("v_time", run_num=2))
    msd = np.array(log.get("c_my_msd[4]", run_num=2))
    timeFinal = time[-1]

    coeff = np.polyfit(time, msd, deg=1)[0]
    D = coeff / (6 * timeFinal)
    print(f"Estimated diffusion coefficient: D={D:.3f}")

    plt.plot(time, msd)
    plt.xlabel(r"$t$")
    plt.ylabel(r"$\langle r^2(t) \rangle $")
    plt.show()
Exemple #9
0
def plot_diffusion(dir):

    dir_files = os.listdir(dir)

    log_files = []

    for file in dir_files:
        if file[:7] == "log.msd":
            log_files.append(file)

    msd_vals = []
    T_vals = []
    dt = 1.0

    log_files = natsort.natsorted(log_files)

    for i, filename in enumerate(log_files):
        log = lammps_logfile.File(dir + filename)
        msd = log.get("c_msd[4]", run_num=0)
        # print(msd)
        msd_vals.append(msd)
        T_vals.append(str(filename[10:]))

    t_vals = np.linspace(0, len(msd_vals[0]) * 10, len(msd_vals[0]))

    for i in range(len(log_files)):
        plt.plot(t_vals, msd_vals[i], label=f'T={T_vals[i]}')

    plt.xlabel(r"$t$ [fs]")
    plt.ylabel(r"$\langle r^2(t) \rangle$ [A$^2$]")
    plt.legend()
    plt.show()

    D_vals = []

    idx = 20
    for i in range(len(log_files)):
        D_vals.append(
            np.polyfit(t_vals[-idx:], msd_vals[i][-idx:], deg=1)[0] / 6)

    plt.scatter(T_vals, D_vals)
    plt.xlabel(r"$T$ [K]")
    plt.ylabel(r"$D(T)$ [A$^2$/fs]")
    plt.show()
Exemple #10
0
def plot_diffusion(dir):

    dir_files = os.listdir(dir)

    log_files = []

    for file in dir_files:
        if file[:7] == "log.msd":
            log_files.append(file)

    msd_vals = []
    T_vals = []
    dt = 0.005  # in units tau = 2.1569e3 fs

    log_files = np.sort(log_files)

    for i, filename in enumerate(log_files):
        log = lammps_logfile.File(dir + filename)
        msd = log.get("c_msd[4]")
        msd_vals.append(msd)
        T_vals.append(str(filename[10:]))

    t_vals = np.linspace(0, len(msd_vals[0]) * 100 * dt, len(msd_vals[0]))

    for i in range(len(log_files)):
        plt.plot(t_vals, msd_vals[i], label=f'T={T_vals[i]}')

    plt.xlabel(r"$t$ $[\tau]$")
    plt.ylabel(r"$\langle r^2(t) \rangle$ $[\sigma^2]$")
    plt.legend()
    plt.show()

    D_vals = []

    for i in range(len(log_files)):
        D_vals.append(np.polyfit(t_vals[-5:], msd_vals[i][-5:], deg=1)[0] / 6)

    plt.scatter(T_vals, D_vals)
    plt.xlabel(r"$T$ $[\epsilon/k_B]$")
    plt.ylabel(r"$D(T)$ $[\sigma^2/ \tau]$")
    plt.show()
Exemple #11
0
def energy_vs_dt(dir):
    items = os.listdir(dir)
    log_files = []
    for name in items:
        if name[:6] == "log.dt":
            log_files.append(name)

    log_files = sorted(log_files)
    n_files = len(log_files)

    for file in log_files:
        log = lammps_logfile.File(dir + file)
        dt = float(file[7:])
        time = log.get("v_time")
        etot = log.get("TotEng")
        plt.plot(time, etot, label=rf"$\Delta t = {dt}$")

    plt.legend()
    plt.xlabel(r"Time $[\tau]$")
    plt.ylabel(r"Energy $[\epsilon]$")
    plt.show()
Exemple #12
0
def plot_pressure_grid(dir):
    dir += "press_vs_temp_density/"
    temps = [1.0, 1.2, 1.4, 1.6, 1.8, 2.0, 2.2, 2.4, 2.6, 2.8, 3.0]
    press = [0.001, 0.005, 0.01, 0.05, 0.1, 0.5, 1.0]
    n_temps = len(temps)
    n_rhos = len(press)

    dirs = os.listdir(dir)
    dirs = sorted(dirs)

    press_grid = np.zeros((n_rhos, n_temps))

    for i, d in enumerate(dirs):
        log_files = os.listdir(dir + d)
        n_files = len(log_files)
        mean_temp = np.zeros(n_files)
        mean_press = np.zeros(n_files)
        density = float(d[3:])

        for j, filename in enumerate(log_files):
            log = lammps_logfile.File(dir + d + "/" + filename)
            temp = log.get("Temp")
            press = log.get("Press")
            equil = int(len(temp) * 7 / 10)
            mean_temp[j] = np.mean(temp[equil:-1])
            mean_press[j] = np.mean(press[equil:-1])

        idx = np.argsort(mean_temp)

        press_grid[i, :] = mean_press[idx]

        if density != 0.5 and density != 1.0:
            plt.plot(mean_temp[idx],
                     mean_press[idx],
                     label=rf'$\rho={density}$')

    plt.xlabel(r"Pressure $[P\sigma^3 / \epsilon]$")
    plt.ylabel(r"Temperature $[ Tk_b/\epsilon]$")
    plt.legend()
    plt.show()
Exemple #13
0
import os
import matplotlib.pyplot as plt

import lammps_logfile

log = lammps_logfile.File(os.path.join(os.path.dirname(__file__), "logfiles", "crack_log.lammps"))

print("Log keywords: ", log.get_keywords())

x = log.get("Time")
y = log.get("Pyy")

plt.figure(figsize=(6,6))
plt.subplot(221)
plt.plot(x, y)
plt.xlabel("$t$")
plt.ylabel("$p_{yy}$")

plt.subplot(222)
for i in range(log.get_num_partial_logs()):
    x = log.get("Time", run_num=i)
    y = log.get("Pyy", run_num=i)
    plt.plot(x, y)
    plt.xlabel("$t$")
    plt.ylabel("$p_{yy}$")

plt.subplot(223)
x = log.get("Time")
y = log.get("Temp")
plt.plot(x, y)
plt.xlabel("$t$")
Exemple #14
0
r_vec = np.zeros(n_files)
phi_vec = np.zeros(n_files)
vcm_vec = np.zeros(n_files)

for i, filename in enumerate(log_files):
    idx_k = filename.index("_r")
    idx_phi = filename.index("phi")

    r = filename[idx_k + 2:idx_k + 5]
    phi = filename[idx_phi + 3:idx_phi + 7]

    r_vec[i] = r
    phi_vec[i] = phi

    log = lammps_logfile.File(data_dir + filename)
    vcm = log.get("v_velocity_cm", run_num=0)
    if type(vcm) is np.ndarray:
        avg_vcm = np.mean(vcm)
        vcm_vec[i] = avg_vcm
    else:
        print(f"no vcm data in file {filename}")
        # exit()

sorted_idx = np.argsort(r_vec)
r_vec = r_vec[sorted_idx]
phi_vec = phi_vec[sorted_idx]
vcm_vec = vcm_vec[sorted_idx]
# print(r_vec)
# print(phi_vec)
print(vcm_vec)
Exemple #15
0
 def setUp(self):
     self.log = lammps_logfile.File(os.path.join(os.path.dirname(__file__), "data", "log.lammps"))
Exemple #16
0
def silicon_diffusion(dir):


    files_dir = os.listdir(dir)

    log_files = []
    for file in files_dir:
        if "log.T" in file:
            log_files.append(file)

    log_files = np.sort(log_files)
    # data_dict = {}
    # avg_temps = []
    msd_vals = []
    T_vals = []
    for file in log_files:
        log = lammps_logfile.File(os.path.join(dir, file))

        T = log.get("Temp")
        # size = T_temp.shape[0]
        # size_2 = size//2
        # T = T_temp[size_2:]
        t = log.get("Time")#[size_2:]
        msd = log.get("c_msd[4]")#[size_2:]



        #
        avg_temp = int(np.mean(T[int(len(T)/4):]))
        # avg_temps.append(avg_temp)
        # data_dict["T_" + str(avg_temp)] = T
        # data_dict["msd_" + str(avg_temp)] = msd

        msd_vals.append(msd)
        T_vals.append(T[0])

        # plt.plot(t, msd, label=f'T={avg_temp}')

    n_files = len(log_files)

    for i in range(n_files):
        plt.plot(t, msd_vals[i], label=f'T={T_vals[i]}')
    plt.legend()
    plt.xlabel(r"$t$")
    plt.ylabel(r"$\langle r^2(t) \rangle$")
    plt.show()
    plt.clf()


    diffusion = np.zeros(n_files)

    # plt.plot()

    #
    idx1 = int(len(t)/2)
    idx2 = int(len(t)/10)
    for i in range(n_files):
        # diffusion[i] = np.polyfit(t[:-5], data_dict["msd_" + str(avg_temps[i])][:-5], deg=1)[0]/6
        # diffusion[i] = np.polyfit(t[:-idx], msd_vals[i][:-idx], deg=1)[0] / 6
        diffusion[i] = np.polyfit(t[-idx1:-idx2], msd_vals[i][-idx1:-idx2], deg=1)[0] / 6
    #
    a, b = np.polyfit(T_vals, diffusion, deg=1)
    T_fit_vals = np.linspace(0, 8000, len(T_vals))
    # plt.plot(T_vals, np.linspace(0, T_vals[-1], len(T_vals))*a + b, label='Line fit')
    # plt.plot(T_fit_vals, T_fit_vals*a + b)
    # plt.scatter(-b/a, 0, label=rf'Approximate melting point $T = {-b/a:.0f}K$')
    plt.scatter(T_vals, diffusion, c="g")#, label="Simulated results")
    plt.xlabel("T")
    plt.ylabel("D(T)")
    # plt.plot([1687, 1687], [-2.5, diffusion.max()], "b--", label=r"Experimental melting point $T = 1687$K")
    # plt.plot([3538, 3538], [0, diffusion.max()], "r--", label="Experimental boiling point")
    plt.legend()
    plt.show()