<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"></head><body style="overflow-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;"><div><br></div><div>   Could you provide more context on when and why "Some values in the solution vectors must be inserted to some different location." during the solution process.</div><div><br></div><div>   SNES provides two "hooks" already that allow some "changes" to the solution during the solve process. Maybe one of the hooks is what you need, if not we may be able to provide another hook.  <a href="https://petsc.org/release/manualpages/SNES/SNESLineSearchSetPreCheck/">https://petsc.org/release/manualpages/SNES/SNESLineSearchSetPreCheck/</a> <a href="https://petsc.org/release/manualpages/SNES/SNESLineSearchSetPostCheck/#sneslinesearchsetpostcheck">https://petsc.org/release/manualpages/SNES/SNESLineSearchSetPostCheck/#sneslinesearchsetpostcheck</a>  It is a delicate process changing solution values within a Newton solve.</div><div><br></div><div><br></div><div><br><blockquote type="cite"><div>On Jul 6, 2023, at 4:13 PM, YuSh Lo <ysjosh.lo@gmail.com> wrote:</div><br class="Apple-interchange-newline"><div><div dir="ltr">Hi Matthew,<div><br></div><div>Thank you. I will try setting up custom linesearch.</div><div><br></div><div>Thanks,</div><div>Josh</div><div><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">Matthew Knepley <<a href="mailto:knepley@gmail.com">knepley@gmail.com</a>> 於 2023年7月6日 週四 下午3:01寫道:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div dir="ltr">On Thu, Jul 6, 2023 at 3:42 PM YuSh Lo <<a href="mailto:ysjosh.lo@gmail.com" target="_blank">ysjosh.lo@gmail.com</a>> wrote:<br></div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">Hi,<div><br></div><div>I am using SNES to solve some nonlinear functions.</div><div>After each iteration, I have an user-defined updating to do. </div><div>Some values in the solution vectors must be inserted to some different location. </div><div>I have tried to do it in the beginning of form RHS and form Jacobian, but the vector is read-only. The results are correct although some warnings are thrown with debug build saying that the vector is in wrong state. I also tried setting a function with SNESSetupdate, but the convergence is bad. </div><div>Is the vector I get using SNESGetSolution the same as the vector that will be used in following forming Jacobian and RHS?, and is it again read only?</div></div></blockquote><div><br></div><div>For these kinds of things, it might be easiest to put this in the line search. I would write a custom line search routine that did your modifications. That way you are assured that it does not short circuit anything else since the line search is where we are updating the solution directly.</div><div><br></div><div>It should also work in the Update(), and we could try to determine what is wrong here, but that would be more digging. I think making it a line search is easier.</div><div><br></div><div>  Thanks,</div><div><br></div><div>     Matt</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div>Thanks,</div><div>Josh</div><div> </div></div>
</blockquote></div><br clear="all"><div><br></div><span class="gmail_signature_prefix">-- </span><br><div dir="ltr" class="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div>What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead.<br>-- Norbert Wiener</div><div><br></div><div><a href="http://www.cse.buffalo.edu/~knepley/" target="_blank">https://www.cse.buffalo.edu/~knepley/</a><br></div></div></div></div></div></div></div></div>
</blockquote></div>
</div></blockquote></div><br></body></html>