Example #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()
Example #2
0
def test3d():
    '''
    '''

    # test1.
    mesh = pg.Mesh(3)
    mesh.importSTL('sphere.stl')
    mesh.scale(pg.RVector3(4.0, 4.0, 4.0))
    mesh.translate(pg.RVector3(0.0, 0.0, -5.0))
    print(mesh)
    mesh.exportVTK('sphere.vtk')

    alpha = 24
    v = 8.2
    epsilon = 1e-12
    gamma = (100 * epsilon)**(1. / v)
    d = alpha / (gamma * np.sqrt(2))
    d = 0
    p = pg.RVector3(d, d, 0.0)

    x = np.arange(-15, 15, 1.)
    spnts = pg.stdVectorRVector3()

    for i in x:
        spnts.append(pg.RVector3(i, 0.0))

    gz = pg.RVector(len(x), 0.0)
    for i, p in enumerate(spnts):

        for face in mesh.boundaries():
            Z = 0
            norm = face.norm()
            # cos( n, z )

            for j in range(face.nodeCount()):
                A = face.node(j)
                B = face.node((j + 1) % face.nodeCount())
                Z += lineIntegralZ3D(A.pos() - p, B.pos() - p, norm)

            gz[i] += Z

    gz = gz * 2000 * 6.67384e-11 * 1e5

    gAna = analyticalSphere(spnts,
                            radius=2.0,
                            pos=pg.RVector3(0.0, 0.0, -5.0),
                            dDensity=2000)

    ax1, ax2 = getaxes()
    ax1.plot(x, gAna, '-x', label='Analytical Sphere')

    ax1.plot(x, gz, label='polyhedral')

    ax1.legend()
    ax2.set_xlim([x[0], x[-1]])
    ax2.grid()
Example #3
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()
Example #4
0
def test3d():
    '''
    '''
    
    # test1. 
    mesh = g.Mesh( 3 )
    mesh.importSTL( 'sphere.stl' )
    mesh.scale( g.RVector3( 4.0, 4.0, 4.0 ) )
    mesh.translate( g.RVector3( 0.0, 0.0, -5.0 ) )
    print mesh
    mesh.exportVTK('sphere.vtk' )
    
    alpha = 24
    v = 8.2
    epsilon = 1e-12
    gamma = ( 100 * epsilon )** 1./v
    d = alpha / ( gamma * np.sqrt( 2 ) )
    d = 0
    p = g.RVector3( d, d, 0.0 )
    
    x = P.arange( -15, 15, 1. );
    spnts = g.stdVectorRVector3()
    
    for i in x:
        spnts.append( g.RVector3( i, 0.000 ) )
        
    gz = g.RVector( len(x), 0.0 )
    for i, p in enumerate( spnts ):   
        
        for face in mesh.boundaries():
            Z = 0
            norm = face.norm()
            # cos( n, z )
                
            for j in range( face.nodeCount( ) ):
                A = face.node( j )
                B = face.node( (j+1)%face.nodeCount( ) )
                Z += lineIntegralZ3D( A.pos() -p , B.pos() -p, norm )
          
            gz[ i ] += Z
    
        
    gz = gz * 2000 * 6.67384e-11 * 1e5
    
    gAna = analyticalSphere( spnts, radius = 2.0, pos = g.RVector3( 0.0, 0.0, -5.0 ), dDensity = 2000 )
    
    ax1, ax2 = getaxes()
    ax1.plot( x, gAna, '-x', label = 'Analytical Sphere' )
    
    ax1.plot( x, gz, label = 'polyhedral' )
    
    ax1.legend()
    ax2.set_xlim( [ x[0], x[-1] ] )
    ax2.grid()
Example #5
0
H8_6 = E2_2R * E2_1S * E2_2T
H8_7 = E2_2R * E2_2S * E2_2T
H8_8 = E2_1R * E2_2S * E2_2T

P15_6 = T3_3 * E2_2T * (2. * (T3_3 + E2_2T) + -3.)
P15_7 = T6_4 * E2_1T
P15_8 = T6_5 * E2_1T
P15_9 = T6_6 * E2_1T
P15_10 = T6_4 * E2_2T
P15_11 = T6_5 * E2_2T
P15_12 = T6_6 * E2_2T
P15_13 = T3_1 * E3_3T
P15_14 = T3_2 * E3_3T
P15_15 = T3_3 * E3_3T

pnts = g.stdVectorRVector3()

# quad
pnts.append(g.RVector3(0.0, 0.0))
pnts.append(g.RVector3(1.0, 0.0))
pnts.append(g.RVector3(1.0, 1.0))
pnts.append(g.RVector3(0.0, 1.0))
pnts.append(g.RVector3(0.5, 0.5))
#pnts.append(g.RVector3(0.5, 0.0))
#pnts.append(g.RVector3(1.0, 0.5))
#pnts.append(g.RVector3(0.5, 1.0))
#pnts.append(g.RVector3(0.0, 0.5))

## tri
#pnts.append(g.RVector3(0.0, 0.0))
#pnts.append(g.RVector3(1.0, 0.0))
Example #6
0
def test2d():
    mesh = pg.Mesh("mesh/world2d.bms")
    print (mesh)

    xMin = mesh.boundingBox().min()[0]
    yMax = mesh.boundingBox().max()[0]
    x = np.arange(xMin, yMax, 1.0)

    mesh.createNeighbourInfos()
    rho = pg.RVector(len(mesh.cellAttributes()), 1.0) * 2000.0
    rho.setVal(0.0, pg.find(mesh.cellAttributes() == 1.0))

    swatch = pg.Stopwatch(True)
    pnts = []
    spnts = pg.stdVectorRVector3()

    for i in x:
        pnts.append(pg.RVector3(i, 0.0001))
        spnts.append(pg.RVector3(i, 0.0001))

    #    gzC, GC = calcGCells(pnts, mesh, rho, 1)
    gzC = pg.calcGCells(spnts, mesh, rho, 1)
    print ("calcGCells", swatch.duration(True))
    #    gzB, GB = calcGBounds(pnts, mesh, rho)
    #    gzB = pg.calcGBounds(spnts, mesh, rho)
    #    print("calcGBounds", swatch.duration(True))

    gZ_Mesh = gzC

    ax1, ax2 = getaxes()

    # sphere analytical solution
    gAna = analyticalCircle2D(spnts, radius=2.0, pos=pg.RVector3(0.0, -5.0), dDensity=2000)
    gAna2 = analyticalCircle2D(spnts, radius=2.0, pos=pg.RVector3(5.0, -5.0), dDensity=2000)

    gAna = gAna + gAna2

    ax1.plot(x, gAna, "-x", label="analytical")
    ax1.plot(x, gZ_Mesh, label="WonBevis1987-mesh")

    print (gAna / gZ_Mesh)

    #    rho=GB[0]/mesh.cellSizes()

    drawModel(ax2, mesh, rho)
    for i in (0, 1):
        drawSelectedMeshBoundaries(ax2, mesh.findBoundaryByMarker(i), color=(1.0, 1.0, 1.0, 1.0), linewidth=0.3)

    # sphere polygone
    radius = 2.0
    depth = 5.0
    poly1 = pg.stdVectorRVector3()
    poly2 = pg.stdVectorRVector3()
    nSegment = 124
    for i in range(nSegment):
        xp = np.sin((i + 1) * (2.0 * np.pi) / nSegment)
        yp = np.cos((i + 1) * (2.0 * np.pi) / nSegment)
        poly1.append(pg.RVector3(xp * radius, yp * radius - depth))
        poly2.append(pg.RVector3(xp * radius + 5.0, yp * radius - depth))

    gZ_Poly = calcPolydgdz(spnts, poly1, 2000)
    gZ_Poly += calcPolydgdz(spnts, poly2, 2000)

    ax1.plot(x, gZ_Poly, label="WonBevis1987-Poly")
    ax2.plot(pg.x(poly1), pg.y(poly1), color="red")
    ax2.plot(pg.x(poly2), pg.y(poly2), color="red")

    ax2.plot(pg.x(spnts), pg.y(spnts), marker="x", color="black")

    # test some special case
    for i, p in enumerate(poly1):
        poly1[i] = pg.RVector3(poly1[i] - pg.RVector3(5.0, -6.0))

    ax2.plot(pg.x(poly1), pg.y(poly1), color="green")

    gz = calcPolydgdz(spnts, poly1, 2000)
    ax1.plot(x, gz, label="Special Case", color="green")
    ax1.set_ylabel("dg/dz [mGal]")
    ax2.set_ylabel("Tiefe [m]")

    ax1.legend()
    ax2.set_xlim([x[0], x[-1]])
    ax2.grid()
Example #7
0
A = mesh.createNode(pg.RVector3(-1.0, -1.0))
B = mesh.createNode(pg.RVector3(-2.0, -1.0))
C = mesh.createNode(pg.RVector3(-2.0, -2.0))
D = mesh.createNode(pg.RVector3(-1.0, -2.0))

mesh.createTriangle(A, B, C)
# mesh.createQuadrangle(A, B, C, D)
mesh.scale(pg.RVector3(3.0, 3.0))
# mesh.createTriangle(A, B, D)

print mesh.cellSizes()

x = np.arange(-10, 10, 1.0)
rho = pg.RVector(len(mesh.cellAttributes()), 1.0) * 2000.0
print (rho)
pnts = pg.stdVectorRVector3()

for i in x:
    pnts.append(pg.RVector3(i, 0.0001))

gzNum = []
gzNum.append(pg.calcGCells(pnts, mesh, rho, 0)[0])

# plt.plot(x, gzNum[0], label=str(0))

for i in range(1, 10):
    gzNum.append(pg.calcGCells(pnts, mesh, rho, i)[0])

    err = pg.abs(gzNum[i] / gzNum[0] - 1.0) * 100.0
    plt.semilogy(x, err, label=str(i))
Example #8
0
def test2d():    
    mesh = g.Mesh( 'mesh/world2d.bms' )
    print mesh

    xMin = mesh.boundingBox( ).min()[0]
    yMax = mesh.boundingBox( ).max()[0]
    x = P.arange( xMin, yMax, 1. );

    mesh.createNeighbourInfos()
    rho = g.RVector( len( mesh.cellAttributes() ), 1. ) * 2000.0 
    rho.setVal( 0.0, g.find( mesh.cellAttributes() == 1.0 ) )

    swatch = g.Stopwatch( True )
    pnts = []
    spnts = g.stdVectorRVector3()
    
    for i in x:
        pnts.append( g.RVector3( i, 0.0001 ) )
        spnts.append( g.RVector3( i, 0.0001 ) )
    
    #gzC, GC = calcGCells( pnts, mesh, rho, 1 )
    gzC = g.calcGCells( spnts , mesh, rho, 1 )
    print "calcGCells",  swatch.duration( True )
    #gzB, GB = calcGBounds( pnts, mesh, rho )
    gzB = g.calcGBounds( spnts , mesh, rho )
    print "calcGBounds", swatch.duration( True )

    gZ_Mesh = gzC

    
    ax1, ax2 = getaxes()

    # sphere analytical solution
    gAna  = analyticalCircle2D( spnts, radius = 2.0, pos = g.RVector3( 0.0, -5.0 ), dDensity = 2000 )
    gAna2 = analyticalCircle2D( spnts, radius = 2.0, pos = g.RVector3( 5.0, -5.0 ), dDensity = 2000 )
    
    gAna = gAna + gAna2

    ax1.plot( x, gAna, '-x', label= 'Analytisch' )
    ax1.plot( x, gZ_Mesh, label= 'WonBevis1987-mesh' )

    print gAna / gZ_Mesh

    #rho=GB[0]/mesh.cellSizes()

    gci = drawModel( ax2, mesh, rho )

    drawSelectedMeshBoundaries( ax2, mesh.findBoundaryByMarker( 0 )
                                , color = ( 1.0, 1.0, 1.0, 1.0 )
                                , linewidth = 0.3 )
    drawSelectedMeshBoundaries( ax2, mesh.findBoundaryByMarker( 1 )
                                , color = ( 1.0, 1.0, 1.0, 1.0 )
                                , linewidth = 0.3 )
       
    # sphere polygone
    radius = 2.
    depth = 5.
    poly1 = g.stdVectorRVector3()
    poly2 = g.stdVectorRVector3()
    nSegment=124
    for i in range( nSegment ):
        xp = np.sin( (i+1) * ( 2. * np.pi ) / nSegment )
        yp = np.cos( (i+1) * ( 2. * np.pi ) / nSegment )
        poly1.append( g.RVector3( xp * radius, yp * radius - depth ) )
        poly2.append( g.RVector3( xp * radius + 5., yp * radius - depth ) )

    gZ_Poly  = calcPolydgdz( spnts, poly1, 2000 )
    gZ_Poly += calcPolydgdz( spnts, poly2, 2000 )

    ax1.plot( x, gZ_Poly, label= 'WonBevis1987-Poly' )
    ax2.plot( g.x( poly1 ), g.y( poly1 ), color = 'red' )
    ax2.plot( g.x( poly2 ), g.y( poly2 ), color = 'red' )

    ax2.plot( g.x( spnts ), g.y( spnts ), marker = 'x', color = 'black' )

    # test some special case
    for i, p in enumerate( poly1 ):
        poly1[i] = g.RVector3( poly1[i] - g.RVector3( 5.0, -6. ) )
    
    ax2.plot( g.x( poly1 ), g.y( poly1 ), color = 'green' )

    gz  = calcPolydgdz( spnts, poly1, 2000 )
    ax1.plot( x, gz, label= 'Special Case', color = 'green' )
    ax1.set_ylabel( 'dg/dz [mGal]' )
    ax2.set_ylabel( 'Tiefe [m]' )

    ax1.legend()
    ax2.set_xlim( [ x[0], x[-1] ] )
    ax2.grid()
Example #9
0
A = mesh.createNode( g.RVector3( -1., -1. ) )
B = mesh.createNode( g.RVector3( -2., -1. ) )
C = mesh.createNode( g.RVector3( -2., -2. ) )
D = mesh.createNode( g.RVector3( -1., -2. ) )

mesh.createTriangle( A, B, C)
#mesh.createQuadrangle( A, B, C, D)
mesh.scale( g.RVector3( 3., 3. ) )
#mesh.createTriangle( A, B, D)

print mesh.cellSizes()

x = np.arange( -10, 10, 1. );
rho = g.RVector( len( mesh.cellAttributes() ), 1. ) * 2000.0
print rho
pnts = g.stdVectorRVector3()

for i in x:
    pnts.append( g.RVector3( i, 0.0001 ) )

gzNum = []
gzNum.append( g.calcGCells( pnts, mesh, rho, 0 )[0] )

#P.plot(x, gzNum[0], label = str(0) )

for i in range( 1, 10 ):
    gzNum.append( g.calcGCells( pnts, mesh, rho, i )[0] )

    err = g.abs(gzNum[i]/gzNum[0]-1.)*100.
    P.semilogy(x, err, label = str(i) )
    
Example #10
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 )
Example #11
0
def test2d():
    mesh = pg.Mesh('mesh/world2d.bms')
    print(mesh)

    xMin = mesh.boundingBox().min()[0]
    yMax = mesh.boundingBox().max()[0]
    x = np.arange(xMin, yMax, 1.)

    mesh.createNeighbourInfos()
    rho = pg.RVector(len(mesh.cellAttributes()), 1.) * 2000.0
    rho.setVal(0.0, pg.find(mesh.cellAttributes() == 1.0))

    swatch = pg.Stopwatch(True)
    pnts = []
    spnts = pg.stdVectorRVector3()

    for i in x:
        pnts.append(pg.RVector3(i, 0.0001))
        spnts.append(pg.RVector3(i, 0.0001))

#    gzC, GC = calcGCells(pnts, mesh, rho, 1)
    gzC = pg.calcGCells(spnts, mesh, rho, 1)
    print("calcGCells", swatch.duration(True))
    #    gzB, GB = calcGBounds(pnts, mesh, rho)
    #    gzB = pg.calcGBounds(spnts, mesh, rho)
    #    print("calcGBounds", swatch.duration(True))

    gZ_Mesh = gzC

    ax1, ax2 = getaxes()

    # sphere analytical solution
    gAna = analyticalCircle2D(spnts,
                              radius=2.0,
                              pos=pg.RVector3(0.0, -5.0),
                              dDensity=2000)
    gAna2 = analyticalCircle2D(spnts,
                               radius=2.0,
                               pos=pg.RVector3(5.0, -5.0),
                               dDensity=2000)

    gAna = gAna + gAna2

    ax1.plot(x, gAna, '-x', label='analytical')
    ax1.plot(x, gZ_Mesh, label='WonBevis1987-mesh')

    print(gAna / gZ_Mesh)

    #    rho=GB[0]/mesh.cellSizes()

    drawModel(ax2, mesh, rho)
    for i in (0, 1):
        drawSelectedMeshBoundaries(ax2,
                                   mesh.findBoundaryByMarker(i),
                                   color=(1.0, 1.0, 1.0, 1.0),
                                   linewidth=0.3)

    # sphere polygone
    radius = 2.
    depth = 5.
    poly1 = pg.stdVectorRVector3()
    poly2 = pg.stdVectorRVector3()
    nSegment = 124
    for i in range(nSegment):
        xp = np.sin((i + 1) * (2. * np.pi) / nSegment)
        yp = np.cos((i + 1) * (2. * np.pi) / nSegment)
        poly1.append(pg.RVector3(xp * radius, yp * radius - depth))
        poly2.append(pg.RVector3(xp * radius + 5., yp * radius - depth))

    gZ_Poly = calcPolydgdz(spnts, poly1, 2000)
    gZ_Poly += calcPolydgdz(spnts, poly2, 2000)

    ax1.plot(x, gZ_Poly, label='WonBevis1987-Poly')
    ax2.plot(pg.x(poly1), pg.y(poly1), color='red')
    ax2.plot(pg.x(poly2), pg.y(poly2), color='red')

    ax2.plot(pg.x(spnts), pg.y(spnts), marker='x', color='black')

    # test some special case
    for i, p in enumerate(poly1):
        poly1[i] = pg.RVector3(poly1[i] - pg.RVector3(5.0, -6.))

    ax2.plot(pg.x(poly1), pg.y(poly1), color='green')

    gz = calcPolydgdz(spnts, poly1, 2000)
    ax1.plot(x, gz, label='Special Case', color='green')
    ax1.set_ylabel('dg/dz [mGal]')
    ax2.set_ylabel('Tiefe [m]')

    ax1.legend()
    ax2.set_xlim([x[0], x[-1]])
    ax2.grid()
Example #12
0
A = mesh.createNode(pg.RVector3(-1., -1.))
B = mesh.createNode(pg.RVector3(-2., -1.))
C = mesh.createNode(pg.RVector3(-2., -2.))
D = mesh.createNode(pg.RVector3(-1., -2.))

mesh.createTriangle(A, B, C)
# mesh.createQuadrangle(A, B, C, D)
mesh.scale(pg.RVector3(3., 3.))
# mesh.createTriangle(A, B, D)

print mesh.cellSizes()

x = np.arange(-10, 10, 1.)
rho = pg.RVector(len(mesh.cellAttributes()), 1.) * 2000.0
print(rho)
pnts = pg.stdVectorRVector3()

for i in x:
    pnts.append(pg.RVector3(i, 0.0001))

gzNum = []
gzNum.append(pg.calcGCells(pnts, mesh, rho, 0)[0])

# plt.plot(x, gzNum[0], label=str(0))

for i in range(1, 10):
    gzNum.append(pg.calcGCells(pnts, mesh, rho, i)[0])

    err = pg.abs(gzNum[i] / gzNum[0] - 1.) * 100.
    plt.semilogy(x, err, label=str(i))