function A = readPetscBinMat(filename) % function A = readPetscBinMat(filename) % read Petsc Binary format matrix (no support for imaginary numbers) % 20.05.2003 Antti.Vanne@uku.fi % MATRIX % int MAT_FILE_COOKIE % int number of rows % int number of columns % int total number of nonzeros % int *number nonzeros in each row % int *column indices of all nonzeros (starting index is zero) % PetscScalar *values of all nonzeros MAT_FILE_COOKIE = 1211216; fid = fopen(filename, 'r', 'b'); cookie = fread(fid, 1, 'int'); if (cookie ~= MAT_FILE_COOKIE) error('Not a petsc matrix file.'); end M = fread(fid, 1, 'int'); N = fread(fid, 1, 'int'); totalNnz = fread(fid, 1, 'int'); nnzrows = fread(fid, M, 'int'); colInds = fread(fid, totalNnz, 'int'); data = fread(fid, totalNnz, 'double'); ci = 1; rowInds = zeros(totalNnz, 1); h = waitbar(0, 'Constructing row indices'); for row = 1:M waitbar(row/M, h); if (nnzrows(row) == 0), continue, end % no data in this row rowInds(ci:ci+nnzrows(row)-1) = row*ones(nnzrows(row), 1); ci = ci+nnzrows(row); end close(h); A = sparse(rowInds, colInds+1, data);