Hello All, I am using MATSBAIJ to make a symmetric hamiltonian matrix, but for some reason MatSetValuesBlocked isn’t inserting anything.
Setup: I want a 4n x 4n symmetric matrix, where each MatSetValuesBlocked inserts a 4x4 sub-matrix of values into the global matrix, positioned by the global ID of two atoms that I am extracting. So the 4x4 interaction sub matrix between atom 1 and atom 4 will be in rows 0-4 and cols 16-20. My non-working implementation: PetscInt bs = 4; ierr = MatCreateSBAIJ(comm, bs, bs*nLocalAtoms, bs*nLocalAtoms, PETSC_DETERMINE, PETSC_DETERMINE, 1, NULL, 1, NULL, H);CHKERRQ(ierr); ierr = MatSetOption(*H, MAT_SYMMETRIC, PETSC_TRUE);CHKERRQ(ierr); ierr = MatSetUp(*H);CHKERRQ(ierr); . . . START LOOP { Calculations... const PetscScalar valmat[16] = {Es[0], Es[1], Es[2], Es[3], Ex[0], Ex[1], Ex[2], Ex[3], Ey[0], Ey[1], Ey[2], Ey[3], Ez[0], Ez[1], Ez[2], Ez[3]}; PetscInt idxm[1], idxn[1]; PetscInt m = 1, n = 1; if (globalIDs[i] < globalIDs[neighidx[0]]-1) { // Insert in upper triangular idxm[0] = globalIDs[i]-1; idxn[0] = globalIDs[neighidx[0]]-1; } else { // swap so we insert on upper triangular idxn[0] = globalIDs[i]-1; idxm[0] = globalIDs[neighidx[0]]-1; } ierr = MatSetValuesBlocked(*H, m, (const PetscInt *) idxm, n, (const PetscInt *) idxn, valmat, INSERT_VALUES);CHKERRQ(ierr); } END LOOP ierr = MatAssemblyBegin(*H, MAT_FINAL_ASSEMBLY);CHKERRQ(ierr); ierr = MatAssemblyEnd(*H, MAT_FINAL_ASSEMBLY);CHKERRQ(ierr); RETURN H Output from -mat_view: Mat Object: 2 MPI processes type: mpisbaij row 0: row 1: row 2: row 3: row 4: row 5: row 6: row 7: row 8: row 9: row 10: row 11: row 12: row 13: row 14: row 15: I also checked -info :mat: and it also reports X unneeded storage space but more importantly, 0 used. I am not sure what is going wrong here. Best regards, Jacob Faibussowitsch (Jacob Fai - booss - oh - vitch) Cell: (312) 694-3391