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
> 
> -----------------------------------------------
> 

Reply via email to