<div dir="ltr">OK, I misspoke. We do use these x/bVec2 Vecs in our code sometimes.<div><br></div><div>So PETSc did change from v3.7 (Albert and I have been chasing this down for a week). I don't understand why but we have been building the same code base with v3.7 and maint all week.</div><div><br></div><div>It looks to me like optional pointer return arguments are not going to work in Fortran and we need to work around it.</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, Mar 17, 2020 at 3:09 PM Mark Adams <<a href="mailto:mfadams@lbl.gov">mfadams@lbl.gov</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">I see what is happening. I think. We have:<br><div><br></div><div>  call MatCreateVecs(solver%KKTmat,solver%xVec2,solver%bVec2,ierr)<br>  call VecDuplicate(solver%bVec2,solver%rVec2,ierr)<br></div><div><br></div><div>Well it turns out that [x|b]Vec2 are used only in debugging code that is turned off. rVec2 is only used in a SNESSetFunction call.</div><div><br></div><div>What we see in the code is that this call to VecDuplicate throws an error, which we do not catch, in the current PETSc but is silent in v3.7.7. Unless MatCreateVecs does create bVec2 in v3.7 (ie, <span style="color:rgb(80,0,80)">CHKFORTRANNULLOBJECT did not null it out back then, which BTW is not a great side effect of a "CHK" macro IHMO).</span></div><div><span style="color:rgb(80,0,80)"><br></span></div><div><span style="color:rgb(80,0,80)">So we are are seeing a bunch of error messages but the code chugs along after that, for a while. We do get another error eventually, that was a NULL Vec as I recall. I am guessing that </span>SNESSetFunction does not like to get a NULL vector, but we will have to move on to debugging that. (Did SNESSetFunction require a non-null vector since v3.7?)</div><div><br></div><div>Thanks,</div><div>Mark</div><div><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, Mar 17, 2020 at 2:52 PM Matthew Knepley <<a href="mailto:knepley@gmail.com" target="_blank">knepley@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"><div dir="ltr">On Tue, Mar 17, 2020 at 2:48 PM Mark Adams <<a href="mailto:mfadams@lbl.gov" target="_blank">mfadams@lbl.gov</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"><div dir="ltr"><br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, Mar 17, 2020 at 2:25 PM Matthew Knepley <<a href="mailto:knepley@gmail.com" target="_blank">knepley@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"><div dir="ltr">On Tue, Mar 17, 2020 at 2:16 PM Mark Adams <<a href="mailto:mfadams@lbl.gov" target="_blank">mfadams@lbl.gov</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"><div dir="ltr"><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"><div class="gmail_quote"><div><br></div><div>Passing NULL to MatCreateVecs() means that you do not want a vector out:</div><div><br></div></div></div></blockquote><div><br></div><div>Yes, I want both vectors out and we pass it Vec that have been initialized with PETSC_NULL_VEC</div></div></div></blockquote><div><br></div><div>That is wrong.</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 class="gmail_quote"><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 class="gmail_quote"><div></div><div>  <a href="https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Mat/MatCreateVecs.html" target="_blank">https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Mat/MatCreateVecs.html</a></div><div><br></div><div>I am guessing that this was broken in 3.7 so that it ignored NULL input, but we fixed that.</div><div><br></div></div></div></blockquote><div><br></div><div>v3.7 has these CHKFORTRANNULLOBJECT. Well the "fix" broke working code</div></div></div></blockquote><div><br></div><div>How could v3.7 have the check? If so, you code would be broken.</div></div></div></blockquote><div><br></div><div>Barry did it 12 years ago:</div><div><br></div><div><a href="https://gitlab.com/petsc/petsc/-/commit/7c54600c425fb8d0ad4ad4bb40f7fac17c980c51" target="_blank">https://gitlab.com/petsc/petsc/-/commit/7c54600c425fb8d0ad4ad4bb40f7fac17c980c51</a></div></div></div></blockquote><div><br></div><div>What you are saying does not make sense. You are saying:</div><div><br></div><div>  1) We are passing in NULL Vec objects</div><div><br></div><div>  2) Barry put in code to check for such objects</div><div><br></div><div>  3) We are getting valid Vec objects back</div><div><br></div><div>One of those statement is not true</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 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"><div class="gmail_quote"><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 class="gmail_quote"><div>ex73f90t does not initialize the "x" vector that it gives to matcreatevecs_. Should we just remove initialization of our vectors to PETSC_NUILL_VEC? </div></div></div></blockquote><div><br></div><div>Yes.</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 class="gmail_quote"><div>Is the PETSc model that you don't inialized PETSc object to NULL because you check that pointers are valid PETSc pointers instead of testing on NULL? So maybe we should remove all these initializations.</div></div></div></blockquote><div><br></div><div>I am not sure what you are asking here.</div></div></div></blockquote><div><br></div><div>That we should not initialize our PETSc Vec,Mat,etc. with some sort of NULL.  I am sure this is the case.</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 class="gmail_quote"><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 class="gmail_quote"><div>Thanks,</div><div>Mark</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 class="gmail_quote"><div></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>call MatCreateVecs(solver%KKTmat,solver%xVec2,solver%bVec2,ierr)<br></div><div><br></div><div>Petsc code:</div><div>PETSC_EXTERN void PETSC_STDCALL matcreatevecs_(Mat *mat,Vec *right,Vec *left, int *ierr)<br>{<br>PetscPrintf(PETSC_COMM_SELF,"ZZZ 1) matcreatevecs_ start right=%p left=%p\n",right,left);<br>  CHKFORTRANNULLOBJECT(right);<br>  CHKFORTRANNULLOBJECT(left);<br>PetscPrintf(PETSC_COMM_SELF,"ZZZ 2) matcreatevecs_ start right=%p left=%p\n",right,left);<br>  *ierr = MatCreateVecs(*mat,right,left);<br>}<br></div><div><br></div><div>produces this:<br></div><div><br></div><div>ZZZ 1) matcreatevecs_ start right=0x7fffffff3758 left=0x7fffffff3760<br>ZZZ 2) matcreatevecs_ start right=(nil) left=(nil)<br></div><div><br></div><div>Shouldn't  this be?</div><div><br></div><div>PETSC_EXTERN void PETSC_STDCALL matcreatevecs_(Mat *mat,Vec *right,Vec *left, int *ierr)<br>{<br>  *ierr = MatCreateVecs(*mat,right,left);<br>}<br></div><div><br></div></div>
</blockquote></div><br clear="all"><div><br></div>-- <br><div dir="ltr"><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 clear="all"><div><br></div>-- <br><div dir="ltr"><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 clear="all"><div><br></div>-- <br><div dir="ltr"><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>
</blockquote></div>