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.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 >>>>>>> >>>>>>