Hi,<br><br>&nbsp; I&#39;m using the Cubic Line Search algorithm to solve some non-linear systems where the solution vector is constrained to a given space, e.g., some of its elements are only allowed in the range 0 &lt;= x &lt;= 1... outside this domain, the evaluation of the Jacobian is &quot;undefined&quot;, and may lead to wrong directions or unwanted solutions.<br>
<br>&nbsp; I&#39;m trying to use a PreCheck to limit the value of lambda, so that the solution vector would never leave the domain. Is this the right approach?<br><br>&nbsp; Anyway, I&#39;m facing the following problem: I&#39;m calling SNESLineSearchSetPreCheck(snes, MyPreCheck, ctx), but it seems that the PreCheck is not being set correctly... it actually never enters the MyPreCheck function when solving. I&#39;m using petsc-2.3.3-p13... I&#39;ve tried to trace the problem inside Petsc code, and it seems that the problem is that this line:<br>
<br>&nbsp; ierr = PetscObjectQueryFunction((PetscObject)snes,&quot;SNESLineSearchSetPreCheck_C&quot;,(void (**)(void))&amp;f);CHKERRQ(ierr);<br><br>&nbsp; is actually returning PETSC_NULL on f.<br><br><br>&nbsp; The calling sequence is the following:<br>
<br>&nbsp;&nbsp;&nbsp; SNESCreate<br>&nbsp;&nbsp;&nbsp; SNESSetFunction<br>&nbsp;&nbsp;&nbsp; SNESSetJacobian<br>&nbsp;&nbsp;&nbsp; SNESLineSearchSetPreCheck<br>&nbsp;&nbsp;&nbsp; SNESMonitorSet<br>&nbsp;&nbsp;&nbsp; SNESSetFromOptions<br>&nbsp;&nbsp;&nbsp; SNESSetApplicationContext<br>&nbsp;&nbsp;&nbsp; SNESSolve<br><br><br>&nbsp; Thanks for any help,<br>
Edson<br><br>