Exemplo n.º 1
0
    def setCells(self, cellIndices, cellTypes, connectivity,
                 cellMask=None, cellAreas=None):
        """
        Set Cell connectivity
        @param cell indices (0-based)
        @param cellTypes one of ESMP_MESHELEMTYPE_{TRI,QUAD,TETRA,HEX}
        @param connectivity node connectivity array, see below for node ordering
        @param cellMask
        @param cellAreas area (volume) of each cell


                     3                          4 ---------- 3
                    / \                         |            |
                   /   \                        |            |
                  /     \                       |            |
                 /       \                      |            |
                /         \                     |            |
               1 --------- 2                    1 ---------- 2



                 3                               8---------------7
                /|\                             /|              /|
               / | \                           / |             / |
              /  |  \                         /  |            /  |
             /   |   \                       /   |           /   |
            /    |    \                     5---------------6    |
           4-----|-----2                    |    |          |    |
            \    |    /                     |    4----------|----3
             \   |   /                      |   /           |   /
              \  |  /                       |  /            |  /
               \ | /                        | /             | /
                \|/                         |/              |/
                 1                          1---------------2

       ESMP_MESHELEMTYPE_TETRA             ESMP_MESHELEMTYPE_HEX

        """
        n = len(cellIndices)
        if not self.cellsAdded:
            # node/cell indices are 1-based in ESMP
            cellIndices += 1
            ESMP.ESMP_MeshAddElements(self.grid, n, cellIndices, cellTypes,
                                      connectivity, elementMask=cellMask,
                                      elementArea=cellAreas)
        self.cellsAdded = True
def mesh_create_3x3(mesh):
  '''
  PRECONDITIONS: An ESMP_Mesh has been declared.
  POSTCONDITIONS: A 3x3 ESMP_Mesh has been created.
  
                 3x3 Mesh
   
  
   3.0  2.0   13 -------14 --------15--------16
              |         |          |         |
              |    7    |    8     |   9     |
              |         |          |         |
   2.5  1.5   9 ------- 10 --------11--------12
              |         |          |         |
              |    4    |    5     |   6     |
              |         |          |         |
   1.5  0.5   5 ------- 6 -------- 7-------- 8
              |         |          |         |
              |    1    |    2     |   3     |
              |         |          |         |
   1.0  0.0   1 ------- 2 -------- 3-------- 4
       
             0.0       0.5        1.5       2.0
             1.0       1.5        2.5       3.0
    
        Node Ids at corners
        Element Ids in centers
  
        (Everything owned by PET 0) 
  '''
  # set up a simple mesh
  num_node = 16
  num_elem = 9
  nodeId = _NP.array([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16])
  '''
  # this is for grid to mesh
  nodeCoord = _NP.array([1.0,1.0, 1.5,1.0, 2.5,1.0, 3.0,1.0,
                          1.0,1.5, 1.5,1.5, 2.5,1.5, 3.0,1.5,
                          1.0,2.5, 1.5,2.5, 2.5,2.5, 3.0,2.5,
                          1.0,3.0, 1.5,3.0, 2.5,3.0, 3.0,3.0])
  '''
  # this is for mesh to grid
  nodeCoord = _NP.array([0.0,0.0, 1.5,0.0, 2.5,0.0, 4.0,0.0,
                          0.0,1.5, 1.5,1.5, 2.5,1.5, 4.0,1.5,
                          0.0,2.5, 1.5,2.5, 2.5,2.5, 4.0,2.5,
                          0.0,4.0, 1.5,4.0, 2.5,4.0, 4.0,4.0])
  
  nodeOwner = _NP.zeros(num_node, dtype=_NP.int32)
  elemId = _NP.array([1,2,3,4,5,6,7,8,9], dtype=_NP.int32)
  elemType = _NP.ones(num_elem, dtype=_NP.int32)
  elemType*=ESMP.ESMP_MESHELEMTYPE_QUAD
  elemConn = _NP.array([0,1,5,4,
                        1,2,6,5,
                        2,3,7,6,
                        4,5,9,8,
                        5,6,10,9,
                        6,7,11,10,
                        8,9,13,12,
                        9,10,14,13,
                        10,11,15,14], dtype=_NP.int32)

  ESMP.ESMP_MeshAddNodes(mesh,num_node,nodeId,nodeCoord,nodeOwner)
  
  ESMP.ESMP_MeshAddElements(mesh,num_elem,elemId,elemType,elemConn)
  
  #print 'Mesh coordinates:'
  for i in range(num_node):
    x = nodeCoord[2*i]
    y = nodeCoord[2*i+1]
    #print '[{0},{1}]'.format(x, y)
  #print '\n'
 
  return mesh, nodeCoord, elemType, elemConn