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