1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
|
from petsc4py import PETSc
import unittest
class TestMatSchur(unittest.TestCase):
def test(self):
COMM = PETSc.COMM_WORLD
TYPE = PETSc.Mat.Type.AIJ
comm_size = COMM.getSize()
A00 = PETSc.Mat().create(comm=COMM)
A00.setType(TYPE)
A00.setSizes([[2, 2*comm_size], [2, 2*comm_size]])
A01 = PETSc.Mat().create(comm=COMM)
A01.setType(TYPE)
A01.setSizes([[2, 2*comm_size], [3, 3*comm_size]])
A10 = PETSc.Mat().create(comm=COMM)
A10.setType(TYPE)
A10.setSizes([[3, 3*comm_size], [2, 2*comm_size]])
A11 = PETSc.Mat().create(comm=COMM)
A11.setType(TYPE)
A11.setSizes([[3, 3*comm_size], [3, 3*comm_size]])
S = PETSc.Mat().createSchurComplement(A00, A00, A01, A10, A11)
M, N = S.getSize()
self.assertEqual(M, 3*comm_size)
self.assertEqual(N, 3*comm_size)
m, n = S.getLocalSize()
self.assertEqual(m, 3)
self.assertEqual(n, 3)
A00_dup, A00p_dup, A01_dup, A10_dup, A11_dup = S.getSchurComplementSubMatrices()
self.assertEqual(A00_dup.id, A00.id)
self.assertEqual(A00p_dup.id, A00.id)
self.assertEqual(A01_dup.id, A01.id)
self.assertEqual(A10_dup.id, A10.id)
self.assertEqual(A11_dup.id, A11.id)
if __name__ == '__main__':
unittest.main()
|