Exemple #1
0
 def searchPoint(self, mesh, probe):
 	cells = mesh.getCells()
     xCells = self.geomFields.coordinate[cells]
     xCellsA = xCells.asNumPyArray()
 	cloestPoints = fvmbaseExt.newIntArray(1)
     cloestPointsA = cloestPoints.asNumPyArray()
 	target = fvmbaseExt.VecD3()
     target[0] = probe[0]
     target[1] = probe[1]
     target[2] = probe[2]
 	search = fvmbaseExt.KSearchTree(xCells)
     search.findNeighbors(target, 1, cloestPoints)
     point = cloestPointsA[0]
    	return point
Exemple #2
0
 def searchPoint(self, mesh, probe):
     cells = mesh.getCells()
     xCells = self.geomFields.coordinate[cells]
     xCellsA = xCells.asNumPyArray()
     cloestPoints = fvmbaseExt.newIntArray(1)
     cloestPointsA = cloestPoints.asNumPyArray()
     target = fvmbaseExt.VecD3()
     target[0] = probe[0]
     target[1] = probe[1]
     target[2] = probe[2]
     search = fvmbaseExt.KSearchTree(xCells)
     search.findNeighbors(target, 1, cloestPoints)
     point = cloestPointsA[0]
     return point
  def makeMesh(self):
    nodeCoordsN = models.newVec3Array(self.nNodes)
    nodeCoordsA = nodeCoordsN.asNumPyArray()

    for n in range(self.nNodes):
      nodeCoordsA[n,0] = self.nodes[n].x
      nodeCoordsA[n,1] = self.nodes[n].y
      nodeCoordsA[n,2] = self.nodes[n].z

    nFaceZones = 7
    faceGroupCountN = fvmbaseExt.newIntArray(nFaceZones)
    faceGroupCount = faceGroupCountN.asNumPyArray()

    #interior faces
    faceGroupCount[0] = len(self.interiorFaces)
    #xmin faces
    faceGroupCount[1] = len(self.xminFaces)
    #xmax faces
    faceGroupCount[2] = len(self.xmaxFaces)
    #ymin faces
    faceGroupCount[3] = len(self.yminFaces)
    #ymax faces
    faceGroupCount[4] = len(self.ymaxFaces)
    #zmin faces
    faceGroupCount[5] = len(self.zminFaces)
    #zmax faces
    faceGroupCount[6] = len(self.zmaxFaces)
    
    ## allocate arrays for face nodes and cells
    faceNodeCountN = fvmbaseExt.newIntArray(self.nFaces)
    faceNodesN = fvmbaseExt.newIntArray(self.nFaces*4)
    faceCellsN = fvmbaseExt.newIntArray(self.nFaces*2)
    faceNodesA = faceNodesN.asNumPyArray()
    faceCellsA = faceCellsN.asNumPyArray()

    faceNodeCountA = faceNodeCountN.asNumPyArray()
    faceNodeCountA[:] = 4
    
    ## reshape for convenience
    faceNodes = faceNodesA.reshape((self.nFaces,4))
    faceCells = faceCellsA.reshape((self.nFaces,2))

    nf = 0
    for f in self.interiorFaces:
      faceNodes[nf,0] = f.nodes[0].nID
      faceNodes[nf,1] = f.nodes[1].nID
      faceNodes[nf,2] = f.nodes[2].nID
      faceNodes[nf,3] = f.nodes[3].nID

      faceCells[nf,0] = f.cell0.cID
      faceCells[nf,1] = f.cell1.cID

      nf = nf + 1

    for f in self.xminFaces:
      faceNodes[nf,0] = f.nodes[0].nID
      faceNodes[nf,1] = f.nodes[1].nID
      faceNodes[nf,2] = f.nodes[2].nID
      faceNodes[nf,3] = f.nodes[3].nID

      faceCells[nf,0] = f.cell0.cID
      faceCells[nf,1] = f.cell1.cID

      nf = nf + 1

    for f in self.xmaxFaces:
      faceNodes[nf,0] = f.nodes[0].nID
      faceNodes[nf,1] = f.nodes[1].nID
      faceNodes[nf,2] = f.nodes[2].nID
      faceNodes[nf,3] = f.nodes[3].nID

      faceCells[nf,0] = f.cell0.cID
      faceCells[nf,1] = f.cell1.cID

      nf = nf + 1

    for f in self.yminFaces:
      faceNodes[nf,0] = f.nodes[0].nID
      faceNodes[nf,1] = f.nodes[1].nID
      faceNodes[nf,2] = f.nodes[2].nID
      faceNodes[nf,3] = f.nodes[3].nID

      faceCells[nf,0] = f.cell0.cID
      faceCells[nf,1] = f.cell1.cID

      nf = nf + 1

    for f in self.ymaxFaces:
      faceNodes[nf,0] = f.nodes[0].nID
      faceNodes[nf,1] = f.nodes[1].nID
      faceNodes[nf,2] = f.nodes[2].nID
      faceNodes[nf,3] = f.nodes[3].nID

      faceCells[nf,0] = f.cell0.cID
      faceCells[nf,1] = f.cell1.cID

      nf = nf + 1

    for f in self.zminFaces:
      faceNodes[nf,0] = f.nodes[0].nID
      faceNodes[nf,1] = f.nodes[1].nID
      faceNodes[nf,2] = f.nodes[2].nID
      faceNodes[nf,3] = f.nodes[3].nID

      faceCells[nf,0] = f.cell0.cID
      faceCells[nf,1] = f.cell1.cID

      nf = nf + 1

    for f in self.zmaxFaces:
      faceNodes[nf,0] = f.nodes[0].nID
      faceNodes[nf,1] = f.nodes[1].nID
      faceNodes[nf,2] = f.nodes[2].nID
      faceNodes[nf,3] = f.nodes[3].nID

      faceCells[nf,0] = f.cell0.cID
      faceCells[nf,1] = f.cell1.cID

      nf = nf + 1
    
    pdb.set_trace()
    return fvmbaseExt.Mesh(3, self.nCells, nodeCoordsN, faceCellsN, 
                           faceNodesN, faceNodeCountN, faceGroupCountN)
Exemple #4
0
reader.importFlowBCs(fmodel)
fmodel.init()

t0 = time.time()
solid = fvmbaseExt.MPM()
octree = fvmbaseExt.Octree()
octree.Impl(mesh0, geomFields)

option = 1
nradius = 50
ntheta = 320
nparticles = nradius * ntheta

px = particle_coordinates(mesh0, "cylinder2d", nradius, ntheta, 0.5, 0.5, 0)
pv = geomFields.coordinate[mesh0.getCells()].newSizedClone(int(nparticles))
pType = fvmbaseExt.newIntArray(nparticles)
pType.asNumPyArray()[:] = 1

print "px  = ", px.asNumPyArray()
print "size = ", size(px.asNumPyArray())
solid.setCoordinates(px)
solid.setVelocities(pv)
solid.setTypes(pType)
particles = solid.getParticles(nparticles)
geomFields.coordinate[particles] = px
flowFields.velocity[particles] = pv

fvmbaseExt.CellMark_Impl(mesh0, geomFields, fileBase, octree, solid, option)

fvmParticles = fvmbaseExt.FVMParticles(meshes)
Exemple #5
0
def generate2DMesh(la, lb, ta, tb, tc, nxa, nxb, nxc, nya, nyb):


    # number of cells
    imax = 2*(nxa + nxc) + nxb
    jmax = nya + nyb

    # cell lengths in x and y 
    dx = numpy.zeros(shape=(imax,), dtype='double')
    dy = numpy.zeros(shape=(jmax,), dtype='double')

    dxa = la/nxa
    dxb = lb/nxb
    dxc = tc/nxc

    dx[0:nxa] = dxa
    dx[nxa:nxa+nxc] = dxc
    dx[nxa+nxc:nxa+nxc+nxb] = dxb
    dx[nxa+nxc+nxb:nxa+2*nxc+nxb] = dxc
    dx[nxa+2*nxc+nxb:] = dxa
    
    dya = ta/nya
    dyb = tb/nyb

    dy[0:nya] = dya
    dy[nya:] = dyb
    
    xcoord = numpy.zeros(shape=(imax+1,), dtype='double')
    ycoord = numpy.zeros(shape=(jmax+1,), dtype='double')

    xcoord[0] = ycoord[0] = 0
    
    for i in range(0,imax):
        xcoord[i+1] = xcoord[i] + dx[i]
    for j in range(0,jmax):
        ycoord[j+1] = ycoord[j] + dy[j]

    ## move the x centroid to center of beam
    xmax = xcoord[imax]
    xcoord[:] -= xmax/2.0
    
    # this will store the node index in the mesh for the cartesian node location
    nodeIndex = numpy.zeros(shape=(imax+1,jmax+1), dtype='int')
    nodeIndex[:,:] = -1

    nNodes = 0
    ## mark nodes in left anchor
    for j in range(0, nya+1):
        for i in range(0, nxa+nxc+1):
            if nodeIndex[i,j] == -1:
                nodeIndex[i,j] = nNodes
                nNodes += 1

    ## mark nodes in beam
    for j in range(nya, jmax+1):
        for i in range(nxa, nxa+2*nxc+nxb+1):
            if nodeIndex[i,j] == -1:
                nodeIndex[i,j] = nNodes
                nNodes += 1
                
    ## mark nodes in right anchor
    for j in range(0, nya+1):
        for i in range(nxa+nxc+nxb, imax+1):
            if nodeIndex[i,j] == -1:
                nodeIndex[i,j] = nNodes
                nNodes += 1

    nodeCoordsN = models.newVec3Array(nNodes)
    nodeCoordsA = nodeCoordsN.asNumPyArray()

    nodeCoordsA[:,2] = 0.
    for i in range(0, imax+1):
        for j in range(0, jmax+1):
            ni = nodeIndex[i,j]
            if (ni >= 0):
                nodeCoordsA[ni,0] = xcoord[i]
                nodeCoordsA[ni,1] = ycoord[j]
                

    # this will store the cell index in the mesh for the cartesian cell location
    cellIndex = numpy.zeros(shape=(imax,jmax), dtype='int')
    cellIndex[:,:] = -1

    nCells = 0
    ## mark cells in left anchor
    for j in range(0, nya):
        for i in range(0, nxa+nxc):
            if cellIndex[i,j] == -1:
                cellIndex[i,j] = nCells
                nCells += 1

    ## mark cells in beam
    for j in range(nya, jmax):
        for i in range(nxa, nxa+2*nxc+nxb):
            if cellIndex[i,j] == -1:
                cellIndex[i,j] = nCells
                nCells += 1
                
    ## mark cells in right anchor
    for j in range(0, nya):
        for i in range(nxa+nxc+nxb, imax):
            if cellIndex[i,j] == -1:
                cellIndex[i,j] = nCells
                nCells += 1
                

    nFacesInterior = 0

    ## interior faces of left and right anchors

    nFacesInterior += (nxa+nxc-1)*nya + (nya-1)*(nxa+nxc)
    nFacesInterior += (nxa+nxc-1)*nya + (nya-1)*(nxa+nxc)

    ## interior faces of beam

    nFacesInterior += (nxb+2*nxc-1)*nyb + (nyb-1)*(nxb+2*nxc)

    ## interior faces between anchor and beam

    nFacesInterior += 2*nxc

    nFaceZones = 8

    faceGroupCountN = fvmbaseExt.newIntArray(nFaceZones)
    faceGroupCount = faceGroupCountN.asNumPyArray()

    faceGroupCount[0] = nFacesInterior 

    # bottom of anchors
    faceGroupCount[1] = 2*(nxa+nxc)


    #outer sides of anchors
    faceGroupCount[2] = 2*nya

    #inner sides of anchors
    faceGroupCount[3] = 2*nya

    #beam bottom
    faceGroupCount[4] = nxb

    #beam top
    faceGroupCount[5] = nxb + 2*nxc

    #beam sides
    faceGroupCount[6] = 2*nyb

    # top of anchors
    faceGroupCount[7] = 2*nxa

    nFaces = int(faceGroupCount.sum())

    ## allocate arrays for face nodes 
    faceNodeCountN = fvmbaseExt.newIntArray(nFaces)
    faceNodesN = fvmbaseExt.newIntArray(nFaces*2)
    faceCellsN = fvmbaseExt.newIntArray(nFaces*2)

    faceNodesA = faceNodesN.asNumPyArray()
    faceCellsA = faceCellsN.asNumPyArray()

    faceNodeCountA = faceNodeCountN.asNumPyArray()
    faceNodeCountA[:] = 2
    
    ## reshape for convenience

    faceNodes = faceNodesA.reshape((nFaces,2))
    faceCells = faceCellsA.reshape((nFaces,2))
    
    # interior x faces of left anchor

    nf = 0
    for j in range(0, nya):
        for i in range(0, nxa+nxc-1):
            faceNodes[nf,0] = nodeIndex[i+1,j]
            faceNodes[nf,1] = nodeIndex[i+1,j+1]

            faceCells[nf,0] = cellIndex[i,j]
            faceCells[nf,1] = cellIndex[i+1,j]

            nf += 1

    # interior y faces of left anchor

    for j in range(0, nya-1):
        for i in range(0, nxa+nxc):
            faceNodes[nf,0] = nodeIndex[i+1,j+1]
            faceNodes[nf,1] = nodeIndex[i,j+1]

            faceCells[nf,0] = cellIndex[i,j]
            faceCells[nf,1] = cellIndex[i,j+1]

            nf += 1


    # interior x faces of beam

    for j in range(nya, jmax):
        for i in range(nxa, nxa+2*nxc+nxb-1):
            faceNodes[nf,0] = nodeIndex[i+1,j]
            faceNodes[nf,1] = nodeIndex[i+1,j+1]

            faceCells[nf,0] = cellIndex[i,j]
            faceCells[nf,1] = cellIndex[i+1,j]

            nf += 1

    # interior y faces of beam

    for j in range(nya, jmax-1):
        for i in range(nxa, nxa+2*nxc+nxb):
            faceNodes[nf,0] = nodeIndex[i+1,j+1]
            faceNodes[nf,1] = nodeIndex[i,j+1]

            faceCells[nf,0] = cellIndex[i,j]
            faceCells[nf,1] = cellIndex[i,j+1]

            nf += 1
            
    ## interior x faces in right anchor
    for j in range(0, nya):
        for i in range(nxa+nxc+nxb, imax-1):
            faceNodes[nf,0] = nodeIndex[i+1,j]
            faceNodes[nf,1] = nodeIndex[i+1,j+1]

            faceCells[nf,0] = cellIndex[i,j]
            faceCells[nf,1] = cellIndex[i+1,j]

            nf += 1

    ## interior y faces in right anchor
    for j in range(0, nya-1):
        for i in range(nxa+nxc+nxb, imax):
            faceNodes[nf,0] = nodeIndex[i+1,j+1]
            faceNodes[nf,1] = nodeIndex[i,j+1]

            faceCells[nf,0] = cellIndex[i,j]
            faceCells[nf,1] = cellIndex[i,j+1]

            nf += 1

    ## left interior faces between anchor and beam

    j = nya

    for i in range(nxa, nxa+nxc):
        faceNodes[nf,0] = nodeIndex[i+1,j]
        faceNodes[nf,1] = nodeIndex[i,j]
        
        faceCells[nf,0] = cellIndex[i,j-1]
        faceCells[nf,1] = cellIndex[i,j]
        
        nf += 1
        
    ## right interior faces between anchor and beam

    for i in range(nxa+nxc+nxb, nxa+2*nxc+nxb):
        faceNodes[nf,0] = nodeIndex[i+1,j]
        faceNodes[nf,1] = nodeIndex[i,j]
        
        faceCells[nf,0] = cellIndex[i,j-1]
        faceCells[nf,1] = cellIndex[i,j]
        
        nf += 1
        
    
    
    nb = 0

    # left anchor bottom
    j = 0
    for i in range(0, nxa+nxc):
        faceNodes[nf,0] = nodeIndex[i,j]
        faceNodes[nf,1] = nodeIndex[i+1,j]
        
        faceCells[nf,0] = cellIndex[i,j]
        faceCells[nf,1] = nCells + nb
        
        nf += 1
        nb += 1

    # right anchor bottom

    for i in range(nxa+nxc+nxb,imax):
        faceNodes[nf,0] = nodeIndex[i,j]
        faceNodes[nf,1] = nodeIndex[i+1,j]
        
        faceCells[nf,0] = cellIndex[i,j]
        faceCells[nf,1] = nCells + nb
        
        nf += 1
        nb += 1
        
    # left anchor outer side
    i = 0
    for j in range(0, nya):
        faceNodes[nf,0] = nodeIndex[i,j+1]
        faceNodes[nf,1] = nodeIndex[i,j]
        
        faceCells[nf,0] = cellIndex[i,j]
        faceCells[nf,1] = nCells + nb

        nf += 1
        nb += 1
        
    # right anchor outer side
    i = imax
    for j in range(0, nya):
        faceNodes[nf,0] = nodeIndex[i,j]
        faceNodes[nf,1] = nodeIndex[i,j+1]
        
        faceCells[nf,0] = cellIndex[i-1,j]
        faceCells[nf,1] = nCells + nb

        nf += 1
        nb += 1
        
    # left anchor inner side
    i = nxa+nxc
    for j in range(0, nya):
        faceNodes[nf,0] = nodeIndex[i,j]
        faceNodes[nf,1] = nodeIndex[i,j+1]
        
        faceCells[nf,0] = cellIndex[i-1,j]
        faceCells[nf,1] = nCells + nb

        nf += 1
        nb += 1
        

    # right anchor inner side
    i = nxa+nxc+nxb
    for j in range(0, nya):
        faceNodes[nf,0] = nodeIndex[i,j+1]
        faceNodes[nf,1] = nodeIndex[i,j]
        
        faceCells[nf,0] = cellIndex[i,j]
        faceCells[nf,1] = nCells + nb

        nf += 1
        nb += 1

    # beam bottom
    j = nya
    for i in range(nxa+nxc, nxa+nxc+nxb):
        faceNodes[nf,0] = nodeIndex[i,j]
        faceNodes[nf,1] = nodeIndex[i+1,j]
        
        faceCells[nf,0] = cellIndex[i,j]
        faceCells[nf,1] = nCells + nb
        
        nf += 1
        nb += 1

    # beam top
    j = nya+nyb
    for i in range(nxa, nxa+2*nxc+nxb):
        faceNodes[nf,0] = nodeIndex[i+1,j]
        faceNodes[nf,1] = nodeIndex[i,j]
        
        faceCells[nf,0] = cellIndex[i,j-1]
        faceCells[nf,1] = nCells + nb
        
        nf += 1
        nb += 1
        
    # left beam side
    i = nxa
    for j in range(nya, nya+nyb):
        faceNodes[nf,0] = nodeIndex[i,j+1]
        faceNodes[nf,1] = nodeIndex[i,j]
        
        faceCells[nf,0] = cellIndex[i,j]
        faceCells[nf,1] = nCells + nb

        nf += 1
        nb += 1
        
    # right beam side
    i = nxa+2*nxc+nxb
    for j in range(nya, nya+nyb):
        faceNodes[nf,0] = nodeIndex[i,j]
        faceNodes[nf,1] = nodeIndex[i,j+1]
        
        faceCells[nf,0] = cellIndex[i-1,j]
        faceCells[nf,1] = nCells + nb

        nf += 1
        nb += 1
        
    # left anchor top
    j = nya
    for i in range(0, nxa):
        faceNodes[nf,0] = nodeIndex[i+1,j]
        faceNodes[nf,1] = nodeIndex[i,j]
        
        faceCells[nf,0] = cellIndex[i,j-1]
        faceCells[nf,1] = nCells + nb
        
        nf += 1
        nb += 1
        
    # right anchor top
    for i in range(nxa+2*nxc+nxb, imax):
        faceNodes[nf,0] = nodeIndex[i+1,j]
        faceNodes[nf,1] = nodeIndex[i,j]
        
        faceCells[nf,0] = cellIndex[i,j-1]
        faceCells[nf,1] = nCells + nb
        
        nf += 1
        nb += 1

    #numpy.set_printoptions(threshold=1e8)

    #print faceCellsA[:]
    #print faceNodesA
    mesh = fvmbaseExt.Mesh(2, nCells, nodeCoordsN, faceCellsN,
                           faceNodesN, faceNodeCountN, faceGroupCountN)

    print '2d mesh nnodes = %s' % nNodes
    print 'midpoint node index is %s' % nodeIndex[imax/2,nya]

    return mesh
    def makeMesh(self):
        nodeCoordsN = models.newVec3Array(self.nNodes)
        nodeCoordsA = nodeCoordsN.asNumPyArray()

        for n in range(self.nNodes):
            nodeCoordsA[n, 0] = self.nodes[n].x
            nodeCoordsA[n, 1] = self.nodes[n].y
            nodeCoordsA[n, 2] = self.nodes[n].z

        nFaceZones = 7
        faceGroupCountN = fvmbaseExt.newIntArray(nFaceZones)
        faceGroupCount = faceGroupCountN.asNumPyArray()

        # interior faces
        faceGroupCount[0] = len(self.interiorFaces)
        # xmin faces
        faceGroupCount[1] = len(self.xminFaces)
        # xmax faces
        faceGroupCount[2] = len(self.xmaxFaces)
        # ymin faces
        faceGroupCount[3] = len(self.yminFaces)
        # ymax faces
        faceGroupCount[4] = len(self.ymaxFaces)
        # zmin faces
        faceGroupCount[5] = len(self.zminFaces)
        # zmax faces
        faceGroupCount[6] = len(self.zmaxFaces)

        ## allocate arrays for face nodes and cells
        faceNodeCountN = fvmbaseExt.newIntArray(self.nFaces)
        faceNodesN = fvmbaseExt.newIntArray(self.nFaces * 4)
        faceCellsN = fvmbaseExt.newIntArray(self.nFaces * 2)
        faceNodesA = faceNodesN.asNumPyArray()
        faceCellsA = faceCellsN.asNumPyArray()

        faceNodeCountA = faceNodeCountN.asNumPyArray()
        faceNodeCountA[:] = 4

        ## reshape for convenience
        faceNodes = faceNodesA.reshape((self.nFaces, 4))
        faceCells = faceCellsA.reshape((self.nFaces, 2))

        nf = 0
        for f in self.interiorFaces:
            faceNodes[nf, 0] = f.nodes[0].nID
            faceNodes[nf, 1] = f.nodes[1].nID
            faceNodes[nf, 2] = f.nodes[2].nID
            faceNodes[nf, 3] = f.nodes[3].nID

            faceCells[nf, 0] = f.cell0.cID
            faceCells[nf, 1] = f.cell1.cID

            nf = nf + 1

        for f in self.xminFaces:
            faceNodes[nf, 0] = f.nodes[0].nID
            faceNodes[nf, 1] = f.nodes[1].nID
            faceNodes[nf, 2] = f.nodes[2].nID
            faceNodes[nf, 3] = f.nodes[3].nID

            faceCells[nf, 0] = f.cell0.cID
            faceCells[nf, 1] = f.cell1.cID

            nf = nf + 1

        for f in self.xmaxFaces:
            faceNodes[nf, 0] = f.nodes[0].nID
            faceNodes[nf, 1] = f.nodes[1].nID
            faceNodes[nf, 2] = f.nodes[2].nID
            faceNodes[nf, 3] = f.nodes[3].nID

            faceCells[nf, 0] = f.cell0.cID
            faceCells[nf, 1] = f.cell1.cID

            nf = nf + 1

        for f in self.yminFaces:
            faceNodes[nf, 0] = f.nodes[0].nID
            faceNodes[nf, 1] = f.nodes[1].nID
            faceNodes[nf, 2] = f.nodes[2].nID
            faceNodes[nf, 3] = f.nodes[3].nID

            faceCells[nf, 0] = f.cell0.cID
            faceCells[nf, 1] = f.cell1.cID

            nf = nf + 1

        for f in self.ymaxFaces:
            faceNodes[nf, 0] = f.nodes[0].nID
            faceNodes[nf, 1] = f.nodes[1].nID
            faceNodes[nf, 2] = f.nodes[2].nID
            faceNodes[nf, 3] = f.nodes[3].nID

            faceCells[nf, 0] = f.cell0.cID
            faceCells[nf, 1] = f.cell1.cID

            nf = nf + 1

        for f in self.zminFaces:
            faceNodes[nf, 0] = f.nodes[0].nID
            faceNodes[nf, 1] = f.nodes[1].nID
            faceNodes[nf, 2] = f.nodes[2].nID
            faceNodes[nf, 3] = f.nodes[3].nID

            faceCells[nf, 0] = f.cell0.cID
            faceCells[nf, 1] = f.cell1.cID

            nf = nf + 1

        for f in self.zmaxFaces:
            faceNodes[nf, 0] = f.nodes[0].nID
            faceNodes[nf, 1] = f.nodes[1].nID
            faceNodes[nf, 2] = f.nodes[2].nID
            faceNodes[nf, 3] = f.nodes[3].nID

            faceCells[nf, 0] = f.cell0.cID
            faceCells[nf, 1] = f.cell1.cID

            nf = nf + 1

        pdb.set_trace()
        return fvmbaseExt.Mesh(3, self.nCells, nodeCoordsN, faceCellsN, faceNodesN, faceNodeCountN, faceGroupCountN)
Exemple #7
0
def generate2DMesh(la, lb, ta, tb, tc, nxa, nxb, nxc, nya, nyb):

    # number of cells
    imax = 2 * (nxa + nxc) + nxb
    jmax = nya + nyb

    # cell lengths in x and y
    dx = numpy.zeros(shape=(imax, ), dtype='double')
    dy = numpy.zeros(shape=(jmax, ), dtype='double')

    dxa = la / nxa
    dxb = lb / nxb
    dxc = tc / nxc

    dx[0:nxa] = dxa
    dx[nxa:nxa + nxc] = dxc
    dx[nxa + nxc:nxa + nxc + nxb] = dxb
    dx[nxa + nxc + nxb:nxa + 2 * nxc + nxb] = dxc
    dx[nxa + 2 * nxc + nxb:] = dxa

    dya = ta / nya
    dyb = tb / nyb

    dy[0:nya] = dya
    dy[nya:] = dyb

    xcoord = numpy.zeros(shape=(imax + 1, ), dtype='double')
    ycoord = numpy.zeros(shape=(jmax + 1, ), dtype='double')

    xcoord[0] = ycoord[0] = 0

    for i in range(0, imax):
        xcoord[i + 1] = xcoord[i] + dx[i]
    for j in range(0, jmax):
        ycoord[j + 1] = ycoord[j] + dy[j]

    ## move the x centroid to center of beam
    xmax = xcoord[imax]
    xcoord[:] -= xmax / 2.0

    # this will store the node index in the mesh for the cartesian node location
    nodeIndex = numpy.zeros(shape=(imax + 1, jmax + 1), dtype='int')
    nodeIndex[:, :] = -1

    nNodes = 0
    ## mark nodes in left anchor
    for j in range(0, nya + 1):
        for i in range(0, nxa + nxc + 1):
            if nodeIndex[i, j] == -1:
                nodeIndex[i, j] = nNodes
                nNodes += 1

    ## mark nodes in beam
    for j in range(nya, jmax + 1):
        for i in range(nxa, nxa + 2 * nxc + nxb + 1):
            if nodeIndex[i, j] == -1:
                nodeIndex[i, j] = nNodes
                nNodes += 1

    ## mark nodes in right anchor
    for j in range(0, nya + 1):
        for i in range(nxa + nxc + nxb, imax + 1):
            if nodeIndex[i, j] == -1:
                nodeIndex[i, j] = nNodes
                nNodes += 1

    nodeCoordsN = models.newVec3Array(nNodes)
    nodeCoordsA = nodeCoordsN.asNumPyArray()

    nodeCoordsA[:, 2] = 0.
    for i in range(0, imax + 1):
        for j in range(0, jmax + 1):
            ni = nodeIndex[i, j]
            if (ni >= 0):
                nodeCoordsA[ni, 0] = xcoord[i]
                nodeCoordsA[ni, 1] = ycoord[j]

    # this will store the cell index in the mesh for the cartesian cell location
    cellIndex = numpy.zeros(shape=(imax, jmax), dtype='int')
    cellIndex[:, :] = -1

    nCells = 0
    ## mark cells in left anchor
    for j in range(0, nya):
        for i in range(0, nxa + nxc):
            if cellIndex[i, j] == -1:
                cellIndex[i, j] = nCells
                nCells += 1

    ## mark cells in beam
    for j in range(nya, jmax):
        for i in range(nxa, nxa + 2 * nxc + nxb):
            if cellIndex[i, j] == -1:
                cellIndex[i, j] = nCells
                nCells += 1

    ## mark cells in right anchor
    for j in range(0, nya):
        for i in range(nxa + nxc + nxb, imax):
            if cellIndex[i, j] == -1:
                cellIndex[i, j] = nCells
                nCells += 1

    nFacesInterior = 0

    ## interior faces of left and right anchors

    nFacesInterior += (nxa + nxc - 1) * nya + (nya - 1) * (nxa + nxc)
    nFacesInterior += (nxa + nxc - 1) * nya + (nya - 1) * (nxa + nxc)

    ## interior faces of beam

    nFacesInterior += (nxb + 2 * nxc - 1) * nyb + (nyb - 1) * (nxb + 2 * nxc)

    ## interior faces between anchor and beam

    nFacesInterior += 2 * nxc

    nFaceZones = 8

    faceGroupCountN = fvmbaseExt.newIntArray(nFaceZones)
    faceGroupCount = faceGroupCountN.asNumPyArray()

    faceGroupCount[0] = nFacesInterior

    # bottom of anchors
    faceGroupCount[1] = 2 * (nxa + nxc)

    #outer sides of anchors
    faceGroupCount[2] = 2 * nya

    #inner sides of anchors
    faceGroupCount[3] = 2 * nya

    #beam bottom
    faceGroupCount[4] = nxb

    #beam top
    faceGroupCount[5] = nxb + 2 * nxc

    #beam sides
    faceGroupCount[6] = 2 * nyb

    # top of anchors
    faceGroupCount[7] = 2 * nxa

    nFaces = int(faceGroupCount.sum())

    ## allocate arrays for face nodes
    faceNodeCountN = fvmbaseExt.newIntArray(nFaces)
    faceNodesN = fvmbaseExt.newIntArray(nFaces * 2)
    faceCellsN = fvmbaseExt.newIntArray(nFaces * 2)

    faceNodesA = faceNodesN.asNumPyArray()
    faceCellsA = faceCellsN.asNumPyArray()

    faceNodeCountA = faceNodeCountN.asNumPyArray()
    faceNodeCountA[:] = 2

    ## reshape for convenience

    faceNodes = faceNodesA.reshape((nFaces, 2))
    faceCells = faceCellsA.reshape((nFaces, 2))

    # interior x faces of left anchor

    nf = 0
    for j in range(0, nya):
        for i in range(0, nxa + nxc - 1):
            faceNodes[nf, 0] = nodeIndex[i + 1, j]
            faceNodes[nf, 1] = nodeIndex[i + 1, j + 1]

            faceCells[nf, 0] = cellIndex[i, j]
            faceCells[nf, 1] = cellIndex[i + 1, j]

            nf += 1

    # interior y faces of left anchor

    for j in range(0, nya - 1):
        for i in range(0, nxa + nxc):
            faceNodes[nf, 0] = nodeIndex[i + 1, j + 1]
            faceNodes[nf, 1] = nodeIndex[i, j + 1]

            faceCells[nf, 0] = cellIndex[i, j]
            faceCells[nf, 1] = cellIndex[i, j + 1]

            nf += 1

    # interior x faces of beam

    for j in range(nya, jmax):
        for i in range(nxa, nxa + 2 * nxc + nxb - 1):
            faceNodes[nf, 0] = nodeIndex[i + 1, j]
            faceNodes[nf, 1] = nodeIndex[i + 1, j + 1]

            faceCells[nf, 0] = cellIndex[i, j]
            faceCells[nf, 1] = cellIndex[i + 1, j]

            nf += 1

    # interior y faces of beam

    for j in range(nya, jmax - 1):
        for i in range(nxa, nxa + 2 * nxc + nxb):
            faceNodes[nf, 0] = nodeIndex[i + 1, j + 1]
            faceNodes[nf, 1] = nodeIndex[i, j + 1]

            faceCells[nf, 0] = cellIndex[i, j]
            faceCells[nf, 1] = cellIndex[i, j + 1]

            nf += 1

    ## interior x faces in right anchor
    for j in range(0, nya):
        for i in range(nxa + nxc + nxb, imax - 1):
            faceNodes[nf, 0] = nodeIndex[i + 1, j]
            faceNodes[nf, 1] = nodeIndex[i + 1, j + 1]

            faceCells[nf, 0] = cellIndex[i, j]
            faceCells[nf, 1] = cellIndex[i + 1, j]

            nf += 1

    ## interior y faces in right anchor
    for j in range(0, nya - 1):
        for i in range(nxa + nxc + nxb, imax):
            faceNodes[nf, 0] = nodeIndex[i + 1, j + 1]
            faceNodes[nf, 1] = nodeIndex[i, j + 1]

            faceCells[nf, 0] = cellIndex[i, j]
            faceCells[nf, 1] = cellIndex[i, j + 1]

            nf += 1

    ## left interior faces between anchor and beam

    j = nya

    for i in range(nxa, nxa + nxc):
        faceNodes[nf, 0] = nodeIndex[i + 1, j]
        faceNodes[nf, 1] = nodeIndex[i, j]

        faceCells[nf, 0] = cellIndex[i, j - 1]
        faceCells[nf, 1] = cellIndex[i, j]

        nf += 1

    ## right interior faces between anchor and beam

    for i in range(nxa + nxc + nxb, nxa + 2 * nxc + nxb):
        faceNodes[nf, 0] = nodeIndex[i + 1, j]
        faceNodes[nf, 1] = nodeIndex[i, j]

        faceCells[nf, 0] = cellIndex[i, j - 1]
        faceCells[nf, 1] = cellIndex[i, j]

        nf += 1

    nb = 0

    # left anchor bottom
    j = 0
    for i in range(0, nxa + nxc):
        faceNodes[nf, 0] = nodeIndex[i, j]
        faceNodes[nf, 1] = nodeIndex[i + 1, j]

        faceCells[nf, 0] = cellIndex[i, j]
        faceCells[nf, 1] = nCells + nb

        nf += 1
        nb += 1

    # right anchor bottom

    for i in range(nxa + nxc + nxb, imax):
        faceNodes[nf, 0] = nodeIndex[i, j]
        faceNodes[nf, 1] = nodeIndex[i + 1, j]

        faceCells[nf, 0] = cellIndex[i, j]
        faceCells[nf, 1] = nCells + nb

        nf += 1
        nb += 1

    # left anchor outer side
    i = 0
    for j in range(0, nya):
        faceNodes[nf, 0] = nodeIndex[i, j + 1]
        faceNodes[nf, 1] = nodeIndex[i, j]

        faceCells[nf, 0] = cellIndex[i, j]
        faceCells[nf, 1] = nCells + nb

        nf += 1
        nb += 1

    # right anchor outer side
    i = imax
    for j in range(0, nya):
        faceNodes[nf, 0] = nodeIndex[i, j]
        faceNodes[nf, 1] = nodeIndex[i, j + 1]

        faceCells[nf, 0] = cellIndex[i - 1, j]
        faceCells[nf, 1] = nCells + nb

        nf += 1
        nb += 1

    # left anchor inner side
    i = nxa + nxc
    for j in range(0, nya):
        faceNodes[nf, 0] = nodeIndex[i, j]
        faceNodes[nf, 1] = nodeIndex[i, j + 1]

        faceCells[nf, 0] = cellIndex[i - 1, j]
        faceCells[nf, 1] = nCells + nb

        nf += 1
        nb += 1

    # right anchor inner side
    i = nxa + nxc + nxb
    for j in range(0, nya):
        faceNodes[nf, 0] = nodeIndex[i, j + 1]
        faceNodes[nf, 1] = nodeIndex[i, j]

        faceCells[nf, 0] = cellIndex[i, j]
        faceCells[nf, 1] = nCells + nb

        nf += 1
        nb += 1

    # beam bottom
    j = nya
    for i in range(nxa + nxc, nxa + nxc + nxb):
        faceNodes[nf, 0] = nodeIndex[i, j]
        faceNodes[nf, 1] = nodeIndex[i + 1, j]

        faceCells[nf, 0] = cellIndex[i, j]
        faceCells[nf, 1] = nCells + nb

        nf += 1
        nb += 1

    # beam top
    j = nya + nyb
    for i in range(nxa, nxa + 2 * nxc + nxb):
        faceNodes[nf, 0] = nodeIndex[i + 1, j]
        faceNodes[nf, 1] = nodeIndex[i, j]

        faceCells[nf, 0] = cellIndex[i, j - 1]
        faceCells[nf, 1] = nCells + nb

        nf += 1
        nb += 1

    # left beam side
    i = nxa
    for j in range(nya, nya + nyb):
        faceNodes[nf, 0] = nodeIndex[i, j + 1]
        faceNodes[nf, 1] = nodeIndex[i, j]

        faceCells[nf, 0] = cellIndex[i, j]
        faceCells[nf, 1] = nCells + nb

        nf += 1
        nb += 1

    # right beam side
    i = nxa + 2 * nxc + nxb
    for j in range(nya, nya + nyb):
        faceNodes[nf, 0] = nodeIndex[i, j]
        faceNodes[nf, 1] = nodeIndex[i, j + 1]

        faceCells[nf, 0] = cellIndex[i - 1, j]
        faceCells[nf, 1] = nCells + nb

        nf += 1
        nb += 1

    # left anchor top
    j = nya
    for i in range(0, nxa):
        faceNodes[nf, 0] = nodeIndex[i + 1, j]
        faceNodes[nf, 1] = nodeIndex[i, j]

        faceCells[nf, 0] = cellIndex[i, j - 1]
        faceCells[nf, 1] = nCells + nb

        nf += 1
        nb += 1

    # right anchor top
    for i in range(nxa + 2 * nxc + nxb, imax):
        faceNodes[nf, 0] = nodeIndex[i + 1, j]
        faceNodes[nf, 1] = nodeIndex[i, j]

        faceCells[nf, 0] = cellIndex[i, j - 1]
        faceCells[nf, 1] = nCells + nb

        nf += 1
        nb += 1

    #numpy.set_printoptions(threshold=1e8)

    #print faceCellsA[:]
    #print faceNodesA
    mesh = fvmbaseExt.Mesh(2, nCells, nodeCoordsN, faceCellsN, faceNodesN,
                           faceNodeCountN, faceGroupCountN)

    print '2d mesh nnodes = %s' % nNodes
    print 'midpoint node index is %s' % nodeIndex[imax / 2, nya]

    return mesh
Exemple #8
0
    print fmodel.getMomentumFluxIntegral(fluidMeshes[0],4)[0]
    print fmodel.getMomentumFluxIntegral(fluidMeshes[0],4)[1]
    print fmodel.getMomentumFluxIntegral(fluidMeshes[0],4)[2]    
    print "\n"
    
    #calling getMomentumDerivativeIntegral
    print "getMomentumDerivativeIntegral ... \n"
    print fmodel.getMomentumDerivativeIntegral(fluidMeshes[0])[0]
    print fmodel.getMomentumDerivativeIntegral(fluidMeshes[0])[1]
    print fmodel.getMomentumDerivativeIntegral(fluidMeshes[0])[2]  
    print "\n"  


    #calling getStressTensor
    print "getStressTensor ... \n"
    IBCellIDsA= fvmbaseExt.newIntArray(5)
    IBCellIDs = IBCellIDsA.asNumPyArray()
    IBCellIDs[0] = 0
    IBCellIDs[1] = 10
    IBCellIDs[2] = 100
    IBCellIDs[3] = 200
    IBCellIDs[4] = 512
    stressA = fmodel.getStressTensor(fluidMeshes[0],IBCellIDsA)
    stress = stressA.asNumPyArray()
    print stress
   
    #getTranction
    print "getTraction ... \n"
    fmodel.getTraction(fluidMeshes[0])
    tractionX = flowFields.tractionX[fluidMeshes[0].getCells()]
    print tractionX.asNumPyArray()
def generateBoxMesh(xmax, ymax, zmax, imax, jmax, kmax):


    xcoord = np.linspace(0.0, xmax, num=(imax+1))
    xcoord = xcoord.astype('double')
    ycoord = np.linspace(0.0, ymax, num=(jmax+1))
    ycoord = ycoord.astype('double')
    zcoord = np.linspace(0.0, zmax, num=(kmax+1))
    zcoord = zcoord.astype('double')

    nCells = imax*jmax*kmax

    nodeIndex = np.zeros(shape=(imax+1,jmax+1,kmax+1), dtype='int')
    nNodes = 0

    nodeCoordsN = models.newVec3Array((imax+1)*(jmax+1)*(kmax+1))
    nodeCoordsA = nodeCoordsN.asNumPyArray()

    for k in range(kmax+1):
        for j in range(jmax+1):
            for i in range(imax+1):
                nodeIndex[i,j,k] = nNodes
                nodeCoordsA[nNodes,0] = xcoord[i]
                nodeCoordsA[nNodes,1] = ycoord[j]
                nodeCoordsA[nNodes,2] = zcoord[k]
                nNodes = nNodes + 1

    cellIndex = np.zeros(shape=(imax,jmax,kmax), dtype='int')
    nCells = 0

    for k in range(kmax):
        for j in range(jmax):
            for i in range(imax):
                cellIndex[i,j,k] = nCells
                nCells = nCells + 1
                
    nFacesInterior = imax*jmax*(kmax-1)+imax*(jmax-1)*kmax+(imax-1)*jmax*kmax

    nFaceZones = 7

    faceGroupCountN = fvmbaseExt.newIntArray(nFaceZones)
    faceGroupCount = faceGroupCountN.asNumPyArray()

    #interior faces
    faceGroupCount[0] = nFacesInterior 
    #xmin faces
    faceGroupCount[1] = jmax*kmax
    #xmax faces
    faceGroupCount[2] = jmax*kmax
    #ymin faces
    faceGroupCount[3] = imax*kmax
    #ymax faces
    faceGroupCount[4] = imax*kmax
    #zmin faces
    faceGroupCount[5] = imax*jmax
    #zmax faces
    faceGroupCount[6] = imax*jmax

    nFaces = int(faceGroupCount.sum())

    ## allocate arrays for face nodes and cells
    faceNodeCountN = fvmbaseExt.newIntArray(nFaces)
    faceNodesN = fvmbaseExt.newIntArray(nFaces*4)
    faceCellsN = fvmbaseExt.newIntArray(nFaces*2)

    faceNodesA = faceNodesN.asNumPyArray()
    faceCellsA = faceCellsN.asNumPyArray()

    faceNodeCountA = faceNodeCountN.asNumPyArray()
    faceNodeCountA[:] = 4
    
    ## reshape for convenience

    faceNodes = faceNodesA.reshape((nFaces,4))
    faceCells = faceCellsA.reshape((nFaces,2))
    
    nf = 0
    # interior x faces
    for i in range(1,imax):
        for j in range(jmax):
            for k in range(kmax):
                faceNodes[nf,0] = nodeIndex[i,j,k]
                faceNodes[nf,1] = nodeIndex[i,j+1,k]
                faceNodes[nf,2] = nodeIndex[i,j+1,k+1]
                faceNodes[nf,3] = nodeIndex[i,j,k+1]

                faceCells[nf,0] = cellIndex[i,j,k]
                faceCells[nf,1] = cellIndex[i-1,j,k]

                nf = nf + 1

    # interior y faces
    for j in range(1,jmax):
        for i in range(imax):
            for k in range(kmax):
                faceNodes[nf,0] = nodeIndex[i,j,k]
                faceNodes[nf,1] = nodeIndex[i+1,j,k]
                faceNodes[nf,2] = nodeIndex[i+1,j,k+1]
                faceNodes[nf,3] = nodeIndex[i,j,k+1]

                faceCells[nf,0] = cellIndex[i,j-1,k]
                faceCells[nf,1] = cellIndex[i,j,k]

                nf = nf + 1

    # interior z faces
    for k in range(1,kmax):
        for i in range(imax):
            for j in range(jmax):
                faceNodes[nf,0] = nodeIndex[i,j,k]
                faceNodes[nf,1] = nodeIndex[i+1,j,k]
                faceNodes[nf,2] = nodeIndex[i+1,j+1,k]
                faceNodes[nf,3] = nodeIndex[i,j+1,k]

                faceCells[nf,0] = cellIndex[i,j,k]
                faceCells[nf,1] = cellIndex[i,j,k-1]

                nf = nf + 1
        
    
    
    nb = 0
    #x-boundaries
    i = 0
    for j in range(jmax):
        for k in range(kmax):
            faceNodes[nf,0] = nodeIndex[i,j,k]
            faceNodes[nf,1] = nodeIndex[i,j+1,k]
            faceNodes[nf,2] = nodeIndex[i,j+1,k+1]
            faceNodes[nf,3] = nodeIndex[i,j,k+1]

            faceCells[nf,0] = cellIndex[i,j,k]
            faceCells[nf,1] = nCells + nb

            nf = nf + 1
            nb = nb + 1

    i = imax
    for j in range(jmax):
        for k in range(kmax):
            faceNodes[nf,0] = nodeIndex[i,j,k]
            faceNodes[nf,1] = nodeIndex[i,j,k+1]
            faceNodes[nf,2] = nodeIndex[i,j+1,k+1]
            faceNodes[nf,3] = nodeIndex[i,j+1,k]

            faceCells[nf,0] = cellIndex[i-1,j,k]
            faceCells[nf,1] = nCells + nb

            nf = nf + 1
            nb = nb + 1

    #y-boundaries
    j = 0
    for i in range(imax):
        for k in range(kmax):
            faceNodes[nf,0] = nodeIndex[i,j,k]
            faceNodes[nf,1] = nodeIndex[i,j,k+1]
            faceNodes[nf,2] = nodeIndex[i+1,j,k+1]
            faceNodes[nf,3] = nodeIndex[i+1,j,k]

            faceCells[nf,0] = cellIndex[i,j,k]
            faceCells[nf,1] = nCells + nb

            nf = nf + 1
            nb = nb + 1

    j = jmax
    for i in range(imax):
        for k in range(kmax):
            faceNodes[nf,0] = nodeIndex[i,j,k]
            faceNodes[nf,1] = nodeIndex[i+1,j,k]
            faceNodes[nf,2] = nodeIndex[i+1,j,k+1]
            faceNodes[nf,3] = nodeIndex[i,j,k+1]

            faceCells[nf,0] = cellIndex[i,j-1,k]
            faceCells[nf,1] = nCells + nb

            nf = nf + 1
            nb = nb + 1

    #z-boundaries
    k = 0
    for i in range(imax):
        for j in range(jmax):
            faceNodes[nf,0] = nodeIndex[i,j,k]
            faceNodes[nf,1] = nodeIndex[i+1,j,k]
            faceNodes[nf,2] = nodeIndex[i+1,j+1,k]
            faceNodes[nf,3] = nodeIndex[i,j+1,k]

            faceCells[nf,0] = cellIndex[i,j,k]
            faceCells[nf,1] = nCells + nb

            nf = nf + 1
            nb = nb + 1

    k = kmax
    for i in range(imax):
        for j in range(jmax):
            faceNodes[nf,0] = nodeIndex[i,j,k]
            faceNodes[nf,1] = nodeIndex[i,j+1,k]
            faceNodes[nf,2] = nodeIndex[i+1,j+1,k]
            faceNodes[nf,3] = nodeIndex[i+1,j,k]

            faceCells[nf,0] = cellIndex[i,j,k-1]
            faceCells[nf,1] = nCells + nb

            nf = nf + 1
            nb = nb + 1
    

    mesh = fvmbaseExt.Mesh(3, nCells, nodeCoordsN, faceCellsN,
                           faceNodesN, faceNodeCountN, faceGroupCountN)

    return mesh
Exemple #10
0
reader.importFlowBCs(fmodel)
fmodel.init()

t0 = time.time()
solid = fvmbaseExt.MPM()
octree = fvmbaseExt.Octree()
octree.Impl(mesh0, geomFields)

option = 1
nradius = 50;
ntheta  = 320;
nparticles = nradius * ntheta 

px = particle_coordinates(mesh0, "cylinder2d", nradius, ntheta, 0.5, 0.5, 0)
pv = geomFields.coordinate[mesh0.getCells()].newSizedClone( int(nparticles) )
pType =fvmbaseExt.newIntArray(nparticles)
pType.asNumPyArray()[:] = 1

print "px  = ", px.asNumPyArray() 
print "size = ", size( px.asNumPyArray() )
solid.setCoordinates(px)
solid.setVelocities(pv)
solid.setTypes(pType)
particles = solid.getParticles( nparticles )
geomFields.coordinate[particles]=px
flowFields.velocity[particles]  =pv

fvmbaseExt.CellMark_Impl(mesh0, geomFields, fileBase, octree, solid, option)

fvmParticles = fvmbaseExt.FVMParticles( meshes )