Subject: routines needed for sparse operations


  Off the top of my head, what I have needed so far.

  double returnelementofmatrix(mat,i,j)             GetinRow
  int    replacevalueinmatrix(mat,v,i,j)            SetinRow
  double *returndiagonalofmatrix(mat)               GetDiag(p)
  int    symmetricscaleofmatrix(mat,double *scale)  SymScaleMat
  int    memoryusedbymatrix(mat)                    GetNz, GetSpaceUsed
  int    *removerowscolumnsofmatrix(mat,rows,columns,nrows,ncolumns)
	 returns a map which maps from new rows to old rows
	 ????
  int    *eliminaterowscolumns(mat,rows,x,rhs,numbertobeeliminated)
	 used to eiminate Dirichlet boundary conditions, updates rhs
	 correctly, returns  map which maps back to old rows.

            (subset)

   for the above two I am tempted to suggest that the matrix always
   keep a mapping to the vector, this way the routines don't 
   return the mapping. The matrix is meaningless without the 
   vector and a way to map the vector so it seems the mapping should
   be associated with the matrix, not hanging around on its own 
   as its own variable.


  Maybe there should be a simple matrix class without mappings or
anything fancy and the fancy stuff will be built on a level above.
Most applications would use the fancy stuff directly, and never the
basic matrix stuff.

  Barry




