def extract_field(amrID, field='thickness', level=0, order=0, returnxy=False): """ """ lo, hi = amrio.queryDomainCorners(amrID, level) x, y, thk = amrio.readBox2D(amrID, level, lo, hi, field, order) if returnxy: return x, y, thk else: return thk
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 extract_ts_and_vols(outpath, skip=1, taf=False): fnames = get_fnames(outpath)[::skip] vols = [] ts = [] for f in fnames: amrID = amrio.load(outpath + f) lo, hi = amrio.queryDomainCorners(amrID, 0) xh, yh, bas1 = amrio.readBox2D(amrID, 0, lo, hi, "Z_base", 0) xh, yh, thk1 = amrio.readBox2D(amrID, 0, lo, hi, "thickness", 0) ts.append(amrio.queryTime(amrID)) amrio.freeAll() if taf: thk1 = thickness_above_floating(thk1, bas1) vol = np.trapz(np.trapz(thk1, axis=1, x=xh), x=yh) vols.append(vol) vols = np.array(vols) return ts, vols
def find_centerline(): xh, yh, xvel = amrio.readBox2D(amrID, 0, lo, hi, "xVel", 0) xh, yh, yvel = amrio.readBox2D(amrID, 0, lo, hi, "yVel", 0) points = np.array([[0, 0]]) for l in p.lines.get_paths(): i = 0 for s in l.iter_segments(): if i == 0: if s[0] not in points: points = np.vstack([points, s[0]]) i += 1 center_x, center_y = points.T[0, sl], points.T[1, sl] center_d = np.r_[0, np.cumsum( np.sqrt((center_x[1:] - center_x[:-1])**2 + (center_y[1:] - center_y[:-1])**2))] / 1000. centerline = giapy.plot_tools.interp_path.TransectPath( center_x, center_y, center_d) return centerline
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
#plot.amundsen.2d.hdf5 thkcomp = "thickness" #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