MatSetType + MatSetLocalToGlobalMapping is equivalent to MatCreateIS. Look at the code for MatCreateIS.
Il 13 Dic 2017 7:32 PM, "Franck Houssen" <[email protected]> ha scritto: > Thanks. Working now. I missed that. I believed "MatSetType + > MatSetLocalToGlobalMapping" <=> "MatCreateIS(..., rmap, cmap, ...)" : I got > that wrong. > > Franck > > ------------------------------ > > *De: *"Pierre Jolivet" <[email protected]> > *À: *"Franck Houssen" <[email protected]> > *Cc: *[email protected] > *Envoyé: *Mardi 12 Décembre 2017 20:43:50 > *Objet: *Re: [petsc-dev] MatIS export > > Hello Franck, > From the documentation: "You must call MatSetLocalToGlobalMapping() before > using this matrix type.” (http://www.mcs.anl.gov/petsc/petsc-current/docs/ > manualpages/Mat/MATIS.html) > You are missing this call when your Mat is of type MATIS, thus the runtime > error. > > Thanks, > Pierre > > On 11 Dec 2017, at 5:42 PM, Franck Houssen <[email protected]> > wrote: > > Seems there is a problem with the attachment. Here is the file : > > >> more matExport.cpp > #include <petscmat.h> > #include <petscsys.h> > > int main(int argc, char *argv[]) > { > PetscInitialize(&argc, &argv, "", NULL); > > Mat matrix; > MatCreate(PETSC_COMM_WORLD, &matrix); > const char* matType = (argc >= 2) ? argv[1] : MATMPIAIJ; > PetscPrintf(PETSC_COMM_WORLD, "mat type is %s \n", matType); > MatSetType(matrix, matType); > MatSetSizes(matrix, PETSC_DECIDE, PETSC_DECIDE, 10, 10); > MatSetUp(matrix); > for (int i = 0; i < 10; i++) MatSetValue(matrix, i, i, (double)(i+1.), > ADD_VALUES); > MatAssemblyBegin(matrix, MAT_FINAL_ASSEMBLY); > MatAssemblyEnd(matrix, MAT_FINAL_ASSEMBLY); > > PetscViewer viewer; > PetscViewerBinaryOpen(PETSC_COMM_WORLD, "matExport.bin", > FILE_MODE_WRITE, &viewer); > MatView(matrix, viewer); > PetscViewerDestroy(&viewer); > > PetscViewerASCIIOpen(PETSC_COMM_WORLD, "matExport.log", &viewer); > MatView(matrix, viewer); > PetscViewerDestroy(&viewer); > > PetscViewerASCIIOpen(PETSC_COMM_WORLD, "matExport.mat", &viewer); > PetscViewerPushFormat(viewer, PETSC_VIEWER_ASCII_MATLAB); > MatView(matrix, viewer); > PetscViewerDestroy(&viewer); > > MatDestroy(&matrix); > PetscFinalize(); > } > > > > ------------------------------ > > *De: *"Franck Houssen" <[email protected]> > *À: *[email protected] > *Envoyé: *Lundi 11 Décembre 2017 17:39:40 > *Objet: *[petsc-dev] MatIS export > > Reporting a small bug related to MatIS export (or is this not meant to be > supported ?). > > Franck > > >> rm -f matExport.log matExport.mat matExport.bin; mpirun -n 2 > ./matExport.exe *is*; more matExport.log matExport.mat matExport.bin > mat type is is > [0]PETSC ERROR: ------------------------------ > ------------------------------------------ > [0]PETSC ERROR: Caught signal number 11 SEGV: Segmentation Violation, > probably memory access out of range > [0]PETSC ERROR: Try option -start_in_debugger or -on_error_attach_debugger > [0]PETSC ERROR: or see http://www.mcs.anl.gov/petsc/ > documentation/faq.html#valgrind > [0]PETSC ERROR: or try http://valgrind.org on GNU/linux and Apple Mac OS > X to find memory corruption errors > [0]PETSC ERROR: configure using --with-debugging=yes, recompile, link, and > run > [0]PETSC ERROR: to get more information on the crash. > [1]PETSC ERROR: ------------------------------ > ------------------------------------------ > [1]PETSC ERROR: Caught signal number 11 SEGV: Segmentation Violation, > probably memory access out of range > [1]PETSC ERROR: Try option -start_in_debugger or -on_error_attach_debugger > [1]PETSC ERROR: or see http://www.mcs.anl.gov/petsc/ > documentation/faq.html#valgrind > [1]PETSC ERROR: or try http://valgrind.org on GNU/linux and Apple Mac OS > X to find memory corruption errors > [1]PETSC ERROR: configure using --with-debugging=yes, recompile, link, and > run > [1]PETSC ERROR: to get more information on the crash. > [0]PETSC ERROR: --------------------- Error Message > -------------------------------------------------------------- > > > >> rm -f matExport.log matExport.mat matExport.bin; mpirun -n 2 > ./matExport.exe *mpiaij*; more matExport.log matExport.mat matExport.bin > mat type is mpiaij > :::::::::::::: > matExport.log > :::::::::::::: > Mat Object: 2 MPI processes > type: mpiaij > row 0: (0, 2.) > row 1: (1, 4.) > row 2: (2, 6.) > row 3: (3, 8.) > row 4: (4, 10.) > row 5: (5, 12.) > row 6: (6, 14.) > row 7: (7, 16.) > row 8: (8, 18.) > row 9: (9, 20.) > :::::::::::::: > matExport.mat > :::::::::::::: > %Mat Object: 2 MPI processes > % type: mpiaij > % Size = 10 10 > % Nonzeros = 10 > zzz = zeros(10,3); > zzz = [ > 1 1 2.0000000000000000e+00 > 2 2 4.0000000000000000e+00 > 3 3 6.0000000000000000e+00 > 4 4 8.0000000000000000e+00 > 5 5 1.0000000000000000e+01 > 6 6 1.2000000000000000e+01 > 7 7 1.4000000000000000e+01 > 8 8 1.6000000000000000e+01 > 9 9 1.8000000000000000e+01 > 10 10 2.0000000000000000e+01 > ]; > Mat_0x557ffe276ba0_0 = spconvert(zzz); > :::::::::::::: > matExport.bin > :::::::::::::: > > > > > > > > > > >
