# - blankIntersectingCells (pyTree) - import Converter.PyTree as C import Generator.PyTree as G import Geom.PyTree as D import Connector.PyTree as X import KCore.test as test import Transform.PyTree as T body = D.sphere6((0,0,0),1.,10) body = T.reorder(body,(-1,2,3)) dh = G.cart((0,0,0),(0.1,1,1),(10,1,1)) a = G.addNormalLayers(body,dh,niter=0) C._initVars(a,'centers:cellN',1.) C._initVars(a,'F',2.) a = C.addBC2Zone(a, 'wall1', 'BCWall', 'kmin') a = C.addBC2Zone(a, 'overlap1', 'BCOverlap', 'kmax' ) t = C.newPyTree(['Base',a]) t2 = X.blankIntersectingCells(t, depth=1) test.testT(t2,1)
# - deformMesh (pyTree) - import Generator.PyTree as G import Transform.PyTree as T import Converter.PyTree as C import Geom.PyTree as D a1 = D.sphere6((0, 0, 0), 1, 20) a1 = C.convertArray2Tetra(a1) a1 = T.join(a1) point = C.getValue(a1, 'GridCoordinates', 0) a2 = T.deformPoint(a1, point, (0.1, 0.05, 0.2), 0.5, 2.) delta = C.diffArrays(a2, a1) deltax = C.getField('DCoordinateX', delta) deltay = C.getField('DCoordinateY', delta) deltaz = C.getField('DCoordinateZ', delta) for noz in xrange(len(deltax)): deltax[noz][0] = 'dx' deltay[noz][0] = 'dy' deltaz[noz][0] = 'dz' a1 = C.setFields(deltax, a1, 'nodes') a1 = C.setFields(deltay, a1, 'nodes') a1 = C.setFields(deltaz, a1, 'nodes') m = D.sphere6((0, 0, 0), 2, 20) m = T.deformMesh(m, a1) C.convertPyTree2File(m, "out.cgns")
def generate(event=None): CTK.saveTree() N = CTK.varsFromWidget(VARS[0].get(), type=2) if len(N) != 1: CTK.TXT.insert('START', 'NPts is incorrect.\n') return N = N[0] eltType = VARS[1].get() surfType = VARS[2].get() if surfType == 'Sphere': s = D.sphere6((0, 0, 0), 0.5, N=N) xc = 0 yc = 0 zc = 0 elif surfType == 'Plane': h = 1. / (N - 1) s1 = G.cart((-0.5, -0.5, -0.5), (h, h, h), (N, 1, N)) s = [s1] xc = 0 yc = 0 zc = 0 elif surfType == 'Cube': h = 1. / (N - 1) s1 = G.cart((-0.5, -0.5, -0.5), (h, h, h), (N, N, 1)) s1 = T.reorder(s1, (-1, 2, 3)) s2 = G.cart((-0.5, -0.5, 0.5), (h, h, h), (N, N, 1)) s3 = G.cart((-0.5, -0.5, -0.5), (h, h, h), (N, 1, N)) s4 = G.cart((-0.5, 0.5, -0.5), (h, h, h), (N, 1, N)) s4 = T.reorder(s4, (-1, 2, 3)) s5 = G.cart((-0.5, -0.5, -0.5), (h, h, h), (1, N, N)) s5 = T.reorder(s5, (1, -2, 3)) s6 = G.cart((0.5, -0.5, -0.5), (h, h, h), (1, N, N)) s = [s1, s2, s3, s4, s5, s6] xc = 0 yc = 0 zc = 0 elif surfType == 'Tetra': m1 = meshTri([0, 0, 0], [1, 0, 0], [0, 1, 0], N=N) m1 = T.reorder(m1, (-1, 2, 3)) m2 = meshTri([0, 0, 0], [1, 0, 0], [0, 0, 1], N=N) m3 = meshTri([0, 0, 0], [0, 1, 0], [0, 0, 1], N=N) m3 = T.reorder(m3, (-1, 2, 3)) m4 = meshTri([1, 0, 0], [0, 1, 0], [0, 0, 1], N=N) s = m1 + m2 + m3 + m4 xc = 0.5 yc = 0.5 zc = 0.5 elif surfType == 'Pyramid': h = 1. / (2 * N - 2) m0 = G.cart((-0.5, -0.5, -0.5), (h, h, h), (2 * N - 1, 2 * N - 1, 1)) m0 = T.reorder(m0, (-1, 2, 3)) m1 = meshTri([-0.5, -0.5, -0.5], [0.5, -0.5, -0.5], [0, 0, 0.5], N=N) m2 = meshTri([-0.5, -0.5, -0.5], [-0.5, 0.5, -0.5], [0, 0, 0.5], N=N) m2 = T.reorder(m2, (-1, 2, 3)) m3 = meshTri([-0.5, 0.5, -0.5], [0.5, 0.5, -0.5], [0, 0, 0.5], N=N) m3 = T.reorder(m3, (-1, 2, 3)) m4 = meshTri([0.5, -0.5, -0.5], [0.5, 0.5, -0.5], [0, 0, 0.5], N=N) s = [m0] + m1 + m2 + m3 + m4 xc = 0. yc = 0. zc = 0. elif surfType == 'Cylinder': m0 = meshCircle((0, 0, -0.5), 0.5, N) m1 = meshCircle((0, 0, 0.5), 0.5, N) m1 = T.reorder(m1, (-1, 2, 3)) m2 = D.circle((0, 0, -0.5), 0.5, tetas=-45, tetae=-45 + 360, N=4 * N - 3) l = D.line((0, 0, -0.5), (0, 0, 0.5), N=N) m2 = D.lineDrive(m2, l) s = m0 + m1 + [m2] xc = 0. yc = 0. zc = 0. elif surfType == 'Cone': s = [D.cone((0., 0, 0), 1, 0.1, 1, N=N)] (xc, yc, zc) = G.barycenter(s) else: # Geom parametrics surfaces formula = base[surfType] if formula.replace('{u}', '') == formula: # curve s = D.curve(base[surfType], N) else: s = D.surface(base[surfType], N) (xc, yc, zc) = G.barycenter(s) s = [s] if eltType == 'TRI': s = C.convertArray2Tetra(s) s = T.join(s) s = G.close(s) elif eltType == 'QUAD': s = C.convertArray2Hexa(s) s = T.join(s) s = G.close(s) posCam = CPlot.getState('posCam') posEye = CPlot.getState('posEye') dirCam = CPlot.getState('dirCam') s = T.translate(s, (posEye[0] - xc, posEye[1] - yc, posEye[2] - zc)) lx = posEye[0] - posCam[0] ly = posEye[1] - posCam[1] lz = posEye[2] - posCam[2] if lx * lx + ly * ly + lz * lz < 1.e-10: lx = -1 if (dirCam[0] * dirCam[0] + dirCam[1] * dirCam[1] + dirCam[2] * dirCam[2] == 0.): dirCam = (0, 0, 1) ll = math.sqrt(lx * lx + ly * ly + lz * lz) s = T.homothety(s, (posEye[0], posEye[1], posEye[2]), 0.5 * ll) ux = dirCam[1] * lz - dirCam[2] * ly uy = dirCam[2] * lx - dirCam[0] * lz uz = dirCam[0] * ly - dirCam[1] * lx s = T.rotate(s, (posEye[0], posEye[1], posEye[2]), ((1, 0, 0), (0, 1, 0), (0, 0, 1)), ((-ux, -uy, -uz), (lx, ly, lz), dirCam)) CTK.t = C.addBase2PyTree(CTK.t, 'SURFACES', 2) b = Internal.getNodeFromName1(CTK.t, 'SURFACES') if eltType == 'TRI' or eltType == 'QUAD': nob = C.getNobOfBase(b, CTK.t) CTK.add(CTK.t, nob, -1, s) else: nob = C.getNobOfBase(b, CTK.t) if CP.__slot__ is None: CTK.t[2][nob][2] += s CTK.display(CTK.t) else: for i in s: CTK.add(CTK.t, nob, -1, i) #C._fillMissingVariables(CTK.t) CTK.TXT.insert('START', 'Surface created.\n') (CTK.Nb, CTK.Nz) = CPlot.updateCPlotNumbering(CTK.t) CTK.TKTREE.updateApp() CPlot.render()
import Converter.PyTree as C import Generator.PyTree as G import Converter.Internal as Internal import Connector.PyTree as X import Geom.PyTree as D import KCore.test as test d = 2 a = D.sphere6((0, 0, 0), 0.5, N=20) dk = G.cart((0, 0, 0), (0.01, 1, 1), (11, 1, 1)) a = G.addNormalLayers(a, dk) t = C.newPyTree(['Base']) t[2][1][2] = a t = X.connectMatch(t, dim=3) t = Internal.addGhostCells(t, t, d, adaptBCs=1) #--------- # Centers #--------- t = C.initVars(t, 'centers:F=0.') tc = C.node2Center(t) tc = C.initVars(tc, 'F={CoordinateX}*{CoordinateY}') # stockage direct t1 = X.setInterpDataForGhostCells__(t, tc, storage='direct', loc='centers') t1 = X.setInterpTransfers(t1, tc, variables=['F']) test.testT(t1, 1) # stockage inverse tc1 = X.setInterpDataForGhostCells__(t, tc, storage='inverse', loc='centers') t1 = X.setInterpTransfers(t, tc1, variables=['F']) test.testT(t1, 2) #---------
# - deformMesh(pyTree) - # tests en structure import Generator.PyTree as G import Transform.PyTree as T import Converter.PyTree as C import Geom.PyTree as D import KCore.test as test a1 = D.sphere6((0, 0, 0), 1, N=18) a1 = C.convertArray2Tetra(a1) a1 = T.join(a1) point = (C.getValue(a1, 'CoordinateX', 0), C.getValue(a1, 'CoordinateY', 0), C.getValue(a1, 'CoordinateZ', 0)) a2 = T.deformPoint(a1, point, (0.1, 0.05, 0.2), 0.5, 2.) delta = C.diffArrays(a2, a1) deltax = C.getField('DCoordinateX', delta) deltay = C.getField('DCoordinateY', delta) deltaz = C.getField('DCoordinateZ', delta) for noz in xrange(len(deltax)): deltax[noz][0] = 'dx' deltay[noz][0] = 'dy' deltaz[noz][0] = 'dz' a1 = C.setFields(deltax, a1, 'nodes') a1 = C.setFields(deltay, a1, 'nodes') a1 = C.setFields(deltaz, a1, 'nodes') # 2D paroi m = D.sphere6((0, 0, 0), 1, N=18) m = T.deformMesh(m, a1) test.testT(m, 1)
# - quad2Pyra (pyTree) - import Generator.PyTree as G import Converter.PyTree as C import Geom.PyTree as D import Transform.PyTree as T a = D.sphere6((0,0,0), 1, N=10) a = C.convertArray2Hexa(a) a = T.join(a) a = G.close(a) b = G.quad2Pyra(a, hratio=1.) C.convertPyTree2File(b, 'out.cgns')
# -projectCloudSolution(pyTree) import Converter.PyTree as C import Geom.PyTree as D import Post.PyTree as P import Transform.PyTree as T import Generator.PyTree as G import KCore.test as test a = D.sphere((0, 0, 0), 1., N=20) a = C.convertArray2Tetra(a) a = G.close(a) b = D.sphere6((0, 0, 0), 1., N=15) b = C.convertArray2Tetra(b) b = T.join(b) pts = C.convertArray2Node(b) C._initVars(pts, 'F={CoordinateX}*{CoordinateY}') C._initVars(a, 'F=0.') a = P.projectCloudSolution(pts, a) test.testT(a)
# - sphere6 (pyTree) - import Geom.PyTree as D import Converter.PyTree as C A = D.sphere6((0, 0, 0), 1., 20) b = D.sphere6((3, 0, 0), 1.2, N=20, ntype='QUAD') C.convertPyTree2File(A + [b], 'out.cgns')
c1 = C.initVars(c1, 'centers:celln', 1.) c1 = C.initVars(c1, 'Density', dens, ['CoordinateX', 'CoordinateY']) c2 = G.cart((0, 0, 0), (0.01, 0.01, 1), (51, 81, 2)) c2 = T.rotate(c2, (0, 0, 0), (0, 0, 1), 0.2) c2 = C.addBC2Zone(c2, 'wall1', 'BCWall', 'imin') c2 = C.addBC2Zone(c2, 'overlap1', 'BCOverlap', 'imax') c2 = C.initVars(c2, 'centers:celln', 1.) c2 = C.initVars(c2, 'Density', dens, ['CoordinateX', 'CoordinateY']) a = T.patch(c1, c2, (1, 1, 1)) t = C.newPyTree(['Base', 3]) t[2][1][2].append(a) test.testT(t, 1) # multizone a = D.sphere6((0, 0, 0), 1, N=20) t = C.newPyTree(['Base', 3]) t[2][1][2] += a k = 0 t2 = T.subzone(t, (1, 1, k + 1), (-1, -1, k + 1)) t2 = T.smooth(t2, eps=0.5, niter=20, projConstraints=Internal.getNodesFromType(t2, 'Zone_t')) t = T.patch(t, t2, (1, 1, k + 1)) test.testT(t, 3) # cas 3D c1 = G.cart((0, 0, 0), (0.01, 0.01, 1), (201, 101, 20)) c1 = C.addBC2Zone(c1, 'wall1', 'BCWall', 'imin') c1 = C.addBC2Zone(c1, 'match1', 'BCMatch', 'imax', c1, 'imin', [1, 2, 3])
# - sphere6 (pyTree) - import Geom.PyTree as D import Converter.PyTree as C A = D.sphere6((0, 0, 0), 1., 20) C.convertPyTree2File(A, 'out.cgns')
# - display HO - import Geom.PyTree as GP import Converter.PyTree as C import Transform.PyTree as T import Converter.Internal as Ci import CPlot.PyTree as CPlot from math import sqrt import sys qsph = GP.sphere6((0., 0., 0.), 1., N=3, ntype='QUAD') qsph = C.convertLO2HO(qsph, 1) for i in range(C.getNPts(qsph)): x = C.getValue(qsph, 'CoordinateX', i) y = C.getValue(qsph, 'CoordinateY', i) z = C.getValue(qsph, 'CoordinateZ', i) nrm = sqrt(x * x + y * y + z * z) x /= nrm y /= nrm z /= nrm C.setValue(qsph, 'CoordinateX', i, x) C.setValue(qsph, 'CoordinateY', i, y) C.setValue(qsph, 'CoordinateZ', i, z) tsph = GP.sphere6((0, 0, 0), 1., N=3, ntype='TRI') tsph = C.convertLO2HO(tsph, 0) for i in range(C.getNPts(tsph)): x = C.getValue(tsph, 'CoordinateX', i) y = C.getValue(tsph, 'CoordinateY', i) z = C.getValue(tsph, 'CoordinateZ', i) nrm = sqrt(x * x + y * y + z * z)
# sur une surface TRI a = D.sphere((0, 0, 0), 1, 50) a = C.convertArray2Tetra(a) a = G.addNormalLayers(a, d, niter=2) test.testT(a, 2) # sur une surface QUAD a = D.sphere((0, 0, 0), 1, 50) a = C.convertArray2Hexa(a) a = G.addNormalLayers(a, d, niter=2) test.testT(a, 3) # sur une liste de zones structurees d = G.cart((0., 0., 0.), (0.1, 1, 1), (3, 1, 1)) a = D.sphere6((0, 0, 0), 1, 20) a = C.initVars(a, 'Density', 2.) a = C.initVars(a, 'centers:cellN', 1.) a = G.addNormalLayers(a, d, niter=2) test.testT(a, 4) # sur une liste de TRI a = D.sphere6((0, 0, 0), 1, 20) a = C.convertArray2Tetra(a) a = C.initVars(a, 'Density', 2.) a = C.initVars(a, 'centers:cellN', 1.) a = G.addNormalLayers(a, d, niter=2) test.testT(a, 5) # sur une liste de QUAD a = D.sphere6((0, 0, 0), 1, 20)
# join avec les coordonnees et champs desordonnes import Converter.PyTree as C import Transform.PyTree as T import Geom.PyTree as D import Converter.Internal as Internal import KCore.test as test a = D.sphere6((0.,0.,0.),1.,N=10) C._initVars(a,'Fx=1.') C._initVars(a,'Fy=2.') C._initVars(a,'Fz=3.') C._initVars(a[1],'toto=0.') noz = 0 for z in Internal.getZones(a): if noz != 1: C._initVars(z,'{centers:Gx}=2.') C._initVars(z,'{centers:Gy}=1.') else: C._initVars(z,'{centers:Gy}=1.') C._initVars(z,'{centers:Gx}=2.') GC = Internal.getNodeFromType(z,'GridCoordinates_t') Internal._rmNodesFromName(z,GC[0]) if noz == 1: XA = Internal.getNodeFromName(GC,'CoordinateX') Internal._rmNodesFromName(GC,'CoordinateX') GC[2].append(XA) z[2].append(GC) noz+=1 res = T.join(a[0:2]) test.testT(res,1)
# Compute distance to walls prior to elsA computations import numpy import Converter.PyTree as C import Converter.Internal as Internal import Converter import Dist2Walls.PyTree as DTW import Geom.PyTree as D import Generator.PyTree as G import Connector.PyTree as X # Creation of the structured multiblock mesh # kmin=1 define the wall BC m = D.sphere6((0, 0, 0), 1., N=10) di = G.cart((0., 0., 0.), (0.1, 1., 1.), (11, 1, 1)) m = G.addNormalLayers(m, di) m = C.addBC2Zone(m, 'wall', 'BCWall', 'kmin') m = C.addBC2Zone(m, 'nref', 'BCFarfield', 'kmax') m = X.connectMatch(m) t = C.newPyTree(['Base']) t[2][1][2] = m t = C.initVars(t, 'centers:cellN', 1.) # # Get the wall surfaces # walls = C.extractBCOfType(t, 'BCWall') walls += C.extractBCOfType(t, 'BCWallViscous') walls += C.extractBCOfType(t, 'BCWallInviscid')
# - blankCellsTri (array) - 'NODE IN' import Converter.PyTree as C import Connector.PyTree as X import Generator.PyTree as G import Geom.PyTree as D import Post.PyTree as P import KCore.test as test import Transform.PyTree as T import numpy, math import time import os, sys # Test 1 # Tet mask s1 = D.sphere6((0,0,0), 1., 20, ntype='TRI') s2 = D.sphere6((1,0,0), 1.5, N=20, ntype='TRI') s2 = T.reorder(s2, (1,)) #C.convertPyTree2File(s2, 's2.cgns') snear = 0.15 hWall = 0.1 raison = 1.2 smoothIter = 20 nlayer = 3 dlayer = hWall*(1.-raison**nlayer)/(1.-raison); d = G.cart((0.,0.,0.), (dlayer/nlayer,1,1), (nlayer,1,1)) penta = G.addNormalLayers(s2, d, check=0, niter=smoothIter) #C.convertPyTree2File(penta, 'penta.cgns') t = C.newPyTree(['Pentas']); t[2][1][2].append(penta) # Blanking