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')
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: