diff --git a/src/PETSc/SNES.pyx b/src/PETSc/SNES.pyx index 25c09b2..8a4d119 100644 --- a/src/PETSc/SNES.pyx +++ b/src/PETSc/SNES.pyx @@ -554,6 +554,15 @@ cdef class SNES(Object): CHKERR( SNESGetIterationNumber(self.snes, &ival) ) return toInt(ival) + def setFunctionNorm(self, norm): + cdef PetscReal rval = asReal(norm) + CHKERR( SNESSetFunctionNorm(self.snes, rval) ) + + def getFunctionNorm(self): + cdef PetscReal rval = 0 + CHKERR( SNESGetFunctionNorm(self.snes, &rval) ) + return toReal(rval) + def getLinearSolveIterations(self): cdef PetscInt ival = 0 CHKERR( SNESGetLinearSolveIterations(self.snes, &ival) ) @@ -818,6 +827,12 @@ cdef class SNES(Object): def __set__(self, value): self.setIterationNumber(value) + property norm: + def __get__(self): + return self.getFunctionNorm() + def __set__(self, value): + self.setFunctionNorm(value) + property history: def __get__(self): return self.getConvergenceHistory() diff --git a/test/test_snes.py b/test/test_snes.py index a28f80d..ee4faa0 100644 --- a/test/test_snes.py +++ b/test/test_snes.py @@ -62,6 +62,11 @@ class BaseTestSNES(object): snes.its = 0 self.assertEqual(snes.its, 0) # + snes.norm = 1 + self.assertEqual(snes.norm, 1) + snes.norm = 0 + self.assertEqual(snes.norm, 0) + # rh, ih = snes.history self.assertTrue(len(rh)==0) self.assertTrue(len(ih)==0)