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 
an object without initializing it from Fortran.

  It could be changing 

config/BuildSystem/config/compilersFortran.py:      
self.addDefine('FORTRAN_TYPE_INITIALIZE', ' = -2') 

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.

Would that be a better model?

  Barry



> On Feb 2, 2021, at 2:34 PM, Mark Adams <[email protected]> wrote:
> 
> Thanks Randy, that makes sense.
> Mark
> 
> On Tue, Feb 2, 2021 at 3:27 PM Randall Mackie <[email protected] 
> <mailto:[email protected]>> wrote:
> Hi Mark,
> 
> 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:
> 
> mat11=PETSC_NULL_MAT
> vec1=PETSC_NULL_VEC
> 
> etc
> 
> Then I check and destroy like:
> 
> if (mat11 /= PETSC_NULL_MAT) call MatDestroy(mat11, ierr)
> 
> etc.
> 
> Hope this helps,
> 
> Randy
> 
> 
> > On Feb 2, 2021, at 12:17 PM, Mark Adams <[email protected] 
> > <mailto:[email protected]>> wrote:
> > 
> > Satish, a few years ago you helped us transition the XGC Fortran code from 
> > v3.7.7 and we seemed to have regressed.
> > 
> > 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.
> > 
> > What is the correct way to delete with initializing Fortran objects?
> > 
> > Thanks,
> > Mark
> > 
> > 
> 

Reply via email to