[petsc-users] VecValid

Blaise Bourdin bourdin at lsu.edu
Thu May 3 21:39:52 CDT 2012


Hi,

As a side note: this is actually a problem I have met in one of the TS examples. When using fortran datatypes, the statements "A=0" and "if (A .eq. 0)" are not valid. They would require overloading the assignment and comparison operators.
Can anybody see an alternative?

Blaise

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

-- 
Department of Mathematics and Center for Computation & Technology
Louisiana State University, Baton Rouge, LA 70803, USA
Tel. +1 (225) 578 1612, Fax  +1 (225) 578 4276 http://www.math.lsu.edu/~bourdin









More information about the petsc-users mailing list