xref: /petsc/src/binding/petsc4py/test/test_snes.py (revision 6f33641175f69f1db294cc9ba81c3f4ad4f81d49)
15808f684SSatish Balay# --------------------------------------------------------------------
25808f684SSatish Balay
35808f684SSatish Balayfrom petsc4py import PETSc
45808f684SSatish Balayimport unittest
55808f684SSatish Balayfrom sys import getrefcount
65808f684SSatish Balay
75808f684SSatish Balay# --------------------------------------------------------------------
85808f684SSatish Balay
9*6f336411SStefano Zampini
105808f684SSatish Balayclass Function:
115808f684SSatish Balay    def __call__(self, snes, x, f):
125808f684SSatish Balay        f[0] = (x[0] * x[0] + x[0] * x[1] - 3.0).item()
135808f684SSatish Balay        f[1] = (x[0] * x[1] + x[1] * x[1] - 6.0).item()
145808f684SSatish Balay        f.assemble()
155808f684SSatish Balay
16*6f336411SStefano Zampini
175808f684SSatish Balayclass Jacobian:
185808f684SSatish Balay    def __call__(self, snes, x, J, P):
195808f684SSatish Balay        P[0, 0] = (2.0 * x[0] + x[1]).item()
205808f684SSatish Balay        P[0, 1] = (x[0]).item()
215808f684SSatish Balay        P[1, 0] = (x[1]).item()
225808f684SSatish Balay        P[1, 1] = (x[0] + 2.0 * x[1]).item()
235808f684SSatish Balay        P.assemble()
24*6f336411SStefano Zampini        if J != P:
25*6f336411SStefano Zampini            J.assemble()
26*6f336411SStefano Zampini
275808f684SSatish Balay
285808f684SSatish Balay# --------------------------------------------------------------------
295808f684SSatish Balay
305808f684SSatish Balay
31*6f336411SStefano Zampiniclass BaseTestSNES:
325808f684SSatish Balay    SNES_TYPE = None
335808f684SSatish Balay
345808f684SSatish Balay    def setUp(self):
355808f684SSatish Balay        snes = PETSc.SNES()
365808f684SSatish Balay        snes.create(PETSc.COMM_SELF)
375808f684SSatish Balay        if self.SNES_TYPE:
385808f684SSatish Balay            snes.setType(self.SNES_TYPE)
395808f684SSatish Balay        self.snes = snes
405808f684SSatish Balay
415808f684SSatish Balay    def tearDown(self):
425808f684SSatish Balay        self.snes = None
4362e5d2d2SJDBetteridge        PETSc.garbage_cleanup()
445808f684SSatish Balay
455808f684SSatish Balay    def testGetSetType(self):
465808f684SSatish Balay        self.assertEqual(self.snes.getType(), self.SNES_TYPE)
475808f684SSatish Balay        self.snes.setType(self.SNES_TYPE)
485808f684SSatish Balay        self.assertEqual(self.snes.getType(), self.SNES_TYPE)
495808f684SSatish Balay
505808f684SSatish Balay    def testTols(self):
515808f684SSatish Balay        tols = self.snes.getTolerances()
525808f684SSatish Balay        self.snes.setTolerances(*tols)
535808f684SSatish Balay        tnames = ('rtol', 'atol', 'stol', 'max_it')
545808f684SSatish Balay        tolvals = [getattr(self.snes, t) for t in tnames]
555808f684SSatish Balay        self.assertEqual(tuple(tols), tuple(tolvals))
565808f684SSatish Balay
575808f684SSatish Balay    def testProperties(self):
585808f684SSatish Balay        snes = self.snes
595808f684SSatish Balay        #
605808f684SSatish Balay        snes.appctx = (1, 2, 3)
615808f684SSatish Balay        self.assertEqual(snes.appctx, (1, 2, 3))
625808f684SSatish Balay        snes.appctx = None
635808f684SSatish Balay        self.assertEqual(snes.appctx, None)
645808f684SSatish Balay        #
655808f684SSatish Balay        snes.its = 1
665808f684SSatish Balay        self.assertEqual(snes.its, 1)
675808f684SSatish Balay        snes.its = 0
685808f684SSatish Balay        self.assertEqual(snes.its, 0)
695808f684SSatish Balay        #
705808f684SSatish Balay        snes.norm = 1
715808f684SSatish Balay        self.assertEqual(snes.norm, 1)
725808f684SSatish Balay        snes.norm = 0
735808f684SSatish Balay        self.assertEqual(snes.norm, 0)
745808f684SSatish Balay        #
755808f684SSatish Balay        rh, ih = snes.history
765808f684SSatish Balay        self.assertTrue(len(rh) == 0)
775808f684SSatish Balay        self.assertTrue(len(ih) == 0)
785808f684SSatish Balay        #
795808f684SSatish Balay        reason = PETSc.SNES.ConvergedReason.CONVERGED_ITS
805808f684SSatish Balay        snes.reason = reason
815808f684SSatish Balay        self.assertEqual(snes.reason, reason)
82c78242eeSStefano Zampini        self.assertTrue(snes.is_converged)
83c78242eeSStefano Zampini        self.assertFalse(snes.is_diverged)
84c78242eeSStefano Zampini        self.assertFalse(snes.is_iterating)
855808f684SSatish Balay        reason = PETSc.SNES.ConvergedReason.DIVERGED_MAX_IT
865808f684SSatish Balay        snes.reason = reason
875808f684SSatish Balay        self.assertEqual(snes.reason, reason)
88c78242eeSStefano Zampini        self.assertFalse(snes.is_converged)
89c78242eeSStefano Zampini        self.assertTrue(snes.is_diverged)
90c78242eeSStefano Zampini        self.assertFalse(snes.is_iterating)
915808f684SSatish Balay        reason = PETSc.SNES.ConvergedReason.CONVERGED_ITERATING
925808f684SSatish Balay        snes.reason = reason
935808f684SSatish Balay        self.assertEqual(snes.reason, reason)
94c78242eeSStefano Zampini        self.assertFalse(snes.is_converged)
95c78242eeSStefano Zampini        self.assertFalse(snes.is_diverged)
96c78242eeSStefano Zampini        self.assertTrue(snes.is_iterating)
975808f684SSatish Balay        #
985808f684SSatish Balay        self.assertFalse(snes.use_ew)
995808f684SSatish Balay        self.assertFalse(snes.use_mf)
1005808f684SSatish Balay        self.assertFalse(snes.use_fd)
1015808f684SSatish Balay
1025808f684SSatish Balay    def testGetSetFunc(self):
1035808f684SSatish Balay        r, func = self.snes.getFunction()
1045808f684SSatish Balay        self.assertFalse(r)
1055808f684SSatish Balay        self.assertTrue(func is None)
1065808f684SSatish Balay        r = PETSc.Vec().createSeq(2)
1075808f684SSatish Balay        func = Function()
1085808f684SSatish Balay        refcnt = getrefcount(func)
1095808f684SSatish Balay        self.snes.setFunction(func, r)
1105808f684SSatish Balay        self.snes.setFunction(func, r)
1115808f684SSatish Balay        self.assertEqual(getrefcount(func), refcnt + 1)
1125808f684SSatish Balay        r2, func2 = self.snes.getFunction()
1135808f684SSatish Balay        self.assertEqual(r, r2)
1145808f684SSatish Balay        self.assertEqual(func, func2[0])
1155808f684SSatish Balay        self.assertEqual(getrefcount(func), refcnt + 1)
1165808f684SSatish Balay        r3, func3 = self.snes.getFunction()
1175808f684SSatish Balay        self.assertEqual(r, r3)
1185808f684SSatish Balay        self.assertEqual(func, func3[0])
1195808f684SSatish Balay        self.assertEqual(getrefcount(func), refcnt + 1)
1205808f684SSatish Balay
1215808f684SSatish Balay    def testCompFunc(self):
1225808f684SSatish Balay        r = PETSc.Vec().createSeq(2)
1235808f684SSatish Balay        func = Function()
1245808f684SSatish Balay        self.snes.setFunction(func, r)
1255808f684SSatish Balay        x, y = r.duplicate(), r.duplicate()
1265808f684SSatish Balay        x[0], x[1] = [1, 2]
1275808f684SSatish Balay        self.snes.computeFunction(x, y)
128e0aaf7daSStefano Zampini        self.assertAlmostEqual(abs(y[0]), 0.0, places=5)
129e0aaf7daSStefano Zampini        self.assertAlmostEqual(abs(y[1]), 0.0, places=5)
1305808f684SSatish Balay
1315808f684SSatish Balay    def testGetSetJac(self):
1325808f684SSatish Balay        A, P, jac = self.snes.getJacobian()
1335808f684SSatish Balay        self.assertFalse(A)
1345808f684SSatish Balay        self.assertFalse(P)
1355808f684SSatish Balay        self.assertTrue(jac is None)
1365808f684SSatish Balay        J = PETSc.Mat().create(PETSc.COMM_SELF)
1375808f684SSatish Balay        J.setSizes([2, 2])
1385808f684SSatish Balay        J.setType(PETSc.Mat.Type.SEQAIJ)
1395808f684SSatish Balay        J.setUp()
1405808f684SSatish Balay        jac = Jacobian()
1415808f684SSatish Balay        refcnt = getrefcount(jac)
1425808f684SSatish Balay        self.snes.setJacobian(jac, J)
1435808f684SSatish Balay        self.snes.setJacobian(jac, J)
1445808f684SSatish Balay        self.assertEqual(getrefcount(jac), refcnt + 1)
1455808f684SSatish Balay        J2, P2, jac2 = self.snes.getJacobian()
1465808f684SSatish Balay        self.assertEqual(J, J2)
1475808f684SSatish Balay        self.assertEqual(J2, P2)
1485808f684SSatish Balay        self.assertEqual(jac, jac2[0])
1495808f684SSatish Balay        self.assertEqual(getrefcount(jac), refcnt + 1)
1505808f684SSatish Balay        J3, P3, jac3 = self.snes.getJacobian()
1515808f684SSatish Balay        self.assertEqual(J, J3)
1525808f684SSatish Balay        self.assertEqual(J3, P3)
1535808f684SSatish Balay        self.assertEqual(jac, jac3[0])
1545808f684SSatish Balay        self.assertEqual(getrefcount(jac), refcnt + 1)
1555808f684SSatish Balay
1565808f684SSatish Balay    def testCompJac(self):
1575808f684SSatish Balay        J = PETSc.Mat().create(PETSc.COMM_SELF)
1585808f684SSatish Balay        J.setSizes([2, 2])
1595808f684SSatish Balay        J.setType(PETSc.Mat.Type.SEQAIJ)
1605808f684SSatish Balay        J.setUp()
1615808f684SSatish Balay        jac = Jacobian()
1625808f684SSatish Balay        self.snes.setJacobian(jac, J)
1635808f684SSatish Balay        x = PETSc.Vec().createSeq(2)
1645808f684SSatish Balay        x[0], x[1] = [1, 2]
1655808f684SSatish Balay        self.snes.getKSP().getPC()
1665808f684SSatish Balay        self.snes.computeJacobian(x, J)
1675808f684SSatish Balay
1685808f684SSatish Balay    def testGetSetUpd(self):
1695808f684SSatish Balay        self.assertTrue(self.snes.getUpdate() is None)
1705808f684SSatish Balay        upd = lambda snes, it: None
1715808f684SSatish Balay        refcnt = getrefcount(upd)
1725808f684SSatish Balay        self.snes.setUpdate(upd)
1735808f684SSatish Balay        self.assertEqual(getrefcount(upd), refcnt + 1)
1745808f684SSatish Balay        self.snes.setUpdate(upd)
1755808f684SSatish Balay        self.assertEqual(getrefcount(upd), refcnt + 1)
1765808f684SSatish Balay        self.snes.setUpdate(None)
1775808f684SSatish Balay        self.assertTrue(self.snes.getUpdate() is None)
1785808f684SSatish Balay        self.assertEqual(getrefcount(upd), refcnt)
1795808f684SSatish Balay        self.snes.setUpdate(upd)
1805808f684SSatish Balay        self.assertEqual(getrefcount(upd), refcnt + 1)
1815808f684SSatish Balay        upd2 = lambda snes, it: None
1825808f684SSatish Balay        refcnt2 = getrefcount(upd2)
1835808f684SSatish Balay        self.snes.setUpdate(upd2)
1845808f684SSatish Balay        self.assertEqual(getrefcount(upd), refcnt)
1855808f684SSatish Balay        self.assertEqual(getrefcount(upd2), refcnt2 + 1)
1865808f684SSatish Balay        tmp = self.snes.getUpdate()[0]
1875808f684SSatish Balay        self.assertTrue(tmp is upd2)
1885808f684SSatish Balay        self.assertEqual(getrefcount(upd2), refcnt2 + 2)
1895808f684SSatish Balay        del tmp
1905808f684SSatish Balay        self.snes.setUpdate(None)
1915808f684SSatish Balay        self.assertTrue(self.snes.getUpdate() is None)
1925808f684SSatish Balay        self.assertEqual(getrefcount(upd2), refcnt2)
1935808f684SSatish Balay
1945808f684SSatish Balay    def testGetKSP(self):
1955808f684SSatish Balay        ksp = self.snes.getKSP()
1965808f684SSatish Balay        self.assertEqual(ksp.getRefCount(), 2)
1975808f684SSatish Balay
1985808f684SSatish Balay    def testSolve(self):
1995808f684SSatish Balay        J = PETSc.Mat().create(PETSc.COMM_SELF)
2005808f684SSatish Balay        J.setSizes([2, 2])
2015808f684SSatish Balay        J.setType(PETSc.Mat.Type.SEQAIJ)
2025808f684SSatish Balay        J.setUp()
2035808f684SSatish Balay        r = PETSc.Vec().createSeq(2)
2045808f684SSatish Balay        x = PETSc.Vec().createSeq(2)
2055808f684SSatish Balay        b = PETSc.Vec().createSeq(2)
2065808f684SSatish Balay        self.snes.setFunction(Function(), r)
2075808f684SSatish Balay        self.snes.setJacobian(Jacobian(), J)
2085808f684SSatish Balay        x.setArray([2, 3])
2095808f684SSatish Balay        b.set(0)
2105808f684SSatish Balay        self.snes.setConvergenceHistory()
2115808f684SSatish Balay        self.snes.setFromOptions()
2125808f684SSatish Balay        self.snes.solve(b, x)
2135808f684SSatish Balay        rh, ih = self.snes.getConvergenceHistory()
2145808f684SSatish Balay        self.snes.setConvergenceHistory(0, reset=True)
2155808f684SSatish Balay        rh, ih = self.snes.getConvergenceHistory()
2165808f684SSatish Balay        self.assertEqual(len(rh), 0)
2175808f684SSatish Balay        self.assertEqual(len(ih), 0)
218e0aaf7daSStefano Zampini        self.assertAlmostEqual(abs(x[0]), 1.0, places=5)
219e0aaf7daSStefano Zampini        self.assertAlmostEqual(abs(x[1]), 2.0, places=5)
2205808f684SSatish Balay        # XXX this test should not be here !
2215808f684SSatish Balay        reason = self.snes.callConvergenceTest(1, 0, 0, 0)
2225808f684SSatish Balay        self.assertTrue(reason > 0)
2235808f684SSatish Balay
22441e867a5SStefano Zampini        # test interface
22541e867a5SStefano Zampini        x = self.snes.getSolution()
22641e867a5SStefano Zampini        x.setArray([2, 3])
22741e867a5SStefano Zampini        self.snes.solve()
22841e867a5SStefano Zampini        self.assertAlmostEqual(abs(x[0]), 1.0, places=5)
22941e867a5SStefano Zampini        self.assertAlmostEqual(abs(x[1]), 2.0, places=5)
23041e867a5SStefano Zampini
2315808f684SSatish Balay    def testResetAndSolve(self):
2325808f684SSatish Balay        self.snes.reset()
2335808f684SSatish Balay        self.testSolve()
2345808f684SSatish Balay        self.snes.reset()
2355808f684SSatish Balay        self.testSolve()
2365808f684SSatish Balay        self.snes.reset()
2375808f684SSatish Balay
2385808f684SSatish Balay    def testSetMonitor(self):
2395808f684SSatish Balay        reshist = {}
240*6f336411SStefano Zampini
2415808f684SSatish Balay        def monitor(snes, its, fgnorm):
2425808f684SSatish Balay            reshist[its] = fgnorm
243*6f336411SStefano Zampini
2445808f684SSatish Balay        refcnt = getrefcount(monitor)
2455808f684SSatish Balay        self.snes.setMonitor(monitor)
2465808f684SSatish Balay        self.assertEqual(getrefcount(monitor), refcnt + 1)
2475808f684SSatish Balay        self.testSolve()
2485808f684SSatish Balay        self.assertTrue(len(reshist) > 0)
2495808f684SSatish Balay        reshist = {}
2501dbd64e7SPierre Jolivet        self.snes.monitorCancel()
2515808f684SSatish Balay        self.assertEqual(getrefcount(monitor), refcnt)
2525808f684SSatish Balay        self.testSolve()
2535808f684SSatish Balay        self.assertTrue(len(reshist) == 0)
2545808f684SSatish Balay        self.snes.setMonitor(monitor)
2555808f684SSatish Balay        self.snes.monitor(1, 7)
2565808f684SSatish Balay        self.assertTrue(reshist[1] == 7)
2575808f684SSatish Balay        ## Monitor = PETSc.SNES.Monitor
2585808f684SSatish Balay        ## self.snes.setMonitor(Monitor())
2595808f684SSatish Balay        ## self.snes.setMonitor(Monitor.DEFAULT)
2605808f684SSatish Balay        ## self.snes.setMonitor(Monitor.SOLUTION)
2615808f684SSatish Balay        ## self.snes.setMonitor(Monitor.RESIDUAL)
2625808f684SSatish Balay        ## self.snes.setMonitor(Monitor.SOLUTION_UPDATE)
2635808f684SSatish Balay
2645808f684SSatish Balay    def testSetGetStepFails(self):
2655808f684SSatish Balay        its = self.snes.getIterationNumber()
2665808f684SSatish Balay        self.assertEqual(its, 0)
2675808f684SSatish Balay        fails = self.snes.getNonlinearStepFailures()
2685808f684SSatish Balay        self.assertEqual(fails, 0)
2695808f684SSatish Balay        fails = self.snes.getMaxNonlinearStepFailures()
2705808f684SSatish Balay        self.assertEqual(fails, 1)
2715808f684SSatish Balay        self.snes.setMaxNonlinearStepFailures(5)
2725808f684SSatish Balay        fails = self.snes.getMaxNonlinearStepFailures()
2735808f684SSatish Balay        self.assertEqual(fails, 5)
2745808f684SSatish Balay        self.snes.setMaxNonlinearStepFailures(1)
2755808f684SSatish Balay        fails = self.snes.getMaxNonlinearStepFailures()
2765808f684SSatish Balay        self.assertEqual(fails, 1)
2775808f684SSatish Balay
2785808f684SSatish Balay    def testSetGetLinFails(self):
2795808f684SSatish Balay        its = self.snes.getLinearSolveIterations()
2805808f684SSatish Balay        self.assertEqual(its, 0)
2815808f684SSatish Balay        fails = self.snes.getLinearSolveFailures()
2825808f684SSatish Balay        self.assertEqual(fails, 0)
2835808f684SSatish Balay        fails = self.snes.getMaxLinearSolveFailures()
2845808f684SSatish Balay        self.assertEqual(fails, 1)
2855808f684SSatish Balay        self.snes.setMaxLinearSolveFailures(5)
2865808f684SSatish Balay        fails = self.snes.getMaxLinearSolveFailures()
2875808f684SSatish Balay        self.assertEqual(fails, 5)
2885808f684SSatish Balay        self.snes.setMaxLinearSolveFailures(1)
2895808f684SSatish Balay        fails = self.snes.getMaxLinearSolveFailures()
2905808f684SSatish Balay        self.assertEqual(fails, 1)
2915808f684SSatish Balay
2925808f684SSatish Balay    def testEW(self):
2935808f684SSatish Balay        self.snes.setUseEW(False)
2945808f684SSatish Balay        self.assertFalse(self.snes.getUseEW())
2955808f684SSatish Balay        self.snes.setUseEW(True)
2965808f684SSatish Balay        self.assertTrue(self.snes.getUseEW())
2975808f684SSatish Balay        params = self.snes.getParamsEW()
2985808f684SSatish Balay        params['version'] = 1
2995808f684SSatish Balay        self.snes.setParamsEW(**params)
3005808f684SSatish Balay        params = self.snes.getParamsEW()
3015808f684SSatish Balay        self.assertEqual(params['version'], 1)
3025808f684SSatish Balay        params['version'] = PETSc.DEFAULT
3035808f684SSatish Balay        self.snes.setParamsEW(**params)
3045808f684SSatish Balay        params = self.snes.getParamsEW()
3055808f684SSatish Balay        self.assertEqual(params['version'], 1)
3065808f684SSatish Balay
3075808f684SSatish Balay    def testMF(self):
3085808f684SSatish Balay        # self.snes.setOptionsPrefix('MF-')
3095808f684SSatish Balay        # opts = PETSc.Options(self.snes)
3105808f684SSatish Balay        # opts['mat_mffd_type'] = 'ds'
3115808f684SSatish Balay        # opts['snes_monitor']  = 'stdout'
3125808f684SSatish Balay        # opts['ksp_monitor']   = 'stdout'
3135808f684SSatish Balay        # opts['snes_view']     = 'stdout'
3145808f684SSatish Balay        J = PETSc.Mat().create(PETSc.COMM_SELF)
3155808f684SSatish Balay        J.setSizes([2, 2])
3165808f684SSatish Balay        J.setType(PETSc.Mat.Type.SEQAIJ)
3175808f684SSatish Balay        J.setUp()
3185808f684SSatish Balay        r = PETSc.Vec().createSeq(2)
3195808f684SSatish Balay        x = PETSc.Vec().createSeq(2)
3205808f684SSatish Balay        b = PETSc.Vec().createSeq(2)
3215808f684SSatish Balay        fun = Function()
3225808f684SSatish Balay        jac = Jacobian()
3235808f684SSatish Balay        self.snes.setFunction(fun, r)
3245808f684SSatish Balay        self.snes.setJacobian(jac, J)
3255808f684SSatish Balay        self.assertFalse(self.snes.getUseMF())
3265808f684SSatish Balay        self.snes.setUseMF(False)
3275808f684SSatish Balay        self.assertFalse(self.snes.getUseMF())
3285808f684SSatish Balay        self.snes.setUseMF(True)
3295808f684SSatish Balay        self.assertTrue(self.snes.getUseMF())
3305808f684SSatish Balay        self.snes.setFromOptions()
3314a221d59SStefano Zampini        if self.snes.getType() != PETSc.SNES.Type.NEWTONTR:
3325808f684SSatish Balay            x.setArray([2, 3])
3335808f684SSatish Balay            b.set(0)
3345808f684SSatish Balay            self.snes.solve(b, x)
335e0aaf7daSStefano Zampini            self.assertAlmostEqual(abs(x[0]), 1.0, places=5)
336e0aaf7daSStefano Zampini            self.assertAlmostEqual(abs(x[1]), 2.0, places=5)
3375808f684SSatish Balay
3385808f684SSatish Balay    def testFDColor(self):
3395808f684SSatish Balay        J = PETSc.Mat().create(PETSc.COMM_SELF)
3405808f684SSatish Balay        J.setSizes([2, 2])
3415808f684SSatish Balay        J.setType(PETSc.Mat.Type.SEQAIJ)
3425808f684SSatish Balay        J.setUp()
3435808f684SSatish Balay        r = PETSc.Vec().createSeq(2)
3445808f684SSatish Balay        x = PETSc.Vec().createSeq(2)
3455808f684SSatish Balay        b = PETSc.Vec().createSeq(2)
3465808f684SSatish Balay        fun = Function()
3475808f684SSatish Balay        jac = Jacobian()
3485808f684SSatish Balay        self.snes.setFunction(fun, r)
3495808f684SSatish Balay        self.snes.setJacobian(jac, J)
3505808f684SSatish Balay        self.assertFalse(self.snes.getUseFD())
3515808f684SSatish Balay        jac(self.snes, x, J, J)
3525808f684SSatish Balay        self.snes.setUseFD(False)
3535808f684SSatish Balay        self.assertFalse(self.snes.getUseFD())
3545808f684SSatish Balay        self.snes.setUseFD(True)
3555808f684SSatish Balay        self.assertTrue(self.snes.getUseFD())
3565808f684SSatish Balay        self.snes.setFromOptions()
3575808f684SSatish Balay        x.setArray([2, 3])
3585808f684SSatish Balay        b.set(0)
3595808f684SSatish Balay        self.snes.solve(b, x)
3604a221d59SStefano Zampini        self.assertAlmostEqual(abs(x[0]), 1.0, places=4)
3614a221d59SStefano Zampini        self.assertAlmostEqual(abs(x[1]), 2.0, places=4)
3625808f684SSatish Balay
3639be84c52SStefano Zampini    def testNPC(self):
3649be84c52SStefano Zampini        self.snes.appctx = (1, 2, 3)
3659be84c52SStefano Zampini        npc = self.snes.getNPC()
3669be84c52SStefano Zampini        self.assertEqual(npc.appctx, (1, 2, 3))
3679be84c52SStefano Zampini
368*6f336411SStefano Zampini
3695808f684SSatish Balay# --------------------------------------------------------------------
3705808f684SSatish Balay
371*6f336411SStefano Zampini
3725808f684SSatish Balayclass TestSNESLS(BaseTestSNES, unittest.TestCase):
3735808f684SSatish Balay    SNES_TYPE = PETSc.SNES.Type.NEWTONLS
3745808f684SSatish Balay
375*6f336411SStefano Zampini
3765808f684SSatish Balayclass TestSNESTR(BaseTestSNES, unittest.TestCase):
3775808f684SSatish Balay    SNES_TYPE = PETSc.SNES.Type.NEWTONTR
3785808f684SSatish Balay
379*6f336411SStefano Zampini
3805808f684SSatish Balay# --------------------------------------------------------------------
3815808f684SSatish Balay
3825808f684SSatish Balayif __name__ == '__main__':
3835808f684SSatish Balay    unittest.main()
384