Allow selection of different NCP functions for VI
Currently vinewtonssls
uses the Fischer-Burmeister (FB) function as its NCP function. I think we should add an option that allows selection of different NCP functions like the simplest PetscMin
as well as penalized FB.
I have a simple PDE right now on the domain 0 <= x <= 10:
- du(x,t)/dt - d2u(x,t)/dx2 = f(x)
- u(x,0) = x
- u(0,t) = 0
- u(10,t) = 10
- f(x) = if(x<5,-1,1)
that I want to constrain such that 0 <= u <= 10.
I perform the spatial discretization with FEM (in MOOSE) and step out to t = 10 with dt = 1. If I use the default FB NCP function with -snes_type vinewtonssls
, it takes me a cumulative 53 non-linear iterations to solve the 10 time-steps. If I use PetscMin
, it only takes 23 non-linear iterations.
I'll be happy to work on this.
Edited by Alexander