Parallel graph coloring heuristics to color large-scale general jacobian matrices

Hong Zhang hzhang at
Thu Sep 24 11:15:41 CDT 2009


> I've been working for some time on this piece of code for estimating
> large-scale and general jacobian matrices via finite differences whose
> sparsity patterns can be determined a priori. It basically uses a parallel
> graph coloring heuristic to find a good vertex coloring for the column
> intersection graph relative to the jacobian matrix at hand.

If you have sparsity patterns, then petsc can create coloring context
See ~petsc/src/snes/examples/tutorials/ex10d/ex10.c :
    } else { /* Use matfdcoloring */
      ISColoring    iscoloring;
      MatStructure  flag;
      /* Get the data structure of Jac */
      ierr = FormJacobian(snes,x,&Jac,&Jac,&flag,&user);CHKERRQ(ierr);
      /* Create coloring context */
      ierr = MatGetColoring(Jac,MATCOLORING_SL,&iscoloring);CHKERRQ(ierr);
      ierr = 
      ierr = MatFDColoringSetFunction(matfdcoloring,(PetscErrorCode 
      ierr = MatFDColoringSetFromOptions(matfdcoloring);CHKERRQ(ierr);
      /* ierr = 
      ierr = 
      ierr = ISColoringDestroy(iscoloring);CHKERRQ(ierr);
in which, coloring context is created based on Jac sparse pattern.
See its makefile on how to run it.


> Now, I'd like to integrate that code into PETSc, but the problem is that I
> don't know exactly how. So after spending a lot of time sifting through and
> trying to grasp "the logic" of PETSc source code, especially, the source
> code to the MatFDColoring module, I came up with a "tacky" solution
> proposal: firstly, I would call my code in order to obtain the coloring in
> parallel, and then I would have a routine (which would have to be embedded
> in PETSc code base) that, on each processor, would build the "MatFDColoring"
> data structure based on two things, the coloring found and the sparsity
> pattern of the jacobian matrix in question.
> It seems to me that this might work out, though I'm not entirely sure. What
> do you guys think? Is there an easier and/or more "elegant" way to do this?
> Thanks in advance,
> Rafael

More information about the petsc-users mailing list