[petsc-users] VecValid
Barry Smith
bsmith at mcs.anl.gov
Thu May 3 21:22:17 CDT 2012
VecValid was unsafe because it looks inside a data structure that may or not be valid.
In Fortran the safe way to do this is to set the value to 0 right after declaration and then check if not zero. So
Mat A
A = 0
.......
if (A .eq. 0) then
call VecCreate( A,ierr)
endif
Barry
On May 3, 2012, at 9:17 PM, Sanjay Govindjee wrote:
> The entry points for our code can vary. Thus a vector for example can get created in a handful
> of routines. But it is possible that the vector has already been created in another routine. So
> we perform a VecValid check on it. If it is false we create it, else we go on and use it. Also at
> the end when we exit the program we clean up with a series of VecDestroy calls but we check first if the vector is valid before calling VecDestroy on it. Same for MatValid/MatDestroy.
>
> Obviously we can store a logical flag in a common block or the like upon creation; but VecValid and
> MatValid were handy utility functions for us.
>
> Is is feasible to call PetscValidHeaderSpecific( ) out of fortran? Or should should I just set up my own
> collection of allocate/deallocate flags.
>
> -sanjay
>
> On 5/3/12 7:08 PM, Matthew Knepley wrote:
>> On Thu, May 3, 2012 at 9:20 PM, Sanjay Govindjee <s_g at berkeley.edu> wrote:
>> We have some code that has worked up through petsc-3.1 and we are in the process of updating it to petsc-3.2.
>>
>> One thing that I can not find mentioned in the change logs (looking all the way back to petsc-2.1.0) or the FAQs is the elimination of the VecValid and MatValid tests.
>>
>> In C, this is now the macro PetscValidHeaderSpecific(). This check now happens in every function call. What
>> logic would need to look for a corrupt Vec beyond CHKERRQ?
>>
>> Thanks,
>>
>> Matt
>>
>> We used to perform operations like:
>>
>> call VecValid(xvec, chk, ierr)
>>
>> if(chk .eqv. PETSC_FALSE) then
>> call VecCreate (PETSC_COMM_WORLD, xvec, ierr)
>> call VecSetSizes (xvec, numpeq, PETSC_DECIDE, ierr)
>> call VecSetFromOptions(xvec, ierr)
>> else
>> ....
>> endif
>>
>> But it seems VecValid and MatValid have been eliminated. Is there a reason for this? or have
>> I made a mistake? Is there a replacement test for invalid Vec and Mat pointers?
>>
>> -sanjay
>>
>>
>>
>>
>> --
>> What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead.
>> -- Norbert Wiener
>
> --
> -----------------------------------------------
> Sanjay Govindjee, PhD, PE
> Professor of Civil Engineering
>
> 779 Davis Hall
> Structural Engineering, Mechanics and Materials
> Department of Civil Engineering
> University of California
> Berkeley, CA 94720-1710
>
> Voice: +1 510 642 6060
> FAX: +1 510 643 5264
>
> s_g at berkeley.edu
> http://www.ce.berkeley.edu/~sanjay
>
> -----------------------------------------------
>
More information about the petsc-users
mailing list