PETSc

 

Projects: Big and Small


 

    This is the PETSc to-do list; any help on these would be greatly appreciated

  Optimizations

  
change the numbering of vector elements for DA ordering to run over the z then y then x  rather than the current x, then y, then z. This is to match the way the MPI  cartesian communicator orders things. See petsc-users mail from Sean Dettrick. Should not change the user interface.

Change mpibaij and mpisbaij to use the lastcol1,2 stuff as in mpiaij matsetvalues[blocked] for faster insertion

    DONE - added DASetMatPreallocateOnly(), not tested. Add flag to DA that allows setting the preallocation for the matrices generated but not the zero values (this option can only be used if not doing FD or AD computation of the Jacobian using color, so try to add error checking to prevent users from screwing up.

    (Priority 1) Use blocksize in MPIAIJ to pass in getsubmatrices for faster in ASM.

    Fix MatGet/RestoreRow/ColumnIJ() to have an additional flag indicating if one may change the ia and ja data. Then the reoordering codes need to check that flag since Sparsepack corrupts the data.

Missing functionality (for a particular data storage or size)

     Convert the Tufo-Fischer parallel direct solver to its own PC extend to other matrix types

     Add support for MatLoad() for Matlab .mat files; we already have the view.

  Fix all MatPartitioners to optionally turn on edge weights from the matrix values. Currently the are ignored for all partitioners except parmetis, where they are incorrectly always used.

Add MatMatMult() to dense matrices

  Provide support for shared libraries with gcc on cygwin:  http://cygwin.com/cygwin-ug-net/dll.html

 New functionality

Add PetscConsistent(MPI_Comm,...) error check macros checks that
all processors in comm set the same value; for example the alpha in VecAXPY() etc etc.

When solving F(x) = 0, I would like to be able to scale both the solution
vector x and the residual function vector F, simply by specifying scaling
vectors, sx and sf, say. (These vectors would be the diagonal entries of
scaling matrices Dx and Df.)

I realize this can be achieved, at least in part, within the user residual
function.
This is what I had been doing, until I looked at Denis and Schnabel (sp?),
Brown and Saad, and the KINSOL user guide. It seems one has to take the
scaling matrices into account when computing various norms, when applying the
preconditioner, and when computing the step size, \sigma. No doubt there
are other things I have missed that also need to be done.

  Make PetscBagLoad() machine independent by requiring the user to register the
entire bag before calling PetscBagLoad()

  add GMRESR

  Add PCCreate_LRC() see MatCreateLRC()

  (Priority 1) Add DAVecGetArrayf90() Hmmm, thought I did this a long time ago?

  Support overlapping finite difference grids using DA, see src/dm/da/examples/tutorials/ex6.c introduce geometric ghost points in DA, two sets of global vectors for DA's with and without the geometric ghost points, generate matrix vector to interpolate from global non-geometric ghosted to global geometric ghosted (this can be done by each processor sending its geometric ghost positions to all processors, then local search, what about duplicates?), then do DAGlobalToLocal on the DA's to get local vectors to have all correct ghosted values. Easy.

  Add MatSolveForward/Back() per Jose petsc-maint 9785

    Make a Mat type of PC and KSP.

  allow matrix to share another matrices stuff and its stored numerical values petscmaint 12168

  Interface for vectors to fftw.

   (Priority 1) Add new KSP that allows reordering unknowns (parallel or sequential) for better performance and then calls regular KSP. Or should this be PC?

   (Priority 2) General mechanism for DMGetMatrix() etc ...for composite matrices

  Make all KSP (if possible) use either preconditioned or unpreconditioned norms for monitoring & convergence (e.g. BCGSL)

  I like the idea of having an optional usage logging facility in PetscInitialize() and PetscFinalize().  A mysql database on a server somewhere sounds good. Kind of like how we use FLEXLM for licensed software.
   * this could be used to log -log_summary, -snes_view etc results.

 Cleaner code

  Make common header for the four PC_Factor types and common PCSetFromOptions_Factor for common options.

   (Priority 2) Add more PetscMallocXXX() in MatGetOverlap() and getsubmatrices etc()

  (Priority 0) Fix bad macros with inline functions, which ones?

   Make binary file and socket viewers subclass off a common binary viewer


Better user interface

  Fix GMRES and SYMMLQ so that if they detect happy breakdown the proper cleanup is done and the converged reason is set to KSP_CONVERGED_HAPPY_BREAKDOWN. Currently it is done in ad hoc ways.

  Add SETERR(MPI_Comm,) for errors that happen on ALL processes in the comm so that error message and stack trace are printed only by 0th process in comm

  Add -draw_ps_filename <name> to allow controlling the ps filename opened
by for example -mat_view_draw -draw_type ps

  Add -draw_ps_monochrome (and function interface) to allow generating black and white ps

It would be nice if an error detected in PetscSplitOwnership() could properly point back (somehow) the error in VecSetValues(), MatSetValues etc that caused the
problem.

(Priority 1) Change setfromoptions for sor to use Enum for setting symmetric, local etc

  (Priority 1) Allow setting precision of printed numbers in ASCII viewers.

  (Priority 1) add DAVecGatherAll and DAVecGather

     (Piority 1) Add option to KSP to generate error when convergence fails, rather than continuing with ConvergedReason
     Take out calls to SETERRQ directly in KSP solvers and replace with correct ConvergedReason

   (Priority 1) Add option to SNES to generate error when convergence fails, rather than continuing with ConvergedReason

   (Priority 2) Remove VecLoadIntoVector() and change VecLoad() to take a Vec as input allow setting type before sizes
   provide VecSetMap()

  (Priority 2) Change MatLoad() to take a matrix, move sizes out of MatCreate(), add MatSetMaps(), allow setting type before sizes
   Also allow loading matrices with the same nonzero pattern efficiently.

  (Priority 1) Modify PC_MG to allow setters and fold DMMG and ML (and maybe hypre) into it?????

  Add MatOption POSITIVE_DEFINITE and have KSP default to CG if that plus symmetric set

  Add PetscCommSet/GetName(), make autodefaults for world and self.
Now objects when printed will be able to print the communicator they
live on simply by pulling the name out.

  Algorithmic improvements

    Figure out why gmres as smoother for one iteration can be some much better
    than Richardson? Is it computing some good damping factor?

    Make LSQR properly handle nonzero initial guess by simply computing the residual right hand side; solving that and then adding back the initial guess.

    Add support for point block diagonal scaling the matrix before calling KSPSolve.

Testing


   Test everywhere with Lam

   PetscInt long long

    configure for all packages, with install option for as many as possible

   Test support for requesting 32 bit or 64 bit code

   Test that the Fortran preprocessor actually preprocesses somehow

   Test for --with-precision=longdouble

   We should have performance benchmarking to make sure code performance is not decreased by changes

  Interfaces to external packages

   An almost linear time LU solver for second order elliptic
   operators (http://www.math.uni-leipzig.de/~bebendorf/AHMED.html)
   Another software library on Hierarchical Matrices for Elliptic
   Differential equations (AHMED)
   An approximate LU decomposition can be computed in the algebra of
   hierarchical matrices with almost linear time complexity and with
   the same robustness as the classical LU decomposition method.

   DUNE, the Distributed and Unified Numerics Environment
   (http://hal.iwr.uni-heidelberg.de/dune)
   DUNE aims to reach the following goals:
    - Distributed development
    - Unified access to different grid managers (ALBERTA , UG),
      visualization tools (Grape), solvers, etc.
    - high level abstraction through Operator concept

    ILUPACK www.math.tu-berlin.de/ilupack

   QHULL

   OpenDX

  PR

  Add all PETSc user publications we find from scholar.google.com

  Documentation

  add support to lgrind to map char string tokens with htmlmap. Cannot do it before applying lgrind cause it cannot parse tex. Cannot do it after lgrind because maplatexnames.py cannot  handle the yucky latex lgrind generates. Should be easy cannibalizing stuff from Bill's sowing.

  keywords in maual pages should get listed in help topic list

  need python tool to find all manual page functions that are missing in the users manual.

   Add troubleshooting entries and error messages with web address for common errors.

config/configure.py

  Configure: Look for classes in libraries instead of just functions

  Configure needs to set the right compiler for linking!!  [PETSC #12367] When should
it use C++ to link fortran, when C when Fortran???

   We need to have MPI.py properly detect if the MPI macros
in PETSc can be used and turn them off if they cannot.
Better to add a new flag like PETSC_USE_MPI_MACROS

  If shared libraries is turned on, need configure test that each external package
  can go into shared library. Trouble on Mac

   Check for broken Windows sed. Does anyone here have this broken sed. The signal is all spaces are missing from the petscmachineinfo.h declaration.

   It would be nice if someday configure could get the "compute nodes" to see
   that they have the appropriate shared libraries that are used when compiling
   or otherwise the static libraries are used.