def amrread(self, fname): """Reads the lowest Note: Requries the amrfile python module and the libamrfile.so library to be compiled. """ amrID = amrio.load(fname) thk = extract_field(amrID, 'thickness') bas = extract_field(amrID, 'Z_base') amrio.free(amrID) return thk, bas
def collect_field(fnames, field_name, outpath='./', return_ts=False): flist = [] ts = [] for f in fnames: amrID = amrio.load(outpath + f) lo, hi = amrio.queryDomainCorners(amrID, 0) xh, yh, z = amrio.readBox2D(amrID, 0, lo, hi, field_name, 0) ts.append(amrio.queryTime(amrID)) flist.append(z) amrio.free(amrID) returnset = np.array(flist), if return_ts: returnset += np.array(ts), return returnset
def get_time_from_plot_file(fname): amrID = amrio.load(fname) t = amrio.queryTime(amrID) amrio.free(amrID) return t
def intersect_grounding_and_center(fnames, centerline, outpath='./', return_depths=False, return_thks=False): """ Finds the intersection between the grounding lines in fnames and a centerline, using the intersection tool from Sukhbinder Singh. """ xints, yints, depths, thks, ts, slps = [], [], [], [], [], [] thetas = np.arctan(np.gradient(centerline.xs) / np.gradient(centerline.ys)) for f in fnames: amrID = amrio.load(outpath + f) lo, hi = amrio.queryDomainCorners(amrID, 0) xh, yh, bas = amrio.readBox2D(amrID, 0, lo, hi, "Z_base", 0) xh, yh, bot = amrio.readBox2D(amrID, 0, lo, hi, "Z_bottom", 0) xh, yh, thk = amrio.readBox2D(amrID, 0, lo, hi, "thickness", 0) p = plt.contour(xh, yh, np.abs(bas - bot), levels=[0.1], colors='r') glx, gly = p.allsegs[0][0].T xint, yint = intersection.intersection(glx, gly, centerline.xs, centerline.ys) xint = np.mean(xint) yint = np.mean(yint) xints.append(xint) yints.append(yint) ts.append(amrio.queryTime(amrID)) depths.append(interp2d(xh, yh, bas)(xint, yint)) thks.append(interp2d(xh, yh, thk)(xint, yint)) xi = np.argmin(np.abs(xh - xint)) yi = np.argmin(np.abs(yh - yint)) slpx = bas[yi, xi + 1] - bas[yi, xi - 1] / (2 * (xh[1] - xh[0])) slpy = bas[yi + 1, xi] - bas[yi - 1, xi] / (2 * (yh[1] - yh[0])) thi = np.argmin((centerline.xs - xint)**2 + (centerline.ys - yint)**2) theta = thetas[thi] slp = slpx * np.cos(theta) + slpy * np.sin(theta) slp = np.sqrt(slpx**2 + slpy**2) slps.append(slp) amrio.free(amrID) xints = np.array(xints) yints = np.array(yints) depths = np.array(depths) ts = np.array(ts) plt.close() return_set = ts, xints, yints if return_depths: return_set += depths, if return_thks: return_set += thks, return_set += slps, return_set = [np.asarray(rs) for rs in return_set] return return_set
#thkcomp = "Z_base" #"xVel", "yVel", "Z_surface", "Z_bottom", "Z_base", "Vel_magnitude" #"Mesh", "levels", "patches", "Vel" #read a box of thickness data at the lowest resolution namr = len(fns) level = 0 order = 0 # interpolation order, 0 for piecewise constant, 1 for linear amrID = amrio.load(testdatadir + "plot.extract.ase-lhs-B0000-Cthird-mb.4lev.000000.2d.hdf5") lo, hi = amrio.queryDomainCorners(amrID, level) x0, y0, bottom0 = amrio.readBox2D(amrID, level, lo, hi, "Z_bottom", order) x0, y0, surface0 = amrio.readBox2D(amrID, level, lo, hi, "Z_surface", order) thk_t0 = surface0 - bottom0 amrio.free(amrID) print datadir + yeardir + fns[0] if years == 50.: goodruns = np.hstack([range(24), range(25, 140), range(141, namr)]) elif years == 7.: goodruns = range(namr) Vs_full = np.zeros([5, len(goodruns)]) # Y = np.zeros([57344, len(goodruns)]) for i, igood in enumerate(goodruns): print i, igood amrID = amrio.load(datadir + yeardir + fns[igood]) #fns0=start if thkcomp == "thickness": x0, y0, bottom0 = amrio.readBox2D(amrID, level, lo, hi, "Z_bottom",