def testMatMat(self): s = self._getCtx().s R = PETSc.Random().create(self.COMM) R.setFromOptions() A = PETSc.Mat().create(self.COMM) A.setSizes(self.A.getSizes()) A.setType(PETSc.Mat.Type.AIJ) A.setUp() A.setRandom(R) B = PETSc.Mat().create(self.COMM) B.setSizes(self.A.getSizes()) B.setType(PETSc.Mat.Type.AIJ) B.setUp() B.setRandom(R) I = PETSc.Mat().create(self.COMM) I.setSizes(self.A.getSizes()) I.setType(PETSc.Mat.Type.AIJ) I.setUp() I.assemble() I.shift(s) self.assertTrue(self.A.matMult(A).equal(I.matMult(A))) self.assertTrue(A.matMult(self.A).equal(A.matMult(I))) if self.A.getComm().Get_size() == 1: self.assertTrue( self.A.matTransposeMult(A).equal(I.matTransposeMult(A))) self.assertTrue( A.matTransposeMult(self.A).equal(A.matTransposeMult(I))) self.assertTrue( self.A.transposeMatMult(A).equal(I.transposeMatMult(A))) self.assertTrue( A.transposeMatMult(self.A).equal(A.transposeMatMult(I))) self.assertAlmostEqual((self.A.ptap(A) - I.ptap(A)).norm(), 0.0, places=5) self.assertAlmostEqual((A.ptap(self.A) - A.ptap(I)).norm(), 0.0, places=5) if self.A.getComm().Get_size() == 1: self.assertAlmostEqual((self.A.rart(A) - I.rart(A)).norm(), 0.0, places=5) self.assertAlmostEqual((A.rart(self.A) - A.rart(I)).norm(), 0.0, places=5) self.assertAlmostEqual( (self.A.matMatMult(A, B) - I.matMatMult(A, B)).norm(), 0.0, places=5) self.assertAlmostEqual( (A.matMatMult(self.A, B) - A.matMatMult(I, B)).norm(), 0.0, places=5) self.assertAlmostEqual( (A.matMatMult(B, self.A) - A.matMatMult(B, I)).norm(), 0.0, places=5)
def RandomVec(dim, rndseed): Stime = np.datetime64(datetime.datetime.now()).item().microsecond if rndseed==-1: rndseed=int(Ftime%4+Stime%3) psir = PETSc.Vec().create(comm=PETSc.COMM_WORLD) psir.setSizes(dim) psir.setFromOptions() rctx = PETSc.Random().create(comm=PETSc.COMM_WORLD); rctx.setFromOptions() rctx.setInterval([-1.0-1.0j,1.0+1.0j]) rctx.setSeed(rndseed) psir.setRandom(rctx) psir.normalize() Ftime = np.datetime64(datetime.datetime.now()).item().microsecond return psir, Ftime
viewer = PETSc.Viewer().createBinary(hamfile, 'r') H = PETSc.Mat().create(comm=PETSc.COMM_WORLD) H = PETSc.Mat().load(viewer) viewer.destroy() dim = H.getSize() H.setFromOptions() #// H is the Hamiltonian #//--------------------------------------------------- #//--------------------------------------------------- #// Initiate random vector #//--------------------------------------------------- psir = PETSc.Vec().create(comm=PETSc.COMM_WORLD) psir.setSizes(dim) psir.setFromOptions() rctx = PETSc.Random().create(comm=PETSc.COMM_WORLD) rctx.setFromOptions() rctx.setInterval([-1.0 - 1.0j, 1.0 + 1.0j]) rctx.setSeed(rndseed) psir.setRandom(rctx) rctx.destroy() #viewer = PETSc.Viewer().createASCII('ff') #viewer(psir) psii = psir.copy() #psii.view(viewer) psir.axpy(1.0j, psii) #psir.view(viewer) psir.norm(PETSc.NormType.NORM_2) #psir.view(viewer)