Hello<br><br>I am attempting to implement a "hack" that was posted on the list a while back. I'm working with the adjoint linear system solver for a CFD solver. I'm using the ASM (or Block Jacobi) preconditioner with ILU(p) on each of the sub-domains. I use a different Preconditioner matrix (Pmat) than the actual jacobian. What I want to do is destroy the Pmat memory after the ILU factorization is performed. The hack that was posted is copied below:<br>
<pre><i> PCASMFreeSpace(PC pc)<br></i><i> {<br></i><i> PC_ASM *osm = (PC_ASM*)pc->data;<br></i><i> PetscErrorCode ierr;<br></i><i> <br></i><i> if (osm->pmat) {<br></i><i> if (osm->n_local_true > 0) {<br>
</i><i> ierr = MatDestroyMatrices(osm->n_local_true,&osm->pmat);CHKERRQ(ierr);<br></i><i> }<br></i><i> osm->pmat = 0;<br></i><i> }<br></i><i> if (pc->pmat) {ierr = MatDestroy(pc->pmat);CHKERRQ(ierr); pc->pmat = 0;}<br>
</i><i> return 0;<br></i><i> }<br></i></pre><br>However, I've had no luck actually getting the function compiled into petsc. There are no erorrs reported with i type "make" in the asm directory, but when I try to use the function in my application it can't find the symbol while linking. Where does it go in the asm.c file? Does it use "static PetscErrorCode" or "PetscErrorCode PETSCKSP_DLLEXPORT"? Does it have to be added to the .h include files? What has to be done for it work with Fortran? <br>
<br>Any suggestions would be greatly appreciated. This represents a significant chunk of my application's memory (10%-30%) and as such its too much to ignore.
Also is there any chance something like this would make it into an actual PETSc release? <br><br>Gaetan<br><br>