# - 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")
Beispiel #3
0
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()
Beispiel #4
0
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)
#---------
Beispiel #5
0
# - 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)
Beispiel #6
0
# - 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')
Beispiel #9
0
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])
Beispiel #10
0
# - 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)
Beispiel #13
0
# 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)
Beispiel #14
0
# 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')
Beispiel #15
0
# - 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