memory bleeding

Jordi Marcé Nogué jordi.marce at upc.edu
Wed May 10 04:23:06 CDT 2006


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




More information about the petsc-users mailing list