Sorry for the bad subject , i made a mistake.
The correct email subject and message was :

I'm struggling for a very simple error that i can not see. I'm running in a sequential program, for the test.

MatView is giving me for the row 125 :
row 125: (125, 0.)  (107, 0.)

I'm getting those values with MatGetRow :
      row=125
      CALL MatGetRow(MATGLOB,row,nb,testcols,testvalues,IER)
      write(*,*)row,testcols(1),testvalues(1),
     &          testcols(2),testvalues(2)
      CALL MatRestoreRow(MATGLOB,row,nb,testcols,testvalues,IER)

The output is :
      125    125  0.000000000000000E+000     107    0.000000000000000E+000
Which is what i want. It's ok.

Then i'm doing the MatSetValue :
      val = -1
      row = 125
      col = 107
      CALL MatSetValue(MATGLOB,row,col,val,
     &                  INSERT_VALUES, IER)

And i've got the error :
[0]PETSC ERROR: --------------------- Error Message --------------------------------------------------------------
[0]PETSC ERROR: Argument out of range
[0]PETSC ERROR: New nonzero at (125,107) caused a malloc
Use MatSetOption(A, MAT_NEW_NONZERO_ALLOCATION_ERR, PETSC_FALSE) to turn off this check
[0]PETSC ERROR: See https://petsc.org/release/faq/ for trouble shooting.
[0]PETSC ERROR: Petsc Release Version 3.16.4, unknown
[0]PETSC ERROR: /home/jobic/projet/fe-utils/marcus/3.16/test_MatSetValue_loem_3.16p4_openmpi_intel on a named leto4.iusti-calcul.recherche by jobic Wed Feb 9 16:01:51 2022 [0]PETSC ERROR: Configure options --prefix=/local/lib/petsc/3.16/p4/17/openmpi_intel-mkl-works --with-single-library=0 --with-large-file-io=1 --with-debugging=0 --with-blacs=1 --with-blacs-dir=/opt/intel/compilers_and_libraries_2017.1.132/linux/compiler/lib/intel64/ --download-scalapack=1 --download-parmetis=1 --download-make=1 --download-mumps=1 --LIBS=" -Wl,-rpath,/opt/intel/compilers_and_libraries_2017.1.132/linux/compiler/lib/intel64/" --with-blaslapack-dir=/opt/intel/compilers_and_libraries_2017.1.132/linux/compiler/lib/intel64/ --download-metis=1 --download-parmetis=1 --download-ptscotch=1 --download-cmake=1 --download-slepc=1 --download-hdf5=1 --with-zlib=1 --download-szlib=1 --download-suitesparse=1 --download-p4est=1 --download-netcdf=1 --download-triangle=1 --with-shared-libraries=0 --with-cxx-dialect=C++11 -CFLAGS=" -O3 -mtune=core-avx2 -mkl" --COPTFLAGS="-D_POSIX_C_SOURCE=199309L" -CXXFLAGS=" -O3 -mtune=core-avx2 -mkl" -FFLAGS=" -O3 -mtune=core-avx2 -mkl" PETSC_ARCH=openmpi_intel-mkl-17-works [0]PETSC ERROR: #1 MatSetValues_SeqAIJ() at /home/devel/src_linux/petsc-3.16.4/src/mat/impls/aij/seq/aij.c:520 [0]PETSC ERROR: #2 MatSetValues() at /home/devel/src_linux/petsc-3.16.4/src/mat/interface/matrix.c:1398 [0]PETSC ERROR: #3 MatGetRow() at /home/devel/src_linux/petsc-3.16.4/src/mat/interface/matrix.c:558 [0]PETSC ERROR: #4 MatRestoreRow_Fortran() at /home/devel/src_linux/petsc-3.16.4/src/mat/interface/ftn-custom/zmatrixf.c:582

I'm obviously doing something wrong, but where ?

Thanks,

Yann


Le 2/9/2022 à 12:46 PM, Matthew Knepley a écrit :
On Wed, Feb 9, 2022 at 5:56 AM Yann Jobic <[email protected] <mailto:[email protected]>> wrote:

    Dear All,

    I'm facing a strange problem. I did not succeed in putting some values
    in an MPI matrix. I'm using Petsc 3.16.4. The matrix is pre-allocated,
    with some zeroes at the right position.

    To explain the context, it's a finit elements code, thus in the tangent
    matrix creation, i've got a first loop over the elements, and feed the
    matrix accordingly. This part is working. I'm using ADD_VALUES.

    I then have to put the periodic boundary conditions on some nodes, that
    is to say that i've got 1 at the diagonal, and -1 on the mirror element
    of the designated ddl  (i've got a Newton-Raphson minimisation
    procedure). I'm using INSERT_VALUES here.

    According to the documentation, i should do :

    Loop over Elements
    call MatSetValues
    end loop
    call MatAssemblyBegin(A,MAT_FLUSH_ASSEMBLY,ierr);CHKERRA(ierr)
    call MatAssemblyEnd(A,MAT_FLUSH_ASSEMBLY,ierr);CHKERRA(ierr)

    Loop over periodic nodes
    call MatSetValue
    end loop
    call MatAssemblyBegin(A,MAT_FINAL_ASSEMBLY,ierr);CHKERRA(ierr)
    call MatAssemblyEnd(A,MAT_FINAL_ASSEMBLY,ierr);CHKERRA(ierr)

    But it's not working. I don't have those values from the periodic
    boundary condition in the global matrix. The return value of
    MatSetValue
    is 0.

    I tried valgrind, but memory access looks ok. I really don't know
    how to
    debug this. Do you have any idea of what could happen here ?
    Debug ideas ?


This is strange since we have tests for this kind of insertion. I would make a tiny code that adds two neighboring cells and a periodic boundary between the other side. If that fails it will be easy for us to look at the figure out what is happening.

   Thanks,

      Matt

    Many thanks,

    Best Regards,

    Yann



--
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