57 lines
1.6 KiB
Python
57 lines
1.6 KiB
Python
from pathlib import Path
|
|
import pandas as pd
|
|
import numpy as np
|
|
import matplotlib.pyplot as plt
|
|
import scipy
|
|
from glob import glob
|
|
|
|
|
|
def read_3d(path: str):
|
|
df = pd.read_csv(path, skipinitialspace=True)
|
|
df['N'] = df.index + 1
|
|
df['r'] = (df.x ** 2 + df.y ** 2 + df.z ** 2) ** 0.5
|
|
df['cr'] = df.r.cummax()
|
|
df['fd'] = np.log(df.N) / np.log(df.cr)
|
|
|
|
return df
|
|
|
|
|
|
def read_load_dir(load_dir: str):
|
|
paths = glob(f'{load_dir}/*.csv')
|
|
return [read_3d(path) for path in paths]
|
|
|
|
|
|
def convergent_tail_index(series, tol):
|
|
diffs = np.abs(np.ediff1d(series))
|
|
for i in range(0, len(diffs)):
|
|
if np.max(diffs[i:]) <= tol:
|
|
return i
|
|
|
|
# No convergence found
|
|
return None
|
|
|
|
|
|
def mean_of_tail(series, tol=0.05):
|
|
tail_index = convergent_tail_index(series, tol)
|
|
if tail_index is None:
|
|
raise Exception("No convergence found.")
|
|
|
|
return np.mean(series[tail_index:])
|
|
|
|
|
|
def fd_stats(dfs):
|
|
fds = [mean_of_tail(df.fd, 0.01) for df in dfs]
|
|
fds_clean = [f for f in fds if f < np.inf]
|
|
return np.mean(fds_clean), np.std(fds_clean)
|
|
|
|
df = read_3d("/Users/joshuacoles/Developer/checkouts/jc3091/CompB DLA/c-codebase/out-2.csv")
|
|
print(mean_of_tail(df.fd, 0.01))
|
|
|
|
df = read_3d("/Users/joshuacoles/Developer/checkouts/jc3091/CompB DLA/c-codebase/out-26n.csv")
|
|
print(mean_of_tail(df.fd, 0.01))
|
|
|
|
df = read_3d("/Users/joshuacoles/Developer/checkouts/jc3091/CompB DLA/c-codebase/out-26nn.csv")
|
|
print(mean_of_tail(df.fd, 0.01))
|
|
|
|
# dfs = read_load_dir("/Users/joshuacoles/Developer/checkouts/jc3091/CompB DLA/data-analysis/data/rust-3d-1/1")
|
|
# print(fd_stats(dfs)) |