<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"><br><br>
What you are looking for is the first one. </blockquote><div><br></div><div>Right. </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">I see this is automatically<br>
set.  I don't see this initialization in petsc - so perhaps the<br>
compiler is doing this automatically? [atleast by gfortran]<br></blockquote><div><br></div><div>Our code initialized PETSC objects to "NULL".</div><div><br></div><div>I was thinking that we should remove this, like ex73f90t. But, yea, if the compiler initializes this to 0 (PETSC_NULL_VEC) then we are broken again.</div><div><br></div><div>It looks like ex73f90t would fail if the compiler initialized the members of our Fortran types to 0 ...</div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<br>
Satish<br>
<br>
-------------<br>
<br>
Breakpoint 2, MAIN__ () at ex1f.F90:51<br>
51            x = PETSC_NULL_VEC<br>
(gdb) list 33<br>
28      !<br>
29            Vec              x,b,u<br>
30            Mat              A<br>
31            KSP              ksp<br>
32            PC               pc<br>
33            PetscReal        norm,tol<br>
34            PetscErrorCode   ierr<br>
35            PetscInt i,n,col(3),its,i1,i2,i3<br>
36            PetscBool  flg<br>
37            PetscMPIInt size<br>
(gdb) p x<br>
$2 = ( v = -2 )<br>
(gdb) p b<br>
$3 = ( v = -2 )<br>
(gdb) p u<br>
$4 = ( v = -2 )<br>
(gdb) p A<br>
$5 = ( v = -2 )<br>
(gdb) p ksp<br>
$6 = ( v = -2 )<br>
(gdb) p pc<br>
$7 = ( v = -2 )<br>
(gdb) c<br>
Continuing.<br>
<br>
Breakpoint 3, MAIN__ () at ex1f.F90:52<br>
52            call MPI_Comm_size(PETSC_COMM_WORLD,size,ierr)<br>
(gdb) p x<br>
$8 = ( v = 0 )<br>
(gdb) <br>
<br>
<br>
<br>
On Tue, 17 Mar 2020, Mark Adams wrote:<br>
<br>
> ><br>
> > Passing NULL to MatCreateVecs() means that you do not want a vector out:<br>
> ><br>
> ><br>
> Yes, I want both vectors out and we pass it Vec that have been initialized<br>
> with PETSC_NULL_VEC<br>
> <br>
> <br>
> ><br>
> > <a href="https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Mat/MatCreateVecs.html" rel="noreferrer" target="_blank">https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Mat/MatCreateVecs.html</a><br>
> ><br>
> > I am guessing that this was broken in 3.7 so that it ignored NULL input,<br>
> > but we fixed that.<br>
> ><br>
> ><br>
> v3.7 has these CHKFORTRANNULLOBJECT. Well the "fix" broke working code<br>
> <br>
> ex73f90t does not initialize the "x" vector that it gives<br>
> to matcreatevecs_. Should we just remove initialization of our vectors to<br>
> PETSC_NUILL_VEC?<br>
> <br>
> Is the PETSc model that you don't inialized PETSc object to NULL because<br>
> you check that pointers are valid PETSc pointers instead of testing on<br>
> NULL? So maybe we should remove all these initializations.<br>
> <br>
> Thanks,<br>
> Mark<br>
> <br>
> <br>
> >   Thanks,<br>
> ><br>
> >     Matt<br>
> ><br>
> ><br>
> >> call MatCreateVecs(solver%KKTmat,solver%xVec2,solver%bVec2,ierr)<br>
> >><br>
> >> Petsc code:<br>
> >> PETSC_EXTERN void PETSC_STDCALL matcreatevecs_(Mat *mat,Vec *right,Vec<br>
> >> *left, int *ierr)<br>
> >> {<br>
> >> PetscPrintf(PETSC_COMM_SELF,"ZZZ 1) matcreatevecs_ start right=%p<br>
> >> left=%p\n",right,left);<br>
> >>   CHKFORTRANNULLOBJECT(right);<br>
> >>   CHKFORTRANNULLOBJECT(left);<br>
> >> PetscPrintf(PETSC_COMM_SELF,"ZZZ 2) matcreatevecs_ start right=%p<br>
> >> left=%p\n",right,left);<br>
> >>   *ierr = MatCreateVecs(*mat,right,left);<br>
> >> }<br>
> >><br>
> >> produces this:<br>
> >><br>
> >> ZZZ 1) matcreatevecs_ start right=0x7fffffff3758 left=0x7fffffff3760<br>
> >> ZZZ 2) matcreatevecs_ start right=(nil) left=(nil)<br>
> >><br>
> >> Shouldn't  this be?<br>
> >><br>
> >> PETSC_EXTERN void PETSC_STDCALL matcreatevecs_(Mat *mat,Vec *right,Vec<br>
> >> *left, int *ierr)<br>
> >> {<br>
> >>   *ierr = MatCreateVecs(*mat,right,left);<br>
> >> }<br>
> >><br>
> >><br>
> ><br>
> > --<br>
> > What most experimenters take for granted before they begin their<br>
> > experiments is infinitely more interesting than any results to which their<br>
> > experiments lead.<br>
> > -- Norbert Wiener<br>
> ><br>
> > <a href="https://www.cse.buffalo.edu/~knepley/" rel="noreferrer" target="_blank">https://www.cse.buffalo.edu/~knepley/</a><br>
> > <<a href="http://www.cse.buffalo.edu/~knepley/" rel="noreferrer" target="_blank">http://www.cse.buffalo.edu/~knepley/</a>><br>
> ><br>
> <br>
<br>
</blockquote></div></div>