xref: /petsc/src/binding/petsc4py/test/test_vec.py (revision 4966afa4a61e66b7ff4b04724b7873362171acf0)
15808f684SSatish Balayfrom petsc4py import PETSc
25808f684SSatish Balayimport unittest
3aa23289cSDaiane Iglesia Dolciimport numpy as np
45808f684SSatish Balay
55808f684SSatish Balay# --------------------------------------------------------------------
65808f684SSatish Balay
75808f684SSatish Balay
86f336411SStefano Zampiniclass BaseTestVec:
95808f684SSatish Balay    COMM = None
105808f684SSatish Balay    TYPE = None
115808f684SSatish Balay
125808f684SSatish Balay    def setUp(self):
135808f684SSatish Balay        v = PETSc.Vec()
145808f684SSatish Balay        v.create(self.COMM)
155808f684SSatish Balay        v.setSizes(100)
165808f684SSatish Balay        v.setType(self.TYPE)
175808f684SSatish Balay        self.vec = v
185808f684SSatish Balay
195808f684SSatish Balay    def tearDown(self):
205808f684SSatish Balay        self.vec.destroy()
215808f684SSatish Balay        self.vec = None
2262e5d2d2SJDBetteridge        PETSc.garbage_cleanup()
235808f684SSatish Balay
245808f684SSatish Balay    def testDuplicate(self):
255808f684SSatish Balay        self.vec.set(1)
265808f684SSatish Balay        vec = self.vec.duplicate()
275808f684SSatish Balay        self.assertFalse(self.vec.equal(vec))
285808f684SSatish Balay        self.assertEqual(self.vec.sizes, vec.sizes)
295808f684SSatish Balay        del vec
305808f684SSatish Balay
315808f684SSatish Balay    def testCopy(self):
325808f684SSatish Balay        self.vec.set(1)
335808f684SSatish Balay        vec = self.vec.duplicate()
345808f684SSatish Balay        self.vec.copy(vec)
355808f684SSatish Balay        self.assertTrue(self.vec.equal(vec))
365808f684SSatish Balay        del vec
375808f684SSatish Balay
385808f684SSatish Balay    def testDot(self):
395808f684SSatish Balay        self.vec.set(1)
405808f684SSatish Balay        d = self.vec.dot(self.vec)
415808f684SSatish Balay        self.assertAlmostEqual(abs(d), self.vec.getSize())
425808f684SSatish Balay        self.vec.dotBegin(self.vec)
435808f684SSatish Balay        d = self.vec.dotEnd(self.vec)
445808f684SSatish Balay        self.assertAlmostEqual(abs(d), self.vec.getSize())
455808f684SSatish Balay
465808f684SSatish Balay    def testNorm(self):
475808f684SSatish Balay        from math import sqrt
486f336411SStefano Zampini
495808f684SSatish Balay        self.vec.set(1)
505808f684SSatish Balay        n1 = self.vec.norm(PETSc.NormType.NORM_1)
515808f684SSatish Balay        n2 = self.vec.norm(PETSc.NormType.NORM_2)
525808f684SSatish Balay        ni = self.vec.norm(PETSc.NormType.NORM_INFINITY)
535808f684SSatish Balay        self.assertAlmostEqual(n1, self.vec.getSize())
545808f684SSatish Balay        self.assertAlmostEqual(n2, sqrt(self.vec.getSize()))
555808f684SSatish Balay        self.assertAlmostEqual(n2, self.vec.norm())
565808f684SSatish Balay        self.assertAlmostEqual(ni, 1.0)
575808f684SSatish Balay        self.vec.normBegin(PETSc.NormType.NORM_1)
585808f684SSatish Balay        nn1 = self.vec.normEnd(PETSc.NormType.NORM_1)
595808f684SSatish Balay        self.assertAlmostEqual(nn1, n1)
605808f684SSatish Balay        self.vec.normBegin()
615808f684SSatish Balay        nn2 = self.vec.normEnd()
625808f684SSatish Balay        self.assertAlmostEqual(nn2, n2)
635808f684SSatish Balay        self.vec.normBegin(PETSc.NormType.NORM_INFINITY)
645808f684SSatish Balay        nni = self.vec.normEnd(PETSc.NormType.NORM_INFINITY)
655808f684SSatish Balay        self.assertAlmostEqual(nni, ni)
665808f684SSatish Balay
675808f684SSatish Balay    def testNormalize(self):
685808f684SSatish Balay        from math import sqrt
696f336411SStefano Zampini
705808f684SSatish Balay        self.vec.set(1)
715808f684SSatish Balay        n2 = self.vec.normalize()
725808f684SSatish Balay        self.assertAlmostEqual(n2, sqrt(self.vec.getSize()))
735808f684SSatish Balay        self.assertAlmostEqual(1, self.vec.norm())
745808f684SSatish Balay
755808f684SSatish Balay    def testSumMinMax(self):
765808f684SSatish Balay        self.vec.set(1)
775808f684SSatish Balay        self.assertEqual(self.vec.sum(), self.vec.getSize())
785808f684SSatish Balay        self.vec.set(-7)
795808f684SSatish Balay        self.assertEqual(self.vec.min()[1], -7)
805808f684SSatish Balay        self.vec.set(10)
815808f684SSatish Balay        self.assertEqual(self.vec.max()[1], 10)
825808f684SSatish Balay
835808f684SSatish Balay    def testSwap(self):
845808f684SSatish Balay        v1 = self.vec
855808f684SSatish Balay        v2 = v1.duplicate()
865808f684SSatish Balay        v1.set(1)
875808f684SSatish Balay        v2.set(2)
885808f684SSatish Balay        v1.swap(v2)
895808f684SSatish Balay        idx, _ = self.vec.getOwnershipRange()
905808f684SSatish Balay        self.assertEqual(v1[idx], 2)
915808f684SSatish Balay        self.assertEqual(v2[idx], 1)
925808f684SSatish Balay
935808f684SSatish Balay    def testBsize(self):
945808f684SSatish Balay        self.vec.setBlockSize(1)
955808f684SSatish Balay        self.assertEqual(self.vec.getBlockSize(), 1)
965808f684SSatish Balay        self.vec.setBlockSize(1)
975808f684SSatish Balay
985808f684SSatish Balay    def testGetSetVals(self):
995808f684SSatish Balay        start, end = self.vec.getOwnershipRange()
1005808f684SSatish Balay        self.vec[start] = -7
1015808f684SSatish Balay        self.vec[end - 1] = -7
10260211e57SBarry Smith        self.vec.assemble()
1035808f684SSatish Balay        self.assertEqual(self.vec[start], -7)
1045808f684SSatish Balay        self.assertEqual(self.vec[end - 1], -7)
1056f336411SStefano Zampini        for i in range(start, end):
1066f336411SStefano Zampini            self.vec[i] = i
10760211e57SBarry Smith        self.vec.assemble()
1085808f684SSatish Balay        values = [self.vec[i] for i in range(start, end)]
1095808f684SSatish Balay        self.assertEqual(values, list(range(start, end)))
1105808f684SSatish Balay        sz = self.vec.getSize()
1115808f684SSatish Balay        self.assertEqual(self.vec.sum(), (sz - 1) / 2.0 * sz)
1125808f684SSatish Balay
1135808f684SSatish Balay    def testGetSetValsBlocked(self):
1145808f684SSatish Balay        return
1155808f684SSatish Balay        lsize, gsize = self.vec.getSizes()
1165808f684SSatish Balay        start, end = self.vec.getOwnershipRange()
1175808f684SSatish Balay        bsizes = list(range(1, lsize + 1))
1185808f684SSatish Balay        nblocks = list(range(1, lsize + 1))
1196f336411SStefano Zampini        compat = [
1206f336411SStefano Zampini            (bs, nb)
1216f336411SStefano Zampini            for bs in bsizes
1226f336411SStefano Zampini            if not (gsize % bs or lsize % bs)
1236f336411SStefano Zampini            for nb in nblocks
1246f336411SStefano Zampini            if bs * nb <= lsize
1256f336411SStefano Zampini        ]
1265808f684SSatish Balay        for bsize, nblock in compat:
1275808f684SSatish Balay            self.vec.setBlockSize(bsize)
1285808f684SSatish Balay            bindex = [start // bsize + i for i in range(nblock)]
1295808f684SSatish Balay            bvalue = [float(i) for i in range(nblock * bsize)]
1305808f684SSatish Balay            self.vec.setValuesBlocked(bindex, bvalue)
1315808f684SSatish Balay            self.vec.assemble()
1325808f684SSatish Balay            index = [start + i for i in range(nblock * bsize)]
1335808f684SSatish Balay            value = self.vec.getValues(index)
1345808f684SSatish Balay            self.assertEqual(bvalue, list(value))
1355808f684SSatish Balay
1365808f684SSatish Balay    def testGetSetArray(self):
1375808f684SSatish Balay        self.vec.set(1)
1385808f684SSatish Balay        arr0 = self.vec.getArray().copy()
1395808f684SSatish Balay        self.assertEqual(arr0.sum(), self.vec.getLocalSize())
1405808f684SSatish Balay        arr0 = self.vec.getArray().copy()
1415808f684SSatish Balay        self.vec.setRandom()
1425808f684SSatish Balay        arr1 = self.vec.getArray().copy()
1435808f684SSatish Balay        self.vec.setArray(arr1)
1445808f684SSatish Balay        arr1 = self.vec.getArray().copy()
1455808f684SSatish Balay        arr2 = self.vec.getArray().copy()
1465808f684SSatish Balay        self.assertTrue((arr1 == arr2).all())
1476f336411SStefano Zampini
1485808f684SSatish Balay        refs = self.vec.getRefCount()
149fd6b63b0Smint Yzr        arr3 = np.asarray(self.vec)
1505808f684SSatish Balay        self.assertEqual(self.vec.getRefCount(), refs + 1)
1515808f684SSatish Balay        self.assertTrue((arr1 == arr3).all())
1525808f684SSatish Balay        arr3[:] = 0
1535808f684SSatish Balay        self.assertAlmostEqual(abs(self.vec.sum()), 0)
1545808f684SSatish Balay        self.assertEqual(self.vec.max()[1], 0)
1555808f684SSatish Balay        self.assertEqual(self.vec.min()[1], 0)
1565808f684SSatish Balay        self.vec.set(1)
1575808f684SSatish Balay        self.assertAlmostEqual(abs(arr3.sum()), self.vec.getLocalSize())
1585808f684SSatish Balay        self.assertEqual(arr3.min(), 1)
1595808f684SSatish Balay        self.assertEqual(arr3.max(), 1)
1605808f684SSatish Balay        del arr3
1615808f684SSatish Balay        self.assertEqual(self.vec.getRefCount(), refs)
1625808f684SSatish Balay
1635808f684SSatish Balay    def testPlaceArray(self):
1645808f684SSatish Balay        self.vec.set(1)
1655808f684SSatish Balay        array = self.vec.getArray().copy()
1665808f684SSatish Balay        self.vec.placeArray(array)
1675808f684SSatish Balay        array[:] = 2
1685808f684SSatish Balay        self.assertAlmostEqual(abs(self.vec.sum()), 2 * self.vec.getSize())
1695808f684SSatish Balay        self.vec.resetArray()
1705808f684SSatish Balay        self.assertAlmostEqual(abs(self.vec.sum()), self.vec.getSize())
1715808f684SSatish Balay
172df341386SStefano Zampini    def testLocalVector(self):
173df341386SStefano Zampini        rank = self.vec.getComm().Get_rank()
174df341386SStefano Zampini        self.vec.getArray()[:] = rank + 1
175df341386SStefano Zampini        ln = self.vec.getLocalSize()
176df341386SStefano Zampini        lvec = self.vec.createLocalVector()
177df341386SStefano Zampini        self.vec.getLocalVector(lvec)
178df341386SStefano Zampini        self.assertEqual(abs(lvec.sum()), (rank + 1) * ln)
179df341386SStefano Zampini        self.vec.restoreLocalVector(lvec)
180df341386SStefano Zampini        self.vec.getLocalVector(lvec, readonly=True)
181df341386SStefano Zampini        self.assertEqual(abs(lvec.sum()), (rank + 1) * ln)
182df341386SStefano Zampini        self.vec.restoreLocalVector(lvec, readonly=True)
183df341386SStefano Zampini        lvec.destroy()
184df341386SStefano Zampini
1855808f684SSatish Balay    def testSetOption(self):
1865808f684SSatish Balay        opt1 = PETSc.Vec.Option.IGNORE_OFF_PROC_ENTRIES
1875808f684SSatish Balay        opt2 = PETSc.Vec.Option.IGNORE_NEGATIVE_INDICES
1885808f684SSatish Balay        for opt in [opt1, opt2] * 2:
1895808f684SSatish Balay            for flag in [True, False] * 2:
1905808f684SSatish Balay                self.vec.setOption(opt, flag)
1915808f684SSatish Balay
1925808f684SSatish Balay    def testGetSetItem(self):
1935808f684SSatish Balay        v = self.vec
1945808f684SSatish Balay        w = v.duplicate()
1955808f684SSatish Balay        #
1965808f684SSatish Balay        v[...] = 7
1975808f684SSatish Balay        self.assertEqual(v.max()[1], 7)
1985808f684SSatish Balay        self.assertEqual(v.min()[1], 7)
1995808f684SSatish Balay        #
2005808f684SSatish Balay        v.setRandom()
2015808f684SSatish Balay        w[...] = v
2025808f684SSatish Balay        self.assertTrue(w.equal(v))
2035808f684SSatish Balay        #
2045808f684SSatish Balay        v.setRandom()
2055808f684SSatish Balay        w[...] = v.getArray()
2065808f684SSatish Balay        self.assertTrue(w.equal(v))
2075808f684SSatish Balay        #
2085808f684SSatish Balay        s, e = v.getOwnershipRange()
2095808f684SSatish Balay        v.setRandom()
2105808f684SSatish Balay        w[s:e] = v.getArray().copy()
21160211e57SBarry Smith        w.assemble()
2125808f684SSatish Balay        self.assertTrue(w.equal(v))
2135808f684SSatish Balay        w1, v1 = w[s], v[s]
2145808f684SSatish Balay        w2, v2 = w[e - 1], v[e - 1]
2155808f684SSatish Balay        self.assertEqual(w1, v1)
2165808f684SSatish Balay        self.assertEqual(w2, v2)
2175808f684SSatish Balay
2185808f684SSatish Balay    def testMAXPY(self):
2195808f684SSatish Balay        y = self.vec
2205808f684SSatish Balay        y.set(1)
2215808f684SSatish Balay        x = [y.copy() for _ in range(3)]
2225808f684SSatish Balay        a = [1] * len(x)
2235808f684SSatish Balay        y.maxpy(a, x)
2245808f684SSatish Balay        z = y.duplicate()
2255808f684SSatish Balay        z.set(len(x) + 1)
2266f336411SStefano Zampini        self.assertTrue(y.equal(z))
2275808f684SSatish Balay
228dda1fc56SLisandro Dalcin    def testBinOp(self):
229dda1fc56SLisandro Dalcin        x = self.vec
230dda1fc56SLisandro Dalcin        x.set(1)
231dda1fc56SLisandro Dalcin        n = x.getSize()
232dda1fc56SLisandro Dalcin        y = 2 + 2 * x + 1 - x * 3 - 1
233dda1fc56SLisandro Dalcin        self.assertEqual(y.min()[1], 1)
234dda1fc56SLisandro Dalcin        self.assertEqual(y.max()[1], 1)
235dda1fc56SLisandro Dalcin        z = (4 * x) / (2 * y)
236dda1fc56SLisandro Dalcin        self.assertEqual(z.min()[1], 2)
237dda1fc56SLisandro Dalcin        self.assertEqual(z.max()[1], 2)
238dda1fc56SLisandro Dalcin        z = z / 2
239dda1fc56SLisandro Dalcin        self.assertEqual(z.min()[1], 1)
240dda1fc56SLisandro Dalcin        self.assertEqual(z.max()[1], 1)
241dda1fc56SLisandro Dalcin        s = (+x) @ (-y)
242dda1fc56SLisandro Dalcin        self.assertEqual(s, -n)
243dda1fc56SLisandro Dalcin        #
244dda1fc56SLisandro Dalcin        M, N = n, 2 * n
245dda1fc56SLisandro Dalcin        A = PETSc.Mat().createDense((M, N), comm=self.COMM)
246dda1fc56SLisandro Dalcin        A.setUp()
247dda1fc56SLisandro Dalcin        rs, re = A.getOwnershipRange()
248dda1fc56SLisandro Dalcin        cs, ce = A.getOwnershipRangeColumn()
249dda1fc56SLisandro Dalcin        a, b = 3, 5
250dda1fc56SLisandro Dalcin        for i in range(rs, re):
251dda1fc56SLisandro Dalcin            for j in range(N):
252dda1fc56SLisandro Dalcin                A[i, j] = a * i + b * j
253dda1fc56SLisandro Dalcin        A.assemble()
254dda1fc56SLisandro Dalcin        y = x @ A
255dda1fc56SLisandro Dalcin        self.assertEqual(y.getSize(), N)
256dda1fc56SLisandro Dalcin        for i in range(cs, ce):
257dda1fc56SLisandro Dalcin            self.assertEqual(y[i], a * M * (M - 1) / 2 + b * i * M)
258dda1fc56SLisandro Dalcin        y.set(1)
259dda1fc56SLisandro Dalcin        z = A @ y
260dda1fc56SLisandro Dalcin        self.assertEqual(z.getSize(), M)
261dda1fc56SLisandro Dalcin        for i in range(rs, re):
262dda1fc56SLisandro Dalcin            self.assertEqual(z[i], b * N * (N - 1) / 2 + a * i * N)
2635808f684SSatish Balay
264aa23289cSDaiane Iglesia Dolci    def testConcatenate(self):
265aa23289cSDaiane Iglesia Dolci        x = self.vec
266aa23289cSDaiane Iglesia Dolci        y = x.duplicate()
267aa23289cSDaiane Iglesia Dolci        x.set(1)
268aa23289cSDaiane Iglesia Dolci        y.set(2)
269aa23289cSDaiane Iglesia Dolci        z, index_ises = PETSc.Vec.concatenate([x, y])
270aa23289cSDaiane Iglesia Dolci        self.assertEqual(z.getLocalSize(), x.getLocalSize() + y.getLocalSize())
271aa23289cSDaiane Iglesia Dolci        self.assertEqual(z.min()[1], x.min()[1])
272aa23289cSDaiane Iglesia Dolci        self.assertEqual(z.max()[1], y.max()[1])
273aa23289cSDaiane Iglesia Dolci        np.allclose(z.getArray(), np.concatenate([x.getArray(), y.getArray()]))
274aa23289cSDaiane Iglesia Dolci        np.allclose(z.getArray()[0 : x.getLocalSize()], x.getArray())
275aa23289cSDaiane Iglesia Dolci        np.allclose(z.getArray()[x.getLocalSize() :], y.getArray())
2766f336411SStefano Zampini
277*9167abc3Spaul.kuehner    def testMean(self):
278*9167abc3Spaul.kuehner        x = self.vec
279*9167abc3Spaul.kuehner        x.getArray()[:] = self.COMM.rank + 1
280*9167abc3Spaul.kuehner        self.assertAlmostEqual(x.mean(), np.mean(np.arange(1, self.COMM.size + 1)))
281*9167abc3Spaul.kuehner
282*9167abc3Spaul.kuehner
2835808f684SSatish Balay# --------------------------------------------------------------------
2845808f684SSatish Balay
2856f336411SStefano Zampini
2865808f684SSatish Balayclass TestVecSeq(BaseTestVec, unittest.TestCase):
2875808f684SSatish Balay    COMM = PETSc.COMM_SELF
2885808f684SSatish Balay    TYPE = PETSc.Vec.Type.SEQ
2895808f684SSatish Balay
2906f336411SStefano Zampini
2915808f684SSatish Balayclass TestVecMPI(BaseTestVec, unittest.TestCase):
2925808f684SSatish Balay    COMM = PETSc.COMM_WORLD
2935808f684SSatish Balay    TYPE = PETSc.Vec.Type.MPI
2945808f684SSatish Balay
2956f336411SStefano Zampini
2965808f684SSatish Balayclass TestVecShared(BaseTestVec, unittest.TestCase):
2975808f684SSatish Balay    if PETSc.COMM_WORLD.getSize() == 1:
2985808f684SSatish Balay        TYPE = PETSc.Vec.Type.SHARED
2995808f684SSatish Balay    else:
3005808f684SSatish Balay        TYPE = PETSc.Vec.Type.MPI
3015808f684SSatish Balay    COMM = PETSc.COMM_WORLD
3025808f684SSatish Balay
3036f336411SStefano Zampini
3045808f684SSatish Balay# class TestVecSieve(BaseTestVec, unittest.TestCase):
3055808f684SSatish Balay#    CLASS = PETSc.VecSieve
3065808f684SSatish Balay#    TARGS = ([],)
3075808f684SSatish Balay
3085808f684SSatish Balay# class TestVecGhost(BaseTestVec, unittest.TestCase):
3095808f684SSatish Balay#    CLASS = PETSc.VecGhost
3105808f684SSatish Balay#    TARGS = ([],)
3115808f684SSatish Balay
3125808f684SSatish Balay# --------------------------------------------------------------------
3135808f684SSatish Balay
3145808f684SSatish Balay
3156f336411SStefano Zampiniclass TestVecWithArray(unittest.TestCase):
3165808f684SSatish Balay    def testCreateSeq(self):
317fd6b63b0Smint Yzr        a = np.zeros(5, dtype=PETSc.ScalarType)
3185808f684SSatish Balay
3195808f684SSatish Balay        v1 = PETSc.Vec().createWithArray(a, comm=PETSc.COMM_SELF)
3205808f684SSatish Balay        v2 = PETSc.Vec().createWithArray(a, size=5, comm=PETSc.COMM_SELF)
3215808f684SSatish Balay        v3 = PETSc.Vec().createWithArray(a, size=3, comm=PETSc.COMM_SELF)
3225808f684SSatish Balay
3235808f684SSatish Balay        self.assertTrue(v1.size == 5)
3245808f684SSatish Balay        self.assertTrue(v2.size == 5)
3255808f684SSatish Balay        self.assertTrue(v3.size == 3)
3265808f684SSatish Balay
3276f336411SStefano Zampini        a1 = v1.getDict()['__array__']
3286f336411SStefano Zampini        self.assertTrue(a is a1)
3296f336411SStefano Zampini        a2 = v2.getDict()['__array__']
3306f336411SStefano Zampini        self.assertTrue(a is a2)
3316f336411SStefano Zampini        a3 = v3.getDict()['__array__']
3326f336411SStefano Zampini        self.assertTrue(a is a3)
3335808f684SSatish Balay
3345808f684SSatish Balay    def testCreateMPI(self):
335fd6b63b0Smint Yzr        a = np.zeros(5, dtype=PETSc.ScalarType)
3365808f684SSatish Balay
3375808f684SSatish Balay        v1 = PETSc.Vec().createWithArray(a, comm=PETSc.COMM_WORLD)
3385808f684SSatish Balay        v2 = PETSc.Vec().createWithArray(a, size=(5, None), comm=PETSc.COMM_WORLD)
3395808f684SSatish Balay        v3 = PETSc.Vec().createWithArray(a, size=(3, None), comm=PETSc.COMM_WORLD)
3405808f684SSatish Balay
3415808f684SSatish Balay        self.assertTrue(v1.local_size == 5)
3425808f684SSatish Balay        self.assertTrue(v2.local_size == 5)
3435808f684SSatish Balay        self.assertTrue(v3.local_size == 3)
3445808f684SSatish Balay
3456f336411SStefano Zampini        a1 = v1.getDict()['__array__']
3466f336411SStefano Zampini        self.assertTrue(a is a1)
3476f336411SStefano Zampini        a2 = v2.getDict()['__array__']
3486f336411SStefano Zampini        self.assertTrue(a is a2)
3496f336411SStefano Zampini        a3 = v3.getDict()['__array__']
3506f336411SStefano Zampini        self.assertTrue(a is a3)
3515808f684SSatish Balay
3525808f684SSatish Balay    def testSetMPIGhost(self):
3535808f684SSatish Balay        v = PETSc.Vec().create()
3545808f684SSatish Balay        v.setType(PETSc.Vec.Type.MPI)
3555808f684SSatish Balay        v.setSizes((5, None))
356*9167abc3Spaul.kuehner        ghosts = [i % v.size for i in range(v.owner_range[1], v.owner_range[1] + 3)]
3575808f684SSatish Balay        v.setMPIGhost(ghosts)
358fd6b63b0Smint Yzr        v.setArray(np.array(range(*v.owner_range), dtype=PETSc.ScalarType))
3595808f684SSatish Balay        v.ghostUpdate()
3605808f684SSatish Balay        with v.localForm() as loc:
361*9167abc3Spaul.kuehner            self.assertTrue((loc[0 : v.local_size] == range(*v.owner_range)).all())
3625808f684SSatish Balay            self.assertTrue((loc[v.local_size :] == ghosts).all())
3635808f684SSatish Balay
364fd6b63b0Smint Yzr    def testGetGhostIS(self):
365fd6b63b0Smint Yzr        v = PETSc.Vec().create()
366fd6b63b0Smint Yzr        v.setType(PETSc.Vec.Type.MPI)
367fd6b63b0Smint Yzr        v.setSizes((5, None))
368*9167abc3Spaul.kuehner        ghosts = [i % v.size for i in range(v.owner_range[1], v.owner_range[1] + 3)]
369fd6b63b0Smint Yzr        v.setMPIGhost(ghosts)
370fd6b63b0Smint Yzr        v.setArray(np.array(range(*v.owner_range), dtype=PETSc.ScalarType))
371fd6b63b0Smint Yzr        v.ghostUpdate()
372fd6b63b0Smint Yzr        self.assertTrue((v.getGhostIS().getIndices() == ghosts).all())
373fd6b63b0Smint Yzr
3746f336411SStefano Zampini
3755808f684SSatish Balay# --------------------------------------------------------------------
3765808f684SSatish Balay
3775808f684SSatish Balayif __name__ == '__main__':
3785808f684SSatish Balay    unittest.main()
3795808f684SSatish Balay
3805808f684SSatish Balay# --------------------------------------------------------------------
381