That fixed it, thanks. Given that I the nonzero pattern will not change throughout the solve, would it still be unreasonable to use this for larger problems?
-gideon > On Jul 29, 2015, at 1:52 PM, Barry Smith <[email protected]> wrote: > > > To start, immediately after you have created the matrix do what it says call > >> MatSetOption(A, MAT_NEW_NONZERO_ALLOCATION_ERR, PETSC_FALSE) > > this will allow you to build your matrix and work fine for modest size > problems. For larger problems (only when you have your code running and > solving the problem you want) you need to add in more preallocation > information. But to do it now would be premature optimization. > > Barry > > > >> On Jul 29, 2015, at 11:51 AM, Gideon Simpson <[email protected]> >> wrote: >> >> That’s generating malloc errors: >> >> [0]PETSC ERROR: --------------------- Error Message >> -------------------------------------------------------------- >> [0]PETSC ERROR: Argument out of range >> [0]PETSC ERROR: New nonzero at (10,0) caused a malloc >> Use MatSetOption(A, MAT_NEW_NONZERO_ALLOCATION_ERR, PETSC_FALSE) to turn off >> this check >> >> I suspect this is because DMCreateMatrix is picking a sparsity pattern which >> is not consistent with what I need. >> >> -gideon >> >>> On Jul 28, 2015, at 10:10 PM, Barry Smith <[email protected]> wrote: >>> >>> >>> DMCreateMatrix() ? >>> >>> >>>> On Jul 28, 2015, at 9:02 PM, Gideon Simpson <[email protected]> >>>> wrote: >>>> >>>> I’m working with a DMComposite where I have a DMRedundant with 2 >>>> parameters, and then a standard DMDACreate with some number of entires >>>> that I would like to have distributed. For concreteness, suppose it is >>>> >>>> DMCompositeCreate(PETSC_COMM_WORLD, &packer); >>>> DMRedundantCreate(PETSC_COMM_WORLD, 0, 2, &p_dm); >>>> DMCompositeAddDM(packer,p_dm); >>>> DMDACreate1d(PETSC_COMM_WORLD,DM_BOUNDARY_NONE, nx, 1, 1, NULL,&u_dm); >>>> DMCompositeAddDM(packer,u_dm); >>>> DMCreateGlobalVector(packer,&U); >>>> >>>> Now, I would like to construct a matrix for this problem that can be used >>>> for computing Jacobians in a nonlinear solve. Is there a way to get the >>>> matrix size to layout in a “useful” way, in the sense that the first >>>> process, which owns the two degrees of freedom of p_dm and the first N0 >>>> number of the rows of u_dm, controls the corresponding N0+2 rows of the >>>> matrix, and analgously for the second process has the next N1 rows of the >>>> u_dm vector, and has the next N1 rows of the matrix? >>>> >>>> -gideon >>>> >>> >> >
