I mean MatDestroy. On Mon, Jan 20, 2020 at 3:28 PM Sam Guo <[email protected]> wrote:
> 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 <[email protected]> wrote: > >> >> >> On Mon 20. Jan 2020 at 19:47, Sam Guo <[email protected]> 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 <[email protected]> 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 <[email protected]> >>>> wrote: >>>> >>>>> >>>>> >>>>> On Mon 20. Jan 2020 at 19:39, Sam Guo <[email protected]> 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 <[email protected]> >>>>>> wrote: >>>>>> >>>>>>> >>>>>>> >>>>>>> On Mon 20. Jan 2020 at 19:11, Sam Guo <[email protected]> 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 >>>>>>>> >>>>>>>
