memory bleeding
Jordi Marcé Nogué
jordi.marce at upc.edu
Thu May 11 11:23:50 CDT 2006
Ok! thanks! It runs so good!!
I supposed it when I read yours fisrts mails but I tried it last day and
I didn't write the code correctly. When I have readed this mail I've
tried again and I've found the error!
jordi
En/na Matthew Knepley ha escrit:
> The code you have there will create a matrix for every loop iteration,
> and will only destroy one at the end. The new MatMatMult() interface
> has an argument which allows the user to pass in a matrix.
>
> Matt
>
> On 5/10/06, *Jordi Marcé Nogué* <jordi.marce at upc.edu
> <mailto:jordi.marce at upc.edu>> wrote:
>
> Yes, of course I destroy the matrix.... The scheme of my code when I
> create a diagonal Mass-lumping matrix is the code below.
>
> In MatSeqAIJSetPreallocation(M_aux1,6,PETSC_NULL); the number is 6
> because in a general coordinates it's possible this matrix changes in a
> 6x6 full matrix.
>
> "element3D *p_element = lfiber[i].getElement(e)" is a internal
> procedure to obtain information about the element
>
> ------------------------------------------------------------------
>
> Mat M_aux1, M_aux2;
>
> MatCreateSeqAIJ(PETSC_COMM_SELF, 6, 6, 6, PETSC_NULL, &M_aux1);
> MatCreateSeqAIJ(PETSC_COMM_SELF, 6, 6, 6, PETSC_NULL, &M_aux2);
>
> MatSeqAIJSetPreallocation(M_aux1,6,PETSC_NULL);
> MatSeqAIJSetPreallocation(M_aux2,6,PETSC_NULL);
>
> MatSetFromOptions(M_aux1);
> MatSetOption(M_aux1, MAT_SYMMETRIC);
> MatSetOption(M_aux1, MAT_IGNORE_ZERO_ENTRIES);
>
> MatSetFromOptions(M_aux2);
> MatSetOption(M_aux2, MAT_SYMMETRIC);
> MatSetOption(M_aux2, MAT_IGNORE_ZERO_ENTRIES);
>
>
> for(uint32_t i=0; i<nfiber;i++)
> {
> for(uint32_t e=0; e<lfiber[i].nelements;e++)
> {
>
> MatZeroentries(M_aux1);
> MatZeroentries(M_aux2);
>
> element3D *p_element = lfiber[i].getElement(e);
>
> p_element->updateTs();
>
> MatSetValue(M_aux1, 0, 0, p_element->L0 * value.pho / 6.,
> INSERT_VALUES);
> MatSetValue(M_aux1, 1, 1, p_element->L0 * value.pho / 6.,
> INSERT_VALUES);
> MatSetValue(M_aux1, 2, 2, p_element->L0 * value.pho / 6.,
> INSERT_VALUES);
> MatSetValue(M_aux1, 3, 3, p_element->L0 * value.pho / 6.,
> INSERT_VALUES);
> MatSetValue(M_aux1, 4, 4, p_element->L0 * value.pho / 6.,
> INSERT_VALUES);
> MatSetValue(M_aux1, 5, 5, p_element->L0 * value.pho / 6.,
> INSERT_VALUES);
>
>
> MatAssemblyBegin(M_aux1,MAT_FINAL_ASSEMBLY);
> MatAssemblyEnd(M_aux1,MAT_FINAL_ASSEMBLY);
>
>
> MatMatMult(M_aux1,p_element->T,&M_aux2);
> MatMatMult(p_element->TT,M_aux2,&M_aux1);
>
> }
>
> // here I work with the matrix M_aux2, but in this point the
> memory
> // is constant. The code doesn't waste memory
> }
>
> MatDestroy(M_aux1);
> MatDestroy(M_aux2);
>
> ------------------------
>
>
> Thanks,
>
> best regards
>
>
> --
> Jordi Marcé-Nogué
> Dept. Resistència de Materials i Estructures a l'Enginyeria
> Universitat Politècnica de Catalunya (UPC)
>
> Edifici T45 - despatx 137
> ETSEIAT (Terrassa)
>
> phone: +34 937 398 728
> mail: jordi.marce at upc.edu <mailto:jordi.marce at upc.edu>
>
>
>
>
> --
> "Failure has a thousand explanations. Success doesn't need one" -- Sir
> Alec Guiness
--
Jordi Marcé-Nogué
Dept. Resistència de Materials i Estructures a l'Enginyeria
Universitat Politècnica de Catalunya (UPC)
Edifici T45 - despatx 137
ETSEIAT (Terrassa)
phone: +34 937 398 728
mail: jordi.marce at upc.edu
More information about the petsc-users
mailing list