def extractBodies(): pref = 'BODY#' if CTK.t == []: return if CTK.__MAINTREE__ <= 0: CTK.TXT.insert('START', 'Fail on a temporary tree.\n') CTK.TXT.insert('START', 'Error: ', 'Error') return nzs = CPlot.getSelectedZones() if nzs == []: CTK.TXT.insert('START', 'Selection is empty.\n') CTK.TXT.insert('START', 'Error: ', 'Error') return CTK.saveTree() for nz in nzs: nob = CTK.Nb[nz] + 1 noz = CTK.Nz[nz] z = CTK.t[2][nob][2][noz] baseName = CTK.t[2][nob][0] bodyName = pref + baseName CTK.t = C.addBase2PyTree(CTK.t, bodyName, cellDim=2) nodes = Internal.getNodesFromName(CTK.t, bodyName) p = Internal.getParentOfNode(CTK.t, nodes[0]) walls = C.extractBCOfType(z, 'BCWall') walls += C.extractBCOfType(z, 'BCWallInviscid') walls += C.extractBCOfType(z, 'BCWallViscous') CTK.t[2][p[1]][2] = CTK.t[2][p[1]][2] + walls CTK.TXT.insert('START', 'Walls extracted.\n') (CTK.Nb, CTK.Nz) = CPlot.updateCPlotNumbering(CTK.t) CTK.TKTREE.updateApp() CTK.display(CTK.t)
def selectCells(event=None): if CTK.t == []: return if CTK.__MAINTREE__ <= 0: CTK.TXT.insert('START', 'Fail on a temporary tree.\n') CTK.TXT.insert('START', 'Error: ', 'Error') return formula = VARS[0].get() strict = VARS[1].get() strict = int(strict) nzs = CPlot.getSelectedZones() if nzs == []: CTK.TXT.insert('START', 'Selection is empty.\n') CTK.TXT.insert('START', 'Error: ', 'Error') return CTK.saveTree() for nz in nzs: nob = CTK.Nb[nz] + 1 noz = CTK.Nz[nz] z = CTK.t[2][nob][2][noz] z = P.selectCells(z, formula, strict=strict) CTK.replace(CTK.t, nob, noz, z) #C._fillMissingVariables(CTK.t) (CTK.Nb, CTK.Nz) = CPlot.updateCPlotNumbering(CTK.t) CTK.TXT.insert('START', 'Cells selected.\n') CTK.TKTREE.updateApp() CPlot.render()
def fillEmptyBCWith(): if CTK.t == []: return typeBC = VARS[4].get() if typeBC not in Internal.KNOWNBCS: nameBC = typeBC typeBC = 'FamilySpecified:' + typeBC else: nameBC = typeBC node = Internal.getNodeFromName(CTK.t, 'EquationDimension') if node is not None: ndim = Internal.getValue(node) else: CTK.TXT.insert('START', 'EquationDimension not found (tkState). Using 3D.\n') CTK.TXT.insert('START', 'Warning: ', 'Warning') ndim = 3 CTK.saveTree() nzs = CPlot.getSelectedZones() if CTK.__MAINTREE__ <= 0 or nzs == []: C._fillEmptyBCWith(CTK.t, nameBC + 'Fill', typeBC, dim=ndim) else: for nz in nzs: nob = CTK.Nb[nz] + 1 noz = CTK.Nz[nz] C._fillEmptyBCWith(CTK.t[2][nob][2][noz], nameBC + 'Fill', typeBC, dim=ndim) CTK.TXT.insert('START', 'Empty BCs filled.\n') CTK.TKTREE.updateApp() check()
def extendSurf(): if CTK.t == []: return if CTK.__MAINTREE__ <= 0: CTK.TXT.insert('START', 'Fail on a temporary tree.\n') CTK.TXT.insert('START', 'Error: ', 'Error') return # surfaces name = VARS[0].get() names = name.split(';') surfaces = [] for v in names: v = v.lstrip() v = v.rstrip() sname = v.split('/', 1) bases = Internal.getNodesFromName1(CTK.t, sname[0]) if bases != []: nodes = Internal.getNodesFromType1(bases[0], 'Zone_t') for z in nodes: if z[0] == sname[1]: surfaces.append(z) # - Hauteur de chaque maille - dhloc = CTK.varsFromWidget(VARS[1].get(), type=1) dhloc = dhloc[0] N = CTK.varsFromWidget(VARS[2].get(), type=2) N = N[0] dh = G.cart((0., 0., 0.), (dhloc, 1., 1.), (N + 1, 1, 1)) # - nb d'iterations de lissage - nit = CTK.varsFromWidget(VARS[3].get(), type=2) nit = nit[0] # - contour - nzs = CPlot.getSelectedZones() if (nzs == []): CTK.TXT.insert('START', 'Selection is empty.\n') CTK.TXT.insert('START', 'Error: ', 'Error') return CTK.saveTree() contours = [] for nz in nzs: nob = CTK.Nb[nz] + 1 noz = CTK.Nz[nz] z = CTK.t[2][nob][2][noz] contour = C.convertBAR2Struct(z) contours.append(contour) # Extension zlist = G.buildExtension(contours, surfaces, dh, niter=nit) c = 0 for nz in nzs: nob = CTK.Nb[nz] + 1 noz = CTK.Nz[nz] CTK.t[2][nob][2][noz] = zlist[c] c += 1 CTK.TXT.insert('START', 'Surface extension done.\n') (CTK.Nb, CTK.Nz) = CPlot.updateCPlotNumbering(CTK.t) CTK.TKTREE.updateApp() CTK.display(CTK.t)
def setShaderParameter(event=None): if CTK.t == []: return if CTK.__MAINTREE__ <= 0: CTK.TXT.insert('START', 'Fail on a temporary tree.\n') CTK.TXT.insert('START', 'Error: ', 'Error') return shaderParameter2 = (WIDGETS['param2'].get()) / 50. shaderParameter1 = (WIDGETS['param1'].get()) / 50. VARS[4].set('Shader parameter 1 [%.2f].' % shaderParameter1) VARS[5].set('Shader parameter 2 [%.2f].' % shaderParameter2) nzs = CPlot.getSelectedZones() if nzs == []: CTK.TXT.insert('START', 'Selection is empty.\n') CTK.TXT.insert('START', 'Error: ', 'Error') return CTK.saveTree() for nz in nzs: nob = CTK.Nb[nz] + 1 noz = CTK.Nz[nz] a = CPlot.addRender2Zone( CTK.t[2][nob][2][noz], shaderParameters=[shaderParameter1, shaderParameter2]) CTK.replace(CTK.t, nob, noz, a) CTK.TKTREE.updateApp() Panels.updateRenderPanel() CPlot.render()
def distribute(event=None): global STATS if CTK.t == []: return try: NProc = int(VARS[0].get()) except: CTK.TXT.insert('START', 'distribute: NProc is invalid.\n') CTK.TXT.insert('START', 'Error: ', 'Error') return try: comSpeed = float(VARS[1].get()) except: CTK.TXT.insert('START', 'distribute: ComSpeed is invalid.\n') CTK.TXT.insert('START', 'Error: ', 'Error') return algo = VARS[2].get() useCom = VARS[3].get() CTK.saveTree() CTK.t, STATS = D.distribute(CTK.t, NProc, perfo=(1., 0., comSpeed), useCom=useCom, algorithm=algo) CTK.TXT.insert('START', 'Blocks distributed.\n') CTK.TKTREE.updateApp() updateStats()
def addkplanes(): if CTK.t == []: return if CTK.__MAINTREE__ <= 0: CTK.TXT.insert('START', 'Fail on a temporary tree.\n') CTK.TXT.insert('START', 'Error: ', 'Error') return N = CTK.varsFromWidget(VARS[1].get(), type=2) if len(N) != 1: CTK.TXT.insert('START', 'Number of layers is incorrect.\n') CTK.TXT.insert('START', 'Error: ', 'Error') return N = N[0] nzs = CPlot.getSelectedZones() if nzs == []: CTK.TXT.insert('START', 'Selection is empty.\n') CTK.TXT.insert('START', 'Error: ', 'Error') return CTK.saveTree() fail = False for nz in nzs: nob = CTK.Nb[nz] + 1 noz = CTK.Nz[nz] #try: z = T.addkplane(CTK.t[2][nob][2][noz], N=N) CTK.replace(CTK.t, nob, noz, z) #except Exception as e: fail = True if not fail: CTK.TXT.insert('START', 'K planes added.\n') else: CTK.TXT.insert('START', 'add K planes failed.\n') CTK.TXT.insert('START', 'Error: ', 'Error') (CTK.Nb, CTK.Nz) = CPlot.updateCPlotNumbering(CTK.t) CTK.TKTREE.updateApp() CPlot.render()
def makeDirect(): if CTK.t == []: return if CTK.__MAINTREE__ <= 0: CTK.TXT.insert('START', 'Fail on a temporary tree.\n') CTK.TXT.insert('START', 'Error: ', 'Error'); return nzs = CPlot.getSelectedZones() if nzs == []: CTK.TXT.insert('START', 'Selection is empty.\n') CTK.TXT.insert('START', 'Error: ', 'Error'); return CTK.saveTree() fail = False; errors = [] for nz in nzs: nob = CTK.Nb[nz]+1 noz = CTK.Nz[nz] z = CTK.t[2][nob][2][noz] try: a = T.makeDirect(z) CTK.replace(CTK.t, nob, noz, a) except Exception as e: fail = True; errors += [0,str(e)] if not fail: CTK.TXT.insert('START', 'Zones made direct.\n') else: Panels.displayErrors(errors, header='Error: makeDirect') CTK.TXT.insert('START', 'MakeDirect fails for at least one zone.\n') CTK.TXT.insert('START', 'Warning: ', 'Warning') CTK.TKTREE.updateApp() CPlot.render()
def outCore(): if (CTK.t == []): return if (CTK.__MAINTREE__ <= 0): CTK.TXT.insert('START', 'Fail on a temporary tree.\n') CTK.TXT.insert('START', 'Error: ', 'Error') return nzs = CPlot.getSelectedZones() if (nzs == []): CTK.TXT.insert('START', 'Selection is empty.\n') CTK.TXT.insert('START', 'Error: ', 'Error') return for nz in nzs: nob = CTK.Nb[nz] + 1 noz = CTK.Nz[nz] z = CTK.t[2][nob][2][noz] ooc = Internal.getNodesFromName1(z, 'OutOfCore') if (len(ooc) == 0): # Save zone base = CTK.t[2][nob] name = '.' + base[0] + '#' + z[0] + '.cgns' t = C.newPyTree(['Base']) t[2][1][2].append(z) C.convertPyTree2File(t, name) # Replace zone bb = G.BB(z) bb[2].append(['OutOfCore', numpy.array([1]), [], \ 'UserDefinedData_t']) bb = CPlot.addRender2Zone(bb, blending=0.2) CTK.replace(CTK.t, nob, noz, bb) CTK.saveTree() # il est apres pour forcer le flush CTK.TXT.insert('START', 'Selected zones out of core.\n') CTK.t = C.fillMissingVariables(CTK.t) (CTK.Nb, CTK.Nz) = CPlot.updateCPlotNumbering(CTK.t) CTK.TKTREE.updateApp() CPlot.render()
def inCore(): if CTK.t == []: return if (CTK.__MAINTREE__ <= 0): CTK.TXT.insert('START', 'Fail on a temporary tree.\n') CTK.TXT.insert('START', 'Error: ', 'Error') return nzs = CPlot.getSelectedZones() if nzs == []: CTK.TXT.insert('START', 'Selection is empty.\n') CTK.TXT.insert('START', 'Error: ', 'Error') return for nz in nzs: nob = CTK.Nb[nz] + 1 noz = CTK.Nz[nz] z = CTK.t[2][nob][2][noz] ooc = Internal.getNodesFromName1(z, 'OutOfCore') if (len(ooc) != 0): # Read zone base = CTK.t[2][nob] name = '.' + base[0] + '#' + z[0] + '.cgns' t = C.convertFile2PyTree(name) CTK.replace(CTK.t, nob, noz, t[2][1][2][0]) CTK.saveTree() # il est apres pour forcer le flush CTK.TXT.insert('START', 'Selected zones in core.\n') CTK.t = C.fillMissingVariables(CTK.t) (CTK.Nb, CTK.Nz) = CPlot.updateCPlotNumbering(CTK.t) CTK.TKTREE.updateApp() CPlot.render()
def rmBCOfType(): if CTK.t == []: return BCTypes = [] selection = WIDGETS['BCLB'].curselection() for s in selection: t = WIDGETS['BCLB'].get(s) if t not in Internal.KNOWNBCS: t = 'FamilySpecified:' + t BCTypes.append(t) CTK.saveTree() nzs = CPlot.getSelectedZones() if CTK.__MAINTREE__ <= 0 or nzs == []: if 'FamilySpecified:-All BC-' in BCTypes: Internal._rmNodesByType(CTK.t, 'BC_t') else: for t in BCTypes: C._rmBCOfType(CTK.t, t) else: for nz in nzs: nob = CTK.Nb[nz] + 1 noz = CTK.Nz[nz] z = CTK.t[2][nob][2][noz] if 'FamilySpecified:-All BC-' in BCTypes: Internal._rmNodesByType(z, 'BC_t') else: for t in BCTypes: C._rmBCOfType(z, t) CTK.TXT.insert('START', 'BCs of type %s have been removed.\n' % type) CTK.TKTREE.updateApp() check()
def convert2Tetra(): if CTK.t == []: return if CTK.__MAINTREE__ <= 0: CTK.TXT.insert('START', 'Fail on a temporary tree.\n') CTK.TXT.insert('START', 'Error: ', 'Error') return nzs = CPlot.getSelectedZones() if nzs == []: CTK.TXT.insert('START', 'Selection is empty.\n') CTK.TXT.insert('START', 'Error: ', 'Error') return CTK.saveTree() fail = False errors = [] for nz in nzs: nob = CTK.Nb[nz] + 1 noz = CTK.Nz[nz] try: a = C.convertArray2Tetra(CTK.t[2][nob][2][noz]) CTK.replace(CTK.t, nob, noz, a) except Exception as e: fail = True errors += [0, str(e)] if not fail: CTK.TXT.insert('START', 'Zones converted to tetra.\n') else: Panels.displayErrors(errors, header='Error: convert2Tetra') CTK.TXT.insert('START', 'Tetra conversion fails for at least one zone.\n') CTK.TXT.insert('START', 'Warning: ', 'Warning') #C._fillMissingVariables(CTK.t) (CTK.Nb, CTK.Nz) = CPlot.updateCPlotNumbering(CTK.t) CTK.TKTREE.updateApp() CPlot.render()
def setAll(): if CTK.t == []: return if CTK.__MAINTREE__ <= 0: CTK.TXT.insert('START', 'Fail on a temporary tree.\n') CTK.TXT.insert('START', 'Error: ', 'Error') return material = VARS[0].get() color = VARS[1].get() blending = WIDGETS['blending'].get() / 100. VARS[6].set('Blending [%.2f].' % blending) meshOverlay = VARS[3].get() shaderParameter2 = (WIDGETS['param2'].get()) / 50. shaderParameter1 = (WIDGETS['param1'].get()) / 50. nzs = CPlot.getSelectedZones() if nzs == []: CTK.TXT.insert('START', 'Selection is empty.\n') CTK.TXT.insert('START', 'Error: ', 'Error') return CTK.saveTree() for nz in nzs: nob = CTK.Nb[nz] + 1 noz = CTK.Nz[nz] a = CPlot.addRender2Zone( CTK.t[2][nob][2][noz], material=material, color=color, blending=blending, shaderParameters=[shaderParameter1, shaderParameter2]) CTK.replace(CTK.t, nob, noz, a) CTK.TKTREE.updateApp() Panels.updateRenderPanel() CPlot.render()
def setVars3(event=None): nzs = CPlot.getSelectedZones() if (nzs == []): CTK.TXT.insert('START', 'Selection is empty.\n') CTK.TXT.insert('START', 'Error: ', 'Error') return name = VARS[0].get() CTK.saveTree() transl_speed = CTK.varsFromWidget(VARS[43].get(), 1) axis_pnt = CTK.varsFromWidget(VARS[44].get(), 1) axis_vct = CTK.varsFromWidget(VARS[45].get(), 1) omega = VARS[46].get() for nz in nzs: nob = CTK.Nb[nz] + 1 noz = CTK.Nz[nz] z = CTK.t[2][nob][2][noz] CTK.t[2][nob][2][noz] = RM.setPrescribedMotion3( z, name, transl_speed=transl_speed, axis_pnt=axis_pnt, axis_vct=axis_vct, omega=omega) CTK.TKTREE.updateApp() CTK.TXT.insert('START', 'Motion set in selected zones.\n')
def streamRibbon(): if CTK.t == []: return npts = CTK.varsFromWidget(VARS[0].get(), type=2) if len(npts) != 1: CTK.TXT.insert('START', 'Number of points in stream incorrect.\n') CTK.TXT.insert('START', 'Error: ', 'Error') return npts = npts[0] v1 = VARS[1].get() v2 = VARS[2].get() v3 = VARS[3].get() CTK.TXT.insert('START', 'Click to select starting point...\n') l = [] while (l == []): l = CPlot.getActivePoint() time.sleep(0.1) print('Ribbon: starting point %d' % l) CTK.saveTree() CTK.t = C.addBase2PyTree(CTK.t, 'STREAMS', 2) b = Internal.getNodesFromName1(CTK.t, 'STREAMS') nob = C.getNobOfBase(b[0], CTK.t) try: stream = P.streamRibbon(CTK.t, (l[0], l[1], l[2]), (0, 0, 0.01), [v1, v2, v3], N=npts) CTK.add(CTK.t, nob, -1, stream) CTK.TXT.insert('START', 'Stream ribbon created.\n') except Exception as e: Panels.displayErrors([0, str(e)], header='Error: streamRibbon') CTK.TXT.insert('START', 'Stream ribbon fails.\n') CTK.TXT.insert('START', 'Error: ', 'Error') (CTK.Nb, CTK.Nz) = CPlot.updateCPlotNumbering(CTK.t) CTK.TKTREE.updateApp() CTK.display(CTK.t)
def setBackground(event=None): if CTK.t == []: return if CTK.__MAINTREE__ <= 0: CTK.TXT.insert('START', 'Fail on a temporary tree.\n') CTK.TXT.insert('START', 'Error: ', 'Error') return type = VARS[0].get() CTK.saveTree() if type == 'None': deleteBackgroundBase() else: deleteBackgroundBase() CTK.t = C.addBase2PyTree(CTK.t, 'BACKGROUND', 2) if type == 'Half-Box': B = createBox(1) elif type == 'Box': B = createBox(0) elif type == 'Z-Half-Box': B = createBox(1, 1) elif type == 'Z-Box': B = createBox(0, 1) elif type == 'Z-Ellipse': B = createZEllipse() elif type == 'Z-Plane': B = createZPlane() elif type == 'Z-Square-Ground': B = createGround() base = Internal.getNodesFromName1(CTK.t, 'BACKGROUND')[0] nob = C.getNobOfBase(base, CTK.t) for b in B: CTK.add(CTK.t, nob, -1, b) #C._fillMissingVariables(CTK.t) (CTK.Nb, CTK.Nz) = CPlot.updateCPlotNumbering(CTK.t) CTK.TKTREE.updateApp() CPlot.render()
def fillMissingVariables(): if CTK.t == []: return CTK.saveTree() C._fillMissingVariables(CTK.t) CTK.TXT.insert('START', 'Missing variables filled.\n') CTK.TKTREE.updateApp() CTK.display(CTK.t)
def rmBlock(): if CTK.t == []: return if CTK.__MAINTREE__ <= 0: CTK.TXT.insert('START', 'Fail on a temporary tree.\n') CTK.TXT.insert('START', 'Error: ', 'Error') return nzs = CPlot.getSelectedZones() if nzs == []: CTK.TXT.insert('START', 'Selection is empty.\n') CTK.TXT.insert('START', 'Error: ', 'Error') return deletedZoneNames = [] for nz in nzs: nob = CTK.Nb[nz] + 1 noz = CTK.Nz[nz] deletedZoneNames.append(CTK.t[2][nob][0] + Internal.SEP1 + CTK.t[2][nob][2][noz][0]) CTK.saveTree() CTK.t = CPlot.deleteSelection(CTK.t, CTK.Nb, CTK.Nz, nzs) CTK.TXT.insert('START', 'Selected zones deleted.\n') (CTK.Nb, CTK.Nz) = CPlot.updateCPlotNumbering(CTK.t) CTK.TKTREE.updateApp() CPlot.delete(deletedZoneNames) CPlot.render()
def setHoleInterpolatedPoints(): if CTK.t == []: return CTK.saveTree() depth = VARS[7].get() depth = int(depth) CTK.t = X.setHoleInterpolatedPoints(CTK.t, depth=depth) CTK.TXT.insert('START', 'cellN variable modified near holes.\n') CTK.TKTREE.updateApp() CTK.display(CTK.t)
def drawCubic(npts): global CURRENTZONE; global CURRENTPOLYLINE if (CTK.t == []): return w = WIDGETS['draw'] if (CTK.__BUSY__ == False): CPlot.unselectAllZones() CTK.saveTree() CTK.__BUSY__ = True TTK.sunkButton(w) CPlot.setState(cursor=1) while (CTK.__BUSY__ == True): l = [] while (l == []): l = CPlot.getActivePoint() CPlot.unselectAllZones() time.sleep(CPlot.__timeStep__) w.update() if (CTK.__BUSY__ == False): break if (CTK.__BUSY__ == True): CURRENTPOLYLINE.append((l[0],l[1],l[2])) if (CURRENTZONE == None): CTK.t = C.addBase2PyTree(CTK.t, 'CONTOURS', 1) base = Internal.getNodeFromName1(CTK.t, 'CONTOURS') nob = C.getNobOfBase(base, CTK.t) a = D.polyline(CURRENTPOLYLINE) CURRENTZONE = a CTK.add(CTK.t, nob, -1, a) ret = Internal.getParentOfNode(CTK.t, CURRENTZONE) noz = ret[1] else: a = D.polyline(CURRENTPOLYLINE) CURRENTZONE = a CTK.replace(CTK.t, nob, noz, a) (CTK.Nb, CTK.Nz) = CPlot.updateCPlotNumbering(CTK.t) CTK.TKTREE.updateApp() CPlot.render() CTK.__BUSY__ = False TTK.raiseButton(w) CPlot.setState(cursor=0) else: CTK.__BUSY__ = False ret = Internal.getParentOfNode(CTK.t, CURRENTZONE) a = D.polyline(CURRENTPOLYLINE) d = G.cart( (0,0,0), (1./(npts-1),1,1), (npts,1,1) ) a = G.map(a, d) surfaces = getSurfaces() if (surfaces != []): a = T.projectOrthoSmooth(a, surfaces) nob = C.getNobOfBase(ret[0], CTK.t) CTK.replace(CTK.t, nob, ret[1], a) #C._fillMissingVariables(CTK.t) (CTK.Nb, CTK.Nz) = CPlot.updateCPlotNumbering(CTK.t) CTK.TKTREE.updateApp() CPlot.render() CURRENTZONE = None CURRENTPOLYLINE = [] TTK.raiseButton(w) CPlot.setState(cursor=0)
def TRITFI(): if CTK.t == []: return if CTK.__MAINTREE__ <= 0: CTK.TXT.insert('START', 'Fail on a temporary tree.\n') CTK.TXT.insert('START', 'Error: ', 'Error') return nzs = CPlot.getSelectedZones() if len(nzs) == 0: CTK.TXT.insert('START', 'Selection is empty.\n') CTK.TXT.insert('START', 'Error: ', 'Error') return surf = getSurfaces() zones = [] for nz in nzs: nob = CTK.Nb[nz] + 1 noz = CTK.Nz[nz] z = CTK.t[2][nob][2][noz] z = C.convertBAR2Struct(z) zones.append(z) if len(zones) != 3: CTK.TXT.insert('START', 'TRI TFI takes 3 contours.\n') CTK.TXT.insert('START', 'Error: ', 'Error') return coords1 = C.getFields(Internal.__GridCoordinates__, zones[0])[0] coords2 = C.getFields(Internal.__GridCoordinates__, zones[1])[0] coords3 = C.getFields(Internal.__GridCoordinates__, zones[2])[0] [m1, m2, m3] = trimesh(coords1, coords2, coords3) if (m1 == 0): CTK.TXT.insert('START', m2 + '\n') CTK.TXT.insert('START', 'Error: ', 'Error') return m1 = C.convertArrays2ZoneNode('TFI1', [m1]) m2 = C.convertArrays2ZoneNode('TFI2', [m2]) m3 = C.convertArrays2ZoneNode('TFI3', [m3]) if surf != []: m1 = T.projectOrthoSmooth(m1, surf) m2 = T.projectOrthoSmooth(m2, surf) m3 = T.projectOrthoSmooth(m3, surf) CTK.saveTree() CTK.t = C.addBase2PyTree(CTK.t, 'MESHES') bases = Internal.getNodesFromName1(CTK.t, 'MESHES') nob = C.getNobOfBase(bases[0], CTK.t) for i in [m1, m2, m3]: CTK.add(CTK.t, nob, -1, i) CTK.TXT.insert('START', 'TRI-TFI mesh created.\n') #C._fillMissingVariables(CTK.t) (CTK.Nb, CTK.Nz) = CPlot.updateCPlotNumbering(CTK.t) CTK.TKTREE.updateApp() CPlot.render()
def renameVar(): if CTK.t == []: return CTK.saveTree() varp = VARS[11].get() varn = VARS[10].get() CTK.t = P.renameVars(CTK.t, [varp], [varn]) CTK.TXT.insert('START', 'Variable %s replaced.\n' % varp) CTK.TKTREE.updateApp() CTK.display(CTK.t)
def chimeraInfo(): if CTK.t == []: return nzs = CPlot.getSelectedZones() typename = VARS[1].get() CTK.saveTree() X._chimeraInfo(CTK.t, typename) CTK.TXT.insert('START', 'Field %s added.\n' % typename) CTK.TKTREE.updateApp() CTK.display(CTK.t)
def optimize(): if CTK.t == []: return if CTK.__MAINTREE__ <= 0: CTK.TXT.insert('START', 'Fail on a temporary tree.\n') CTK.TXT.insert('START', 'Error: ', 'Error') return dw = 1 if VARS[0].get() == 'inactive': dw = 0 depth = VARS[7].get() depth = int(depth) # Creation de l'arbre temporaire nzs = CPlot.getSelectedZones() if nzs == []: CTK.TXT.insert('START', 'Selection is empty.\n') CTK.TXT.insert('START', 'Error: ', 'Error') return # copie du premier niveau sans les enfants t = ['tree', None, [], 'CGNSTree_t'] for i in CTK.t[2]: t[2].append([i[0], i[1], [], i[3]]) for nz in nzs: nob = CTK.Nb[nz] + 1 noz = CTK.Nz[nz] z = CTK.t[2][nob][2][noz] t[2][nob][2].append(z) # Recuperation des priorites dans l'arbre bases = Internal.getBases(CTK.t) prios = [] for b in bases: cont = Internal.getNodesFromName1(b, '.Solver#Chimera') if cont != []: prio = Internal.getNodesFromName3(cont[0], 'Priority') if prio != []: prios.append(b[0]) prios.append(int(prio[0][1][0, 0])) # Optimisation du recouvrement CTK.saveTree() t = X.optimizeOverlap(t, double_wall=dw, priorities=prios) t = X.maximizeBlankedCells(t, depth=depth) c = [0 for x in xrange(len(bases))] for nz in nzs: nob = CTK.Nb[nz] + 1 noz = CTK.Nz[nz] CTK.t[2][nob][2][noz] = t[2][nob][2][c[nob - 1]] c[nob - 1] += 1 CTK.TXT.insert('START', 'Overlapping optimized.\n') CTK.TKTREE.updateApp() CTK.display(CTK.t)
def rotate(event=None): if CTK.t == []: return if CTK.__MAINTREE__ <= 0: CTK.TXT.insert('START', 'Fail on a temporary tree.\n') CTK.TXT.insert('START', 'Error: ', 'Error') return axis = VARS[2].get() angle = CTK.varsFromWidget(VARS[3].get(), type=1) if len(angle) == 1: angle = angle[0] X = None elif len(angle) == 4: X = (angle[1], angle[2], angle[3]) angle = angle[0] else: CTK.TXT.insert('START', 'Invalid angle or angle+rotation center.\n') CTK.TXT.insert('START', 'Error: ', 'Error') return if axis == 'around X': axe = (1., 0., 0.) elif axis == 'around Y': axe = (0., 1., 0.) elif axis == 'around Z': axe = (0., 0., 1.) elif axis == 'around view': pos = CPlot.getState('posCam') eye = CPlot.getState('posEye') axe = (eye[0] - pos[0], eye[1] - pos[1], eye[2] - pos[2]) else: axe = (0., 0., 1.) try: angle = float(angle) except: angle = 0. nzs = CPlot.getSelectedZones() if nzs == []: CTK.TXT.insert('START', 'Selection is empty.\n') CTK.TXT.insert('START', 'Error: ', 'Error') return CTK.saveTree() if X is None: sel = [] for nz in nzs: nob = CTK.Nb[nz] + 1 noz = CTK.Nz[nz] z = CTK.t[2][nob][2][noz] sel.append(z) X = G.barycenter(sel) for nz in nzs: nob = CTK.Nb[nz] + 1 noz = CTK.Nz[nz] a = T.rotate(CTK.t[2][nob][2][noz], (X[0], X[1], X[2]), axe, angle) CTK.replace(CTK.t, nob, noz, a) CTK.TXT.insert('START', 'Zones have been rotated.\n') CTK.TKTREE.updateApp() CPlot.render()
def importFile(event=None): if CTK.t == []: return s = VARS[4].get() s = s.split(';') try: t1 = [] for filename in s: if filename != '': t2 = C.convertFile2PyTree(filename) # Fusion des bases de t et t2 if t1 == []: t1 = t2 else: t1 = C.mergeTrees(t1, t2) except: CTK.TXT.insert('START', 'Import failed.\n') CTK.TXT.insert('START', 'Error: ', 'Error') return if t1 == []: CTK.TXT.insert('START', 'Import failed.\n') CTK.TXT.insert('START', 'Error: ', 'Error') return CTK.saveTree() nzs = CPlot.getSelectedZones() # Essaie de trouver une methode adaptee method = 1 # match by geom import sets zoneNames = sets.Set(C.getZoneNames(CTK.t, prefixByBase=False)) zoneNames1 = sets.Set(C.getZoneNames(t1, prefixByBase=False)) inter = zoneNames & zoneNames1 linter = len(inter) * 1. comp = min(len(zoneNames), len(zoneNames1)) * 1. if linter / comp > 0.9: method = 0 # try match by name (safer) if CTK.__MAINTREE__ <= 0 or nzs == []: CTK.t = P.importVariables(t1, CTK.t, method=method) else: zones = C.newPyTree(['Base']) for nz in nzs: nob = CTK.Nb[nz] + 1 noz = CTK.Nz[nz] zone = CTK.t[2][nob][2][noz] zones[2][1][2].append(zone) zones = P.importVariables(t1, zones, method=method) c = 0 for nz in nzs: nob = CTK.Nb[nz] + 1 noz = CTK.Nz[nz] CTK.t[2][nob][2][noz] = zones[2][1][2][c] c += 1 CTK.TXT.insert('START', 'Variable file %s imported.\n' % filename) #C._fillMissingVariables(CTK.t) (CTK.Nb, CTK.Nz) = CPlot.updateCPlotNumbering(CTK.t) CTK.TKTREE.updateApp() CTK.display(CTK.t) if CTK.TKPLOTXY is not None: CTK.TKPLOTXY.updateApp()
def applyOverlap(): if CTK.t == []: return CTK.saveTree() depth = VARS[7].get() depth = int(depth) CTK.t = X.applyBCOverlaps(CTK.t, depth=depth) CTK.t = X.setDoublyDefinedBC(CTK.t, depth=depth) CTK.TXT.insert('START', 'cellN variable modified near overlap BCs.\n') CTK.TKTREE.updateApp() CTK.display(CTK.t)
def uniformize(event=None): if CTK.t == []: return if CTK.__MAINTREE__ <= 0: CTK.TXT.insert('START', 'Fail on a temporary tree.\n') CTK.TXT.insert('START', 'Error: ', 'Error'); return nzs = CPlot.getSelectedZones() if nzs == []: CTK.TXT.insert('START', 'Selection is empty.\n') CTK.TXT.insert('START', 'Error: ', 'Error'); return type = VARS[2].get() density = -1; npts = 2; factor = -1 if type == 'Density': density = CTK.varsFromWidget(VARS[0].get(), 1) if len(density) != 1: CTK.TXT.insert('START', 'Invalid points density.\n') CTK.TXT.insert('START', 'Error: ', 'Error') density = density[0] elif type == 'Npts': npts = CTK.varsFromWidget(VARS[0].get(), 2) if len(npts) != 1: CTK.TXT.insert('START', 'Invalid number of points.\n') CTK.TXT.insert('START', 'Error: ', 'Error') npts = npts[0] elif type == 'Factor': factor = CTK.varsFromWidget(VARS[0].get(), 1) if len(factor) != 1: CTK.TXT.insert('START', 'Invalid number factor.\n') CTK.TXT.insert('START', 'Error: ', 'Error') CTK.saveTree() # Get first selected zone nz = nzs[0] nob = CTK.Nb[nz]+1 noz = CTK.Nz[nz] zone = CTK.t[2][nob][2][noz] dim = Internal.getZoneDim(zone) if dim[0] == 'Structured': if dim[2] != 1 and dim[3] != 1: fail = apply3D(density, npts, factor, ntype=0) elif dim[2] != 1 and dim[3] == 1: fail = apply2D(density, npts, factor, ntype=0) else: fail = uniformize1D(density, npts, factor) else: fail = uniformize1D(density, npts, factor) # all zones if not fail: CTK.TXT.insert('START', 'Uniformize successfull.\n') else: CTK.TXT.insert('START', 'Uniformize edge fails for at least one zone.\n') CTK.TXT.insert('START', 'Warning: ', 'Warning') #C._fillMissingVariables(CTK.t) (CTK.Nb, CTK.Nz) = CPlot.updateCPlotNumbering(CTK.t) CTK.TKTREE.updateApp() CPlot.render()
def extrudeWCurve(mode=0): if CTK.t == []: return if CTK.__MAINTREE__ <= 0: CTK.TXT.insert('START', 'Fail on a temporary tree.\n') CTK.TXT.insert('START', 'Error: ', 'Error') return # - curve - name = VARS[3].get() names = name.split(';') curve = [] for v in names: v = v.lstrip() v = v.rstrip() sname = v.split('/', 1) bases = Internal.getNodesFromName1(CTK.t, sname[0]) if bases != []: nodes = Internal.getNodesFromType1(bases[0], 'Zone_t') for z in nodes: if z[0] == sname[1]: curve.append(z) if len(curve) == 0: CTK.TXT.insert('START', 'Curve is incorrect.\n') CTK.TXT.insert('START', 'Error: ', 'Error') return nzs = CPlot.getSelectedZones() if nzs == []: CTK.TXT.insert('START', 'Selection is empty.\n') CTK.TXT.insert('START', 'Error: ', 'Error') return CTK.saveTree() fail = False errors = [] for nz in nzs: nob = CTK.Nb[nz] + 1 noz = CTK.Nz[nz] z = CTK.t[2][nob][2][noz] try: if mode == 0: z = D.lineDrive(z, curve) else: z = D.orthoDrive(z, curve) CTK.replace(CTK.t, nob, noz, z) except Exception as e: fail = True errors += [0, str(e)] if not fail: CTK.TXT.insert('START', 'Mesh extruded with curve(s).\n') else: Panels.displayErrors(errors, header='Error: extrusion') CTK.TXT.insert('START', 'Extrusion fails for at least one zone.\n') CTK.TXT.insert('START', 'Warning: ', 'Warning') (CTK.Nb, CTK.Nz) = CPlot.updateCPlotNumbering(CTK.t) CTK.TKTREE.updateApp() CPlot.render()
def connectNearMatch(): if CTK.t == []: return eps = VARS[2].get() eps = float(eps) ratio = VARS[3].get() ratio = CTK.varsFromWidget(ratio, type=2) if len(ratio) != 1 and len(ratio) != 3: CTK.TXT.insert('START', 'Invalid ratio for nearmatch.\n') CTK.TXT.insert('START', 'Error: ', 'Error') return if len(ratio) == 1: ratio = ratio[0] node = Internal.getNodeFromName(CTK.t, 'EquationDimension') if node is not None: ndim = Internal.getValue(node) else: CTK.TXT.insert('START', 'EquationDimension not found (tkState). Using 3D.\n') CTK.TXT.insert('START', 'Warning: ', 'Warning') ndim = 3 nzs = CPlot.getSelectedZones() CTK.saveTree() if CTK.__MAINTREE__ <= 0 or nzs == []: try: CTK.t = X.connectNearMatch(CTK.t, ratio=ratio, tol=eps, dim=ndim) CTK.TKTREE.updateApp() CTK.TXT.insert('START', 'n/m matching BCs successfully set.\n') except Exception as e: Panels.displayErrors([0, str(e)], header='Error: connectNearMatch') CTK.TXT.insert('START', 'n/m matching BCs failed.\n') CTK.TXT.insert('START', 'Error: ', 'Error') else: sel = [] for nz in nzs: nob = CTK.Nb[nz] + 1 noz = CTK.Nz[nz] z = CTK.t[2][nob][2][noz] sel.append(z) try: sel = X.connectNearMatch(sel, ratio=ratio, tol=eps, dim=ndim) c = 0 for nz in nzs: nob = CTK.Nb[nz] + 1 noz = CTK.Nz[nz] CTK.t[2][nob][2][noz] = sel[c] c += 1 CTK.TKTREE.updateApp() CTK.TXT.insert('START', 'n/m matching BCs successfully set.\n') except Exception as e: Panels.displayErrors([0, str(e)], header='Error: connectNearMatch') CTK.TXT.insert('START', 'n/m matching BCs failed.\n') CTK.TXT.insert('START', 'Error: ', 'Error') check()