<div dir="ltr">Perhaps a custom Fortran interface that checks for FORTRAN_TYPE_INITIALIZE. <div>That was the first thing that I looked for.</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, Feb 2, 2021 at 11:31 PM Satish Balay <<a href="mailto:balay@mcs.anl.gov">balay@mcs.anl.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">I think the current code is to support:<br>
<br>
if (var not initialized): crate(var).<br>
<br>
And there might be some mapping of 0 to NULL or some other state (hence the choice of -2)<br>
<br>
Satish<br>
<br>
On Tue, 2 Feb 2021, Barry Smith wrote:<br>
<br>
> <br>
>   I cannot remember why I selected -2 as the initial value for PETSc objects in Fortran. Probably because it would ensure a dramatic crash if you used <br>
> an object without initializing it from Fortran.<br>
> <br>
>   It could be changing <br>
> <br>
> config/BuildSystem/config/compilersFortran.py:      self.addDefine('FORTRAN_TYPE_INITIALIZE', ' = -2') <br>
> <br>
> to 0 would mean that if you called destroy on the object and never created it everything would be fine; so you would not need to use any special code to check.<br>
> <br>
> Would that be a better model?<br>
> <br>
>   Barry<br>
> <br>
> <br>
> <br>
> > On Feb 2, 2021, at 2:34 PM, Mark Adams <<a href="mailto:mfadams@lbl.gov" target="_blank">mfadams@lbl.gov</a>> wrote:<br>
> > <br>
> > Thanks Randy, that makes sense.<br>
> > Mark<br>
> > <br>
> > On Tue, Feb 2, 2021 at 3:27 PM Randall Mackie <<a href="mailto:rlmackie862@gmail.com" target="_blank">rlmackie862@gmail.com</a> <mailto:<a href="mailto:rlmackie862@gmail.com" target="_blank">rlmackie862@gmail.com</a>>> wrote:<br>
> > Hi Mark,<br>
> > <br>
> > I don’t know what the XGC code is, but the way I do this in my Fortran code is that I initialize all objects I later want to destroy, for example:<br>
> > <br>
> > mat11=PETSC_NULL_MAT<br>
> > vec1=PETSC_NULL_VEC<br>
> > <br>
> > etc<br>
> > <br>
> > Then I check and destroy like:<br>
> > <br>
> > if (mat11 /= PETSC_NULL_MAT) call MatDestroy(mat11, ierr)<br>
> > <br>
> > etc.<br>
> > <br>
> > Hope this helps,<br>
> > <br>
> > Randy<br>
> > <br>
> > <br>
> > > On Feb 2, 2021, at 12:17 PM, Mark Adams <<a href="mailto:mfadams@lbl.gov" target="_blank">mfadams@lbl.gov</a> <mailto:<a href="mailto:mfadams@lbl.gov" target="_blank">mfadams@lbl.gov</a>>> wrote:<br>
> > > <br>
> > > Satish, a few years ago you helped us transition the XGC Fortran code from v3.7.7 and we seemed to have regressed.<br>
> > > <br>
> > > As I recall we removed the initialization of Mats (for example) in XGC. PETSc seems to initialize them with -2 in Fortran (Albert, cc'ed, verified this today) and I recall that from our previous conversation. As I look at the code now Fortran MatDestroy just goes straight to C, which would explain our crashes when we MatDestroy an uninitialized (-2) Mat.<br>
> > > <br>
> > > What is the correct way to delete with initializing Fortran objects?<br>
> > > <br>
> > > Thanks,<br>
> > > Mark<br>
> > > <br>
> > > <br>
> > <br>
> <br>
> <br>
</blockquote></div>