<div dir="ltr"><div dir="ltr"><br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sun, 24 Jan 2021 at 10:08, Stefano Zampini <<a href="mailto:stefano.zampini@gmail.com">stefano.zampini@gmail.com</a>> wrote:<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">You actually do not need a RestoreStages if you use a scratch<div><br></div><div>Vec stages[2];</div><div><br></div><div>in TS_theta, and pass it back with TSGetStages_Theta. I understand PETSc philosophy is that every Get should have a Restore method, but is this really necessary for TSGetStages?</div></div></blockquote><div><br></div><div><br></div><div>If the only purpose of TSGetStages() is to just give access to other internal PETSc objects (like KSPGetPC() for example), then there is absolutely no need for a Restore.</div><div>The Get/Restore pattern is not universal, it is only used when you need to manage internal resources or state.</div><div><br></div><div>Unless the semantics of TSGetStages() are going to change to manage extra internal stage in TS, the proper implementation is the one Stefano suggested. Add a `Vec stages[2];` in the TSTheta struct, fill it as appropriate in TSGetStages(), and return the `stages` array to the caller. Easy and clean, no API changes, no impact in third party code.</div><div><br></div></div><div><br></div>-- <br><div dir="ltr" class="gmail_signature"><div dir="ltr"><div>Lisandro Dalcin<br>============<br>Senior Research Scientist<br>Extreme Computing Research Center (ECRC)<br>King Abdullah University of Science and Technology (KAUST)<br><a href="http://ecrc.kaust.edu.sa/" target="_blank">http://ecrc.kaust.edu.sa/</a><br></div></div></div></div>