On Thu, Jul 7, 2011 at 5:02 PM, Adam Byrd <adam1.byrd at gmail.com> wrote:
> Changing the matrix types worked. When solving AX=B, X and B have to be > dense and A can be a sparse format? I'd like to avoid storing the identity > as a dense format, if possible. By the way, the man page for MATAIJ says > it's a sparse format > http://www.mcs.anl.gov/petsc/petsc-as/snapshots/petsc-current/docs/manualpages/Mat/MATAIJ.html > . Yes, AIJ is sparse. > I must ask, is there somewhere in the documentation I should be looking to > figure these sorts of questions out? I feel like a pest, but I'm not sure > where else to look for answers. > Which questions? If you mean about the MatMatSolve, it says the arguments must be dense on the webpage: http://www.mcs.anl.gov/petsc/petsc-as/snapshots/petsc-current/docs/manualpages/Mat/MatMatSolve.html There is also a manual, FAQ, and hundreds of hyperlinked examples. Matt > On Thu, Jul 7, 2011 at 12:20 AM, Jed Brown <jedbrown at mcs.anl.gov> wrote: > >> On Wed, Jul 6, 2011 at 09:53, Adam Byrd <adam1.byrd at gmail.com> wrote: >> >>> I do not want the transpose, but that is what is coming out as the >>> solution. Both my tests show the correct original matrix, and both yield the >>> transpose of the solution verified against Mathematica and the website from >>> which I pulled the 4x4 matrix in test.cpp. Could it be related to the >>> factoring? >> >> >> The problem is that you are trying to solve with an AIJ matrix instead of >> a DENSE matrix. MatMatSolve() calls MatGetArray(). Since this is serial and >> you preallocated enough for a dense matrix, it goes through with no memory >> errors. The storage format for MATAIJ (that happens to be dense) and >> MATDENSE is transposed, so you see the transpose. If you make the solution >> matrix dense, then it will work correctly. >> >> >> --- a/test.cpp >> +++ b/test.cpp >> @@ -48,7 +48,9 @@ int main(int argc,char **args) >> ierr = MatAssemblyEnd(identityMat, >> MAT_FINAL_ASSEMBLY);CHKERRQ(ierr); >> >> //Setup inverseMat >> - ierr = MatDuplicate(testMat, MAT_DO_NOT_COPY_VALUES, >> &inverseMat);CHKERRQ(ierr); >> + ierr = MatCreate(PETSC_COMM_WORLD, &inverseMat);CHKERRQ(ierr); >> + ierr = MatSetSizes(inverseMat, PETSC_DECIDE, PETSC_DECIDE, rows, >> columns);CHKERRQ(ierr); >> + ierr = MatSetType(inverseMat, MATDENSE);CHKERRQ(ierr); >> ierr = MatAssemblyBegin(inverseMat, >> MAT_FINAL_ASSEMBLY);CHKERRQ(ierr); >> ierr = MatAssemblyEnd(inverseMat, >> MAT_FINAL_ASSEMBLY);CHKERRQ(ierr); >> >> >> >> PETSc should be more careful about matching types here. >> > > -- 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 -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20110707/a725b928/attachment.htm>
