[petsc-dev] MatCreateVecs from Fortran problem

Mark Adams mfadams at lbl.gov
Tue Mar 17 13:48:28 CDT 2020


On Tue, Mar 17, 2020 at 2:25 PM Matthew Knepley <knepley at gmail.com> wrote:

> On Tue, Mar 17, 2020 at 2:16 PM Mark Adams <mfadams at lbl.gov> wrote:
>
>>
>>
>>> Passing NULL to MatCreateVecs() means that you do not want a vector out:
>>>
>>>
>> Yes, I want both vectors out and we pass it Vec that have been
>> initialized with PETSC_NULL_VEC
>>
>
> That is wrong.
>
>
>>
>>
>>>
>>> https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Mat/MatCreateVecs.html
>>>
>>> I am guessing that this was broken in 3.7 so that it ignored NULL input,
>>> but we fixed that.
>>>
>>>
>> v3.7 has these CHKFORTRANNULLOBJECT. Well the "fix" broke working code
>>
>
> How could v3.7 have the check? If so, you code would be broken.
>

Barry did it 12 years ago:

https://gitlab.com/petsc/petsc/-/commit/7c54600c425fb8d0ad4ad4bb40f7fac17c980c51


>
>
>> ex73f90t does not initialize the "x" vector that it gives
>> to matcreatevecs_. Should we just remove initialization of our vectors to
>> PETSC_NUILL_VEC?
>>
>
> Yes.
>
>
>> Is the PETSc model that you don't inialized PETSc object to NULL because
>> you check that pointers are valid PETSc pointers instead of testing on
>> NULL? So maybe we should remove all these initializations.
>>
>
> I am not sure what you are asking here.
>

That we should not initialize our PETSc Vec,Mat,etc. with some sort of
NULL.  I am sure this is the case.


>
>   Matt
>
>
>> Thanks,
>> Mark
>>
>>
>>>   Thanks,
>>>
>>>     Matt
>>>
>>>
>>>> call MatCreateVecs(solver%KKTmat,solver%xVec2,solver%bVec2,ierr)
>>>>
>>>> Petsc code:
>>>> PETSC_EXTERN void PETSC_STDCALL matcreatevecs_(Mat *mat,Vec *right,Vec
>>>> *left, int *ierr)
>>>> {
>>>> PetscPrintf(PETSC_COMM_SELF,"ZZZ 1) matcreatevecs_ start right=%p
>>>> left=%p\n",right,left);
>>>>   CHKFORTRANNULLOBJECT(right);
>>>>   CHKFORTRANNULLOBJECT(left);
>>>> PetscPrintf(PETSC_COMM_SELF,"ZZZ 2) matcreatevecs_ start right=%p
>>>> left=%p\n",right,left);
>>>>   *ierr = MatCreateVecs(*mat,right,left);
>>>> }
>>>>
>>>> produces this:
>>>>
>>>> ZZZ 1) matcreatevecs_ start right=0x7fffffff3758 left=0x7fffffff3760
>>>> ZZZ 2) matcreatevecs_ start right=(nil) left=(nil)
>>>>
>>>> Shouldn't  this be?
>>>>
>>>> PETSC_EXTERN void PETSC_STDCALL matcreatevecs_(Mat *mat,Vec *right,Vec
>>>> *left, int *ierr)
>>>> {
>>>>   *ierr = MatCreateVecs(*mat,right,left);
>>>> }
>>>>
>>>>
>>>
>>> --
>>> 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
>>>
>>> https://www.cse.buffalo.edu/~knepley/
>>> <http://www.cse.buffalo.edu/~knepley/>
>>>
>>
>
> --
> 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
>
> https://www.cse.buffalo.edu/~knepley/
> <http://www.cse.buffalo.edu/~knepley/>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-dev/attachments/20200317/6faef96f/attachment.html>


More information about the petsc-dev mailing list