[petsc-users] Memory violation in PetscFVLeastSquaresPseudoInverseSVD_Static

Pierre Seize Pierre.Seize at onera.fr
Wed Sep 30 09:52:42 CDT 2020


Hi,

In PetscFVLeastSquaresPseudoInverseSVD_Static, there is
   Brhs = work;
   maxmn = PetscMax(m,n);
   for (j=0; j<maxmn; j++) {
     for (i=0; i<maxmn; i++) Brhs[i + j*maxmn] = 1.0*(i == j);
   }
where on the calling function, PetscFVComputeGradient_LeastSquares, we 
set the arguments m <= numFaces, n <= dim and work <= ls->work. The size 
of the work array is computed in PetscFVLeastSquaresSetMaxFaces_LS as:
   ls->maxFaces = maxFaces;
   m       = ls->maxFaces;
   n       = dim;
   nrhs    = ls->maxFaces;
   minwork = 3*PetscMin(m,n) + PetscMax(2*PetscMin(m,n), 
PetscMax(PetscMax(m,n), nrhs)); /* required by LAPACK */
   ls->workSize = 5*minwork; /* We can afford to be extra generous */

In my example, the used size (maxmn * maxmn) is 81, and the actual size 
(ls->workSize) is 75, and therefore valgrind complains.
Is it because I am missing something, or is it a bug ?

Thanks

Pierre Seize


More information about the petsc-users mailing list