[petsc-users] error handling

Sam Guo sam.guo at cd-adapco.com
Mon Jan 20 17:28:35 CST 2020


Does it hurt to call Destroy function without calling CreateFunction? For
example
Mat A, B;

PetscErrorCode <https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Sys/PetscErrorCode.html#PetscErrorCode>
 ierr1, ierr2;

ierr1 = MatCreate
<https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Mat/MatCreate.html#MatCreate>(PETSC_COMM_WORLD
<https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Sys/PETSC_COMM_WORLD.html#PETSC_COMM_WORLD>,&A);

if(ierr1 == 0)

{

  ierr2 = MatCreate
<https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Mat/MatCreate.html#MatCreate>(PETSC_COMM_WORLD
<https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Sys/PETSC_COMM_WORLD.html#PETSC_COMM_WORLD>,&B);

}

if(ierr1 !=0 || ierr2 != 0)

{

  Destroy(&A);

  Destroy(&B); // if ierr1 !=0, MatCreat is not called on B. Does it
hurt to call Destroy B here?

}




On Mon, Jan 20, 2020 at 11:11 AM Dave May <dave.mayhem23 at gmail.com> wrote:

>
>
> On Mon 20. Jan 2020 at 19:47, Sam Guo <sam.guo at cd-adapco.com> wrote:
>
>> Can I assume if there is MatCreat or VecCreate, I should clean up the
>> memory myself?
>>
>
> Yes. You will need to call the matching Destroy function.
>
>
>
>> On Mon, Jan 20, 2020 at 10:45 AM Sam Guo <sam.guo at cd-adapco.com> wrote:
>>
>>> I only include the first few lines of SLEPc example. What about following
>>>   ierr = MatCreate(PETSC_COMM_WORLD,&A);CHKERRQ(ierr);
>>>   ierr = MatSetSizes(A,PETSC_DECIDE,PETSC_DECIDE,n,n);CHKERRQ(ierr);
>>> Is there any memory  lost?
>>>
>>> On Mon, Jan 20, 2020 at 10:41 AM Dave May <dave.mayhem23 at gmail.com>
>>> wrote:
>>>
>>>>
>>>>
>>>> On Mon 20. Jan 2020 at 19:39, Sam Guo <sam.guo at cd-adapco.com> wrote:
>>>>
>>>>> I don't have a specific case yet. Currently every call of PETSc is
>>>>> checked. If ierr is not zero, print the error and return. For example,
>>>>>    Mat A; /* problem matrix */
>>>>>    EPS eps; /* eigenproblem solver context */
>>>>>    EPSType type;
>>>>>   PetscReal error,tol,re,im;
>>>>>   PetscScalar kr,ki; Vec xr,xi; 25
>>>>>   PetscInt n=30,i,Istart,Iend,nev,maxit,its,nconv;
>>>>>   PetscErrorCode ierr;
>>>>>   ierr = SlepcInitialize(&argc,&argv,(char*)0,help);CHKERRQ(ierr);
>>>>>   ierr = PetscOptionsGetInt(NULL,NULL,"-n",&n,NULL);CHKERRQ(ierr);
>>>>>    ierr = PetscPrintf(PETSC_COMM_WORLD,"\n1-D Laplacian Eigenproblem,
>>>>> n=%D\n\n",n);CHKERRQ(ierr);
>>>>>
>>>>> I am wondering if the memory is lost by calling CHKERRQ.
>>>>>
>>>>
>>>> No.
>>>>
>>>>
>>>>
>>>>> On Mon, Jan 20, 2020 at 10:14 AM Dave May <dave.mayhem23 at gmail.com>
>>>>> wrote:
>>>>>
>>>>>>
>>>>>>
>>>>>> On Mon 20. Jan 2020 at 19:11, Sam Guo <sam.guo at cd-adapco.com> wrote:
>>>>>>
>>>>>>> Dear PETSc dev team,
>>>>>>>    If PETSc function returns an error, what's the correct way to
>>>>>>> clean PETSc?
>>>>>>>
>>>>>>
>>>>>> The answer depends on the error message reported. Send the complete
>>>>>> error message and a better answer can be provided.
>>>>>>
>>>>>> Particularly how to clean up the memory?
>>>>>>>
>>>>>>
>>>>>> Totally depends on the objects which aren’t being freed. You need to
>>>>>> provide more information
>>>>>>
>>>>>> Thanks
>>>>>> Dave
>>>>>>
>>>>>>
>>>>>>> Thanks,
>>>>>>> Sam
>>>>>>>
>>>>>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20200120/83919c15/attachment.html>


More information about the petsc-users mailing list