Ok I’ll check that, thanks for taking a look! By the way, when I reduce the 
domain size this error doesn’t appear anymore, so I don’t know whether gdb just 
cannot handle the memory, and start to cut things off which is causing the seg 
fault.

From: Matthew Knepley <[email protected]>
Date: Tuesday, December 13, 2022 at 2:49 PM
To: Yuyun Yang <[email protected]>
Cc: petsc-users <[email protected]>
Subject: Re: [petsc-users] Seg fault in gdb but program runs
On Tue, Dec 13, 2022 at 1:14 AM Yuyun Yang 
<[email protected]<mailto:[email protected]>> wrote:
Here is the error message:

Program received signal SIGSEGV, Segmentation fault.
0x00005555555e73b7 in kronConvert (left=..., right=...,
    mat=@0x555555927e10: 0x555557791bb0, diag=5, offDiag=0)
    at /home/yuyun/scycle-2/source/spmat.cpp:265
265  kronConvert_symbolic(left,right,mat,d_nnz,o_nnz);

d_nnz and o_nnz are pointers, and they are supposed to hold arrays of the 
number of nonzero in each row,
You seem to be passing integers.

  Thanks,

     Matt

On Tue, Dec 13, 2022 at 12:41 PM Matthew Knepley 
<[email protected]<mailto:[email protected]>> wrote:
On Mon, Dec 12, 2022 at 9:56 PM Yuyun Yang 
<[email protected]<mailto:[email protected]>> wrote:
Hello team,

I’m debugging my code using gdb. The program runs just fine if I don’t debug 
it, but when I use gdb, it seg faults at a place where it never experienced any 
seg fault when I debugged it 1-2 years ago. I wonder if this might be caused by 
the PETSc version change?

The only PETSc calls are the MatGetOwnershipRange() calls, which have not 
changed, so I think this is unlikely.

Or something wrong with gdb itself? I’ve included the code block that is 
problematic for you to take a look at what might be wrong – seg fault happens 
when this function is called. For context, Spmat is a class of sparse matrices 
in the code:

What is the debugger output?

  Thanks,

    Matt


// calculate the exact nonzero structure which results from the kronecker outer 
product of left and right

// d_nnz = diagonal nonzero structure, o_nnz = off-diagonal nonzero structure

void kronConvert_symbolic(const Spmat &left, const Spmat &right, Mat &mat, 
PetscInt* d_nnz, PetscInt* o_nnz)

{

  size_t rightRowSize = right.size(1);

  size_t rightColSize = right.size(2);



  PetscInt Istart,Iend; // rows owned by current processor

  PetscInt Jstart,Jend; // cols owned by current processor



  // allocate space for mat

  MatGetOwnershipRange(mat,&Istart,&Iend);

  MatGetOwnershipRangeColumn(mat,&Jstart,&Jend);

  PetscInt m = Iend - Istart;



  for (int ii=0; ii<m; ii++) { d_nnz[ii] = 0; }

  for (int ii=0; ii<m; ii++) { o_nnz[ii] = 0; }



  // iterate over only nnz entries

  Spmat::const_row_iter IiL,IiR;

  Spmat::const_col_iter JjL,JjR;

  double valL=0, valR=0, val=0;

  PetscInt row,col;

  size_t rowL,colL,rowR,colR;


  // loop over all values in left
  for (IiL=left._mat.begin(); IiL!=left._mat.end(); IiL++) {
    for (JjL=(IiL->second).begin(); JjL!=(IiL->second).end(); JjL++) {
      rowL = IiL->first;
      colL = JjL->first;
      valL = JjL->second;
      if (valL==0) { continue; }

      // loop over all values in right
      for (IiR=right._mat.begin(); IiR!=right._mat.end(); IiR++) {
        for (JjR=(IiR->second).begin(); JjR!=(IiR->second).end(); JjR++) {
          rowR = IiR->first;
          colR = JjR->first;
          valR = JjR->second;

          // the new values and coordinates for the product matrix
          val = valL*valR;
          row = rowL*rightRowSize + rowR;
          col = colL*rightColSize + colR;

          PetscInt ii = row - Istart; // array index for d_nnz and o_nnz
          if (val!=0 && row >= Istart && row < Iend && col >= Jstart && col < 
Jend) { d_nnz[ii]++; \
}
          if ( (val!=0 && row >= Istart && row < Iend) && (col < Jstart || col 
>= Jend) ) { o_nnz[i\
i]++; }
        }
      }
    }
  }
}



Thank you,
Yuyun


--
What most experimenters take for granted before they begin their experiments is 
infinitely more interesting than any results to which their experiments lead.
-- Norbert Wiener

https://www.cse.buffalo.edu/~knepley/<http://www.cse.buffalo.edu/~knepley/>


--
What most experimenters take for granted before they begin their experiments is 
infinitely more interesting than any results to which their experiments lead.
-- Norbert Wiener

https://www.cse.buffalo.edu/~knepley/<http://www.cse.buffalo.edu/~knepley/>

Reply via email to