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





#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();
}

Reply via email to