Beispiel #1
0
def testShapefunctions( ):
    poly = g.Mesh( 3 )
    n0 = poly.createNode( 0.0, 0.0, 0.0 )
    n1 = poly.createNode( 1.0, 0.0, 0.0 )
    n2 = poly.createNode( 0.0, 1.0, 0.0 )
    n3 = poly.createNode( 0.0, 0.0, 0.5 )

    poly.createTetrahedron( n0, n1, n2, n3 )
    prism = poly.createP2Mesh()
            
    
    u = g.RVector( prism.nodeCount(), 0.0 ) 
    u[ 5 ] = 1.0
    prism.addExportData( "u", u )
    
    #n3 = poly.createNode( 1.0, 1.0, 0.0 )
    #poly.createTriangle( n0, n1, n3 )
    #prism = g.createMesh3D( poly, g.asvector( np.linspace( 0, -1, 2 ) ) )
    #prism.exportVTK( "prism" )

    
    
    #mesh2 = g.createMesh2D( g.asvector( np.linspace( 0, 1, 10 ) ), 
                            #g.asvector( np.linspace( 0, 1, 10 ) ) )
                                
    #mesh2 = mesh2.createH2Mesh()
                            
    #g.interpolate( prism, mesh2 )
        
    #ax = g.viewer.showMesh( mesh2, mesh2.exportData('u'), filled = True, showLater = True )
        
    mesh3 = g.createMesh3D( g.asvector( np.linspace( 0, 1, 11 ) ), 
                            g.asvector( np.linspace( 0, 1, 11 ) ), 
                            g.asvector( np.linspace( 0, 1, 11 ) ) )

    grads = g.stdVectorRVector3( )
    c = prism.cell( 0 )
    uc = g.RVector( mesh3.nodeCount() )
    
    for n in mesh3.nodes():
        p = c.shape().xyz( n.pos() )
        
        if not c.shape().isInside( p ):
            grads.append( g.RVector3( 0.0, 0.0, 0.0 ) )
            uc[ n.id() ] = 0.0
            continue
        
        uc[ n.id() ] = c.pot( p, u )
        print uc[ n.id() ]
        gr = c.grad( p, u )
        grads.append( gr )
        
    g.interpolate( prism, mesh3 )
    mesh3.addExportData( 'ua', uc )

    mesh3.exportVTK( "prismHex", grads )
    
    
    P.show()
Beispiel #2
0
def testShapefunctions():
    poly = g.Mesh(3)
    n0 = poly.createNode(0.0, 0.0, 0.0)
    n1 = poly.createNode(1.0, 0.0, 0.0)
    n2 = poly.createNode(0.0, 1.0, 0.0)
    n3 = poly.createNode(0.0, 0.0, 0.5)

    poly.createTetrahedron(n0, n1, n2, n3)
    prism = poly.createP2Mesh()

    u = g.RVector(prism.nodeCount(), 0.0)
    u[5] = 1.0
    prism.addExportData("u", u)

    #n3 = poly.createNode( 1.0, 1.0, 0.0 )
    #poly.createTriangle( n0, n1, n3 )
    #prism = g.createMesh3D( poly, g.asvector( np.linspace( 0, -1, 2 ) ) )
    #prism.exportVTK( "prism" )

    #mesh2 = g.createMesh2D( g.asvector( np.linspace( 0, 1, 10 ) ),
    #g.asvector( np.linspace( 0, 1, 10 ) ) )

    #mesh2 = mesh2.createH2Mesh()

    #g.interpolate( prism, mesh2 )

    #ax = g.viewer.showMesh( mesh2, mesh2.exportData('u'), filled = True, showLater = True )

    mesh3 = g.createMesh3D(g.asvector(np.linspace(0, 1, 11)),
                           g.asvector(np.linspace(0, 1, 11)),
                           g.asvector(np.linspace(0, 1, 11)))

    grads = g.stdVectorRVector3()
    c = prism.cell(0)
    uc = g.RVector(mesh3.nodeCount())

    for n in mesh3.nodes():
        p = c.shape().xyz(n.pos())

        if not c.shape().isInside(p):
            grads.append(g.RVector3(0.0, 0.0, 0.0))
            uc[n.id()] = 0.0
            continue

        uc[n.id()] = c.pot(p, u)
        print uc[n.id()]
        gr = c.grad(p, u)
        grads.append(gr)

    g.interpolate(prism, mesh3)
    mesh3.addExportData('ua', uc)

    mesh3.exportVTK("prismHex", grads)

    P.show()
Beispiel #3
0
def hexahedron( p2 ):
    """
    """
    mesh = g.createMesh3D( g.asvector( np.linspace( 0, 1, 2 ) ), 
                           g.asvector( np.linspace( 0, 1, 2 ) ), 
                           g.asvector( np.linspace( 0, 1, 2 ) ) )

    mesh.node(0).setPos( g.RVector3( 0.0, 0.0, 0.5 ) )
    #mesh.rotate( g.RVector3( 10.0, 34.0, 45 ) )
    #mesh.scale( g.RVector3( 0.9, 0.8, 0.7 ) )

    #mesh.rotate( g.RVector3( 10.0, 34.0, 45 ) )
    #mesh.scale( g.RVector3( 1.0, 1.0, 5.0 ) )

    if p2: mesh = mesh.createP2()

    show( mesh )
Beispiel #4
0
def testCreateTriPrismMesh():
    poly = g.Mesh( 2 )
    n0 = poly.createNode( 0.0, 0.0, 0. )
    n1 = poly.createNode( 1.0, 0.0, 0. )
    n2 = poly.createNode( 0.0, 1.0, 0. )
    n3 = poly.createNode( 1.0, 1.0, 0. )
    poly.createEdge( n0, n1 )
    poly.createEdge( n1, n3 )
    poly.createEdge( n3, n2 )
    poly.createEdge( n2, n0 )
    
    mesh2 = g.Mesh( 2 )
    g.TriangleWrapper( poly, mesh2, "-pzeAfa0.01q34" );

    mesh3 = g.createMesh3D( mesh2, g.asvector( np.arange(0, -1, -0.1 ) ) )
    mesh3.setCellAttributes( g.asvector( range(0, mesh3.cellCount() ) ) )

    mesh3.save( "prism" )
    mesh3.exportVTK( "prism" )
Beispiel #5
0
def testCreateTriPrismMesh():
    poly = g.Mesh(2)
    n0 = poly.createNode(0.0, 0.0, 0.)
    n1 = poly.createNode(1.0, 0.0, 0.)
    n2 = poly.createNode(0.0, 1.0, 0.)
    n3 = poly.createNode(1.0, 1.0, 0.)
    poly.createEdge(n0, n1)
    poly.createEdge(n1, n3)
    poly.createEdge(n3, n2)
    poly.createEdge(n2, n0)

    mesh2 = g.Mesh(2)
    g.TriangleWrapper(poly, mesh2, "-pzeAfa0.01q34")

    mesh3 = g.createMesh3D(mesh2, g.asvector(np.arange(0, -1, -0.1)))
    mesh3.setCellAttributes(g.asvector(range(0, mesh3.cellCount())))

    mesh3.save("prism")
    mesh3.exportVTK("prism")
Beispiel #6
0
    def test_createMesh3D(self):

        mesh = pg.createMesh3D(xDim=5, yDim=3, zDim=2)
        self.assertEqual(mesh.cellCount(), 30.0)
Beispiel #7
0
def drawShapes( ax, mesh, u ):
    #ax.set_aspect( 'equal' )
    N = 11
    
    mesh3 = g.createMesh3D( g.asvector( np.linspace( 0, 1, N ) ), 
                            g.asvector( np.linspace( 0, 1, N ) ), 
                            g.asvector( np.linspace( 0, 1, N ) ) )
                            
    uc = g.RVector( mesh3.nodeCount(  ) )
    
    grads = g.stdVectorRVector3( )
    pnts = g.stdVectorRVector3( )
    
    c = mesh.cell( 0 )
    imax=g.find( u == max( u ) )[0]
    
    N = c.createShapeFunctions()[ imax ] 
    print imax, N
#    print imax, c.shape().createShapeFunctions()[imax]
    for i in range( c.nodeCount() ):
        print c.rst( i ), N( c.rst( i ) )
    
    # draw nodes
    for i in range( c.nodeCount() ):
        col = 'black'
        if i == imax:
            col = 'red'
            
        #ax.plot( [c.node( i ).pos()[0], c.node( i ).pos()[0] ], 
                 #[c.node( i ).pos()[1], c.node( i ).pos()[1] ],
                 #[c.node( i ).pos()[2], c.node( i ).pos()[2] ],
                #'.', markersize = 15, linewidth=0, color=col )
    
    newNode = []
    
    for i in range( mesh3.nodeCount(  ) ):
        p = c.shape().xyz( mesh3.node( i ).pos() )
        newNode.append( p )
        
        #ax.plot( p[0], p[1], '.', zorder=10, color='black', markersize = 1 )
        
        if not c.shape().isInside( p ): 
            uc[ i ] = -99.0
            grads.append( g.RVector3( 0.0, 0.0 ) )
            continue
          
        uc[ i ] = c.pot( p, u ) 
        gr = c.grad( p, u ).normalise()
        grads.append( gr )
        
        #ax.plot( [ p[ 0 ], p[ 0 ] + gr[ 0 ]*0.1 ], 
                 #[ p[ 1 ], p[ 1 ] + gr[ 1 ]*0.1 ], 
                 #[ p[ 2 ], p[ 2 ] + gr[ 2 ]*0.1 ], '-', color='black' )
    
        #pnts.append( p )
            
    #print len(pnts)
    #Z = np.ma.masked_where( uc == -99., uc )
    ##ax.plot( g.x(pnts), g.y(pnts), g.z(pnts), '.' )
    
    for i, n in enumerate( mesh3.nodes() ):
        n.setPos( newNode[ i ] )
        
    mesh3.addExportData( 'u', uc.setVal( 0.0, g.find( uc == -99 ) ) )
    name = 'cell' + str( c.nodeCount() ) + '-' + str( imax )
    print "write ", name
    mesh3.exportVTK( name, grads )
y = pg.increasingRange(0.2, depth, nz)
surface = pg.createMesh2D(border, y, 0, 0, False)

#for n in surface.nodes():
#yNodes = pg.increasingRange(yDefault[1], depth+n.y(), nz)
#for y in yNodes[0:]:
#newNodes.append([n.x(), n.y() -y])

#surface = pg.createGrid(x=yDefault, y=pg.sort(pg.x(surface.positions())))

#for i, n in enumerate(surface.nodes()):
#n.setPos(newNodes[i])

#surface.smooth(1, 1, 1, 10)

ax, _ = pg.show(surface)
#showBoundaryNorm(surface, axes=ax)

ax.set_ylim([-21, 1])
ax.set_xlim([-21, 21])

zinc = pg.increasingRange(1, 10, 5)
zmid = np.linspace(1, 10, 20)
z = pg.cat(-(np.asarray(zinc)[::-1]), zmid)
z = pg.cat(z, 11 + zinc)

mesh3D = pg.createMesh3D(surface, z)
mesh3D.exportVTK("mesh3d")

pg.wait()
newNodes = []
y = pg.increasingRange(0.2, depth, nz)
surface = pg.createMesh2D(border, y, 0, 0, False)

#for n in surface.nodes():
    #yNodes = pg.increasingRange(yDefault[1], depth+n.y(), nz)
    #for y in yNodes[0:]:
        #newNodes.append([n.x(), n.y() -y])    

#surface = pg.createGrid(x=yDefault, y=pg.sort(pg.x(surface.positions())))

#for i, n in enumerate(surface.nodes()):
    #n.setPos(newNodes[i])
    
#surface.smooth(1, 1, 1, 10)    

ax, _ = pg.show(surface)
#showBoundaryNorm(surface, axes=ax)

ax.set_ylim([-21, 1])
ax.set_xlim([-21, 21])

zinc = pg.increasingRange(1, 10, 5)
zmid = np.linspace(1, 10, 20)
z = pg.cat(-(np.asarray(zinc)[::-1]), zmid)
z = pg.cat(z, 11+zinc)

mesh3D = pg.createMesh3D(surface, z)
mesh3D.exportVTK("mesh3d")

pg.wait()
Beispiel #10
0
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
3D Visualization (Proof of concept)
-----------------------------------
"""

import pygimli as pg
from pygimli.viewer import show

mesh = pg.createMesh3D(1,1,1)

"""
If interactive is set to True, a Mayavi window pops up which allows for
interactive introspection. If it is set to False, mayavi produces a pixel array
of the scene which is plotted in a mpl figure and therefore
automatically picked up by the plot2rst extension for the documentation.

"""

show(mesh, interactive=False)

"""
.. image:: PLOT2RST.current_figure
    :scale: 75

"""
<<<<<<< .working
=======
pg.showNow()>>>>>>> .new
    def test_createMesh3D(self):

        mesh = pg.createMesh3D(xDim=5, yDim=3, zDim=2)
        self.assertEqual(mesh.cellCount(), 30.0)