surface = Sphere(center=sp.array([0.0, 0.0]))
        
        band = Band(surface,comm,opt)
        la,lv,gv,wv = band.createGLVectors()
        v = band.getCoordinates() 
        dt = 0.1*band.dx**2
        vv = sp.array([[0,0],[1,0],[-1,0],[0,1],[0,-1]])
        weights = sp.array([-4,1,1,1,1])*(dt/band.dx**2)
        L = band.createAnyMat(vv, weights, (5,2))
        PETSc.Sys.Print('Laplacian')
    
        
        M = band.createExtensionMat()
        PETSc.Sys.Print('ExtensionMat built')
    
        band.initialu(initialu)
        PETSc.Sys.Print('Initial')
        nextt = 0.1
        PETSc.Sys.Print('Begin to solve')
        t = 0
        for t in sp.arange(0,1,dt):
            L.multAdd(gv,gv,wv)
            M.mult(wv,gv)
            if t > nextt:
                nextt += 0.1
                PETSc.Sys.Print('time is {0}'.format(t))
                

        mv = band.createExtensionMatForLoop(cp=points[vstart:vstart+vAssigned])
        cv = mv.getVecLeft()
        mv.mult(gv,cv)
        LM.mult(wv,gv)
        
        PETSc.Sys.Print('ML created')

        ts.setTime(0.0)
        ts.setTimeStep(0.01 * band.dx)
        ts.setDuration(1)
        gv.set(1)
        
        LM.mult(gv,wv)

        
        PETSc.Sys.Print('wv inf-norm is {0}'.format(wv.norm(PETSc.NormType.INFINITY)))
        
        
        band.initialu(cpz)
        ts.setSolution(gv)
        ts.setFromOptions()
        ts.setRHSFunction(PETSc.TS.computeRHSFunctionLinear,wv)
        ts.setRHSJacobian(PETSc.TS.computeRHSJacobianConstant,LM,LM)
        ts.setMonitor(monitor)
#        ts.step()
        PETSc.Sys.Print('Begin to solve')
        t = ts.solve(gv)
             

        mv = band.createExtensionMatForLoop(cp=points[vstart:vstart+vAssigned])
        cv = mv.getVecLeft()
        mv.mult(gv,cv)
        cv = band.toZeroStatic(cv)
        if comm.rank == 0:
#    LM = M.copy()
#    M.matMult(L,LM)
#    ts = PETSc.TS().create(comm=comm)
#    ts.setProblemType(ts.ProblemType.LINEAR)
#    ts.setType(ts.Type.EULER)  
#    ts.setTime(0.0)
#    ts.setTimeStep(band.dx**2)
#    ts.setMaxTime(1)
#    ts.setMaxSteps(1000)
#    ts.setSolution(gv)
#    ts.setFromOptions()
#    ts.setRHSFunction(None,wv)
#    ts.setRHSJacobian(None,LM,LM)
#    ts.solve(gv)
    band.initialu(initialu)
    PETSc.Sys.Print('Initial')
    c = gv.getArray()
    plot3d(v,c,title='initial u')
    nextt = 0.1
    PETSc.Sys.Print('Begin to solve')
    for t in sp.arange(0,0.01,dt):
        L.multAdd(gv,gv,wv)
        M.mult(wv,gv)
        if t > nextt:
            nextt += 0.1
            PETSc.Sys.Print('time is {0}'.format(t))
#    L.mult(gv,wv)
#    M.mult(wv,gv)    

#    mlab.points3d(v[:,0],v[:,1],wv.getArray(),mode = 'point')
Exemple #4
0
        LM.axpy(-6 / band.dx**2, I)
        LM.mult(wv, gv)

        PETSc.Sys.Print('ML created')

        ts.setTime(0.0)
        ts.setTimeStep(0.01 * band.dx)
        ts.setDuration(1)
        gv.set(1)

        LM.mult(gv, wv)

        PETSc.Sys.Print('wv inf-norm is {0}'.format(
            wv.norm(PETSc.NormType.INFINITY)))

        band.initialu(cpz)
        ts.setSolution(gv)
        ts.setFromOptions()
        ts.setRHSFunction(PETSc.TS.computeRHSFunctionLinear, wv)
        ts.setRHSJacobian(PETSc.TS.computeRHSJacobianConstant, LM, LM)
        ts.setMonitor(monitor)
        #        ts.step()
        PETSc.Sys.Print('Begin to solve')
        t = ts.solve(gv)

        mv = band.createExtensionMatForLoop(cp=points[vstart:vstart +
                                                      vAssigned])
        cv = mv.getVecLeft()
        mv.mult(gv, cv)
        cv = band.toZeroStatic(cv)
        if comm.rank == 0: