示例#1
0
    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)
示例#2
0
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
示例#3
0
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)