Ejemplo n.º 1
0
def polygon(nb_sides):
    """Create a regular polygonal 2D mesh
    """
    #create mesh
    m = Mesh()

    #create points
    pids = []
    for i in range(nb_sides):
        pid = m.add_dart(0)
        vec = (cos(2 * pi * i / nb_sides), sin(2 * pi * i / nb_sides))
        m.set_position(pid, vec)
        pids.append(pid)

    #create segments
    eids = []
    for i in range(nb_sides):
        eid = m.add_dart(1)
        m.link(eid, pids[i])
        m.link(eid, pids[(i + 1) % nb_sides])
        eids.append(eid)

    #create face
    fid = m.add_dart(2)
    for eid in eids:
        m.link(fid, eid)

    #return
    return m
Ejemplo n.º 2
0
def polygon (nb_sides) :
    """Create a regular polygonal 2D mesh
    """
    #create mesh
    m = Mesh()
    
    #create points
    pids = []
    for i in range(nb_sides) :
        pid = m.add_dart(0)
        vec = (cos(2 * pi * i / nb_sides), sin(2 * pi * i / nb_sides) )
        m.set_position(pid, vec)
        pids.append(pid)
    
    #create segments
    eids = []
    for i in range(nb_sides) :
        eid = m.add_dart(1)
        m.link(eid, pids[i])
        m.link(eid, pids[(i + 1) % nb_sides])
        eids.append(eid)
    
    #create face
    fid = m.add_dart(2)
    for eid in eids :
        m.link(fid, eid)
    
    #return
    return m
Ejemplo n.º 3
0
def _regular_grid2D (shape) :
    cell_grid = Grid(shape)
    point_grid = Grid( (i + 1 for i in shape) )
    imax,jmax = shape
    
    #create mesh
    m = Mesh()
    
    #create cells
    cell = [m.add_dart(2) for ind in cell_grid]
    
    #create points
    point = [m.add_dart(0) for ind in point_grid]
    for i,pid in enumerate(point) :
        m.set_position(pid, point_grid.coordinates(i) )
    
    #create vertical walls
    for i in xrange(imax + 1) :
        for j in xrange(jmax) :
            wid = m.add_dart(1)
            m.link(wid, point[point_grid.index( (i,j) )])
            m.link(wid, point[point_grid.index( (i,j + 1) )])
            if i > 0 :
                m.link(cell[cell_grid.index( (i - 1,j) )], wid)
            if i < imax :
                m.link(cell[cell_grid.index( (i,j) )], wid)
    
    #create horizontal walls
    for i in xrange(imax) :
        for j in xrange(jmax + 1) :
            wid = m.add_dart(1)
            m.link(wid, point[point_grid.index( (i,j) )])
            m.link(wid, point[point_grid.index( (i + 1,j) )])
            if j > 0 :
                m.link(cell[cell_grid.index( (i,j - 1) )], wid)
            if j < jmax :
                m.link(cell[cell_grid.index( (i,j) )], wid)
    
    #return
    return m
Ejemplo n.º 4
0
def _regular_grid2D(shape):
    cell_grid = Grid(shape)
    point_grid = Grid((i + 1 for i in shape))
    imax, jmax = shape

    #create mesh
    m = Mesh()

    #create cells
    cell = [m.add_dart(2) for ind in cell_grid]

    #create points
    point = [m.add_dart(0) for ind in point_grid]
    for i, pid in enumerate(point):
        m.set_position(pid, point_grid.coordinates(i))

    #create vertical walls
    for i in xrange(imax + 1):
        for j in xrange(jmax):
            wid = m.add_dart(1)
            m.link(wid, point[point_grid.index((i, j))])
            m.link(wid, point[point_grid.index((i, j + 1))])
            if i > 0:
                m.link(cell[cell_grid.index((i - 1, j))], wid)
            if i < imax:
                m.link(cell[cell_grid.index((i, j))], wid)

    #create horizontal walls
    for i in xrange(imax):
        for j in xrange(jmax + 1):
            wid = m.add_dart(1)
            m.link(wid, point[point_grid.index((i, j))])
            m.link(wid, point[point_grid.index((i + 1, j))])
            if j > 0:
                m.link(cell[cell_grid.index((i, j - 1))], wid)
            if j < jmax:
                m.link(cell[cell_grid.index((i, j))], wid)

    #return
    return m
Ejemplo n.º 5
0
def line (nb_segments) :
    """Create a 1D mesh along a single line
    made of nb segments
    """
    #create mesh
    m = Mesh()
    
    #create points
    pids = []
    for i in range(nb_segments + 1) :
        pid = m.add_dart(0)
        m.set_position(pid, float(i) )
        pids.append(pid)
    
    #create segments
    for i in range(nb_segments) :
        did = m.add_dart(1)
        m.link(did, pids[i])
        m.link(did, pids[i + 1])
    
    #return
    return m
Ejemplo n.º 6
0
def line(nb_segments):
    """Create a 1D mesh along a single line
    made of nb segments
    """
    #create mesh
    m = Mesh()

    #create points
    pids = []
    for i in range(nb_segments + 1):
        pid = m.add_dart(0)
        m.set_position(pid, float(i))
        pids.append(pid)

    #create segments
    for i in range(nb_segments):
        did = m.add_dart(1)
        m.link(did, pids[i])
        m.link(did, pids[i + 1])

    #return
    return m
Ejemplo n.º 7
0
def _regular_grid3D (shape) :
    cell_grid = Grid(shape)
    point_grid = Grid( (i + 1 for i in shape) )
    imax,jmax,kmax = shape
    
    #create mesh
    m = Mesh()
    
    #create cells
    cell = [m.add_dart(3) for ind in cell_grid]
    
    #create points
    point = [m.add_dart(0) for ind in point_grid]
    for i,pid in enumerate(point) :
        m.set_position(pid, point_grid.coordinates(i) )
    
    #create edges
    point_to_edge = {}
    #between i and i + 1
    for i in xrange(imax) :
        for j in xrange(jmax + 1) :
            for k in xrange(kmax + 1) :
                eid = m.add_dart(1)
                pid1 = point[point_grid.index( (i,j,k) )]
                pid2 = point[point_grid.index( (i + 1,j,k) )]
                m.link(eid, pid1)
                m.link(eid, pid2)
                key = (min(pid1, pid2), max(pid1, pid2) )
                point_to_edge[key] = eid
    #between j and j + 1
    for i in xrange(imax + 1) :
        for j in xrange(jmax) :
            for k in xrange(kmax + 1) :
                eid = m.add_dart(1)
                pid1 = point[point_grid.index( (i,j,k) )]
                pid2 = point[point_grid.index( (i,j + 1,k) )]
                m.link(eid, pid1)
                m.link(eid, pid2)
                key = (min(pid1, pid2), max(pid1,pid2) )
                point_to_edge[key] = eid
    #between k and k + 1
    for i in xrange(imax + 1) :
        for j in xrange(jmax + 1) :
            for k in xrange(kmax) :
                eid = m.add_dart(1)
                pid1 = point[point_grid.index( (i,j,k) )]
                pid2 = point[point_grid.index( (i,j,k + 1) )]
                m.link(eid, pid1)
                m.link(eid, pid2)
                key = (min(pid1, pid2), max(pid1,pid2) )
                point_to_edge[key] = eid
    
    #create walls
    #in the (i,j) plane, k constant
    for k in xrange(kmax + 1) :
        for i in xrange(imax) :
            for j in xrange(jmax) :
                wid = m.add_dart(2)
                pids = (point[point_grid.index( (i,j,k) )],
                        point[point_grid.index( (i + 1,j,k) )],
                        point[point_grid.index( (i + 1,j + 1,k) )],
                        point[point_grid.index( (i,j + 1,k) )] )
                for ind in xrange(4) :
                    pid1 = pids[ind]
                    pid2 = pids[(ind + 1) % 4]
                    eid = point_to_edge[(min(pid1, pid2), max(pid1, pid2) )]
                    m.link(wid, eid)
                if k > 0 :
                    m.link(cell[cell_grid.index( (i,j,k - 1) )], wid)
                if k < kmax :
                    m.link(cell[cell_grid.index( (i,j,k) )], wid)
    
    #in the (j,k) plane, i constant
    for i in xrange(imax + 1) :
        for j in xrange(jmax) :
            for k in xrange(kmax) :
                wid = m.add_dart(2)
                pids = (point[point_grid.index( (i,j,k) )],
                        point[point_grid.index( (i,j + 1,k) )],
                        point[point_grid.index( (i,j + 1,k + 1) )],
                        point[point_grid.index( (i,j,k + 1) )] )
                for ind in xrange(4) :
                    pid1 = pids[ind]
                    pid2 = pids[(ind + 1) % 4]
                    eid = point_to_edge[(min(pid1, pid2), max(pid1, pid2) )]
                    m.link(wid, eid)
                if i > 0 :
                    m.link(cell[cell_grid.index( (i - 1,j,k) )], wid)
                if i < imax :
                    m.link(cell[cell_grid.index( (i,j,k) )], wid)
    
    #in the (k,i) plane, j constant
    for j in xrange(jmax + 1) :
        for k in xrange(kmax) :
            for i in xrange(imax) :
                wid = m.add_dart(2)
                pids = (point[point_grid.index( (i,j,k) )],
                        point[point_grid.index( (i,j,k + 1) )],
                        point[point_grid.index( (i + 1,j,k + 1) )],
                        point[point_grid.index( (i + 1,j,k) )] )
                for ind in xrange(4) :
                    pid1 = pids[ind]
                    pid2 = pids[(ind + 1) % 4]
                    eid = point_to_edge[(min(pid1, pid2), max(pid1, pid2) )]
                    m.link(wid, eid)
                if j > 0 :
                    m.link(cell[cell_grid.index( (i,j - 1,k) )], wid)
                if j < jmax :
                    m.link(cell[cell_grid.index( (i,j,k) )], wid)
    
    #return
    return m
Ejemplo n.º 8
0
def _regular_grid3D(shape):
    cell_grid = Grid(shape)
    point_grid = Grid((i + 1 for i in shape))
    imax, jmax, kmax = shape

    #create mesh
    m = Mesh()

    #create cells
    cell = [m.add_dart(3) for ind in cell_grid]

    #create points
    point = [m.add_dart(0) for ind in point_grid]
    for i, pid in enumerate(point):
        m.set_position(pid, point_grid.coordinates(i))

    #create edges
    point_to_edge = {}
    #between i and i + 1
    for i in xrange(imax):
        for j in xrange(jmax + 1):
            for k in xrange(kmax + 1):
                eid = m.add_dart(1)
                pid1 = point[point_grid.index((i, j, k))]
                pid2 = point[point_grid.index((i + 1, j, k))]
                m.link(eid, pid1)
                m.link(eid, pid2)
                key = (min(pid1, pid2), max(pid1, pid2))
                point_to_edge[key] = eid
    #between j and j + 1
    for i in xrange(imax + 1):
        for j in xrange(jmax):
            for k in xrange(kmax + 1):
                eid = m.add_dart(1)
                pid1 = point[point_grid.index((i, j, k))]
                pid2 = point[point_grid.index((i, j + 1, k))]
                m.link(eid, pid1)
                m.link(eid, pid2)
                key = (min(pid1, pid2), max(pid1, pid2))
                point_to_edge[key] = eid
    #between k and k + 1
    for i in xrange(imax + 1):
        for j in xrange(jmax + 1):
            for k in xrange(kmax):
                eid = m.add_dart(1)
                pid1 = point[point_grid.index((i, j, k))]
                pid2 = point[point_grid.index((i, j, k + 1))]
                m.link(eid, pid1)
                m.link(eid, pid2)
                key = (min(pid1, pid2), max(pid1, pid2))
                point_to_edge[key] = eid

    #create walls
    #in the (i,j) plane, k constant
    for k in xrange(kmax + 1):
        for i in xrange(imax):
            for j in xrange(jmax):
                wid = m.add_dart(2)
                pids = (point[point_grid.index(
                    (i, j, k))], point[point_grid.index(
                        (i + 1, j, k))], point[point_grid.index(
                            (i + 1, j + 1, k))], point[point_grid.index(
                                (i, j + 1, k))])
                for ind in xrange(4):
                    pid1 = pids[ind]
                    pid2 = pids[(ind + 1) % 4]
                    eid = point_to_edge[(min(pid1, pid2), max(pid1, pid2))]
                    m.link(wid, eid)
                if k > 0:
                    m.link(cell[cell_grid.index((i, j, k - 1))], wid)
                if k < kmax:
                    m.link(cell[cell_grid.index((i, j, k))], wid)

    #in the (j,k) plane, i constant
    for i in xrange(imax + 1):
        for j in xrange(jmax):
            for k in xrange(kmax):
                wid = m.add_dart(2)
                pids = (point[point_grid.index(
                    (i, j, k))], point[point_grid.index(
                        (i, j + 1, k))], point[point_grid.index(
                            (i, j + 1, k + 1))], point[point_grid.index(
                                (i, j, k + 1))])
                for ind in xrange(4):
                    pid1 = pids[ind]
                    pid2 = pids[(ind + 1) % 4]
                    eid = point_to_edge[(min(pid1, pid2), max(pid1, pid2))]
                    m.link(wid, eid)
                if i > 0:
                    m.link(cell[cell_grid.index((i - 1, j, k))], wid)
                if i < imax:
                    m.link(cell[cell_grid.index((i, j, k))], wid)

    #in the (k,i) plane, j constant
    for j in xrange(jmax + 1):
        for k in xrange(kmax):
            for i in xrange(imax):
                wid = m.add_dart(2)
                pids = (point[point_grid.index(
                    (i, j, k))], point[point_grid.index(
                        (i, j, k + 1))], point[point_grid.index(
                            (i + 1, j, k + 1))], point[point_grid.index(
                                (i + 1, j, k))])
                for ind in xrange(4):
                    pid1 = pids[ind]
                    pid2 = pids[(ind + 1) % 4]
                    eid = point_to_edge[(min(pid1, pid2), max(pid1, pid2))]
                    m.link(wid, eid)
                if j > 0:
                    m.link(cell[cell_grid.index((i, j - 1, k))], wid)
                if j < jmax:
                    m.link(cell[cell_grid.index((i, j, k))], wid)

    #return
    return m