Just to clarify: are you using PETSc within some larger application, which you are hoping to continue executing, even after PETSc produces an error?
Am Di., 21. Jan. 2020 um 01:33 Uhr schrieb Sam Guo <sam....@cd-adapco.com>: > Hi Barry, > I understand ierr != 0 means something catastrophic. I just want to > release all memory before I exit PETSc. > > Thanks, > Sam > > On Mon, Jan 20, 2020 at 4:06 PM Smith, Barry F. <bsm...@mcs.anl.gov> > wrote: > >> >> 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/ >> >>