15808f684SSatish Balay# -------------------------------------------------------------------- 25808f684SSatish Balay 35808f684SSatish Balayfrom petsc4py import PETSc 45808f684SSatish Balayimport unittest 55808f684SSatish Balayfrom sys import getrefcount 6*9ae6e6bbSStefano Zampiniimport numpy as np 75808f684SSatish Balay 85808f684SSatish Balay# -------------------------------------------------------------------- 95808f684SSatish Balay 106f336411SStefano Zampini 115808f684SSatish Balayclass Function: 125808f684SSatish Balay def __call__(self, snes, x, f): 135808f684SSatish Balay f[0] = (x[0] * x[0] + x[0] * x[1] - 3.0).item() 145808f684SSatish Balay f[1] = (x[0] * x[1] + x[1] * x[1] - 6.0).item() 155808f684SSatish Balay f.assemble() 165808f684SSatish Balay 176f336411SStefano Zampini 185808f684SSatish Balayclass Jacobian: 195808f684SSatish Balay def __call__(self, snes, x, J, P): 205808f684SSatish Balay P[0, 0] = (2.0 * x[0] + x[1]).item() 215808f684SSatish Balay P[0, 1] = (x[0]).item() 225808f684SSatish Balay P[1, 0] = (x[1]).item() 235808f684SSatish Balay P[1, 1] = (x[0] + 2.0 * x[1]).item() 245808f684SSatish Balay P.assemble() 256f336411SStefano Zampini if J != P: 266f336411SStefano Zampini J.assemble() 276f336411SStefano Zampini 285808f684SSatish Balay 29*9ae6e6bbSStefano Zampini 305808f684SSatish Balay# -------------------------------------------------------------------- 315808f684SSatish Balay 325808f684SSatish Balay 336f336411SStefano Zampiniclass BaseTestSNES: 345808f684SSatish Balay SNES_TYPE = None 355808f684SSatish Balay 365808f684SSatish Balay def setUp(self): 375808f684SSatish Balay snes = PETSc.SNES() 385808f684SSatish Balay snes.create(PETSc.COMM_SELF) 395808f684SSatish Balay if self.SNES_TYPE: 405808f684SSatish Balay snes.setType(self.SNES_TYPE) 415808f684SSatish Balay self.snes = snes 425808f684SSatish Balay 435808f684SSatish Balay def tearDown(self): 445808f684SSatish Balay self.snes = None 4562e5d2d2SJDBetteridge PETSc.garbage_cleanup() 465808f684SSatish Balay 475808f684SSatish Balay def testGetSetType(self): 485808f684SSatish Balay self.assertEqual(self.snes.getType(), self.SNES_TYPE) 495808f684SSatish Balay self.snes.setType(self.SNES_TYPE) 505808f684SSatish Balay self.assertEqual(self.snes.getType(), self.SNES_TYPE) 515808f684SSatish Balay 525808f684SSatish Balay def testTols(self): 535808f684SSatish Balay tols = self.snes.getTolerances() 545808f684SSatish Balay self.snes.setTolerances(*tols) 555808f684SSatish Balay tnames = ('rtol', 'atol', 'stol', 'max_it') 565808f684SSatish Balay tolvals = [getattr(self.snes, t) for t in tnames] 575808f684SSatish Balay self.assertEqual(tuple(tols), tuple(tolvals)) 585808f684SSatish Balay 595808f684SSatish Balay def testProperties(self): 605808f684SSatish Balay snes = self.snes 615808f684SSatish Balay # 625808f684SSatish Balay snes.appctx = (1, 2, 3) 635808f684SSatish Balay self.assertEqual(snes.appctx, (1, 2, 3)) 645808f684SSatish Balay snes.appctx = None 655808f684SSatish Balay self.assertEqual(snes.appctx, None) 665808f684SSatish Balay # 675808f684SSatish Balay snes.its = 1 685808f684SSatish Balay self.assertEqual(snes.its, 1) 695808f684SSatish Balay snes.its = 0 705808f684SSatish Balay self.assertEqual(snes.its, 0) 715808f684SSatish Balay # 725808f684SSatish Balay snes.norm = 1 735808f684SSatish Balay self.assertEqual(snes.norm, 1) 745808f684SSatish Balay snes.norm = 0 755808f684SSatish Balay self.assertEqual(snes.norm, 0) 765808f684SSatish Balay # 775808f684SSatish Balay rh, ih = snes.history 785808f684SSatish Balay self.assertTrue(len(rh) == 0) 795808f684SSatish Balay self.assertTrue(len(ih) == 0) 805808f684SSatish Balay # 815808f684SSatish Balay reason = PETSc.SNES.ConvergedReason.CONVERGED_ITS 825808f684SSatish Balay snes.reason = reason 835808f684SSatish Balay self.assertEqual(snes.reason, reason) 84c78242eeSStefano Zampini self.assertTrue(snes.is_converged) 85c78242eeSStefano Zampini self.assertFalse(snes.is_diverged) 86c78242eeSStefano Zampini self.assertFalse(snes.is_iterating) 875808f684SSatish Balay reason = PETSc.SNES.ConvergedReason.DIVERGED_MAX_IT 885808f684SSatish Balay snes.reason = reason 895808f684SSatish Balay self.assertEqual(snes.reason, reason) 90c78242eeSStefano Zampini self.assertFalse(snes.is_converged) 91c78242eeSStefano Zampini self.assertTrue(snes.is_diverged) 92c78242eeSStefano Zampini self.assertFalse(snes.is_iterating) 935808f684SSatish Balay reason = PETSc.SNES.ConvergedReason.CONVERGED_ITERATING 945808f684SSatish Balay snes.reason = reason 955808f684SSatish Balay self.assertEqual(snes.reason, reason) 96c78242eeSStefano Zampini self.assertFalse(snes.is_converged) 97c78242eeSStefano Zampini self.assertFalse(snes.is_diverged) 98c78242eeSStefano Zampini self.assertTrue(snes.is_iterating) 995808f684SSatish Balay # 1005808f684SSatish Balay self.assertFalse(snes.use_ew) 1015808f684SSatish Balay self.assertFalse(snes.use_mf) 1025808f684SSatish Balay self.assertFalse(snes.use_fd) 1035808f684SSatish Balay 1045808f684SSatish Balay def testGetSetFunc(self): 1055808f684SSatish Balay r, func = self.snes.getFunction() 1065808f684SSatish Balay self.assertFalse(r) 1075808f684SSatish Balay self.assertTrue(func is None) 1085808f684SSatish Balay r = PETSc.Vec().createSeq(2) 1095808f684SSatish Balay func = Function() 1105808f684SSatish Balay refcnt = getrefcount(func) 1115808f684SSatish Balay self.snes.setFunction(func, r) 1125808f684SSatish Balay self.snes.setFunction(func, r) 1135808f684SSatish Balay self.assertEqual(getrefcount(func), refcnt + 1) 1145808f684SSatish Balay r2, func2 = self.snes.getFunction() 1155808f684SSatish Balay self.assertEqual(r, r2) 1165808f684SSatish Balay self.assertEqual(func, func2[0]) 1175808f684SSatish Balay self.assertEqual(getrefcount(func), refcnt + 1) 1185808f684SSatish Balay r3, func3 = self.snes.getFunction() 1195808f684SSatish Balay self.assertEqual(r, r3) 1205808f684SSatish Balay self.assertEqual(func, func3[0]) 1215808f684SSatish Balay self.assertEqual(getrefcount(func), refcnt + 1) 1225808f684SSatish Balay 1235808f684SSatish Balay def testCompFunc(self): 1245808f684SSatish Balay r = PETSc.Vec().createSeq(2) 1255808f684SSatish Balay func = Function() 1265808f684SSatish Balay self.snes.setFunction(func, r) 1275808f684SSatish Balay x, y = r.duplicate(), r.duplicate() 1285808f684SSatish Balay x[0], x[1] = [1, 2] 1295808f684SSatish Balay self.snes.computeFunction(x, y) 130e0aaf7daSStefano Zampini self.assertAlmostEqual(abs(y[0]), 0.0, places=5) 131e0aaf7daSStefano Zampini self.assertAlmostEqual(abs(y[1]), 0.0, places=5) 1325808f684SSatish Balay 1335808f684SSatish Balay def testGetSetJac(self): 1345808f684SSatish Balay A, P, jac = self.snes.getJacobian() 1355808f684SSatish Balay self.assertFalse(A) 1365808f684SSatish Balay self.assertFalse(P) 1375808f684SSatish Balay self.assertTrue(jac is None) 1385808f684SSatish Balay J = PETSc.Mat().create(PETSc.COMM_SELF) 1395808f684SSatish Balay J.setSizes([2, 2]) 1405808f684SSatish Balay J.setType(PETSc.Mat.Type.SEQAIJ) 1415808f684SSatish Balay J.setUp() 1425808f684SSatish Balay jac = Jacobian() 1435808f684SSatish Balay refcnt = getrefcount(jac) 1445808f684SSatish Balay self.snes.setJacobian(jac, J) 1455808f684SSatish Balay self.snes.setJacobian(jac, J) 1465808f684SSatish Balay self.assertEqual(getrefcount(jac), refcnt + 1) 1475808f684SSatish Balay J2, P2, jac2 = self.snes.getJacobian() 1485808f684SSatish Balay self.assertEqual(J, J2) 1495808f684SSatish Balay self.assertEqual(J2, P2) 1505808f684SSatish Balay self.assertEqual(jac, jac2[0]) 1515808f684SSatish Balay self.assertEqual(getrefcount(jac), refcnt + 1) 1525808f684SSatish Balay J3, P3, jac3 = self.snes.getJacobian() 1535808f684SSatish Balay self.assertEqual(J, J3) 1545808f684SSatish Balay self.assertEqual(J3, P3) 1555808f684SSatish Balay self.assertEqual(jac, jac3[0]) 1565808f684SSatish Balay self.assertEqual(getrefcount(jac), refcnt + 1) 1575808f684SSatish Balay 1585808f684SSatish Balay def testCompJac(self): 1595808f684SSatish Balay J = PETSc.Mat().create(PETSc.COMM_SELF) 1605808f684SSatish Balay J.setSizes([2, 2]) 1615808f684SSatish Balay J.setType(PETSc.Mat.Type.SEQAIJ) 1625808f684SSatish Balay J.setUp() 1635808f684SSatish Balay jac = Jacobian() 1645808f684SSatish Balay self.snes.setJacobian(jac, J) 1655808f684SSatish Balay x = PETSc.Vec().createSeq(2) 1665808f684SSatish Balay x[0], x[1] = [1, 2] 1675808f684SSatish Balay self.snes.getKSP().getPC() 1685808f684SSatish Balay self.snes.computeJacobian(x, J) 1695808f684SSatish Balay 1705808f684SSatish Balay def testGetSetUpd(self): 1715808f684SSatish Balay self.assertTrue(self.snes.getUpdate() is None) 1725808f684SSatish Balay upd = lambda snes, it: None 1735808f684SSatish Balay refcnt = getrefcount(upd) 1745808f684SSatish Balay self.snes.setUpdate(upd) 1755808f684SSatish Balay self.assertEqual(getrefcount(upd), refcnt + 1) 1765808f684SSatish Balay self.snes.setUpdate(upd) 1775808f684SSatish Balay self.assertEqual(getrefcount(upd), refcnt + 1) 1785808f684SSatish Balay self.snes.setUpdate(None) 1795808f684SSatish Balay self.assertTrue(self.snes.getUpdate() is None) 1805808f684SSatish Balay self.assertEqual(getrefcount(upd), refcnt) 1815808f684SSatish Balay self.snes.setUpdate(upd) 1825808f684SSatish Balay self.assertEqual(getrefcount(upd), refcnt + 1) 1835808f684SSatish Balay upd2 = lambda snes, it: None 1845808f684SSatish Balay refcnt2 = getrefcount(upd2) 1855808f684SSatish Balay self.snes.setUpdate(upd2) 1865808f684SSatish Balay self.assertEqual(getrefcount(upd), refcnt) 1875808f684SSatish Balay self.assertEqual(getrefcount(upd2), refcnt2 + 1) 1885808f684SSatish Balay tmp = self.snes.getUpdate()[0] 1895808f684SSatish Balay self.assertTrue(tmp is upd2) 1905808f684SSatish Balay self.assertEqual(getrefcount(upd2), refcnt2 + 2) 1915808f684SSatish Balay del tmp 1925808f684SSatish Balay self.snes.setUpdate(None) 1935808f684SSatish Balay self.assertTrue(self.snes.getUpdate() is None) 1945808f684SSatish Balay self.assertEqual(getrefcount(upd2), refcnt2) 1955808f684SSatish Balay 1965808f684SSatish Balay def testGetKSP(self): 1975808f684SSatish Balay ksp = self.snes.getKSP() 1985808f684SSatish Balay self.assertEqual(ksp.getRefCount(), 2) 1995808f684SSatish Balay 2005808f684SSatish Balay def testSolve(self): 2015808f684SSatish Balay J = PETSc.Mat().create(PETSc.COMM_SELF) 2025808f684SSatish Balay J.setSizes([2, 2]) 2035808f684SSatish Balay J.setType(PETSc.Mat.Type.SEQAIJ) 2045808f684SSatish Balay J.setUp() 2055808f684SSatish Balay r = PETSc.Vec().createSeq(2) 2065808f684SSatish Balay x = PETSc.Vec().createSeq(2) 2075808f684SSatish Balay b = PETSc.Vec().createSeq(2) 2085808f684SSatish Balay self.snes.setFunction(Function(), r) 2095808f684SSatish Balay self.snes.setJacobian(Jacobian(), J) 210*9ae6e6bbSStefano Zampini 211*9ae6e6bbSStefano Zampini def _update(snes, it, cnt): 212*9ae6e6bbSStefano Zampini cnt += 1 213*9ae6e6bbSStefano Zampini cnt_up = np.array(0) 214*9ae6e6bbSStefano Zampini self.snes.setUpdate(_update, (cnt_up,) ) 215*9ae6e6bbSStefano Zampini 2165808f684SSatish Balay x.setArray([2, 3]) 2175808f684SSatish Balay b.set(0) 2185808f684SSatish Balay self.snes.setConvergenceHistory() 2195808f684SSatish Balay self.snes.setFromOptions() 2205808f684SSatish Balay self.snes.solve(b, x) 221*9ae6e6bbSStefano Zampini self.snes.setUpdate(None) 2225808f684SSatish Balay rh, ih = self.snes.getConvergenceHistory() 2235808f684SSatish Balay self.snes.setConvergenceHistory(0, reset=True) 2245808f684SSatish Balay rh, ih = self.snes.getConvergenceHistory() 2255808f684SSatish Balay self.assertEqual(len(rh), 0) 2265808f684SSatish Balay self.assertEqual(len(ih), 0) 227e0aaf7daSStefano Zampini self.assertAlmostEqual(abs(x[0]), 1.0, places=5) 228e0aaf7daSStefano Zampini self.assertAlmostEqual(abs(x[1]), 2.0, places=5) 229*9ae6e6bbSStefano Zampini self.assertEqual(self.snes.getIterationNumber(), cnt_up) 2305808f684SSatish Balay # XXX this test should not be here ! 2315808f684SSatish Balay reason = self.snes.callConvergenceTest(1, 0, 0, 0) 2325808f684SSatish Balay self.assertTrue(reason > 0) 2335808f684SSatish Balay 23441e867a5SStefano Zampini # test interface 23541e867a5SStefano Zampini x = self.snes.getSolution() 23641e867a5SStefano Zampini x.setArray([2, 3]) 23741e867a5SStefano Zampini self.snes.solve() 23841e867a5SStefano Zampini self.assertAlmostEqual(abs(x[0]), 1.0, places=5) 23941e867a5SStefano Zampini self.assertAlmostEqual(abs(x[1]), 2.0, places=5) 24041e867a5SStefano Zampini 2415808f684SSatish Balay def testResetAndSolve(self): 2425808f684SSatish Balay self.snes.reset() 2435808f684SSatish Balay self.testSolve() 2445808f684SSatish Balay self.snes.reset() 2455808f684SSatish Balay self.testSolve() 2465808f684SSatish Balay self.snes.reset() 2475808f684SSatish Balay 2485808f684SSatish Balay def testSetMonitor(self): 2495808f684SSatish Balay reshist = {} 2506f336411SStefano Zampini 2515808f684SSatish Balay def monitor(snes, its, fgnorm): 2525808f684SSatish Balay reshist[its] = fgnorm 2536f336411SStefano Zampini 2545808f684SSatish Balay refcnt = getrefcount(monitor) 2555808f684SSatish Balay self.snes.setMonitor(monitor) 2565808f684SSatish Balay self.assertEqual(getrefcount(monitor), refcnt + 1) 2575808f684SSatish Balay self.testSolve() 2585808f684SSatish Balay self.assertTrue(len(reshist) > 0) 2595808f684SSatish Balay reshist = {} 2601dbd64e7SPierre Jolivet self.snes.monitorCancel() 2615808f684SSatish Balay self.assertEqual(getrefcount(monitor), refcnt) 2625808f684SSatish Balay self.testSolve() 2635808f684SSatish Balay self.assertTrue(len(reshist) == 0) 2645808f684SSatish Balay self.snes.setMonitor(monitor) 2655808f684SSatish Balay self.snes.monitor(1, 7) 2665808f684SSatish Balay self.assertTrue(reshist[1] == 7) 2675808f684SSatish Balay ## Monitor = PETSc.SNES.Monitor 2685808f684SSatish Balay ## self.snes.setMonitor(Monitor()) 2695808f684SSatish Balay ## self.snes.setMonitor(Monitor.DEFAULT) 2705808f684SSatish Balay ## self.snes.setMonitor(Monitor.SOLUTION) 2715808f684SSatish Balay ## self.snes.setMonitor(Monitor.RESIDUAL) 2725808f684SSatish Balay ## self.snes.setMonitor(Monitor.SOLUTION_UPDATE) 2735808f684SSatish Balay 2745808f684SSatish Balay def testSetGetStepFails(self): 2755808f684SSatish Balay its = self.snes.getIterationNumber() 2765808f684SSatish Balay self.assertEqual(its, 0) 2775808f684SSatish Balay fails = self.snes.getNonlinearStepFailures() 2785808f684SSatish Balay self.assertEqual(fails, 0) 2795808f684SSatish Balay fails = self.snes.getMaxNonlinearStepFailures() 2805808f684SSatish Balay self.assertEqual(fails, 1) 2815808f684SSatish Balay self.snes.setMaxNonlinearStepFailures(5) 2825808f684SSatish Balay fails = self.snes.getMaxNonlinearStepFailures() 2835808f684SSatish Balay self.assertEqual(fails, 5) 2845808f684SSatish Balay self.snes.setMaxNonlinearStepFailures(1) 2855808f684SSatish Balay fails = self.snes.getMaxNonlinearStepFailures() 2865808f684SSatish Balay self.assertEqual(fails, 1) 2875808f684SSatish Balay 2885808f684SSatish Balay def testSetGetLinFails(self): 2895808f684SSatish Balay its = self.snes.getLinearSolveIterations() 2905808f684SSatish Balay self.assertEqual(its, 0) 2915808f684SSatish Balay fails = self.snes.getLinearSolveFailures() 2925808f684SSatish Balay self.assertEqual(fails, 0) 2935808f684SSatish Balay fails = self.snes.getMaxLinearSolveFailures() 2945808f684SSatish Balay self.assertEqual(fails, 1) 2955808f684SSatish Balay self.snes.setMaxLinearSolveFailures(5) 2965808f684SSatish Balay fails = self.snes.getMaxLinearSolveFailures() 2975808f684SSatish Balay self.assertEqual(fails, 5) 2985808f684SSatish Balay self.snes.setMaxLinearSolveFailures(1) 2995808f684SSatish Balay fails = self.snes.getMaxLinearSolveFailures() 3005808f684SSatish Balay self.assertEqual(fails, 1) 3015808f684SSatish Balay 3025808f684SSatish Balay def testEW(self): 3035808f684SSatish Balay self.snes.setUseEW(False) 3045808f684SSatish Balay self.assertFalse(self.snes.getUseEW()) 3055808f684SSatish Balay self.snes.setUseEW(True) 3065808f684SSatish Balay self.assertTrue(self.snes.getUseEW()) 3075808f684SSatish Balay params = self.snes.getParamsEW() 3085808f684SSatish Balay params['version'] = 1 3095808f684SSatish Balay self.snes.setParamsEW(**params) 3105808f684SSatish Balay params = self.snes.getParamsEW() 3115808f684SSatish Balay self.assertEqual(params['version'], 1) 3125808f684SSatish Balay params['version'] = PETSc.DEFAULT 3135808f684SSatish Balay self.snes.setParamsEW(**params) 3145808f684SSatish Balay params = self.snes.getParamsEW() 3155808f684SSatish Balay self.assertEqual(params['version'], 1) 3165808f684SSatish Balay 3175808f684SSatish Balay def testMF(self): 3185808f684SSatish Balay # self.snes.setOptionsPrefix('MF-') 3195808f684SSatish Balay # opts = PETSc.Options(self.snes) 3205808f684SSatish Balay # opts['mat_mffd_type'] = 'ds' 3215808f684SSatish Balay # opts['snes_monitor'] = 'stdout' 3225808f684SSatish Balay # opts['ksp_monitor'] = 'stdout' 3235808f684SSatish Balay # opts['snes_view'] = 'stdout' 3245808f684SSatish Balay J = PETSc.Mat().create(PETSc.COMM_SELF) 3255808f684SSatish Balay J.setSizes([2, 2]) 3265808f684SSatish Balay J.setType(PETSc.Mat.Type.SEQAIJ) 3275808f684SSatish Balay J.setUp() 3285808f684SSatish Balay r = PETSc.Vec().createSeq(2) 3295808f684SSatish Balay x = PETSc.Vec().createSeq(2) 3305808f684SSatish Balay b = PETSc.Vec().createSeq(2) 3315808f684SSatish Balay fun = Function() 3325808f684SSatish Balay jac = Jacobian() 3335808f684SSatish Balay self.snes.setFunction(fun, r) 3345808f684SSatish Balay self.snes.setJacobian(jac, J) 3355808f684SSatish Balay self.assertFalse(self.snes.getUseMF()) 3365808f684SSatish Balay self.snes.setUseMF(False) 3375808f684SSatish Balay self.assertFalse(self.snes.getUseMF()) 3385808f684SSatish Balay self.snes.setUseMF(True) 3395808f684SSatish Balay self.assertTrue(self.snes.getUseMF()) 3405808f684SSatish Balay self.snes.setFromOptions() 3414a221d59SStefano Zampini if self.snes.getType() != PETSc.SNES.Type.NEWTONTR: 3425808f684SSatish Balay x.setArray([2, 3]) 3435808f684SSatish Balay b.set(0) 3445808f684SSatish Balay self.snes.solve(b, x) 345e0aaf7daSStefano Zampini self.assertAlmostEqual(abs(x[0]), 1.0, places=5) 346e0aaf7daSStefano Zampini self.assertAlmostEqual(abs(x[1]), 2.0, places=5) 3475808f684SSatish Balay 3485808f684SSatish Balay def testFDColor(self): 3495808f684SSatish Balay J = PETSc.Mat().create(PETSc.COMM_SELF) 3505808f684SSatish Balay J.setSizes([2, 2]) 3515808f684SSatish Balay J.setType(PETSc.Mat.Type.SEQAIJ) 3525808f684SSatish Balay J.setUp() 3535808f684SSatish Balay r = PETSc.Vec().createSeq(2) 3545808f684SSatish Balay x = PETSc.Vec().createSeq(2) 3555808f684SSatish Balay b = PETSc.Vec().createSeq(2) 3565808f684SSatish Balay fun = Function() 3575808f684SSatish Balay jac = Jacobian() 3585808f684SSatish Balay self.snes.setFunction(fun, r) 3595808f684SSatish Balay self.snes.setJacobian(jac, J) 3605808f684SSatish Balay self.assertFalse(self.snes.getUseFD()) 3615808f684SSatish Balay jac(self.snes, x, J, J) 3625808f684SSatish Balay self.snes.setUseFD(False) 3635808f684SSatish Balay self.assertFalse(self.snes.getUseFD()) 3645808f684SSatish Balay self.snes.setUseFD(True) 3655808f684SSatish Balay self.assertTrue(self.snes.getUseFD()) 3665808f684SSatish Balay self.snes.setFromOptions() 3675808f684SSatish Balay x.setArray([2, 3]) 3685808f684SSatish Balay b.set(0) 3695808f684SSatish Balay self.snes.solve(b, x) 3704a221d59SStefano Zampini self.assertAlmostEqual(abs(x[0]), 1.0, places=4) 3714a221d59SStefano Zampini self.assertAlmostEqual(abs(x[1]), 2.0, places=4) 3725808f684SSatish Balay 3739be84c52SStefano Zampini def testNPC(self): 3749be84c52SStefano Zampini self.snes.appctx = (1, 2, 3) 3759be84c52SStefano Zampini npc = self.snes.getNPC() 3769be84c52SStefano Zampini self.assertEqual(npc.appctx, (1, 2, 3)) 3779be84c52SStefano Zampini 3786f336411SStefano Zampini 3795808f684SSatish Balay# -------------------------------------------------------------------- 3805808f684SSatish Balay 3816f336411SStefano Zampini 3825808f684SSatish Balayclass TestSNESLS(BaseTestSNES, unittest.TestCase): 3835808f684SSatish Balay SNES_TYPE = PETSc.SNES.Type.NEWTONLS 3845808f684SSatish Balay 3856f336411SStefano Zampini 3865808f684SSatish Balayclass TestSNESTR(BaseTestSNES, unittest.TestCase): 3875808f684SSatish Balay SNES_TYPE = PETSc.SNES.Type.NEWTONTR 3885808f684SSatish Balay 3896f336411SStefano Zampini 3905808f684SSatish Balay# -------------------------------------------------------------------- 3915808f684SSatish Balay 3925808f684SSatish Balayif __name__ == '__main__': 3935808f684SSatish Balay unittest.main() 394