Beispiel #1
0
def struct_radius_scatter(psi_arr, cur, den):
    hess = hessian(psi_arr)
    ntheta = 2
    nx, ny = psi_arr.shape
    psi_grad_x, psi_grad_y = gradient(psi_arr)
    bmag = np.sqrt(psi_grad_x**2 + psi_grad_y**2)
    den_x, den_y = gradient(den)
    den_grad_mag = np.sqrt(den_x**2 + den_y**2)
    surf = _cp.TopoSurface(psi_arr)
    regions = surf.get_minmax_regions()
    res = {}
    for (minmax, pss, type), region in regions.items():
        if len(region) < 50: continue
        name_2_field = {'bmag': [bmag],
                        'den': [den],
                        'cur': [cur],
                        'psi': [psi_arr],
                        'hess': [hess],
                        'den_grad': [den_grad_mag],
                        }
        for name, (field,) in name_2_field.items():
            th_sector = theta_sectors(field, minmax[0], minmax[1], region, ntheta=2)[0]
            field_radius = r_moment(th_sector['r'],th_sector['val'], th_sector['valstd'])
            res.setdefault(name, []).append(field_radius)
    return res
def vis_regions(h5fname, idx, savedir='.'):
    idx_str = str(idx)
    dta = tables.openFile(h5fname, 'r')
    arrs = izip(dta.walkNodes('/psi', 'Array'),
                dta.walkNodes('/bx', 'Array'),
                dta.walkNodes('/by', 'Array'))
    for psi_arr, bx_arr, by_arr in arrs:
        if not psi_arr.name.endswith(idx_str):
            continue
        print psi_arr.name
        psi_arr = psi_arr.read()
        psi_arr = psi_arr.astype(np.double)
        bx_arr = bx_arr.read().astype(np.double)
        by_arr = by_arr.read().astype(np.double)
        bmag = bx_arr**2 + by_arr**2
        hess = hessian(psi_arr)
        surf = _cp.TopoSurface(psi_arr)
        regions = surf.get_minmax_regions().values()
        bmag_mask = mask_arr(bmag, regions)
        hess_mask = mask_arr(hess, regions)
        pl.figure()
        pl.imshow(bmag, interpolation='nearest', cmap='hot')
        pl.title(r'$|B|$')
        pl.colorbar(pad=0.0, shrink=0.9)
        pl.savefig('%s/bmag-fig.pdf' % savedir)
        visualize(psi_arr, crit_pts=surf.crit_pts,
                 cmap='hot', save_fig=('%s/psi-crit-pts' % savedir),
                 fig_title=r'$\psi$ with critical points', exts=('.pdf',))
        visualize(bmag_mask, cmap='hot', save_fig=('%s/bmag-regions-crit-pts' % savedir), exts=('.pdf',),
                 fig_title=r'$|B|$ regions')
        visualize(hess, cmap='hot', save_fig=('%s/hessian' % savedir),
                  fig_title=r'$H(\psi)$', exts=('.pdf',))
        hess_neg_mask = hess.copy()
        hess_neg_mask[hess <= 0] = 1.1 * np.min(hess)
        visualize(hess_mask, cmap='hot', save_fig=('%s/hess-regions' % savedir),
                  fig_title=r'$H(\psi)$ regions', exts=('.pdf',))
        visualize(hess_neg_mask, cmap='hot', save_fig=('%s/hess-neg-mask' % savedir),
                  fig_title=r'$H(\psi)$, negative regions masked', exts=('.pdf',))
    dta.close()
Beispiel #3
0
def mag_shear_theta_sectors(psi_arr, cur, den, thresh=100, save_basename='field-vs-r'):
    hess = hessian(psi_arr)
    ntheta = 2
    nx, ny = psi_arr.shape
    psi_grad_x, psi_grad_y = gradient(psi_arr)
    bmag = np.sqrt(psi_grad_x**2 + psi_grad_y**2)
    den_x, den_y = gradient(den)
    den_grad_mag = np.sqrt(den_x**2 + den_y**2)
    # pl.ion()
    # pl.figure()
    # pl.imshow(bmag, interpolation='nearest', cmap='hot')
    surf = _cp.TopoSurface(psi_arr)
    regions = surf.get_minmax_regions()
    pl.figure(figsize=(9,12))
    nr = 6
    nc = 2
    ctr = 0
    for (minmax, pss, type), region in regions.items():
        if len(region) < thresh:
            continue
        ctr += 1
        print ctr
        gs = gridspec.GridSpec(nr, nc, width_ratios=[1,2], hspace=0.0)
        nbr_func = lambda t: _cp.neighbors6(t[0], t[1], nx, ny)
        lset = field_trace._level_set(psi_arr, level_val=psi_arr[pss],
                position=pss, neighbors_func=nbr_func)
        bx = -psi_grad_y
        by = psi_grad_x
        br, btheta = cartesian_to_polar(bx, by, minmax[0], minmax[1])
        region = expand_region_circ(psi_arr, region, minmax, extra=2.0)
        lset = lset.intersection(region)
        # psi
        ax = pl.subplot(gs[0])
        ax.set_title("Field & separatrix", size='x-large')
        field_region_image(ax, psi_arr, region, minmax, lset, title=r'$\psi$')
        # ax = pl.subplot2grid((nr, nc), (0, 1))
        ax = pl.subplot(gs[1])
        ax.set_title(r"Field vs. $r/\rho_s$ (id={0})".format(ctr), size='x-large')
        plot_theta_sectors(ax, psi_arr, minmax, region, ntheta, title=r'$\psi$ vs. $r/\rho_s$')
        # b_theta
        ax = pl.subplot(gs[2])
        # field_region_image(ax, btheta, region, minmax, lset, title=r'$B_{\theta}$')
        field_region_image(ax, bmag, region, minmax, lset, title=r'$|B|$')
        ax = pl.subplot(gs[3])
        # btheta_sectors = plot_theta_sectors(ax, btheta, minmax, region, ntheta, title=r'$B_{\theta}$ vs. $r/\rho_s$')
        plot_theta_sectors(ax, bmag, minmax, region, ntheta, title=r'$|B|$ vs. $r/\rho_s$')
        # b_shear
        # pl.subplot(nr, nc, 5)
        # field_region_image(btheta, region, minmax, lset, title=r'$B_{\theta}$')
        # pl.subplot(nr, nc, 6)
        # plot_sect_derivs_by_r(btheta_sectors, title=r'$\partial_{r} \frac{B_{\theta}}{r}$ vs. $r/\rho_s$')
        # den
        ax = pl.subplot(gs[4])
        field_region_image(ax, den, region, minmax, lset, title=r'$n$')
        ax = pl.subplot(gs[5])
        plot_theta_sectors(ax, den, minmax, region, ntheta, title=r'$n$ vs. $r/\rho_s$')
        # den_grad
        ax = pl.subplot(gs[6])
        field_region_image(ax, den_grad_mag, region, minmax, lset, title=r'$|\nabla n|$')
        ax = pl.subplot(gs[7])
        plot_theta_sectors(ax, den_grad_mag, minmax, region, ntheta, title=r'$|\nabla n|$ vs. $r/\rho_s$')
        # cur
        ax = pl.subplot(gs[8])
        field_region_image(ax, cur, region, minmax, lset, title=r'$J$')
        ax = pl.subplot(gs[9])
        plot_theta_sectors(ax, cur, minmax, region, ntheta, title=r'$J$ vs. $r/\rho_s$')
        # hessian
        ax = pl.subplot(gs[10])
        field_region_image(ax, hess, region, minmax, lset, title=r'$H(\psi)$', xvis=True)
        ax = pl.subplot(gs[11])
        ax.set_xlabel(r'$r/\rho_s$', size='x-large')
        plot_theta_sectors(ax, hess, minmax, region, ntheta, title=r'$H(\psi)$ vs. $r/\rho_s$', xvis=True)
        # raw_input('enter to continue')
        pl.savefig('{0}_{1:04d}.pdf'.format(save_basename, ctr))
        pl.clf()
    pl.close('all')