Exemplo n.º 1
0
def cluster_points(r, z):
    R, Z = geom.pointloop(r, z)
    dX = norm([r[1:] - r[:-1], z[1:] - z[:-1]], axis=0)
    dx_median = sp.median(dX)
    cluster, i = OrderedDict(), count(0)
    for r, z in zip(R, Z):
        dx = []
        for cl in cluster:
            rc, zc = cluster[cl]['r'], cluster[cl]['z']
            dx.append(np.min(norm([r - rc, z - zc], axis=0)))
        if len(dx) == 0 or np.min(dx) > 2 * dx_median:  # new
            cl = 'group{:1.0f}'.format(next(i))
            cluster[cl] = {}
            cluster[cl] = {'r': [r], 'z': [z]}
        else:
            icl = np.argmin(dx)
            cl = list(cluster.keys())[icl]
            cluster[cl]['r'] = np.append(cluster[cl]['r'], r)
            cluster[cl]['z'] = np.append(cluster[cl]['z'], z)
    for cl in cluster:
        r, z = cluster[cl]['r'], cluster[cl]['z']
        dx = norm([r[:1] - r[:-1], z[:1] - z[:-1]], axis=0)
        imax = np.argmax(dx) + 1
        r = np.append(r[imax:], r[:imax])
        z = np.append(z[imax:], z[:imax])
        cluster[cl]['r'], cluster[cl]['z'] = r, z
    return cluster
Exemplo n.º 2
0
    def process(self):
        for part in self.parts:
            x = {
                'in': {
                    'r': np.array([]),
                    'z': np.array([])
                },
                'out': {
                    'r': np.array([]),
                    'z': np.array([])
                },
                'ports': {
                    'r': np.array([]),
                    'z': np.array([])
                },
                'r': np.array([]),
                'z': np.array([])
            }

            for loop, side in zip(self.parts[part], ['out', 'in', 'ports']):
                r, z = geom.read_loop(self.parts[part], loop)
                x[side]['r'], x[side]['z'] = r, z

            if part in ['TF_Coil', 'Vessel', 'Blanket']:
                if side != 'out':
                    x['r'], x['z'] = geom.polyloop(x['in'], x['out'])
                else:
                    x['r'], x['z'] = geom.pointloop(x['out']['r'],
                                                    x['out']['z'])
                    lines = cutcorners(x['r'], x['z'])  # select halfs
                    for seg, side in zip(lines, ['in', 'out']):
                        x[side] = {'r': lines[seg]['r'], 'z': lines[seg]['z']}
            for key in x:
                self.parts[part][key] = x[key]
Exemplo n.º 3
0
def cutcorners(r, z):
    r, z = geom.pointloop(r, z, ref='min')  # form loop from closest neighbour
    n = len(r) - 1
    dR = np.array([r[1:] - r[:-1], z[1:] - z[:-1]])
    dR = np.array([np.gradient(r), np.gradient(z)])
    dL = norm(dR, axis=0)
    k, kflag = count(0), False
    lines = OrderedDict()
    segment = add_segment(lines, k)
    for i in range(n):
        kink = np.arccos(np.dot(dR[:, i] / dL[i],
                                dR[:, i + 1] / dL[i + 1])) * 180 / np.pi
        append_value(lines, segment, r[i + 1], z[i + 1])
        if abs(kink) > 40 and kflag == False:  # angle, deg
            segment = add_segment(lines, k)
            append_value(lines, segment, r[i + 1], z[i + 1])
            kflag = True
        else:
            kflag = False
    segments = list(lines.keys())
    l = np.zeros(len(segments))
    for i, seg in enumerate(segments):
        l[i] = len(lines[seg]['r'])
    seg = np.argsort(l)[-2:]  # select loops (in/out)
    rmax = np.zeros(len(seg))
    for i, s in enumerate(seg):
        rmax[i] = np.max(lines[segments[s]]['r'])
    seg = seg[np.argsort(rmax)]
    lines_sort = OrderedDict()
    for s in seg[:2]:
        lines_sort[segments[s]] = lines[segments[s]]
    return lines_sort
Exemplo n.º 4
0
rb.trim_sol()

filename = trim_dir('../../Data/') + 'CATIA_FW.xlsx'
wb = load_workbook(filename=filename, read_only=True, data_only=True)
ws = wb[wb.get_sheet_names()[0]]

FW = {}
for col, var in zip([5, 6], ['r', 'z']):
    row = ws.columns[col]
    FW[var] = np.zeros(len(row) - 1)
    for i, r in enumerate(row[1:]):
        try:
            FW[var][i] = 1e-3 * float(r.value)  # m
        except:
            break
r, z = geom.pointloop(FW['r'], FW['z'], ref='min')
pl.plot(r[:-1], z[:-1])
'''
self.parts = OrderedDict()  # component parts    
part,loop = [],[]
for row in ws.columns:
    new_part = get_label(row[0].value,part)
    if new_part:
        self.parts[part[-1]] = OrderedDict()
    if len(part) == 0:
        continue
    new_loop = get_label(row[1].value,loop,force=new_part,part=part[-1])
    p,l = part[-1],loop[-1]
    if new_loop:
        self.parts[p][l] = OrderedDict()
'''