[petsc-users] Crash when trying to use FD Jacobian
Barry Smith
bsmith at mcs.anl.gov
Fri Jun 5 15:06:47 CDT 2015
> On Jun 5, 2015, at 3:02 PM, Paul T. Bauman <ptbauman at gmail.com> wrote:
>
>
>
> On Fri, Jun 5, 2015 at 3:37 PM, Barry Smith <bsmith at mcs.anl.gov> wrote:
>
> > On Jun 5, 2015, at 1:49 PM, Paul T. Bauman <ptbauman at gmail.com> wrote:
> >
> >
> >
> > On Fri, Jun 5, 2015 at 2:42 PM, Harshad Sahasrabudhe <hsahasra at purdue.edu> wrote:
> > It is not the coloring you need to generate, just the nonzero structure. (From that PETSc computes the coloring) so do as I suggest in my other email.
> >
> > Thanks, I'll try that out.
> >
> > FYI, this information is contained in the libMesh::CouplingMatrix which you can get from the libMesh::DofMap.
>
> Thanks. Maybe using this information could be "automated" within PETSc/libMesh so that one could "trivially" use the finite differencing to compute the Jacobian with coloring within PETSc/libMesh when the Jacobian cannot be provided directly by the user?
>
> Thanks Barry, this is a good suggestion. To be honest, however, since MOOSE does its own finite differencing (I think...) and other libMesh-based infrastructure does as well,
We should fix that :-) Have one common abstraction/API for "differencing" for Jacobians with multiple implementations instead of multiple APIs and multiple implementations :-)
Barry
> this may not be a developer priority immediately. (Might be something good to hack on in a couple weeks at PETSc 20.) That said...
>
> For example within PETSc if one provides the option -snes_fd_color then SNES does
>
> ierr = PetscOptionsBool("-snes_fd_color","Use finite differences with coloring to compute Jacobian","SNESComputeJacobianDefaultColor",flg,&flg,NULL);CHKERRQ(ierr);
> if (flg) {
> DM dm;
> DMSNES sdm;
> ierr = SNESGetDM(snes,&dm);CHKERRQ(ierr);
> ierr = DMGetDMSNES(dm,&sdm);CHKERRQ(ierr);
> sdm->jacobianctx = NULL;
> ierr = SNESSetJacobian(snes,snes->jacobian,snes->jacobian_pre,SNESComputeJacobianDefaultColor,0);CHKERRQ(ierr);
> ierr = PetscInfo(snes,"Setting default finite difference coloring Jacobian matrix\n");CHKERRQ(ierr);
> }
>
> with PETSc/libMesh it would have to stick the correct matrix nonzero structure (from? "libMesh::CouplingMatrix") into the ,snes->jacobian_pre "Jacobian" "matrix"
>
> Looks easy enough. Looking at the SNESSetJacobian documentation, the ctx (in your example, 0) would need to be a pointer a MatFDColoring?
>
> Best,
>
> Paul
More information about the petsc-users
mailing list