diff --git a/measure.py b/measure.py index 94b79a48f70a24ec938c09d275db6ff9d023b77f..5c897c6d8faa841f310cf210b669fdc44b6dddc8 100644 --- a/measure.py +++ b/measure.py @@ -1,20 +1,34 @@ import numpy as np import overlap +import logging from polygon_triangulate import polygon_triangulate, PlotTriangulation from tetrahedralize_triangles import tetrahedralize +logging.basicConfig(filename='warnings.log', level=logging.DEBUG) + def measure_volume(V_tet, T, origin, r): sphere = overlap.Sphere(origin, r) volume = 0.0 + volumes = [] + for tet in T: vertices = V_tet[tet] overlap_tet = overlap.Tetrahedron(vertices) overlap_volume = overlap.overlap(sphere, overlap_tet) + volumes.append(overlap_volume) + if overlap_volume < 0: + print('Encountered negative volume overlap') + logging.warning('Encountered negative volume overlap') volume += overlap_volume + #import matplotlib.pyplot as plt + #plt.title(f'radius {r} total {volume}') + #plt.plot(np.arange(len(volumes)), volumes) + #plt.show() + return volume def same_point(x, y): @@ -28,6 +42,16 @@ def remove_duplicate_contour_points(P): return remove_duplicate_contour_points(np.delete(P, i, axis=0)) return P +def remove_line_triangles(P, F): + n = len(F) + for i in range(n-1, -1, -1): + PF = P[F[i]] + v1 = PF[0] - PF[1] + v2 = PF[1] - PF[2] + if np.isclose(np.abs(np.dot(v1/np.linalg.norm(v1),v2/np.linalg.norm(v2))),1): + F = np.delete(F, i, axis=0) + return F + def measure_cumulative_volume(z, P, thickness, origin, R): ''' Integration of the intersecting volume of a thick polygon and a sphere of increasing radius. @@ -60,6 +84,13 @@ def measure_cumulative_volume(z, P, thickness, origin, R): z1 = z + thickness / 2 _, V_tri, F = polygon_triangulate(P) + F = remove_line_triangles(V_tri, F) + + #import matplotlib.pyplot as plt + #print(V_tri[:5,:]) + #PlotTriangulation(V_tri, F) + #plt.show() + V_tet, T = tetrahedralize(V_tri, F, z0, z1) mu = np.zeros(len(R)) @@ -123,4 +154,4 @@ def measure_cumulative_points(z, X, thickness, origin, R): s = h - d0 mu[i] = np.sum(np.clip(s/thickness, 0, 1)) - return mu \ No newline at end of file + return mu diff --git a/run.py b/run.py index 847c1c184f05902100e8775e6d7aa78ab3e934a2..9ac24aa09545f9ee641666c6816a5970fb4778d2 100644 --- a/run.py +++ b/run.py @@ -78,17 +78,16 @@ def write_csv(path, R, dP, dV): for i0,i1,a,b,c,d,e,v in zip(R[:-1], R[1:], dP, dV, Dens, intdP, intdV, intDens): f.write(f'{i0},{a},{b},{c},,{i0},{i1},{d},{e},{v}\n') -def run(base_dir): +def run(base_dir, output_dir): R = np.arange(0, 3001, 125) - output_dir = 'output' + os.makedirs(output_dir, exist_ok=True) for experiment in tqdm(os.listdir(base_dir), desc='experiment'): for reading in os.listdir(os.path.join(base_dir, experiment)): - #if reading != '7566': - # continue + data_dir = os.path.join(base_dir, experiment, reading) origin, thickness = parse_params(data_dir) @@ -116,4 +115,5 @@ def run(base_dir): if __name__ == '__main__': base_dir = 'data' - run(base_dir) \ No newline at end of file + output_dir = 'output' + run(base_dir, output_dir)