Sam,

    I am not sure what your goal is but PETSc error return codes are error 
return codes not exceptions. They mean that something catastrophic happened and 
there is no recovery. 

    Note that PETSc solvers do not return nonzero error codes on failure to 
converge etc. You call, for example, KPSGetConvergedReason() after a KSP solve 
to see if it has failed, this is not a catastrophic failure. If a MatCreate() 
or any other call returns a nonzero ierr the game is up, you cannot continue 
running PETSc.

   Barry


> On Jan 20, 2020, at 5:41 PM, Matthew Knepley <knep...@gmail.com> wrote:
> 
> Not if you initialize the pointers to zero: Mat A = NULL.
> 
>    Matt
> 
> On Mon, Jan 20, 2020 at 6:31 PM Sam Guo <sam....@cd-adapco.com> wrote:
> I mean MatDestroy.
> 
> On Mon, Jan 20, 2020 at 3:28 PM Sam Guo <sam....@cd-adapco.com> wrote:
> Does it hurt to call Destroy function without calling CreateFunction? For 
> example 
> Mat A, B;
> PetscErrorCode  ierr1, ierr2;
> ierr1 = MatCreate(PETSC_COMM_WORLD,&A);
> if(ierr1 == 0)
> {
>   ierr2 = MatCreate(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.mayhe...@gmail.com> wrote:
> 
> 
> On Mon 20. Jan 2020 at 19:47, Sam Guo <sam....@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....@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.mayhe...@gmail.com> wrote:
> 
> 
> On Mon 20. Jan 2020 at 19:39, Sam Guo <sam....@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.mayhe...@gmail.com> wrote:
> 
> 
> On Mon 20. Jan 2020 at 19:11, Sam Guo <sam....@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
> 
> 
> -- 
> 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/

Reply via email to